@honua/app-platform 0.0.20-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (840) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/app/index.d.ts +164 -0
  4. package/app/index.d.ts.map +1 -0
  5. package/app/index.js +424 -0
  6. package/app-controller/controller.d.ts +425 -0
  7. package/app-controller/controller.d.ts.map +1 -0
  8. package/app-controller/controller.js +1173 -0
  9. package/app-controller/index.d.ts +14 -0
  10. package/app-controller/index.d.ts.map +1 -0
  11. package/app-controller/index.js +12 -0
  12. package/app-workspace/index.d.ts +421 -0
  13. package/app-workspace/index.d.ts.map +1 -0
  14. package/app-workspace/index.js +722 -0
  15. package/collaboration/client.d.ts +40 -0
  16. package/collaboration/client.d.ts.map +1 -0
  17. package/collaboration/client.js +299 -0
  18. package/collaboration/errors.d.ts +15 -0
  19. package/collaboration/errors.d.ts.map +1 -0
  20. package/collaboration/errors.js +17 -0
  21. package/collaboration/fixture.d.ts +41 -0
  22. package/collaboration/fixture.d.ts.map +1 -0
  23. package/collaboration/fixture.js +362 -0
  24. package/collaboration/index.d.ts +18 -0
  25. package/collaboration/index.d.ts.map +1 -0
  26. package/collaboration/index.js +14 -0
  27. package/collaboration/types.d.ts +240 -0
  28. package/collaboration/types.d.ts.map +1 -0
  29. package/collaboration/types.js +1 -0
  30. package/contract/analytics-sources.d.ts +149 -0
  31. package/contract/analytics-sources.d.ts.map +1 -0
  32. package/contract/analytics-sources.js +235 -0
  33. package/contract/edit-session.d.ts +203 -0
  34. package/contract/edit-session.d.ts.map +1 -0
  35. package/contract/edit-session.js +760 -0
  36. package/contract/edit-sketch.d.ts +91 -0
  37. package/contract/edit-sketch.d.ts.map +1 -0
  38. package/contract/edit-sketch.js +281 -0
  39. package/contract/index.d.ts +63 -0
  40. package/contract/index.d.ts.map +1 -0
  41. package/contract/index.js +52 -0
  42. package/contract/jobs.d.ts +149 -0
  43. package/contract/jobs.d.ts.map +1 -0
  44. package/contract/jobs.js +40 -0
  45. package/contract/pmtiles.d.ts +162 -0
  46. package/contract/pmtiles.d.ts.map +1 -0
  47. package/contract/pmtiles.js +155 -0
  48. package/contract/source.d.ts +447 -0
  49. package/contract/source.d.ts.map +1 -0
  50. package/contract/source.js +3909 -0
  51. package/contract/spatial-aggregation.d.ts +336 -0
  52. package/contract/spatial-aggregation.d.ts.map +1 -0
  53. package/contract/spatial-aggregation.js +298 -0
  54. package/contract/temporal.d.ts +455 -0
  55. package/contract/temporal.d.ts.map +1 -0
  56. package/contract/temporal.js +146 -0
  57. package/contract/tiles.d.ts +370 -0
  58. package/contract/tiles.d.ts.map +1 -0
  59. package/contract/tiles.js +519 -0
  60. package/contract/types.d.ts +694 -0
  61. package/contract/types.d.ts.map +1 -0
  62. package/contract/types.js +183 -0
  63. package/contract/widget-source.d.ts +205 -0
  64. package/contract/widget-source.d.ts.map +1 -0
  65. package/contract/widget-source.js +1473 -0
  66. package/control-plane/client.d.ts +95 -0
  67. package/control-plane/client.d.ts.map +1 -0
  68. package/control-plane/client.js +374 -0
  69. package/control-plane/index.d.ts +18 -0
  70. package/control-plane/index.d.ts.map +1 -0
  71. package/control-plane/index.js +14 -0
  72. package/control-plane/types.d.ts +233 -0
  73. package/control-plane/types.d.ts.map +1 -0
  74. package/control-plane/types.js +7 -0
  75. package/controls/basemap-style-binding.d.ts +54 -0
  76. package/controls/basemap-style-binding.d.ts.map +1 -0
  77. package/controls/basemap-style-binding.js +199 -0
  78. package/controls/basemap-switcher.d.ts +95 -0
  79. package/controls/basemap-switcher.d.ts.map +1 -0
  80. package/controls/basemap-switcher.js +379 -0
  81. package/controls/element-utils.d.ts +48 -0
  82. package/controls/element-utils.d.ts.map +1 -0
  83. package/controls/element-utils.js +78 -0
  84. package/controls/index.d.ts +33 -0
  85. package/controls/index.d.ts.map +1 -0
  86. package/controls/index.js +30 -0
  87. package/controls/layer-list.d.ts +98 -0
  88. package/controls/layer-list.d.ts.map +1 -0
  89. package/controls/layer-list.js +375 -0
  90. package/controls/legend-derive.d.ts +53 -0
  91. package/controls/legend-derive.d.ts.map +1 -0
  92. package/controls/legend-derive.js +196 -0
  93. package/controls/legend.d.ts +104 -0
  94. package/controls/legend.d.ts.map +1 -0
  95. package/controls/legend.js +381 -0
  96. package/controls/swipe-control.d.ts +80 -0
  97. package/controls/swipe-control.d.ts.map +1 -0
  98. package/controls/swipe-control.js +368 -0
  99. package/controls/types.d.ts +227 -0
  100. package/controls/types.d.ts.map +1 -0
  101. package/controls/types.js +11 -0
  102. package/core/auth/client-credentials-provider.d.ts +51 -0
  103. package/core/auth/client-credentials-provider.d.ts.map +1 -0
  104. package/core/auth/client-credentials-provider.js +115 -0
  105. package/core/auth/credential-store.d.ts +52 -0
  106. package/core/auth/credential-store.d.ts.map +1 -0
  107. package/core/auth/credential-store.js +82 -0
  108. package/core/auth/index.d.ts +23 -0
  109. package/core/auth/index.d.ts.map +1 -0
  110. package/core/auth/index.js +20 -0
  111. package/core/auth/oauth2-provider.d.ts +114 -0
  112. package/core/auth/oauth2-provider.d.ts.map +1 -0
  113. package/core/auth/oauth2-provider.js +408 -0
  114. package/core/auth/pkce.d.ts +25 -0
  115. package/core/auth/pkce.d.ts.map +1 -0
  116. package/core/auth/pkce.js +46 -0
  117. package/core/auth/static-providers.d.ts +20 -0
  118. package/core/auth/static-providers.d.ts.map +1 -0
  119. package/core/auth/static-providers.js +26 -0
  120. package/core/auth/token-endpoint.d.ts +40 -0
  121. package/core/auth/token-endpoint.d.ts.map +1 -0
  122. package/core/auth/token-endpoint.js +133 -0
  123. package/core/auth/types.d.ts +144 -0
  124. package/core/auth/types.d.ts.map +1 -0
  125. package/core/auth/types.js +8 -0
  126. package/core/batch.d.ts +37 -0
  127. package/core/batch.d.ts.map +1 -0
  128. package/core/batch.js +79 -0
  129. package/core/cache-state.d.ts +79 -0
  130. package/core/cache-state.d.ts.map +1 -0
  131. package/core/cache-state.js +87 -0
  132. package/core/client.d.ts +607 -0
  133. package/core/client.d.ts.map +1 -0
  134. package/core/client.js +1716 -0
  135. package/core/compatibility.d.ts +18 -0
  136. package/core/compatibility.d.ts.map +1 -0
  137. package/core/compatibility.js +245 -0
  138. package/core/errors.d.ts +139 -0
  139. package/core/errors.d.ts.map +1 -0
  140. package/core/errors.js +176 -0
  141. package/core/esri-geojson.d.ts +66 -0
  142. package/core/esri-geojson.d.ts.map +1 -0
  143. package/core/esri-geojson.js +363 -0
  144. package/core/geoparquet-sql.d.ts +162 -0
  145. package/core/geoparquet-sql.d.ts.map +1 -0
  146. package/core/geoparquet-sql.js +333 -0
  147. package/core/geoservices.d.ts +34 -0
  148. package/core/geoservices.d.ts.map +1 -0
  149. package/core/geoservices.js +434 -0
  150. package/core/grpc-adapter.d.ts +23 -0
  151. package/core/grpc-adapter.d.ts.map +1 -0
  152. package/core/grpc-adapter.js +688 -0
  153. package/core/odata.d.ts +347 -0
  154. package/core/odata.d.ts.map +1 -0
  155. package/core/odata.js +913 -0
  156. package/core/ogc-conformance.d.ts +35 -0
  157. package/core/ogc-conformance.d.ts.map +1 -0
  158. package/core/ogc-conformance.js +134 -0
  159. package/core/ogc-endpoint-layout.d.ts +70 -0
  160. package/core/ogc-endpoint-layout.d.ts.map +1 -0
  161. package/core/ogc-endpoint-layout.js +173 -0
  162. package/core/ogc-features.d.ts +23 -0
  163. package/core/ogc-features.d.ts.map +1 -0
  164. package/core/ogc-features.js +129 -0
  165. package/core/ogc-maps.d.ts +49 -0
  166. package/core/ogc-maps.d.ts.map +1 -0
  167. package/core/ogc-maps.js +126 -0
  168. package/core/ogc-processes.d.ts +118 -0
  169. package/core/ogc-processes.d.ts.map +1 -0
  170. package/core/ogc-processes.js +423 -0
  171. package/core/ogc-records.d.ts +75 -0
  172. package/core/ogc-records.d.ts.map +1 -0
  173. package/core/ogc-records.js +251 -0
  174. package/core/ogc-tiles.d.ts +125 -0
  175. package/core/ogc-tiles.d.ts.map +1 -0
  176. package/core/ogc-tiles.js +183 -0
  177. package/core/path-utils.d.ts +69 -0
  178. package/core/path-utils.d.ts.map +1 -0
  179. package/core/path-utils.js +123 -0
  180. package/core/pbf-decoder.d.ts +39 -0
  181. package/core/pbf-decoder.d.ts.map +1 -0
  182. package/core/pbf-decoder.js +702 -0
  183. package/core/process-runner.d.ts +104 -0
  184. package/core/process-runner.d.ts.map +1 -0
  185. package/core/process-runner.js +315 -0
  186. package/core/protocol-transport.d.ts +76 -0
  187. package/core/protocol-transport.d.ts.map +1 -0
  188. package/core/protocol-transport.js +15 -0
  189. package/core/query-builder.d.ts +261 -0
  190. package/core/query-builder.d.ts.map +1 -0
  191. package/core/query-builder.js +538 -0
  192. package/core/request-pipeline.d.ts +88 -0
  193. package/core/request-pipeline.d.ts.map +1 -0
  194. package/core/request-pipeline.js +273 -0
  195. package/core/spatial-filter.d.ts +93 -0
  196. package/core/spatial-filter.d.ts.map +1 -0
  197. package/core/spatial-filter.js +153 -0
  198. package/core/stac-static.d.ts +51 -0
  199. package/core/stac-static.d.ts.map +1 -0
  200. package/core/stac-static.js +195 -0
  201. package/core/stac.d.ts +67 -0
  202. package/core/stac.d.ts.map +1 -0
  203. package/core/stac.js +259 -0
  204. package/core/surfaces.d.ts +540 -0
  205. package/core/surfaces.d.ts.map +1 -0
  206. package/core/surfaces.js +1964 -0
  207. package/core/terrain-elevation.d.ts +114 -0
  208. package/core/terrain-elevation.d.ts.map +1 -0
  209. package/core/terrain-elevation.js +150 -0
  210. package/core/types.d.ts +1404 -0
  211. package/core/types.d.ts.map +1 -0
  212. package/core/types.js +13 -0
  213. package/core/wfs-capabilities.d.ts +153 -0
  214. package/core/wfs-capabilities.d.ts.map +1 -0
  215. package/core/wfs-capabilities.js +490 -0
  216. package/core/wfs-filter.d.ts +118 -0
  217. package/core/wfs-filter.d.ts.map +1 -0
  218. package/core/wfs-filter.js +634 -0
  219. package/core/wfs.d.ts +232 -0
  220. package/core/wfs.d.ts.map +1 -0
  221. package/core/wfs.js +426 -0
  222. package/core/wire-shared.d.ts +32 -0
  223. package/core/wire-shared.d.ts.map +1 -0
  224. package/core/wire-shared.js +76 -0
  225. package/core/wms-axis.d.ts +36 -0
  226. package/core/wms-axis.d.ts.map +1 -0
  227. package/core/wms-axis.js +73 -0
  228. package/core/wms-capabilities.d.ts +110 -0
  229. package/core/wms-capabilities.d.ts.map +1 -0
  230. package/core/wms-capabilities.js +559 -0
  231. package/core/wms-types.d.ts +128 -0
  232. package/core/wms-types.d.ts.map +1 -0
  233. package/core/wms-types.js +32 -0
  234. package/core/wms.d.ts +144 -0
  235. package/core/wms.d.ts.map +1 -0
  236. package/core/wms.js +338 -0
  237. package/core/wmts-capabilities.d.ts +82 -0
  238. package/core/wmts-capabilities.d.ts.map +1 -0
  239. package/core/wmts-capabilities.js +402 -0
  240. package/core/wmts.d.ts +103 -0
  241. package/core/wmts.d.ts.map +1 -0
  242. package/core/wmts.js +332 -0
  243. package/core/xml-text.d.ts +20 -0
  244. package/core/xml-text.d.ts.map +1 -0
  245. package/core/xml-text.js +85 -0
  246. package/esri-compat/basemap-gallery.d.ts +38 -0
  247. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  248. package/esri-compat/basemap-gallery.js +159 -0
  249. package/esri-compat/basemap-layer-list.d.ts +35 -0
  250. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  251. package/esri-compat/basemap-layer-list.js +139 -0
  252. package/esri-compat/basemap.d.ts +32 -0
  253. package/esri-compat/basemap.d.ts.map +1 -0
  254. package/esri-compat/basemap.js +84 -0
  255. package/esri-compat/bookmarks.d.ts +36 -0
  256. package/esri-compat/bookmarks.d.ts.map +1 -0
  257. package/esri-compat/bookmarks.js +108 -0
  258. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  259. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  260. package/esri-compat/class-breaks-renderer.js +164 -0
  261. package/esri-compat/color.d.ts +22 -0
  262. package/esri-compat/color.d.ts.map +1 -0
  263. package/esri-compat/color.js +106 -0
  264. package/esri-compat/controls.d.ts +174 -0
  265. package/esri-compat/controls.d.ts.map +1 -0
  266. package/esri-compat/controls.js +479 -0
  267. package/esri-compat/coordinate-conversion.d.ts +41 -0
  268. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  269. package/esri-compat/coordinate-conversion.js +125 -0
  270. package/esri-compat/directions.d.ts +45 -0
  271. package/esri-compat/directions.d.ts.map +1 -0
  272. package/esri-compat/directions.js +123 -0
  273. package/esri-compat/editor.d.ts +47 -0
  274. package/esri-compat/editor.d.ts.map +1 -0
  275. package/esri-compat/editor.js +170 -0
  276. package/esri-compat/esri-config.d.ts +16 -0
  277. package/esri-compat/esri-config.d.ts.map +1 -0
  278. package/esri-compat/esri-config.js +23 -0
  279. package/esri-compat/esri-request.d.ts +17 -0
  280. package/esri-compat/esri-request.d.ts.map +1 -0
  281. package/esri-compat/esri-request.js +127 -0
  282. package/esri-compat/event-bus.d.ts +106 -0
  283. package/esri-compat/event-bus.d.ts.map +1 -0
  284. package/esri-compat/event-bus.js +90 -0
  285. package/esri-compat/expand.d.ts +36 -0
  286. package/esri-compat/expand.d.ts.map +1 -0
  287. package/esri-compat/expand.js +97 -0
  288. package/esri-compat/extent.d.ts +43 -0
  289. package/esri-compat/extent.d.ts.map +1 -0
  290. package/esri-compat/extent.js +140 -0
  291. package/esri-compat/feature-filter.d.ts +55 -0
  292. package/esri-compat/feature-filter.d.ts.map +1 -0
  293. package/esri-compat/feature-filter.js +109 -0
  294. package/esri-compat/feature-form.d.ts +64 -0
  295. package/esri-compat/feature-form.d.ts.map +1 -0
  296. package/esri-compat/feature-form.js +137 -0
  297. package/esri-compat/feature-layer.d.ts +173 -0
  298. package/esri-compat/feature-layer.d.ts.map +1 -0
  299. package/esri-compat/feature-layer.js +661 -0
  300. package/esri-compat/feature-set.d.ts +32 -0
  301. package/esri-compat/feature-set.d.ts.map +1 -0
  302. package/esri-compat/feature-set.js +80 -0
  303. package/esri-compat/feature-table.d.ts +141 -0
  304. package/esri-compat/feature-table.d.ts.map +1 -0
  305. package/esri-compat/feature-table.js +500 -0
  306. package/esri-compat/feature-templates.d.ts +41 -0
  307. package/esri-compat/feature-templates.d.ts.map +1 -0
  308. package/esri-compat/feature-templates.js +97 -0
  309. package/esri-compat/feature.d.ts +33 -0
  310. package/esri-compat/feature.d.ts.map +1 -0
  311. package/esri-compat/feature.js +83 -0
  312. package/esri-compat/geojson-layer.d.ts +86 -0
  313. package/esri-compat/geojson-layer.d.ts.map +1 -0
  314. package/esri-compat/geojson-layer.js +191 -0
  315. package/esri-compat/geometry-engine.d.ts +107 -0
  316. package/esri-compat/geometry-engine.d.ts.map +1 -0
  317. package/esri-compat/geometry-engine.js +266 -0
  318. package/esri-compat/graphic.d.ts +46 -0
  319. package/esri-compat/graphic.d.ts.map +1 -0
  320. package/esri-compat/graphic.js +103 -0
  321. package/esri-compat/graphics-layer.d.ts +49 -0
  322. package/esri-compat/graphics-layer.d.ts.map +1 -0
  323. package/esri-compat/graphics-layer.js +185 -0
  324. package/esri-compat/group-layer.d.ts +48 -0
  325. package/esri-compat/group-layer.d.ts.map +1 -0
  326. package/esri-compat/group-layer.js +212 -0
  327. package/esri-compat/identify.d.ts +71 -0
  328. package/esri-compat/identify.d.ts.map +1 -0
  329. package/esri-compat/identify.js +299 -0
  330. package/esri-compat/identity-manager.d.ts +74 -0
  331. package/esri-compat/identity-manager.d.ts.map +1 -0
  332. package/esri-compat/identity-manager.js +245 -0
  333. package/esri-compat/imagery-layer.d.ts +78 -0
  334. package/esri-compat/imagery-layer.d.ts.map +1 -0
  335. package/esri-compat/imagery-layer.js +167 -0
  336. package/esri-compat/label-class.d.ts +31 -0
  337. package/esri-compat/label-class.d.ts.map +1 -0
  338. package/esri-compat/label-class.js +102 -0
  339. package/esri-compat/layer-list.d.ts +77 -0
  340. package/esri-compat/layer-list.d.ts.map +1 -0
  341. package/esri-compat/layer-list.js +342 -0
  342. package/esri-compat/legend.d.ts +53 -0
  343. package/esri-compat/legend.d.ts.map +1 -0
  344. package/esri-compat/legend.js +254 -0
  345. package/esri-compat/map-image-layer.d.ts +162 -0
  346. package/esri-compat/map-image-layer.d.ts.map +1 -0
  347. package/esri-compat/map-image-layer.js +709 -0
  348. package/esri-compat/map-view.d.ts +323 -0
  349. package/esri-compat/map-view.d.ts.map +1 -0
  350. package/esri-compat/map-view.js +1175 -0
  351. package/esri-compat/map.d.ts +47 -0
  352. package/esri-compat/map.d.ts.map +1 -0
  353. package/esri-compat/map.js +209 -0
  354. package/esri-compat/measurement-2d.d.ts +61 -0
  355. package/esri-compat/measurement-2d.d.ts.map +1 -0
  356. package/esri-compat/measurement-2d.js +184 -0
  357. package/esri-compat/measurement.d.ts +45 -0
  358. package/esri-compat/measurement.d.ts.map +1 -0
  359. package/esri-compat/measurement.js +193 -0
  360. package/esri-compat/oauth-info.d.ts +50 -0
  361. package/esri-compat/oauth-info.d.ts.map +1 -0
  362. package/esri-compat/oauth-info.js +142 -0
  363. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  364. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  365. package/esri-compat/picture-marker-symbol.js +126 -0
  366. package/esri-compat/point.d.ts +31 -0
  367. package/esri-compat/point.d.ts.map +1 -0
  368. package/esri-compat/point.js +102 -0
  369. package/esri-compat/polygon.d.ts +31 -0
  370. package/esri-compat/polygon.d.ts.map +1 -0
  371. package/esri-compat/polygon.js +107 -0
  372. package/esri-compat/polyline.d.ts +31 -0
  373. package/esri-compat/polyline.d.ts.map +1 -0
  374. package/esri-compat/polyline.js +107 -0
  375. package/esri-compat/popup-template.d.ts +55 -0
  376. package/esri-compat/popup-template.d.ts.map +1 -0
  377. package/esri-compat/popup-template.js +128 -0
  378. package/esri-compat/popup.d.ts +54 -0
  379. package/esri-compat/popup.d.ts.map +1 -0
  380. package/esri-compat/popup.js +312 -0
  381. package/esri-compat/print.d.ts +47 -0
  382. package/esri-compat/print.d.ts.map +1 -0
  383. package/esri-compat/print.js +105 -0
  384. package/esri-compat/query.d.ts +58 -0
  385. package/esri-compat/query.d.ts.map +1 -0
  386. package/esri-compat/query.js +128 -0
  387. package/esri-compat/reactive-utils.d.ts +24 -0
  388. package/esri-compat/reactive-utils.d.ts.map +1 -0
  389. package/esri-compat/reactive-utils.js +193 -0
  390. package/esri-compat/request.d.ts +41 -0
  391. package/esri-compat/request.d.ts.map +1 -0
  392. package/esri-compat/request.js +253 -0
  393. package/esri-compat/route-layer.d.ts +59 -0
  394. package/esri-compat/route-layer.d.ts.map +1 -0
  395. package/esri-compat/route-layer.js +223 -0
  396. package/esri-compat/route-task.d.ts +88 -0
  397. package/esri-compat/route-task.d.ts.map +1 -0
  398. package/esri-compat/route-task.js +225 -0
  399. package/esri-compat/scene-view.d.ts +41 -0
  400. package/esri-compat/scene-view.d.ts.map +1 -0
  401. package/esri-compat/scene-view.js +68 -0
  402. package/esri-compat/search.d.ts +112 -0
  403. package/esri-compat/search.d.ts.map +1 -0
  404. package/esri-compat/search.js +820 -0
  405. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  406. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  407. package/esri-compat/simple-fill-symbol.js +85 -0
  408. package/esri-compat/simple-line-symbol.d.ts +27 -0
  409. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  410. package/esri-compat/simple-line-symbol.js +85 -0
  411. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  412. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  413. package/esri-compat/simple-marker-symbol.js +92 -0
  414. package/esri-compat/simple-renderer.d.ts +29 -0
  415. package/esri-compat/simple-renderer.d.ts.map +1 -0
  416. package/esri-compat/simple-renderer.js +92 -0
  417. package/esri-compat/sketch.d.ts +64 -0
  418. package/esri-compat/sketch.d.ts.map +1 -0
  419. package/esri-compat/sketch.js +227 -0
  420. package/esri-compat/spatial-reference.d.ts +31 -0
  421. package/esri-compat/spatial-reference.d.ts.map +1 -0
  422. package/esri-compat/spatial-reference.js +102 -0
  423. package/esri-compat/swipe.d.ts +34 -0
  424. package/esri-compat/swipe.d.ts.map +1 -0
  425. package/esri-compat/swipe.js +93 -0
  426. package/esri-compat/table-list.d.ts +36 -0
  427. package/esri-compat/table-list.d.ts.map +1 -0
  428. package/esri-compat/table-list.js +126 -0
  429. package/esri-compat/text-symbol.d.ts +37 -0
  430. package/esri-compat/text-symbol.d.ts.map +1 -0
  431. package/esri-compat/text-symbol.js +123 -0
  432. package/esri-compat/tile-layer.d.ts +52 -0
  433. package/esri-compat/tile-layer.d.ts.map +1 -0
  434. package/esri-compat/tile-layer.js +168 -0
  435. package/esri-compat/time-slider.d.ts +70 -0
  436. package/esri-compat/time-slider.d.ts.map +1 -0
  437. package/esri-compat/time-slider.js +208 -0
  438. package/esri-compat/track.d.ts +51 -0
  439. package/esri-compat/track.d.ts.map +1 -0
  440. package/esri-compat/track.js +174 -0
  441. package/esri-compat/unique-value-renderer.d.ts +41 -0
  442. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  443. package/esri-compat/unique-value-renderer.js +127 -0
  444. package/esri-compat/url.d.ts +13 -0
  445. package/esri-compat/url.d.ts.map +1 -0
  446. package/esri-compat/url.js +68 -0
  447. package/esri-compat/vector-tile-layer.d.ts +47 -0
  448. package/esri-compat/vector-tile-layer.d.ts.map +1 -0
  449. package/esri-compat/vector-tile-layer.js +130 -0
  450. package/esri-compat/web-map.d.ts +14 -0
  451. package/esri-compat/web-map.d.ts.map +1 -0
  452. package/esri-compat/web-map.js +24 -0
  453. package/esri-compat/wfs-layer.d.ts +64 -0
  454. package/esri-compat/wfs-layer.d.ts.map +1 -0
  455. package/esri-compat/wfs-layer.js +145 -0
  456. package/esri-compat/wms-layer.d.ts +76 -0
  457. package/esri-compat/wms-layer.d.ts.map +1 -0
  458. package/esri-compat/wms-layer.js +157 -0
  459. package/exploration/context.d.ts +25 -0
  460. package/exploration/context.d.ts.map +1 -0
  461. package/exploration/context.js +396 -0
  462. package/exploration/index.d.ts +27 -0
  463. package/exploration/index.d.ts.map +1 -0
  464. package/exploration/index.js +24 -0
  465. package/exploration/presets.d.ts +27 -0
  466. package/exploration/presets.d.ts.map +1 -0
  467. package/exploration/presets.js +114 -0
  468. package/exploration/reducer.d.ts +23 -0
  469. package/exploration/reducer.d.ts.map +1 -0
  470. package/exploration/reducer.js +332 -0
  471. package/exploration/selection.d.ts +25 -0
  472. package/exploration/selection.d.ts.map +1 -0
  473. package/exploration/selection.js +34 -0
  474. package/exploration/selectors.d.ts +56 -0
  475. package/exploration/selectors.d.ts.map +1 -0
  476. package/exploration/selectors.js +110 -0
  477. package/exploration/types.d.ts +294 -0
  478. package/exploration/types.d.ts.map +1 -0
  479. package/exploration/types.js +33 -0
  480. package/expr/expression.d.ts +457 -0
  481. package/expr/expression.d.ts.map +1 -0
  482. package/expr/expression.js +663 -0
  483. package/expr/index.d.ts +32 -0
  484. package/expr/index.d.ts.map +1 -0
  485. package/expr/index.js +30 -0
  486. package/filter-registry/index.d.ts +145 -0
  487. package/filter-registry/index.d.ts.map +1 -0
  488. package/filter-registry/index.js +531 -0
  489. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  490. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  491. package/gen/honua/v1/feature_service_pb.js +375 -0
  492. package/generated-app/errors.d.ts +41 -0
  493. package/generated-app/errors.d.ts.map +1 -0
  494. package/generated-app/errors.js +41 -0
  495. package/generated-app/index.d.ts +17 -0
  496. package/generated-app/index.d.ts.map +1 -0
  497. package/generated-app/index.js +12 -0
  498. package/generated-app/manifest.d.ts +183 -0
  499. package/generated-app/manifest.d.ts.map +1 -0
  500. package/generated-app/manifest.js +14 -0
  501. package/generated-app/projection.d.ts +44 -0
  502. package/generated-app/projection.d.ts.map +1 -0
  503. package/generated-app/projection.js +234 -0
  504. package/generated-app/runtime.d.ts +215 -0
  505. package/generated-app/runtime.d.ts.map +1 -0
  506. package/generated-app/runtime.js +1196 -0
  507. package/geocoding/index.d.ts +106 -0
  508. package/geocoding/index.d.ts.map +1 -0
  509. package/geocoding/index.js +278 -0
  510. package/interactions/detail-model.d.ts +54 -0
  511. package/interactions/detail-model.d.ts.map +1 -0
  512. package/interactions/detail-model.js +105 -0
  513. package/interactions/exploration-bindings.d.ts +120 -0
  514. package/interactions/exploration-bindings.d.ts.map +1 -0
  515. package/interactions/exploration-bindings.js +218 -0
  516. package/interactions/feature-state.d.ts +144 -0
  517. package/interactions/feature-state.d.ts.map +1 -0
  518. package/interactions/feature-state.js +169 -0
  519. package/interactions/hit-test.d.ts +112 -0
  520. package/interactions/hit-test.d.ts.map +1 -0
  521. package/interactions/hit-test.js +291 -0
  522. package/interactions/index.d.ts +31 -0
  523. package/interactions/index.d.ts.map +1 -0
  524. package/interactions/index.js +24 -0
  525. package/interactions/share-state.d.ts +36 -0
  526. package/interactions/share-state.d.ts.map +1 -0
  527. package/interactions/share-state.js +123 -0
  528. package/map/feature-service-adapter.d.ts +138 -0
  529. package/map/feature-service-adapter.d.ts.map +1 -0
  530. package/map/feature-service-adapter.js +279 -0
  531. package/map/honua-map.d.ts +203 -0
  532. package/map/honua-map.d.ts.map +1 -0
  533. package/map/honua-map.js +347 -0
  534. package/map/index.d.ts +27 -0
  535. package/map/index.d.ts.map +1 -0
  536. package/map/index.js +22 -0
  537. package/map/maplibre-target.d.ts +103 -0
  538. package/map/maplibre-target.d.ts.map +1 -0
  539. package/map/maplibre-target.js +164 -0
  540. package/map/webmap-maplibre.d.ts +60 -0
  541. package/map/webmap-maplibre.d.ts.map +1 -0
  542. package/map/webmap-maplibre.js +212 -0
  543. package/operate/client.d.ts +94 -0
  544. package/operate/client.d.ts.map +1 -0
  545. package/operate/client.js +361 -0
  546. package/operate/index.d.ts +22 -0
  547. package/operate/index.d.ts.map +1 -0
  548. package/operate/index.js +19 -0
  549. package/operate/types.d.ts +397 -0
  550. package/operate/types.d.ts.map +1 -0
  551. package/operate/types.js +17 -0
  552. package/operator/client.d.ts +60 -0
  553. package/operator/client.d.ts.map +1 -0
  554. package/operator/client.js +20 -0
  555. package/operator/controllers/approval.d.ts +52 -0
  556. package/operator/controllers/approval.d.ts.map +1 -0
  557. package/operator/controllers/approval.js +123 -0
  558. package/operator/controllers/base.d.ts +27 -0
  559. package/operator/controllers/base.d.ts.map +1 -0
  560. package/operator/controllers/base.js +53 -0
  561. package/operator/controllers/builder-workspace.d.ts +55 -0
  562. package/operator/controllers/builder-workspace.d.ts.map +1 -0
  563. package/operator/controllers/builder-workspace.js +108 -0
  564. package/operator/controllers/chat.d.ts +61 -0
  565. package/operator/controllers/chat.d.ts.map +1 -0
  566. package/operator/controllers/chat.js +154 -0
  567. package/operator/controllers/clarification.d.ts +52 -0
  568. package/operator/controllers/clarification.d.ts.map +1 -0
  569. package/operator/controllers/clarification.js +121 -0
  570. package/operator/controllers/execution.d.ts +60 -0
  571. package/operator/controllers/execution.d.ts.map +1 -0
  572. package/operator/controllers/execution.js +286 -0
  573. package/operator/controllers/index.d.ts +23 -0
  574. package/operator/controllers/index.d.ts.map +1 -0
  575. package/operator/controllers/index.js +15 -0
  576. package/operator/controllers/map-workspace.d.ts +85 -0
  577. package/operator/controllers/map-workspace.d.ts.map +1 -0
  578. package/operator/controllers/map-workspace.js +296 -0
  579. package/operator/controllers/plan-review.d.ts +66 -0
  580. package/operator/controllers/plan-review.d.ts.map +1 -0
  581. package/operator/controllers/plan-review.js +124 -0
  582. package/operator/errors.d.ts +62 -0
  583. package/operator/errors.d.ts.map +1 -0
  584. package/operator/errors.js +75 -0
  585. package/operator/i18n/index.d.ts +10 -0
  586. package/operator/i18n/index.d.ts.map +1 -0
  587. package/operator/i18n/index.js +8 -0
  588. package/operator/i18n/messages.d.ts +19 -0
  589. package/operator/i18n/messages.d.ts.map +1 -0
  590. package/operator/i18n/messages.js +54 -0
  591. package/operator/index.d.ts +19 -0
  592. package/operator/index.d.ts.map +1 -0
  593. package/operator/index.js +15 -0
  594. package/operator/telemetry.d.ts +26 -0
  595. package/operator/telemetry.d.ts.map +1 -0
  596. package/operator/telemetry.js +9 -0
  597. package/operator/theming/index.d.ts +12 -0
  598. package/operator/theming/index.d.ts.map +1 -0
  599. package/operator/theming/index.js +9 -0
  600. package/operator/theming/provider.d.ts +27 -0
  601. package/operator/theming/provider.d.ts.map +1 -0
  602. package/operator/theming/provider.js +26 -0
  603. package/operator/theming/tokens.d.ts +28 -0
  604. package/operator/theming/tokens.d.ts.map +1 -0
  605. package/operator/theming/tokens.js +65 -0
  606. package/operator/workspace/events.d.ts +70 -0
  607. package/operator/workspace/events.d.ts.map +1 -0
  608. package/operator/workspace/events.js +9 -0
  609. package/operator/workspace/index.d.ts +12 -0
  610. package/operator/workspace/index.d.ts.map +1 -0
  611. package/operator/workspace/index.js +8 -0
  612. package/operator/workspace/types.d.ts +178 -0
  613. package/operator/workspace/types.d.ts.map +1 -0
  614. package/operator/workspace/types.js +47 -0
  615. package/operator/workspace/workspace.d.ts +58 -0
  616. package/operator/workspace/workspace.d.ts.map +1 -0
  617. package/operator/workspace/workspace.js +339 -0
  618. package/package.json +105 -0
  619. package/realtime/exploration.d.ts +16 -0
  620. package/realtime/exploration.d.ts.map +1 -0
  621. package/realtime/exploration.js +32 -0
  622. package/realtime/honua-server.d.ts +123 -0
  623. package/realtime/honua-server.d.ts.map +1 -0
  624. package/realtime/honua-server.js +188 -0
  625. package/realtime/index.d.ts +20 -0
  626. package/realtime/index.d.ts.map +1 -0
  627. package/realtime/index.js +14 -0
  628. package/realtime/projections.d.ts +30 -0
  629. package/realtime/projections.d.ts.map +1 -0
  630. package/realtime/projections.js +51 -0
  631. package/realtime/reducer.d.ts +14 -0
  632. package/realtime/reducer.d.ts.map +1 -0
  633. package/realtime/reducer.js +351 -0
  634. package/realtime/sse.d.ts +23 -0
  635. package/realtime/sse.d.ts.map +1 -0
  636. package/realtime/sse.js +143 -0
  637. package/realtime/store.d.ts +18 -0
  638. package/realtime/store.d.ts.map +1 -0
  639. package/realtime/store.js +63 -0
  640. package/realtime/types.d.ts +190 -0
  641. package/realtime/types.d.ts.map +1 -0
  642. package/realtime/types.js +10 -0
  643. package/replica-sync/client.d.ts +32 -0
  644. package/replica-sync/client.d.ts.map +1 -0
  645. package/replica-sync/client.js +52 -0
  646. package/replica-sync/errors.d.ts +22 -0
  647. package/replica-sync/errors.d.ts.map +1 -0
  648. package/replica-sync/errors.js +29 -0
  649. package/replica-sync/fixture.d.ts +40 -0
  650. package/replica-sync/fixture.d.ts.map +1 -0
  651. package/replica-sync/fixture.js +364 -0
  652. package/replica-sync/index.d.ts +22 -0
  653. package/replica-sync/index.d.ts.map +1 -0
  654. package/replica-sync/index.js +17 -0
  655. package/replica-sync/types.d.ts +270 -0
  656. package/replica-sync/types.d.ts.map +1 -0
  657. package/replica-sync/types.js +13 -0
  658. package/runtime/diff.d.ts +31 -0
  659. package/runtime/diff.d.ts.map +1 -0
  660. package/runtime/diff.js +143 -0
  661. package/runtime/errors.d.ts +40 -0
  662. package/runtime/errors.d.ts.map +1 -0
  663. package/runtime/errors.js +35 -0
  664. package/runtime/index.d.ts +59 -0
  665. package/runtime/index.d.ts.map +1 -0
  666. package/runtime/index.js +40 -0
  667. package/runtime/legend.d.ts +23 -0
  668. package/runtime/legend.d.ts.map +1 -0
  669. package/runtime/legend.js +38 -0
  670. package/runtime/load-package.d.ts +125 -0
  671. package/runtime/load-package.d.ts.map +1 -0
  672. package/runtime/load-package.js +272 -0
  673. package/runtime/map-package-fetch.d.ts +107 -0
  674. package/runtime/map-package-fetch.d.ts.map +1 -0
  675. package/runtime/map-package-fetch.js +336 -0
  676. package/runtime/map-package-realtime.d.ts +169 -0
  677. package/runtime/map-package-realtime.d.ts.map +1 -0
  678. package/runtime/map-package-realtime.js +350 -0
  679. package/runtime/map-package-validation.d.ts +30 -0
  680. package/runtime/map-package-validation.d.ts.map +1 -0
  681. package/runtime/map-package-validation.js +257 -0
  682. package/runtime/map-package-watch.d.ts +78 -0
  683. package/runtime/map-package-watch.d.ts.map +1 -0
  684. package/runtime/map-package-watch.js +695 -0
  685. package/runtime/map-package.d.ts +167 -0
  686. package/runtime/map-package.d.ts.map +1 -0
  687. package/runtime/map-package.js +15 -0
  688. package/runtime/ogc-styles.d.ts +110 -0
  689. package/runtime/ogc-styles.d.ts.map +1 -0
  690. package/runtime/ogc-styles.js +195 -0
  691. package/runtime/pmtiles-protocol.d.ts +77 -0
  692. package/runtime/pmtiles-protocol.d.ts.map +1 -0
  693. package/runtime/pmtiles-protocol.js +120 -0
  694. package/runtime/popups.d.ts +62 -0
  695. package/runtime/popups.d.ts.map +1 -0
  696. package/runtime/popups.js +95 -0
  697. package/runtime/query-tiles.d.ts +217 -0
  698. package/runtime/query-tiles.d.ts.map +1 -0
  699. package/runtime/query-tiles.js +801 -0
  700. package/runtime/runtime.d.ts +243 -0
  701. package/runtime/runtime.d.ts.map +1 -0
  702. package/runtime/runtime.js +1147 -0
  703. package/runtime/source-bridge.d.ts +99 -0
  704. package/runtime/source-bridge.d.ts.map +1 -0
  705. package/runtime/source-bridge.js +428 -0
  706. package/runtime/style-compose.d.ts +46 -0
  707. package/runtime/style-compose.d.ts.map +1 -0
  708. package/runtime/style-compose.js +144 -0
  709. package/runtime/style-interactions.d.ts +141 -0
  710. package/runtime/style-interactions.d.ts.map +1 -0
  711. package/runtime/style-interactions.js +574 -0
  712. package/runtime/style-spec-validation.d.ts +23 -0
  713. package/runtime/style-spec-validation.d.ts.map +1 -0
  714. package/runtime/style-spec-validation.js +357 -0
  715. package/scene-workspace/analysis-widgets.d.ts +334 -0
  716. package/scene-workspace/analysis-widgets.d.ts.map +1 -0
  717. package/scene-workspace/analysis-widgets.js +424 -0
  718. package/scene-workspace/cesium-adapter.d.ts +438 -0
  719. package/scene-workspace/cesium-adapter.d.ts.map +1 -0
  720. package/scene-workspace/cesium-adapter.js +493 -0
  721. package/scene-workspace/index.d.ts +21 -0
  722. package/scene-workspace/index.d.ts.map +1 -0
  723. package/scene-workspace/index.js +14 -0
  724. package/scene-workspace/primitives.d.ts +162 -0
  725. package/scene-workspace/primitives.d.ts.map +1 -0
  726. package/scene-workspace/primitives.js +255 -0
  727. package/scene-workspace/scene-discovery.d.ts +196 -0
  728. package/scene-workspace/scene-discovery.d.ts.map +1 -0
  729. package/scene-workspace/scene-discovery.js +228 -0
  730. package/scene-workspace/scene-view.d.ts +209 -0
  731. package/scene-workspace/scene-view.d.ts.map +1 -0
  732. package/scene-workspace/scene-view.js +267 -0
  733. package/scene-workspace/types.d.ts +229 -0
  734. package/scene-workspace/types.d.ts.map +1 -0
  735. package/scene-workspace/types.js +23 -0
  736. package/scene-workspace/workspace.d.ts +13 -0
  737. package/scene-workspace/workspace.d.ts.map +1 -0
  738. package/scene-workspace/workspace.js +391 -0
  739. package/share/denial.d.ts +78 -0
  740. package/share/denial.d.ts.map +1 -0
  741. package/share/denial.js +61 -0
  742. package/share/embed-token.d.ts +71 -0
  743. package/share/embed-token.d.ts.map +1 -0
  744. package/share/embed-token.js +99 -0
  745. package/share/index.d.ts +35 -0
  746. package/share/index.d.ts.map +1 -0
  747. package/share/index.js +30 -0
  748. package/share/open-data.d.ts +114 -0
  749. package/share/open-data.d.ts.map +1 -0
  750. package/share/open-data.js +81 -0
  751. package/share/types.d.ts +163 -0
  752. package/share/types.d.ts.map +1 -0
  753. package/share/types.js +17 -0
  754. package/studio/capability-manifest.d.ts +285 -0
  755. package/studio/capability-manifest.d.ts.map +1 -0
  756. package/studio/capability-manifest.js +59 -0
  757. package/studio/chart-spec.d.ts +85 -0
  758. package/studio/chart-spec.d.ts.map +1 -0
  759. package/studio/chart-spec.js +106 -0
  760. package/studio/index.d.ts +34 -0
  761. package/studio/index.d.ts.map +1 -0
  762. package/studio/index.js +27 -0
  763. package/studio/provenance.d.ts +131 -0
  764. package/studio/provenance.d.ts.map +1 -0
  765. package/studio/provenance.js +39 -0
  766. package/studio/publish.d.ts +64 -0
  767. package/studio/publish.d.ts.map +1 -0
  768. package/studio/publish.js +13 -0
  769. package/studio/types.d.ts +278 -0
  770. package/studio/types.d.ts.map +1 -0
  771. package/studio/types.js +71 -0
  772. package/studio/validate.d.ts +45 -0
  773. package/studio/validate.d.ts.map +1 -0
  774. package/studio/validate.js +255 -0
  775. package/studio/validation.d.ts +112 -0
  776. package/studio/validation.d.ts.map +1 -0
  777. package/studio/validation.js +42 -0
  778. package/style/factory.d.ts +30 -0
  779. package/style/factory.d.ts.map +1 -0
  780. package/style/factory.js +61 -0
  781. package/style/index.d.ts +25 -0
  782. package/style/index.d.ts.map +1 -0
  783. package/style/index.js +24 -0
  784. package/style/specification.d.ts +203 -0
  785. package/style/specification.d.ts.map +1 -0
  786. package/style/specification.js +178 -0
  787. package/style/wms-wmts-resolvers.d.ts +38 -0
  788. package/style/wms-wmts-resolvers.d.ts.map +1 -0
  789. package/style/wms-wmts-resolvers.js +92 -0
  790. package/web-components/controller.d.ts +39 -0
  791. package/web-components/controller.d.ts.map +1 -0
  792. package/web-components/controller.js +640 -0
  793. package/web-components/elements.d.ts +210 -0
  794. package/web-components/elements.d.ts.map +1 -0
  795. package/web-components/elements.js +1651 -0
  796. package/web-components/index.d.ts +24 -0
  797. package/web-components/index.d.ts.map +1 -0
  798. package/web-components/index.js +22 -0
  799. package/web-components/maplibre-renderer.d.ts +22 -0
  800. package/web-components/maplibre-renderer.d.ts.map +1 -0
  801. package/web-components/maplibre-renderer.js +474 -0
  802. package/web-components/types.d.ts +397 -0
  803. package/web-components/types.d.ts.map +1 -0
  804. package/web-components/types.js +1 -0
  805. package/webmap/contract.d.ts +28 -0
  806. package/webmap/contract.d.ts.map +1 -0
  807. package/webmap/contract.js +130 -0
  808. package/webmap/convert-basemap.d.ts +17 -0
  809. package/webmap/convert-basemap.d.ts.map +1 -0
  810. package/webmap/convert-basemap.js +78 -0
  811. package/webmap/convert-extent.d.ts +17 -0
  812. package/webmap/convert-extent.d.ts.map +1 -0
  813. package/webmap/convert-extent.js +114 -0
  814. package/webmap/convert-label.d.ts +13 -0
  815. package/webmap/convert-label.d.ts.map +1 -0
  816. package/webmap/convert-label.js +125 -0
  817. package/webmap/convert-layer.d.ts +22 -0
  818. package/webmap/convert-layer.d.ts.map +1 -0
  819. package/webmap/convert-layer.js +181 -0
  820. package/webmap/convert-popup.d.ts +34 -0
  821. package/webmap/convert-popup.d.ts.map +1 -0
  822. package/webmap/convert-popup.js +68 -0
  823. package/webmap/convert-renderer.d.ts +17 -0
  824. package/webmap/convert-renderer.d.ts.map +1 -0
  825. package/webmap/convert-renderer.js +161 -0
  826. package/webmap/convert-symbol.d.ts +17 -0
  827. package/webmap/convert-symbol.d.ts.map +1 -0
  828. package/webmap/convert-symbol.js +122 -0
  829. package/webmap/index.d.ts +44 -0
  830. package/webmap/index.d.ts.map +1 -0
  831. package/webmap/index.js +33 -0
  832. package/webmap/parse.d.ts +25 -0
  833. package/webmap/parse.d.ts.map +1 -0
  834. package/webmap/parse.js +83 -0
  835. package/webmap/types.d.ts +264 -0
  836. package/webmap/types.d.ts.map +1 -0
  837. package/webmap/types.js +13 -0
  838. package/webmap/warnings.d.ts +30 -0
  839. package/webmap/warnings.d.ts.map +1 -0
  840. package/webmap/warnings.js +37 -0
