@timurproko/a1 0.1.8-dev.235df0e → 0.1.8-dev.260

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 (485) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +8 -3
  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 +2 -2
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +47 -20
  11. package/bin/warmup.js +27 -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 +15 -1
  15. package/dist/cli/dispatch.js +261 -0
  16. package/dist/cli/package-messages.d.ts +26 -0
  17. package/dist/cli/package-messages.js +71 -0
  18. package/dist/{src/cli → cli}/packages.d.ts +11 -2
  19. package/dist/{src/cli → cli}/packages.js +24 -27
  20. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  21. package/dist/cli/version-stats.js +112 -0
  22. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  23. package/dist/composition/agent-engine-bridge.js +108 -0
  24. package/dist/composition/index.d.ts +3 -0
  25. package/dist/composition/index.js +3 -0
  26. package/dist/composition/owned-ui.d.ts +31 -0
  27. package/dist/composition/owned-ui.js +66 -0
  28. package/dist/composition/process.d.ts +16 -0
  29. package/dist/composition/process.js +45 -0
  30. package/dist/composition/settings-route-host.d.ts +8 -0
  31. package/dist/composition/settings-route-host.js +75 -0
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  33. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  34. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  35. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
  36. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  37. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  38. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  39. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  40. package/dist/{src/features → features}/launch/index.js +0 -1
  41. package/dist/features/launch/intent.d.ts +10 -0
  42. package/dist/features/launch/intent.js +8 -0
  43. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  44. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  45. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  46. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  47. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  48. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  49. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  50. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  51. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  52. package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
  53. package/dist/{src/features → features}/owned-ui/index.js +2 -0
  54. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  55. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  56. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  57. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  58. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  59. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  60. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  61. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  62. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  63. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  64. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  65. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  66. package/dist/{src/features → features}/workspace/router.js +1 -0
  67. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  68. package/dist/{src/features → features}/workspace/store.js +1 -0
  69. package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/launch-guardian/main.js +18 -5
  71. package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
  72. package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
  73. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  74. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  75. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  76. package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
  77. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  78. package/dist/foundation/lifecycle/session-selection.js +39 -0
  79. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  80. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  81. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  82. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  83. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  84. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  85. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  86. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  87. package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
  88. package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
  89. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  90. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  91. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  92. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  93. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
  94. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
  95. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  96. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  97. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  98. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  99. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +25 -6
  100. package/dist/{src/foundation → foundation}/release/bootstrap.js +124 -34
  101. package/dist/foundation/release/cohort-state.d.ts +156 -0
  102. package/dist/foundation/release/cohort-state.js +471 -0
  103. package/dist/foundation/release/dependency-layer.d.ts +82 -0
  104. package/dist/foundation/release/dependency-layer.js +497 -0
  105. package/dist/foundation/release/endpoints.d.ts +20 -0
  106. package/dist/foundation/release/endpoints.js +50 -0
  107. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  108. package/dist/foundation/release/immutable-platform.js +13 -0
  109. package/dist/{src/foundation → foundation}/release/index.d.ts +4 -0
  110. package/dist/{src/foundation → foundation}/release/index.js +4 -0
  111. package/dist/foundation/release/release-gc.d.ts +71 -0
  112. package/dist/foundation/release/release-gc.js +734 -0
  113. package/dist/{src/foundation → foundation}/release/release-store.d.ts +7 -3
  114. package/dist/{src/foundation → foundation}/release/release-store.js +65 -13
  115. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  116. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  117. package/dist/foundation/release/restart-certification.d.ts +67 -0
  118. package/dist/foundation/release/restart-certification.js +211 -0
  119. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  120. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  121. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  122. package/dist/{src/foundation → foundation}/release/update.js +116 -56
  123. package/dist/foundation/release/warmup.d.ts +3 -0
  124. package/dist/foundation/release/warmup.js +35 -0
  125. package/dist/foundation/startup/index.d.ts +1 -0
  126. package/dist/foundation/startup/index.js +1 -0
  127. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  128. package/dist/foundation/startup/startup-runtime.js +140 -0
  129. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  130. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  131. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  132. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  133. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  134. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  135. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  136. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  137. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  138. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  139. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  140. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  141. package/dist/foundation/supervision/index.d.ts +3 -0
  142. package/dist/foundation/supervision/index.js +3 -0
  143. package/dist/foundation/supervision/main.d.ts +1 -0
  144. package/dist/foundation/supervision/main.js +80 -0
  145. package/dist/foundation/supervision/paths.d.ts +1 -0
  146. package/dist/foundation/supervision/paths.js +1 -0
  147. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  148. package/dist/{src/foundation → foundation}/supervision/server.js +65 -3
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  151. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  152. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +1 -1
  153. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +1 -1
  154. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  155. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  156. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  157. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  158. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  159. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  160. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  161. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +49 -18
  162. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  163. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  164. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  165. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  166. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +5 -2
  167. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +2 -1
  168. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +57 -8
  169. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  170. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  171. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  172. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  173. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  174. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +28 -4
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +714 -127
  177. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  178. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  179. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  180. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  181. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
  182. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
  183. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  184. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  185. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  186. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
  187. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  188. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  189. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  190. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  191. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
  192. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +47 -5
  193. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  194. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  195. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  196. package/dist/integrations/pi/engine/session-selection.js +90 -0
  197. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  198. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  199. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  200. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  201. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  202. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  203. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +18 -1
  204. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  205. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  206. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  207. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  208. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  209. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  210. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  211. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +141 -0
  212. package/dist/integrations/pi/session-ui/session-shell-root.js +1158 -0
  213. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  214. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +479 -719
  215. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +45 -0
  216. package/dist/integrations/pi/session-ui/session-viewport-controller.js +463 -0
  217. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  218. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  219. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  220. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  221. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  222. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  223. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  224. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +74 -0
  225. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +380 -0
  226. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  227. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  228. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  229. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  230. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  231. package/dist/native/darwin-arm64/manifest.json +4 -4
  232. package/dist/native/darwin-arm64/process-guardian +0 -0
  233. package/dist/native/linux-x64/manifest.json +3 -3
  234. package/dist/native/linux-x64/process-guardian +0 -0
  235. package/dist/native/win32-x64/manifest.json +3 -3
  236. package/dist/native/win32-x64/process-guardian.exe +0 -0
  237. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  238. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  239. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  240. package/dist/runtime-payload-inventory.json +122328 -0
  241. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  242. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  243. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  244. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  245. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  247. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  248. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  249. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +5 -0
  250. package/dist/{src/foundation/ui-components → ui/components}/index.js +5 -0
  251. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  252. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  253. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  254. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  255. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  256. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  257. package/dist/ui/components/progress-status.d.ts +2 -0
  258. package/dist/ui/components/progress-status.js +4 -0
  259. package/dist/ui/components/prompt-row.d.ts +14 -0
  260. package/dist/ui/components/prompt-row.js +20 -0
  261. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  262. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  263. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  264. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  265. package/dist/ui/components/spans.d.ts +25 -0
  266. package/dist/ui/components/spans.js +257 -0
  267. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  268. package/dist/ui/components/submitted-prompt.js +50 -0
  269. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  270. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  271. package/dist/ui/components/text-selection.d.ts +62 -0
  272. package/dist/ui/components/text-selection.js +208 -0
  273. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  274. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  275. package/dist/ui/components/transcript-viewport.d.ts +152 -0
  276. package/dist/ui/components/transcript-viewport.js +631 -0
  277. package/dist/ui/components/visible-hyperlinks.d.ts +19 -0
  278. package/dist/ui/components/visible-hyperlinks.js +64 -0
  279. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  280. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  281. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  282. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  283. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  284. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  285. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  286. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  287. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  288. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  289. package/docs/architecture/boundaries.md +9 -9
  290. package/docs/architecture/code-documentation.md +77 -0
  291. package/docs/architecture/process-guardian-provenance.md +3 -1
  292. package/docs/architecture/project-structure.md +67 -30
  293. package/docs/architecture/resource-and-data-policy.md +1 -1
  294. package/docs/architecture/toolchain.md +10 -10
  295. package/docs/architecture/ui-reference-provenance.md +36 -5
  296. package/docs/ci-release-runbook.md +186 -79
  297. package/docs/features/launch-profiles.md +24 -17
  298. package/docs/manual-ghost-link-baseline.md +89 -0
  299. package/docs/manual-launch-instance-acceptance.md +12 -35
  300. package/docs/manual-owned-ui-checkpoint.md +78 -0
  301. package/docs/manual-pi-boundary-candidate.md +4 -5
  302. package/docs/manual-terminal-colour-check.md +4 -3
  303. package/docs/repository-governance-live-acceptance.md +77 -0
  304. package/package.json +37 -27
  305. package/dist/src/cli/capabilities.d.ts +0 -15
  306. package/dist/src/cli/dispatch.js +0 -177
  307. package/dist/src/cli/version-stats.js +0 -72
  308. package/dist/src/composition/index.d.ts +0 -48
  309. package/dist/src/composition/index.js +0 -258
  310. package/dist/src/features/launch/intent.d.ts +0 -7
  311. package/dist/src/features/launch/intent.js +0 -4
  312. package/dist/src/features/launch/profiles.d.ts +0 -12
  313. package/dist/src/features/launch/profiles.js +0 -26
  314. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  315. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  316. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  317. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  318. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  319. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  320. package/dist/src/foundation/release/cohort-state.js +0 -202
  321. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  322. package/dist/src/foundation/release/release-gc.js +0 -16
  323. package/dist/src/foundation/supervision/index.d.ts +0 -3
  324. package/dist/src/foundation/supervision/index.js +0 -3
  325. package/dist/src/foundation/supervision/main.d.ts +0 -1
  326. package/dist/src/foundation/supervision/main.js +0 -41
  327. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  328. package/dist/src/foundation/supervision/paths.js +0 -1
  329. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  330. package/dist/src/foundation/ui-components/spans.js +0 -59
  331. package/docs/manual-transparent-checkpoint.md +0 -53
  332. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  333. /package/dist/{src/cli → cli}/index.js +0 -0
  334. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  335. /package/dist/{src/cli → cli}/version.js +0 -0
  336. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  337. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  338. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  339. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  340. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  341. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  342. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  343. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  344. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  345. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  346. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  347. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  348. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  349. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  350. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  351. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  352. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  353. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  354. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  355. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  356. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  357. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  358. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  359. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  360. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  361. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  362. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  363. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  364. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  365. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  366. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  367. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  368. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  369. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  370. /package/dist/{src/features → features}/workspace/index.js +0 -0
  371. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  372. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  373. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  374. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  375. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  376. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  377. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  378. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  379. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  380. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  381. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  382. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  383. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  384. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  385. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  386. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  387. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  388. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  389. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  390. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  391. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  392. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  393. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  394. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  395. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  396. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  397. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  398. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  399. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  400. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  401. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  402. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  403. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  404. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  428. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  429. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  430. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  431. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  432. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  433. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  434. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  435. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  436. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  437. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  438. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  439. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  440. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  441. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  442. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  443. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  444. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  445. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  446. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  447. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  448. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  449. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  450. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  451. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  452. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  453. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  454. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  455. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  456. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  457. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  458. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  459. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  460. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  461. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  462. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  463. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  464. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  465. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  466. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  467. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  468. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  469. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  470. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  471. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  472. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  473. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  474. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  475. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  476. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  477. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  478. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  479. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  480. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  481. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  482. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  483. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  484. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  485. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -2,10 +2,11 @@ import { DatabaseSync } from "node:sqlite";
