Skip to main content
Glama

Server Details

Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.8/5.0

Scored across 58 tools

Disambiguation4/5

Most tools have sharply distinct resource+action targets, and descriptions actively cross-reference neighbors (e.g. set_map_state explains it is session-only while configure_map sets a durable default; route workload vs territory workload is called out repeatedly). The weakest spots are the meta/orchestration cluster (ezt, discover_intent, workflow_advisor, get_guidance, ep_search) and the several *_build variants (auto_build, account_build, direct_build, seed_build, isochrone_build), which an agent must read carefully to separate. Still, explicit 'Related:' cues keep practical ambiguity low.

Naming Consistency3/5

The dominant pattern is snake_case, but it mixes two conventions: verb_noun (create_territory_from_parts, delete_tal, get_map_selection, list_part_layers, analyze_routes) and noun_verb/compound (account_build, territory_merge, cluster_points, isochrone_build), plus bare verbs (analyze, realign, ezt) and reversed names (tasks_get, tasks_result, tasks_cancel). The families are internally consistent (delete_*, *_build, ep_*), so it stays readable, but the set is not uniform.

Tool Count2/5

58 tools is heavy even for a broad enterprise territory platform, and several meta/helper tools (ezt orchestrator, workflow_advisor, discover_intent, get_guidance, three tasks_* equivalents, three ep_* expert-pack tools) pad the surface beyond the core domain. Each individual tool looks purposeful, so this is over-scale rather than noise, but an agent must navigate a very large menu.

Completeness4/5

Coverage is unusually deep: ingestion/geocoding, five build strategies, editing (realign, split, merge, rebalance, extract/reintegrate), analysis, routing, isochrones, scheduling, coverage gaps, export/import, Designer and Dataverse sync, and task plumbing. Minor gaps exist in enumeration/discovery—there is no dedicated tool to list existing alignments, point layers, or routes on a solution (agents must infer from error payloads or ezt:// resources)—but no lifecycle dead ends.

Available Tools

58 tools
account_buildBuild Territories by Account FieldAInspect

Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflict_policy). Adds a new alignment (TAL). Needs an ingested point_layer, grouping_field, part_layer, and tal_label. Grouping values are labels, not balance metrics. part_scope: bbox_intersect (default; parts near the accounts) or explicit with part_filter, e.g. {state_abbr: TX}. A declared visit-frequency column needs visit_frequency_field or ignore_visit_frequency (CLARIFICATION_REQUIRED otherwise). With map_session_id the open map is the input. Returns a task; the result carries tal_id and ts_handle. analyze reports the statistics.

NameRequiredDescriptionDefault
part_idsNoExplicit part selection set. Implies part_scope explicit. Mutually exclusive with part_filter.
tal_labelNo
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerNo
part_scopeNoParts eligible for Account Build geography. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account (radial seeds only; no FCFS inflate). explicit: part_ids or part_filter (e.g. state_abbr FL). Scope fill uses FCFS adjacency inflate from cluster radial seeds, not national nearest-anchor fill.
output_modeNotal is the default. assignments returns assignments_artifact plus an authenticated download_url and a key-less share_url; no ts_handle, tal_id, or map_refresh.tal
part_filterNoAttribute filter resolved via query_parts (e.g. {"state_abbr": ["FL", "GA"]}). Implies part_scope explicit. Mutually exclusive with part_ids.
point_layerYes
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
grouping_fieldNoPoint feature property treated as a grouping label even when numeric.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
conflict_policyNoWhen accounts in one part map to multiple grouping labels, assign the part to the label with the highest account count; ties break by deterministic label sort.plurality_account_count
expected_revisionNo
visit_frequency_fieldNoPoint column that scales territory workload by visits per cycle. Mutually exclusive with ignore_visit_frequency.
ignore_visit_frequencyNoWhen true, every account is one visit per cycle. Mutually exclusive with visit_frequency_field.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
analyzeAnalyze TerritoriesAInspect

Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric totals (e.g. Revenue), workload hours, balance scores, and cross-TAL comparison; hypothetical_moves previews a realign. Input: map_session_id (the open map as it is now), ts_handle, or a completed build job_id (pass tal_ids when several TALs exist). metrics: omit for every declared column, or name them; workload and account_count are always available. Workload needs dwell (dwell_time, the build's recorded dwell, or the layer's dwell_time_field); without it the result has every other statistic, no workload, and workload_omitted.ask_user, the question for the user. analysis_panel=single with map_session_id fills the map's analysis dock (analysis_panel.status=pushed). Territory account_count, metric_totals, and workload_total (minutes) cover only accounts_point_layer, never contractor or visit layers; point_counts_by_layer counts every layer. Drive-time alignments count accounts inside each polygon. Returns a task.

NameRequiredDescriptionDefault
scopeNoOptional — restrict analysis to a subset of parts or territories.
job_idNotask_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input.
metricsNoData field names to aggregate per territory. If omitted, server returns all available metrics.
tal_idsNoTAL IDs to analyze. Defaults to the active TAL when unambiguous.
max_depthNoOptional. For hierarchical TALs, return rollup metrics only up to this depth level. Without it, every level is returned.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
part_layerNoPart layer name. Required when not inferable from the TAL(s). Not used for a drive-time (isochrone) TAL, which is measured by polygon.
compare_talsNoWhen true and multiple tal_ids supplied, include a cross-TAL comparison section.
analysis_panelNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
hypothetical_movesNoOptional. Compute impact of these hypothetical part moves without persisting any change.
visit_frequency_fieldNoOptional visit-frequency point column override for workload recompute.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
analyze_network_coverageAnalyze Contractor Network CoverageAInspect

Finds coverage gaps in a contractor (vendor, service provider, technician, repair shop) network: counts the contractors that reach each demand point (customer, claim, store, ZIP center). Reads contractor_layer (ingested with layer_role=contractors) and demand_layer. coverage: {rule: drive_time, max_minutes} (straight-line travel model, no provider calls), {rule: drive_time, source: isochrone_tal, isochrone_tal_id} (isochrone_build areas around the contractors), or {rule: zip_list} (declared service ZIPs). One trade per call ('*' for all). Missing layers, coverage, or trade return CLARIFICATION_REQUIRED with the question. Writes new layers, never the source: _coverage (contractor_count, single_source, coverage_class red none / amber one / green 2+ / blue saturated, nearest contractor and minutes, capacity_ratio, gap score) and _gaps; gap_territory=true adds the all-gap ZIPs as one territory. Assigns nothing; dividing work is auto_build. Returns a task; the result has coverage_pct, gap and single-source counts, top_gaps, and per-contractor reach.

NameRequiredDescriptionDefault
tradeNoOne trade per call, matched case-insensitively against the comma-separated trade_field values. '*' (or 'all') keeps every contractor. Required when the contractor layer has a trade_field (needs_trade).
coverageNoWhat counts as covered. drive_time with source travel_model (default) needs max_minutes or max_km and uses the calibrated quadkey detour-factor model with CONSTITUTION speed-curve fallback (no provider calls). drive_time with source isochrone_tal needs isochrone_tal_id: a point is covered by a contractor when one of that contractor's isochrone_build polygons contains it (origin_id = contractor id); max_minutes, when given, drops wider time bands. zip_list uses each contractor's service_zip_field.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
tier_fieldNoOverrides the contractor layer's tier_field.
trade_fieldNoOverrides the contractor layer's trade_field.
demand_layerNoPoint layer of demand (customers, claims, stores, or ZIP centers). Defaults to the only other ingested layer.
demand_metricNoNumeric demand column (e.g. request count). Defaults to 1 per point; non-numeric cells count as 0 with warning DEMAND_METRIC_MISSING.
gap_territoryNoAlso draw ZIPs whose demand is all uncovered as one territory in a new TAL.
capacity_fieldNoOverrides the contractor layer's capacity_field. Enables capacity_ratio.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
contractor_layerNoPoint layer of contractors. Defaults to the only layer ingested with layer_role=contractors; otherwise CLARIFICATION_REQUIRED (needs_contractor_layer).
priority_weightsNogap_priority weights; defaults demand 0.6, distance 0.4, single_source_factor 0.5. The formula is echoed in result.priority_formula.
contractor_filterNoColumn -> value (or list of values), e.g. {"tier": "Preferred"}. The key tier maps to tier_field when the layer has no literal tier column.
service_zip_fieldNoOverrides the contractor layer's service_zip_field (required for zip_list).
saturation_thresholdNoContractor count at which a point is saturated (blue).

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
analyze_routesAnalyze RoutesA
Read-onlyIdempotent
Inspect

Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no visit-frequency multiplier), stop coordinates, centroid, and bbox. Synchronous. Needs map_session_id or ts_handle, and dwell from dwell_time or the dwell recorded on the route; unresolved dwell returns CLARIFICATION_REQUIRED (needs_dwell). A circuit's stop_count includes the return to the start, so that stop's dwell counts twice. Facts only: no capacity, ranking, or overload flags. These hours are a different measure from territory and cluster workload; territory statistics come from analyze.

NameRequiredDescriptionDefault
route_idsNoRoutes to report on, in the order returned. Absent means every route in the solution.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
auto_buildAuto-Build TerritoriesAInspect

Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) as a new alignment (TAL). Needs the user's choices: build_mode (fixed_territory_count + territory_count, fixed_workload_target + target_workload hours, or scoped_split), objective (workload_bias for drive time + dwell; metric + metric_bias for a column such as Revenue; biases sum to 100), and dwell_time (a column or a stated scalar). Each missing choice returns CLARIFICATION_REQUIRED with ask_user; a declared visit-frequency column also needs visit_frequency_field or ignore_visit_frequency. part_scope: bbox_intersect (default; parts near the accounts, can reach national scale) or explicit with part_filter, e.g. {state_abbr: TX}. The filter limits parts; accounts outside it stay on the layer, unassigned (UNASSIGNED_ACCOUNTS). With map_session_id the open map is the input. Returns a task; national builds take minutes and estimated_remaining_ms is capped, not a forecast. The result carries tal_id, ts_handle, and phase_timings_ms; analyze has statistics.

NameRequiredDescriptionDefault
part_idsNoExplicit part selection set. Implies part_scope explicit. Mutually exclusive with part_filter.
objectiveNo
tal_labelYes
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
build_modeNo
dwell_timeNo
part_layerYes
part_scopeNoParts eligible for partition. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account; those parts are rarely adjacent, so territories come back as scattered pieces (warning POINT_MATCHED_SPARSE_SCOPE) — use it only when that is the goal. explicit: part_ids or part_filter (e.g. state_abbr TX).
output_modeNotal is the default. assignments returns assignments_artifact plus an authenticated download_url and a key-less share_url; no ts_handle, tal_id, or map_refresh.tal
part_filterNoAttribute filter resolved via query_parts (e.g. {"state_abbr": "TX"}). Implies part_scope explicit. Mutually exclusive with part_ids.
point_layerYes
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
expected_revisionNo
visit_frequency_fieldNoPoint column that scales territory workload by visits per cycle. Mutually exclusive with ignore_visit_frequency. Required as use-or-ignore when the point layer declares a visit-frequency column.
ignore_visit_frequencyNoWhen true, every account is one visit per cycle. Mutually exclusive with visit_frequency_field. Required as the ignore choice when the point layer declares a visit-frequency column.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
calculate_routeCalculate RouteAInspect

Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time, per-leg timings, and geometry from TomTom or Azure Maps, and draws the path with numbered stops on the open map (map_session_id). Creates no territory and changes no assignment. route_type is the user's choice: circuit (returns to start), tour (ends at the required end stop), or open_tour (one way). stop_sets are visited in the order given and no stop moves between sets; order is optimize or as_given; group_by_field adds priority bands. Stops are inline coordinates or point-layer references (e.g. source.filter.territory_id); point_ids and stop_id are point_id values (visits: <account_id>#). A new route_id adds a second route; recalculating an existing route_id replaces it, e.g. to drop a stop. dwell_time is stored for analyze_routes. Route drive time is a different measure from territory workload. No provider key returns ROUTING_NOT_CONFIGURED; past the monthly quota, PROVIDER_QUOTA_EXCEEDED. Returns a task.

NameRequiredDescriptionDefault
endNoDestination. Required for route_type=tour, rejected otherwise.
startYesOrigin. Must resolve to exactly one stop.
route_idNoStable identity for the route inside the solution. A new route_id adds a route alongside the existing ones; reusing a route_id replaces that route in place. To add or drop a stop, call again with the SAME route_id and the revised stop list — there is no add-stop tool and delete_route is for dropping the whole route. Defaults to a slug of route_label, else a generated id.
depart_atNoRFC 3339 departure time. Drives traffic-aware durations. Defaults to now.
stop_setsYes
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
route_typeNocircuit returns to start; tour finishes at the declared end (required); open_tour lets the optimizer choose the final stop and never returns to start.
route_labelNoDisplay name for the route on the map and in the legend. Seeds route_id when route_id is omitted.
travel_modeNocar
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
include_geometryNoSet false to skip the route polyline when only sequence and timings are needed.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
cluster_pointsCluster PointsAInspect

Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group_id) on every point and colors the layer by it, replacing any prior color classification (size and shape channels stay). Needs build_mode (fixed_territory_count or fixed_workload_target), objective, and dwell_time, as in auto_build; a missing one returns CLARIFICATION_REQUIRED with the question. point_filter (e.g. {STATE: FL}) clusters a subset of the layer; unmatched points stay, ungrouped. Max 25,000 points after the filter. seed_point_layer, a second point layer such as technician homes, anchors one group per seed (the seed count matches the group count, else seed_count_mismatch); seed_attraction 0-100 (default 70) is the pull of each seed on its group. Returns a task; the result lists groups with point_count, workload_hours, and point_ids.

NameRequiredDescriptionDefault
objectiveNo
point_idsNoOptional point_id / row_id / account_id values to cluster. Unmatched points stay on the layer ungrouped.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
build_modeNo
dwell_timeNo
group_fieldNogroup_id
point_layerYes
point_filterNoOptional property filter on the named point layer. Keys are point properties (equality or IN list). Multiple keys are AND. Example: {"STATE": "FL"}. Unmatched points stay on the layer ungrouped. part_filter and part_scope are not used here.
metric_fieldsNoMetric columns to declare on the point layer (same shape as ingest_accounts metric_fields).
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
seed_attractionNoHow hard each group centroid is held at its seed. 100 pins it at the seed; 0 seeds only the starting point and lets the solver drift to the workload centroid. Requires seed_point_layer.
seed_point_layerNoSecond ingested point layer whose locations anchor the group centroids one-to-one (technician homes, depots). Must differ from point_layer; its point count must equal the group count.
expected_revisionNo
group_label_prefixNoGroup
visit_frequency_fieldNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
configure_mapConfigure MapAInspect

Updates map settings on the Territory Solution and refreshes the live map: project_name (map heading), theme (dark | light basemap and UI style), loaded_part_layers ([] hides ZIP/part outlines; builds never load them), active_part_layer, active_tal_id, center and zoom (default view; the live map jumps there), and point symbology. point_layer_classifications entries are {point_layer, field, method: quantile | equal_interval | categorical | manual, class_count 2-12, channel: color | size | shape, optional colors/sizes/shapes/style}; the server computes the breaks and returns per-class counts. One classification per channel per layer; clear:true removes one. Shapes include circle, square, triangle, diamond, star, cross, house, pin, flag, hexagon, pentagon, shield, arrow_up, building, person. classification without point_layer is a project-level setting that does not color points. Input: map_session_id (the live map) or ts_handle.

NameRequiredDescriptionDefault
zoomNoDefault MapLibre zoom (0-24). Persists to map_config.zoom. An open MC jumps when this request includes center and/or zoom.
themeNoMap Component basemap and UI theme ('dark' or 'light'; default 'dark'). Persists to ts.properties.map_config.theme and repaints the open map session live.
centerNoDefault camera center as GeoJSON/MapLibre [longitude, latitude]. Persists to map_config.center. An open MC jumps when this request includes center and/or zoom; later config_changed events without those fields leave the camera where it is.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
presentationNoNamed presentation context stored on map_config and restored when the TS opens.
project_nameNoFirst-class Territory Solution short name shown as the Map Component panel title. Persists to ts.properties.map_config.project_name; when an MC session is open for this TS, configure_map pushes config_changed so the title refreshes without reopening the map.
active_tal_idNoDurable active alignment restored when the Territory Solution opens.
classificationNoProject-level map_config classification (e.g. primary metric context for selection-impact preview). It leaves point colors unchanged; a patch naming a point_layer is routed to point_layer_classifications with a warning.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
merge_strategyNo
active_part_layerNo
expected_revisionNo
loaded_part_layersNo
expected_content_hashNo
point_layer_classificationsNoApplied point-layer symbology. The server computes breaks from the in-session point features, writes ts.properties.point_layers[].<channel>_classification, and pushes config_changed so an open MC repaints. One entry per layer/channel.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
create_territory_from_partsCreate Territory from PartsAInspect

Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the live map's Territory Solution is updated and repainted; otherwise ts_handle (a new ts_handle is returned). map_session_id wins when both are passed. territory_name is a display label; the result's created_territory.territory_id is the stable id for later edits, plus leaf_territories and selection_summary (duplicate_part_ids). Dwell is optional here and is not inherited from an earlier auto_build; dwell_time is recorded for later analyze. Without it, analyze reports every statistic except workload and returns workload_omitted.ask_user. Returns a task.

NameRequiredDescriptionDefault
tal_idNoExisting TAL to append the new territory to; omit to start a new alignment.
part_idsYesParts for the new territory, e.g. committed part_ids from get_part_selection.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
part_layerYes
repair_policyNoTopology repair policy for dissolved geometry (default, strict, or report_only). Interior holes occupied by existing territories in the TS are never filled.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
territory_nameYes
territory_pathNo
conflict_policyNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
delete_point_layerDelete Point LayerA
Destructive
Inspect

Point-layer delete: removes one point layer and its account points from the Territory Solution and the open map, in one synchronous call. Needs point_layer (the layer id or its exact unique label), plus map_session_id or ts_handle. Territories, part overlays, and other point layers stay. A layer that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_POINT_LAYER with matching_point_layers. ingest_accounts does not replace an existing layer; delete it here first. A visit layer derived from the deleted layer is reported and kept.

NameRequiredDescriptionDefault
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
point_layerYesPoint layer to delete: the point_layer id, or an exact unique layer label.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
delete_routeDelete RouteA
Destructive
Inspect

Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, plus map_session_id or ts_handle. A route that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_ROUTE with matching_route_ids. A single stop is removed by recalculating the same route_id with calculate_route.

NameRequiredDescriptionDefault
route_idYesRoute to delete: the route_id, or an exact unique route label. Removing one stop is a calculate_route with the same route_id and the remaining stops.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
delete_talDelete AlignmentA
Destructive
Inspect

Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Needs tal_id or the TAL's exact unique label, plus map_session_id or ts_handle. Points, part-layer overlays, and routes stay; the map switches to a remaining alignment or to points only. A TAL that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_TAL. One territory is removed with delete_territory instead.

NameRequiredDescriptionDefault
tal_idYesTerritory layer / alignment to delete: tal_id or an exact unique TAL label. Removes the whole layer in one call (users say territory layer / all territories / alignment more often than TAL). One leaf is removed with delete_territory.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
delete_territoryDelete TerritoryA
Destructive
Inspect

Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Territory Solution from map_session_id or ts_handle. A territory that is already gone returns ok with already_absent=true and no task; otherwise returns a task and the open map repaints. Related: territory_merge hands a leaving rep's territory to its neighbors; delete_tal removes a whole alignment in one call.

NameRequiredDescriptionDefault
tal_idYesTarget TAL containing the leaf to delete.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerNoPart layer name when not inferable from the TAL (e.g. us_zips).
territory_idYesLeaf territory_id (e.g. tal-t1-t1) or a unique display name/label alias (e.g. T1).
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
expected_revisionNoOptional optimistic concurrency revision.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
direct_buildBuild Territories from AssignmentsAInspect

Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via territory_path) and adds them to the Territory Solution as a new alignment (TAL). Assignments come only as an assignments_handle (aup_...) from request_assignment_upload (the file, csv_text, or assignment rows). Sheets with Postal Code plus Territory/Region/Division columns are mapped automatically. Duplicate part_ids follow duplicate_part_policy (default keep_first). Returns a task; the result carries tal_id and ts_handle and paints the open map. Location points load with ingest_accounts; balanced partitions come from auto_build; grouping by a column is account_build.

NameRequiredDescriptionDefault
tal_idNoOptional caller-supplied TAL identifier. When omitted, the server derives a stable ID from tal_label. Supplied IDs must not collide with an existing TAL in the input TS.
tal_labelYes
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerYes
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
expected_revisionNo
assignments_handleNoRequired. upload_handle (aup_...) from request_assignment_upload. Single-use: the build claims it.
missing_part_policyNoControls assigned part IDs that are absent from the selected polygon part layer. fail returns UNKNOWN_PART_ID. drop_with_warning omits them, lists them in invalid_parts, and proceeds with geometry-covered assignments.fail
duplicate_part_policyNoWhen the same part_id maps to different territory_path values, keep_first (default) keeps the first row and skips the rest with a warning; keep_last keeps the last row; fail aborts with CLARIFICATION_REQUIRED.keep_first

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
discover_intentDiscover Workflow IntentA
Read-onlyIdempotent
Inspect

Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tier1_tool, null when the request is ambiguous) and alternatives, required_inputs, clarifying_questions for missing inputs, and the workflow guide inline as guidance {uri, title, excerpt}. Covers building territories (auto_build, account_build, direct_build, cluster_points, seed_build), editing (realign, split, merge, rebalance), analyze, geocoding and ingest, showing a ZIP or part layer, routes, drive-time areas (isochrone_build), recurring visit schedules (schedule_visits), contractor coverage gaps (analyze_network_coverage), listing points in a territory (points_in_territory), and moving a Territory Solution to or from EasyTerritory Designer.

NameRequiredDescriptionDefault
contextNoOptional state flags that tailor the recommended workflow.
user_requestYesThe raw natural-language request to classify.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
ensure_map_viewerWait for Map ViewerA
Read-onlyIdempotent
Inspect

Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per call; the result reports requested_wait_seconds and max_wait_seconds). Works the same for the in-chat map and the map_url tab. Returns VIEWER_NOT_CONNECTED while the map is still closed; the same call can be repeated while the person opens it. Build, analyze, and selection results paint live once the viewer is connected.

NameRequiredDescriptionDefault
wait_secondsNoOptional server-side wait window. 0 returns the current snapshot only. Values above 30 are clamped to 30 s per call; on VIEWER_NOT_CONNECTED the error details carry requested_wait_seconds, max_wait_seconds, and next_call (call again).
map_session_idYesOpen map session (msess_...) from get_map_visualization.
poll_interval_msNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
ep_graph_traverseTraverse Expert Pack LinksA
Read-onlyIdempotent
Inspect

Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to depth hops. Returns no edges unless the pack ships a _graph.yaml.

NameRequiredDescriptionDefault
depthNo
file_pathYes
edge_kindsNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
ep_list_topicsList Expert Pack TopicsA
Read-onlyIdempotent
Inspect

Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional type filter.

NameRequiredDescriptionDefault
typeNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
export_geojsonExport GeoJSONAInspect

Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes with numbered stops, each carrying its displayed style. tal_ids, point_layers, and route_layers narrow it; include_points / include_routes omit a family. Input: map_session_id, ts_handle, or a completed build job_id. Returns a task whose result is geojson_artifact, share_url (key-less browser download for one hour; give the user share_with_user), and download_url (GET with the API key), never an inline body. Both serve a plain .geojson file. import_geojson reopens the file.

NameRequiredDescriptionDefault
job_idNotask_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input.
tal_idsNoTALs to materialize; omit for all.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
point_layersNoPoint layers to include; omit for all.
route_layersNoroute_id values to include; omit for all. Each exported route emits one route_path feature plus one route_stop feature per visit (never coalesced).
include_pointsNo
include_routesNoSet false to drop the whole route family regardless of route_layers.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
extract_tal_branchExtract Alignment BranchAInspect

Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate can edit just that region. Returns the extract plus branch_metadata, which reintegrate_branch needs later. exclude_locked (default true) leaves locked territories out.

