@timurproko/a1 0.1.8-dev.472 → 0.1.8-dev.508

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 (370) hide show
  1. package/bin/cli.js +4 -5
  2. package/bin/guardian.js +5 -1
  3. package/bin/module-identity.js +53 -98
  4. package/bin/module-resolver.js +138 -0
  5. package/bin/pinned-pi-public.js +25 -6
  6. package/bin/ui.js +7 -2
  7. package/bin/update-recovery.js +76 -7
  8. package/bin/warmup.js +3 -0
  9. package/dist/{integrations/pi/session-ui → app/session-shell}/clipboard-diagnostics.d.ts +1 -1
  10. package/dist/{integrations/pi/session-ui → app/session-shell}/clipboard-image.js +1 -1
  11. package/dist/app/session-shell/helper-pool.d.ts +33 -0
  12. package/dist/app/session-shell/helper-pool.js +98 -0
  13. package/dist/{integrations/pi/session-ui → app/session-shell}/image-preparation-client.d.ts +1 -1
  14. package/dist/{integrations/pi/session-ui → app/session-shell}/image-preparation-client.js +1 -1
  15. package/dist/{integrations/pi/session-ui → app/session-shell}/image-preparation.js +1 -1
  16. package/dist/{integrations/pi/session-ui → app/session-shell}/image-source.js +1 -1
  17. package/dist/{integrations/pi/session-ui → app/session-shell}/image-worker.js +1 -1
  18. package/dist/app/session-shell/index.d.ts +7 -0
  19. package/dist/app/session-shell/index.js +4 -0
  20. package/dist/app/session-shell/paste-executor.d.ts +18 -0
  21. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-executor.js +50 -29
  22. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-helper.js +1 -1
  23. package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
  24. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-preparation-client.js +19 -8
  25. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-protocol.d.ts +1 -1
  26. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-protocol.js +1 -1
  27. package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
  28. package/dist/{integrations/pi/session-ui/paste-text-preparation.d.ts → app/session-shell/paste-types.d.ts} +1 -4
  29. package/dist/{integrations/pi/session-ui → app/session-shell}/path-chip-presentation.d.ts +1 -1
  30. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-chips.d.ts +5 -1
  31. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-chips.js +6 -2
  32. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-history-controller.d.ts +2 -2
  33. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-history-controller.js +2 -2
  34. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-suggestion-controller.d.ts +1 -1
  35. package/dist/{integrations/pi/session-ui → app/session-shell}/prompt-suggestion-controller.js +2 -2
  36. package/dist/{integrations/pi/session-ui → app/session-shell}/quit-outro.js +1 -1
  37. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-coordinator.d.ts +1 -1
  38. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-coordinator.js +3 -5
  39. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-helper.js +1 -1
  40. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-protocol.d.ts +1 -1
  41. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-transport.d.ts +10 -2
  42. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-transport.js +45 -19
  43. package/dist/{integrations/pi/session-ui → app/session-shell}/session-shell-root.d.ts +75 -53
  44. package/dist/{integrations/pi/session-ui → app/session-shell}/session-shell-root.js +30 -20
  45. package/dist/{integrations/pi/session-ui → app/session-shell}/session-shell.d.ts +9 -8
  46. package/dist/{integrations/pi/session-ui → app/session-shell}/session-shell.js +108 -67
  47. package/dist/{integrations/pi/session-ui → app/session-shell}/session-viewport-controller.d.ts +5 -5
  48. package/dist/{integrations/pi/session-ui → app/session-shell}/session-viewport-controller.js +5 -5
  49. package/dist/{integrations/pi/session-ui → app/session-shell}/system-clipboard.d.ts +1 -1
  50. package/dist/{integrations/pi/session-ui → app/session-shell}/system-clipboard.js +1 -1
  51. package/dist/cli/index.d.ts +8 -5
  52. package/dist/cli/index.js +4 -5
  53. package/dist/composition/index.d.ts +0 -1
  54. package/dist/composition/index.js +0 -1
  55. package/dist/composition/owned-ui.d.ts +2 -2
  56. package/dist/composition/owned-ui.js +35 -36
  57. package/dist/composition/settings-route-host.d.ts +2 -2
  58. package/dist/contracts/agent-engine/domain.d.ts +6 -1
  59. package/dist/contracts/agent-engine/index.d.ts +11 -8
  60. package/dist/contracts/agent-engine/index.js +6 -8
  61. package/dist/contracts/owned-ui/extension-ui.d.ts +8 -0
  62. package/dist/contracts/owned-ui/index.d.ts +12 -8
  63. package/dist/contracts/owned-ui/index.js +8 -8
  64. package/dist/features/launch/index.d.ts +12 -6
  65. package/dist/features/launch/index.js +6 -6
  66. package/dist/features/launch/intent.d.ts +5 -5
  67. package/dist/features/launch/intent.js +2 -2
  68. package/dist/features/owned-ui/index.d.ts +6 -6
  69. package/dist/features/owned-ui/index.js +4 -6
  70. package/dist/features/owned-ui/run.d.ts +2 -2
  71. package/dist/features/owned-ui/settings-app.d.ts +2 -2
  72. package/dist/features/owned-ui/settings-app.js +18 -5
  73. package/dist/features/prompt-history/service.d.ts +1 -1
  74. package/dist/features/prompt-history/service.js +1 -1
  75. package/dist/features/prompt-history/store.js +3 -7
  76. package/dist/features/prompt-suggestions/diagnostics.js +1 -1
  77. package/dist/features/prompt-suggestions/index.d.ts +2 -1
  78. package/dist/features/prompt-suggestions/index.js +1 -1
  79. package/dist/foundation/launch-guardian/index.d.ts +2 -1
  80. package/dist/foundation/launch-guardian/index.js +1 -1
  81. package/dist/foundation/lifecycle/index.d.ts +11 -6
  82. package/dist/foundation/lifecycle/index.js +5 -6
  83. package/dist/foundation/process-containment/index.d.ts +8 -6
  84. package/dist/foundation/process-containment/index.js +6 -6
  85. package/dist/foundation/process-containment/native-guardian-containment.js +3 -3
  86. package/dist/foundation/protocol/index.d.ts +3 -2
  87. package/dist/foundation/protocol/index.js +2 -2
  88. package/dist/foundation/release/bootstrap.d.ts +0 -4
  89. package/dist/foundation/release/bootstrap.js +1 -82
  90. package/dist/foundation/release/dependency-layer.d.ts +2 -5
  91. package/dist/foundation/release/endpoints.d.ts +4 -0
  92. package/dist/foundation/release/endpoints.js +86 -2
  93. package/dist/foundation/release/index.d.ts +30 -16
  94. package/dist/foundation/release/index.js +16 -16
  95. package/dist/foundation/release/release.d.ts +1 -1
  96. package/dist/foundation/release/types.d.ts +11 -0
  97. package/dist/foundation/release/types.js +1 -0
  98. package/dist/foundation/release/update-transaction.d.ts +1 -1
  99. package/dist/foundation/release/update.d.ts +2 -1
  100. package/dist/foundation/release/update.js +3 -18
  101. package/dist/foundation/startup/index.d.ts +4 -2
  102. package/dist/foundation/startup/index.js +2 -2
  103. package/dist/foundation/startup/startup-descriptor.js +2 -2
  104. package/dist/foundation/storage/control-store.d.ts +1 -45
  105. package/dist/foundation/storage/control-store.js +54 -277
  106. package/dist/foundation/storage/index.d.ts +1 -1
  107. package/dist/foundation/storage/index.js +1 -1
  108. package/dist/foundation/supervision/index.d.ts +2 -2
  109. package/dist/foundation/supervision/index.js +2 -2
  110. package/dist/foundation/supervision/server.d.ts +5 -10
  111. package/dist/foundation/supervision/server.js +7 -7
  112. package/dist/foundation/terminal-cleanup/index.d.ts +3 -2
  113. package/dist/foundation/terminal-cleanup/index.js +2 -2
  114. package/dist/integrations/pi/components/editor-interaction.d.ts +1 -1
  115. package/dist/integrations/pi/components/history-editor-loader.d.ts +1 -1
  116. package/dist/integrations/pi/components/index.d.ts +20 -13
  117. package/dist/integrations/pi/components/index.js +12 -13
  118. package/dist/integrations/pi/components/owned-editor-ux.js +5 -8
  119. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +7 -5
  120. package/dist/integrations/pi/components/resources/builtin-themes.js +7 -5
  121. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -1
  122. package/dist/integrations/pi/components/shell-extension-ui.js +2 -1
  123. package/dist/integrations/pi/components/shell-footer-status.js +1 -1
  124. package/dist/integrations/pi/components/shell-presenters-info.d.ts +1 -1
  125. package/dist/integrations/pi/components/shell-presenters-info.js +1 -1
  126. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  127. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +9 -3
  128. package/dist/integrations/pi/components/shell-selectors-dialogs.js +9 -6
  129. package/dist/integrations/pi/components/shell-shared-facade.d.ts +3 -1
  130. package/dist/integrations/pi/components/shell-shared-facade.js +4 -2
  131. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +1 -1
  132. package/dist/integrations/pi/components/submitted-prompt-adapter.js +1 -1
  133. package/dist/integrations/pi/components/tool-image-presentation.d.ts +1 -1
  134. package/dist/integrations/pi/components/tool-image-presentation.js +4 -7
  135. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +36 -22
  136. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +43 -7
  137. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  138. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +6 -3
  139. package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +8 -1
  140. package/dist/integrations/pi/components/upstream/components/daxnuts.js +7 -3
  141. package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +1 -1
  142. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +10 -4
  143. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +7 -4
  144. package/dist/integrations/pi/components/upstream/components/extension-editor.js +7 -4
  145. package/dist/integrations/pi/components/upstream/components/mermaid.js +8 -4
  146. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +9 -5
  147. package/dist/integrations/pi/components/upstream/components/owned-editor.js +10 -6
  148. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +8 -4
  149. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +27 -25
  150. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -1
  151. package/dist/integrations/pi/components/upstream/components/session-footer.js +8 -10
  152. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +6 -4
  153. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +1 -1
  154. package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -4
  155. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +7 -5
  156. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +8 -6
  157. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +9 -4
  158. package/dist/integrations/pi/components/upstream/components/status-indicator.js +15 -5
  159. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +8 -2
  160. package/dist/integrations/pi/components/upstream/components/tool-execution.js +58 -37
  161. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +7 -4
  162. package/dist/integrations/pi/components/upstream/components/tree-selector.js +7 -4
  163. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +1 -1
  164. package/dist/integrations/pi/components/upstream/components/trust-selector.js +10 -5
  165. package/dist/integrations/pi/components/upstream/external-editor.js +8 -4
  166. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +13 -4
  167. package/dist/integrations/pi/components/upstream/history/editor-core.js +112 -30
  168. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +6 -3
  169. package/dist/integrations/pi/components/upstream/history/kill-ring.js +6 -3
  170. package/dist/integrations/pi/components/upstream/history/printable-key.js +7 -4
  171. package/dist/integrations/pi/components/upstream/history/text-helpers.js +6 -3
  172. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +6 -3
  173. package/dist/integrations/pi/components/upstream/history/undo-stack.js +6 -3
  174. package/dist/integrations/pi/components/upstream/history/word-navigation.js +6 -3
  175. package/dist/integrations/pi/components/upstream/model-search.d.ts +5 -2
  176. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +8 -0
  177. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -3
  178. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +2 -2
  179. package/dist/integrations/pi/components/upstream/theme/theme.js +17 -6
  180. package/dist/integrations/pi/engine/adapter.d.ts +39 -138
  181. package/dist/integrations/pi/engine/adapter.js +338 -3226
  182. package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
  183. package/dist/integrations/pi/engine/command-dispatch.js +125 -0
  184. package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
  185. package/dist/integrations/pi/engine/event-delivery.js +184 -0
  186. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
  187. package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
  188. package/dist/integrations/pi/engine/index.d.ts +18 -14
  189. package/dist/integrations/pi/engine/index.js +10 -14
  190. package/dist/integrations/pi/engine/message-values.d.ts +29 -0
  191. package/dist/integrations/pi/engine/message-values.js +168 -0
  192. package/dist/integrations/pi/engine/pending-delivery.d.ts +2 -2
  193. package/dist/integrations/pi/engine/pending-delivery.js +2 -4
  194. package/dist/integrations/pi/engine/pi-settings-metadata.json +382 -371
  195. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
  196. package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
  197. package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
  198. package/dist/integrations/pi/engine/provider-authentication.js +209 -0
  199. package/dist/integrations/pi/engine/resource-catalog.d.ts +49 -0
  200. package/dist/integrations/pi/engine/resource-catalog.js +289 -0
  201. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  202. package/dist/integrations/pi/engine/session-events.d.ts +48 -0
  203. package/dist/integrations/pi/engine/session-events.js +223 -0
  204. package/dist/integrations/pi/engine/session-integration.js +2 -4
  205. package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
  206. package/dist/integrations/pi/engine/session-runtime.js +249 -0
  207. package/dist/integrations/pi/engine/{settings-effects.d.ts → settings-bridge.d.ts} +57 -2
  208. package/dist/integrations/pi/engine/settings-bridge.js +514 -0
  209. package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
  210. package/dist/integrations/pi/engine/settings-metadata.js +67 -0
  211. package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
  212. package/dist/integrations/pi/engine/settings-port.js +353 -0
  213. package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
  214. package/dist/integrations/pi/engine/transcript-projection.js +405 -0
  215. package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
  216. package/dist/integrations/pi/engine/usage-view.js +56 -0
  217. package/dist/integrations/pi/engine/workflow-contexts.d.ts +59 -0
  218. package/dist/integrations/pi/engine/workflow-contexts.js +316 -0
  219. package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
  220. package/dist/integrations/pi/engine/workflow-runner.js +509 -0
  221. package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
  222. package/dist/integrations/pi/engine/workflow-support.js +352 -0
  223. package/dist/integrations/pi/engine/workflows.d.ts +63 -2
  224. package/dist/integrations/pi/engine/workflows.js +5 -2
  225. package/dist/integrations/pi/startup-public.js +576 -554
  226. package/dist/integrations/pi/startup-public.manifest.json +1730 -984
  227. package/dist/integrations/pi/tui-runtime/adapter.js +10 -13
  228. package/dist/integrations/pi/tui-runtime/contracts.d.ts +11 -1
  229. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +1 -1
  230. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +4 -7
  231. package/dist/integrations/pi/tui-runtime/index.d.ts +8 -6
  232. package/dist/integrations/pi/tui-runtime/index.js +4 -6
  233. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +2 -4
  234. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -2
  235. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +4 -5
  236. package/dist/integrations/pi/tui-runtime/presentation-adapter.js +1 -1
  237. package/dist/native/darwin-arm64/manifest.json +1 -1
  238. package/dist/native/linux-x64/manifest.json +1 -1
  239. package/dist/native/win32-x64/manifest.json +2 -2
  240. package/dist/native/win32-x64/process-guardian.exe +0 -0
  241. package/dist/runtime-payload-inventory.json +51320 -46509
  242. package/dist/ui/apps/index.d.ts +5 -3
  243. package/dist/ui/apps/index.js +3 -3
  244. package/dist/ui/components/index.d.ts +47 -25
  245. package/dist/ui/components/index.js +25 -25
  246. package/dist/ui/components/prompt-input.js +1 -4
  247. package/dist/ui/settings/declarations.d.ts +119 -0
  248. package/dist/ui/settings/declarations.js +20 -11
  249. package/dist/ui/settings/index.d.ts +10 -6
  250. package/dist/ui/settings/index.js +5 -6
  251. package/dist/ui/settings/manager.d.ts +54 -0
  252. package/dist/ui/settings/{session.js → manager.js} +101 -9
  253. package/dist/ui/settings/sections.d.ts +2 -7
  254. package/docs/architecture/boundaries.md +4 -4
  255. package/docs/architecture/history-editor-provenance.md +1 -1
  256. package/docs/architecture/project-structure.md +6 -6
  257. package/docs/architecture/prompt-suggestions.md +1 -1
  258. package/docs/architecture/terminal-host-proof-gate.md +1 -1
  259. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  260. package/docs/architecture/toolchain.md +8 -0
  261. package/docs/architecture/ui-reference-provenance.md +4 -4
  262. package/docs/ci-release-runbook.md +7 -1
  263. package/docs/features/modal-content-interaction.md +2 -2
  264. package/docs/local-worktree-cleanup.md +4 -2
  265. package/docs/validation.md +6 -4
  266. package/package.json +7 -11
  267. package/bin/pi-tui.d.ts +0 -6
  268. package/bin/pi-tui.js +0 -28
  269. package/bin/sync-pi-tui-proxy.js +0 -97
  270. package/dist/cli/version.d.ts +0 -2
  271. package/dist/cli/version.js +0 -23
  272. package/dist/composition/agent-engine-bridge.d.ts +0 -3
  273. package/dist/composition/agent-engine-bridge.js +0 -108
  274. package/dist/composition/process.d.ts +0 -16
  275. package/dist/composition/process.js +0 -45
  276. package/dist/contracts/workspace/index.d.ts +0 -2
  277. package/dist/contracts/workspace/index.js +0 -2
  278. package/dist/contracts/workspace/model.d.ts +0 -248
  279. package/dist/contracts/workspace/model.js +0 -2
  280. package/dist/contracts/workspace/validation.d.ts +0 -13
  281. package/dist/contracts/workspace/validation.js +0 -335
  282. package/dist/features/owned-ui/customization.d.ts +0 -40
  283. package/dist/features/owned-ui/customization.js +0 -110
  284. package/dist/features/owned-ui/diagnostics.d.ts +0 -34
  285. package/dist/features/owned-ui/diagnostics.js +0 -95
  286. package/dist/features/workspace/capabilities.d.ts +0 -31
  287. package/dist/features/workspace/capabilities.js +0 -75
  288. package/dist/features/workspace/index.d.ts +0 -6
  289. package/dist/features/workspace/index.js +0 -6
  290. package/dist/features/workspace/presentation.d.ts +0 -30
  291. package/dist/features/workspace/presentation.js +0 -70
  292. package/dist/features/workspace/reconciliation.d.ts +0 -15
  293. package/dist/features/workspace/reconciliation.js +0 -82
  294. package/dist/features/workspace/reducer.d.ts +0 -43
  295. package/dist/features/workspace/reducer.js +0 -214
  296. package/dist/features/workspace/router.d.ts +0 -32
  297. package/dist/features/workspace/router.js +0 -125
  298. package/dist/features/workspace/store.d.ts +0 -18
  299. package/dist/features/workspace/store.js +0 -55
  300. package/dist/foundation/native-host-protocol/codec.d.ts +0 -13
  301. package/dist/foundation/native-host-protocol/codec.js +0 -58
  302. package/dist/foundation/native-host-protocol/evidence.d.ts +0 -67
  303. package/dist/foundation/native-host-protocol/evidence.js +0 -141
  304. package/dist/foundation/native-host-protocol/index.d.ts +0 -4
  305. package/dist/foundation/native-host-protocol/index.js +0 -4
  306. package/dist/foundation/native-host-protocol/messages.d.ts +0 -56
  307. package/dist/foundation/native-host-protocol/messages.js +0 -149
  308. package/dist/foundation/native-host-protocol/proof-gate.d.ts +0 -13
  309. package/dist/foundation/native-host-protocol/proof-gate.js +0 -33
  310. package/dist/foundation/structured-agent-runtime/backpressure.d.ts +0 -47
  311. package/dist/foundation/structured-agent-runtime/backpressure.js +0 -119
  312. package/dist/foundation/structured-agent-runtime/commands.d.ts +0 -53
  313. package/dist/foundation/structured-agent-runtime/commands.js +0 -165
  314. package/dist/foundation/structured-agent-runtime/handshake.d.ts +0 -41
  315. package/dist/foundation/structured-agent-runtime/handshake.js +0 -151
  316. package/dist/foundation/structured-agent-runtime/index.d.ts +0 -5
  317. package/dist/foundation/structured-agent-runtime/index.js +0 -5
  318. package/dist/foundation/structured-agent-runtime/reconnection.d.ts +0 -38
  319. package/dist/foundation/structured-agent-runtime/reconnection.js +0 -130
  320. package/dist/foundation/structured-agent-runtime/state.d.ts +0 -57
  321. package/dist/foundation/structured-agent-runtime/state.js +0 -119
  322. package/dist/integrations/pi/components/upstream/components/custom-entry.d.ts +0 -17
  323. package/dist/integrations/pi/components/upstream/components/custom-entry.js +0 -51
  324. package/dist/integrations/pi/components/upstream/components/first-time-setup.d.ts +0 -24
  325. package/dist/integrations/pi/components/upstream/components/first-time-setup.js +0 -105
  326. package/dist/integrations/pi/components/upstream/components/markdown-transform.d.ts +0 -2
  327. package/dist/integrations/pi/components/upstream/components/markdown-transform.js +0 -18
  328. package/dist/integrations/pi/engine/model-auth-integration.d.ts +0 -31
  329. package/dist/integrations/pi/engine/model-auth-integration.js +0 -62
  330. package/dist/integrations/pi/engine/resource-extension-integration.d.ts +0 -32
  331. package/dist/integrations/pi/engine/resource-extension-integration.js +0 -81
  332. package/dist/integrations/pi/engine/settings-effects.js +0 -249
  333. package/dist/integrations/pi/engine/settings-integration.d.ts +0 -43
  334. package/dist/integrations/pi/engine/settings-integration.js +0 -227
  335. package/dist/integrations/pi/engine/workflow-controllers.d.ts +0 -21
  336. package/dist/integrations/pi/engine/workflow-controllers.js +0 -49
  337. package/dist/integrations/pi/session-ui/index.d.ts +0 -5
  338. package/dist/integrations/pi/session-ui/index.js +0 -5
  339. package/dist/integrations/pi/session-ui/paste-executor.d.ts +0 -10
  340. package/dist/integrations/pi/session-ui/paste-preparation-client.d.ts +0 -16
  341. package/dist/integrations/pi/session-ui/route-host.d.ts +0 -5
  342. package/dist/integrations/pi/tui-runtime/conformance.d.ts +0 -18
  343. package/dist/integrations/pi/tui-runtime/conformance.js +0 -145
  344. package/dist/ui/components/prompt-row.d.ts +0 -14
  345. package/dist/ui/components/prompt-row.js +0 -20
  346. package/dist/ui/settings/session.d.ts +0 -36
  347. package/dist/ui/settings/store.d.ts +0 -29
  348. package/dist/ui/settings/store.js +0 -91
  349. package/dist/{integrations/pi/session-ui → app/session-shell}/clipboard-diagnostics.js +2 -2
  350. package/dist/{integrations/pi/session-ui → app/session-shell}/clipboard-image.d.ts +0 -0
  351. package/dist/{integrations/pi/session-ui → app/session-shell}/editor-hyperlink-budget.d.ts +0 -0
  352. package/dist/{integrations/pi/session-ui → app/session-shell}/editor-hyperlink-budget.js +0 -0
  353. package/dist/{integrations/pi/session-ui → app/session-shell}/image-preparation.d.ts +0 -0
  354. package/dist/{integrations/pi/session-ui → app/session-shell}/image-source.d.ts +0 -0
  355. package/dist/{integrations/pi/session-ui → app/session-shell}/image-worker.d.ts +0 -0
  356. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-helper.d.ts +0 -0
  357. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-text-preparation.js +0 -0
  358. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-text-worker.d.ts +0 -0
  359. package/dist/{integrations/pi/session-ui → app/session-shell}/paste-text-worker.js +0 -0
  360. package/dist/{integrations/pi/session-ui/response-copy-helper.d.ts → app/session-shell/paste-types.js} +0 -0
  361. package/dist/{integrations/pi/session-ui → app/session-shell}/path-chip-presentation.js +0 -0
  362. package/dist/{integrations/pi/session-ui → app/session-shell}/quit-outro-effects.d.ts +0 -0
  363. package/dist/{integrations/pi/session-ui → app/session-shell}/quit-outro-effects.js +0 -0
  364. package/dist/{integrations/pi/session-ui → app/session-shell}/quit-outro.d.ts +0 -0
  365. package/dist/{integrations/pi/session-ui/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
  366. package/dist/{integrations/pi/session-ui → app/session-shell}/response-copy-protocol.js +0 -0
  367. package/dist/{integrations/pi/session-ui → app/session-shell}/stream-presentation-coalescer.d.ts +0 -0
  368. package/dist/{integrations/pi/session-ui → app/session-shell}/stream-presentation-coalescer.js +3 -3
  369. /package/dist/{integrations/pi/session-ui → app/session-shell}/text-paste.d.ts +0 -0
  370. /package/dist/{integrations/pi/session-ui → app/session-shell}/text-paste.js +0 -0
@@ -1,75 +0,0 @@
1
- const STRUCTURED_ACTIONS = [
2
- "structured-command",
3
- "cancel-structured-command",
4
- "restore-structured-snapshot",
5
- "send-structured-attachment",
6
- ];
7
- const COMPOSED_ACTIONS = [
8
- "create-terminal-pane",
9
- "apply-terminal-layout",
10
- "focus-terminal-pane",
11
- "close-terminal-pane",
12
- ];
13
- export function gateWorkspaceAction(agent, action) {
14
- const capability = agent.capability;
15
- if (capability.kind === "structured") {
16
- if (!isStructuredAction(action.type)) {
17
- return reject("capability-mismatch", `agent ${agent.id} is structured and cannot use composed pane action ${action.type}`);
18
- }
19
- switch (action.type) {
20
- case "structured-command":
21
- return capability.commands.includes(action.command)
22
- ? allow(action)
23
- : reject("unsupported-command", `structured agent ${agent.id} does not declare command ${action.command}`);
24
- case "cancel-structured-command":
25
- return capability.cancellation === "correlated"
26
- ? allow(action)
27
- : reject("unsupported-cancellation", `structured agent ${agent.id} did not negotiate correlated cancellation`);
28
- case "restore-structured-snapshot":
29
- return capability.snapshots === "authoritative"
30
- ? allow(action)
31
- : reject("unsupported-snapshot", `structured agent ${agent.id} does not provide authoritative snapshots`);
32
- case "send-structured-attachment":
33
- return capability.attachmentTypes.includes(action.attachmentType)
34
- ? allow(action)
35
- : reject("unsupported-attachment", `structured agent ${agent.id} does not declare attachment type ${action.attachmentType}`);
36
- }
37
- }
38
- if (isStructuredAction(action.type)) {
39
- return reject("capability-mismatch", `agent ${agent.id} is terminal-backed and cannot use structured action ${action.type}`);
40
- }
41
- if (!isComposedAction(action.type))
42
- return reject("invalid-action", `workspace action is invalid: ${action.type}`);
43
- if (capability.proofStatus !== "accepted") {
44
- return reject("composed-unavailable", `composed pane action ${action.type} is unavailable until native-host proof is accepted (current: ${capability.proofStatus})`);
45
- }
46
- return allow(action);
47
- }
48
- export function availableWorkspaceActions(agent) {
49
- const capability = agent.capability;
50
- if (capability.kind === "structured") {
51
- const actions = [];
52
- if (capability.commands.length > 0)
53
- actions.push("structured-command");
54
- if (capability.cancellation === "correlated")
55
- actions.push("cancel-structured-command");
56
- if (capability.snapshots === "authoritative")
57
- actions.push("restore-structured-snapshot");
58
- if (capability.attachmentTypes.length > 0)
59
- actions.push("send-structured-attachment");
60
- return Object.freeze(actions);
61
- }
62
- return capability.proofStatus === "accepted" ? Object.freeze([...COMPOSED_ACTIONS]) : Object.freeze([]);
63
- }
64
- function isStructuredAction(type) {
65
- return STRUCTURED_ACTIONS.includes(type);
66
- }
67
- function isComposedAction(type) {
68
- return COMPOSED_ACTIONS.includes(type);
69
- }
70
- function allow(action) {
71
- return { kind: "allowed", action };
72
- }
73
- function reject(code, diagnostic) {
74
- return { kind: "rejected", code, diagnostic };
75
- }
@@ -1,6 +0,0 @@
1
- export * from "./capabilities.js";
2
- export * from "./presentation.js";
3
- export * from "./reconciliation.js";
4
- export * from "./reducer.js";
5
- export * from "./router.js";
6
- export * from "./store.js";
@@ -1,6 +0,0 @@
1
- export * from "./capabilities.js";
2
- export * from "./presentation.js";
3
- export * from "./reconciliation.js";
4
- export * from "./reducer.js";
5
- export * from "./router.js";
6
- export * from "./store.js";
@@ -1,30 +0,0 @@
1
- import { type WorkspaceCapabilityActionType } from "./capabilities.js";
2
- import type { WorkspaceAgentState, WorkspaceView } from "./reducer.js";
3
- export interface WorkspacePresentationOptions {
4
- readonly maxRows?: number;
5
- readonly maxLabelWidth?: number;
6
- }
7
- export interface WorkspaceAgentPresentationRow {
8
- readonly role: "option";
9
- readonly agentId: string;
10
- readonly label: string;
11
- readonly selected: boolean;
12
- readonly lifecycle: WorkspaceAgentState["lifecycle"];
13
- readonly unreadActivity: number;
14
- readonly attention: boolean;
15
- readonly failure: string | null;
16
- readonly actions: readonly WorkspaceCapabilityActionType[];
17
- readonly text: string;
18
- readonly accessibleDescription: string;
19
- }
20
- export interface WorkspacePresentationModel {
21
- readonly role: "listbox";
22
- readonly label: string;
23
- readonly selectedAgentId: string | null;
24
- readonly rows: readonly WorkspaceAgentPresentationRow[];
25
- readonly overflowCount: number;
26
- readonly emptyMessage: string | null;
27
- readonly text: string;
28
- }
29
- export declare function presentWorkspace(view: WorkspaceView, options?: WorkspacePresentationOptions): WorkspacePresentationModel;
30
- export declare function workspaceSelectionForKey(view: WorkspaceView, key: "ArrowDown" | "ArrowUp" | "Home" | "End"): string | null;
@@ -1,70 +0,0 @@
1
- import { availableWorkspaceActions } from "./capabilities.js";
2
- import { PRODUCT_TEXT } from "../../product-identity.js";
3
- const WORKSPACE_LABEL = `${PRODUCT_TEXT.displayName} agents`;
4
- export function presentWorkspace(view, options = {}) {
5
- const maxRows = boundedInteger(options.maxRows ?? 8, 1, 100, "maximum workspace rows");
6
- const maxLabelWidth = boundedInteger(options.maxLabelWidth ?? 32, 8, 64, "maximum workspace label width");
7
- const rows = view.agents.slice(0, maxRows).map(agent => presentAgent(agent, view.selectedAgentId === agent.id, maxLabelWidth));
8
- const overflowCount = Math.max(0, view.agents.length - rows.length);
9
- const text = rows.length === 0
10
- ? `${WORKSPACE_LABEL}\nNo managed agents.`
11
- : [WORKSPACE_LABEL, ...rows.map(row => row.text), ...(overflowCount > 0 ? [`… ${overflowCount} more`] : [])].join("\n");
12
- return Object.freeze({
13
- role: "listbox",
14
- label: WORKSPACE_LABEL,
15
- selectedAgentId: view.selectedAgentId,
16
- rows: Object.freeze(rows),
17
- overflowCount,
18
- emptyMessage: rows.length === 0 ? "No managed agents." : null,
19
- text,
20
- });
21
- }
22
- export function workspaceSelectionForKey(view, key) {
23
- if (view.agents.length === 0)
24
- return null;
25
- const currentIndex = Math.max(0, view.agents.findIndex(agent => agent.id === view.selectedAgentId));
26
- switch (key) {
27
- case "ArrowDown":
28
- return view.agents[Math.min(view.agents.length - 1, currentIndex + 1)]?.id ?? null;
29
- case "ArrowUp":
30
- return view.agents[Math.max(0, currentIndex - 1)]?.id ?? null;
31
- case "Home":
32
- return view.agents[0]?.id ?? null;
33
- case "End":
34
- return view.agents[view.agents.length - 1]?.id ?? null;
35
- }
36
- }
37
- function presentAgent(agent, selected, maxLabelWidth) {
38
- const label = truncate(agent.displayName, maxLabelWidth);
39
- const badges = [
40
- agent.lifecycle,
41
- agent.unreadActivity > 0 ? `${agent.unreadActivity} unread` : null,
42
- agent.attention ? "attention" : null,
43
- ].filter((value) => value !== null).join(", ");
44
- const failure = agent.failure ? `${agent.failure.code}: ${agent.failure.message}` : null;
45
- const actions = availableWorkspaceActions(agent);
46
- return Object.freeze({
47
- role: "option",
48
- agentId: agent.id,
49
- label,
50
- selected,
51
- lifecycle: agent.lifecycle,
52
- unreadActivity: agent.unreadActivity,
53
- attention: agent.attention,
54
- failure,
55
- actions,
56
- text: `${selected ? "›" : " "} ${label} — ${badges}`,
57
- accessibleDescription: [agent.lifecycle, agent.unreadActivity > 0 ? `${agent.unreadActivity} unread` : null, agent.attention ? "needs attention" : null, failure]
58
- .filter((value) => value !== null)
59
- .join("; "),
60
- });
61
- }
62
- function truncate(value, width) {
63
- return value.length <= width ? value : `${value.slice(0, width - 1)}…`;
64
- }
65
- function boundedInteger(value, minimum, maximum, name) {
66
- if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
67
- throw new RangeError(`${name} must be an integer from ${minimum} to ${maximum}`);
68
- }
69
- return value;
70
- }
@@ -1,15 +0,0 @@
1
- import { type StructuredResumeProof } from "../../foundation/structured-agent-runtime/index.js";
2
- import { WorkspaceReducer } from "./reducer.js";
3
- import { WorkspaceStore } from "./store.js";
4
- export interface WorkspaceReconciliationEntry {
5
- readonly agentId: string;
6
- readonly outcome: "unchanged" | "ready" | "ended" | "discontinuous";
7
- readonly code: string | null;
8
- readonly diagnostic: string;
9
- }
10
- export interface WorkspaceReconciliationReport {
11
- readonly reconciledAt: string;
12
- readonly revision: number;
13
- readonly entries: readonly WorkspaceReconciliationEntry[];
14
- }
15
- export declare function reconcileWorkspaceRestart(reducer: WorkspaceReducer, store: WorkspaceStore, proofs: ReadonlyMap<string, StructuredResumeProof>, reconciledAt?: string): WorkspaceReconciliationReport;
@@ -1,82 +0,0 @@
1
- import { StructuredReconnectionManager, } from "../../foundation/structured-agent-runtime/index.js";
2
- import { WorkspaceReducer } from "./reducer.js";
3
- import { WorkspaceStore } from "./store.js";
4
- export function reconcileWorkspaceRestart(reducer, store, proofs, reconciledAt = new Date().toISOString()) {
5
- const entries = [];
6
- for (const agent of reducer.view().agents) {
7
- if (agent.lifecycle === "stopped" || agent.lifecycle === "failed" || agent.lifecycle === "discontinuous") {
8
- entries.push(entry(agent.id, "unchanged", null, "agent is already terminal or discontinuous"));
9
- continue;
10
- }
11
- if (!agent.recoveryReferenceId) {
12
- reducer.markDiscontinuous(agent.id, "missing-recovery-authority", "agent has no durable recovery authority");
13
- entries.push(entry(agent.id, "discontinuous", "missing-recovery-authority", "agent has no durable recovery authority"));
14
- continue;
15
- }
16
- const reference = store.loadRecoveryReference(agent.recoveryReferenceId);
17
- if (!reference) {
18
- reducer.markDiscontinuous(agent.id, "missing-recovery-reference", "recovery reference is absent from the control store");
19
- entries.push(entry(agent.id, "discontinuous", "missing-recovery-reference", "recovery reference is absent from the control store"));
20
- continue;
21
- }
22
- const authority = reference.authority;
23
- if (authority.agentId !== agent.id || authority.kind !== agent.capability.kind) {
24
- reducer.markDiscontinuous(agent.id, "authority-mismatch", "recovery authority does not match the durable agent identity or runtime");
25
- persistRecoveryOutcome(store, authority, reference.status, "rejected", reconciledAt, "authority mismatch during workspace restart");
26
- entries.push(entry(agent.id, "discontinuous", "authority-mismatch", "recovery authority does not match the durable agent identity or runtime"));
27
- continue;
28
- }
29
- if (authority.kind === "composed-terminal") {
30
- reducer.markDiscontinuous(agent.id, "native-host-unavailable", "native-host recovery is unavailable until its accepted proof capability is enabled");
31
- persistRecoveryOutcome(store, authority, reference.status, "discontinuous", reconciledAt, "native-host recovery unavailable");
32
- entries.push(entry(agent.id, "discontinuous", "native-host-unavailable", "native-host recovery is unavailable until its accepted proof capability is enabled"));
33
- continue;
34
- }
35
- const proof = proofs.get(agent.id);
36
- if (!proof) {
37
- reducer.markDiscontinuous(agent.id, "missing-resume-proof", "adapter did not provide a resume proof during reconciliation");
38
- persistRecoveryOutcome(store, authority, reference.status, "discontinuous", reconciledAt, "missing resume proof");
39
- entries.push(entry(agent.id, "discontinuous", "missing-resume-proof", "adapter did not provide a resume proof during reconciliation"));
40
- continue;
41
- }
42
- if (agent.capability.kind !== "structured") {
43
- reducer.markDiscontinuous(agent.id, "capability-mismatch", "structured proof cannot recover a non-structured agent");
44
- persistRecoveryOutcome(store, authority, reference.status, "rejected", reconciledAt, "structured proof capability mismatch");
45
- entries.push(entry(agent.id, "discontinuous", "capability-mismatch", "structured proof cannot recover a non-structured agent"));
46
- continue;
47
- }
48
- const result = new StructuredReconnectionManager(agent.capability).resume(authority, proof, null);
49
- if (result.kind === "accepted") {
50
- reducer.markRecovered(agent.id);
51
- persistRecoveryOutcome(store, authority, reference.status, "accepted", reconciledAt, "verified ownership and resume boundary");
52
- entries.push(entry(agent.id, "ready", null, result.diagnostic));
53
- }
54
- else if (result.kind === "terminated") {
55
- reducer.stopAgent(agent.id);
56
- persistRecoveryOutcome(store, authority, reference.status, "discontinuous", reconciledAt, result.diagnostic);
57
- entries.push(entry(agent.id, "ended", "non-reconnectable", result.diagnostic));
58
- }
59
- else {
60
- reducer.markDiscontinuous(agent.id, result.code, result.diagnostic);
61
- persistRecoveryOutcome(store, authority, reference.status, "rejected", reconciledAt, result.diagnostic);
62
- entries.push(entry(agent.id, "discontinuous", result.code, result.diagnostic));
63
- }
64
- }
65
- store.save(reducer);
66
- return Object.freeze({
67
- reconciledAt,
68
- revision: reducer.view().revision,
69
- entries: Object.freeze(entries),
70
- });
71
- }
72
- function persistRecoveryOutcome(store, authority, previousStatus, status, reconciledAt, reason) {
73
- store.persistRecoveryReference(authority, status, {
74
- previousStatus,
75
- reason,
76
- reconciledAt,
77
- rollbackToStatus: previousStatus,
78
- }, reconciledAt);
79
- }
80
- function entry(agentId, outcome, code, diagnostic) {
81
- return Object.freeze({ agentId, outcome, code, diagnostic });
82
- }
@@ -1,43 +0,0 @@
1
- import { type ManagedAgentDescriptor } from "../../contracts/workspace/index.js";
2
- export interface WorkspaceAgentFailure {
3
- readonly code: string;
4
- readonly message: string;
5
- }
6
- export interface WorkspaceAgentState extends ManagedAgentDescriptor {
7
- readonly unreadActivity: number;
8
- readonly attention: boolean;
9
- readonly failure: WorkspaceAgentFailure | null;
10
- }
11
- export interface WorkspaceView {
12
- readonly workspaceId: string;
13
- readonly revision: number;
14
- readonly selectedAgentId: string | null;
15
- readonly agents: readonly WorkspaceAgentState[];
16
- }
17
- export type WorkspaceReducerResult<T = undefined> = {
18
- readonly kind: "applied";
19
- readonly view: WorkspaceView;
20
- readonly value: T;
21
- } | {
22
- readonly kind: "rejected";
23
- readonly code: string;
24
- readonly diagnostic: string;
25
- };
26
- /** Applies validated workspace mutations and advances the revision only when observable state changes. */
27
- export declare class WorkspaceReducer {
28
- #private;
29
- readonly workspaceId: string;
30
- constructor(workspaceId: string, agents?: readonly WorkspaceAgentState[], selectedAgentId?: string | null, revision?: number);
31
- createAgent(descriptor: ManagedAgentDescriptor): WorkspaceReducerResult<WorkspaceAgentState>;
32
- selectAgent(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
33
- renameAgent(agentId: string, displayName: string): WorkspaceReducerResult<string>;
34
- stopAgent(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
35
- restartAgent(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
36
- removeAgent(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
37
- recordActivity(agentId: string, amount?: number): WorkspaceReducerResult<number>;
38
- requestAttention(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
39
- markRecovered(agentId: string): WorkspaceReducerResult<WorkspaceAgentState>;
40
- markDiscontinuous(agentId: string, code: string, message: string): WorkspaceReducerResult<WorkspaceAgentState>;
41
- markFailed(agentId: string, code: string, message: string): WorkspaceReducerResult<WorkspaceAgentState>;
42
- view(): WorkspaceView;
43
- }
@@ -1,214 +0,0 @@
1
- import { assertManagedAgentDescriptor, } from "../../contracts/workspace/index.js";
2
- const REMOVABLE_STATES = new Set(["stopped", "failed", "discontinuous"]);
3
- /** Applies validated workspace mutations and advances the revision only when observable state changes. */
4
- export class WorkspaceReducer {
5
- workspaceId;
6
- #agents = new Map();
7
- #selectedAgentId;
8
- #revision;
9
- constructor(workspaceId, agents = [], selectedAgentId = null, revision = 0) {
10
- this.workspaceId = workspaceId;
11
- if (!workspaceId || workspaceId.includes("\0"))
12
- throw new TypeError("workspace id is invalid");
13
- if (!Number.isSafeInteger(revision) || revision < 0)
14
- throw new RangeError("workspace revision must be a non-negative safe integer");
15
- for (const agent of agents) {
16
- assertWorkspaceAgent(agent);
17
- if (this.#agents.has(agent.id))
18
- throw new TypeError(`duplicate workspace agent id: ${agent.id}`);
19
- this.#agents.set(agent.id, { ...agent });
20
- }
21
- if (selectedAgentId !== null && !this.#agents.has(selectedAgentId))
22
- throw new TypeError("selected workspace agent must exist");
23
- this.#selectedAgentId = selectedAgentId ?? agents[0]?.id ?? null;
24
- this.#revision = revision;
25
- }
26
- createAgent(descriptor) {
27
- try {
28
- assertManagedAgentDescriptor(descriptor);
29
- }
30
- catch (error) {
31
- return rejected("invalid-agent", error);
32
- }
33
- if (this.#agents.has(descriptor.id))
34
- return rejected("duplicate-agent", new Error(`workspace agent id already exists: ${descriptor.id}`));
35
- const agent = {
36
- ...descriptor,
37
- displayName: this.#uniqueDisplayName(descriptor.displayName),
38
- unreadActivity: 0,
39
- attention: false,
40
- failure: null,
41
- };
42
- this.#agents.set(agent.id, agent);
43
- this.#selectedAgentId ??= agent.id;
44
- this.#revision += 1;
45
- return applied(this.view(), Object.freeze({ ...agent }));
46
- }
47
- selectAgent(agentId) {
48
- const agent = this.#agents.get(agentId);
49
- if (!agent)
50
- return unknownAgent(agentId);
51
- const changed = this.#selectedAgentId !== agentId || agent.unreadActivity !== 0 || agent.attention;
52
- this.#selectedAgentId = agentId;
53
- agent.unreadActivity = 0;
54
- agent.attention = false;
55
- if (changed)
56
- this.#revision += 1;
57
- return applied(this.view(), Object.freeze({ ...agent }));
58
- }
59
- renameAgent(agentId, displayName) {
60
- const agent = this.#agents.get(agentId);
61
- if (!agent)
62
- return unknownAgent(agentId);
63
- try {
64
- assertDisplayName(displayName);
65
- }
66
- catch (error) {
67
- return rejected("invalid-display-name", error);
68
- }
69
- agent.displayName = this.#uniqueDisplayName(displayName, agentId);
70
- this.#revision += 1;
71
- return applied(this.view(), agent.displayName);
72
- }
73
- stopAgent(agentId) {
74
- const agent = this.#agents.get(agentId);
75
- if (!agent)
76
- return unknownAgent(agentId);
77
- if (agent.lifecycle !== "stopped") {
78
- agent.lifecycle = "stopped";
79
- agent.unreadActivity = 0;
80
- agent.attention = false;
81
- this.#revision += 1;
82
- }
83
- return applied(this.view(), Object.freeze({ ...agent }));
84
- }
85
- restartAgent(agentId) {
86
- const agent = this.#agents.get(agentId);
87
- if (!agent)
88
- return unknownAgent(agentId);
89
- agent.lifecycle = "creating";
90
- agent.unreadActivity = 0;
91
- agent.attention = false;
92
- agent.failure = null;
93
- this.#revision += 1;
94
- return applied(this.view(), Object.freeze({ ...agent }));
95
- }
96
- removeAgent(agentId) {
97
- const agent = this.#agents.get(agentId);
98
- if (!agent)
99
- return unknownAgent(agentId);
100
- if (!REMOVABLE_STATES.has(agent.lifecycle)) {
101
- return rejected("agent-active", new Error(`workspace agent must be stopped, failed, or discontinuous before removal: ${agentId}`));
102
- }
103
- const removed = Object.freeze({ ...agent });
104
- this.#agents.delete(agentId);
105
- if (this.#selectedAgentId === agentId)
106
- this.#selectedAgentId = this.#agents.keys().next().value ?? null;
107
- this.#revision += 1;
108
- return applied(this.view(), removed);
109
- }
110
- recordActivity(agentId, amount = 1) {
111
- const agent = this.#agents.get(agentId);
112
- if (!agent)
113
- return unknownAgent(agentId);
114
- if (!Number.isSafeInteger(amount) || amount <= 0)
115
- return rejected("invalid-activity", new Error("workspace unread activity amount must be positive"));
116
- if (this.#selectedAgentId !== agentId) {
117
- agent.unreadActivity += amount;
118
- this.#revision += 1;
119
- }
120
- return applied(this.view(), agent.unreadActivity);
121
- }
122
- requestAttention(agentId) {
123
- const agent = this.#agents.get(agentId);
124
- if (!agent)
125
- return unknownAgent(agentId);
126
- if (!agent.attention) {
127
- agent.attention = true;
128
- if (this.#selectedAgentId !== agentId && agent.unreadActivity === 0)
129
- agent.unreadActivity = 1;
130
- this.#revision += 1;
131
- }
132
- return applied(this.view(), Object.freeze({ ...agent }));
133
- }
134
- markRecovered(agentId) {
135
- const agent = this.#agents.get(agentId);
136
- if (!agent)
137
- return unknownAgent(agentId);
138
- agent.lifecycle = "ready";
139
- agent.unreadActivity = 0;
140
- agent.attention = false;
141
- agent.failure = null;
142
- this.#revision += 1;
143
- return applied(this.view(), Object.freeze({ ...agent }));
144
- }
145
- markDiscontinuous(agentId, code, message) {
146
- const agent = this.#agents.get(agentId);
147
- if (!agent)
148
- return unknownAgent(agentId);
149
- if (!code || code.length > 128 || code.includes("\0") || !message || message.length > 4_096 || message.includes("\0")) {
150
- return rejected("invalid-failure", new Error("workspace discontinuity code and message must be bounded non-empty values"));
151
- }
152
- agent.lifecycle = "discontinuous";
153
- agent.failure = Object.freeze({ code, message });
154
- agent.attention = true;
155
- this.#revision += 1;
156
- return applied(this.view(), Object.freeze({ ...agent }));
157
- }
158
- markFailed(agentId, code, message) {
159
- const agent = this.#agents.get(agentId);
160
- if (!agent)
161
- return unknownAgent(agentId);
162
- if (!code || code.length > 128 || code.includes("\0") || !message || message.length > 4_096 || message.includes("\0")) {
163
- return rejected("invalid-failure", new Error("workspace failure code and message must be bounded non-empty values"));
164
- }
165
- agent.lifecycle = "failed";
166
- agent.failure = Object.freeze({ code, message });
167
- agent.attention = true;
168
- this.#revision += 1;
169
- return applied(this.view(), Object.freeze({ ...agent }));
170
- }
171
- view() {
172
- return Object.freeze({
173
- workspaceId: this.workspaceId,
174
- revision: this.#revision,
175
- selectedAgentId: this.#selectedAgentId,
176
- agents: Object.freeze([...this.#agents.values()].map(agent => Object.freeze({ ...agent }))),
177
- });
178
- }
179
- #uniqueDisplayName(requested, excludeAgentId = null) {
180
- assertDisplayName(requested);
181
- const used = new Set([...this.#agents.values()].filter(agent => agent.id !== excludeAgentId).map(agent => agent.displayName));
182
- if (!used.has(requested))
183
- return requested;
184
- for (let suffix = 2; suffix < 1_000_000; suffix += 1) {
185
- const candidate = `${requested} (${suffix})`;
186
- if (!used.has(candidate))
187
- return candidate;
188
- }
189
- throw new RangeError("workspace display name suffix budget is exhausted");
190
- }
191
- }
192
- function applied(view, value) {
193
- return { kind: "applied", view, value };
194
- }
195
- function rejected(code, error) {
196
- return { kind: "rejected", code, diagnostic: error instanceof Error ? error.message : String(error) };
197
- }
198
- function unknownAgent(agentId) {
199
- return rejected("unknown-agent", new Error(`workspace agent does not exist: ${agentId}`));
200
- }
201
- function assertWorkspaceAgent(agent) {
202
- assertManagedAgentDescriptor(agent);
203
- if (!Number.isSafeInteger(agent.unreadActivity) || agent.unreadActivity < 0)
204
- throw new RangeError("workspace unread activity is invalid");
205
- if (typeof agent.attention !== "boolean")
206
- throw new TypeError("workspace attention is invalid");
207
- if (agent.failure !== null && (!agent.failure.code || !agent.failure.message))
208
- throw new TypeError("workspace failure is invalid");
209
- }
210
- function assertDisplayName(value) {
211
- if (typeof value !== "string" || value.length === 0 || value.length > 256 || value.includes("\0")) {
212
- throw new TypeError("workspace display name is invalid");
213
- }
214
- }
@@ -1,32 +0,0 @@
1
- import { type StructuredCommandRecord } from "../../foundation/structured-agent-runtime/index.js";
2
- import type { ManagedAgentDescriptor } from "../../contracts/workspace/index.js";
3
- import { WorkspaceReducer, type WorkspaceAgentState, type WorkspaceView } from "./reducer.js";
4
- export interface RoutedStructuredCommand {
5
- readonly agentId: string;
6
- readonly correlationId: string;
7
- readonly command: string;
8
- readonly record: StructuredCommandRecord;
9
- }
10
- export type WorkspaceRouterResult<T = undefined> = {
11
- readonly kind: "applied";
12
- readonly view: WorkspaceView;
13
- readonly value: T;
14
- } | {
15
- readonly kind: "rejected";
16
- readonly code: string;
17
- readonly diagnostic: string;
18
- };
19
- /** Serializes workspace actions and capability-gates structured commands at the selected-agent boundary. */
20
- export declare class WorkspaceRouter {
21
- #private;
22
- readonly reducer: WorkspaceReducer;
23
- constructor(reducer: WorkspaceReducer);
24
- createAgent(agent: ManagedAgentDescriptor): Promise<WorkspaceRouterResult<WorkspaceAgentState>>;
25
- selectAgent(agentId: string): Promise<WorkspaceRouterResult<WorkspaceAgentState>>;
26
- stopAgent(agentId: string): Promise<WorkspaceRouterResult<WorkspaceAgentState>>;
27
- removeAgent(agentId: string): Promise<WorkspaceRouterResult<WorkspaceAgentState>>;
28
- recordActivity(agentId: string, amount?: number): Promise<WorkspaceRouterResult<number>>;
29
- sendStructuredCommand(agentId: string, command: string, payload: unknown): Promise<WorkspaceRouterResult<RoutedStructuredCommand>>;
30
- cancelStructuredCommand(agentId: string, targetCorrelationId: string): Promise<WorkspaceRouterResult<StructuredCommandRecord>>;
31
- view(): WorkspaceView;
32
- }