@timurproko/a1 0.1.8-dev.21b95d6 → 0.1.8-dev.224

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 (461) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +4 -1
  4. package/bin/module-identity.js +69 -35
  5. package/bin/pi-tui.d.ts +6 -0
  6. package/bin/pi-tui.js +28 -0
  7. package/bin/release-cleanup.js +8 -0
  8. package/bin/supervisor.js +1 -1
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +25 -6
  11. package/bin/warmup.js +18 -0
  12. package/dist/cli/capabilities.d.ts +6 -0
  13. package/dist/{src/cli → cli}/capabilities.js +1 -1
  14. package/dist/{src/cli → cli}/dispatch.d.ts +6 -0
  15. package/dist/cli/dispatch.js +202 -0
  16. package/dist/{src/cli → cli}/packages.d.ts +10 -2
  17. package/dist/{src/cli → cli}/packages.js +24 -20
  18. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  19. package/dist/cli/version-stats.js +112 -0
  20. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  21. package/dist/composition/agent-engine-bridge.js +108 -0
  22. package/dist/composition/index.d.ts +3 -0
  23. package/dist/composition/index.js +3 -0
  24. package/dist/composition/owned-ui.d.ts +28 -0
  25. package/dist/composition/owned-ui.js +64 -0
  26. package/dist/composition/process.d.ts +16 -0
  27. package/dist/composition/process.js +45 -0
  28. package/dist/composition/settings-route-host.d.ts +8 -0
  29. package/dist/composition/settings-route-host.js +75 -0
  30. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  31. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  33. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  34. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  35. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  36. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  37. package/dist/{src/features → features}/launch/index.js +0 -1
  38. package/dist/{src/features → features}/launch/intent.d.ts +3 -2
  39. package/dist/features/launch/intent.js +3 -0
  40. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  41. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  42. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  43. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  44. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  45. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  46. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  47. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  48. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  49. package/dist/{src/features → features}/owned-ui/index.d.ts +1 -0
  50. package/dist/{src/features → features}/owned-ui/index.js +1 -0
  51. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  52. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  53. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  54. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  55. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  56. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  57. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  58. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  59. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  60. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  61. package/dist/{src/features → features}/workspace/router.js +1 -0
  62. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  63. package/dist/{src/features → features}/workspace/store.js +1 -0
  64. package/dist/{src/foundation → foundation}/launch-guardian/main.js +10 -2
  65. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  66. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  67. package/dist/foundation/lifecycle/paths.d.ts +28 -0
  68. package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -0
  69. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  71. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  72. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  73. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  74. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  75. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  76. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  77. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +1 -0
  78. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +1 -0
  79. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  80. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  81. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  82. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  83. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +14 -4
  84. package/dist/{src/foundation → foundation}/release/bootstrap.js +66 -13
  85. package/dist/foundation/release/cohort-state.d.ts +131 -0
  86. package/dist/foundation/release/cohort-state.js +384 -0
  87. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  88. package/dist/foundation/release/dependency-layer.js +487 -0
  89. package/dist/foundation/release/endpoints.d.ts +20 -0
  90. package/dist/foundation/release/endpoints.js +50 -0
  91. package/dist/{src/foundation → foundation}/release/index.d.ts +3 -0
  92. package/dist/{src/foundation → foundation}/release/index.js +3 -0
  93. package/dist/foundation/release/release-gc.d.ts +60 -0
  94. package/dist/foundation/release/release-gc.js +538 -0
  95. package/dist/{src/foundation → foundation}/release/release-store.d.ts +3 -1
  96. package/dist/{src/foundation → foundation}/release/release-store.js +60 -10
  97. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  98. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  99. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  100. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  101. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  102. package/dist/{src/foundation → foundation}/release/update.js +114 -54
  103. package/dist/foundation/release/warmup.d.ts +3 -0
  104. package/dist/foundation/release/warmup.js +35 -0
  105. package/dist/foundation/startup/index.d.ts +1 -0
  106. package/dist/foundation/startup/index.js +1 -0
  107. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  108. package/dist/foundation/startup/startup-runtime.js +140 -0
  109. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  110. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  111. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  112. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  113. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  114. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  115. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  116. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  117. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  118. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  119. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  120. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  121. package/dist/foundation/supervision/index.d.ts +3 -0
  122. package/dist/foundation/supervision/index.js +3 -0
  123. package/dist/{src/foundation → foundation}/supervision/main.js +11 -5
  124. package/dist/foundation/supervision/paths.d.ts +1 -0
  125. package/dist/foundation/supervision/paths.js +1 -0
  126. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  127. package/dist/{src/foundation → foundation}/supervision/server.js +51 -2
  128. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  129. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  130. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  131. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  132. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  133. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  134. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  135. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  136. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  137. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  138. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +32 -17
  139. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  140. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  141. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  142. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  143. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +1 -1
  144. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +52 -8
  145. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  146. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  147. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  148. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  151. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +22 -4
  152. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +289 -68
  153. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  154. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  155. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  156. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  157. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +3 -0
  158. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +3 -0
  159. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  160. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  161. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  162. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +2 -2
  163. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  164. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  165. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  166. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  167. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +16 -1
  168. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +39 -4
  169. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  170. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  171. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  172. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  173. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  174. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  177. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  178. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  179. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  180. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  181. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  182. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  183. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  184. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +137 -0
  185. package/dist/integrations/pi/session-ui/session-shell-root.js +1106 -0
  186. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  187. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +415 -775
  188. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +44 -0
  189. package/dist/integrations/pi/session-ui/session-viewport-controller.js +434 -0
  190. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  191. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  192. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  193. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  194. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  195. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  196. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  197. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +63 -0
  198. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +240 -0
  199. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  200. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  201. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  202. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  203. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  204. package/dist/native/darwin-arm64/manifest.json +1 -1
  205. package/dist/native/linux-x64/manifest.json +3 -3
  206. package/dist/native/linux-x64/process-guardian +0 -0
  207. package/dist/native/win32-x64/manifest.json +3 -3
  208. package/dist/native/win32-x64/process-guardian.exe +0 -0
  209. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  210. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  211. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  212. package/dist/runtime-payload-inventory.json +122328 -0
  213. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  214. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  215. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  216. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  217. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  218. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  219. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  220. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  221. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +4 -0
  222. package/dist/{src/foundation/ui-components → ui/components}/index.js +4 -0
  223. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  224. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  225. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  226. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  227. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  228. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  229. package/dist/ui/components/progress-status.d.ts +2 -0
  230. package/dist/ui/components/progress-status.js +4 -0
  231. package/dist/ui/components/prompt-row.d.ts +14 -0
  232. package/dist/ui/components/prompt-row.js +20 -0
  233. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  234. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  235. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  236. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  237. package/dist/ui/components/spans.d.ts +25 -0
  238. package/dist/ui/components/spans.js +257 -0
  239. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  240. package/dist/ui/components/submitted-prompt.js +50 -0
  241. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  242. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  243. package/dist/ui/components/text-selection.d.ts +62 -0
  244. package/dist/ui/components/text-selection.js +235 -0
  245. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  247. package/dist/ui/components/transcript-viewport.d.ts +146 -0
  248. package/dist/ui/components/transcript-viewport.js +629 -0
  249. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  250. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  251. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  252. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  253. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  254. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  255. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  256. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  257. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  258. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  259. package/docs/architecture/boundaries.md +9 -9
  260. package/docs/architecture/code-documentation.md +77 -0
  261. package/docs/architecture/project-structure.md +67 -30
  262. package/docs/architecture/resource-and-data-policy.md +1 -1
  263. package/docs/architecture/toolchain.md +10 -10
  264. package/docs/architecture/ui-reference-provenance.md +34 -5
  265. package/docs/ci-release-runbook.md +186 -79
  266. package/docs/features/launch-profiles.md +10 -19
  267. package/docs/manual-launch-instance-acceptance.md +12 -35
  268. package/docs/manual-owned-ui-checkpoint.md +78 -0
  269. package/docs/manual-pi-boundary-candidate.md +4 -5
  270. package/docs/manual-terminal-colour-check.md +4 -3
  271. package/docs/repository-governance-live-acceptance.md +77 -0
  272. package/package.json +37 -27
  273. package/dist/src/cli/capabilities.d.ts +0 -15
  274. package/dist/src/cli/dispatch.js +0 -177
  275. package/dist/src/cli/version-stats.js +0 -72
  276. package/dist/src/composition/index.d.ts +0 -48
  277. package/dist/src/composition/index.js +0 -258
  278. package/dist/src/features/launch/intent.js +0 -4
  279. package/dist/src/features/launch/profiles.d.ts +0 -12
  280. package/dist/src/features/launch/profiles.js +0 -26
  281. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  282. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  283. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  284. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  285. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -112
  286. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  287. package/dist/src/foundation/release/cohort-state.js +0 -202
  288. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  289. package/dist/src/foundation/release/release-gc.js +0 -16
  290. package/dist/src/foundation/supervision/index.d.ts +0 -3
  291. package/dist/src/foundation/supervision/index.js +0 -3
  292. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  293. package/dist/src/foundation/supervision/paths.js +0 -1
  294. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  295. package/dist/src/foundation/ui-components/spans.js +0 -59
  296. package/docs/manual-transparent-checkpoint.md +0 -53
  297. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  298. /package/dist/{src/cli → cli}/index.js +0 -0
  299. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  300. /package/dist/{src/cli → cli}/version.js +0 -0
  301. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  302. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  303. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  304. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  305. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  306. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  307. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  308. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +0 -0
  309. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  310. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  311. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  312. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  313. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  314. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  315. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  316. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  317. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  318. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  319. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  320. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  321. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  322. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  323. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  324. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  325. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  326. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  327. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  328. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  329. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  330. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  331. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  332. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  333. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  334. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  335. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  336. /package/dist/{src/features → features}/workspace/index.js +0 -0
  337. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  338. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  339. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  340. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  341. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  342. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  343. /package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +0 -0
  344. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  345. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  346. /package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +0 -0
  347. /package/dist/{src/foundation → foundation}/lifecycle/index.js +0 -0
  348. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  349. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  350. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  351. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  352. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  353. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  354. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  355. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  356. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  357. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  358. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  359. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  360. /package/dist/{src/foundation → foundation}/process-containment/index.d.ts +0 -0
  361. /package/dist/{src/foundation → foundation}/process-containment/index.js +0 -0
  362. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  363. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  364. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  365. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  366. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  367. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  368. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  369. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  370. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  371. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  372. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  373. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  374. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  375. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  376. /package/dist/{src/foundation → foundation}/supervision/main.d.ts +0 -0
  377. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  378. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +0 -0
  379. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +0 -0
  380. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  381. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  382. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  383. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  384. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +0 -0
  385. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  386. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  387. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  388. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  389. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  390. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  391. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  392. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  393. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  394. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  395. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  396. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  397. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  398. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  399. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  400. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  401. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  402. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  403. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  404. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  428. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  429. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  430. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  431. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +0 -0
  432. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  433. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  434. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  435. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  436. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  437. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  438. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  439. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  440. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  441. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  442. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  443. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  444. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  445. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  446. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  447. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  448. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  449. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  450. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  451. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  452. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  453. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  454. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  455. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  456. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  457. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  458. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  459. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  460. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  461. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,108 @@