2
2
  import { mkdirSync } from "node:fs";
3
3
  import { dirname } from "node:path";
4
4
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
- import { assertManagedAgentDescriptor, assertRecoveryAuthority, assertTerminalSessionLaunch, assertTerminalTopologySnapshot, } from "../workspace-contracts/index.js";
5
+ import { assertManagedAgentDescriptor, assertRecoveryAuthority, assertTerminalSessionLaunch, assertTerminalTopologySnapshot, } from "../../contracts/workspace/index.js";
6
6
  import { assertLaunchInstance, assertLaunchInstanceOutcome, assertNativeProcessIdentity, assertProcessContainmentIdentity, } from "../lifecycle/index.js";
7
7
  export const DEFAULT_WORKSPACE_ID = "workspace-default";
8
8
  const INITIAL_WORKSPACE_ID = DEFAULT_WORKSPACE_ID;
9
+ /** Owns WAL-backed control persistence and reconciles prior-boot records before current use. */
9
10
  export class ControlStore {
10
11
  bootNonce;
11
12
  database;
@@ -30,8 +31,8 @@ export class ControlStore {
30
31
  migrate() {
31
32
  const versionRow = this.database.prepare("PRAGMA user_version").get();
32
33
  const version = versionRow.user_version;
33
- if (version > 5)
34
- throw new Error(`control database version ${version} is newer than supported version 5`);
34
+ if (version > 6)
35
+ throw new Error(`control database version ${version} is newer than supported version 6`);
35
36
  if (version !== 0)
36
37
  this.#assertCurrentControlSchema();
37
38
  if (version === 0) {
@@ -187,7 +188,7 @@ export class ControlStore {
187
188
  CREATE TABLE launch_instances (
188
189
  id TEXT PRIMARY KEY,
189
190
  owner_client_id TEXT NOT NULL,
190
- profile_id TEXT NOT NULL CHECK (profile_id IN ('a1', 'pi', 'sandbox')),
191
+ profile_id TEXT NOT NULL CHECK (profile_id IN ('a1', 'pi')),
191
192
  state TEXT NOT NULL CHECK (state IN ('requested', 'active', 'stopping', 'completed', 'interrupted')),
192
193
  shutdown_policy TEXT NOT NULL CHECK (shutdown_policy = 'terminate-tree-on-close'),
193
194
  guardian_identity_json TEXT NOT NULL CHECK (json_valid(guardian_identity_json)),
@@ -208,6 +209,40 @@ export class ControlStore {
208
209
  CREATE INDEX idx_launch_instances_boot ON launch_instances(owner_boot_nonce, state);
209
210
  PRAGMA user_version = 5;
210
211
  COMMIT;
212
+ `);
213
+ }
214
+ if (version <= 5) {
215
+ this.database.exec(`
216
+ BEGIN IMMEDIATE;
217
+ ALTER TABLE launch_instances RENAME TO launch_instances_v5;
218
+ DROP INDEX idx_launch_instances_owner;
219
+ DROP INDEX idx_launch_instances_boot;
220
+ CREATE TABLE launch_instances (
221
+ id TEXT PRIMARY KEY,
222
+ owner_client_id TEXT NOT NULL,
223
+ profile_id TEXT NOT NULL CHECK (profile_id IN ('a1', 'pi')),
224
+ state TEXT NOT NULL CHECK (state IN ('requested', 'active', 'stopping', 'completed', 'interrupted')),
225
+ shutdown_policy TEXT NOT NULL CHECK (shutdown_policy = 'terminate-tree-on-close'),
226
+ guardian_identity_json TEXT NOT NULL CHECK (json_valid(guardian_identity_json)),
227
+ root_identity_json TEXT CHECK (root_identity_json IS NULL OR json_valid(root_identity_json)),
228
+ containment_identity_json TEXT CHECK (containment_identity_json IS NULL OR json_valid(containment_identity_json)),
229
+ created_at TEXT NOT NULL,
230
+ activated_at TEXT,
231
+ stopping_at TEXT,
232
+ completed_at TEXT,
233
+ outcome_json TEXT CHECK (outcome_json IS NULL OR json_valid(outcome_json)),
234
+ owner_boot_nonce TEXT NOT NULL,
235
+ CHECK ((state = 'requested' AND root_identity_json IS NULL AND containment_identity_json IS NULL AND activated_at IS NULL AND stopping_at IS NULL AND completed_at IS NULL AND outcome_json IS NULL)
236
+ OR (state = 'active' AND root_identity_json IS NOT NULL AND containment_identity_json IS NOT NULL AND activated_at IS NOT NULL AND stopping_at IS NULL AND completed_at IS NULL AND outcome_json IS NULL)
237
+ OR (state = 'stopping' AND root_identity_json IS NOT NULL AND containment_identity_json IS NOT NULL AND activated_at IS NOT NULL AND stopping_at IS NOT NULL AND completed_at IS NULL AND outcome_json IS NULL)
238
+ OR (state IN ('completed', 'interrupted') AND completed_at IS NOT NULL AND outcome_json IS NOT NULL))
239
+ );
240
+ INSERT INTO launch_instances SELECT * FROM launch_instances_v5 WHERE profile_id IN ('a1', 'pi');
241
+ DROP TABLE launch_instances_v5;
242
+ CREATE INDEX idx_launch_instances_owner ON launch_instances(owner_client_id, state);
243
+ CREATE INDEX idx_launch_instances_boot ON launch_instances(owner_boot_nonce, state);
244
+ PRAGMA user_version = 6;
245
+ COMMIT;
211
246
  `);
212
247
  }
213
248
  if (version === 0) {
@@ -1,4 +1,4 @@
1
- import { type StructuredCapabilityContract } from "../workspace-contracts/index.js";
1
+ import { type StructuredCapabilityContract } from "../../contracts/workspace/index.js";
2
2
  export type StructuredBackpressureResource = "events" | "commands" | "snapshots" | "attachments" | "reconnect-replay";
3
3
  export type StructuredBackpressureAction = "none" | "reject-payload" | "pause-adapter" | "reject-request" | "disconnect-adapter";
4
4
  export interface StructuredResourceLease {
@@ -33,6 +33,7 @@ export type StructuredBackpressureReleaseResult = {
33
33
  readonly code: "unknown-lease" | "invalid-request";
34
34
  readonly diagnostic: string;
35
35
  };
36
+ /** Issues bounded resource leases and selects the negotiated backpressure action on exhaustion. */
36
37
  export declare class StructuredBackpressureController {
37
38
  #private;
38
39
  readonly adapterId: string;
@@ -1,4 +1,5 @@
1
- import { assertStructuredCapability, } from "../workspace-contracts/index.js";
1
+ import { assertStructuredCapability, } from "../../contracts/workspace/index.js";
2
+ /** Issues bounded resource leases and selects the negotiated backpressure action on exhaustion. */
2
3
  export class StructuredBackpressureController {
3
4
  adapterId;
4
5
  #budgets;
@@ -1,4 +1,4 @@
1
- import { type StructuredCapabilityContract, type WorkspaceCommand } from "../workspace-contracts/index.js";
1
+ import { type StructuredCapabilityContract, type WorkspaceCommand } from "../../contracts/workspace/index.js";
2
2
  export type StructuredCommandRequest = Extract<WorkspaceCommand, {
3
3
  readonly type: "structured-command";
4
4
  }>;
@@ -38,6 +38,7 @@ export type StructuredCommandOutcomeResult = {
38
38
  readonly code: string;
39
39
  readonly diagnostic: string;
40
40
  };
41
+ /** Tracks structured commands by correlation identity through one idempotent terminal outcome. */
41
42
  export declare class StructuredCommandTracker {
42
43
  #private;
43
44
  readonly agentId: string;
@@ -1,4 +1,5 @@
1
- import { assertStructuredCapability, assertWorkspaceCommand, } from "../workspace-contracts/index.js";
1
+ import { assertStructuredCapability, assertWorkspaceCommand, } from "../../contracts/workspace/index.js";
2
+ /** Tracks structured commands by correlation identity through one idempotent terminal outcome. */
2
3
  export class StructuredCommandTracker {
3
4
  agentId;
4
5
  #capability;
@@ -1,4 +1,4 @@
1
- import { type AdapterId, type StructuredCapabilityContract, type StructuredFlowLimits } from "../workspace-contracts/index.js";
1
+ import { type AdapterId, type StructuredCapabilityContract, type StructuredFlowLimits } from "../../contracts/workspace/index.js";
2
2
  export declare const STRUCTURED_ADAPTER_ENVELOPE: string;
3
3
  export declare const STRUCTURED_ADAPTER_ENVELOPE_REVISION: 1;
4
4
  export declare const REQUIRED_STRUCTURED_FEATURES: readonly ["identity.adapter.v1", "commands.correlated.v1", "events.typed.v1", "flow-control.limits.v1"];
@@ -1,4 +1,4 @@
1
- import { WORKSPACE_CONTRACT_VERSION, assertStructuredCapability, } from "../workspace-contracts/index.js";
1
+ import { WORKSPACE_CONTRACT_VERSION, assertStructuredCapability, } from "../../contracts/workspace/index.js";
2
2
  import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
3
3
  export const STRUCTURED_ADAPTER_ENVELOPE = PRODUCT_IDENTITY.protocol.structuredAgentSchema;
4
4
  export const STRUCTURED_ADAPTER_ENVELOPE_REVISION = 1;
@@ -1,4 +1,4 @@
1
- import { type AgentRecoveryAuthority, type StructuredAgentSnapshot, type StructuredCapabilityContract, type StructuredRecoveryAuthority } from "../workspace-contracts/index.js";
1
+ import { type AgentRecoveryAuthority, type StructuredAgentSnapshot, type StructuredCapabilityContract, type StructuredRecoveryAuthority } from "../../contracts/workspace/index.js";
2
2
  import { StructuredEventReducer, type StructuredRuntimeView } from "./state.js";
3
3
  export interface StructuredResumeProof {
4
4
  readonly protocolVersion: number;
@@ -30,6 +30,7 @@ export type StructuredReconnectionResult = {
30
30
  readonly code: string;
31
31
  readonly diagnostic: string;
32
32
  };
33
+ /** Accepts a recovery boundary once after validating negotiated identity, proof, and protocol continuity. */
33
34
  export declare class StructuredReconnectionManager {
34
35
  #private;
35
36
  constructor(capability: StructuredCapabilityContract);
@@ -1,5 +1,6 @@
1
- import { WORKSPACE_CONTRACT_VERSION, assertRecoveryAuthority, assertStructuredAgentSnapshot, assertStructuredCapability, } from "../workspace-contracts/index.js";
1
+ import { WORKSPACE_CONTRACT_VERSION, assertRecoveryAuthority, assertStructuredAgentSnapshot, assertStructuredCapability, } from "../../contracts/workspace/index.js";
2
2
  import { StructuredEventReducer } from "./state.js";
3
+ /** Accepts a recovery boundary once after validating negotiated identity, proof, and protocol continuity. */
3
4
  export class StructuredReconnectionManager {
4
5
  #capability;
5
6
  #acceptedBoundaries = new Set();
@@ -1,4 +1,4 @@
1
- import { type StructuredAgentSnapshot, type StructuredCapabilityContract, type WorkspaceEvent } from "../workspace-contracts/index.js";
1
+ import { type StructuredAgentSnapshot, type StructuredCapabilityContract, type WorkspaceEvent } from "../../contracts/workspace/index.js";
2
2
  export type StructuredAgentEvent = Extract<WorkspaceEvent, {
3
3
  readonly type: "structured-event";
4
4
  }>;
@@ -44,6 +44,7 @@ export type StructuredSnapshotApplyResult = {
44
44
  readonly code: string;
45
45
  readonly diagnostic: string;
46
46
  };
47
+ /** Applies ordered structured events and snapshots while exposing gaps as explicit resynchronization. */
47
48
  export declare class StructuredEventReducer {
48
49
  #private;
49
50
  readonly agentId: string;
@@ -1,4 +1,5 @@
1
- import { assertStructuredAgentSnapshot, assertStructuredCapability, assertWorkspaceEvent, } from "../workspace-contracts/index.js";
1
+ import { assertStructuredAgentSnapshot, assertStructuredCapability, assertWorkspaceEvent, } from "../../contracts/workspace/index.js";
2
+ /** Applies ordered structured events and snapshots while exposing gaps as explicit resynchronization. */
2
3
  export class StructuredEventReducer {
3
4
  agentId;
4
5
  #capability;
@@ -0,0 +1,3 @@
1
+ export * from "./main.js";
2
+ export * from "./server.js";
3
+ export { resolveCohortEndpoint, resolveProductPaths, type CohortEndpointPaths, type ProductPaths } from "../lifecycle/index.js";
@@ -0,0 +1,3 @@
1
+ export * from "./main.js";
2
+ export * from "./server.js";
3
+ export { resolveCohortEndpoint, resolveProductPaths } from "../lifecycle/index.js";
@@ -0,0 +1 @@
1
+ export declare function runSupervisor(arguments_?: readonly string[]): Promise<void>;
@@ -0,0 +1,80 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { appendFileSync, mkdirSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { assertImmutableExecutionRoot, CohortStateStore, readCertifiedReleaseManifest, recordParentCertifiedRelease } from "../release/index.js";
5
+ import { publishSupervisorStartupResult, supervisorStartupFailure, supervisorStartupReady, supervisorStartupResultPath } from "../lifecycle/index.js";
6
+ import { ControlStore } from "../storage/index.js";
7
+ import { resolveCohortEndpoint, resolveProductPaths } from "./paths.js";
8
+ import { SupervisorServer } from "./server.js";
9
+ import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
10
+ export async function runSupervisor(arguments_ = []) {
11
+ const productPaths = resolveProductPaths();
12
+ mkdirSync(productPaths.runtimeDir, { recursive: true, mode: 0o700 });
13
+ mkdirSync(productPaths.endpointsDir, { recursive: true, mode: 0o700 });
14
+ let paths = productPaths;
15
+ const log = (message) => appendFileSync(paths.supervisorLogPath, `${new Date().toISOString()} ${message}\n`);
16
+ const releaseRoot = process.env[PRODUCT_IDENTITY.environment.releaseRoot];
17
+ const releaseId = process.env[PRODUCT_IDENTITY.environment.releaseId];
18
+ const contentDigest = process.env[PRODUCT_IDENTITY.environment.releaseDigest];
19
+ const attemptId = startupAttempt(arguments_);
20
+ const resultPath = attemptId ? supervisorStartupResultPath(productPaths.runtimeDir, attemptId) : null;
21
+ let stage = "release-environment";
22
+ let server = null;
23
+ try {
24
+ if (!releaseRoot || !releaseId || !contentDigest)
25
+ throw new Error(PRODUCT_TEXT.diagnostic("supervisor must be launched from a verified immutable release"));
26
+ stage = "release-certification";
27
+ const release = await readCertifiedReleaseManifest({ releaseRoot, releaseId, contentDigest }, resolve(paths.dataDir, "releases"), { allowLegacyParentCertification: true });
28
+ // Compatibility: an older updater may have written release evidence before restart seals
29
+ // existed, even when its layer certification has already been upgraded by a retry.
30
+ await recordParentCertifiedRelease(release, paths.dataDir);
31
+ stage = "immutable-root";
32
+ await assertImmutableExecutionRoot(release, paths.dataDir);
33
+ // Protocol: one endpoint per cohort: a superseded cohort keeps serving what it already has while the
34
+ // installed release listens on its own address.
35
+ paths = { ...productPaths, ...resolveCohortEndpoint(productPaths, release.releaseId) };
36
+ stage = "storage";
37
+ const bootNonce = randomUUID();
38
+ const store = new ControlStore(paths.databasePath, bootNonce);
39
+ const cohortState = new CohortStateStore(paths.dataDir);
40
+ server = new SupervisorServer(store, paths, release, bootNonce, undefined, undefined, undefined, async () => (await cohortState.read()).references.active);
41
+ stage = "endpoint-listen";
42
+ await server.listen();
43
+ if (resultPath && attemptId)
44
+ await publishSupervisorStartupResult(resultPath, supervisorStartupReady(attemptId, release.releaseId));
45
+ log(`supervisor ${server.id} listening at ${paths.endpoint} (pid ${process.pid})`);
46
+ let closing = false;
47
+ const close = async (signal) => {
48
+ if (closing)
49
+ return;
50
+ closing = true;
51
+ log(`received ${signal}; stopping supervised process tree`);
52
+ await server?.close(true);
53
+ process.exitCode = 0;
54
+ };
55
+ process.on("SIGINT", () => void close("SIGINT"));
56
+ process.on("SIGTERM", () => void close("SIGTERM"));
57
+ process.on("uncaughtException", error => {
58
+ log(`uncaught exception: ${error.stack ?? error.message}`);
59
+ process.exitCode = 1;
60
+ });
61
+ process.on("unhandledRejection", error => log(`unhandled rejection: ${String(error)}`));
62
+ }
63
+ catch (error) {
64
+ await server?.close(true).catch(() => undefined);
65
+ const message = error instanceof Error ? error.stack ?? error.message : String(error);
66
+ log(`startup failure at ${stage}: ${message}`);
67
+ if (resultPath && attemptId && releaseId) {
68
+ await publishSupervisorStartupResult(resultPath, supervisorStartupFailure(error, attemptId, releaseId, stage)).catch(() => undefined);
69
+ }
70
+ throw error;
71
+ }
72
+ }
73
+ function startupAttempt(arguments_) {
74
+ if (arguments_.length === 0)
75
+ return null;
76
+ if (arguments_.length !== 2 || arguments_[0] !== "--startup-attempt" || !arguments_[1]) {
77
+ throw new Error(PRODUCT_TEXT.diagnostic("supervisor startup arguments are invalid"));
78
+ }
79
+ return arguments_[1];
80
+ }
@@ -0,0 +1 @@
1
+ export { resolveCohortEndpoint, resolveProductPaths, type CohortEndpointPaths, type ProductPaths, } from "../lifecycle/index.js";
@@ -0,0 +1 @@
1
+ export { resolveCohortEndpoint, resolveProductPaths, } from "../lifecycle/index.js";
@@ -2,6 +2,7 @@ import { type SupervisorSnapshot } from "../lifecycle/index.js";
2
2
  import { type MaterializedRelease } from "../release/index.js";
3
3
  import { ControlStore } from "../storage/index.js";
4
4
  import { type ProductPaths } from "./paths.js";
5
+ /** Owns one release-cohort endpoint and the authenticated launch instances registered through it. */
5
6
  export declare class SupervisorServer {
6
7
  #private;
7
8
  readonly store: ControlStore;
@@ -9,14 +10,31 @@ export declare class SupervisorServer {
9
10
  readonly terminateProcess: (code: number) => void;
10
11
  readonly reconciliationDeadlineMs: number;
11
12
  readonly shutdownDeadlineMs: number;
13
+ /**
14
+ * Which release new sessions start on. A cohort that is no longer that release keeps
15
+ * serving the instances it already has, takes no new ones, and exits when its last one
16
+ * leaves. Absent, this supervisor never considers itself superseded.
17
+ */
18
+ readonly readActiveReleaseId: (() => Promise<string | null>) | null;
19
+ readonly supersededPollMs: number;
12
20
  readonly id: `${string}-${string}-${string}-${string}-${string}`;
13
21
  readonly bootNonce: string;
14
22
  readonly pidStartIdentity: string;
15
23
  readonly startedAt: string;
16
24
  readonly paths: ProductPaths;
17
- constructor(store: ControlStore, paths: ProductPaths | undefined, release: MaterializedRelease, bootNonce?: string, terminateProcess?: (code: number) => void, reconciliationDeadlineMs?: number, shutdownDeadlineMs?: number);
25
+ constructor(store: ControlStore, paths: ProductPaths | undefined, release: MaterializedRelease, bootNonce?: string, terminateProcess?: (code: number) => void, reconciliationDeadlineMs?: number, shutdownDeadlineMs?: number,
26
+ /**
27
+ * Which release new sessions start on. A cohort that is no longer that release keeps
28
+ * serving the instances it already has, takes no new ones, and exits when its last one
29
+ * leaves. Absent, this supervisor never considers itself superseded.
30
+ */
31
+ readActiveReleaseId?: (() => Promise<string | null>) | null, supersededPollMs?: number);
18
32
  snapshot(): SupervisorSnapshot;
19
33
  listen(): Promise<void>;
34
+ /** Whether new sessions start on some other release. */
35
+ get superseded(): boolean;
36
+ /** Leaves, taking this cohort's own endpoint artifacts with it. */
37
+ retire(): Promise<void>;
20
38
  close(stopAgents?: boolean): Promise<void>;
21
39
  closeForReleaseReplacement(stopAgents: boolean): Promise<void>;
22
40
  }
@@ -1,19 +1,23 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { mkdir, rename, rm, writeFile } from "node:fs/promises";
2
+ import { chmod, lstat, mkdir, rename, rm, writeFile } from "node:fs/promises";
3
3
  import { createConnection, createServer } from "node:net";
4
4
  import { platform } from "node:os";
5
+ import { dirname } from "node:path";
5
6
  import { assertLaunchInstanceOutcome, assertNativeProcessIdentity, assertProcessContainmentIdentity, } from "../lifecycle/index.js";
6
7
  import { encodeFrame, isCommandMessage, isControlHello, LineFrameDecoder, localControlHello, MAX_CONTROL_FRAME_BYTES, negotiateControlFeatures } from "../protocol/index.js";
7
8
  import { processIsAlive } from "../release/index.js";
8
9
  import { ControlStore } from "../storage/index.js";
9
10
  import { resolveProductPaths } from "./paths.js";
10
11
  import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
12
+ /** Owns one release-cohort endpoint and the authenticated launch instances registered through it. */
11
13
  export class SupervisorServer {
12
14
  store;
13
15
  release;
14
16
  terminateProcess;
15
17
  reconciliationDeadlineMs;
16
18
  shutdownDeadlineMs;
19
+ readActiveReleaseId;
20
+ supersededPollMs;
17
21
  id = randomUUID();
18
22
  bootNonce;
19
23
  pidStartIdentity = `${process.pid}:${Math.floor(Date.now() - process.uptime() * 1_000)}`;
@@ -31,12 +35,22 @@ export class SupervisorServer {
31
35
  #results = new Map();
32
36
  #metadataWrites = Promise.resolve();
33
37
  #closing = false;
34
- constructor(store, paths = resolveProductPaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code), reconciliationDeadlineMs = 3_000, shutdownDeadlineMs = 1_500) {
38
+ #superseded = false;
39
+ #supersededPoll = null;
40
+ constructor(store, paths = resolveProductPaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code), reconciliationDeadlineMs = 3_000, shutdownDeadlineMs = 1_500,
41
+ /**
42
+ * Which release new sessions start on. A cohort that is no longer that release keeps
43
+ * serving the instances it already has, takes no new ones, and exits when its last one
44
+ * leaves. Absent, this supervisor never considers itself superseded.
45
+ */
46
+ readActiveReleaseId = null, supersededPollMs = 1_000) {
35
47
  this.store = store;
36
48
  this.release = release;
37
49
  this.terminateProcess = terminateProcess;
38
50
  this.reconciliationDeadlineMs = reconciliationDeadlineMs;
39
51
  this.shutdownDeadlineMs = shutdownDeadlineMs;
52
+ this.readActiveReleaseId = readActiveReleaseId;
53
+ this.supersededPollMs = supersededPollMs;
40
54
  this.bootNonce = bootNonce;
41
55
  this.paths = paths;
42
56
  for (const instance of store.loadActiveLaunchInstances())
@@ -56,7 +70,10 @@ export class SupervisorServer {
56
70
  if (this.#server)
57
71
  throw new Error("supervisor is already listening");
58
72
  await mkdir(this.paths.runtimeDir, { recursive: true, mode: 0o700 });
73
+ await mkdir(this.paths.endpointsDir, { recursive: true, mode: 0o700 });
59
74
  if (platform() !== "win32") {
75
+ if (this.paths.endpointDirectory)
76
+ await ensureManagedEndpointDirectory(dirname(this.paths.endpoint));
60
77
  if (await endpointIsLive(this.paths.endpoint))
61
78
  throw new Error(PRODUCT_TEXT.diagnostic(`supervisor already owns ${this.paths.endpoint}`));
62
79
  await rm(this.paths.endpoint, { force: true });
@@ -71,12 +88,41 @@ export class SupervisorServer {
71
88
  });
72
89
  });
73
90
  await this.#writeEndpointMetadata();
91
+ if (this.readActiveReleaseId) {
92
+ const poll = setInterval(() => void this.#refreshCohortRole(), this.supersededPollMs);
93
+ poll.unref();
94
+ this.#supersededPoll = poll;
95
+ }
96
+ }
97
+ // Invariant: superseding a cohort never interrupts its held instances; it retires only when empty.
98
+ async #refreshCohortRole() {
99
+ if (this.#closing || !this.readActiveReleaseId)
100
+ return;
101
+ const active = await this.readActiveReleaseId().catch(() => null);
102
+ if (active === null)
103
+ return;
104
+ this.#superseded = active !== this.release.releaseId;
105
+ if (this.#superseded && this.#instances.size === 0)
106
+ await this.retire();
107
+ }
108
+ /** Whether new sessions start on some other release. */
109
+ get superseded() {
110
+ return this.#superseded;
111
+ }
112
+ /** Leaves, taking this cohort's own endpoint artifacts with it. */
113
+ async retire() {
114
+ if (this.#closing)
115
+ return;
116
+ await this.close(false);
74
117
  }
75
118
  async close(stopAgents = false) {
76
119
  if (stopAgents && !await this.#drainInstances("update", this.shutdownDeadlineMs)) {
77
120
  throw new Error("active launch instances did not release ownership within the shutdown deadline");
78
121
  }
79
122
  this.#closing = true;
123
+ if (this.#supersededPoll)
124
+ clearInterval(this.#supersededPoll);
125
+ this.#supersededPoll = null;
80
126
  for (const client of this.#clients)
81
127
  client.destroy();
82
128
  if (this.#server)
@@ -197,6 +243,9 @@ export class SupervisorServer {
197
243
  #createLaunchInstance(command, socket, clientId) {
198
244
  assertNativeProcessIdentity(command.guardianIdentity);
199
245
  const existing = this.store.loadLaunchInstance(command.instanceId);
246
+ if (this.#superseded && !existing) {
247
+ throw new Error(PRODUCT_TEXT.diagnostic(`release ${this.release.releaseId} is no longer the release new sessions start on`));
248
+ }
200
249
  if (existing) {
201
250
  if (existing.ownerClientId !== clientId
202
251
  || existing.profileId !== command.profileId
@@ -279,6 +328,9 @@ export class SupervisorServer {
279
328
  this.#uncertainInstances.delete(stored.id);
280
329
  this.#unbindOwner(stored.id, socket);
281
330
  this.#mutated();
331
+ // Invariant: the last session on a superseded cohort has left; there is nothing here to keep.
332
+ if (this.#superseded && this.#instances.size === 0)
333
+ void this.retire();
282
334
  }
283
335
  #ownedInstance(instanceId, socket, clientId) {
284
336
  const instance = this.#instances.get(instanceId) ?? this.store.loadLaunchInstance(instanceId);
@@ -370,7 +422,7 @@ export class SupervisorServer {
370
422
  const deadline = Date.now() + timeoutMs;
371
423
  while (Date.now() < deadline) {
372
424
  if (this.#instances.size === 0) {
373
- // Let the terminal command result flush before closing owner sockets.
425
+ // Concurrency: allow the terminal command result to flush before closing owner sockets.
374
426
  await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
375
427
  return this.#instances.size === 0;
376
428
  }
@@ -440,6 +492,16 @@ function sameContainmentIdentity(left, right) {
440
492
  function isMessageType(value, type) {
441
493
  return typeof value === "object" && value !== null && "type" in value && value.type === type;
442
494
  }
495
+ async function ensureManagedEndpointDirectory(path) {
496
+ await mkdir(path, { recursive: true, mode: 0o700 });
497
+ const metadata = await lstat(path);
498
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
499
+ throw new Error(`managed endpoint path is not a directory: ${path}`);
500
+ const currentUser = process.getuid?.();
501
+ if (currentUser !== undefined && metadata.uid !== currentUser)
502
+ throw new Error(`managed endpoint directory has another owner: ${path}`);
503
+ await chmod(path, 0o700);
504
+ }
443
505
  async function endpointIsLive(endpoint) {
444
506
  return await new Promise(resolve => {
445
507
  const socket = createConnection(endpoint);
@@ -1,4 +1,4 @@
1
- import type { OwnedUiTranscriptBlock } from "../owned-ui-contracts/index.js";
1
+ import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
2
2
  export declare function adaptPiUserMessage(block: OwnedUiTranscriptBlock, width: number): readonly string[];
3
3
  export declare function adaptPiAssistantMessage(block: OwnedUiTranscriptBlock, width: number): readonly string[];
4
4
  export declare function adaptPiToolExecution(block: OwnedUiTranscriptBlock, width: number, cwd: string): readonly string[];
@@ -10,6 +10,7 @@ export interface PiComponentConformanceReport {
10
10
  readonly componentResults: readonly PiComponentConformanceResult[];
11
11
  readonly componentFamilies: readonly string[];
12
12
  }
13
+ /** Identifies the Pi presentation-conformance stage that failed against the pinned component surface. */
13
14
  export declare class PiComponentConformanceError extends Error {
14
15
  readonly stage: "theme" | "components";
15
16
  constructor(stage: "theme" | "components", cause: unknown);
@@ -2,9 +2,10 @@ import { mkdtemp, rm } from "node:fs/promises";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { AssistantMessageComponent, ExtensionSelectorComponent, initTheme, LoginDialogComponent, ModelSelectorComponent, SettingsSelectorComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, UserMessageComponent, UserMessageSelectorComponent, VERSION, } from "@earendil-works/pi-coding-agent";
5
- import { OWNED_UI_CONTRACT_VERSION } from "../owned-ui-contracts/index.js";
5
+ import { OWNED_UI_CONTRACT_VERSION } from "../../../contracts/owned-ui/index.js";
6
6
  import { createTuiFacade, validatedAssistantMessage } from "./shell-components.js";
7
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
7
+ import { PRODUCT_IDENTITY } from "../../../product-identity.js";
8
+ /** Identifies the Pi presentation-conformance stage that failed against the pinned component surface. */
8
9
  export class PiComponentConformanceError extends Error {
9
10
  stage;
10
11
  constructor(stage, cause) {
@@ -3,7 +3,7 @@ export * from "./conformance.js";
3
3
  export * from "./shell-components.js";
4
4
  export * from "./theme.js";
5
5
  export * from "./upstream/theme/theme-controller.js";
6
- export { applyConfiguredPiTheme, getAvailablePiThemes } from "./upstream/theme/theme.js";
6
+ export { applyConfiguredPiTheme, getAvailablePiThemes, onPiThemeChange } from "./upstream/theme/theme.js";
7
7
  export * from "./upstream/components/countdown-timer.js";
8
8
  export * from "./upstream/components/extension-editor.js";
9
9
  export * from "./upstream/components/session-selector.js";
@@ -3,7 +3,7 @@ export * from "./conformance.js";
3
3
  export * from "./shell-components.js";
4
4
  export * from "./theme.js";
5
5
  export * from "./upstream/theme/theme-controller.js";
6
- export { applyConfiguredPiTheme, getAvailablePiThemes } from "./upstream/theme/theme.js";
6
+ export { applyConfiguredPiTheme, getAvailablePiThemes, onPiThemeChange } from "./upstream/theme/theme.js";
7
7
  export * from "./upstream/components/countdown-timer.js";
8
8
  export * from "./upstream/components/extension-editor.js";
9
9
  export * from "./upstream/components/session-selector.js";
@@ -0,0 +1,55 @@
1
+ import { type Editor } from "#pi-tui";
2
+ import type { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
3
+ import type { PiShellClipboardContent, PiShellEditorTextRange } from "./shell-shared-facade.js";
4
+ /**
5
+ * Middleware boundary around Pi's editor. Interceptors may claim an input or
6
+ * delegate to the next interceptor/vanilla editor, and may decorate the rows
7
+ * vanilla Pi renders. This keeps owned UX additions out of the synchronized
8
+ * Pi editor port and gives future interactions one registration point.
9
+ */
10
+ export interface OwnedEditorUxInterceptor {
11
+ handleInput(data: string, next: () => void): void;
12
+ render(width: number, next: () => string[]): string[];
13
+ reset(): void;
14
+ handlePointer?(event: OwnedEditorPointerEvent): boolean;
15
+ hasSelection?(): boolean;
16
+ ownsPointer?(): boolean;
17
+ pasteClipboard?(): boolean;
18
+ }
19
+ export interface OwnedEditorPointerEvent {
20
+ readonly kind: "press" | "motion" | "release";
21
+ readonly button: number;
22
+ readonly column: number;
23
+ /** One-based row relative to the top of the editor component. */
24
+ readonly row: number;
25
+ }
26
+ export declare class OwnedEditorUxInterception {
27
+ readonly interceptors: readonly OwnedEditorUxInterceptor[];
28
+ readonly fallback: {
29
+ handleInput(data: string): void;
30
+ render(width: number): string[];
31
+ };
32
+ constructor(interceptors: readonly OwnedEditorUxInterceptor[], fallback: {
33
+ handleInput(data: string): void;
34
+ render(width: number): string[];
35
+ });
36
+ handleInput(data: string): void;
37
+ render(width: number): string[];
38
+ reset(): void;
39
+ handlePointer(event: OwnedEditorPointerEvent): boolean;
40
+ hasSelection(): boolean;
41
+ ownsPointer(): boolean;
42
+ pasteClipboard(): boolean;
43
+ }
44
+ export interface PromptSelectionUxOptions {
45
+ readonly copyText: (text: string) => void;
46
+ readonly readClipboardContent: () => Promise<PiShellClipboardContent | null>;
47
+ readonly transformPastedContent: (content: PiShellClipboardContent) => string;
48
+ readonly atomicRanges: (line: string) => readonly PiShellEditorTextRange[];
49
+ readonly expandCopiedText: (text: string) => string;
50
+ readonly paintSelection: (line: string, from: number, to: number, atomic: boolean) => string;
51
+ readonly decorateRow: (row: string, width: number) => string;
52
+ readonly requestRender: () => void;
53
+ readonly getRows: () => number;
54
+ }
55
+ export declare function createPromptSelectionInterceptor(editor: Editor, keybindings: KeybindingsManager, options: PromptSelectionUxOptions): OwnedEditorUxInterceptor;