NameRequiredDescriptionDefault
tal_idYesHierarchical TAL (alignment) to branch from.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
delegate_refNo
exclude_lockedNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
expected_revisionNo
branch_territory_pathNo
expected_content_hashNo
branch_rollup_territory_idNoRollup territory whose subtree becomes the branch. Or pass branch_territory_path.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
eztEasyTerritory AssistantAInspect

Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_handle, assignments_handle, map_session_id, or ts_handle. An uploaded CSV is parsed, staged, and ingested onto the open map. target_hours / workload_target map to a fixed-workload auto_build. Missing build inputs (part layer, alignment name, sizing, balance, dwell) return CLARIFICATION_REQUIRED with the questions. The granular tools do the same steps individually.

NameRequiredDescriptionDefault
argsNo
requestYes
csv_fileNoHost file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
state_factsNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
accounts_handleNoupload_handle (aup_...) from request_account_upload.
assignments_handleNoupload_handle (aup_...) from request_assignment_upload.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
geocode_addressGeocode AddressesAInspect

Geocode-only pass: turns staged customer addresses into coordinates with match confidence, without loading a map layer. The rows are staged with request_account_upload (file, csv_text, or rows; up to 10,000 rows here) and passed as its upload_handle; the handle is not claimed, so ingest_accounts can load the same rows afterward. Accepts address/address_line1/street, city, state, and postal columns (common source headers are mapped). accept_suboptimal_geocodes=true accepts ZIP-centroid matches. Cached addresses are free; billable lookups count against a monthly per-key quota, and past it the result is PROVIDER_QUOTA_EXCEEDED with limit, used, remaining, and period_resets_at. Returns a task; the result has summary, sample_rows (10), failed_rows (first 50), a geocoded_rows_artifact with share_url for every row, and suggested_ingest. ingest_accounts alone also geocodes while it loads the map layer.

NameRequiredDescriptionDefault
use_cacheNo
region_hintNo
country_hintNo
upload_handleYesupload_handle (aup_...) from request_account_upload holding the address rows. Not claimed: ingest_accounts can reuse it.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
min_confidenceNo
force_regeocodeNo
accept_suboptimal_geocodesNoWhen true, accept suboptimal geocodes (e.g. ZIP centroids). Default false so geocode-only workflows surface NO_OPTIMAL_GEOCODE for human review.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
get_guidanceGet Startup GuidanceA
Read-onlyIdempotent
Inspect

Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, and result.seat for the caller's key (plan standard|trial, key_expires_at, and quota_remaining for geocoding, routing, and isochrone requests). Read-only. Useful at the start of a session or for a host that does not show server instructions.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
get_map_selectionGet Map SelectionA
Read-onlyIdempotent
Inspect

Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from request_part_selection. Covers selections the person started from the map legend. realign takes these part_ids as moves with a leaf territory_id.