@@ -0,0 +1,123 @@
1
+ /**
2
+ * `ApprovalController` — loads the policy decision for an in-flight
3
+ * operation and exposes a single `confirm()` action when the gate is
4
+ * `pending`. The controller never short-circuits a deferred outcome
5
+ * to "approved"; it surfaces the server's verbatim decision.
6
+ *
7
+ * Audit entries returned with each decision are forwarded to the
8
+ * `OperatorTelemetry.after` hook as `approval-audit` events so partner
9
+ * observability stacks see the same evidence the server records. The
10
+ * server remains the canonical audit-of-record — client telemetry is
11
+ * observability, not evidence.
12
+ *
13
+ * @module
14
+ */
15
+ import { HonuaOperatorApprovalError } from "../errors.js";
16
+ import { ListenerBag, emitTelemetryEvent, withTelemetrySpan } from "./base.js";
17
+ export class ApprovalController {
18
+ #client;
19
+ #telemetry;
20
+ #bag = new ListenerBag();
21
+ #seenAudit = new Set();
22
+ #decision;
23
+ // Bumped on every load() / confirm() entry so a slow approval call
24
+ // for operation A cannot resolve after the controller has moved on
25
+ // to operation B and emit a stale `loaded` / `confirmed` for A. The
26
+ // captured value is checked at resolution time; mismatch ⇒ drop.
27
+ #generation = 0;
28
+ constructor(options) {
29
+ this.#client = options.client;
30
+ this.#telemetry = options.telemetry;
31
+ }
32
+ get decision() {
33
+ return this.#decision;
34
+ }
35
+ on(listener) {
36
+ return this.#bag.on(listener);
37
+ }
38
+ async load(operationId, signal) {
39
+ const gen = ++this.#generation;
40
+ try {
41
+ const decision = await withTelemetrySpan(this.#telemetry, "approval-load", undefined, () => this.#client.operator.getApproval(operationId, signal), { operationId });
42
+ if (gen !== this.#generation) {
43
+ // Superseded by a newer load()/confirm(); drop without
44
+ // committing or emitting so a stale operationId does not
45
+ // overwrite the active decision.
46
+ return decision;
47
+ }
48
+ this.#decision = decision;
49
+ this.#fanOutAudit(decision);
50
+ this.#bag.emit({ kind: "loaded", decision });
51
+ return decision;
52
+ }
53
+ catch (error) {
54
+ const wrapped = error instanceof HonuaOperatorApprovalError
55
+ ? error
56
+ : new HonuaOperatorApprovalError("approval load failed", {
57
+ cause: error,
58
+ detail: { operationId },
59
+ });
60
+ if (gen === this.#generation) {
61
+ this.#bag.emit({ kind: "error", error: wrapped });
62
+ }
63
+ throw wrapped;
64
+ }
65
+ }
66
+ /**
67
+ * Confirm a `pending` approval. The controller refuses to invoke the
68
+ * server when the loaded decision is in any other state — preventing
69
+ * a UI from re-confirming an already granted/denied/deferred outcome.
70
+ * Returns the server's outcome unchanged.
71
+ */
72
+ async confirm(operationId, signal) {
73
+ if (!this.#decision || this.#decision.operationId !== operationId) {
74
+ throw new HonuaOperatorApprovalError("confirm requires a loaded decision for the same operation", {
75
+ detail: { operationId, decisionOperationId: this.#decision?.operationId },
76
+ });
77
+ }
78
+ if (this.#decision.state !== "pending") {
79
+ throw new HonuaOperatorApprovalError(`cannot confirm an approval in state "${this.#decision.state}"`, {
80
+ detail: { operationId, state: this.#decision.state },
81
+ });
82
+ }
83
+ const gen = ++this.#generation;
84
+ try {
85
+ const next = await withTelemetrySpan(this.#telemetry, "approval-confirm", undefined, () => this.#client.operator.confirmApproval(operationId, signal), { operationId });
86
+ if (gen !== this.#generation) {
87
+ return next;
88
+ }
89
+ this.#decision = next;
90
+ this.#fanOutAudit(next);
91
+ this.#bag.emit({ kind: "confirmed", decision: next });
92
+ return next;
93
+ }
94
+ catch (error) {
95
+ const wrapped = error instanceof HonuaOperatorApprovalError
96
+ ? error
97
+ : new HonuaOperatorApprovalError("approval confirm failed", {
98
+ cause: error,
99
+ detail: { operationId },
100
+ });
101
+ if (gen === this.#generation) {
102
+ this.#bag.emit({ kind: "error", error: wrapped });
103
+ }
104
+ throw wrapped;
105
+ }
106
+ }
107
+ #fanOutAudit(decision) {
108
+ for (const entry of decision.audit) {
109
+ const key = `${decision.operationId}|${entry.at}|${entry.actor}|${entry.action}`;
110
+ if (this.#seenAudit.has(key))
111
+ continue;
112
+ this.#seenAudit.add(key);
113
+ emitTelemetryEvent(this.#telemetry, "approval-audit", undefined, {
114
+ operationId: decision.operationId,
115
+ actor: entry.actor,
116
+ action: entry.action,
117
+ reason: entry.reason,
118
+ at: entry.at,
119
+ });
120
+ this.#bag.emit({ kind: "audit", entry, decision });
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Tiny shared subscribe/notify helper for operator controllers. Mirrors
3
+ * the listener-set pattern used by `HonuaMapRuntime` and
4
+ * `ExplorationContext` so a single embedder hook style works everywhere.
5
+ *
6
+ * @module
7
+ */
8
+ import type { OperatorTelemetry, OperatorTelemetryKind } from "../telemetry.js";
9
+ export type Unsubscribe = () => void;
10
+ export declare class ListenerBag<E> {
11
+ #private;
12
+ on(listener: (event: E) => void): Unsubscribe;
13
+ emit(event: E): void;
14
+ clear(): void;
15
+ get size(): number;
16
+ }
17
+ /**
18
+ * Run an async operation with telemetry spans wrapped around it. Mirrors
19
+ * the before/after/error semantics of `HonuaRuntimeTelemetry`.
20
+ */
21
+ export declare function withTelemetrySpan<T>(telemetry: OperatorTelemetry | undefined, kind: OperatorTelemetryKind, intentId: string | undefined, fn: () => Promise<T>, detail?: Record<string, unknown>): Promise<T>;
22
+ /**
23
+ * Telemetry counterpart for synchronous events that have no
24
+ * before/after wrap (e.g. an audit-record fan-out).
25
+ */
26
+ export declare function emitTelemetryEvent(telemetry: OperatorTelemetry | undefined, kind: OperatorTelemetryKind, intentId: string | undefined, detail?: Record<string, unknown>): void;
27
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/operator/controllers/base.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAyB,MAAM,iBAAiB,CAAC;AAEvG,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,qBAAa,WAAW,CAAC,CAAC;;IAGjB,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,WAAW;IAO7C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAIpB,KAAK,IAAI,IAAI;IAIpB,IAAW,IAAI,IAAI,MAAM,CAExB;CACF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iBAAiB,GAAG,SAAS,EACxC,IAAI,EAAE,qBAAqB,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI,CAGN"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Tiny shared subscribe/notify helper for operator controllers. Mirrors
3
+ * the listener-set pattern used by `HonuaMapRuntime` and
4
+ * `ExplorationContext` so a single embedder hook style works everywhere.
5
+ *
6
+ * @module
7
+ */
8
+ export class ListenerBag {
9
+ #listeners = new Set();
10
+ on(listener) {
11
+ this.#listeners.add(listener);
12
+ return () => {
13
+ this.#listeners.delete(listener);
14
+ };
15
+ }
16
+ emit(event) {
17
+ for (const listener of [...this.#listeners])
18
+ listener(event);
19
+ }
20
+ clear() {
21
+ this.#listeners.clear();
22
+ }
23
+ get size() {
24
+ return this.#listeners.size;
25
+ }
26
+ }
27
+ /**
28
+ * Run an async operation with telemetry spans wrapped around it. Mirrors
29
+ * the before/after/error semantics of `HonuaRuntimeTelemetry`.
30
+ */
31
+ export async function withTelemetrySpan(telemetry, kind, intentId, fn, detail) {
32
+ const span = { kind, intentId, startedAt: Date.now(), detail };
33
+ telemetry?.before?.(span);
34
+ try {
35
+ const result = await fn();
36
+ const finishedAt = Date.now();
37
+ telemetry?.after?.({ ...span, finishedAt, durationMs: finishedAt - span.startedAt });
38
+ return result;
39
+ }
40
+ catch (error) {
41
+ const finishedAt = Date.now();
42
+ telemetry?.error?.({ ...span, finishedAt, durationMs: finishedAt - span.startedAt, error });
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * Telemetry counterpart for synchronous events that have no
48
+ * before/after wrap (e.g. an audit-record fan-out).
49
+ */
50
+ export function emitTelemetryEvent(telemetry, kind, intentId, detail) {
51
+ const startedAt = Date.now();
52
+ telemetry?.after?.({ kind, intentId, startedAt, finishedAt: startedAt, durationMs: 0, detail });
53
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * `BuilderWorkspaceController` — mirrors `MapWorkspaceController` for an
3
+ * `AppPackage`. The controller does not execute the app; it surfaces a
4
+ * `PreviewHandle` carrying the bundle URL the embedder mounts inside an
5
+ * `<iframe sandbox>`.
6
+ *
7
+ * @module
8
+ */
9
+ import type { HonuaMapPackage } from "../../runtime/index.js";
10
+ import type { OperatorClient } from "../client.js";
11
+ import { HonuaOperatorAppError } from "../errors.js";
12
+ import type { OperatorTelemetry } from "../telemetry.js";
13
+ import type { AppPackage, ArtifactRef } from "../workspace/types.js";
14
+ import { type Unsubscribe } from "./base.js";
15
+ export interface PreviewHandle {
16
+ readonly url: string | undefined;
17
+ readonly assets: ReadonlyArray<ArtifactRef>;
18
+ readonly mapPackage: HonuaMapPackage | undefined;
19
+ }
20
+ export type BuilderWorkspaceEvent = {
21
+ kind: "package-loaded";
22
+ pkg: AppPackage;
23
+ } | {
24
+ kind: "package-refined";
25
+ pkg: AppPackage;
26
+ } | {
27
+ kind: "map-bound";
28
+ pkg: HonuaMapPackage;
29
+ } | {
30
+ kind: "error";
31
+ error: HonuaOperatorAppError;
32
+ };
33
+ export interface BuilderWorkspaceControllerOptions {
34
+ client: OperatorClient;
35
+ telemetry?: OperatorTelemetry;
36
+ /**
37
+ * Optional adapter that picks the entry-point URL out of an
38
+ * `AppPackage`. Defaults to the first asset whose `kind === "app-package"`,
39
+ * falling back to the first asset with a `url`.
40
+ */
41
+ resolveEntryUrl?: (pkg: AppPackage) => string | undefined;
42
+ }
43
+ export declare class BuilderWorkspaceController {
44
+ #private;
45
+ constructor(options: BuilderWorkspaceControllerOptions);
46
+ get appPackage(): AppPackage | undefined;
47
+ on(listener: (event: BuilderWorkspaceEvent) => void): Unsubscribe;
48
+ bindIntent(intentId: string): void;
49
+ loadPackage(pkg: AppPackage): Promise<void>;
50
+ bindMapPackage(pkg: HonuaMapPackage): void;
51
+ preview(): PreviewHandle;
52
+ refine(prompt: string, signal?: AbortSignal): Promise<AppPackage>;
53
+ dispose(): void;
54
+ }
55
+ //# sourceMappingURL=builder-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-workspace.d.ts","sourceRoot":"","sources":["../../../../src/operator/controllers/builder-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAe,KAAK,WAAW,EAAqB,MAAM,WAAW,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAEpD,MAAM,WAAW,iCAAiC;IAChD,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;CAC3D;AAQD,qBAAa,0BAA0B;;gBAclB,OAAO,EAAE,iCAAiC;IAM7D,IAAW,UAAU,IAAI,UAAU,GAAG,SAAS,CAE9C;IAEM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,WAAW;IAIjE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5B,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBjD,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAK1C,OAAO,IAAI,aAAa;IAWlB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAiCvE,OAAO,IAAI,IAAI;CAOvB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * `BuilderWorkspaceController` — mirrors `MapWorkspaceController` for an
3
+ * `AppPackage`. The controller does not execute the app; it surfaces a
4
+ * `PreviewHandle` carrying the bundle URL the embedder mounts inside an
5
+ * `<iframe sandbox>`.
6
+ *
7
+ * @module
8
+ */
9
+ import { HonuaOperatorAppError } from "../errors.js";
10
+ import { ListenerBag, withTelemetrySpan } from "./base.js";
11
+ const defaultEntryUrl = (pkg) => {
12
+ const appAsset = pkg.assets.find((asset) => asset.kind === "app-package" && asset.url);
13
+ if (appAsset?.url)
14
+ return appAsset.url;
15
+ return pkg.assets.find((asset) => asset.url)?.url;
16
+ };
17
+ export class BuilderWorkspaceController {
18
+ #client;
19
+ #telemetry;
20
+ #resolveEntryUrl;
21
+ #bag = new ListenerBag();
22
+ #pkg;
23
+ #boundMap;
24
+ #activeIntentId;
25
+ // Same generation pattern as the other controllers: bumped on
26
+ // every loadPackage()/refine()/dispose(), captured by each
27
+ // operation, and consulted at resolution time so an older
28
+ // refineApp() cannot overwrite a newer package.
29
+ #opGeneration = 0;
30
+ constructor(options) {
31
+ this.#client = options.client;
32
+ this.#telemetry = options.telemetry;
33
+ this.#resolveEntryUrl = options.resolveEntryUrl ?? defaultEntryUrl;
34
+ }
35
+ get appPackage() {
36
+ return this.#pkg;
37
+ }
38
+ on(listener) {
39
+ return this.#bag.on(listener);
40
+ }
41
+ bindIntent(intentId) {
42
+ this.#activeIntentId = intentId;
43
+ }
44
+ async loadPackage(pkg) {
45
+ const gen = ++this.#opGeneration;
46
+ // Clear the prior map binding eagerly so the next preview() call
47
+ // never returns a previous execution's map. The workspace re-binds
48
+ // the map within the same execution-success handler when the new
49
+ // result actually carries one; an app-only result therefore
50
+ // produces a preview with no `mapPackage`.
51
+ this.#boundMap = undefined;
52
+ return withTelemetrySpan(this.#telemetry, "app-load", this.#activeIntentId, async () => {
53
+ if (gen !== this.#opGeneration)
54
+ return;
55
+ this.#pkg = pkg;
56
+ this.#bag.emit({ kind: "package-loaded", pkg });
57
+ }, { appPackageId: pkg.id });
58
+ }
59
+ bindMapPackage(pkg) {
60
+ this.#boundMap = pkg;
61
+ this.#bag.emit({ kind: "map-bound", pkg });
62
+ }
63
+ preview() {
64
+ if (!this.#pkg) {
65
+ throw new HonuaOperatorAppError("preview called before loadPackage");
66
+ }
67
+ return {
68
+ url: this.#resolveEntryUrl(this.#pkg),
69
+ assets: this.#pkg.assets,
70
+ mapPackage: this.#boundMap,
71
+ };
72
+ }
73
+ async refine(prompt, signal) {
74
+ if (!this.#activeIntentId) {
75
+ throw new HonuaOperatorAppError("refine requires bindIntent before invocation");
76
+ }
77
+ const intentId = this.#activeIntentId;
78
+ const gen = ++this.#opGeneration;
79
+ return withTelemetrySpan(this.#telemetry, "app-refine", intentId, async () => {
80
+ try {
81
+ const next = await this.#client.operator.refineApp(intentId, prompt, signal);
82
+ if (gen !== this.#opGeneration)
83
+ return next;
84
+ this.#pkg = next;
85
+ this.#bag.emit({ kind: "package-refined", pkg: next });
86
+ return next;
87
+ }
88
+ catch (error) {
89
+ const wrapped = new HonuaOperatorAppError("app refine failed", {
90
+ intentId,
91
+ cause: error,
92
+ detail: { prompt },
93
+ });
94
+ if (gen === this.#opGeneration) {
95
+ this.#bag.emit({ kind: "error", error: wrapped });
96
+ }
97
+ throw wrapped;
98
+ }
99
+ }, { prompt });
100
+ }
101
+ dispose() {
102
+ this.#opGeneration += 1;
103
+ this.#pkg = undefined;
104
+ this.#boundMap = undefined;
105
+ this.#activeIntentId = undefined;
106
+ this.#bag.clear();
107
+ }
108
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * `ChatController` — turn ledger and intent-draft pump for the freeform
3
+ * request surface. The controller owns no streaming token assembly logic
4
+ * beyond accumulating `ChatChunk.delta` strings; the transport (an
5
+ * `AsyncIterable<ChatChunk>` from the `OperatorClient`) is responsible
6
+ * for chunking.
7
+ *
8
+ * @module
9
+ */
10
+ import type { OperatorClient } from "../client.js";
11
+ import { HonuaOperatorIntentError } from "../errors.js";
12
+ import type { OperatorTelemetry } from "../telemetry.js";
13
+ import type { AnalysisIntent, BuilderIntent, ConversationTurn } from "../workspace/types.js";
14
+ import { type Unsubscribe } from "./base.js";
15
+ export type ChatEvent = {
16
+ kind: "turn-updated";
17
+ turn: ConversationTurn;
18
+ } | {
19
+ kind: "intent-drafted";
20
+ intent: AnalysisIntent | BuilderIntent;
21
+ } | {
22
+ kind: "error";
23
+ error: HonuaOperatorIntentError;
24
+ };
25
+ export type DecorateTurn = (turn: ConversationTurn) => ConversationTurn;
26
+ export interface ChatControllerOptions {
27
+ client: OperatorClient;
28
+ telemetry?: OperatorTelemetry;
29
+ /**
30
+ * Pure transformation applied to a turn snapshot before the
31
+ * `turn-updated` event fires. Cannot mutate controller state.
32
+ */
33
+ decorate?: DecorateTurn;
34
+ /** Fixture seam for deterministic ids in tests. */
35
+ generateTurnId?: () => string;
36
+ /** Fixture seam for deterministic timestamps in tests. */
37
+ now?: () => number;
38
+ }
39
+ export declare class ChatController {
40
+ #private;
41
+ constructor(options: ChatControllerOptions);
42
+ get turns(): ReadonlyArray<ConversationTurn>;
43
+ on(listener: (event: ChatEvent) => void): Unsubscribe;
44
+ abort(): void;
45
+ /**
46
+ * Send a freeform user message and stream the agent reply. Resolves
47
+ * with the final agent turn (intent draft inlined) when the stream
48
+ * completes; rejects with `HonuaOperatorIntentError` on transport
49
+ * failure.
50
+ *
51
+ * If a previous send is still in flight, it is aborted before this
52
+ * one starts. The active controller identity is the per-send token —
53
+ * stream updates, `intent-drafted`, and `error` emissions are gated
54
+ * on it so a slow earlier stream cannot drive workspace state back
55
+ * to a stale intent after a newer send has taken over.
56
+ */
57
+ send(text: string): Promise<ConversationTurn>;
58
+ /** Append a system message (e.g. an embedder-supplied notice). */
59
+ appendSystem(content: string): ConversationTurn;
60
+ }
61
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../src/operator/controllers/chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAY,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAe,KAAK,WAAW,EAAqB,MAAM,WAAW,CAAC;AAE7E,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AASD,qBAAa,cAAc;;gBAUN,OAAO,EAAE,qBAAqB;IAQjD,IAAW,KAAK,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAElD;IAEM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,WAAW;IAIrD,KAAK,IAAI,IAAI;IAKpB;;;;;;;;;;;OAWG;IACU,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuF1D,kEAAkE;IAC3D,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;CAqBvD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * `ChatController` — turn ledger and intent-draft pump for the freeform
3
+ * request surface. The controller owns no streaming token assembly logic
4
+ * beyond accumulating `ChatChunk.delta` strings; the transport (an
5
+ * `AsyncIterable<ChatChunk>` from the `OperatorClient`) is responsible
6
+ * for chunking.
7
+ *
8
+ * @module
9
+ */
10
+ import { HonuaOperatorIntentError } from "../errors.js";
11
+ import { ListenerBag, withTelemetrySpan } from "./base.js";
12
+ let chatTurnCounter = 0;
13
+ function defaultTurnId() {
14
+ chatTurnCounter += 1;
15
+ return `turn-${Date.now().toString(36)}-${chatTurnCounter.toString(36)}`;
16
+ }
17
+ export class ChatController {
18
+ #client;
19
+ #telemetry;
20
+ #decorate;
21
+ #generateTurnId;
22
+ #now;
23
+ #bag = new ListenerBag();
24
+ #turns = [];
25
+ #abortController;
26
+ constructor(options) {
27
+ this.#client = options.client;
28
+ this.#telemetry = options.telemetry;
29
+ this.#decorate = options.decorate;
30
+ this.#generateTurnId = options.generateTurnId ?? defaultTurnId;
31
+ this.#now = options.now ?? (() => Date.now());
32
+ }
33
+ get turns() {
34
+ return this.#turns;
35
+ }
36
+ on(listener) {
37
+ return this.#bag.on(listener);
38
+ }
39
+ abort() {
40
+ this.#abortController?.abort();
41
+ this.#abortController = undefined;
42
+ }
43
+ /**
44
+ * Send a freeform user message and stream the agent reply. Resolves
45
+ * with the final agent turn (intent draft inlined) when the stream
46
+ * completes; rejects with `HonuaOperatorIntentError` on transport
47
+ * failure.
48
+ *
49
+ * If a previous send is still in flight, it is aborted before this
50
+ * one starts. The active controller identity is the per-send token —
51
+ * stream updates, `intent-drafted`, and `error` emissions are gated
52
+ * on it so a slow earlier stream cannot drive workspace state back
53
+ * to a stale intent after a newer send has taken over.
54
+ */
55
+ async send(text) {
56
+ this.#abortController?.abort();
57
+ const userTurn = this.#appendTurn({ role: "user", content: text });
58
+ const agentTurnId = this.#generateTurnId();
59
+ const startedAt = this.#now();
60
+ const agentIndex = this.#turns.push({
61
+ turnId: agentTurnId,
62
+ role: "agent",
63
+ content: "",
64
+ startedAt,
65
+ }) - 1;
66
+ this.#emitTurnUpdated(this.#turns[agentIndex]);
67
+ const controller = new AbortController();
68
+ this.#abortController = controller;
69
+ const signal = controller.signal;
70
+ const isCurrent = () => this.#abortController === controller;
71
+ try {
72
+ return await withTelemetrySpan(this.#telemetry, "chat-turn", undefined, async () => {
73
+ let intentDraft;
74
+ let accumulated = "";
75
+ let lastChunk;
76
+ for await (const chunk of this.#client.operator.chat(text, signal)) {
77
+ if (!isCurrent())
78
+ return this.#turns[agentIndex];
79
+ lastChunk = chunk;
80
+ accumulated += chunk.delta;
81
+ if (chunk.intentDraft)
82
+ intentDraft = chunk.intentDraft;
83
+ const updated = {
84
+ turnId: agentTurnId,
85
+ role: "agent",
86
+ content: accumulated,
87
+ startedAt,
88
+ ...(chunk.done ? { finishedAt: this.#now() } : {}),
89
+ ...(intentDraft ? { intentDraft } : {}),
90
+ };
91
+ this.#turns[agentIndex] = updated;
92
+ this.#emitTurnUpdated(updated);
93
+ if (chunk.done)
94
+ break;
95
+ }
96
+ if (!isCurrent())
97
+ return this.#turns[agentIndex];
98
+ if (!lastChunk?.done) {
99
+ // Stream ended without an explicit terminal chunk — close
100
+ // the turn so consumers always observe a `finishedAt`.
101
+ const closed = {
102
+ ...this.#turns[agentIndex],
103
+ finishedAt: this.#now(),
104
+ };
105
+ this.#turns[agentIndex] = closed;
106
+ this.#emitTurnUpdated(closed);
107
+ }
108
+ if (intentDraft) {
109
+ this.#bag.emit({ kind: "intent-drafted", intent: intentDraft });
110
+ }
111
+ // Touch userTurn so the variable is observed even when no
112
+ // intermediate observer reads it (silences strict-unused).
113
+ void userTurn;
114
+ return this.#turns[agentIndex];
115
+ }, { turnId: agentTurnId });
116
+ }
117
+ catch (error) {
118
+ const wrapped = error instanceof HonuaOperatorIntentError
119
+ ? error
120
+ : new HonuaOperatorIntentError("chat send failed", { cause: error, detail: { turnId: agentTurnId } });
121
+ // Only emit on the bag if this send still owns the surface; a
122
+ // superseded send is expected to throw (its consumer awaits the
123
+ // returned promise) but should not pollute the event stream.
124
+ if (isCurrent()) {
125
+ this.#bag.emit({ kind: "error", error: wrapped });
126
+ }
127
+ throw wrapped;
128
+ }
129
+ finally {
130
+ if (isCurrent())
131
+ this.#abortController = undefined;
132
+ }
133
+ }
134
+ /** Append a system message (e.g. an embedder-supplied notice). */
135
+ appendSystem(content) {
136
+ return this.#appendTurn({ role: "system", content });
137
+ }
138
+ #appendTurn(input) {
139
+ const turn = {
140
+ turnId: this.#generateTurnId(),
141
+ role: input.role,
142
+ content: input.content,
143
+ startedAt: this.#now(),
144
+ finishedAt: this.#now(),
145
+ };
146
+ this.#turns.push(turn);
147
+ this.#emitTurnUpdated(turn);
148
+ return turn;
149
+ }
150
+ #emitTurnUpdated(turn) {
151
+ const decorated = this.#decorate ? this.#decorate(turn) : turn;
152
+ this.#bag.emit({ kind: "turn-updated", turn: decorated });
153
+ }
154
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * `ClarificationController` — typed form derived from
3
+ * `intent.clarifications[]`. Submission is a pass-through to
4
+ * `OperatorClient.operator.clarify` and yields a fresh intent revision.
5
+ *
6
+ * @module
7
+ */
8
+ import type { OperatorClient } from "../client.js";
9
+ import { HonuaOperatorIntentError } from "../errors.js";
10
+ import type { OperatorTelemetry } from "../telemetry.js";
11
+ import type { AnalysisIntent, BuilderIntent, ClarificationField } from "../workspace/types.js";
12
+ import { type Unsubscribe } from "./base.js";
13
+ export interface ClarificationState {
14
+ readonly intent: AnalysisIntent | BuilderIntent | undefined;
15
+ readonly fields: ReadonlyArray<ClarificationField>;
16
+ readonly answers: ReadonlyMap<string, string>;
17
+ readonly submitting: boolean;
18
+ }
19
+ export type ClarificationEvent = {
20
+ kind: "loaded";
21
+ intent: AnalysisIntent | BuilderIntent;
22
+ } | {
23
+ kind: "answer-changed";
24
+ fieldId: string;
25
+ value: string;
26
+ } | {
27
+ kind: "submitted";
28
+ intent: AnalysisIntent | BuilderIntent;
29
+ } | {
30
+ kind: "error";
31
+ error: HonuaOperatorIntentError;
32
+ };
33
+ export interface ClarificationControllerOptions {
34
+ client: OperatorClient;
35
+ telemetry?: OperatorTelemetry;
36
+ }
37
+ export declare class ClarificationController {
38
+ #private;
39
+ constructor(options: ClarificationControllerOptions);
40
+ get state(): ClarificationState;
41
+ on(listener: (event: ClarificationEvent) => void): Unsubscribe;
42
+ load(intent: AnalysisIntent | BuilderIntent): void;
43
+ setAnswer(fieldId: string, value: string): void;
44
+ /**
45
+ * Submit the current answers and resolve with the revised intent.
46
+ * Missing required answers reject with `HonuaOperatorIntentError`
47
+ * before any network call so the controller never depends on the
48
+ * server for required-field validation.
49
+ */
50
+ submit(signal?: AbortSignal): Promise<AnalysisIntent | BuilderIntent>;
51
+ }
52
+ //# sourceMappingURL=clarification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification.d.ts","sourceRoot":"","sources":["../../../../src/operator/controllers/clarification.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAuB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACpH,OAAO,EAAe,KAAK,WAAW,EAAqB,MAAM,WAAW,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,aAAa,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,qBAAa,uBAAuB;;gBAaf,OAAO,EAAE,8BAA8B;IAK1D,IAAW,KAAK,IAAI,kBAAkB,CAOrC;IAEM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,WAAW;IAI9D,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,GAAG,IAAI;IAYlD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAetD;;;;;OAKG;IACU,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC;CAwDnF"}