1
+ import { AGENT_ENGINE_CONTRACT_VERSION, assertAgentCommand, } from "../contracts/agent-engine/index.js";
2
+ const CAPABILITIES = {
3
+ contractVersion: AGENT_ENGINE_CONTRACT_VERSION,
4
+ commands: ["prompt", "steer", "follow-up", "abort", "retry", "compact", "bash", "replace-session"],
5
+ events: ["lifecycle", "content", "command-outcome", "snapshot-invalidated", "diagnostic"],
6
+ snapshots: { supported: true, maxBytes: 1024 * 1024 },
7
+ };
8
+ export function createPiAgentEngineBridge(adapter, cwd) {
9
+ return new PiAgentEngineBridge(adapter, cwd);
10
+ }
11
+ class PiAgentEngineBridge {
12
+ adapter;
13
+ cwd;
14
+ capabilities = CAPABILITIES;
15
+ #session;
16
+ constructor(adapter, cwd) {
17
+ this.adapter = adapter;
18
+ this.cwd = cwd;
19
+ }
20
+ async createSession(input) {
21
+ if (this.#session)
22
+ return this.#session;
23
+ if (input.cwd !== this.cwd)
24
+ throw new TypeError("composed Pi engine cannot change working directory");
25
+ await this.adapter.start();
26
+ this.#session = new PiAgentSessionBridge(this.adapter, input.sessionId);
27
+ return this.#session;
28
+ }
29
+ async dispose() { await this.adapter.dispose(); }
30
+ }
31
+ class PiAgentSessionBridge {
32
+ adapter;
33
+ sessionId;
34
+ capabilities = CAPABILITIES;
35
+ lifecycle = "starting";
36
+ #listeners = new Set();
37
+ #unsubscribe;
38
+ constructor(adapter, sessionId) {
39
+ this.adapter = adapter;
40
+ this.sessionId = sessionId;
41
+ this.#unsubscribe = adapter.onEvent(event => {
42
+ const converted = convertEvent(event);
43
+ if (!converted)
44
+ return;
45
+ if (converted.type === "lifecycle")
46
+ this.lifecycle = converted.lifecycle;
47
+ for (const listener of this.#listeners)
48
+ listener(converted);
49
+ });
50
+ this.lifecycle = toLifecycle(adapter.snapshot().view.lifecycle);
51
+ }
52
+ async execute(command) {
53
+ assertAgentCommand(command, this.capabilities);
54
+ if (command.sessionId !== this.sessionId)
55
+ return "rejected";
56
+ if (command.type === "bash") {
57
+ const result = await this.adapter.executeBashWorkflow(command.command, false);
58
+ return !result.cancelled && result.exitCode === 0 ? "completed" : result.cancelled ? "cancelled" : "failed";
59
+ }
60
+ const result = await this.adapter.execute(toOwnedCommand(command));
61
+ return result.outcome === "timed-out" ? "failed" : result.outcome;
62
+ }
63
+ subscribe(listener) { this.#listeners.add(listener); return () => this.#listeners.delete(listener); }
64
+ async snapshot() {
65
+ const snapshot = this.adapter.snapshot();
66
+ return {
67
+ contractVersion: AGENT_ENGINE_CONTRACT_VERSION,
68
+ snapshotId: snapshot.snapshotId,
69
+ sessionId: this.sessionId,
70
+ revision: snapshot.view.revision,
71
+ sequence: snapshot.sequence,
72
+ lifecycle: toLifecycle(snapshot.view.lifecycle),
73
+ content: snapshot.view.transcript.map(toMessage),
74
+ activeCommandIds: snapshot.view.activeCommandIds,
75
+ capabilities: this.capabilities,
76
+ };
77
+ }
78
+ async dispose() { this.#unsubscribe(); this.#listeners.clear(); await this.adapter.dispose(); this.lifecycle = "stopped"; }
79
+ }
80
+ function toOwnedCommand(command) {
81
+ const base = { correlationId: command.commandId, sessionId: command.sessionId };
82
+ if (command.type === "replace-session")
83
+ return command.source.kind === "new" ? { ...base, type: "new-session" } : { ...base, type: "resume-session", sessionPath: command.source.sessionPath };
84
+ if (command.type === "prompt" || command.type === "steer" || command.type === "follow-up")
85
+ return { ...base, type: command.type, text: command.text };
86
+ return { ...base, type: command.type };
87
+ }
88
+ function convertEvent(event) {
89
+ const base = { contractVersion: AGENT_ENGINE_CONTRACT_VERSION, sessionId: event.sessionId, sequence: event.sequence };
90
+ if (event.type === "session-lifecycle")
91
+ return { ...base, type: "lifecycle", lifecycle: toLifecycle(event.lifecycle), reason: event.reason };
92
+ if (event.type === "transcript-block")
93
+ return { ...base, type: "content", content: toMessage(event.block) };
94
+ if (event.type === "command-outcome")
95
+ return { ...base, type: "command-outcome", commandId: event.correlationId, outcome: event.outcome === "timed-out" ? "failed" : event.outcome, diagnostic: event.diagnostic };
96
+ if (event.type === "diagnostic")
97
+ return { ...base, type: "diagnostic", code: event.diagnostic.code, message: event.diagnostic.message, recoverable: event.diagnostic.recoverable };
98
+ if (event.type === "session-view")
99
+ return { ...base, type: "snapshot-invalidated", expectedRevision: event.view.revision };
100
+ return null;
101
+ }
102
+ function toLifecycle(lifecycle) {
103
+ return lifecycle === "suspended" ? "ready" : lifecycle;
104
+ }
105
+ function toMessage(block) {
106
+ const role = block.kind === "user" ? "user" : block.kind === "system" ? "system" : block.kind === "tool-call" || block.kind === "tool-result" ? "tool" : "assistant";
107
+ return { id: block.id, role, status: block.status === "live" ? "streaming" : "final", content: [{ kind: "text", text: block.text }] };
108
+ }
@@ -0,0 +1,3 @@
1
+ export { composeOwnedUi, composeOwnedUiApplication, type OwnedUiComposition, type OwnedUiCompositionOptions, } from "./owned-ui.js";
2
+ export { composeProcess, type ProcessComposition, type ProcessCompositionOptions, } from "./process.js";
3
+ export { createOwnedRouteHost } from "./settings-route-host.js";
@@ -0,0 +1,3 @@
1
+ export { composeOwnedUi, composeOwnedUiApplication, } from "./owned-ui.js";
2
+ export { composeProcess, } from "./process.js";
3
+ export { createOwnedRouteHost } from "./settings-route-host.js";
@@ -0,0 +1,28 @@
1
+ import { type PiEngineAdapter, type PiProjectTrustPreflightPrompt } from "../integrations/pi/engine/index.js";
2
+ import { OwnedUiSettingsSession } from "../ui/settings/index.js";
3
+ import type { OwnedUiApplicationPort, PresentationTerminalPort } from "../contracts/presentation/index.js";
4
+ export interface OwnedUiCompositionOptions {
5
+ readonly cwd?: string;
6
+ readonly terminal?: PresentationTerminalPort;
7
+ readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
8
+ /** Exact persisted session selected by the narrow `--session` launch form. */
9
+ readonly sessionPath?: string;
10
+ /**
11
+ * A1 profile whose settings this session reads and writes. Omitted keeps the
12
+ * session settings-free, which is what the pinned comparison paths use.
13
+ */
14
+ readonly profileId?: string;
15
+ /**
16
+ * Whether A1's product-specific surfaces are reachable. Comparison profiles
17
+ * use the same composition with those surfaces withheld.
18
+ */
19
+ readonly ownedSurfaces?: "on" | "off";
20
+ readonly projectTrustPrompt?: PiProjectTrustPreflightPrompt;
21
+ }
22
+ export interface OwnedUiComposition {
23
+ readonly application: OwnedUiApplicationPort;
24
+ /** Present when a profile was supplied, so the caller can resolve settings before start. */
25
+ readonly settings: OwnedUiSettingsSession | null;
26
+ }
27
+ export declare function composeOwnedUiApplication(options?: OwnedUiCompositionOptions): Promise<OwnedUiApplicationPort>;
28
+ export declare function composeOwnedUi(options?: OwnedUiCompositionOptions): Promise<OwnedUiComposition>;
@@ -0,0 +1,64 @@
1
+ import { resolveProductPaths } from "../foundation/lifecycle/index.js";
2
+ import { applyConfiguredPiTheme, getAvailablePiThemes } from "../integrations/pi/components/index.js";
3
+ import { createPiEngineAdapter, } from "../integrations/pi/engine/index.js";
4
+ import { OwnedUiSessionShell } from "../integrations/pi/session-ui/index.js";
5
+ import { OwnedUiSettingsSession, OwnedUiSettingsStore } from "../ui/settings/index.js";
6
+ import { createPiTerminalBridge } from "../integrations/pi/tui-runtime/index.js";
7
+ import { createOwnedRouteHost } from "./settings-route-host.js";
8
+ export async function composeOwnedUiApplication(options = {}) {
9
+ return (await composeOwnedUi(options)).application;
10
+ }
11
+ export async function composeOwnedUi(options = {}) {
12
+ const cwd = options.cwd ?? process.cwd();
13
+ const adapter = options.createPiAdapter
14
+ ? await options.createPiAdapter()
15
+ : await createPiEngineAdapter({
16
+ cwd,
17
+ availableThemes: () => getAvailablePiThemes().map(theme => theme.name),
18
+ settingsProductMode: options.ownedSurfaces === "off" ? "comparison" : "bare",
19
+ ...(options.sessionPath === undefined ? {} : { sessionPath: options.sessionPath }),
20
+ ...(options.projectTrustPrompt === undefined ? {} : { projectTrustPrompt: options.projectTrustPrompt }),
21
+ });
22
+ const ownedSurfaces = options.ownedSurfaces !== "off";
23
+ const settings = options.profileId === undefined
24
+ ? null
25
+ : new OwnedUiSettingsSession({
26
+ store: new OwnedUiSettingsStore({ configDir: resolveProductPaths().configDir, profileId: options.profileId }),
27
+ agentProvider: () => adapter.settingsPort(),
28
+ });
29
+ // Compatibility: bare A1 intentionally ships one visual target while its UI is being completed:
30
+ // dark, regardless of terminal detection or a previously stored Pi theme. The
31
+ // comparison profile keeps Pi's configured theme behavior and settings surface.
32
+ applyConfiguredPiTheme(ownedSurfaces ? "dark" : adapter.configuredTheme());
33
+ const routeHost = settings === null || !ownedSurfaces ? null : createOwnedRouteHost(settings);
34
+ const viewportSettings = settings === null || !ownedSurfaces ? null : {
35
+ snapshot: () => viewportSettingsSnapshot(settings),
36
+ onChange: listener => settings.onChange(() => listener(viewportSettingsSnapshot(settings))),
37
+ };
38
+ const shell = new OwnedUiSessionShell({
39
+ backend: adapter,
40
+ cwd,
41
+ ...(options.terminal === undefined ? {} : { terminal: createPiTerminalBridge(options.terminal) }),
42
+ ...(routeHost === null ? {} : { routeHost }),
43
+ ...(ownedSurfaces ? { sessionLayout: "custom-viewport" } : {}),
44
+ ...(viewportSettings === null ? {} : { viewportSettings }),
45
+ });
46
+ const application = {
47
+ get disposed() { return adapter.disposed; },
48
+ start: () => shell.start(),
49
+ flush: () => adapter.flushEvents(),
50
+ waitUntilStopped: () => shell.waitUntilStopped(),
51
+ dispose: () => shell.dispose(),
52
+ };
53
+ return { application, settings };
54
+ }
55
+ function viewportSettingsSnapshot(settings) {
56
+ const appearance = settings.value("scrollbarAppearance");
57
+ const style = settings.value("scrollbarStyle");
58
+ const speed = settings.value("scrollbarSpeed");
59
+ return {
60
+ scrollbarAppearance: appearance === "always" || appearance === "hidden" ? appearance : "auto",
61
+ scrollbarStyle: style === "thick" ? "thick" : "thin",
62
+ scrollbarSpeed: speed === "high" ? "high" : speed === "fast" ? "fast" : "normal",
63
+ };
64
+ }
@@ -0,0 +1,16 @@
1
+ import { type AgentEnginePort } from "../contracts/agent-engine/index.js";
2
+ import { type PiEngineAdapter } from "../integrations/pi/engine/index.js";
3
+ import { type PresentationComponentPort, type PresentationRuntimePort, type PresentationTerminalPort } from "../contracts/presentation/index.js";
4
+ export interface ProcessCompositionOptions {
5
+ readonly cwd?: string;
6
+ readonly sessionId?: string;
7
+ readonly engine?: AgentEnginePort;
8
+ readonly presentationFactory?: (root: PresentationComponentPort, terminal: PresentationTerminalPort) => PresentationRuntimePort;
9
+ readonly createPiAdapter?: () => Promise<PiEngineAdapter>;
10
+ }
11
+ export interface ProcessComposition {
12
+ readonly engine: AgentEnginePort;
13
+ createPresentation(root: PresentationComponentPort, terminal: PresentationTerminalPort): PresentationRuntimePort;
14
+ dispose(): Promise<void>;
15
+ }
16
+ export declare function composeProcess(options?: ProcessCompositionOptions): Promise<ProcessComposition>;
@@ -0,0 +1,45 @@
1
+ import { assertAgentCapabilityContract, } from "../contracts/agent-engine/index.js";
2
+ import { createPiEngineAdapter } from "../integrations/pi/engine/index.js";
3
+ import { createPiPresentationRuntime } from "../integrations/pi/tui-runtime/index.js";
4
+ import { assertPresentationComponent, assertPresentationRuntime, } from "../contracts/presentation/index.js";
5
+ import { createPiAgentEngineBridge } from "./agent-engine-bridge.js";
6
+ export async function composeProcess(options = {}) {
7
+ let engine = options.engine;
8
+ if (!engine) {
9
+ const adapter = options.createPiAdapter
10
+ ? await options.createPiAdapter()
11
+ : await createPiEngineAdapter({
12
+ ...(options.cwd === undefined ? {} : { cwd: options.cwd }),
13
+ ...(options.sessionId === undefined ? {} : { sessionId: options.sessionId }),
14
+ });
15
+ engine = createPiAgentEngineBridge(adapter, options.cwd ?? process.cwd());
16
+ }
17
+ assertAgentCapabilityContract(engine.capabilities);
18
+ if (typeof engine.createSession !== "function" || typeof engine.dispose !== "function")
19
+ throw new TypeError("composed engine does not satisfy the neutral engine port");
20
+ const presentations = new Set();
21
+ let disposed = false;
22
+ return {
23
+ engine,
24
+ createPresentation(root, terminal) {
25
+ if (disposed)
26
+ throw new Error("process composition is disposed");
27
+ assertPresentationComponent(root);
28
+ const runtime = options.presentationFactory?.(root, terminal) ?? createPiPresentationRuntime(root, terminal);
29
+ assertPresentationRuntime(runtime);
30
+ presentations.add(runtime);
31
+ return runtime;
32
+ },
33
+ async dispose() {
34
+ if (disposed)
35
+ return;
36
+ disposed = true;
37
+ const failures = [];
38
+ for (const runtime of [...presentations].reverse())
39
+ await runtime.stop().catch(error => failures.push(error));
40
+ await engine.dispose().catch(error => failures.push(error));
41
+ if (failures.length)
42
+ throw new AggregateError(failures, "process composition disposal failed");
43
+ },
44
+ };
45
+ }
@@ -0,0 +1,8 @@
1
+ import type { OwnedUiSettingsSession } from "../ui/settings/index.js";
2
+ import { type UiRouteHost } from "../ui/apps/index.js";
3
+ /**
4
+ * Registers the A1-owned screens and adapts the app host to the shell's route
5
+ * seam. The shell mounts whatever surface it is handed and forwards keys; it
6
+ * never learns what an app is.
7
+ */
8
+ export declare function createOwnedRouteHost(settings: OwnedUiSettingsSession): UiRouteHost;
@@ -0,0 +1,75 @@
1
+ import { SETTINGS_APP_ID, SETTINGS_ROUTE, SettingsApp } from "../features/owned-ui/index.js";
2
+ import { piTheme } from "../integrations/pi/components/index.js";
3
+ import { UiAppHost, UiAppRegistry, } from "../ui/apps/index.js";
4
+ import { faint } from "../ui/components/index.js";
5
+ /**
6
+ * Registers the A1-owned screens and adapts the app host to the shell's route
7
+ * seam. The shell mounts whatever surface it is handed and forwards keys; it
8
+ * never learns what an app is.
9
+ */
10
+ export function createOwnedRouteHost(settings) {
11
+ const registry = new UiAppRegistry();
12
+ registry.register({ id: SETTINGS_APP_ID, route: SETTINGS_ROUTE, create: () => new SettingsApp(settings) });
13
+ return {
14
+ claims: route => registry.forRoute(route) !== null,
15
+ open: route => {
16
+ const registration = registry.forRoute(route);
17
+ if (registration === null)
18
+ return null;
19
+ let size = { width: 80, height: 24 };
20
+ let frame = [];
21
+ let closed = false;
22
+ let onRender = () => undefined;
23
+ let onExit = () => undefined;
24
+ const host = new UiAppHost({
25
+ registry,
26
+ closeOnInterrupt: true,
27
+ theme: pinnedTheme(),
28
+ surface: {
29
+ size: () => size,
30
+ requestRender: () => onRender(),
31
+ exit: () => onExit(),
32
+ present: lines => {
33
+ if (lines === null)
34
+ closed = true;
35
+ else
36
+ frame = lines;
37
+ },
38
+ },
39
+ });
40
+ host.open(registration.id);
41
+ const surface = {
42
+ id: registration.id,
43
+ render: (width, height) => {
44
+ size = { width, height };
45
+ host.render();
46
+ return frame.length === height ? frame : [...frame.slice(0, height), ...Array(Math.max(0, height - frame.length)).fill("")];
47
+ },
48
+ handleInput: data => host.handleInput(data).consumed,
49
+ handleMouse: event => host.handleMouse(event).consumed,
50
+ isClosed: () => closed || !host.isPresenting,
51
+ close: () => host.close(),
52
+ onRenderRequested: listener => { onRender = listener; },
53
+ onExitRequested: listener => { onExit = listener; },
54
+ };
55
+ return surface;
56
+ },
57
+ };
58
+ }
59
+ /** Maps A1 UI tokens onto the pinned Pi theme so owned screens match the shell. */
60
+ function pinnedTheme() {
61
+ return {
62
+ fg: (token, text) => piTheme().fg(token, text),
63
+ bold: (text) => piTheme().bold(text),
64
+ // Rationale: unpainted, so a list reads against the terminal the reader actually has
65
+ // rather than against the background the configured theme was built for.
66
+ plain: (text) => text,
67
+ // Rationale: quiet, and quieter again: the terminal's own faint attribute over the
68
+ // dimmest colour the theme has.
69
+ disabled: (text) => faint(piTheme().fg("dim", text)),
70
+ // Rationale: physical review requires the shared value menu to read as a floating
71
+ // product surface instead of blending into the settings rows behind it.
72
+ highlight: (text) => `\u001b[48;2;82;82;82m\u001b[97m${text}\u001b[39m\u001b[49m`,
73
+ panel: (text) => `\u001b[48;2;55;55;55m${text}\u001b[49m`,
74
+ };
75
+ }
@@ -1,4 +1,4 @@
1
- import type { AgentJsonValue, AgentModelDescriptor, AgentResourceDescriptor, AgentSettingDescriptor } from "./domain.js";
1
+ import type { AgentJsonValue, AgentModelDescriptor, AgentSettingChangeOutcome, AgentResourceDescriptor, AgentSettingDescriptor } from "./domain.js";
2
2
  export interface AgentModelPort {
3
3
  readonly capabilities: {
4
4
  readonly selection: boolean;
@@ -26,7 +26,7 @@ export interface AgentSettingsPort {
26
26
  };
27
27
  listSettings(): Promise<readonly AgentSettingDescriptor[]>;
28
28
  readSetting(key: string): Promise<AgentJsonValue | undefined>;
29
- writeSetting?(key: string, value: AgentJsonValue): Promise<void>;
29
+ writeSetting?(key: string, value: AgentJsonValue): Promise<AgentSettingChangeOutcome>;
30
30
  flush?(): Promise<void>;
31
31
  }
32
32
  export interface AgentResourcesPort {
@@ -52,10 +52,28 @@ export function assertAgentUsage(value) { for (const amount of [value.inputToken
52
52
  nonNegative(amount, "usage token count"); if (value.cost !== null && (!(typeof value.cost === "number") || !Number.isFinite(value.cost) || value.cost < 0))
53
53
  throw new TypeError("usage cost is invalid"); }
54
54
  export function assertAgentModelDescriptor(value) { id(value.providerId, "model provider id"); id(value.modelId, "model id"); text(value.displayName, "model display name"); nonNegative(value.contextWindow, "model context window"); unique(value.thinkingLevels, undefined, "model thinking levels"); }
55
- export function assertAgentSettingDescriptor(value) { id(value.key, "setting key"); if (!["boolean", "number", "string", "enum", "json"].includes(value.valueType) || typeof value.writable !== "boolean")
56
- throw new TypeError("setting descriptor is invalid"); if (value.choices)
57
- for (const choice of value.choices)
58
- json(choice, "setting choice"); }
55
+ export function assertAgentSettingDescriptor(value) {
56
+ id(value.key, "setting key");
57
+ if (!["boolean", "number", "string", "enum", "json"].includes(value.valueType)
58
+ || typeof value.writable !== "boolean"
59
+ || !["live", "next-session", "next-start", "current-exit"].includes(value.application)
60
+ || !["agent", "shell", "terminal", "startup", "shutdown", "installation"].includes(value.owner)
61
+ || typeof value.available !== "boolean"
62
+ || !(value.limitationReason === null || typeof value.limitationReason === "string")) {
63
+ throw new TypeError("setting descriptor is invalid");
64
+ }
65
+ json(value.storedValue, "stored setting value");
66
+ json(value.effectiveValue, "effective setting value");
67
+ if ((value.available && value.limitationReason !== null)
68
+ || (!value.available && (value.limitationReason === null || value.limitationReason.length === 0))) {
69
+ throw new TypeError("setting descriptor availability is contradictory");
70
+ }
71
+ if (value.writable && !value.available)
72
+ throw new TypeError("unavailable setting cannot be writable");
73
+ if (value.choices)
74
+ for (const choice of value.choices)
75
+ json(choice, "setting choice");
76
+ }
59
77
  export function assertAgentResourceDescriptor(value) { id(value.id, "resource id"); if (!["command", "prompt", "skill", "extension", "other"].includes(value.kind))
60
78
  throw new TypeError("resource kind is invalid"); text(value.label, "resource label"); json(value.metadata, "resource metadata"); }
61
79
  export function assertAgentThemeDescriptor(value) { id(value.id, "theme id"); text(value.label, "theme label"); if (!value.tokens || typeof value.tokens !== "object" || Object.values(value.tokens).some(token => typeof token !== "string"))
@@ -48,10 +48,27 @@ export interface AgentModelDescriptor {
48
48
  readonly contextWindow: number;
49
49
  readonly thinkingLevels: readonly string[];
50
50
  }
51
+ export type AgentSettingApplicationBoundary = "live" | "next-session" | "next-start" | "current-exit";
52
+ export type AgentSettingOwner = "agent" | "shell" | "terminal" | "startup" | "shutdown" | "installation";
53
+ export interface AgentSettingChangeOutcome {
54
+ readonly status: "applied" | "deferred" | "unavailable" | "failed";
55
+ readonly application: AgentSettingApplicationBoundary;
56
+ readonly storedValue: AgentJsonValue;
57
+ readonly effectiveValue: AgentJsonValue;
58
+ readonly failure: string | null;
59
+ readonly limitationReason: string | null;
60
+ }
51
61
  export interface AgentSettingDescriptor {
52
62
  readonly key: string;
53
63
  readonly valueType: "boolean" | "number" | "string" | "enum" | "json";
64
+ /** A setting is writable only when its declared owner/effect is available. */
54
65
  readonly writable: boolean;
66
+ readonly application: AgentSettingApplicationBoundary;
67
+ readonly owner: AgentSettingOwner;
68
+ readonly available: boolean;
69
+ readonly limitationReason: string | null;
70
+ readonly storedValue: AgentJsonValue;
71
+ readonly effectiveValue: AgentJsonValue;
55
72
  readonly choices?: readonly AgentJsonValue[];
56
73
  /** Label the engine shows for this setting, when it has one. */
57
74
  readonly label?: string;
@@ -12,12 +12,28 @@ export interface OwnedUiModelInfo {
12
12
  readonly displayName: string;
13
13
  }
14
14
  export type OwnedUiThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
15
+ export interface OwnedUiViewportSettings {
16
+ readonly scrollbarAppearance: "auto" | "always" | "hidden";
17
+ readonly scrollbarStyle: "thin" | "thick";
18
+ /** normal is baseline; fast is 2x normal; high is normal plus fast. */
19
+ readonly scrollbarSpeed: "normal" | "fast" | "high";
20
+ }
21
+ /** Narrow live settings boundary consumed by the bare-A1 shell composition. */
22
+ export interface OwnedUiViewportSettingsPort {
23
+ snapshot(): OwnedUiViewportSettings;
24
+ onChange(listener: (settings: OwnedUiViewportSettings) => void): () => void;
25
+ }
15
26
  export interface OwnedUiTerminalSurface {
16
27
  readonly columns: number;
17
28
  readonly rows: number;
18
29
  readonly focusedRegion: "transcript" | "editor" | "dialog" | "overlay" | "status";
19
30
  readonly hardwareCursor: boolean;
20
31
  }
32
+ export interface OwnedUiImageAttachment {
33
+ readonly type: "image";
34
+ readonly data: string;
35
+ readonly mimeType: string;
36
+ }
21
37
  export interface OwnedUiEditorState {
22
38
  readonly text: string;
23
39
  readonly queuedSubmissions: readonly string[];
@@ -75,6 +91,12 @@ export interface OwnedUiOverlay {
75
91
  readonly modal: boolean;
76
92
  readonly payload: unknown;
77
93
  }
94
+ export interface OwnedUiTranscriptImageReference {
95
+ readonly assetId: OwnedUiEntityId;
96
+ readonly mimeType: string;
97
+ readonly byteLength: number;
98
+ readonly source: "user" | "tool-result";
99
+ }
78
100
  export interface OwnedUiTranscriptBlock {
79
101
  readonly id: OwnedUiEntityId;
80
102
  readonly kind: OwnedUiTranscriptBlockKind;
@@ -83,6 +105,8 @@ export interface OwnedUiTranscriptBlock {
83
105
  readonly title: string | null;
84
106
  readonly text: string;
85
107
  readonly payload: unknown;
108
+ /** Bounded opaque references; image bytes remain in the session-scoped engine asset store. */
109
+ readonly imageReferences?: readonly OwnedUiTranscriptImageReference[];
86
110
  }
87
111
  export type OwnedUiSlotId = "theme" | "transcript-block" | "tool-card" | "editor" | "status" | "command" | "selector" | "dialog" | "overlay" | "layout";
88
112
  export interface OwnedUiCustomization {
@@ -122,11 +146,13 @@ export type OwnedUiCommand = {
122
146
  readonly correlationId: OwnedUiCorrelationId;
123
147
  readonly sessionId: OwnedUiSessionId;
124
148
  readonly text: string;
149
+ readonly images?: readonly OwnedUiImageAttachment[];
125
150
  } | {
126
151
  readonly type: "steer" | "follow-up";
127
152
  readonly correlationId: OwnedUiCorrelationId;
128
153
  readonly sessionId: OwnedUiSessionId;
129
154
  readonly text: string;
155
+ readonly images?: readonly OwnedUiImageAttachment[];
130
156
  } | {
131
157
  readonly type: "abort" | "retry" | "compact" | "shutdown";
132
158
  readonly correlationId: OwnedUiCorrelationId;
@@ -189,6 +215,16 @@ export type OwnedUiEvent = {
189
215
  readonly sessionId: OwnedUiSessionId;
190
216
  readonly sequence: number;
191
217
  readonly block: OwnedUiTranscriptBlock;
218
+ } | {
219
+ /** One completed assistant reply; never a tool row or transcript rebuild. */
220
+ readonly type: "assistant-message-completed";
221
+ readonly sessionId: OwnedUiSessionId;
222
+ readonly sequence: number;
223
+ } | {
224
+ /** A fresh agent run has started, used by follow-mode surfaces. */
225
+ readonly type: "agent-run-started";
226
+ readonly sessionId: OwnedUiSessionId;
227
+ readonly sequence: number;
192
228
  } | {
193
229
  readonly type: "editor-state";
194
230
  readonly sessionId: OwnedUiSessionId;
@@ -5,6 +5,8 @@ const MAX_MESSAGE_LENGTH = 4_096;
5
5
  const MAX_TEXT_BYTES = 256 * 1024;
6
6
  const MAX_PAYLOAD_BYTES = 64 * 1024;
7
7
  const MAX_SESSION_VIEW_BYTES = 1024 * 1024;
8
+ const MAX_IMAGE_DATA_BYTES = 8 * 1024 * 1024;
9
+ const MAX_PROMPT_IMAGES = 8;
8
10
  const MAX_BLOCKS = 10_000;
9
11
  const MAX_CUSTOMIZATIONS = 1_000;
10
12
  const MAX_DIAGNOSTICS = 1_000;
@@ -12,6 +14,7 @@ const MAX_QUEUE = 32;
12
14
  const MAX_BADGES = 32;
13
15
  const MAX_STATUS_DIAGNOSTICS = 32;
14
16
  const MAX_ACTIVE_COMMANDS = 64;
17
+ const IMAGE_REFERENCE_SOURCES = new Set(["user", "tool-result"]);
15
18
  const BLOCK_KINDS = new Set([
16
19
  "user",
17
20
  "assistant",
@@ -53,6 +56,15 @@ export function assertOwnedUiCommand(command) {
53
56
  case "steer":
54
57
  case "follow-up":
55
58
  assertBoundedText(command.text, "owned-UI prompt text", MAX_TEXT_BYTES);
59
+ if (command.images !== undefined) {
60
+ assertCollection(command.images, "owned-UI prompt images", MAX_PROMPT_IMAGES);
61
+ for (const image of command.images) {
62
+ if (image.type !== "image")
63
+ throw new TypeError("owned-UI prompt image type is invalid");
64
+ assertBoundedText(image.data, "owned-UI prompt image data", MAX_IMAGE_DATA_BYTES);
65
+ assertBoundedText(image.mimeType, "owned-UI prompt image MIME type", MAX_LABEL_LENGTH);
66
+ }
67
+ }
56
68
  return;
57
69
  case "abort":
58
70
  case "retry":
@@ -103,6 +115,9 @@ export function assertOwnedUiEvent(event) {
103
115
  case "transcript-block":
104
116
  assertOwnedUiTranscriptBlock(event.block);
105
117
  return;
118
+ case "assistant-message-completed":
119
+ case "agent-run-started":
120
+ return;
106
121
  case "editor-state":
107
122
  assertOwnedUiEditorState(event.editor);
108
123
  return;
@@ -211,6 +226,16 @@ export function assertOwnedUiTranscriptBlock(block) {
211
226
  assertOptionalText(block.title, "owned-UI transcript block title", MAX_LABEL_LENGTH);
212
227
  assertPossiblyEmptyText(block.text, "owned-UI transcript block text", MAX_TEXT_BYTES);
213
228
  assertJsonValue(block.payload, "owned-UI transcript block payload", MAX_PAYLOAD_BYTES);
229
+ if (block.imageReferences !== undefined) {
230
+ assertCollection(block.imageReferences, "owned-UI transcript image references", 16);
231
+ for (const reference of block.imageReferences) {
232
+ assertId(reference.assetId, "owned-UI transcript image asset id");
233
+ if (!/^image\/[a-z0-9.+-]+$/i.test(reference.mimeType))
234
+ throw new TypeError("owned-UI transcript image MIME type is invalid");
235
+ assertIntegerInRange(reference.byteLength, 1, 20 * 1024 * 1024, "owned-UI transcript image byte length");
236
+ assertEnum(reference.source, IMAGE_REFERENCE_SOURCES, "owned-UI transcript image source");
237
+ }
238
+ }
214
239
  }
215
240
  export function assertOwnedUiEditorState(editor) {
216
241
  assertPossiblyEmptyText(editor.text, "owned-UI editor text", MAX_TEXT_BYTES);
@@ -8,8 +8,16 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
8
8
  const instanceId = selectedInstanceId
9
9
  ? createHash("sha256").update(selectedInstanceId).digest("hex").slice(0, 16)
10
10
  : randomUUID().replaceAll("-", "").slice(0, 16);
11
- const developmentRoot = resolve(source[PRODUCT_IDENTITY.environment.developmentRoot]
12
- ?? join(temporaryDirectory, PRODUCT_IDENTITY.state.developmentDirectory, checkoutId, releaseId, "instances", instanceId));
11
+ const checkoutRoot = resolve(temporaryDirectory, PRODUCT_IDENTITY.state.developmentDirectory, checkoutId);
12
+ const selectedDevelopmentRoot = source[PRODUCT_IDENTITY.environment.developmentRoot];
13
+ const developmentRoot = resolve(selectedDevelopmentRoot
14
+ ?? join(checkoutRoot, releaseId, "instances", instanceId));
15
+ // Rationale: runtime/data remain instance-isolated, but product settings are user
16
+ // preferences and must survive a fresh local launch (and a rebuilt candidate).
17
+ // An explicit development root retains its historical self-contained policy.
18
+ const persistentConfigDir = selectedDevelopmentRoot
19
+ ? join(developmentRoot, "config")
20
+ : join(checkoutRoot, "config");
13
21
  const dataDir = resolve(source[PRODUCT_IDENTITY.environment.dataDir] ?? join(developmentRoot, "data"));
14
22
  return {
15
23
  checkoutId,
@@ -19,7 +27,7 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
19
27
  environment: {
20
28
  ...source,
21
29
  [PRODUCT_IDENTITY.environment.developmentInstanceId]: instanceId,
22
- [PRODUCT_IDENTITY.environment.configDir]: resolve(source[PRODUCT_IDENTITY.environment.configDir] ?? join(developmentRoot, "config")),
30
+ [PRODUCT_IDENTITY.environment.configDir]: resolve(source[PRODUCT_IDENTITY.environment.configDir] ?? persistentConfigDir),
23
31
  [PRODUCT_IDENTITY.environment.dataDir]: dataDir,
24
32
  [PRODUCT_IDENTITY.environment.runtimeDir]: resolve(source[PRODUCT_IDENTITY.environment.runtimeDir] ?? join(developmentRoot, "runtime")),
25
33
  [PRODUCT_IDENTITY.environment.databasePath]: resolve(source[PRODUCT_IDENTITY.environment.databasePath] ?? join(dataDir, PRODUCT_IDENTITY.endpoint.databaseFilename)),
@@ -3,5 +3,4 @@ export * from "./initialize-profile.js";
3
3
  export * from "./intent.js";
4
4
  export * from "./profile-paths.js";
5
5
  export * from "./prepare-launch.js";
6
- export * from "./profiles.js";
7
6
  export * from "./runtime-selection.js";
@@ -3,5 +3,4 @@ export * from "./initialize-profile.js";
3
3
  export * from "./intent.js";
4
4
  export * from "./profile-paths.js";
5
5
  export * from "./prepare-launch.js";
6
- export * from "./profiles.js";
7
6
  export * from "./runtime-selection.js";
@@ -1,7 +1,8 @@
1
- import { type LaunchProfileContract, type LaunchProfileId } from "./profiles.js";
1
+ import type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
2
+ export type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
2
3
  export interface InteractiveLaunchIntent {
3
4
  readonly kind: "interactive";
4
- readonly profile: LaunchProfileContract;
5
+ readonly profileId: LaunchProfileId;
5
6
  }
6
7
  export type LaunchIntent = InteractiveLaunchIntent;
7
8
  export declare function interactiveLaunchIntent(profileId: LaunchProfileId): InteractiveLaunchIntent;
@@ -0,0 +1,3 @@
1
+ export function interactiveLaunchIntent(profileId) {
2
+ return Object.freeze({ kind: "interactive", profileId });
3
+ }