NameRequiredDescriptionDefault
map_session_idYesOpen map session (msess_...) from get_map_visualization.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
get_map_visualizationOpen MapAInspect

Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territory Solution (e.g. yesterday's work) from ts_handle or a completed job_id. Idempotent per user_id: a second call returns the same map. new_project=true replaces the open workspace with an empty project. theme: dark | light (basemap and UI style; default dark). presentation.view_name: empty | points_only | review | selection. Apps-capable hosts render the map in chat (ui://easyterritory/map-viewer); other clients open map_url in a browser. Later map tools take map_session_id. ensure_map_viewer reports when the person has the map open.

NameRequiredDescriptionDefault
modeNoview — read-only map review/share/verification, no selection commits. select — allows transient local selection and committed selection events.view
themeNoMap Component basemap and UI theme ('dark' or 'light'; default 'dark').
job_idNotask_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input.
user_idNoStable caller id; a second call with the same user_id returns the same map.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
new_projectNoStart a fresh map session (session_exists=false) instead of reusing the caller's open workspace. Without ts, ts_handle, or job_id, opens an empty project; with a TS source, opens that Territory Solution on a new session without carrying over prior routes, overlays, or analysis panels. Omitted empty+view reuses the existing project.
presentationNo
active_tal_idNoAlignment to show as active.
expiry_secondsNoRequested session TTL in seconds. Server may cap at policy maximum.
interaction_flagsNoOnly meaningful in select mode.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
get_part_selectionGet Part SelectionA
Read-onlyIdempotent
Inspect

Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status awaiting_user_selection, committed, expired, or cancelled, and once committed the selected part_ids (with assigned and unassigned part_ids when a TAL is active). While awaiting, the response carries recommended_poll_delay_ms. Committed part_ids feed realign, create_territory_from_parts, or analyze.

NameRequiredDescriptionDefault
selection_task_idYesselection_task_id (psel_...) from request_part_selection.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
import_dataverse_viewImport Dynamics 365 ViewAInspect

Microsoft Copilot only (Entra sign-in): reads a Dynamics 365 account view server to server, as the signed-in user, and stages it as an account upload. No rows pass through the agent. view_id (or an exact view_name) comes from list_dataverse_views. The server adds accountid, name, and the address1 location columns to the view; they arrive as latitude, longitude, address, city, state, postal_code, country. Returns a task (follow next_action / sleep_ms, fetch the result once); the result is the same shape as an account upload: upload_handle, row_count, csv_headers, preview, upload_warnings, geocode_plan, and suggested_ingest. Confirm the column roles with the user, then ingest_accounts(**suggested_ingest.args). Limit 100,000 accounts (DATAVERSE_VIEW_TOO_LARGE). Other clients get DATAVERSE_NOT_AVAILABLE: use request_account_upload instead.

NameRequiredDescriptionDefault
view_idNoAccount view id from list_dataverse_views (system or personal).
view_nameNoExact view name, when view_id is unknown. Ambiguous names return DATAVERSE_VIEW_AMBIGUOUS.
point_layerNoPoint layer name ingest_accounts will create.accounts
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
environment_urlYesDynamics 365 environment from list_dataverse_views.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
import_designer_projectImport Designer ProjectAInspect

Opens an EasyTerritory Designer project as a Territory Solution: the server exports it from Designer and imports it (territories with part_ids, point layers up to 250,000 features, routes). No file passes through the agent. Returns a task; the result has ts_handle and designer_warnings. With map_session_id the project replaces the open map's content. include_points / point_layers / include_routes / include_manual_polygons narrow it; part_layer forces the part layer. A Designer part layer is mapped to its EZT part layer id (listed in designer_warnings); one with no EZT match fails UNKNOWN_PART_LAYER with available_part_layers; retry with the user's choice as part_layer. Requires link_designer; project_id comes from list_designer_projects.

NameRequiredDescriptionDefault
part_layerNo
project_idYesDesigner project id from list_designer_projects.
point_layersNo
include_pointsNo
include_routesNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
include_manual_polygonsNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
import_geojsonImport GeoJSONAInspect

Opens a GeoJSON FeatureCollection (points, or a territory file, plain or gzip/zip) as a Territory Solution; returns ts_handle and a summary. A file of any real size moves by reference, never inline: call with no file argument for an upload_url (give the user share_with_user, or POST it with curl_example), then poll import_geojson(upload_handle) every recommended_poll_delay_ms until upload_status=received. geojson_file takes a host file (download_url). Inline geojson / geojson_text / geojson_gzip take at most 256 KB; a larger one returns INLINE_PAYLOAD_TOO_LARGE with the upload_url call to make. Polygons without part_ids need part_layer + overlay_policy=centroid_within. For a Designer project, use import_designer_project.

NameRequiredDescriptionDefault
geojsonNoGeoJSON FeatureCollection: point features and/or EZT-exported territory features carrying part_ids. Incoming properties.style (color / opacity / size / shape / weight) on features and point_layers[] / route_layers[] is kept as-is; only missing paint is filled, so a reopened export paints exactly as saved (ts-reference.schema.json#/$defs/style).
tal_labelNoLabel for the imported TAL when territory features lack TAL metadata.
part_layerNoGeography for overlay assignment (e.g. us_zips). Required with overlay_policy.
point_layerNoName for the imported point layer (default: points).
geojson_fileNoHost file parameter (openai/fileParams): an object with a temporary https download_url, or that URL as a string.
geojson_gzipNoBase64 gzip or zip bytes of a GeoJSON FeatureCollection.
geojson_textNo
upload_handleNoUpload link handle from import_geojson() with no file argument; returns its upload_status.
overlay_policyNoExplicit opt-in for importing territory polygons without part_ids: assigns parts whose centroids fall inside each polygon.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
ingest_accountsIngest AccountsAInspect

Account ingest: loads account rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them to the map, geocoding rows without coordinates. Rows come only as accounts_handle from request_account_upload (the user's file, csv_text, or rows; 100,000-row cap); its suggested_ingest carries these args. latitude/lat and longitude/lon/lng pass through; other names need latitude_field/longitude_field, and unused coordinate-like columns return CLARIFICATION_REQUIRED (needs_coordinate_fields). id_field is a unique key (default row_id); duplicates return needs_unique_row_id. Only declared columns are kept: metric_fields, workload_fields, dwell_time_field, visit_frequency_field, grouping_fields, display_fields, search_fields; to load a contractor list, layer_role=contractors adds trade_field, tier_field, capacity_field, service_zip_field (analyze_network_coverage). Later use of an undeclared column returns UNDECLARED_FIELD. Over geocode quota fails it whole. Returns a task with failed_rows and map_refresh.

NameRequiredDescriptionDefault
labelNoLegend name for the point layer. Omitted: the point_layer id in title case (accounts is 'Accounts', schools_conus is 'Schools Conus').
id_fieldNoUnique business key column. Duplicated label/name columns fail with blocked_by=needs_unique_row_id. With the default row_id and no unique column, the server synthesizes row-1, row-2, … when that column is absent.row_id
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
use_cacheNo
layer_roleNocontractors marks the supply side of a service network (contractor, vendor, service provider) for analyze_network_coverage.
tier_fieldNoContractor column holding the network tier (e.g. Preferred). Retained like a declared column.
label_fieldNolabel
point_layerNoaccounts
region_hintNo
trade_fieldNoContractor column naming the trade(s) served (e.g. HVAC; comma-separated for several). Retained like a declared column.
country_hintNo
metric_fieldsNoAgent-confirmed business metric columns (for example revenue, sales, units) to persist on point-layer metadata for downstream build/analyze tools.
search_fieldsNoDeclared columns searchable in the Map Component. Undeclared columns are discarded at ingest and later operations on them fail with UNDECLARED_FIELD.
capacity_fieldNoNumeric contractor column holding capacity (e.g. jobs per month). Retained like a declared column.
display_fieldsNoDeclared columns shown in Map Component point callouts. Undeclared columns are discarded at ingest and later operations on them fail with UNDECLARED_FIELD.
latitude_fieldNoLatitude column. Defaults accept case-insensitive GIS aliases latitude/lat (including LAT). Override for non-standard headers (e.g. Address 1: Latitude). Explicit values win over aliases.latitude
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
min_confidenceNo
accounts_handleNoRequired. upload_handle (aup_...) from request_account_upload. Single-use: ingest claims it.
force_regeocodeNoWhen true, ignore existing coordinates and geocode addresses. Also confirms intentional address geocoding when unused numeric lat/lon-like columns are present (skips needs_coordinate_fields guard).
grouping_fieldsNoDeclared columns used to group accounts (e.g. account_build grouping_field candidates). Declared fields are the retention contract: the compact TS keeps only id, coordinates, label, and declared fields; undeclared columns are discarded at ingest.
longitude_fieldNoLongitude column. Defaults accept case-insensitive GIS aliases longitude/lon/lng/long (including LON). Override for non-standard headers. Explicit values win over aliases.longitude
workload_fieldsNo
dwell_time_fieldNoCanonical per-account dwell column on point features. Pair with workload_fields unit metadata when values are in hours.
replace_existingNoWhen true, replaces an existing point layer with the same point_layer id in place. Default false returns POINT_LAYER_EXISTS when the layer already exists.
service_zip_fieldNoContractor column listing served ZIPs, comma-separated, for coverage.rule=zip_list. Retained like a declared column.
visit_frequency_fieldNoCanonical numeric visits-per-cycle column on point features. Agent-resolved; MCP validates presence and persists on point-layer metadata. Without one, MCP defaults each account to one visit per cycle.
accept_suboptimal_geocodesNoWhen true (default for ingest), accept provider suboptimal geocodes (e.g. ZIP centroids) so address-only rows become points. Set false to require optimal/point-address matches only.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
isochrone_buildBuild Drive-Time AreaAInspect

Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a territory in a drive-time alignment. origins: inline {latitude, longitude} or a point-layer reference. bands: [{time_budget_seconds} or {distance_budget_meters}], one unit per call (MIXED_BUDGET_TYPES otherwise); one band gives one area per origin, several give nested areas. Limits: 25 origins, 5 bands, 6 hours, 500 km; travel_mode car or truck; depart_at supported. Areas are the provider polygons and may overlap; analyze counts accounts in every area containing them. realign/split/merge/rebalance return ISOCHRONE_TAL_NOT_EDITABLE. A band budget is not territory workload or route time. No provider key returns ISOCHRONE_NOT_CONFIGURED; the full call count is checked against the monthly quota first (PROVIDER_QUOTA_EXCEEDED). Returns a task.

NameRequiredDescriptionDefault
avoidNoRoad classes to keep out of the reachable area. Only values both providers document.
bandsYesBudgets to draw at each origin. One band gives one leaf per origin; several give a rollup per origin with one leaf per band. Capped (default 5, TOO_MANY_BANDS).
tal_idNoStable identity for the TAL. Reusing an existing id replaces that TAL. Defaults to a slug of tal_label.
originsYesCenters to measure reachability from. Provider calls are origins x bands, so this is capped (default 25, TOO_MANY_ORIGINS).
trafficNoTraffic-aware travel times. Ignored for a distance budget.
depart_atNoRFC 3339 departure time, which shapes traffic-aware boundaries. There is no arrive_at: reachable range is forward-only.
tal_labelNoDisplay name for the TAL. Defaults to a readable summary, e.g. "20 min drive time".
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
route_typeNofastest
travel_modeNoNarrower than calculate_route on purpose: neither provider offers a pedestrian or bicycle reachable range.car
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
list_dataverse_viewsList Dynamics 365 ViewsA
Read-onlyIdempotent
Inspect

Microsoft Copilot only (Entra sign-in): lists the Dynamics 365 account views the signed-in user can read, so their accounts import without a file. Without environment_url it lists the user's environments; with one environment it goes straight to its views, with several it returns status choose_environment and an ask_user. Views carry view_id, name, kind (system | personal), and is_default; point_readiness samples active accounts for coordinates vs address-only (address rows are geocoded at ingest). Next: import_dataverse_view(environment_url, view_id). Other clients get DATAVERSE_NOT_AVAILABLE: use request_account_upload (a CSV file) or list_designer_projects instead. DATAVERSE_CONSENT_REQUIRED carries admin_consent_url for the user's Microsoft admin.

NameRequiredDescriptionDefault
environment_urlNoDynamics 365 environment, e.g. https://contoso.crm.dynamics.com; when absent the result lists environments.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
list_designer_projectsList Designer ProjectsA
Read-onlyIdempotent
Inspect

Lists the EasyTerritory Designer rolodex projects the linked Designer user can read: project_id, label, description, tags, saved_at, is_mine, and layers (point data present). q filters by text, tag by rolodex tag, mine=true to the user's own. project_id is the input to import_designer_project and push_to_designer. Without a link the error is DESIGNER_NOT_LINKED (see link_designer).

NameRequiredDescriptionDefault
qNo
tagNo
mineNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
list_part_layersList Part LayersA
Read-onlyIdempotent
Inspect

Returns the available canonical part layers for territory construction (for example us_zips, us_counties, ca_fsa, and active country postal or administrative polygon layers), with the same metadata as ezt://part-layers: part_layer, label, description, country_codes, admin_levels, part_count, id_format, example_part_ids, capabilities, data_version, and updated_at. Optional part_layer returns detailed metadata for one layer (bbox, aliases, supported_admin1, source_name, source_vintage, id_format_notes) or UNKNOWN_PART_LAYER. Optional country_code filters by 2-letter ISO country code. Read-only.

NameRequiredDescriptionDefault
part_layerNoOptional canonical part layer identifier (for example us_zips, us_counties, ca_fsa, uk_areas, germany_postal) to fetch detailed metadata for one layer.
country_codeNoOptional 2-letter ISO 3166-1 alpha-2 country code (for example US, CA, GB, DE) to filter the returned part layers.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
load_analysis_panelLoad Analysis PanelAInspect

Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze result (with tal_analyses and ts_identity; a partial object returns INVALID_REQUEST). presentation_mode: single, compare, executive, or diagnostic. dismiss=true hides the dock and keeps the statistics on the session. Changes nothing in the Territory Solution. analyze with analysis_panel=single fills the dock in the same call.

NameRequiredDescriptionDefault
rolesNo
job_idNoCompatibility alias for task_id.
labelsNo
dismissNotrue hides the whole dock, header bar included, and keeps stored stats. It takes no analyses, task_id, labels, roles, or presentation_mode.
task_idNoCompleted analyze task_id. Same string as job_id. Hydrates analyses when analyses is omitted.
analysesNo
map_session_idYesOpen map session (msess_...) from get_map_visualization.
presentation_modeNoPanel mode. territory_metric_grid is default_presentation.view inside the Analyze result, not a presentation_mode.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
points_in_territoryPoints in TerritoryA
Read-onlyIdempotent
Inspect

Lists which account points from one point layer fall inside a territory polygon or a drive-time (isochrone) area. Per territory: point_count, metric_sums (metrics, else the layer's declared metric fields), and a sample of sample_size points (default 25, max 200; 500 across all territories) with label and metric fields, or only the fields you name. Counts and sums cover every inside point. The full list is never inline: it is in points_artifact, via download_url (GET with the API key) or share_with_user (one-hour key-less link for the user). Synchronous, read-only; needs map_session_id or ts_handle. territory_id names one leaf (id or unique display name), territory_ids several; omit both for every leaf in the TAL (tal_id, else the active or sole TAL). point_layer defaults to the sole layer with points; point_filter (e.g. {tier: 'Gold'}) filters before counting. A point counts in every containing polygon; overlaps lists shared points. Unknown ids return UNKNOWN_TAL_ID / UNKNOWN_TERRITORY_ID / UNKNOWN_POINT_LAYER with the available values.

NameRequiredDescriptionDefault
fieldsNoPoint properties to keep on sample points and in points_artifact. Omitted: the sample carries label plus the metric fields, and the artifact carries every property.
tal_idNoTerritory alignment to query. Defaults to the active TAL, or the sole TAL with leaf polygons.
metricsNoNumeric point columns to sum per territory. Defaults to the layer's declared metric fields.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
point_layerNoPoint layer id or exact unique label. Optional when the solution has one layer with points.
sample_sizeNoPoints shown inline per territory; the server lowers it so at most 500 sample points come back across all territories. point_count and metric_sums always cover every inside point; points_artifact lists them all.
point_filterNoOptional attribute filter (column -> value or list of values, matched case-insensitively, e.g. {"tier": "Gold"}) applied to the point layer before counting and listing.
territory_idNoOne leaf: its stable territory_id or exact unique display name. Mutually exclusive with territory_ids.
territory_idsNoSeveral leaves (stable ids or exact unique display names). With neither territory_id nor territory_ids, every leaf in the TAL.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
publish_to_dataversePublish Stamps to Dynamics 365A
Destructive
Inspect

Microsoft Copilot (Entra sign-in): writes stamped point-layer columns back to Dynamics 365 account records keyed by accountid (1:1 Account PATCH). Needs map_session_id or ts_handle. Point layers carry derived stamps from builds/realign (part_id, territory_id, territory_label), calculate_route (route_id, route_label, stop_sequence), schedule_visits (schedule_id, visit_count, schedule_days, schedule_dates, contractor_id, contractor_label), isochrone_build (isochrone_tal_id, isochrone_ids, isochrone_labels, isochrone_count), and cluster_points (group_id, group_label). A <point_layer>_visits layer resolves to its 1:1 parent account layer and maps schedule_day/date to schedule_days/dates. field_map maps point columns to Dynamics account logical attributes (primitive columns or territoryid / ownerid lookups resolved by name or GUID). With confirm=false (default) or no field_map, runs a read-only preflight returning status=confirmation_required, stamped_columns, candidate_target_attributes, preview_updates, and ask_user. With confirm=true, queues the batch PATCH task.

NameRequiredDescriptionDefault
confirmNoFalse (default) runs the read-only preflight to preview matched accounts and validate attributes/lookups. True dispatches the batch PATCH job after user confirmation.
field_mapNoMap of stamped point column -> Dynamics 365 account logical attribute name (e.g. {'territory_label': 'territoryid', 'route_label': 'new_routename'}). When absent, the preflight lists stamped_columns and candidate_target_attributes.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
point_layerNoSource point layer in the Territory Solution (default 'accounts'). A <point_layer>_visits layer resolves to its 1:1 parent account layer.accounts
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
environment_urlNoDynamics 365 environment (e.g. https://contoso.crm.dynamics.com). Defaults to the environment the point layer was imported from, or the user's sole environment.
include_unassignedNoWhen true, accounts with an empty/unassigned stamp clear the target Dynamics attribute to null. Default false updates accounts with non-empty stamped values.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
push_to_designerSave to DesignerA
Destructive
Inspect

Saves a Territory Solution in EasyTerritory Designer from the server. Without project_id it creates a new rolodex project named label (the user's choice; a missing label returns CLARIFICATION_REQUIRED). With project_id it overwrites that project's territories, points, and routes in place. Input: map_session_id, ts_handle, or a completed build job_id. Returns a task; the result has project_id, url, and share_with_user. part_layer_id binds the Designer catalog layer (default: the layer a pulled TAL came from); tal_id picks the alignment; include_points=false sends territories and routes only. Route stops link to point layers by point_id. run_plugin / push_power_bi (default false) run the project's post-save plugin / refresh Power BI. Requires link_designer.

NameRequiredDescriptionDefault
labelNo
job_idNotask_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input.
tal_idNoAlignment to push; defaults to the active TAL.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
project_idNoDesigner project to overwrite in place; omit to create a new project named label.
run_pluginNo
part_layer_idNoDesigner catalog part layer to bind; defaults to the layer a pulled TAL came from.
push_power_biNo
include_pointsNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
query_partsQuery Territory PartsA
Read-onlyIdempotent
Inspect

Returns attributes (no geometry) for parts of a part layer listed by list_part_layers or ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither or both returns INVALID_REQUEST. Paged with page_token. filter.territory {tal_id, territory_id} with ts_handle or map_session_id lists one territory's parts.

NameRequiredDescriptionDefault
filterNoAttribute/text/range/spatial/territory filter. Mutually exclusive with top-level part_ids.
part_idsNoExplicit list of part IDs. Mutually exclusive with filter. Useful for validation or enrichment.
page_tokenNoPagination token from a previous response.
part_layerYesRequired part layer identifier, e.g. 'us_zips'.
max_resultsNoMaximum results per page. Server may enforce lower limits.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
realignRealign PartsA
Destructive
Inspect

Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to_territory_id}], or realign_operation with part_ids. The Territory Solution comes from map_session_id (the open map) or ts_handle; expected_revision adds optimistic concurrency (STALE_TS_REVISION when the map changed). to_territory_id is a leaf territory_id or that leaf's exact, unique display name; an unknown or ambiguous value returns UNKNOWN_TERRITORY_ID or AMBIGUOUS_TERRITORY with available_leaf_territories. A committed map selection is read with get_map_selection; request_part_selection lets the person pick parts on the map. remove_empty_territories drops leaves left with no parts. Returns a task; the open map repaints. analyze refreshes statistics when the map has account points.

NameRequiredDescriptionDefault
movesNo
tal_idYesTarget TAL to realign. Required — ambiguous TAL is an error.
part_idsNoRequired for remove_parts operation.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerNoPart layer name, e.g. us_zips, us_counties. Required when not inferable from the TAL.
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
expected_revisionNo
realign_operationNoRealignment operation. Defaults to move_to_territory when moves[] is supplied.
remove_empty_territoriesNoWhen true with remove_parts, drop leaf territories that become empty.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
reintegrate_branchReintegrate Alignment BranchA
Destructive
Inspect

Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns STALE_TS_REVISION when the master changed since the extract, in which case a fresh extract is needed. Merges apply one at a time.

NameRequiredDescriptionDefault
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
branch_metadataYes
master_ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
proposal_ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
expected_master_revisionYes
expected_master_content_hashNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
request_account_uploadRequest Account UploadAInspect

The one way account or address rows enter the server: stages them for ingest_accounts (accounts_handle) or geocode_address (upload_handle) and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Ways in: the returned upload_url (no API key; valid up to 1 hour), which the user opens in a browser to drop a CSV or .xlsx (result.share_with_user; the path for a file the client cannot read, e.g. a SharePoint link) or a shell POSTs to (curl_example); csv_file (a host file parameter); csv_text (raw CSV, up to 25 MB per call); or rows chunks appended with upload_handle. A call with only upload_handle polls: upload_status waiting_for_file (sleep recommended_poll_delay_ms) or received, with preview (sample rows, column profile) and upload_warnings whose ask_user goes to the user before ingest. A local path in csv_file returns UNREADABLE_FILE_REFERENCE; an expired URL returns UPLOAD_TOKEN_EXPIRED and a call with upload_handle issues a new one. One handle holds at most 100,000 rows and is single-use, claimed by ingest_accounts, for 1 hour.

NameRequiredDescriptionDefault
rowsNo
csv_fileNoHost file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url.
csv_textNo
ttl_secondsNo
upload_handleNoExisting upload_handle (aup_...) to append this chunk of rows to.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
request_assignment_uploadRequest Assignment UploadAInspect

The one way part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) enter the server: stages them for direct_build (assignments_handle) and returns upload_handle. Same ways in as request_account_upload: upload_url (no API key; up to 1 hour; the user opens it in a browser to drop a CSV or .xlsx, or a shell POSTs the file), csv_file, csv_text (newlines preserved), or assignment chunks appended with upload_handle; poll with only upload_handle until upload_status is received. Legacy columns map to part_id and territory_path automatically. A file of locations rather than assignments is redirected to request_account_upload. The handle is single-use and expires after 1 hour by default.

NameRequiredDescriptionDefault
csv_fileNoHost file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url.
csv_textNo
assignmentsNo
ttl_secondsNo
upload_handleNoExisting upload_handle (aup_...) to append this chunk of rows to.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
request_part_selectionRequest Part SelectionAInspect

Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territory, or a plain list. Returns selection_task_id; get_part_selection reports status (awaiting_user_selection, then committed, expired, or cancelled) and the committed part_ids, and its response carries recommended_poll_delay_ms. The commit happens on the map, not in chat. destination_territory_id and realign_operation pre-set a realign. Works on the in-chat map and the map_url tab. map_session_id selects on the open map; ts_handle opens a stored Territory Solution first. A selection the person started from the map legend is read with get_map_selection.

NameRequiredDescriptionDefault
promptNoHuman-facing selection instruction shown by the host/agent or MC.
purposeNogeneric
user_idNoStable caller id; finds the open map when map_session_id is omitted.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerYes
active_tal_idNoAlignment shown as active while the person selects.
new_territoryNo
expiry_secondsNo
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
realign_operationNo
destination_territory_idNoOptional receiver leaf territory when Monica/agent named the destination up front.
remove_empty_territoriesNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
schedule_visitsSchedule VisitsAInspect

Schedules recurring visits: expands each cadence (e.g. every 7 days) across a horizon and packs visits into daily buckets under a technician-day cap. Decides which day each visit happens (auto_build and cluster_points divide accounts among people); creates no alignment. Needs point_layer (ingested with cadence declared, else UNDECLARED_FIELD), visit_frequency_field, dwell_time, and daily_capacity ({mode: not_to_exceed, hours: 8}); missing dwell or capacity returns CLARIFICATION_REQUIRED. Omitted max_buckets_per_day means one technician per day; when one does not fit, CLARIFICATION_REQUIRED carries capacity_plan. estimate_only=true returns capacity_plan. contractors (point_layer or list: start, pre_service_stops, route_type, end) anchors buckets; unanchored one-stop days warn SINGLE_STOP_DAYS. frequency_unit: interval_days or visits_per_horizon. bucket_workload_hours (drive plus dwell) is a different measure from territory workload and route_workload_hours. Returns a task. calculate_route on one bucket_id drives that day. Date limits: visit_constraints with horizon_start_date.

NameRequiredDescriptionDefault
tal_idNoOptional TAL id when filtering scheduled accounts by territory_id or territory_ids.
horizonNoPlanning horizon. derived takes the longest interval among scheduled accounts; explicit is how a 28- or 42-day rolling cycle is requested when intervals leave a remainder on a shorter horizon.
objectiveNoBiases must sum to 100. Raising balance_bias to 100 lengthens otherwise efficient days to equalize hours, which is rarely what the customer wants.
point_idsNoOptional list of account/point IDs to schedule.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
contractorsNoOptional contractor anchoring (T-214). Takes a point-layer source (e.g. {point_layer: 'contractors'}) or a list of contractor entries with start, optional pre_service_stops (e.g. a depot with dwell_minutes), route_type (circuit|tour|open_tour), and optional end.
point_layerYes
point_filterNoOptional attribute filter (property -> value or list of values) to schedule a subset of point_layer.
territory_idNoOptional leaf territory id or unique display label to schedule only accounts inside that territory polygon.
estimate_onlyNoWhen true, runs a fast capacity-planning preflight without mutating the Territory Solution or emitting a visits layer, returning capacity_plan (open_service_days, closed_days, required_daily_hours_avg, peak_day_floor_hours, min_resources_per_day, recommended_resources_per_day, and remedies).
territory_idsNoOptional list of leaf territory ids or display labels to schedule only accounts inside those territory polygons.
daily_capacityNoWorkload limit for one bucket (one technician-day). not_to_exceed is a hard ceiling the scheduler never breaches; target_band aims for the target and accepts anything inside the tolerance.
frequency_unitNointerval_days: the value is the maximum days between visits. visits_per_horizon: the value is how many visits the account gets across the whole horizon.interval_days
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
schedule_labelNo
emit_visit_layerNoMaterialize one point per scheduled visit so color-by-day and the calculate_route handoff are single calls.
visit_layer_nameNoDefaults to <point_layer>_visits. This name is the schedule's identity: re-running with the same name replaces the layer in place, a different name adds a second schedule for comparison.
expected_revisionNo
visit_constraintsNoSeparate account-keyed date-constraint dataset: blackouts/no-service windows, fixed dates, SLA due dates, anchor days, allowed weekdays. See visitConstraint.
horizon_start_dateNoCalendar date of horizon day 1. Required when visit_constraints is non-empty; without it dated constraints return CLARIFICATION_REQUIRED (needs_horizon_start_date). There is no default of today.
never_visit_valuesNoFrequency values that mean the account is left off the schedule. Matching accounts are excluded and reported in excluded_accounts, never silently dropped.
max_buckets_per_dayNoCap on concurrent buckets in one day, normally the technician/contractor count (cannot exceed len(contractors) when contractors are supplied). Omitted with no contractors: one bucket per day; when that does not fit, CLARIFICATION_REQUIRED (blocked_by needs_technician_count) returns capacity_plan and asks how many technicians.
visit_frequency_fieldYesNumeric point column declared at ingest. Undeclared columns fail with UNDECLARED_FIELD.
cadence_flexibility_pctNoPercent of an account's own cadence a single visit may drift so the number of work clusters stays comparable day to day. At the default 15 a 14-day account may slide two days and a 7-day account one; a 3-day account does not move. Set to 0 for strict cadence. A drift past this tolerance happens only to staff a day that would otherwise be short of work — an idle technician costs more than a visit arriving a day early — and every relaxed visit is reported in distribution_summary.cadence_relaxation and the visits layer's cadence_drift_days column.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
seed_buildGrow Territory from SeedAInspect

Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, field: , value: X}, counted from an ingested point layer. Adds the territory as a leaf of tal_id, or as a new alignment. Fit is closest: target_status is reached, closest_under, closest_over, frontier_exhausted, or max_parts_reached, with SEED_TARGET_UNDERSHOT/OVERSHOT warnings and the difference. Parts already in that alignment are never taken; the territory grows around them (blocked_part_count, seed_offset_km), and a seed inside an assigned part returns SEED_PART_ASSIGNED. part_scope=explicit with part_filter confines growth to an area. One seed per call. An undeclared metric field returns UNDECLARED_FIELD. Returns a task with created_territory and ts_handle; the open map repaints with map_session_id.

NameRequiredDescriptionDefault
seedYesWhere growth starts. For an address or POI, stage it as one row with request_account_upload, then geocode_address(upload_handle); a map click already gives coordinates.
tal_idNoExisting TAL to append the new leaf to. Parts already assigned to any leaf of this TAL are never taken (the territory drifts instead). Without it, a new TAL is created.
targetYesWhat the territory grows toward. Fit is closest: |achieved - value| is minimized, so the result may land slightly under or over.
user_idNoStable per-user label for usage and queue ordering.
part_idsNoExplicit eligible part set. Implies part_scope explicit. Mutually exclusive with part_filter.
max_partsNoSafety cap on parts in the grown territory. Reaching it stops growth with target_status max_parts_reached.
tal_labelNoDisplay name for the new TAL when tal_id is omitted. Ignored when tal_id is given.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
part_layerNoPart layer to grow over, e.g. us_zips (ezt://part-layers). Required unless tal_id names a TAL that already has one; must match that TAL's layer when both are given.
part_scopeNoGrowth reads only the seed's neighbourhood (rings outward from the seed part), so this is an allowlist switch, not a performance prerequisite. explicit: confine growth to part_ids or part_filter (e.g. state_abbr TX) when the user wants the territory bounded by that geography. bbox_intersect / point_matched are accepted for compatibility with auto_build and ignored — seed_build never joins the whole point layer to the bbox parts.
part_filterNoAttribute filter resolved via query_parts (e.g. {"state_abbr": "TX"}). Implies part_scope explicit. Mutually exclusive with part_ids.
point_layerNoIngested point layer whose locations are counted or summed. Required when the TS has more than one point layer.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
territory_nameNoDisplay name for the new leaf. Defaults to the next free "Territory N" in the TAL. Must be unique within the TAL.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
set_map_stateSet Map StateA
Read-onlyIdempotent
Inspect

Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Session only: the Territory Solution is not changed (configure_map sets a durable default view). The result's render_ack is read at publish time, so sent_unconfirmed one version behind is normal; render_ack_hint says whether to reread ezt://map-sessions/{map_session_id}/state or resend. camera reports the view in effect and its source (requested, session, map_config, or viewer_current). A set camera stays until changed; switching alignment does not refit.

NameRequiredDescriptionDefault
modeNo
zoomNo
centerNo
active_tal_idNoAlignment to make active on the open map (session only).
map_session_idYesOpen map session (msess_...) from get_map_visualization.
pending_job_referenceNoTask reference (task_id from a build submission) the map follows and repaints from when the task completes.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
show_map_overlayShow Map OverlayAInspect

Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer, tal, route) with overlay_id. Part layers load at a zoom where they are visible (visibility.camera_action); hiding a part layer leaves territories unchanged. Point layers must already be ingested; a layer in the Territory Solution but missing from the map is re-pushed (status=refreshed, with render_ack). Point layers have no hidden state: hide wording returns HIDE_NOT_SUPPORTED with do_this_next delete_point_layer, which removes the layer; the legend checkbox hides one in a single tab. route re-shows or hides routes calculate_route drew (route_id targets one); with no route yet it returns blocked_by=needs_route. When the user named a camera, do_this_next carries the configure_map call that sets it. Input: map_session_id (preferred) or ts_handle.

NameRequiredDescriptionDefault
route_idNoWith overlay_kind=route, targets one route instead of all of them. Without it, every route is re-pushed or cleared. Only re-shows or clears a route calculate_route already produced — it never routes.
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
overlay_idNoCanonical id: us_zips, accounts, tal-current, etc.
overlay_kindNo
user_requestNoNatural-language ask, e.g. 'add zips to the map'.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
merge_strategyNo
expected_revisionNo
expected_content_hashNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
submit_feedbackSubmit FeedbackAInspect

Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement with feedback_id. Secrets, emails, Territory Solution JSON, GeoJSON, and account/CSV tables are stripped before storage; the text is meant for a description of what happened, not data.

NameRequiredDescriptionDefault
categoryNoother
severityNomedium
user_goalYesWhat the user was trying to accomplish, sanitized.
confidenceNomedium
session_idNoClient session id, if the host has one.
client_nameNo
related_toolNo
what_happenedYesWhere the agent struggled, failed, found confusing results, or used a workaround.
client_versionNo
correlation_idNotask_id, job_id, or request id the feedback is about.
context_summaryNoOptional sanitized summary only. Excludes credentials, API keys, raw customer data, private territory assignments, and PII.
include_contextNo
expected_capabilityNo
related_product_areaNo
suggested_improvementNo

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo
tasks_cancelCancel TaskA
Destructive
Inspect

Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the Task status document. Whether the Territory Solution is unchanged or partially updated follows the originating tool.

NameRequiredDescriptionDefault
task_idYestask_id of the working task to stop.

Output Schema

NameRequiredDescription
ttlNo
_metaNo
phaseNo
statusNo
taskIdNo
progressNo
sleep_msNo
terminalNo
createdAtNo
poll_loopNo
next_actionNo
do_this_nextNo
next_poll_atNo
pollIntervalNo
lastUpdatedAtNo
source_statusNo
statusMessageNo
recommended_poll_delay_msNo
tasks_getGet Task StatusA
Read-onlyIdempotent
Inspect

Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id (holding up to wait_ms while the task is working). next_action is sleep_and_poll (wait sleep_ms, then one tasks_get), consume_result (one tasks_result call), or stop_error. status=cancelled means the user stopped it. While queued, _meta carries queue_position, queue_depth, queue_lane, and estimated_start_ms, which is advisory and not a wait time. Polling never starts work.

NameRequiredDescriptionDefault
task_idYestask_id from the submitting tool's result (same value as job_id).
wait_msNoOptional milliseconds to hold on the server while the task is working so completed tasks return consume_result without an extra poll round-trip.

Output Schema

NameRequiredDescription
ttlNo
_metaNo
phaseNo
statusNo
taskIdNo
progressNo
sleep_msNo
terminalNo
createdAtNo
poll_loopNo
next_actionNo
do_this_nextNo
next_poll_atNo
pollIntervalNo
lastUpdatedAtNo
source_statusNo
statusMessageNo
recommended_poll_delay_msNo
tasks_resultGet Task ResultA
Read-onlyIdempotent
Inspect

Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task status is completed (consume_result): ts_handle, counts, timings, and map binding, never an inline Territory Solution. A build's ts_handle or task_id (as job_id) is the input analyze takes.

NameRequiredDescriptionDefault
task_idYestask_id whose status next_action is consume_result.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
territory_mergeMerge TerritoriesA
Destructive
Inspect

Merges a pair of adjacent territories (N to N-1 territories). By default, territory_id_b is folded into territory_id_a (or renamed to new_territory_label) and the rest of the alignment rebalances with minimal disruption, e.g. when a rep leaves and neighbors absorb the territory. Set preserve_other_territories=true for an exact two-territory union that combines only territory_id_a and territory_id_b (optionally named new_territory_label) and leaves every other territory unchanged with no rebalance. Non-adjacent ids return NON_ADJACENT_TERRITORIES. Needs source_tal_id and the Territory Solution from map_session_id or ts_handle; workload rebalance needs dwell_time (CLARIFICATION_REQUIRED otherwise). Writes a new derived alignment. Returns a task.

NameRequiredDescriptionDefault
objectiveNo
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
part_layerNoPart layer (e.g. us_zips). Required only when not inferable from the source TAL.
point_layerNoOptional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used.
new_tal_labelNoLabel for the derived TAL. Defaults to '<source label> (<operation>)'.
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
source_tal_idNoSource TAL. Optional for form-capable clients that can answer via elicitation.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
territory_id_aNoFirst territory (id or label). The merged territory keeps this identity unless new_territory_label is supplied.
territory_id_bNoSecond territory (id or label). Must be adjacent to territory_id_a.
balance_toleranceNoAccepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves.
disruption_weightNoIncumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part.
new_territory_labelNoOptional display label for the merged territory (defaults to territory_id_a's label).
visit_frequency_fieldNoNumeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata.
preserve_other_territoriesNoWhen true, performs an exact union of territory_id_a and territory_id_b without rebalancing any other territory in the alignment.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
territory_rebalanceRebalance TerritoriesA
Destructive
Inspect

Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory Solution from map_session_id or ts_handle. point_layer defaults to the alignment's build layer or the only point layer; otherwise CLARIFICATION_REQUIRED (ambiguous_point_layer, with details.point_layers). Workload balance needs dwell_time; zero_workload means no account maps to a part. The current alignment is the baseline: when nothing improves the objective the result is NO_IMPROVING_REBALANCE_FOUND and nothing changes. Writes a new derived alignment. Returns a task with retention_pct and solver_diagnostics.

NameRequiredDescriptionDefault
objectiveNo
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
part_layerNoPart layer (e.g. us_zips). Required only when not inferable from the source TAL.
point_layerNoOptional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used.
new_tal_labelNoLabel for the derived TAL. Defaults to '<source label> (<operation>)'.
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
source_tal_idNoSource TAL. Optional for form-capable clients that can answer via elicitation.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
balance_toleranceNoAccepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves.
disruption_weightNoIncumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part.
visit_frequency_fieldNoNumeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
territory_splitSplit TerritoryA
Destructive
Inspect

Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). Needs source_tal_id and target_territory_id, plus the Territory Solution from map_session_id (the open map) or ts_handle. Workload balance needs dwell_time; a missing id or dwell returns CLARIFICATION_REQUIRED with the question. Writes a new derived alignment; the source stays. Returns a task; the result carries disruption_summary (retention_pct).

NameRequiredDescriptionDefault
objectiveNo
ts_handleNoTerritory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.
dwell_timeNo
part_layerNoPart layer (e.g. us_zips). Required only when not inferable from the source TAL.
point_layerNoOptional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used.
new_tal_labelNoLabel for the derived TAL. Defaults to '<source label> (<operation>)'.
repair_policyNoTopology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.default
source_tal_idNoSource TAL. Optional for form-capable clients that can answer via elicitation.
map_session_idNoOpen map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.
balance_toleranceNoAccepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves.
disruption_weightNoIncumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part.
new_territory_labelNoLabel for the second territory created by the split. Defaults to '<target> (split)'.
target_territory_idNoLeaf territory (id or label) to split into two. Optional when elicitation can fill it.
visit_frequency_fieldNoNumeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.
warningsNo
workflow_advisorGet Next Workflow StepA
Read-onlyIdempotent
Inspect

Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_accounts | account_grouping | known_assignments | realign_existing | restructure | load_part_layer | route_stops | reachable_area | periodic_scheduling | coverage_gap_analysis | points_in_territory. state: viewer_connected, point_layer, part_layer, tal_present, analysis_fresh, plus selection/realign or restructure flags. inputs: the values known so far (part_layer, territory_count, tal_id, operation, route_type, origins, visit_frequency_field, ...); missing_inputs names the keys still needed. Returns next_tool with drafted next_args, missing_inputs (reported, never invented), blocked_by, remaining_steps, and the workflow guide inline as guidance. Order rules applied: map before compute, viewer connected before compute, ingest before build, analyze after an edit when a point layer exists. Calling it after each step with the updated state walks the whole workflow.

NameRequiredDescriptionDefault
stateNoAgent-supplied workflow state; all keys optional and default to 'not done yet'.
inputsNoOptional plan parameters used to draft next_args.
intent_categoryYesbuild_from_accounts | account_grouping | point_clustering | known_assignments | realign_existing | restructure | delete_territory | load_part_layer | reachable_area | seed_growth | coverage_gap_analysis | route_stops | routes_layer | delete_route | delete_point_layer | points_in_territory | periodic_scheduling. Tool names (auto_build, account_build, cluster_points, direct_build, isochrone_build, seed_build, analyze_network_coverage) are accepted as aliases; any other value returns the unsupported-category fallback.

Output Schema

NameRequiredDescription
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • Changedauto_build3 fields changed
      • changedInput schema / properties / build_mode / anyOf
        Previous value: -[
        -  {
        -    "oneOf": [
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "mode": {
        -            "const": "fixed_territory_count"
        -          },
        -          "territory_count": {
        -            "minimum": 1,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "mode",
        -          "territory_count"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "cycle_unit": {
        -            "enum": [
        -              "day",
        -              "week",
        -              "month",
        -              "quarter",
        -              "year"
        -            ],
        -            "type": "string"
        -          },
        -          "mode": {
        -            "const": "fixed_workload_target"
        -          },
        -          "target_workload": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          },
        -          "workload_unit": {
        -            "enum": [
        -              "minutes",
        -              "hours"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "mode",
        -          "target_workload"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "mode": {
        -            "const": "scoped_split"
        -          },
        -          "preserve_other_territories": {
        -            "const": true,
        -            "default": true
        -          },
        -          "replacement_territory_count": {
        -            "minimum": 2,
        -            "type": "integer"
        -          },
        -          "source_tal_id": {
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "source_territory_id": {
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "mode",
        -          "source_tal_id",
        -          "source_territory_id",
        -          "replacement_territory_count"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Sizing mode: {mode: 'fixed_territory_count', territory_count: <int>} or {mode: 'fixed_workload_target', target_workload: <number>, workload_unit: 'hours'|'minutes', optional cycle_unit: 'day'|'week'|'month'|'quarter'|'year'} or {mode: 'scoped_split', source_tal_id: '<tal_id>', source_territory_id: '<territory_id>', replacement_territory_count: <int>=2.., optional preserve_other_territories: true}.",
        +    "properties": {
        +      "cycle_unit": {
        +        "description": "Optional schedule cycle unit for fixed_workload_target.",
        +        "enum": [
        +          "day",
        +          "week",
        +          "month",
        +          "quarter",
        +          "year"
        +        ],
        +        "type": "string"
        +      },
        +      "mode": {
        +        "description": "Sizing mode for the build.",
        +        "enum": [
        +          "fixed_territory_count",
        +          "fixed_workload_target",
        +          "scoped_split"
        +        ],
        +        "type": "string"
        +      },
        +      "preserve_other_territories": {
        +        "default": true,
        +        "description": "Keep all other territories in source_tal_id unchanged when mode='scoped_split'.",
        +        "type": "boolean"
        +      },
        +      "replacement_territory_count": {
        +        "description": "Number of replacement territories (>=2) when mode='scoped_split'.",
        +        "minimum": 2,
        +        "type": "integer"
        +      },
        +      "source_tal_id": {
        +        "description": "Source TAL id when mode='scoped_split'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "source_territory_id": {
        +        "description": "Source territory id or label to split when mode='scoped_split'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "target_workload": {
        +        "description": "Target workload per territory when mode='fixed_workload_target'.",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "territory_count": {
        +        "description": "Target number of territories when mode='fixed_territory_count'.",
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "workload_unit": {
        +        "default": "hours",
        +        "description": "Unit for target_workload ('hours' or 'minutes').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "mode"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / build_mode / description
        Removed value: -"Required for execution unless a form-capable modern client answers sizing via Resolve/Elicit. Legacy/no-capability hosts still receive CLARIFICATION_REQUIRED when omitted."
      • addedInput schema / properties / build_mode / title
        Added value: +"Build Mode"
    • Changedcalculate_route4 fields changed
      • addedInput schema / properties / route_type / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / route_type / default
        Added value: +null
      • removedInput schema / properties / route_type / type
        Removed value: -"string"
      • changedInput schema / required
        Previous value: -[
        -  "route_type",
        -  "start",
        -  "stop_sets"
        -]New value: +[
        +  "start",
        +  "stop_sets"
        +]
    • Changedcluster_points12 fields changed
      • changedInput schema / properties / build_mode / anyOf
        Previous value: -[
        -  {
        -    "oneOf": [
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "mode": {
        -            "const": "fixed_territory_count"
        -          },
        -          "territory_count": {
        -            "minimum": 1,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "mode",
        -          "territory_count"
        -        ],
        -        "type": "object"
        -      },
        -      {
        -        "additionalProperties": false,
        -        "properties": {
        -          "mode": {
        -            "const": "fixed_workload_target"
        -          },
        -          "target_workload": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          },
        -          "workload_unit": {
        -            "default": "hours",
        -            "enum": [
        -              "minutes",
        -              "hours"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "mode",
        -          "target_workload"
        -        ],
        -        "type": "object"
        -      }
        -    ]
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Sizing mode: {mode: 'fixed_territory_count', territory_count: <int>} or {mode: 'fixed_workload_target', target_workload: <number>, workload_unit: 'hours'|'minutes'}.",
        +    "properties": {
        +      "mode": {
        +        "description": "Sizing mode for clustering.",
        +        "enum": [
        +          "fixed_territory_count",
        +          "fixed_workload_target"
        +        ],
        +        "type": "string"
        +      },
        +      "target_workload": {
        +        "description": "Target workload per group when mode='fixed_workload_target'.",
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "territory_count": {
        +        "description": "Target number of groups when mode='fixed_territory_count'.",
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "workload_unit": {
        +        "default": "hours",
        +        "description": "Unit for target_workload ('hours' or 'minutes').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "mode"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / build_mode / description
        Removed value: -"Required unless modern form elicitation supplies sizing."
      • addedInput schema / properties / build_mode / title
        Added value: +"Build Mode"
      • addedInput schema / properties / point_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional point_id / row_id / account_id values to cluster. Unmatched points stay on the layer ungrouped.",
        +  "title": "Point Ids"
        +}
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • changedOutput schema / properties / result / properties / do_this_next / type
        Previous value: -"string"New value: +[
        +  "object",
        +  "string"
        +]
      • addedOutput schema / properties / result / properties / job_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / next_action
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / sleep_ms
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / result / properties / status
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / task_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / terminal
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedcreate_territory_from_parts2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  }
        +}
    • Changedexport_geojson2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": [
        +      "object",
        +      "string"
        +    ]
        +  },
        +  "download_url": {
        +    "type": "string"
        +  },
        +  "exported_at": {
        +    "type": "string"
        +  },
        +  "feature_count": {
        +    "type": "integer"
        +  },
        +  "geojson_artifact": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "point_layers": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "share_url": {
        +    "type": "string"
        +  },
        +  "share_url_expires_at": {
        +    "type": "string"
        +  },
        +  "share_with_user": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "tal_ids": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  },
        +  "ts_identity": {
        +    "type": "object"
        +  }
        +}
    • Changedezt2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  }
        +}
    • Changedimport_dataverse_view2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  }
        +}
    • Changedimport_designer_project2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  }
        +}
    • Changedingest_accounts1 field changed
      • addedInput schema / properties / replace_existing
        Added value: +{
        +  "default": false,
        +  "description": "When true, replaces an existing point layer with the same point_layer id in place. Default false returns POINT_LAYER_EXISTS when the layer already exists.",
        +  "title": "Replace Existing",
        +  "type": "boolean"
        +}
    • Addedpublish_to_dataverse
    • Changedpush_to_designer2 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • addedOutput schema / properties / result / properties
        Added value: +{
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "job_id": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "task_id": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  }
        +}
    • Changedschedule_visits8 fields changed
      • changedOutput schema / properties / result / description
        Previous value: -"Present when ok is true."New value: +"Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields."
      • changedOutput schema / properties / result / properties / do_this_next / type
        Previous value: -"string"New value: +[
        +  "object",
        +  "string"
        +]
      • addedOutput schema / properties / result / properties / job_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / next_action
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / sleep_ms
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / result / properties / status
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / task_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / terminal
        Added value: +{
        +  "type": "boolean"
        +}
    • Changedterritory_merge3 fields changed
      • addedInput schema / properties / new_territory_label
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional display label for the merged territory (defaults to territory_id_a's label).",
        +  "title": "New Territory Label"
        +}
      • addedInput schema / properties / preserve_other_territories
        Added value: +{
        +  "default": false,
        +  "description": "When true, performs an exact union of territory_id_a and territory_id_b without rebalancing any other territory in the alignment.",
        +  "title": "Preserve Other Territories",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / territory_id_a / description
        Previous value: -"First territory (id or label). The merged territory keeps this identity."New value: +"First territory (id or label). The merged territory keeps this identity unless new_territory_label is supplied."
  2. 2 tool updates
    • Addedimport_dataverse_view
    • Addedlist_dataverse_views
  3. 3 tool updates
    • Changedauto_build1 field changed
      • changedInput schema / properties / part_scope / description
        Previous value: -"Parts eligible for partition. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account. explicit: part_ids or part_filter (e.g. state_abbr TX)."New value: +"Parts eligible for partition. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account; those parts are rarely adjacent, so territories come back as scattered pieces (warning POINT_MATCHED_SPARSE_SCOPE) — use it only when that is the goal. explicit: part_ids or part_filter (e.g. state_abbr TX)."
    • Changedexport_geojson1 field changed
      • removedInput schema / properties / zip
        Removed value: -{
        -  "default": true,
        -  "description": "Default true stores/downloads gzip. Set false for uncompressed GeoJSON.",
        -  "title": "Zip",
        -  "type": "boolean"
        -}
    • Changedpoints_in_territory10 fields changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Point properties to keep on sample points and in points_artifact. Omitted: the sample carries label plus the metric fields, and the artifact carries every property.",
        +  "title": "Fields"
        +}
      • removedInput schema / properties / max_points
        Removed value: -{
        -  "default": 1000,
        -  "description": "Cap on points listed per territory. point_count and metric_sums always cover every inside point.",
        -  "title": "Max Points",
        -  "type": "integer"
        -}
      • addedInput schema / properties / sample_size
        Added value: +{
        +  "default": 25,
        +  "description": "Points shown inline per territory; the server lowers it so at most 500 sample points come back across all territories. point_count and metric_sums always cover every inside point; points_artifact lists them all.",
        +  "title": "Sample Size",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / result / properties / download_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / points_artifact
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / result / properties / sample_fields
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / result / properties / sample_size_applied
        Added value: +{
        +  "type": "integer"
        +}
      • addedOutput schema / properties / result / properties / share_url
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / share_url_expires_at
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / result / properties / share_with_user
        Added value: +{
        +  "type": "string"
        +}
  4. 55 tool updates
    • Changedaccount_build16 fields changed
      • addedInput schema / properties / conflict_policy / description
        Added value: +"When accounts in one part map to multiple grouping labels, assign the part to the label with the highest account count; ties break by deterministic label sort."
      • addedInput schema / properties / grouping_field / description
        Added value: +"Point feature property treated as a grouping label even when numeric."
      • addedInput schema / properties / ignore_visit_frequency / description
        Added value: +"When true, every account is one visit per cycle. Mutually exclusive with visit_frequency_field."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / part_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "minProperties": 1,
        +    "properties": {
        +      "county_name": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "population": {
        +        "oneOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "minProperties": 1,
        +            "properties": {
        +              "between": {
        +                "items": {
        +                  "type": "number"
        +                },
        +                "maxItems": 2,
        +                "minItems": 2,
        +                "type": "array"
        +              },
        +              "eq": {
        +                "type": "number"
        +              },
        +              "gt": {
        +                "type": "number"
        +              },
        +              "gte": {
        +                "type": "number"
        +              },
        +              "lt": {
        +                "type": "number"
        +              },
        +              "lte": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "spatial": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "bbox"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "geometry"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "bbox": {
        +            "description": "[min_lon, min_lat, max_lon, max_lat] in EPSG:4326.",
        +            "items": {
        +              "type": "number"
        +            },
        +            "maxItems": 4,
        +            "minItems": 4,
        +            "type": "array"
        +          },
        +          "geometry": {
        +            "description": "GeoJSON Polygon or MultiPolygon in EPSG:4326.",
        +            "type": "object"
        +          },
        +          "operator": {
        +            "enum": [
        +              "intersects",
        +              "within",
        +              "contains"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "operator"
        +        ],
        +        "type": "object"
        +      },
        +      "state_abbr": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "territory": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "ts_handle"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "map_session_id"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "include_descendants": {
        +            "default": true,
        +            "description": "When true, rollup territories include descendant leaf territory part_ids.",
        +            "type": "boolean"
        +          },
        +          "map_session_id": {
        +            "description": "Open map session whose Territory Solution holds the TAL.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "tal_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "territory_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "ts_handle": {
        +            "description": "Territory Solution reference (tsh_...) holding the TAL (no inline TS).",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tal_id",
        +          "territory_id"
        +        ],
        +        "type": "object"
        +      },
        +      "text": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "case_sensitive": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "field": {
        +            "description": "Safe text field to search. Defaults to the public part ID column.",
        +            "type": "string"
        +          },
        +          "mode": {
        +            "default": "prefix",
        +            "enum": [
        +              "prefix",
        +              "contains",
        +              "exact"
        +            ],
        +            "type": "string"
        +          },
        +          "value": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / part_filter / description
        Added value: +"Attribute filter resolved via query_parts (e.g. {\"state_abbr\": [\"FL\", \"GA\"]}). Implies part_scope explicit. Mutually exclusive with part_ids."
      • removedInput schema / properties / part_filter / title
        Removed value: -"Part Filter"
      • addedInput schema / properties / part_ids / description
        Added value: +"Explicit part selection set. Implies part_scope explicit. Mutually exclusive with part_filter."
      • addedInput schema / properties / part_scope / description
        Added value: +"Parts eligible for Account Build geography. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account (radial seeds only; no FCFS inflate). explicit: part_ids or part_filter (e.g. state_abbr FL). Scope fill uses FCFS adjacency inflate from cluster radial seeds, not national nearest-anchor fill."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Point column that scales territory workload by visits per cycle. Mutually exclusive with ignore_visit_frequency."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "assignment_count": {
        +        "type": "integer"
        +      },
        +      "assignment_summary": {
        +        "type": "object"
        +      },
        +      "assignments_artifact": {
        +        "type": "object"
        +      },
        +      "conflict_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": [
        +          "object",
        +          "string"
        +        ]
        +      },
        +      "download_url": {
        +        "type": "string"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "group_count": {
        +        "type": "integer"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "output_mode": {
        +        "type": "string"
        +      },
        +      "part_scope_summary": {
        +        "type": "object"
        +      },
        +      "phase_timings_ms": {
        +        "type": "object"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      },
        +      "unassigned_account_summary": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"account_buildDictOutput"
    • Changedanalyze20 fields changed
      • addedInput schema / properties / compare_tals / description
        Added value: +"When true and multiple tal_ids supplied, include a cross-TAL comparison section."
      • changedInput schema / properties / hypothetical_moves / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "from_territory_id": {
        +          "type": "string"
        +        },
        +        "part_id": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "to_territory_id": {
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "part_id",
        +        "to_territory_id"
        +      ],
        +      "title": "Hypothetical Part-Move for Impact Analysis",
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / hypothetical_moves / description
        Added value: +"Optional. Compute impact of these hypothetical part moves without persisting any change."
      • removedInput schema / properties / hypothetical_moves / title
        Removed value: -"Hypothetical Moves"
      • addedInput schema / properties / job_id / description
        Added value: +"task_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / max_depth / description
        Added value: +"Optional. For hierarchical TALs, return rollup metrics only up to this depth level. Without it, every level is returned."
      • addedInput schema / properties / metrics / description
        Added value: +"Data field names to aggregate per territory. If omitted, server returns all available metrics."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer name. Required when not inferable from the TAL(s). Not used for a drive-time (isochrone) TAL, which is measured by polygon."
      • changedInput schema / properties / scope / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "part_ids": {
        +        "description": "Restrict analysis to these part IDs, e.g. a map selection.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "territory_ids": {
        +        "description": "Restrict analysis to these territory IDs within each TAL.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    },
        +    "title": "Optional Scope Constraint",
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / scope / description
        Added value: +"Optional — restrict analysis to a subset of parts or territories."
      • removedInput schema / properties / scope / title
        Removed value: -"Scope"
      • addedInput schema / properties / tal_ids / description
        Added value: +"TAL IDs to analyze. Defaults to the active TAL when unambiguous."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Optional visit-frequency point column override for workload recompute."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "analysis_panel": {
        +        "type": "object"
        +      },
        +      "caveats": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "cross_tal_comparison": {
        +        "type": "object"
        +      },
        +      "default_presentation": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "hypothetical_impact": {
        +        "type": "object"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "presentation_guidance_uri": {
        +        "type": "string"
        +      },
        +      "scoped_aggregates": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_analyses": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_metric_grids": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "workload_omitted": {
        +        "type": "object"
        +      },
        +      "workload_units": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"analyzeDictOutput"
    • Changedanalyze_network_coverage24 fields changed
      • addedInput schema / properties / capacity_field / description
        Added value: +"Overrides the contractor layer's capacity_field. Enables capacity_ratio."
      • changedInput schema / properties / contractor_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "anyOf": [
        +        {
        +          "type": [
        +            "string",
        +            "number",
        +            "boolean"
        +          ]
        +        },
        +        {
        +          "items": {
        +            "type": [
        +              "string",
        +              "number",
        +              "boolean"
        +            ]
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      ]
        +    },
        +    "minProperties": 1,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / contractor_filter / description
        Added value: +"Column -> value (or list of values), e.g. {\"tier\": \"Preferred\"}. The key tier maps to tier_field when the layer has no literal tier column."
      • removedInput schema / properties / contractor_filter / title
        Removed value: -"Contractor Filter"
      • addedInput schema / properties / contractor_layer / description
        Added value: +"Point layer of contractors. Defaults to the only layer ingested with layer_role=contractors; otherwise CLARIFICATION_REQUIRED (needs_contractor_layer)."
      • changedInput schema / properties / coverage / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "isochrone_tal_id": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "max_km": {
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "max_minutes": {
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "part_layer": {
        +        "default": "us_zips",
        +        "description": "Part layer the demand points are placed in for zip_list and gap_territory.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "rule": {
        +        "enum": [
        +          "drive_time",
        +          "zip_list"
        +        ],
        +        "type": "string"
        +      },
        +      "source": {
        +        "default": "travel_model",
        +        "enum": [
        +          "travel_model",
        +          "isochrone_tal"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "rule"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / coverage / description
        Added value: +"What counts as covered. drive_time with source travel_model (default) needs max_minutes or max_km and uses the calibrated quadkey detour-factor model with CONSTITUTION speed-curve fallback (no provider calls). drive_time with source isochrone_tal needs isochrone_tal_id: a point is covered by a contractor when one of that contractor's isochrone_build polygons contains it (origin_id = contractor id); max_minutes, when given, drops wider time bands. zip_list uses each contractor's service_zip_field."
      • removedInput schema / properties / coverage / title
        Removed value: -"Coverage"
      • addedInput schema / properties / demand_layer / description
        Added value: +"Point layer of demand (customers, claims, stores, or ZIP centers). Defaults to the only other ingested layer."
      • addedInput schema / properties / demand_metric / description
        Added value: +"Numeric demand column (e.g. request count). Defaults to 1 per point; non-numeric cells count as 0 with warning DEMAND_METRIC_MISSING."
      • addedInput schema / properties / gap_territory / description
        Added value: +"Also draw ZIPs whose demand is all uncovered as one territory in a new TAL."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / priority_weights / description
        Added value: +"gap_priority weights; defaults demand 0.6, distance 0.4, single_source_factor 0.5. The formula is echoed in result.priority_formula."
      • addedInput schema / properties / saturation_threshold / description
        Added value: +"Contractor count at which a point is saturated (blue)."
      • addedInput schema / properties / service_zip_field / description
        Added value: +"Overrides the contractor layer's service_zip_field (required for zip_list)."
      • addedInput schema / properties / tier_field / description
        Added value: +"Overrides the contractor layer's tier_field."
      • addedInput schema / properties / trade / description
        Added value: +"One trade per call, matched case-insensitively against the comma-separated trade_field values. '*' (or 'all') keeps every contractor. Required when the contractor layer has a trade_field (needs_trade)."
      • addedInput schema / properties / trade_field / description
        Added value: +"Overrides the contractor layer's trade_field."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "estimated_remaining_ms": {
        +        "type": "integer"
        +      },
        +      "estimated_start_ms": {
        +        "type": "integer"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_poll_at": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "progress": {
        +        "type": "number"
        +      },
        +      "queue_depth": {
        +        "type": "integer"
        +      },
        +      "queue_lane": {},
        +      "queue_position": {
        +        "type": "integer"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "required_input": {
        +        "type": "object"
        +      },
        +      "result_resource_uri": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "status_resource_uri": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      },
        +      "total": {
        +        "type": [
        +          "null",
        +          "number"
        +        ]
        +      },
        +      "user_cancelled": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"analyze_network_coverageDictOutput"
    • Changedanalyze_routes7 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / route_ids / description
        Added value: +"Routes to report on, in the order returned. Absent means every route in the solution."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "routes": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "totals": {
        +        "type": "object"
        +      },
        +      "workload_model": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"analyze_routesDictOutput"
    • Changedauto_build17 fields changed
      • changedInput schema / properties / build_mode / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "mode": {
        +            "const": "fixed_territory_count"
        +          },
        +          "territory_count": {
        +            "minimum": 1,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "territory_count"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "cycle_unit": {
        +            "enum": [
        +              "day",
        +              "week",
        +              "month",
        +              "quarter",
        +              "year"
        +            ],
        +            "type": "string"
        +          },
        +          "mode": {
        +            "const": "fixed_workload_target"
        +          },
        +          "target_workload": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "workload_unit": {
        +            "enum": [
        +              "minutes",
        +              "hours"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "target_workload"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "mode": {
        +            "const": "scoped_split"
        +          },
        +          "preserve_other_territories": {
        +            "const": true,
        +            "default": true
        +          },
        +          "replacement_territory_count": {
        +            "minimum": 2,
        +            "type": "integer"
        +          },
        +          "source_tal_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "source_territory_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "source_tal_id",
        +          "source_territory_id",
        +          "replacement_territory_count"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / build_mode / description
        Added value: +"Required for execution unless a form-capable modern client answers sizing via Resolve/Elicit. Legacy/no-capability hosts still receive CLARIFICATION_REQUIRED when omitted."
      • removedInput schema / properties / build_mode / title
        Removed value: -"Build Mode"
      • addedInput schema / properties / ignore_visit_frequency / description
        Added value: +"When true, every account is one visit per cycle. Mutually exclusive with visit_frequency_field. Required as the ignore choice when the point layer declares a visit-frequency column."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / part_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "minProperties": 1,
        +    "properties": {
        +      "county_name": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "population": {
        +        "oneOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "minProperties": 1,
        +            "properties": {
        +              "between": {
        +                "items": {
        +                  "type": "number"
        +                },
        +                "maxItems": 2,
        +                "minItems": 2,
        +                "type": "array"
        +              },
        +              "eq": {
        +                "type": "number"
        +              },
        +              "gt": {
        +                "type": "number"
        +              },
        +              "gte": {
        +                "type": "number"
        +              },
        +              "lt": {
        +                "type": "number"
        +              },
        +              "lte": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "spatial": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "bbox"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "geometry"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "bbox": {
        +            "description": "[min_lon, min_lat, max_lon, max_lat] in EPSG:4326.",
        +            "items": {
        +              "type": "number"
        +            },
        +            "maxItems": 4,
        +            "minItems": 4,
        +            "type": "array"
        +          },
        +          "geometry": {
        +            "description": "GeoJSON Polygon or MultiPolygon in EPSG:4326.",
        +            "type": "object"
        +          },
        +          "operator": {
        +            "enum": [
        +              "intersects",
        +              "within",
        +              "contains"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "operator"
        +        ],
        +        "type": "object"
        +      },
        +      "state_abbr": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "territory": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "ts_handle"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "map_session_id"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "include_descendants": {
        +            "default": true,
        +            "description": "When true, rollup territories include descendant leaf territory part_ids.",
        +            "type": "boolean"
        +          },
        +          "map_session_id": {
        +            "description": "Open map session whose Territory Solution holds the TAL.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "tal_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "territory_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "ts_handle": {
        +            "description": "Territory Solution reference (tsh_...) holding the TAL (no inline TS).",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tal_id",
        +          "territory_id"
        +        ],
        +        "type": "object"
        +      },
        +      "text": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "case_sensitive": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "field": {
        +            "description": "Safe text field to search. Defaults to the public part ID column.",
        +            "type": "string"
        +          },
        +          "mode": {
        +            "default": "prefix",
        +            "enum": [
        +              "prefix",
        +              "contains",
        +              "exact"
        +            ],
        +            "type": "string"
        +          },
        +          "value": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / part_filter / description
        Added value: +"Attribute filter resolved via query_parts (e.g. {\"state_abbr\": \"TX\"}). Implies part_scope explicit. Mutually exclusive with part_ids."
      • removedInput schema / properties / part_filter / title
        Removed value: -"Part Filter"
      • addedInput schema / properties / part_ids / description
        Added value: +"Explicit part selection set. Implies part_scope explicit. Mutually exclusive with part_filter."
      • addedInput schema / properties / part_scope / description
        Added value: +"Parts eligible for partition. Default bbox_intersect: all parts intersecting the account-point bounding box. point_matched: only parts containing at least one account. explicit: part_ids or part_filter (e.g. state_abbr TX)."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Point column that scales territory workload by visits per cycle. Mutually exclusive with ignore_visit_frequency. Required as use-or-ignore when the point layer declares a visit-frequency column."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "assignment_count": {
        +        "type": "integer"
        +      },
        +      "assignments_artifact": {
        +        "type": "object"
        +      },
        +      "build_mode_summary": {
        +        "type": "object"
        +      },
        +      "distribution_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": [
        +          "object",
        +          "string"
        +        ]
        +      },
        +      "download_url": {
        +        "type": "string"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "objective_summary": {
        +        "type": "object"
        +      },
        +      "output_mode": {
        +        "type": "string"
        +      },
        +      "part_scope_summary": {
        +        "type": "object"
        +      },
        +      "phase_timings_ms": {
        +        "type": "object"
        +      },
        +      "scoped_split_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_count": {
        +        "type": "integer"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"auto_buildDictOutput"
    • Changedcalculate_route23 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "RepoShape1": {
        +    "description": "Several inline stops in one source.",
        +    "items": {
        +      "$ref": "#/$defs/RepoShape3"
        +    },
        +    "type": "array"
        +  },
        +  "RepoShape2": {
        +    "additionalProperties": true,
        +    "description": "Property equality filter applied to the point layer, e.g. {\"territory_id\": \"<leaf id>\"} after auto_build or {\"bucket_id\": \"d01-b1\"} on <point_layer>_visits after schedule_visits (which also stamps schedule_day, schedule_date, and contractor_id). A display label such as T1 does not match. A list value matches any member.",
        +    "type": "object"
        +  },
        +  "RepoShape3": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "label": {
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "maximum": 90,
        +        "minimum": -90,
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "maximum": 180,
        +        "minimum": -180,
        +        "type": "number"
        +      },
        +      "properties": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "stop_id": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / depart_at / description
        Added value: +"RFC 3339 departure time. Drives traffic-aware durations. Defaults to now."
      • changedInput schema / properties / end / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "filter": {
        +        "$ref": "#/$defs/RepoShape2"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "label_field": {
        +        "description": "Point property to use as the stop label on the map.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "maximum": 90,
        +        "minimum": -90,
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "maximum": 180,
        +        "minimum": -180,
        +        "type": "number"
        +      },
        +      "point_ids": {
        +        "description": "Specific point_id values from point_layer (a <point_layer>_visits layer uses <account_id>#<visit_index>). An id that is not a point_id selects every point with that account_id. For an as_given set, this array is also the visit order.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "point_layer": {
        +        "description": "Ingested point layer to draw stops from. Resolved against ts / ts_handle / map_session_id.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "stop_id": {
        +        "description": "Id for an inline stop. Point-layer stops always use the point's point_id, so a route pushed to Designer links to the same point.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "stops": {
        +        "$ref": "#/$defs/RepoShape1"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / end / description
        Added value: +"Destination. Required for route_type=tour, rejected otherwise."
      • removedInput schema / properties / end / title
        Removed value: -"End"
      • addedInput schema / properties / include_geometry / description
        Added value: +"Set false to skip the route polyline when only sequence and timings are needed."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / route_id / description
        Added value: +"Stable identity for the route inside the solution. A new route_id adds a route alongside the existing ones; reusing a route_id replaces that route in place. To add or drop a stop, call again with the SAME route_id and the revised stop list — there is no add-stop tool and delete_route is for dropping the whole route. Defaults to a slug of route_label, else a generated id."
      • addedInput schema / properties / route_label / description
        Added value: +"Display name for the route on the map and in the legend. Seeds route_id when route_id is omitted."
      • addedInput schema / properties / route_type / description
        Added value: +"circuit returns to start; tour finishes at the declared end (required); open_tour lets the optimizer choose the final stop and never returns to start."
      • addedInput schema / properties / start / description
        Added value: +"Origin. Must resolve to exactly one stop."
      • addedInput schema / properties / start / properties
        Added value: +{
        +  "filter": {
        +    "$ref": "#/$defs/RepoShape2"
        +  },
        +  "label": {
        +    "type": "string"
        +  },
        +  "label_field": {
        +    "description": "Point property to use as the stop label on the map.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "latitude": {
        +    "maximum": 90,
        +    "minimum": -90,
        +    "type": "number"
        +  },
        +  "longitude": {
        +    "maximum": 180,
        +    "minimum": -180,
        +    "type": "number"
        +  },
        +  "point_ids": {
        +    "description": "Specific point_id values from point_layer (a <point_layer>_visits layer uses <account_id>#<visit_index>). An id that is not a point_id selects every point with that account_id. For an as_given set, this array is also the visit order.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "point_layer": {
        +    "description": "Ingested point layer to draw stops from. Resolved against ts / ts_handle / map_session_id.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "stop_id": {
        +    "description": "Id for an inline stop. Point-layer stops always use the point's point_id, so a route pushed to Designer links to the same point.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "stops": {
        +    "$ref": "#/$defs/RepoShape1"
        +  }
        +}
      • removedInput schema / properties / start / title
        Removed value: -"Start"
      • changedInput schema / properties / stop_sets / items / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / stop_sets / items / description
        Added value: +"One group of stops. Sets are visited in array order and optimization never moves a stop across a set boundary."
      • addedInput schema / properties / stop_sets / items / properties
        Added value: +{
        +  "group_by_field": {
        +    "description": "Point property that splits the set into ordered bands, e.g. route_priority. Every band-1 stop precedes every band-2 stop, and stops are optimized within a band.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "group_direction": {
        +    "default": "asc",
        +    "enum": [
        +      "asc",
        +      "desc"
        +    ],
        +    "type": "string"
        +  },
        +  "order": {
        +    "default": "optimize",
        +    "description": "as_given keeps the declared order; optimize sequences the set to reduce travel.",
        +    "enum": [
        +      "as_given",
        +      "optimize"
        +    ],
        +    "type": "string"
        +  },
        +  "set_id": {
        +    "description": "Identifier echoed on each stop in the result. Defaults to set-1, set-2, ...",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "source": {
        +    "additionalProperties": true,
        +    "description": "Either inline coordinates or a reference to points already in the territory solution.",
        +    "properties": {
        +      "filter": {
        +        "$ref": "#/$defs/RepoShape2"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "label_field": {
        +        "description": "Point property to use as the stop label on the map.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "maximum": 90,
        +        "minimum": -90,
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "maximum": 180,
        +        "minimum": -180,
        +        "type": "number"
        +      },
        +      "point_ids": {
        +        "description": "Specific point_id values from point_layer (a <point_layer>_visits layer uses <account_id>#<visit_index>). An id that is not a point_id selects every point with that account_id. For an as_given set, this array is also the visit order.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "point_layer": {
        +        "description": "Ingested point layer to draw stops from. Resolved against ts / ts_handle / map_session_id.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "stop_id": {
        +        "description": "Id for an inline stop. Point-layer stops always use the point's point_id, so a route pushed to Designer links to the same point.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "stops": {
        +        "$ref": "#/$defs/RepoShape1"
        +      }
        +    },
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / stop_sets / minItems
        Added value: +1
      • removedInput schema / properties / stop_sets / title
        Removed value: -"Stop Sets"
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "estimated_remaining_ms": {
        +        "type": "integer"
        +      },
        +      "estimated_start_ms": {
        +        "type": "integer"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_poll_at": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "progress": {
        +        "type": "number"
        +      },
        +      "queue_depth": {
        +        "type": "integer"
        +      },
        +      "queue_lane": {},
        +      "queue_position": {
        +        "type": "integer"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "required_input": {
        +        "type": "object"
        +      },
        +      "result_resource_uri": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "status_resource_uri": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      },
        +      "total": {
        +        "type": [
        +          "null",
        +          "number"
        +        ]
        +      },
        +      "user_cancelled": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"calculate_routeDictOutput"
    • Changedcluster_points18 fields changed
      • changedInput schema / properties / build_mode / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "mode": {
        +            "const": "fixed_territory_count"
        +          },
        +          "territory_count": {
        +            "minimum": 1,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "territory_count"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "mode": {
        +            "const": "fixed_workload_target"
        +          },
        +          "target_workload": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "workload_unit": {
        +            "default": "hours",
        +            "enum": [
        +              "minutes",
        +              "hours"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "target_workload"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / build_mode / description
        Added value: +"Required unless modern form elicitation supplies sizing."
      • removedInput schema / properties / build_mode / title
        Removed value: -"Build Mode"
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / metric_fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "field": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "label": {
        +          "type": "string"
        +        },
        +        "role": {
        +          "description": "Optional semantic role for workload columns. Agents should set visit_frequency or dwell_time when declaring canonical workload inputs.",
        +          "type": "string"
        +        },
        +        "type": {
        +          "enum": [
        +            "number",
        +            "integer",
        +            "string",
        +            "boolean"
        +          ],
        +          "type": "string"
        +        },
        +        "unit": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "field"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / metric_fields / description
        Added value: +"Metric columns to declare on the point layer (same shape as ingest_accounts metric_fields)."
      • removedInput schema / properties / metric_fields / title
        Removed value: -"Metric Fields"
      • changedInput schema / properties / point_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "anyOf": [
        +        {
        +          "type": [
        +            "string",
        +            "number",
        +            "boolean"
        +          ]
        +        },
        +        {
        +          "items": {
        +            "type": [
        +              "string",
        +              "number",
        +              "boolean"
        +            ]
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      ]
        +    },
        +    "minProperties": 1,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / point_filter / description
        Added value: +"Optional property filter on the named point layer. Keys are point properties (equality or IN list). Multiple keys are AND. Example: {\"STATE\": \"FL\"}. Unmatched points stay on the layer ungrouped. part_filter and part_scope are not used here."
      • removedInput schema / properties / point_filter / title
        Removed value: -"Point Filter"
      • addedInput schema / properties / seed_attraction / description
        Added value: +"How hard each group centroid is held at its seed. 100 pins it at the seed; 0 seeds only the starting point and lets the solver drift to the workload centroid. Requires seed_point_layer."
      • addedInput schema / properties / seed_point_layer / description
        Added value: +"Second ingested point layer whose locations anchor the group centroids one-to-one (technician homes, depots). Must differ from point_layer; its point count must equal the group count."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "annotation_summary": {
        +        "type": "object"
        +      },
        +      "build_mode_summary": {
        +        "type": "object"
        +      },
        +      "creates_tal": {
        +        "type": "boolean"
        +      },
        +      "distribution_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "group_count": {
        +        "type": "integer"
        +      },
        +      "group_field": {
        +        "type": "string"
        +      },
        +      "group_labels": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "groups": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "objective_summary": {
        +        "type": "object"
        +      },
        +      "point_count": {
        +        "type": "integer"
        +      },
        +      "point_filter_summary": {
        +        "type": "object"
        +      },
        +      "point_layer": {
        +        "type": "string"
        +      },
        +      "seed_summary": {
        +        "type": "object"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"cluster_pointsDictOutput"
    • Changedconfigure_map21 fields changed
      • addedInput schema / properties / active_tal_id / description
        Added value: +"Durable active alignment restored when the Territory Solution opens."
      • addedInput schema / properties / center / description
        Added value: +"Default camera center as GeoJSON/MapLibre [longitude, latitude]. Persists to map_config.center. An open MC jumps when this request includes center and/or zoom; later config_changed events without those fields leave the camera where it is."
      • changedInput schema / properties / classification / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "bins": {
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "breaks": {
        +        "items": {
        +          "type": "number"
        +        },
        +        "type": "array"
        +      },
        +      "colors": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "labels": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "method": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "metric": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / classification / description
        Added value: +"Project-level map_config classification (e.g. primary metric context for selection-impact preview). It leaves point colors unchanged; a patch naming a point_layer is routed to point_layer_classifications with a warning."
      • removedInput schema / properties / classification / title
        Removed value: -"Classification"
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / point_layer_classifications / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "channel": {
        +          "default": "color",
        +          "enum": [
        +            "color",
        +            "size",
        +            "shape"
        +          ],
        +          "type": "string"
        +        },
        +        "class_count": {
        +          "default": 5,
        +          "maximum": 12,
        +          "minimum": 2,
        +          "type": "integer"
        +        },
        +        "classes": {
        +          "description": "Manual breaks. Each class needs value/values (categorical) or min/max (range) plus the channel value.",
        +          "items": {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "clear": {
        +          "description": "When true, remove this channel's classification and leave the other channels and the base style. field is not required. Group colors stored on classification are removed when that object is this channel.",
        +          "type": "boolean"
        +        },
        +        "colors": {
        +          "description": "Optional explicit color ramp for the color channel; defaults to the shared MC palette.",
        +          "items": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "field": {
        +          "description": "Point property to classify. Required unless the entry only patches style.",
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "filterable": {
        +          "default": true,
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "max_size": {
        +          "exclusiveMinimum": 0,
        +          "type": "number"
        +        },
        +        "method": {
        +          "description": "Defaults to quantile when every value is numeric, categorical otherwise; manual when classes are supplied.",
        +          "enum": [
        +            "quantile",
        +            "equal_interval",
        +            "categorical",
        +            "manual"
        +          ],
        +          "type": "string"
        +        },
        +        "min_size": {
        +          "exclusiveMinimum": 0,
        +          "type": "number"
        +        },
        +        "point_layer": {
        +          "description": "Target point layer id from ts.properties.point_layers or ingest_accounts.",
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "shapes": {
        +          "description": "Required for the shape channel unless every manual class carries a shape. Catalog: circle, square, triangle, diamond, star, cross, house, pin, flag, hexagon, pentagon, shield, arrow_up, building, person (aliases: home, marker/map_pin, hex, arrow/up, warehouse/depot, user/people/tech/technician/rep, plus/x).",
        +          "items": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "sizes": {
        +          "items": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "type": "array"
        +        },
        +        "style": {
        +          "additionalProperties": true,
        +          "description": "Base point symbol for the layer, merged over any existing style. Gives two point layers distinct colors.",
        +          "properties": {
        +            "color": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "opacity": {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            "shape": {
        +              "description": "Point symbol from the MC catalog: circle|square|triangle|diamond|star|cross|house|pin|flag|hexagon|pentagon|shield|arrow_up|building|person.",
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "size": {
        +              "exclusiveMinimum": 0,
        +              "type": "number"
        +            }
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "point_layer"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / point_layer_classifications / description
        Added value: +"Applied point-layer symbology. The server computes breaks from the in-session point features, writes ts.properties.point_layers[].<channel>_classification, and pushes config_changed so an open MC repaints. One entry per layer/channel."
      • removedInput schema / properties / point_layer_classifications / title
        Removed value: -"Point Layer Classifications"
      • changedInput schema / properties / presentation / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "debug_panel": {
        +        "description": "Per-request debug modifier. When true, the MC #debug block shows session/mode/TAL/revision/zoom diagnostics and per-row legend meta. It replaces a custom QA template.",
        +        "type": "boolean"
        +      },
        +      "style_overrides": {
        +        "additionalProperties": true,
        +        "description": "Optional style hints forwarded to the MC renderer (may include theme: 'dark' | 'light' or debug_panel).",
        +        "type": "object"
        +      },
        +      "theme": {
        +        "description": "Map Component basemap and UI theme ('dark' or 'light'; default 'dark'). Also accepted at top-level theme or presentation.style_overrides.theme.",
        +        "enum": [
        +          "dark",
        +          "light"
        +        ],
        +        "type": "string"
        +      },
        +      "view_name": {
        +        "description": "Built-in presentation template. Defaults: select mode → selection; empty project → empty; points-only TS → points_only; TAL/review → review. Diagnostics use presentation.debug_panel (or style_overrides.debug_panel), not a separate template.",
        +        "enum": [
        +          "empty",
        +          "points_only",
        +          "review",
        +          "selection"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "title": "Optional Presentation View/Style Context",
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / presentation / description
        Added value: +"Named presentation context stored on map_config and restored when the TS opens."
      • removedInput schema / properties / presentation / title
        Removed value: -"Presentation"
      • addedInput schema / properties / project_name / description
        Added value: +"First-class Territory Solution short name shown as the Map Component panel title. Persists to ts.properties.map_config.project_name; when an MC session is open for this TS, configure_map pushes config_changed so the title refreshes without reopening the map."
      • addedInput schema / properties / theme / description
        Added value: +"Map Component basemap and UI theme ('dark' or 'light'; default 'dark'). Persists to ts.properties.map_config.theme and repaints the open map session live."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / zoom / description
        Added value: +"Default MapLibre zoom (0-24). Persists to map_config.zoom. An open MC jumps when this request includes center and/or zoom."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "camera": {
        +        "type": "object"
        +      },
        +      "map_config": {
        +        "type": "object"
        +      },
        +      "map_push_status": {
        +        "type": "string"
        +      },
        +      "point_layer_classifications": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"configure_mapDictOutput"
    • Changedcreate_territory_from_parts10 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / part_ids / description
        Added value: +"Parts for the new territory, e.g. committed part_ids from get_part_selection."
      • addedInput schema / properties / repair_policy / description
        Added value: +"Topology repair policy for dissolved geometry (default, strict, or report_only). Interior holes occupied by existing territories in the TS are never filled."
      • addedInput schema / properties / tal_id / description
        Added value: +"Existing TAL to append the new territory to; omit to start a new alignment."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"create_territory_from_partsDictOutput"
    • Changeddelete_point_layer7 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / point_layer / description
        Added value: +"Point layer to delete: the point_layer id, or an exact unique layer label."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "active_tal_id": {
        +        "type": "string"
        +      },
        +      "already_absent": {
        +        "type": "boolean"
        +      },
        +      "deleted_point_layer": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "derived_point_layers_kept": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "remaining_point_layers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "removed_feature_count": {
        +        "type": "integer"
        +      },
        +      "requested_point_layer": {
        +        "type": "string"
        +      },
        +      "routes_still_referencing": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"delete_point_layerDictOutput"
    • Changeddelete_route7 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / route_id / description
        Added value: +"Route to delete: the route_id, or an exact unique route label. Removing one stop is a calculate_route with the same route_id and the remaining stops."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "already_absent": {
        +        "type": "boolean"
        +      },
        +      "deleted_route_id": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "remaining_route_ids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "requested_route_id": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"delete_routeDictOutput"
    • Changeddelete_tal7 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / tal_id / description
        Added value: +"Territory layer / alignment to delete: tal_id or an exact unique TAL label. Removes the whole layer in one call (users say territory layer / all territories / alignment more often than TAL). One leaf is removed with delete_territory."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "active_tal_id": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "already_absent": {
        +        "type": "boolean"
        +      },
        +      "deleted_tal_id": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "remaining_tal_ids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "requested_tal_id": {
        +        "type": "string"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"delete_talDictOutput"
    • Changeddelete_territory11 fields changed
      • addedInput schema / properties / expected_revision / description
        Added value: +"Optional optimistic concurrency revision."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer name when not inferable from the TAL (e.g. us_zips)."
      • addedInput schema / properties / tal_id / description
        Added value: +"Target TAL containing the leaf to delete."
      • addedInput schema / properties / territory_id / description
        Added value: +"Leaf territory_id (e.g. tal-t1-t1) or a unique display name/label alias (e.g. T1)."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "already_absent": {
        +        "type": "boolean"
        +      },
        +      "deleted_territory_id": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "leaf_territories": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "requested_territory_id": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "territories_removed": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"delete_territoryDictOutput"
    • Changeddirect_build12 fields changed
      • removedInput schema / properties / assignments
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Assignments"
        -}
      • addedInput schema / properties / assignments_handle / description
        Added value: +"Required. upload_handle (aup_...) from request_assignment_upload. Single-use: the build claims it."
      • addedInput schema / properties / duplicate_part_policy / description
        Added value: +"When the same part_id maps to different territory_path values, keep_first (default) keeps the first row and skips the rest with a warning; keep_last keeps the last row; fail aborts with CLARIFICATION_REQUIRED."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / missing_part_policy / description
        Added value: +"Controls assigned part IDs that are absent from the selected polygon part layer. fail returns UNKNOWN_PART_ID. drop_with_warning omits them, lists them in invalid_parts, and proceeds with geometry-covered assignments."
      • addedInput schema / properties / tal_id / description
        Added value: +"Optional caller-supplied TAL identifier. When omitted, the server derives a stable ID from tal_label. Supplied IDs must not collide with an existing TAL in the input TS."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "assignment_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "geometry_summary": {
        +        "type": "object"
        +      },
        +      "hierarchy_summary": {
        +        "type": "object"
        +      },
        +      "invalid_parts": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_count": {
        +        "type": "integer"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"direct_buildDictOutput"
    • Changeddiscover_intent8 fields changed
      • changedInput schema / properties / context / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "has_point_layer": {
        +        "type": "boolean"
        +      },
        +      "has_ts_handle": {
        +        "type": "boolean"
        +      },
        +      "has_visit_frequency_field": {
        +        "description": "True when the active point layer declares a visit-frequency column. Appends the route-vs-schedule question on route_stops / periodic_scheduling and the use-or-ignore question on build_from_accounts / account_grouping.",
        +        "type": "boolean"
        +      },
        +      "part_layers_loaded": {
        +        "type": "boolean"
        +      },
        +      "viewer_connected": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / context / description
        Added value: +"Optional state flags that tailor the recommended workflow."
      • removedInput schema / properties / context / title
        Removed value: -"Context"
      • addedInput schema / properties / user_request / description
        Added value: +"The raw natural-language request to classify."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "clarifying_questions": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "confidence": {
        +        "type": "string"
        +      },
        +      "guidance": {
        +        "type": [
        +          "null",
        +          "object"
        +        ]
        +      },
        +      "guidance_uri": {
        +        "type": "string"
        +      },
        +      "intent_category": {
        +        "type": "string"
        +      },
        +      "matched_signals": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "mc_first_required": {
        +        "type": "boolean"
        +      },
        +      "recommended_workflow": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "required_inputs": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "resolved_part_layer": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "tier1_tool": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "tier2_alternatives": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"discover_intentDictOutput"
    • Changedensure_map_viewer6 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization."
      • addedInput schema / properties / wait_seconds / description
        Added value: +"Optional server-side wait window. 0 returns the current snapshot only. Values above 30 are clamped to 30 s per call; on VIEWER_NOT_CONNECTED the error details carry requested_wait_seconds, max_wait_seconds, and next_call (call again)."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "map_session_id": {
        +        "type": "string"
        +      },
        +      "next_step": {
        +        "type": "string"
        +      },
        +      "suggested_action": {
        +        "type": "string"
        +      },
        +      "viewer_status": {
        +        "type": "object"
        +      },
        +      "waited_ms": {
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"ensure_map_viewerDictOutput"
    • Changedep_graph_traverse4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"ep_graph_traverseDictOutput"
    • Changedep_list_topics4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"ep_list_topicsDictOutput"
    • Changedep_search4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"ep_searchDictOutput"
    • Changedexport_geojson12 fields changed
      • addedInput schema / properties / include_routes / description
        Added value: +"Set false to drop the whole route family regardless of route_layers."
      • addedInput schema / properties / job_id / description
        Added value: +"task_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / point_layers / description
        Added value: +"Point layers to include; omit for all."
      • addedInput schema / properties / route_layers / description
        Added value: +"route_id values to include; omit for all. Each exported route emits one route_path feature plus one route_stop feature per visit (never coalesced)."
      • addedInput schema / properties / tal_ids / description
        Added value: +"TALs to materialize; omit for all."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / zip / description
        Added value: +"Default true stores/downloads gzip. Set false for uncompressed GeoJSON."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"export_geojsonDictOutput"
    • Changedextract_tal_branch9 fields changed
      • addedInput schema / properties / branch_rollup_territory_id / description
        Added value: +"Rollup territory whose subtree becomes the branch. Or pass branch_territory_path."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / tal_id / description
        Added value: +"Hierarchical TAL (alignment) to branch from."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "branch_metadata": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "map_url": {
        +        "type": "string"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"extract_tal_branchDictOutput"
    • Changedezt10 fields changed
      • addedInput schema / properties / accounts_handle / description
        Added value: +"upload_handle (aup_...) from request_account_upload."
      • addedInput schema / properties / assignments_handle / description
        Added value: +"upload_handle (aup_...) from request_assignment_upload."
      • changedInput schema / properties / csv_file / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "RFC 2397 data: URI.",
        +        "type": "string"
        +      },
        +      "download_url": {
        +        "description": "Temporary HTTPS download URL from the host.",
        +        "type": "string"
        +      },
        +      "file_id": {
        +        "type": "string"
        +      },
        +      "file_name": {
        +        "type": "string"
        +      },
        +      "mime_type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / csv_file / description
        Added value: +"Host file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"eztDictOutput"
    • Changedgeocode_address9 fields changed
      • addedInput schema / properties / accept_suboptimal_geocodes / description
        Added value: +"When true, accept suboptimal geocodes (e.g. ZIP centroids). Default false so geocode-only workflows surface NO_OPTIMAL_GEOCODE for human review."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • removedInput schema / properties / rows
        Removed value: -{
        -  "items": {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  "title": "Rows",
        -  "type": "array"
        -}
      • addedInput schema / properties / upload_handle
        Added value: +{
        +  "description": "upload_handle (aup_...) from request_account_upload holding the address rows. Not claimed: ingest_accounts can reuse it.",
        +  "title": "Upload Handle",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "rows"
        -]New value: +[
        +  "upload_handle"
        +]
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "do_this_next": {
        +        "type": [
        +          "object",
        +          "string"
        +        ]
        +      },
        +      "download_url": {
        +        "type": "string"
        +      },
        +      "failed_rows": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "failed_rows_truncated": {
        +        "type": "boolean"
        +      },
        +      "geocoded_rows_artifact": {
        +        "type": "object"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "sample_rows": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "share_url": {
        +        "type": "string"
        +      },
        +      "share_url_expires_at": {
        +        "type": "string"
        +      },
        +      "share_with_user": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "suggested_ingest": {
        +        "type": "object"
        +      },
        +      "summary": {
        +        "type": "object"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"geocode_addressDictOutput"
    • Changedget_guidance4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"get_guidanceDictOutput"
    • Changedget_map_selection5 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"get_map_selectionDictOutput"
    • Changedget_map_visualization18 fields changed
      • addedInput schema / properties / active_tal_id / description
        Added value: +"Alignment to show as active."
      • addedInput schema / properties / expiry_seconds / description
        Added value: +"Requested session TTL in seconds. Server may cap at policy maximum."
      • changedInput schema / properties / interaction_flags / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "allow_click_select": {
        +        "default": true,
        +        "description": "Enable click-to-toggle part selection. When false and lasso is enabled, select mode starts in lasso.",
        +        "type": "boolean"
        +      },
        +      "allow_lasso_select": {
        +        "default": true,
        +        "description": "Enable the MC freehand lasso tool in select mode. Lasso adds every visibly overlapping part and preserves the existing selection for click fine-tuning.",
        +        "type": "boolean"
        +      },
        +      "allow_territory_filter": {
        +        "default": false,
        +        "type": "boolean"
        +      }
        +    },
        +    "title": "Allowed Interaction Flags for select Mode",
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / interaction_flags / description
        Added value: +"Only meaningful in select mode."
      • removedInput schema / properties / interaction_flags / title
        Removed value: -"Interaction Flags"
      • addedInput schema / properties / job_id / description
        Added value: +"task_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input."
      • addedInput schema / properties / mode / description
        Added value: +"view — read-only map review/share/verification, no selection commits. select — allows transient local selection and committed selection events."
      • addedInput schema / properties / new_project / description
        Added value: +"Start a fresh map session (session_exists=false) instead of reusing the caller's open workspace. Without ts, ts_handle, or job_id, opens an empty project; with a TS source, opens that Territory Solution on a new session without carrying over prior routes, overlays, or analysis panels. Omitted empty+view reuses the existing project."
      • changedInput schema / properties / presentation / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "debug_panel": {
        +        "description": "Per-request debug modifier. When true, the MC #debug block shows session/mode/TAL/revision/zoom diagnostics and per-row legend meta. It replaces a custom QA template.",
        +        "type": "boolean"
        +      },
        +      "style_overrides": {
        +        "additionalProperties": true,
        +        "description": "Optional style hints forwarded to the MC renderer (may include theme: 'dark' | 'light' or debug_panel).",
        +        "type": "object"
        +      },
        +      "theme": {
        +        "description": "Map Component basemap and UI theme ('dark' or 'light'; default 'dark'). Also accepted at top-level theme or presentation.style_overrides.theme.",
        +        "enum": [
        +          "dark",
        +          "light"
        +        ],
        +        "type": "string"
        +      },
        +      "view_name": {
        +        "description": "Built-in presentation template. Defaults: select mode → selection; empty project → empty; points-only TS → points_only; TAL/review → review. Diagnostics use presentation.debug_panel (or style_overrides.debug_panel), not a separate template.",
        +        "enum": [
        +          "empty",
        +          "points_only",
        +          "review",
        +          "selection"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "title": "Optional Presentation View/Style Context",
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / presentation / title
        Removed value: -"Presentation"
      • addedInput schema / properties / theme / description
        Added value: +"Map Component basemap and UI theme ('dark' or 'light'; default 'dark')."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / user_id / description
        Added value: +"Stable caller id; a second call with the same user_id returns the same map."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "active_part_layer": {
        +        "type": "string"
        +      },
        +      "active_tal_summary": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "loaded_part_layers": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "map_session_id": {
        +        "type": "string"
        +      },
        +      "map_url": {
        +        "type": "string"
        +      },
        +      "new_project": {
        +        "type": "boolean"
        +      },
        +      "next_step": {
        +        "type": "string"
        +      },
        +      "selection_resource_uri": {
        +        "type": "string"
        +      },
        +      "session_exists": {
        +        "type": "boolean"
        +      },
        +      "state_resource_uri": {
        +        "type": "string"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "viewer_status": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"get_map_visualizationDictOutput"
    • Changedget_part_selection5 fields changed
      • addedInput schema / properties / selection_task_id / description
        Added value: +"selection_task_id (psel_...) from request_part_selection."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "active_tal_id": {
        +        "type": "string"
        +      },
        +      "committed_at": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "map_session_id": {
        +        "type": "string"
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "prompt": {
        +        "type": "string"
        +      },
        +      "purpose": {
        +        "type": "string"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "selection": {
        +        "type": "object"
        +      },
        +      "selection_task_id": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"get_part_selectionDictOutput"
    • Changedimport_designer_project6 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / project_id / description
        Added value: +"Designer project id from list_designer_projects."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"import_designer_projectDictOutput"
    • Changedimport_geojson14 fields changed
      • addedInput schema / properties / geojson / description
        Added value: +"GeoJSON FeatureCollection: point features and/or EZT-exported territory features carrying part_ids. Incoming properties.style (color / opacity / size / shape / weight) on features and point_layers[] / route_layers[] is kept as-is; only missing paint is filled, so a reopened export paints exactly as saved (ts-reference.schema.json#/$defs/style)."
      • changedInput schema / properties / geojson_file / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      {
        +        "additionalProperties": true,
        +        "properties": {
        +          "download_url": {
        +            "type": "string"
        +          },
        +          "file_id": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / geojson_file / description
        Added value: +"Host file parameter (openai/fileParams): an object with a temporary https download_url, or that URL as a string."
      • removedInput schema / properties / geojson_file / title
        Removed value: -"Geojson File"
      • addedInput schema / properties / geojson_gzip / description
        Added value: +"Base64 gzip or zip bytes of a GeoJSON FeatureCollection."
      • addedInput schema / properties / overlay_policy / description
        Added value: +"Explicit opt-in for importing territory polygons without part_ids: assigns parts whose centroids fall inside each polygon."
      • addedInput schema / properties / part_layer / description
        Added value: +"Geography for overlay assignment (e.g. us_zips). Required with overlay_policy."
      • addedInput schema / properties / point_layer / description
        Added value: +"Name for the imported point layer (default: points)."
      • addedInput schema / properties / tal_label / description
        Added value: +"Label for the imported TAL when territory features lack TAL metadata."
      • addedInput schema / properties / upload_handle / description
        Added value: +"Upload link handle from import_geojson() with no file argument; returns its upload_status."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "imported_at": {
        +        "type": "string"
        +      },
        +      "summary": {
        +        "type": "object"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "upload_handle": {
        +        "type": "string"
        +      },
        +      "upload_status": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"import_geojsonDictOutput"
    • Changedingest_accounts31 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "RepoShape1": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "role": {
        +        "description": "Optional semantic role for workload columns. Agents should set visit_frequency or dwell_time when declaring canonical workload inputs.",
        +        "type": "string"
        +      },
        +      "type": {
        +        "enum": [
        +          "number",
        +          "integer",
        +          "string",
        +          "boolean"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "field"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / accept_suboptimal_geocodes / description
        Added value: +"When true (default for ingest), accept provider suboptimal geocodes (e.g. ZIP centroids) so address-only rows become points. Set false to require optimal/point-address matches only."
      • addedInput schema / properties / accounts_handle / description
        Added value: +"Required. upload_handle (aup_...) from request_account_upload. Single-use: ingest claims it."
      • addedInput schema / properties / capacity_field / description
        Added value: +"Numeric contractor column holding capacity (e.g. jobs per month). Retained like a declared column."
      • addedInput schema / properties / display_fields / description
        Added value: +"Declared columns shown in Map Component point callouts. Undeclared columns are discarded at ingest and later operations on them fail with UNDECLARED_FIELD."
      • addedInput schema / properties / dwell_time_field / description
        Added value: +"Canonical per-account dwell column on point features. Pair with workload_fields unit metadata when values are in hours."
      • addedInput schema / properties / force_regeocode / description
        Added value: +"When true, ignore existing coordinates and geocode addresses. Also confirms intentional address geocoding when unused numeric lat/lon-like columns are present (skips needs_coordinate_fields guard)."
      • addedInput schema / properties / grouping_fields / description
        Added value: +"Declared columns used to group accounts (e.g. account_build grouping_field candidates). Declared fields are the retention contract: the compact TS keeps only id, coordinates, label, and declared fields; undeclared columns are discarded at ingest."
      • addedInput schema / properties / id_field / description
        Added value: +"Unique business key column. Duplicated label/name columns fail with blocked_by=needs_unique_row_id. With the default row_id and no unique column, the server synthesizes row-1, row-2, … when that column is absent."
      • addedInput schema / properties / label / description
        Added value: +"Legend name for the point layer. Omitted: the point_layer id in title case (accounts is 'Accounts', schools_conus is 'Schools Conus')."
      • addedInput schema / properties / latitude_field / description
        Added value: +"Latitude column. Defaults accept case-insensitive GIS aliases latitude/lat (including LAT). Override for non-standard headers (e.g. Address 1: Latitude). Explicit values win over aliases."
      • addedInput schema / properties / layer_role / description
        Added value: +"contractors marks the supply side of a service network (contractor, vendor, service provider) for analyze_network_coverage."
      • addedInput schema / properties / longitude_field / description
        Added value: +"Longitude column. Defaults accept case-insensitive GIS aliases longitude/lon/lng/long (including LON). Override for non-standard headers. Explicit values win over aliases."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / metric_fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "default": [],
        +    "items": {
        +      "$ref": "#/$defs/RepoShape1"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / metric_fields / description
        Added value: +"Agent-confirmed business metric columns (for example revenue, sales, units) to persist on point-layer metadata for downstream build/analyze tools."
      • removedInput schema / properties / metric_fields / title
        Removed value: -"Metric Fields"
      • removedInput schema / properties / rows
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "additionalProperties": true,
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Rows"
        -}
      • addedInput schema / properties / search_fields / description
        Added value: +"Declared columns searchable in the Map Component. Undeclared columns are discarded at ingest and later operations on them fail with UNDECLARED_FIELD."
      • addedInput schema / properties / service_zip_field / description
        Added value: +"Contractor column listing served ZIPs, comma-separated, for coverage.rule=zip_list. Retained like a declared column."
      • addedInput schema / properties / tier_field / description
        Added value: +"Contractor column holding the network tier (e.g. Preferred). Retained like a declared column."
      • addedInput schema / properties / trade_field / description
        Added value: +"Contractor column naming the trade(s) served (e.g. HVAC; comma-separated for several). Retained like a declared column."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Canonical numeric visits-per-cycle column on point features. Agent-resolved; MCP validates presence and persists on point-layer metadata. Without one, MCP defaults each account to one visit per cycle."
      • changedInput schema / properties / workload_fields / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "default": [],
        +    "items": {
        +      "$ref": "#/$defs/RepoShape1"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / workload_fields / title
        Removed value: -"Workload Fields"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "estimated_remaining_ms": {
        +        "type": "integer"
        +      },
        +      "estimated_start_ms": {
        +        "type": "integer"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_poll_at": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "progress": {
        +        "type": "number"
        +      },
        +      "queue_depth": {
        +        "type": "integer"
        +      },
        +      "queue_lane": {},
        +      "queue_position": {
        +        "type": "integer"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "required_input": {
        +        "type": "object"
        +      },
        +      "result_resource_uri": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "status_resource_uri": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      },
        +      "total": {
        +        "type": [
        +          "null",
        +          "number"
        +        ]
        +      },
        +      "user_cancelled": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"ingest_accountsDictOutput"
    • Changedisochrone_build24 fields changed
      • addedInput schema / properties / avoid / description
        Added value: +"Road classes to keep out of the reachable area. Only values both providers document."
      • addedInput schema / properties / bands / description
        Added value: +"Budgets to draw at each origin. One band gives one leaf per origin; several give a rollup per origin with one leaf per band. Capped (default 5, TOO_MANY_BANDS)."
      • changedInput schema / properties / bands / items / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / bands / items / description
        Added value: +"One reachable-range budget. Exactly one of time_budget_seconds or distance_budget_meters, and every band in a call must use the same one."
      • addedInput schema / properties / bands / items / oneOf
        Added value: +[
        +  {
        +    "required": [
        +      "time_budget_seconds"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "distance_budget_meters"
        +    ]
        +  }
        +]
      • addedInput schema / properties / bands / items / properties
        Added value: +{
        +  "band_id": {
        +    "description": "Stable identity for the band. Defaults to a slug of the budget, e.g. 20min or 25km.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "distance_budget_meters": {
        +    "description": "Drive-distance budget. Capped at 500000m by the stricter provider.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 500000,
        +    "type": "number"
        +  },
        +  "label": {
        +    "description": "Display suffix for this band's territories. Defaults to a readable budget, e.g. \"20 min\".",
        +    "type": "string"
        +  },
        +  "time_budget_seconds": {
        +    "description": "Drive-time budget. Capped at 21600s (6h) by the stricter provider.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 21600,
        +    "type": "number"
        +  }
        +}
      • addedInput schema / properties / bands / minItems
        Added value: +1
      • removedInput schema / properties / bands / title
        Removed value: -"Bands"
      • addedInput schema / properties / depart_at / description
        Added value: +"RFC 3339 departure time, which shapes traffic-aware boundaries. There is no arrive_at: reachable range is forward-only."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / origins / description
        Added value: +"Centers to measure reachability from. Provider calls are origins x bands, so this is capped (default 25, TOO_MANY_ORIGINS)."
      • addedInput schema / properties / origins / items / description
        Added value: +"Either inline coordinates or a reference to points already in the territory solution. Same shape as calculate_route's stopSource, minus the ordering fields."
      • addedInput schema / properties / origins / items / properties
        Added value: +{
        +  "filter": {
        +    "additionalProperties": true,
        +    "description": "Property equality filter applied to the point layer, e.g. {\"type\": \"branch\"}. A list value matches any member.",
        +    "type": "object"
        +  },
        +  "label": {
        +    "description": "Display name for an inline origin.",
        +    "type": "string"
        +  },
        +  "label_field": {
        +    "description": "Point property to use as the origin label, which seeds the territory name.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "latitude": {
        +    "maximum": 90,
        +    "minimum": -90,
        +    "type": "number"
        +  },
        +  "longitude": {
        +    "maximum": 180,
        +    "minimum": -180,
        +    "type": "number"
        +  },
        +  "origin_id": {
        +    "description": "Stable identity for an inline origin. Echoed on every band territory and in the isochrone provenance block. Defaults to origin-1, origin-2, ...",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "point_ids": {
        +    "description": "Specific point IDs from point_layer. Each resolved point becomes one origin.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "point_layer": {
        +    "description": "Ingested point layer to draw origins from. Resolved against ts_handle / map_session_id.",
        +    "minLength": 1,
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / origins / minItems
        Added value: +1
      • removedInput schema / properties / origins / title
        Removed value: -"Origins"
      • addedInput schema / properties / tal_id / description
        Added value: +"Stable identity for the TAL. Reusing an existing id replaces that TAL. Defaults to a slug of tal_label."
      • addedInput schema / properties / tal_label / description
        Added value: +"Display name for the TAL. Defaults to a readable summary, e.g. \"20 min drive time\"."
      • addedInput schema / properties / traffic / description
        Added value: +"Traffic-aware travel times. Ignored for a distance budget."
      • addedInput schema / properties / travel_mode / description
        Added value: +"Narrower than calculate_route on purpose: neither provider offers a pedestrian or bicycle reachable range."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "estimated_remaining_ms": {
        +        "type": "integer"
        +      },
        +      "estimated_start_ms": {
        +        "type": "integer"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_poll_at": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "progress": {
        +        "type": "number"
        +      },
        +      "queue_depth": {
        +        "type": "integer"
        +      },
        +      "queue_lane": {},
        +      "queue_position": {
        +        "type": "integer"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "required_input": {
        +        "type": "object"
        +      },
        +      "result_resource_uri": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "status_resource_uri": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      },
        +      "total": {
        +        "type": [
        +          "null",
        +          "number"
        +        ]
        +      },
        +      "user_cancelled": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"isochrone_buildDictOutput"
    • Changedlink_designer4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"link_designerDictOutput"
    • Changedlist_designer_projects4 fields changed
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"list_designer_projectsDictOutput"
    • Changedlist_part_layers6 fields changed
      • addedInput schema / properties / country_code / description
        Added value: +"Optional 2-letter ISO 3166-1 alpha-2 country code (for example US, CA, GB, DE) to filter the returned part layers."
      • addedInput schema / properties / part_layer / description
        Added value: +"Optional canonical part layer identifier (for example us_zips, us_counties, ca_fsa, uk_areas, germany_postal) to fetch detailed metadata for one layer."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "country_code": {
        +        "type": "string"
        +      },
        +      "generated_at": {
        +        "type": "string"
        +      },
        +      "layer": {
        +        "type": "object"
        +      },
        +      "layer_count": {
        +        "type": "integer"
        +      },
        +      "layers": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "resource": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"list_part_layersDictOutput"
    • Changedload_analysis_panel11 fields changed
      • changedInput schema / properties / analyses / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "description": "A full Analyze result. Must include tal_analyses plus ts_identity, and territory_metric_grids when metrics exist. A thin {tal_analyses} object is rejected.",
        +      "properties": {
        +        "default_presentation": {
        +          "type": "object"
        +        },
        +        "presentation_guidance_uri": {
        +          "type": "string"
        +        },
        +        "tal_analyses": {
        +          "type": "array"
        +        },
        +        "territory_metric_grids": {
        +          "type": "array"
        +        },
        +        "ts_identity": {
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "tal_analyses"
        +      ],
        +      "type": "object"
        +    },
        +    "maxItems": 4,
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / analyses / title
        Removed value: -"Analyses"
      • addedInput schema / properties / dismiss / description
        Added value: +"true hides the whole dock, header bar included, and keeps stored stats. It takes no analyses, task_id, labels, roles, or presentation_mode."
      • addedInput schema / properties / job_id / description
        Added value: +"Compatibility alias for task_id."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization."
      • addedInput schema / properties / presentation_mode / description
        Added value: +"Panel mode. territory_metric_grid is default_presentation.view inside the Analyze result, not a presentation_mode."
      • addedInput schema / properties / task_id / description
        Added value: +"Completed analyze task_id. Same string as job_id. Hydrates analyses when analyses is omitted."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "analysis_count": {
        +        "type": "integer"
        +      },
        +      "analysis_panel": {
        +        "type": "object"
        +      },
        +      "dismissed": {
        +        "type": "boolean"
        +      },
        +      "labels": {
        +        "type": "array"
        +      },
        +      "map_session_id": {
        +        "type": "string"
        +      },
        +      "presentation_mode": {
        +        "type": "string"
        +      },
        +      "roles": {
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"load_analysis_panelDictOutput"
    • Changedpoints_in_territory15 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / max_points / description
        Added value: +"Cap on points listed per territory. point_count and metric_sums always cover every inside point."
      • addedInput schema / properties / metrics / description
        Added value: +"Numeric point columns to sum per territory. Defaults to the layer's declared metric fields."
      • changedInput schema / properties / point_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "anyOf": [
        +        {
        +          "type": [
        +            "string",
        +            "number",
        +            "boolean"
        +          ]
        +        },
        +        {
        +          "items": {
        +            "type": [
        +              "string",
        +              "number",
        +              "boolean"
        +            ]
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      ]
        +    },
        +    "minProperties": 1,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / point_filter / description
        Added value: +"Optional attribute filter (column -> value or list of values, matched case-insensitively, e.g. {\"tier\": \"Gold\"}) applied to the point layer before counting and listing."
      • removedInput schema / properties / point_filter / title
        Removed value: -"Point Filter"
      • addedInput schema / properties / point_layer / description
        Added value: +"Point layer id or exact unique label. Optional when the solution has one layer with points."
      • addedInput schema / properties / tal_id / description
        Added value: +"Territory alignment to query. Defaults to the active TAL, or the sole TAL with leaf polygons."
      • addedInput schema / properties / territory_id / description
        Added value: +"One leaf: its stable territory_id or exact unique display name. Mutually exclusive with territory_ids."
      • addedInput schema / properties / territory_ids / description
        Added value: +"Several leaves (stable ids or exact unique display names). With neither territory_id nor territory_ids, every leaf in the TAL."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "counting": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "overlap_point_count": {
        +        "type": "integer"
        +      },
        +      "overlaps": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "point_layer": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "tal_kind": {
        +        "type": "string"
        +      },
        +      "territories": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "totals": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"points_in_territoryDictOutput"
    • Changedpush_to_designer10 fields changed
      • addedInput schema / properties / job_id / description
        Added value: +"task_id (same value as job_id) of a completed build or ingest task; its Territory Solution is the input."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / part_layer_id / description
        Added value: +"Designer catalog part layer to bind; defaults to the layer a pulled TAL came from."
      • addedInput schema / properties / project_id / description
        Added value: +"Designer project to overwrite in place; omit to create a new project named label."
      • addedInput schema / properties / tal_id / description
        Added value: +"Alignment to push; defaults to the active TAL."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"push_to_designerDictOutput"
    • Changedquery_parts11 fields changed
      • changedInput schema / properties / filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "minProperties": 1,
        +    "properties": {
        +      "county_name": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "population": {
        +        "oneOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "minProperties": 1,
        +            "properties": {
        +              "between": {
        +                "items": {
        +                  "type": "number"
        +                },
        +                "maxItems": 2,
        +                "minItems": 2,
        +                "type": "array"
        +              },
        +              "eq": {
        +                "type": "number"
        +              },
        +              "gt": {
        +                "type": "number"
        +              },
        +              "gte": {
        +                "type": "number"
        +              },
        +              "lt": {
        +                "type": "number"
        +              },
        +              "lte": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "spatial": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "bbox"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "geometry"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "bbox": {
        +            "description": "[min_lon, min_lat, max_lon, max_lat] in EPSG:4326.",
        +            "items": {
        +              "type": "number"
        +            },
        +            "maxItems": 4,
        +            "minItems": 4,
        +            "type": "array"
        +          },
        +          "geometry": {
        +            "description": "GeoJSON Polygon or MultiPolygon in EPSG:4326.",
        +            "type": "object"
        +          },
        +          "operator": {
        +            "enum": [
        +              "intersects",
        +              "within",
        +              "contains"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "operator"
        +        ],
        +        "type": "object"
        +      },
        +      "state_abbr": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "territory": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "ts_handle"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "map_session_id"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "include_descendants": {
        +            "default": true,
        +            "description": "When true, rollup territories include descendant leaf territory part_ids.",
        +            "type": "boolean"
        +          },
        +          "map_session_id": {
        +            "description": "Open map session whose Territory Solution holds the TAL.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "tal_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "territory_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "ts_handle": {
        +            "description": "Territory Solution reference (tsh_...) holding the TAL (no inline TS).",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tal_id",
        +          "territory_id"
        +        ],
        +        "type": "object"
        +      },
        +      "text": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "case_sensitive": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "field": {
        +            "description": "Safe text field to search. Defaults to the public part ID column.",
        +            "type": "string"
        +          },
        +          "mode": {
        +            "default": "prefix",
        +            "enum": [
        +              "prefix",
        +              "contains",
        +              "exact"
        +            ],
        +            "type": "string"
        +          },
        +          "value": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / filter / description
        Added value: +"Attribute/text/range/spatial/territory filter. Mutually exclusive with top-level part_ids."
      • removedInput schema / properties / filter / title
        Removed value: -"Filter"
      • addedInput schema / properties / max_results / description
        Added value: +"Maximum results per page. Server may enforce lower limits."
      • addedInput schema / properties / page_token / description
        Added value: +"Pagination token from a previous response."
      • addedInput schema / properties / part_ids / description
        Added value: +"Explicit list of part IDs. Mutually exclusive with filter. Useful for validation or enrichment."
      • addedInput schema / properties / part_layer / description
        Added value: +"Required part layer identifier, e.g. 'us_zips'."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_page_token": {
        +        "type": "string"
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "parts": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "total_count": {
        +        "type": "integer"
        +      },
        +      "warnings": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"query_partsDictOutput"
    • Changedrealign14 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • changedInput schema / properties / moves / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "from_territory_id": {
        +          "description": "Optional — provided for optimistic validation. If supplied and the part is not currently in this territory, the operation fails with UNKNOWN_SOURCE_TERRITORY.",
        +          "type": "string"
        +        },
        +        "part_id": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "to_territory_id": {
        +          "description": "Target leaf territory ID within the specified tal_id. Unassigned parts may be assigned directly when no from_territory_id is supplied.",
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "part_id",
        +        "to_territory_id"
        +      ],
        +      "title": "Directed Part-Move Operation",
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / moves / title
        Removed value: -"Moves"
      • addedInput schema / properties / part_ids / description
        Added value: +"Required for remove_parts operation."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer name, e.g. us_zips, us_counties. Required when not inferable from the TAL."
      • addedInput schema / properties / realign_operation / description
        Added value: +"Realignment operation. Defaults to move_to_territory when moves[] is supplied."
      • addedInput schema / properties / remove_empty_territories / description
        Added value: +"When true with remove_parts, drop leaf territories that become empty."
      • addedInput schema / properties / tal_id / description
        Added value: +"Target TAL to realign. Required — ambiguous TAL is an error."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "changed_territories": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "moved_part_ids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "removed_part_ids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territories_removed": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"realignDictOutput"
    • Changedreintegrate_branch15 fields changed
      • changedInput schema / properties / branch_metadata / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / branch_metadata / anyOf
        Added value: +[
        +  {
        +    "required": [
        +      "branch_part_ids"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "branch_part_ids_sha256",
        +      "branch_part_ids_count"
        +    ]
        +  }
        +]
      • addedInput schema / properties / branch_metadata / oneOf
        Added value: +[
        +  {
        +    "required": [
        +      "branch_rollup_territory_id"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "branch_territory_path"
        +    ]
        +  }
        +]
      • addedInput schema / properties / branch_metadata / properties
        Added value: +{
        +  "branch_part_ids": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "branch_part_ids_count": {
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "branch_part_ids_sha256": {
        +    "pattern": "^sha256:[A-Fa-f0-9]{64}$",
        +    "type": "string"
        +  },
        +  "branch_rollup_territory_id": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "branch_territory_path": {
        +    "items": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "maxItems": 5,
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "delegate_ref": {
        +    "type": "string"
        +  },
        +  "extract_revision": {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  "extract_ts_id": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "extracted_at": {
        +    "format": "date-time",
        +    "type": "string"
        +  },
        +  "locked_part_ids": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "master_content_hash": {
        +    "pattern": "^sha256:[A-Fa-f0-9]{64}$",
        +    "type": "string"
        +  },
        +  "master_revision": {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  "master_ts_id": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "parent_ts_id": {
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "point_layer_scope": {
        +    "const": "branch_parts_only",
        +    "type": "string"
        +  },
        +  "tal_id": {
        +    "minLength": 1,
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / branch_metadata / required
        Added value: +[
        +  "master_ts_id",
        +  "master_revision",
        +  "tal_id",
        +  "extract_ts_id",
        +  "extract_revision",
        +  "parent_ts_id",
        +  "extracted_at",
        +  "point_layer_scope"
        +]
      • changedInput schema / properties / branch_metadata / title
        Previous value: -"Branch Metadata"New value: +"Branch Extract Metadata"
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • removedInput schema / properties / master_ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Master Ts"
        -}
      • addedInput schema / properties / master_ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedInput schema / properties / proposal_ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Proposal Ts"
        -}
      • addedInput schema / properties / proposal_ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "reintegrate_result": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"reintegrate_branchDictOutput"
    • Changedrequest_account_upload7 fields changed
      • changedInput schema / properties / csv_file / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "RFC 2397 data: URI.",
        +        "type": "string"
        +      },
        +      "download_url": {
        +        "description": "Temporary HTTPS download URL from the host.",
        +        "type": "string"
        +      },
        +      "file_id": {
        +        "type": "string"
        +      },
        +      "file_name": {
        +        "type": "string"
        +      },
        +      "mime_type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / csv_file / description
        Added value: +"Host file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url."
      • addedInput schema / properties / upload_handle / description
        Added value: +"Existing upload_handle (aup_...) to append this chunk of rows to."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"request_account_uploadDictOutput"
    • Changedrequest_assignment_upload7 fields changed
      • changedInput schema / properties / csv_file / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "data": {
        +        "description": "RFC 2397 data: URI.",
        +        "type": "string"
        +      },
        +      "download_url": {
        +        "description": "Temporary HTTPS download URL from the host.",
        +        "type": "string"
        +      },
        +      "file_id": {
        +        "type": "string"
        +      },
        +      "file_name": {
        +        "type": "string"
        +      },
        +      "mime_type": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / csv_file / description
        Added value: +"Host file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url."
      • addedInput schema / properties / upload_handle / description
        Added value: +"Existing upload_handle (aup_...) to append this chunk of rows to."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"request_assignment_uploadDictOutput"
    • Changedrequest_part_selection13 fields changed
      • addedInput schema / properties / active_tal_id / description
        Added value: +"Alignment shown as active while the person selects."
      • addedInput schema / properties / destination_territory_id / description
        Added value: +"Optional receiver leaf territory when Monica/agent named the destination up front."
      • addedInput schema / properties / map_session_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set.",
        +  "title": "Map Session Id"
        +}
      • changedInput schema / properties / new_territory / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "territory_id": {
        +        "type": "string"
        +      },
        +      "territory_label": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "territory_path": {
        +        "items": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "maxItems": 5,
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "territory_label"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / new_territory / title
        Removed value: -"New Territory"
      • addedInput schema / properties / prompt / description
        Added value: +"Human-facing selection instruction shown by the host/agent or MC."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline.",
        +  "title": "Ts Handle"
        +}
      • addedInput schema / properties / user_id / description
        Added value: +"Stable caller id; finds the open map when map_session_id is omitted."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "active_tal_id": {
        +        "type": "string"
        +      },
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "destination_territory_id": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "map_session_id": {
        +        "type": "string"
        +      },
        +      "map_url": {
        +        "type": "string"
        +      },
        +      "new_territory": {
        +        "type": "object"
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "prompt": {
        +        "type": "string"
        +      },
        +      "purpose": {
        +        "type": "string"
        +      },
        +      "realign_operation": {
        +        "type": "string"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "remove_empty_territories": {
        +        "type": "boolean"
        +      },
        +      "selection_resource_uri": {
        +        "type": "string"
        +      },
        +      "selection_task_id": {
        +        "type": "string"
        +      },
        +      "session_exists": {
        +        "type": "boolean"
        +      },
        +      "state_resource_uri": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"request_part_selectionDictOutput"
    • Changedschedule_visits39 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "RepoShape1": {
        +    "additionalProperties": false,
        +    "description": "Expands each matching point in point_layer into one contractor whose start is that point.",
        +    "properties": {
        +      "end": {
        +        "$ref": "#/$defs/RepoShape3"
        +      },
        +      "filter": {
        +        "minProperties": 1,
        +        "type": "object"
        +      },
        +      "label_field": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "point_ids": {
        +        "items": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "point_layer": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "pre_service_stops": {
        +        "$ref": "#/$defs/RepoShape2"
        +      },
        +      "route_type": {
        +        "default": "circuit",
        +        "enum": [
        +          "circuit",
        +          "tour",
        +          "open_tour"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "point_layer"
        +    ],
        +    "type": "object"
        +  },
        +  "RepoShape2": {
        +    "items": {
        +      "$ref": "#/$defs/RepoShape3"
        +    },
        +    "type": "array"
        +  },
        +  "RepoShape3": {
        +    "description": "Stop location resolved from a point layer in the TS or inline WGS84 coordinates (T-214).",
        +    "oneOf": [
        +      {
        +        "$ref": "#/$defs/RepoShape5"
        +      },
        +      {
        +        "$ref": "#/$defs/RepoShape4"
        +      }
        +    ]
        +  },
        +  "RepoShape4": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "contractor_id": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "dwell_minutes": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "id": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "label": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "maximum": 90,
        +        "minimum": -90,
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "maximum": 180,
        +        "minimum": -180,
        +        "type": "number"
        +      },
        +      "name": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "stop_id": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "latitude",
        +      "longitude"
        +    ],
        +    "type": "object"
        +  },
        +  "RepoShape5": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "dwell_minutes": {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "filter": {
        +        "minProperties": 1,
        +        "type": "object"
        +      },
        +      "label_field": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "point_ids": {
        +        "items": {
        +          "type": [
        +            "string",
        +            "integer"
        +          ]
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      },
        +      "point_layer": {
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "point_layer"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / cadence_flexibility_pct / description
        Added value: +"Percent of an account's own cadence a single visit may drift so the number of work clusters stays comparable day to day. At the default 15 a 14-day account may slide two days and a 7-day account one; a 3-day account does not move. Set to 0 for strict cadence. A drift past this tolerance happens only to staff a day that would otherwise be short of work — an idle technician costs more than a visit arriving a day early — and every relaxed visit is reported in distribution_summary.cadence_relaxation and the visits layer's cadence_drift_days column."
      • changedInput schema / properties / contractors / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "$ref": "#/$defs/RepoShape1"
        +      },
        +      {
        +        "items": {
        +          "oneOf": [
        +            {
        +              "$ref": "#/$defs/RepoShape1"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contractor_id": {
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "$ref": "#/$defs/RepoShape3"
        +                },
        +                "label": {
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "pre_service_stops": {
        +                  "$ref": "#/$defs/RepoShape2"
        +                },
        +                "route_type": {
        +                  "default": "circuit",
        +                  "enum": [
        +                    "circuit",
        +                    "tour",
        +                    "open_tour"
        +                  ],
        +                  "type": "string"
        +                },
        +                "start": {
        +                  "$ref": "#/$defs/RepoShape3"
        +                }
        +              },
        +              "required": [
        +                "start"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "contractor_id": {
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "end": {
        +                  "$ref": "#/$defs/RepoShape3"
        +                },
        +                "label": {
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                "latitude": {
        +                  "maximum": 90,
        +                  "minimum": -90,
        +                  "type": "number"
        +                },
        +                "longitude": {
        +                  "maximum": 180,
        +                  "minimum": -180,
        +                  "type": "number"
        +                },
        +                "pre_service_stops": {
        +                  "$ref": "#/$defs/RepoShape2"
        +                },
        +                "route_type": {
        +                  "default": "circuit",
        +                  "enum": [
        +                    "circuit",
        +                    "tour",
        +                    "open_tour"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "latitude",
        +                "longitude"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "minItems": 1,
        +        "type": "array"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / contractors / description
        Added value: +"Optional contractor anchoring (T-214). Takes a point-layer source (e.g. {point_layer: 'contractors'}) or a list of contractor entries with start, optional pre_service_stops (e.g. a depot with dwell_minutes), route_type (circuit|tour|open_tour), and optional end."
      • removedInput schema / properties / contractors / title
        Removed value: -"Contractors"
      • changedInput schema / properties / daily_capacity / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "hours": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "mode": {
        +            "const": "not_to_exceed"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "hours"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "hours": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "mode": {
        +            "const": "target_band"
        +          },
        +          "tolerance_pct": {
        +            "default": 10,
        +            "maximum": 100,
        +            "minimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "hours"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / daily_capacity / description
        Added value: +"Workload limit for one bucket (one technician-day). not_to_exceed is a hard ceiling the scheduler never breaches; target_band aims for the target and accepts anything inside the tolerance."
      • removedInput schema / properties / daily_capacity / title
        Removed value: -"Daily Capacity"
      • addedInput schema / properties / emit_visit_layer / description
        Added value: +"Materialize one point per scheduled visit so color-by-day and the calculate_route handoff are single calls."
      • addedInput schema / properties / estimate_only / description
        Added value: +"When true, runs a fast capacity-planning preflight without mutating the Territory Solution or emitting a visits layer, returning capacity_plan (open_service_days, closed_days, required_daily_hours_avg, peak_day_floor_hours, min_resources_per_day, recommended_resources_per_day, and remedies)."
      • addedInput schema / properties / frequency_unit / description
        Added value: +"interval_days: the value is the maximum days between visits. visits_per_horizon: the value is how many visits the account gets across the whole horizon."
      • changedInput schema / properties / horizon / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "oneOf": [
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "mode": {
        +            "const": "derived"
        +          }
        +        },
        +        "required": [
        +          "mode"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "additionalProperties": false,
        +        "properties": {
        +          "days": {
        +            "minimum": 1,
        +            "type": "integer"
        +          },
        +          "mode": {
        +            "const": "explicit"
        +          }
        +        },
        +        "required": [
        +          "mode",
        +          "days"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / horizon / description
        Added value: +"Planning horizon. derived takes the longest interval among scheduled accounts; explicit is how a 28- or 42-day rolling cycle is requested when intervals leave a remainder on a shorter horizon."
      • removedInput schema / properties / horizon / title
        Removed value: -"Horizon"
      • addedInput schema / properties / horizon_start_date / description
        Added value: +"Calendar date of horizon day 1. Required when visit_constraints is non-empty; without it dated constraints return CLARIFICATION_REQUIRED (needs_horizon_start_date). There is no default of today."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / max_buckets_per_day / description
        Added value: +"Cap on concurrent buckets in one day, normally the technician/contractor count (cannot exceed len(contractors) when contractors are supplied). Omitted with no contractors: one bucket per day; when that does not fit, CLARIFICATION_REQUIRED (blocked_by needs_technician_count) returns capacity_plan and asks how many technicians."
      • addedInput schema / properties / never_visit_values / description
        Added value: +"Frequency values that mean the account is left off the schedule. Matching accounts are excluded and reported in excluded_accounts, never silently dropped."
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "balance_bias": {
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "compactness_bias": {
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / objective / description
        Added value: +"Biases must sum to 100. Raising balance_bias to 100 lengthens otherwise efficient days to equalize hours, which is rarely what the customer wants."
      • removedInput schema / properties / objective / title
        Removed value: -"Objective"
      • changedInput schema / properties / point_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "anyOf": [
        +        {
        +          "type": [
        +            "string",
        +            "number",
        +            "boolean"
        +          ]
        +        },
        +        {
        +          "items": {
        +            "type": [
        +              "string",
        +              "number",
        +              "boolean"
        +            ]
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      ]
        +    },
        +    "minProperties": 1,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / point_filter / description
        Added value: +"Optional attribute filter (property -> value or list of values) to schedule a subset of point_layer."
      • removedInput schema / properties / point_filter / title
        Removed value: -"Point Filter"
      • addedInput schema / properties / point_ids / description
        Added value: +"Optional list of account/point IDs to schedule."
      • addedInput schema / properties / tal_id / description
        Added value: +"Optional TAL id when filtering scheduled accounts by territory_id or territory_ids."
      • addedInput schema / properties / territory_id / description
        Added value: +"Optional leaf territory id or unique display label to schedule only accounts inside that territory polygon."
      • addedInput schema / properties / territory_ids / description
        Added value: +"Optional list of leaf territory ids or display labels to schedule only accounts inside those territory polygons."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • changedInput schema / properties / visit_constraints / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "One date constraint for an account, account_ids, or all accounts ('*'), resolved against horizon_start_date (T-213). blackout/no_service_window: forbidden dates (date, dates, a range, annual or weekly recurrence), always hard. fixed: a hard appointment that consumes a cadence visit. due: a deadline (optional earliest_date); hardness penalized (reported in constraint_summary.sla_violations) or hard. anchor: a date or weekday fixing the pattern phase. allowed_weekdays: visits land on those weekdays.",
        +      "properties": {
        +        "account_id": {
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "account_ids": {
        +          "items": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        },
        +        "date": {
        +          "format": "date",
        +          "type": "string"
        +        },
        +        "dates": {
        +          "items": {
        +            "format": "date",
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "earliest_date": {
        +          "format": "date",
        +          "type": "string"
        +        },
        +        "end_date": {
        +          "format": "date",
        +          "type": "string"
        +        },
        +        "hardness": {
        +          "enum": [
        +            "hard",
        +            "penalized"
        +          ],
        +          "type": "string"
        +        },
        +        "kind": {
        +          "enum": [
        +            "blackout",
        +            "no_service_window",
        +            "fixed",
        +            "due",
        +            "anchor",
        +            "allowed_weekdays"
        +          ],
        +          "type": "string"
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "recurrence": {
        +          "default": "none",
        +          "enum": [
        +            "none",
        +            "annual",
        +            "weekly"
        +          ],
        +          "type": "string"
        +        },
        +        "source": {
        +          "type": "string"
        +        },
        +        "start_date": {
        +          "format": "date",
        +          "type": "string"
        +        },
        +        "weekday": {
        +          "enum": [
        +            "mon",
        +            "tue",
        +            "wed",
        +            "thu",
        +            "fri",
        +            "sat",
        +            "sun"
        +          ],
        +          "type": "string"
        +        },
        +        "weekdays": {
        +          "items": {
        +            "enum": [
        +              "mon",
        +              "tue",
        +              "wed",
        +              "thu",
        +              "fri",
        +              "sat",
        +              "sun"
        +            ],
        +            "type": "string"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "kind"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / visit_constraints / description
        Added value: +"Separate account-keyed date-constraint dataset: blackouts/no-service windows, fixed dates, SLA due dates, anchor days, allowed weekdays. See visitConstraint."
      • removedInput schema / properties / visit_constraints / title
        Removed value: -"Visit Constraints"
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Numeric point column declared at ingest. Undeclared columns fail with UNDECLARED_FIELD."
      • addedInput schema / properties / visit_layer_name / description
        Added value: +"Defaults to <point_layer>_visits. This name is the schedule's identity: re-running with the same name replaces the layer in place, a different name adds a second schedule for comparison."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "account_count": {
        +        "type": "integer"
        +      },
        +      "buckets": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "capacity_plan": {
        +        "type": "object"
        +      },
        +      "constraint_summary": {
        +        "type": "object"
        +      },
        +      "contractors": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "creates_tal": {
        +        "type": "boolean"
        +      },
        +      "days": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "distribution_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "string"
        +      },
        +      "download_url": {
        +        "type": "string"
        +      },
        +      "estimate_only": {
        +        "type": "boolean"
        +      },
        +      "excluded_accounts": {
        +        "items": {
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "horizon_days": {
        +        "type": "integer"
        +      },
        +      "horizon_end_date": {
        +        "type": "string"
        +      },
        +      "horizon_fit": {
        +        "type": "object"
        +      },
        +      "horizon_mode": {
        +        "type": "string"
        +      },
        +      "horizon_start_date": {
        +        "type": "string"
        +      },
        +      "map_refresh": {
        +        "type": "object"
        +      },
        +      "next_tool": {
        +        "type": "string"
        +      },
        +      "point_layer": {
        +        "type": "string"
        +      },
        +      "schedule_artifact": {
        +        "type": "object"
        +      },
        +      "schedule_id": {
        +        "type": "string"
        +      },
        +      "schedule_label": {
        +        "type": "string"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      },
        +      "visit_count": {
        +        "type": "integer"
        +      },
        +      "visit_layer": {
        +        "type": [
        +          "null",
        +          "object"
        +        ]
        +      },
        +      "workload_model": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"schedule_visitsDictOutput"
    • Changedseed_build30 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / max_parts / description
        Added value: +"Safety cap on parts in the grown territory. Reaching it stops growth with target_status max_parts_reached."
      • changedInput schema / properties / part_filter / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "minProperties": 1,
        +    "properties": {
        +      "county_name": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "population": {
        +        "oneOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "additionalProperties": false,
        +            "minProperties": 1,
        +            "properties": {
        +              "between": {
        +                "items": {
        +                  "type": "number"
        +                },
        +                "maxItems": 2,
        +                "minItems": 2,
        +                "type": "array"
        +              },
        +              "eq": {
        +                "type": "number"
        +              },
        +              "gt": {
        +                "type": "number"
        +              },
        +              "gte": {
        +                "type": "number"
        +              },
        +              "lt": {
        +                "type": "number"
        +              },
        +              "lte": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          }
        +        ]
        +      },
        +      "spatial": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "bbox"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "geometry"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "bbox": {
        +            "description": "[min_lon, min_lat, max_lon, max_lat] in EPSG:4326.",
        +            "items": {
        +              "type": "number"
        +            },
        +            "maxItems": 4,
        +            "minItems": 4,
        +            "type": "array"
        +          },
        +          "geometry": {
        +            "description": "GeoJSON Polygon or MultiPolygon in EPSG:4326.",
        +            "type": "object"
        +          },
        +          "operator": {
        +            "enum": [
        +              "intersects",
        +              "within",
        +              "contains"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "operator"
        +        ],
        +        "type": "object"
        +      },
        +      "state_abbr": {
        +        "type": [
        +          "string",
        +          "array"
        +        ]
        +      },
        +      "territory": {
        +        "additionalProperties": false,
        +        "oneOf": [
        +          {
        +            "required": [
        +              "ts_handle"
        +            ]
        +          },
        +          {
        +            "required": [
        +              "map_session_id"
        +            ]
        +          }
        +        ],
        +        "properties": {
        +          "include_descendants": {
        +            "default": true,
        +            "description": "When true, rollup territories include descendant leaf territory part_ids.",
        +            "type": "boolean"
        +          },
        +          "map_session_id": {
        +            "description": "Open map session whose Territory Solution holds the TAL.",
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "tal_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "territory_id": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "ts_handle": {
        +            "description": "Territory Solution reference (tsh_...) holding the TAL (no inline TS).",
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "tal_id",
        +          "territory_id"
        +        ],
        +        "type": "object"
        +      },
        +      "text": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "case_sensitive": {
        +            "default": false,
        +            "type": "boolean"
        +          },
        +          "field": {
        +            "description": "Safe text field to search. Defaults to the public part ID column.",
        +            "type": "string"
        +          },
        +          "mode": {
        +            "default": "prefix",
        +            "enum": [
        +              "prefix",
        +              "contains",
        +              "exact"
        +            ],
        +            "type": "string"
        +          },
        +          "value": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / part_filter / description
        Added value: +"Attribute filter resolved via query_parts (e.g. {\"state_abbr\": \"TX\"}). Implies part_scope explicit. Mutually exclusive with part_ids."
      • removedInput schema / properties / part_filter / title
        Removed value: -"Part Filter"
      • addedInput schema / properties / part_ids / description
        Added value: +"Explicit eligible part set. Implies part_scope explicit. Mutually exclusive with part_filter."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer to grow over, e.g. us_zips (ezt://part-layers). Required unless tal_id names a TAL that already has one; must match that TAL's layer when both are given."
      • addedInput schema / properties / part_scope / description
        Added value: +"Growth reads only the seed's neighbourhood (rings outward from the seed part), so this is an allowlist switch, not a performance prerequisite. explicit: confine growth to part_ids or part_filter (e.g. state_abbr TX) when the user wants the territory bounded by that geography. bbox_intersect / point_matched are accepted for compatibility with auto_build and ignored — seed_build never joins the whole point layer to the bbox parts."
      • addedInput schema / properties / point_layer / description
        Added value: +"Ingested point layer whose locations are counted or summed. Required when the TS has more than one point layer."
      • changedInput schema / properties / seed / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / seed / description
        Added value: +"Where growth starts. For an address or POI, stage it as one row with request_account_upload, then geocode_address(upload_handle); a map click already gives coordinates."
      • addedInput schema / properties / seed / properties
        Added value: +{
        +  "latitude": {
        +    "maximum": 90,
        +    "minimum": -90,
        +    "type": "number"
        +  },
        +  "longitude": {
        +    "maximum": 180,
        +    "minimum": -180,
        +    "type": "number"
        +  }
        +}
      • addedInput schema / properties / seed / required
        Added value: +[
        +  "longitude",
        +  "latitude"
        +]
      • removedInput schema / properties / seed / title
        Removed value: -"Seed"
      • addedInput schema / properties / tal_id / description
        Added value: +"Existing TAL to append the new leaf to. Parts already assigned to any leaf of this TAL are never taken (the territory drifts instead). Without it, a new TAL is created."
      • addedInput schema / properties / tal_label / description
        Added value: +"Display name for the new TAL when tal_id is omitted. Ignored when tal_id is given."
      • changedInput schema / properties / target / additionalProperties
        Previous value: -trueNew value: +false
      • addedInput schema / properties / target / description
        Added value: +"What the territory grows toward. Fit is closest: |achieved - value| is minimized, so the result may land slightly under or over."
      • addedInput schema / properties / target / if
        Added value: +{
        +  "properties": {
        +    "type": {
        +      "const": "metric_sum"
        +    }
        +  }
        +}
      • addedInput schema / properties / target / properties
        Added value: +{
        +  "field": {
        +    "description": "Required for metric_sum. Must be a column declared in metric_fields (or workload_fields) at ingest; otherwise UNDECLARED_FIELD.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "type": {
        +    "description": "location_count counts points in the point layer; metric_sum sums a declared numeric metric column.",
        +    "enum": [
        +      "location_count",
        +      "metric_sum"
        +    ],
        +    "type": "string"
        +  },
        +  "value": {
        +    "description": "Target count or target sum.",
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  }
        +}
      • addedInput schema / properties / target / required
        Added value: +[
        +  "type",
        +  "value"
        +]
      • addedInput schema / properties / target / then
        Added value: +{
        +  "required": [
        +    "field"
        +  ]
        +}
      • removedInput schema / properties / target / title
        Removed value: -"Target"
      • addedInput schema / properties / territory_name / description
        Added value: +"Display name for the new leaf. Defaults to the next free \"Territory N\" in the TAL. Must be unique within the TAL."
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / user_id / description
        Added value: +"Stable per-user label for usage and queue ordering."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "estimated_remaining_ms": {
        +        "type": "integer"
        +      },
        +      "estimated_start_ms": {
        +        "type": "integer"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "next_poll_at": {
        +        "type": "string"
        +      },
        +      "phase": {
        +        "type": "string"
        +      },
        +      "poll_interval_ms": {
        +        "type": "integer"
        +      },
        +      "poll_loop": {
        +        "type": "object"
        +      },
        +      "progress": {
        +        "type": "number"
        +      },
        +      "queue_depth": {
        +        "type": "integer"
        +      },
        +      "queue_lane": {},
        +      "queue_position": {
        +        "type": "integer"
        +      },
        +      "recommended_poll_delay_ms": {
        +        "type": "integer"
        +      },
        +      "required_input": {
        +        "type": "object"
        +      },
        +      "result_resource_uri": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "status_resource_uri": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      },
        +      "total": {
        +        "type": [
        +          "null",
        +          "number"
        +        ]
        +      },
        +      "user_cancelled": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"seed_buildDictOutput"
    • Changedset_map_state8 fields changed
      • addedInput schema / properties / active_tal_id / description
        Added value: +"Alignment to make active on the open map (session only)."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization."
      • changedInput schema / properties / pending_job_reference / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "job_id": {
        +        "description": "Same value as task_id.",
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "tool_name": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / pending_job_reference / description
        Added value: +"Task reference (task_id from a build submission) the map follows and repaints from when the task completes."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"set_map_stateDictOutput"
    • Changedshow_map_overlay10 fields changed
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / overlay_id / description
        Added value: +"Canonical id: us_zips, accounts, tal-current, etc."
      • addedInput schema / properties / route_id / description
        Added value: +"With overlay_kind=route, targets one route instead of all of them. Without it, every route is re-pushed or cleared. Only re-shows or clears a route calculate_route already produced — it never routes."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / user_request / description
        Added value: +"Natural-language ask, e.g. 'add zips to the map'."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "delegated_tool": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "do_this_next": {
        +        "type": [
        +          "object",
        +          "string"
        +        ]
        +      },
        +      "map_push_status": {
        +        "type": "string"
        +      },
        +      "overlay_id": {
        +        "type": "string"
        +      },
        +      "overlay_kind": {
        +        "type": "string"
        +      },
        +      "route_id": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "route_ids": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "viewer_hint": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "visibility": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"show_map_overlayDictOutput"
    • Changedsubmit_feedback9 fields changed
      • addedInput schema / properties / context_summary / description
        Added value: +"Optional sanitized summary only. Excludes credentials, API keys, raw customer data, private territory assignments, and PII."
      • addedInput schema / properties / correlation_id / description
        Added value: +"task_id, job_id, or request id the feedback is about."
      • addedInput schema / properties / session_id / description
        Added value: +"Client session id, if the host has one."
      • addedInput schema / properties / user_goal / description
        Added value: +"What the user was trying to accomplish, sanitized."
      • addedInput schema / properties / what_happened / description
        Added value: +"Where the agent struggled, failed, found confusing results, or used a workaround."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "feedback_id": {
        +        "type": "string"
        +      },
        +      "message": {
        +        "type": "string"
        +      },
        +      "received_at": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"submit_feedbackDictOutput"
    • Changedtasks_cancel4 fields changed
      • addedInput schema / properties / task_id / description
        Added value: +"task_id of the working task to stop."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "_meta": {
        +    "type": "object"
        +  },
        +  "createdAt": {
        +    "type": "string"
        +  },
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "lastUpdatedAt": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "next_poll_at": {
        +    "type": "string"
        +  },
        +  "phase": {
        +    "type": "string"
        +  },
        +  "pollInterval": {
        +    "type": "integer"
        +  },
        +  "poll_loop": {
        +    "type": "object"
        +  },
        +  "progress": {
        +    "type": "number"
        +  },
        +  "recommended_poll_delay_ms": {
        +    "type": "integer"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "source_status": {
        +    "type": "string"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "statusMessage": {
        +    "type": "string"
        +  },
        +  "taskId": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  },
        +  "ttl": {
        +    "type": "integer"
        +  }
        +}
      • removedOutput schema / title
        Removed value: -"tasks_cancelDictOutput"
    • Changedtasks_get5 fields changed
      • addedInput schema / properties / task_id / description
        Added value: +"task_id from the submitting tool's result (same value as job_id)."
      • addedInput schema / properties / wait_ms / description
        Added value: +"Optional milliseconds to hold on the server while the task is working so completed tasks return consume_result without an extra poll round-trip."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "_meta": {
        +    "type": "object"
        +  },
        +  "createdAt": {
        +    "type": "string"
        +  },
        +  "do_this_next": {
        +    "type": "object"
        +  },
        +  "lastUpdatedAt": {
        +    "type": "string"
        +  },
        +  "next_action": {
        +    "type": "string"
        +  },
        +  "next_poll_at": {
        +    "type": "string"
        +  },
        +  "phase": {
        +    "type": "string"
        +  },
        +  "pollInterval": {
        +    "type": "integer"
        +  },
        +  "poll_loop": {
        +    "type": "object"
        +  },
        +  "progress": {
        +    "type": "number"
        +  },
        +  "recommended_poll_delay_ms": {
        +    "type": "integer"
        +  },
        +  "sleep_ms": {
        +    "type": "integer"
        +  },
        +  "source_status": {
        +    "type": "string"
        +  },
        +  "status": {
        +    "type": "string"
        +  },
        +  "statusMessage": {
        +    "type": "string"
        +  },
        +  "taskId": {
        +    "type": "string"
        +  },
        +  "terminal": {
        +    "type": "boolean"
        +  },
        +  "ttl": {
        +    "type": "integer"
        +  }
        +}
      • removedOutput schema / title
        Removed value: -"tasks_getDictOutput"
    • Changedtasks_result5 fields changed
      • addedInput schema / properties / task_id / description
        Added value: +"task_id whose status next_action is consume_result."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"tasks_resultDictOutput"
    • Changedterritory_merge16 fields changed
      • addedInput schema / properties / balance_tolerance / description
        Added value: +"Accepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves."
      • addedInput schema / properties / disruption_weight / description
        Added value: +"Incumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / new_tal_label / description
        Added value: +"Label for the derived TAL. Defaults to '<source label> (<operation>)'."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer (e.g. us_zips). Required only when not inferable from the source TAL."
      • addedInput schema / properties / point_layer / description
        Added value: +"Optional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used."
      • addedInput schema / properties / source_tal_id / description
        Added value: +"Source TAL. Optional for form-capable clients that can answer via elicitation."
      • addedInput schema / properties / territory_id_a / description
        Added value: +"First territory (id or label). The merged territory keeps this identity."
      • addedInput schema / properties / territory_id_b / description
        Added value: +"Second territory (id or label). Must be adjacent to territory_id_a."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Numeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "balance_summary": {
        +        "type": "object"
        +      },
        +      "disruption_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "solver_diagnostics": {
        +        "type": "object"
        +      },
        +      "source_tal_id": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_count": {
        +        "type": "integer"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"territory_mergeDictOutput"
    • Changedterritory_rebalance14 fields changed
      • addedInput schema / properties / balance_tolerance / description
        Added value: +"Accepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves."
      • addedInput schema / properties / disruption_weight / description
        Added value: +"Incumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / new_tal_label / description
        Added value: +"Label for the derived TAL. Defaults to '<source label> (<operation>)'."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer (e.g. us_zips). Required only when not inferable from the source TAL."
      • addedInput schema / properties / point_layer / description
        Added value: +"Optional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used."
      • addedInput schema / properties / source_tal_id / description
        Added value: +"Source TAL. Optional for form-capable clients that can answer via elicitation."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Numeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "balance_summary": {
        +        "type": "object"
        +      },
        +      "disruption_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "solver_diagnostics": {
        +        "type": "object"
        +      },
        +      "source_tal_id": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_count": {
        +        "type": "integer"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"territory_rebalanceDictOutput"
    • Changedterritory_split16 fields changed
      • addedInput schema / properties / balance_tolerance / description
        Added value: +"Accepted for compatibility. The power-diagram rebalance converges on its own internal tolerance, so this value no longer gates per-part moves."
      • addedInput schema / properties / disruption_weight / description
        Added value: +"Incumbency stickiness for the warm-started power-diagram rebalance. 0 is a pure power re-solve (max balance, more churn); higher values keep more of the source alignment by requiring a neighbor territory to inflate further before it can claim a border part."
      • addedInput schema / properties / map_session_id / description
        Added value: +"Open map session (msess_...) from get_map_visualization. Its Territory Solution is the input; omit ts_handle when set."
      • addedInput schema / properties / new_tal_label / description
        Added value: +"Label for the derived TAL. Defaults to '<source label> (<operation>)'."
      • addedInput schema / properties / new_territory_label / description
        Added value: +"Label for the second territory created by the split. Defaults to '<target> (split)'."
      • addedInput schema / properties / part_layer / description
        Added value: +"Part layer (e.g. us_zips). Required only when not inferable from the source TAL."
      • addedInput schema / properties / point_layer / description
        Added value: +"Optional point layer used to compute per-part workload/metric measures. When omitted, a uniform geography-only weighting is used."
      • addedInput schema / properties / source_tal_id / description
        Added value: +"Source TAL. Optional for form-capable clients that can answer via elicitation."
      • addedInput schema / properties / target_territory_id / description
        Added value: +"Leaf territory (id or label) to split into two. Optional when elicitation can fill it."
      • removedInput schema / properties / ts
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Ts"
        -}
      • addedInput schema / properties / ts_handle / description
        Added value: +"Territory Solution reference (tsh_...) from a build, ingest_accounts, import_geojson, import_designer_project, or get_map_visualization; Territory Solutions are not accepted inline."
      • addedInput schema / properties / visit_frequency_field / description
        Added value: +"Numeric visits-per-cycle column on the point layer. When omitted, inherits from source TAL build_provenance or point-layer metadata."
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true. A submission returns the task reference (task_id, next_action, sleep_ms); the completed task result carries the remaining fields.",
        +    "properties": {
        +      "balance_summary": {
        +        "type": "object"
        +      },
        +      "disruption_summary": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "expires_at": {
        +        "type": "string"
        +      },
        +      "job_id": {
        +        "type": "string"
        +      },
        +      "next_action": {
        +        "type": "string"
        +      },
        +      "operation": {
        +        "type": "string"
        +      },
        +      "repair_summary": {
        +        "type": "object"
        +      },
        +      "sleep_ms": {
        +        "type": "integer"
        +      },
        +      "solver_diagnostics": {
        +        "type": "object"
        +      },
        +      "source_tal_id": {
        +        "type": "string"
        +      },
        +      "status": {
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "type": "string"
        +      },
        +      "task_id": {
        +        "type": "string"
        +      },
        +      "terminal": {
        +        "type": "boolean"
        +      },
        +      "territory_count": {
        +        "type": "integer"
        +      },
        +      "ts_handle": {
        +        "type": "string"
        +      },
        +      "ts_identity": {
        +        "type": "object"
        +      },
        +      "ts_omitted": {
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"territory_splitDictOutput"
    • Changedworkflow_advisor11 fields changed
      • changedInput schema / properties / inputs / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "analysis_requested": {
        +        "description": "realign: opt into post-edit Analyze even without a declared point layer (AN-004).",
        +        "type": "boolean"
        +      },
        +      "assignments_handle": {
        +        "type": "string"
        +      },
        +      "balance_metric": {
        +        "type": "string"
        +      },
        +      "destination_territory_id": {
        +        "type": "string"
        +      },
        +      "grouping_field": {
        +        "type": "string"
        +      },
        +      "moves": {
        +        "description": "realign: explicit [{part_id, to_territory_id}] moves (skips map-selection steps).",
        +        "type": "array"
        +      },
        +      "new_tal_label": {
        +        "type": "string"
        +      },
        +      "new_territory_label": {
        +        "type": "string"
        +      },
        +      "operation": {
        +        "description": "restructure: which restructure tool (default rebalance).",
        +        "enum": [
        +          "split",
        +          "merge",
        +          "rebalance"
        +        ],
        +        "type": "string"
        +      },
        +      "output_mode": {
        +        "description": "For auto_build/account_build: return the default TAL or a downloadable assignments-only artifact.",
        +        "enum": [
        +          "tal",
        +          "assignments"
        +        ],
        +        "type": "string"
        +      },
        +      "part_ids": {
        +        "description": "realign: committed/explicit part ids for realign_operation.",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "part_layer": {
        +        "type": "string"
        +      },
        +      "point_layer": {
        +        "type": "string"
        +      },
        +      "realign_operation": {
        +        "description": "realign: preset op (e.g. assign_to_territory, remove_parts).",
        +        "type": "string"
        +      },
        +      "source_tal_id": {
        +        "description": "restructure: source TAL.",
        +        "type": "string"
        +      },
        +      "tal_id": {
        +        "description": "realign: TAL to edit.",
        +        "type": "string"
        +      },
        +      "tal_label": {
        +        "type": "string"
        +      },
        +      "target_territory_id": {
        +        "description": "restructure split: territory to split.",
        +        "type": "string"
        +      },
        +      "target_workload": {
        +        "exclusiveMinimum": 0,
        +        "type": "number"
        +      },
        +      "territory_count": {
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "territory_id_a": {
        +        "description": "restructure merge: first territory.",
        +        "type": "string"
        +      },
        +      "territory_id_b": {
        +        "description": "restructure merge: second territory.",
        +        "type": "string"
        +      },
        +      "to_territory_id": {
        +        "description": "realign: destination territory id.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / inputs / description
        Added value: +"Optional plan parameters used to draft next_args."
      • removedInput schema / properties / inputs / title
        Removed value: -"Inputs"
      • addedInput schema / properties / intent_category / description
        Added value: +"build_from_accounts | account_grouping | point_clustering | known_assignments | realign_existing | restructure | delete_territory | load_part_layer | reachable_area | seed_growth | coverage_gap_analysis | route_stops | routes_layer | delete_route | delete_point_layer | points_in_territory | periodic_scheduling. Tool names (auto_build, account_build, cluster_points, direct_build, isochrone_build, seed_build, analyze_network_coverage) are accepted as aliases; any other value returns the unsupported-category fallback."
      • changedInput schema / properties / state / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "analysis_fresh": {
        +        "type": "boolean"
        +      },
        +      "analysis_panel_loaded": {
        +        "type": "boolean"
        +      },
        +      "analysis_requested": {
        +        "description": "realign: user explicitly requested post-edit analysis; otherwise geography-only realign stops after the live map refresh.",
        +        "type": "boolean"
        +      },
        +      "expected_revision": {
        +        "description": "realign: optimistic-concurrency revision.",
        +        "type": [
        +          "integer",
        +          "null"
        +        ]
        +      },
        +      "headless": {
        +        "type": "boolean"
        +      },
        +      "map_session_id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "part_layer": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "point_layer": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "realign_applied": {
        +        "description": "realign: the realign mutation completed.",
        +        "type": "boolean"
        +      },
        +      "selection_committed": {
        +        "description": "realign: parts committed on the map.",
        +        "type": "boolean"
        +      },
        +      "selection_requested": {
        +        "description": "realign: a request_part_selection task exists.",
        +        "type": "boolean"
        +      },
        +      "selection_task_id": {
        +        "description": "realign: id to poll with get_part_selection.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "source_tal_id": {
        +        "description": "restructure: source TAL.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "tal_id": {
        +        "description": "realign: TAL being edited.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "tal_present": {
        +        "type": "boolean"
        +      },
        +      "ts_handle": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "user_id": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "viewer_connected": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / state / description
        Added value: +"Agent-supplied workflow state; all keys optional and default to 'not done yet'."
      • removedInput schema / properties / state / title
        Removed value: -"State"
      • removedOutput schema / additionalProperties
        Removed value: -true
      • addedOutput schema / properties
        Added value: +{
        +  "error": {
        +    "description": "Present when ok is false.",
        +    "properties": {
        +      "ask_user": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "details": {
        +        "type": "object"
        +      },
        +      "do_this_next": {
        +        "type": "object"
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "ok": {
        +    "type": "boolean"
        +  },
        +  "result": {
        +    "description": "Present when ok is true.",
        +    "properties": {
        +      "blocked_by": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "build_tool": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "done": {
        +        "type": "boolean"
        +      },
        +      "guidance": {
        +        "type": [
        +          "null",
        +          "object"
        +        ]
        +      },
        +      "guidance_uri": {
        +        "type": "string"
        +      },
        +      "intent_category": {
        +        "type": "string"
        +      },
        +      "invariants_enforced": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "missing_inputs": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "next_args": {
        +        "type": "object"
        +      },
        +      "next_tool": {
        +        "type": [
        +          "null",
        +          "string"
        +        ]
        +      },
        +      "note": {
        +        "type": "string"
        +      },
        +      "remaining_steps": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "supported": {
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "warnings": {
        +    "items": {
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "ok"
        +]
      • removedOutput schema / title
        Removed value: -"workflow_advisorDictOutput"
  5. 7 tool updates
    • Changedaccount_build1 field changed
      • changedInput schema / properties / output_mode / description
        Previous value: -"tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh."New value: +"tal is the default. assignments returns assignments_artifact plus an authenticated download_url and a key-less share_url; no ts_handle, tal_id, or map_refresh."
    • Changedauto_build1 field changed
      • changedInput schema / properties / output_mode / description
        Previous value: -"tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh."New value: +"tal is the default. assignments returns assignments_artifact plus an authenticated download_url and a key-less share_url; no ts_handle, tal_id, or map_refresh."
    • Addedimport_designer_project
    • Changedimport_geojson2 fields changed
      • addedInput schema / properties / geojson_file
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Geojson File"
        +}
      • addedInput schema / properties / upload_handle
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Upload Handle"
        +}
    • Addedlink_designer
    • Addedlist_designer_projects
    • Addedpush_to_designer
  6. 2 tool updates
    • Changedschedule_visits6 fields changed
      • addedInput schema / properties / estimate_only
        Added value: +{
        +  "default": false,
        +  "title": "Estimate Only",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / point_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Point Filter"
        +}
      • addedInput schema / properties / point_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Point Ids"
        +}
      • addedInput schema / properties / tal_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Tal Id"
        +}
      • addedInput schema / properties / territory_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Territory Id"
        +}
      • addedInput schema / properties / territory_ids
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Territory Ids"
        +}
    • Changedtasks_get1 field changed
      • addedInput schema / properties / wait_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Wait Ms"
        +}
  7. 2 tool updates
    • Changedconfigure_map1 field changed
      • addedInput schema / properties / theme
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Theme"
        +}
    • Changedget_map_visualization1 field changed
      • addedInput schema / properties / theme
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Theme"
        +}
  8. 6 tool updates
    • Changedauto_build1 field changed
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
        +    "properties": {
        +      "metric": {
        +        "description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance.",
        +        "type": "string"
        +      },
        +      "metric_bias": {
        +        "description": "Weight (0..100) on the metric or location-count dimension.",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "workload_bias": {
        +        "description": "Weight (0..100) on workload (drive time + dwell).",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcluster_points1 field changed
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
        +    "properties": {
        +      "metric": {
        +        "description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance.",
        +        "type": "string"
        +      },
        +      "metric_bias": {
        +        "description": "Weight (0..100) on the metric or location-count dimension.",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "workload_bias": {
        +        "description": "Weight (0..100) on workload (drive time + dwell).",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedpoints_in_territory1 field changed
      • addedInput schema / properties / point_filter
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Point Filter"
        +}
    • Changedterritory_merge1 field changed
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
        +    "properties": {
        +      "metric": {
        +        "description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance.",
        +        "type": "string"
        +      },
        +      "metric_bias": {
        +        "description": "Weight (0..100) on the metric or location-count dimension.",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "workload_bias": {
        +        "description": "Weight (0..100) on workload (drive time + dwell).",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedterritory_rebalance1 field changed
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
        +    "properties": {
        +      "metric": {
        +        "description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance.",
        +        "type": "string"
        +      },
        +      "metric_bias": {
        +        "description": "Weight (0..100) on the metric or location-count dimension.",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "workload_bias": {
        +        "description": "Weight (0..100) on workload (drive time + dwell).",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedterritory_split1 field changed
      • changedInput schema / properties / objective / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
        +    "properties": {
        +      "metric": {
        +        "description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance.",
        +        "type": "string"
        +      },
        +      "metric_bias": {
        +        "description": "Weight (0..100) on the metric or location-count dimension.",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "workload_bias": {
        +        "description": "Weight (0..100) on workload (drive time + dwell).",
        +        "maximum": 100,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  9. 1 tool update
    • Addedlist_part_layers
  10. 1 tool update
    • Changedschedule_visits1 field changed
      • addedInput schema / properties / contractors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Contractors"
        +}
  11. 4 tool updates
    • Addedanalyze_network_coverage
    • Changedingest_accounts5 fields changed
      • addedInput schema / properties / capacity_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Capacity Field"
        +}
      • addedInput schema / properties / layer_role
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "accounts",
        +        "contractors"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Layer Role"
        +}
      • addedInput schema / properties / service_zip_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Service Zip Field"
        +}
      • addedInput schema / properties / tier_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Tier Field"
        +}
      • addedInput schema / properties / trade_field
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Trade Field"
        +}
    • Addedpoints_in_territory
    • Changedschedule_visits2 fields changed
      • addedInput schema / properties / horizon_start_date
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Horizon Start Date"
        +}
      • addedInput schema / properties / visit_constraints
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Visit Constraints"
        +}
  12. 10 tool updates
    • Changedanalyze1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedanalyze_routes1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedauto_build1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcalculate_route1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcluster_points1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedcreate_territory_from_parts2 fields changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / repair_policy
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Repair Policy"
        +}
    • Changedschedule_visits1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedterritory_merge1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedterritory_rebalance1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedterritory_split1 field changed
      • changedInput schema / properties / dwell_time / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
        +    "properties": {
        +      "field": {
        +        "description": "Point column name holding per-account onsite time when type='field'.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column.",
        +        "enum": [
        +          "scalar",
        +          "field"
        +        ],
        +        "type": "string"
        +      },
        +      "unit": {
        +        "default": "minutes",
        +        "description": "Time unit for value or field ('minutes' or 'hours').",
        +        "enum": [
        +          "minutes",
        +          "hours"
        +        ],
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Confirmed onsite duration per visit when type='scalar'.",
        +        "minimum": 0,
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "type"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  13. 2 tool updates
    • Addeddelete_point_layer
    • Changedingest_accounts3 fields changed
      • addedInput schema / properties / label / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / label / default
        Previous value: -"Accounts"New value: +null
      • removedInput schema / properties / label / type
        Removed value: -"string"
  14. 1 tool update
    • Changedanalyze1 field changed
      • changedInput schema / properties / analysis_panel / anyOf
        Previous value: -[
        -  {
        -    "description": "single fills the open map's analysis dock with this result (needs map_session_id). comparison_slot fills the same dock (no side-by-side layout). none or omitted pushes nothing. Not the same enum as load_analysis_panel.presentation_mode (single|compare).",
        -    "enum": [
        -      "none",
        -      "single",
        -      "comparison_slot"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "single fills the open map's analysis dock with this result (needs map_session_id). The dock shows one alignment at a time: with several tal_ids each TAL gets its own dock entry and the dock follows the map's active TAL. comparison_slot does the same and also returns cross_tal_comparison. none or omitted pushes nothing.",
        +    "enum": [
        +      "none",
        +      "single",
        +      "comparison_slot"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  15. 37 tool updates
    • Changedaccount_build1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedanalyze2 fields changed
      • changedInput schema / properties / analysis_panel / anyOf
        Previous value: -[
        -  {
        -    "description": "single fills the open map's analysis dock with this result (pass map_session_id); prefer it. comparison_slot fills the same dock (no side-by-side layout). none or omitted pushes nothing. Not the same enum as load_analysis_panel.presentation_mode (single|compare).",
        -    "enum": [
        -      "none",
        -      "single",
        -      "comparison_slot"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "single fills the open map's analysis dock with this result (needs map_session_id). comparison_slot fills the same dock (no side-by-side layout). none or omitted pushes nothing. Not the same enum as load_analysis_panel.presentation_mode (single|compare).",
        +    "enum": [
        +      "none",
        +      "single",
        +      "comparison_slot"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedanalyze_routes1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedauto_build1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedcalculate_route1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedcluster_points1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedconfigure_map1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedcreate_territory_from_parts1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changeddelete_route1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changeddelete_tal1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changeddelete_territory1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changeddirect_build1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedensure_map_viewer1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedexport_geojson1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedextract_tal_branch1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedezt1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedgeocode_address1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedget_map_selection1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedget_map_visualization1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedget_part_selection1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedimport_geojson1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedingest_accounts1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedisochrone_build1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedload_analysis_panel1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedquery_parts1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedrealign1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedreintegrate_branch1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedrequest_account_upload1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedrequest_assignment_upload1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedrequest_part_selection1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedschedule_visits1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedseed_build1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedset_map_state1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedshow_map_overlay1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedterritory_merge1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedterritory_rebalance1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}
    • Changedterritory_split1 field changed
      • removedInput schema / properties / guidance_handle
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Guidance Handle"
        -}

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.
    8
    17 npm
    7
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Geospatial API tools for AI agents — geocoding, reverse geocoding, routing, isochrone, distance matrix, static maps, H3 hexagons, elevation, GPS map-matching, point-in-polygon, address normalisation, timezone lookup, and batch geocoding. Built on OpenStreetMap infrastructure. Cost-effective alternative to Google Maps API.
    18
    39 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources