feat(voice): add reusable geometry actions

- turn named places and mapped landmarks into reusable bounded areas
- count loaded records inside resolved, drawn and annotated geometry
- find recent imagery for an area, the view or the pointer snapshot
- keep osm place search behind an operator-configured overpass endpoint
- preserve cancellation, ownership and follow-up memory across every action
- cover geometry, provider lifecycle, cache isolation and voice routing
This commit is contained in:
manjunath22466 committed 2026-10-03 10:23:38 +05:30
1 parent 01979bba1e
commit b234d7b427
84 files changed
+14262 -1681

No files matched your search

+91 -1
View File
@@ -1,4 +1,8 @@
import { HUD_LAYOUTS } from '../hudLayoutPolicy.js';
import {
AREA_CANDIDATE_ID_PATTERN,
MAX_AREA_CANDIDATE_ID_LENGTH,
} from './areaCandidateContract.js';
// Canonical action arguments. Descriptive wording is supplied separately.
import {
@@ -782,11 +786,28 @@ const schemas = [
properties: {
kind: {
type: 'string',
enum: ['view', 'region', 'radius', 'anywhere', 'pointer'],
enum: [
'view',
'region',
'radius',
'anywhere',
'pointer',
'area',
'drawn',
'annotation',
],
},
name: {
type: 'string',
},
areaId: {
type: 'string',
maxLength: 120,
},
id: {
type: 'string',
maxLength: 60,
},
km: {
type: 'number',
},
@@ -843,6 +864,75 @@ const schemas = [
},
},
},
{
name: 'resolve_area',
parameters: {
type: 'object',
additionalProperties: false,
properties: {
query: { type: 'string', minLength: 1, maxLength: 200 },
level: {
type: 'string',
enum: [
'country',
'admin1',
'admin2',
'city',
'district',
'natural',
'site',
],
},
within: { type: 'string', maxLength: 120 },
candidateId: {
type: 'string',
minLength: 1,
maxLength: MAX_AREA_CANDIDATE_ID_LENGTH,
pattern: AREA_CANDIDATE_ID_PATTERN,
},
draw: { type: 'boolean' },
around: { type: 'boolean' },
radiusM: { type: 'number', minimum: 50, maximum: 20000 },
flyTo: { type: 'boolean' },
},
},
},
{
name: 'find_imagery',
parameters: {
type: 'object',
additionalProperties: false,
properties: {
areaId: { type: 'string', maxLength: 120 },
area: { type: 'string', enum: ['view', 'pointer'] },
dateRange: {
type: 'object',
additionalProperties: false,
properties: {
from: { type: 'string', maxLength: 30 },
to: { type: 'string', maxLength: 30 },
days: { type: 'number', minimum: 1, maximum: 30 },
},
},
maxCloudPct: { type: 'number', minimum: 0, maximum: 100 },
source: { type: 'string', enum: ['hls', 'viirs', 'any'] },
},
},
},
{
name: 'osm_query',
parameters: {
type: 'object',
additionalProperties: false,
required: ['what'],
properties: {
what: { type: 'string', minLength: 1, maxLength: 80 },
areaId: { type: 'string', maxLength: 120 },
countOnly: { type: 'boolean' },
limit: { type: 'number', minimum: 1, maximum: 1000 },
},
},
},
{
name: 'next_iss_pass',
parameters: {