@timurproko/a1 0.1.0 → 0.1.1-dev.10

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 (602) hide show
  1. package/README.md +10 -43
  2. package/bin/{addone.js → cli.js} +2 -2
  3. package/bin/guardian.js +22 -0
  4. package/bin/ui.js +20 -0
  5. package/dist/native/darwin-arm64/manifest.json +20 -0
  6. package/dist/native/darwin-arm64/process-guardian +0 -0
  7. package/dist/native/linux-x64/manifest.json +20 -0
  8. package/dist/native/linux-x64/process-guardian +0 -0
  9. package/dist/native/win32-x64/manifest.json +20 -0
  10. package/dist/native/win32-x64/process-guardian.exe +0 -0
  11. package/dist/src/cli/dispatch.d.ts +4 -5
  12. package/dist/src/cli/dispatch.js +11 -11
  13. package/dist/src/cli/index.d.ts +0 -1
  14. package/dist/src/cli/index.js +0 -1
  15. package/dist/src/cli/version-stats.d.ts +0 -1
  16. package/dist/src/cli/version-stats.js +27 -23
  17. package/dist/src/cli/version.d.ts +1 -2
  18. package/dist/src/cli/version.js +4 -4
  19. package/dist/src/composition/index.d.ts +48 -0
  20. package/dist/src/composition/index.js +258 -0
  21. package/dist/src/features/launch/development-launch.d.ts +0 -1
  22. package/dist/src/features/launch/development-launch.js +12 -11
  23. package/dist/src/features/launch/index.d.ts +0 -1
  24. package/dist/src/features/launch/index.js +0 -1
  25. package/dist/src/features/launch/initialize-profile.d.ts +1 -2
  26. package/dist/src/features/launch/initialize-profile.js +24 -4
  27. package/dist/src/features/launch/intent.d.ts +0 -1
  28. package/dist/src/features/launch/intent.js +0 -1
  29. package/dist/src/features/launch/prepare-launch.d.ts +2 -3
  30. package/dist/src/features/launch/prepare-launch.js +3 -4
  31. package/dist/src/features/launch/profile-paths.d.ts +2 -3
  32. package/dist/src/features/launch/profile-paths.js +9 -8
  33. package/dist/src/features/launch/profiles.d.ts +3 -4
  34. package/dist/src/features/launch/profiles.js +7 -8
  35. package/dist/src/features/launch/runtime-selection.d.ts +13 -9
  36. package/dist/src/features/launch/runtime-selection.js +6 -7
  37. package/dist/src/features/owned-ui/customization.d.ts +5 -3
  38. package/dist/src/features/owned-ui/customization.js +2 -4
  39. package/dist/src/features/owned-ui/diagnostics.d.ts +0 -1
  40. package/dist/src/features/owned-ui/diagnostics.js +0 -1
  41. package/dist/src/features/owned-ui/index.d.ts +1 -2
  42. package/dist/src/features/owned-ui/index.js +1 -2
  43. package/dist/src/features/owned-ui/run.d.ts +9 -7
  44. package/dist/src/features/owned-ui/run.js +9 -15
  45. package/dist/src/features/owned-ui/settings-app.d.ts +22 -0
  46. package/dist/src/features/owned-ui/settings-app.js +633 -0
  47. package/dist/src/features/workspace/capabilities.d.ts +0 -1
  48. package/dist/src/features/workspace/capabilities.js +0 -1
  49. package/dist/src/features/workspace/index.d.ts +0 -1
  50. package/dist/src/features/workspace/index.js +0 -1
  51. package/dist/src/features/workspace/presentation.d.ts +1 -2
  52. package/dist/src/features/workspace/presentation.js +5 -4
  53. package/dist/src/features/workspace/reconciliation.d.ts +0 -1
  54. package/dist/src/features/workspace/reconciliation.js +0 -1
  55. package/dist/src/features/workspace/reducer.d.ts +0 -1
  56. package/dist/src/features/workspace/reducer.js +0 -1
  57. package/dist/src/features/workspace/router.d.ts +0 -1
  58. package/dist/src/features/workspace/router.js +0 -1
  59. package/dist/src/features/workspace/store.d.ts +0 -1
  60. package/dist/src/features/workspace/store.js +0 -1
  61. package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +95 -0
  62. package/dist/src/foundation/agent-engine-contracts/capability-ports.js +35 -0
  63. package/dist/src/foundation/agent-engine-contracts/domain-validation.d.ts +12 -0
  64. package/dist/src/foundation/agent-engine-contracts/domain-validation.js +89 -0
  65. package/dist/src/foundation/agent-engine-contracts/domain.d.ts +116 -0
  66. package/dist/src/foundation/agent-engine-contracts/domain.js +1 -0
  67. package/dist/src/foundation/agent-engine-contracts/index.d.ts +7 -0
  68. package/dist/src/foundation/agent-engine-contracts/index.js +7 -0
  69. package/dist/src/foundation/agent-engine-contracts/model.d.ts +78 -0
  70. package/dist/src/foundation/agent-engine-contracts/model.js +1 -0
  71. package/dist/src/foundation/agent-engine-contracts/ports.d.ts +18 -0
  72. package/dist/src/foundation/agent-engine-contracts/ports.js +1 -0
  73. package/dist/src/foundation/agent-engine-contracts/serialization.d.ts +7 -0
  74. package/dist/src/foundation/agent-engine-contracts/serialization.js +58 -0
  75. package/dist/src/foundation/agent-engine-contracts/validation.d.ts +5 -0
  76. package/dist/src/foundation/agent-engine-contracts/validation.js +128 -0
  77. package/dist/src/foundation/launch-guardian/index.d.ts +1 -0
  78. package/dist/src/foundation/launch-guardian/index.js +1 -0
  79. package/dist/src/foundation/launch-guardian/main.d.ts +31 -0
  80. package/dist/src/foundation/launch-guardian/main.js +165 -0
  81. package/dist/src/foundation/lifecycle/commands.d.ts +40 -0
  82. package/dist/src/foundation/lifecycle/commands.js +1 -0
  83. package/dist/src/foundation/lifecycle/index.d.ts +2 -1
  84. package/dist/src/foundation/lifecycle/index.js +2 -1
  85. package/dist/src/foundation/lifecycle/launch-instance.d.ts +46 -0
  86. package/dist/src/foundation/lifecycle/launch-instance.js +134 -0
  87. package/dist/src/foundation/lifecycle/model.d.ts +7 -44
  88. package/dist/src/foundation/lifecycle/model.js +3 -3
  89. package/dist/src/foundation/lifecycle/paths.d.ts +2 -3
  90. package/dist/src/foundation/lifecycle/paths.js +32 -16
  91. package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -1
  92. package/dist/src/foundation/native-host-protocol/codec.js +0 -1
  93. package/dist/src/foundation/native-host-protocol/evidence.d.ts +2 -3
  94. package/dist/src/foundation/native-host-protocol/evidence.js +4 -4
  95. package/dist/src/foundation/native-host-protocol/index.d.ts +0 -1
  96. package/dist/src/foundation/native-host-protocol/index.js +0 -1
  97. package/dist/src/foundation/native-host-protocol/messages.d.ts +1 -2
  98. package/dist/src/foundation/native-host-protocol/messages.js +2 -2
  99. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -1
  100. package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -1
  101. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -1
  102. package/dist/src/foundation/owned-ui-contracts/extension-ui.js +0 -1
  103. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -1
  104. package/dist/src/foundation/owned-ui-contracts/index.js +0 -1
  105. package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -1
  106. package/dist/src/foundation/owned-ui-contracts/model.js +0 -1
  107. package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -1
  108. package/dist/src/foundation/owned-ui-contracts/validation.js +0 -1
  109. package/dist/src/foundation/owned-ui-settings/declarations.d.ts +13 -0
  110. package/dist/src/foundation/owned-ui-settings/declarations.js +39 -0
  111. package/dist/src/foundation/owned-ui-settings/index.d.ts +6 -0
  112. package/dist/src/foundation/owned-ui-settings/index.js +6 -0
  113. package/dist/src/foundation/owned-ui-settings/migrations.d.ts +13 -0
  114. package/dist/src/foundation/owned-ui-settings/migrations.js +28 -0
  115. package/dist/src/foundation/owned-ui-settings/resolution.d.ts +45 -0
  116. package/dist/src/foundation/owned-ui-settings/resolution.js +147 -0
  117. package/dist/src/foundation/owned-ui-settings/sections.d.ts +70 -0
  118. package/dist/src/foundation/owned-ui-settings/sections.js +93 -0
  119. package/dist/src/foundation/owned-ui-settings/session.d.ts +44 -0
  120. package/dist/src/foundation/owned-ui-settings/session.js +145 -0
  121. package/dist/src/foundation/owned-ui-settings/store.d.ts +28 -0
  122. package/dist/src/foundation/owned-ui-settings/store.js +90 -0
  123. package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -1
  124. package/dist/src/foundation/pi-component-adapter/components.js +0 -1
  125. package/dist/src/foundation/pi-component-adapter/conformance.d.ts +1 -1
  126. package/dist/src/foundation/pi-component-adapter/conformance.js +10 -4
  127. package/dist/src/foundation/pi-component-adapter/index.d.ts +1 -1
  128. package/dist/src/foundation/pi-component-adapter/index.js +1 -1
  129. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +165 -0
  130. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +166 -0
  131. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -1
  132. package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -1
  133. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts +0 -1
  134. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +10 -13
  135. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -1
  136. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -1
  137. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -1
  138. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +5 -62
  139. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -1
  140. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -1
  141. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +9 -2
  142. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +10 -9
  143. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -1
  144. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -1
  145. package/dist/src/foundation/pi-component-adapter/theme.d.ts +0 -1
  146. package/dist/src/foundation/pi-component-adapter/theme.js +0 -1
  147. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -1
  148. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -1
  149. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -1
  150. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.js +0 -1
  151. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -1
  152. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -1
  153. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -1
  154. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -1
  155. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -1
  156. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +3 -27
  157. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -1
  158. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -1
  159. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -1
  160. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -1
  161. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -1
  162. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -1
  163. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.d.ts +0 -1
  164. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -1
  165. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +18 -0
  166. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +55 -0
  167. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -1
  168. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -1
  169. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +10 -0
  170. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +120 -0
  171. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.d.ts +0 -1
  172. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -1
  173. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -1
  174. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -1
  175. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +1 -2
  176. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +1 -2
  177. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -1
  178. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -1
  179. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -1
  180. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1
  181. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -1
  182. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -1
  183. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.d.ts +0 -1
  184. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -1
  185. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -1
  186. package/dist/src/foundation/pi-component-adapter/upstream/model-search.js +0 -1
  187. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -1
  188. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +1 -2
  189. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +8 -1
  190. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +30 -15
  191. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +19 -205
  192. package/dist/src/foundation/pi-engine-adapter/adapter.js +156 -181
  193. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +24 -1
  194. package/dist/src/foundation/pi-engine-adapter/conformance.js +60 -15
  195. package/dist/src/foundation/pi-engine-adapter/index.d.ts +6 -1
  196. package/dist/src/foundation/pi-engine-adapter/index.js +6 -1
  197. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +30 -0
  198. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +61 -0
  199. package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +374 -0
  200. package/dist/src/foundation/pi-engine-adapter/public-main-entry.d.ts +5 -0
  201. package/dist/src/foundation/pi-engine-adapter/public-main-entry.js +27 -0
  202. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +31 -0
  203. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +80 -0
  204. package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +18 -0
  205. package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +32 -0
  206. package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +43 -0
  207. package/dist/src/foundation/pi-engine-adapter/session-integration.js +97 -0
  208. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +55 -0
  209. package/dist/src/foundation/pi-engine-adapter/settings-integration.js +233 -0
  210. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +20 -0
  211. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +48 -0
  212. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +9 -1
  213. package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -1
  214. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +2 -0
  215. package/dist/src/foundation/pi-owned-ui-integration/index.js +2 -0
  216. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +29 -0
  217. package/dist/src/foundation/pi-owned-ui-integration/route-host.js +1 -0
  218. package/dist/src/{features/owned-ui/pi-session-shell.d.ts → foundation/pi-owned-ui-integration/session-shell.d.ts} +23 -14
  219. package/dist/src/{features/owned-ui/pi-session-shell.js → foundation/pi-owned-ui-integration/session-shell.js} +130 -61
  220. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +6 -1
  221. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +9 -1
  222. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +8 -4
  223. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +22 -9
  224. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -2
  225. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.js +1 -2
  226. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +1 -1
  227. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +1 -1
  228. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +4 -0
  229. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +48 -0
  230. package/dist/src/foundation/presentation-contracts/index.d.ts +96 -0
  231. package/dist/src/foundation/presentation-contracts/index.js +38 -0
  232. package/dist/src/foundation/process-containment/artifact.d.ts +1 -0
  233. package/dist/src/foundation/process-containment/artifact.js +34 -0
  234. package/dist/src/foundation/process-containment/contracts.d.ts +31 -0
  235. package/dist/src/foundation/process-containment/contracts.js +35 -0
  236. package/dist/src/foundation/process-containment/index.d.ts +5 -0
  237. package/dist/src/foundation/process-containment/index.js +5 -0
  238. package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +6 -0
  239. package/dist/src/foundation/process-containment/linux-process-inspector.js +26 -0
  240. package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +16 -0
  241. package/dist/src/foundation/process-containment/native-guardian-containment.js +139 -0
  242. package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +17 -0
  243. package/dist/src/foundation/process-containment/windows-process-inspector.js +53 -0
  244. package/dist/src/foundation/protocol/client.d.ts +2 -2
  245. package/dist/src/foundation/protocol/client.js +3 -1
  246. package/dist/src/foundation/protocol/index.d.ts +0 -1
  247. package/dist/src/foundation/protocol/index.js +0 -1
  248. package/dist/src/foundation/protocol/messages.d.ts +6 -7
  249. package/dist/src/foundation/protocol/messages.js +3 -3
  250. package/dist/src/foundation/release/bootstrap.d.ts +2 -3
  251. package/dist/src/foundation/release/bootstrap.js +85 -33
  252. package/dist/src/foundation/release/cohort-selection.d.ts +0 -1
  253. package/dist/src/foundation/release/cohort-selection.js +3 -4
  254. package/dist/src/foundation/release/cohort-state.d.ts +6 -4
  255. package/dist/src/foundation/release/cohort-state.js +5 -4
  256. package/dist/src/foundation/release/concurrency.d.ts +1 -0
  257. package/dist/src/foundation/release/concurrency.js +17 -0
  258. package/dist/src/foundation/release/development-preview-release.d.ts +2 -2
  259. package/dist/src/foundation/release/development-preview-release.js +3 -2
  260. package/dist/src/foundation/release/index.d.ts +0 -1
  261. package/dist/src/foundation/release/index.js +0 -1
  262. package/dist/src/foundation/release/process-cleanup.d.ts +1 -2
  263. package/dist/src/foundation/release/process-cleanup.js +2 -3
  264. package/dist/src/foundation/release/release-gc.d.ts +0 -1
  265. package/dist/src/foundation/release/release-gc.js +0 -1
  266. package/dist/src/foundation/release/release-store.d.ts +38 -6
  267. package/dist/src/foundation/release/release-store.js +103 -43
  268. package/dist/src/foundation/release/release.d.ts +20 -6
  269. package/dist/src/foundation/release/release.js +77 -48
  270. package/dist/src/foundation/release/stable-release.d.ts +2 -2
  271. package/dist/src/foundation/release/stable-release.js +6 -5
  272. package/dist/src/foundation/release/update-transaction.d.ts +2 -2
  273. package/dist/src/foundation/release/update-transaction.js +8 -7
  274. package/dist/src/foundation/release/update.d.ts +20 -4
  275. package/dist/src/foundation/release/update.js +152 -36
  276. package/dist/src/foundation/storage/control-store.d.ts +8 -8
  277. package/dist/src/foundation/storage/control-store.js +132 -61
  278. package/dist/src/foundation/storage/index.d.ts +0 -1
  279. package/dist/src/foundation/storage/index.js +0 -1
  280. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -1
  281. package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -1
  282. package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -1
  283. package/dist/src/foundation/structured-agent-runtime/commands.js +0 -1
  284. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +2 -3
  285. package/dist/src/foundation/structured-agent-runtime/handshake.js +13 -13
  286. package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -1
  287. package/dist/src/foundation/structured-agent-runtime/index.js +0 -1
  288. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -1
  289. package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -1
  290. package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -1
  291. package/dist/src/foundation/structured-agent-runtime/state.js +0 -1
  292. package/dist/src/foundation/supervision/index.d.ts +1 -2
  293. package/dist/src/foundation/supervision/index.js +1 -2
  294. package/dist/src/foundation/supervision/main.d.ts +0 -1
  295. package/dist/src/foundation/supervision/main.js +11 -10
  296. package/dist/src/foundation/supervision/paths.d.ts +1 -2
  297. package/dist/src/foundation/supervision/paths.js +1 -2
  298. package/dist/src/foundation/supervision/server.d.ts +6 -5
  299. package/dist/src/foundation/supervision/server.js +259 -91
  300. package/dist/src/foundation/ui-apps/contracts.d.ts +42 -0
  301. package/dist/src/foundation/ui-apps/contracts.js +12 -0
  302. package/dist/src/foundation/ui-apps/host.d.ts +42 -0
  303. package/dist/src/foundation/ui-apps/host.js +152 -0
  304. package/dist/src/foundation/ui-apps/index.d.ts +3 -0
  305. package/dist/src/foundation/ui-apps/index.js +3 -0
  306. package/dist/src/foundation/ui-apps/registry.d.ts +11 -0
  307. package/dist/src/foundation/ui-apps/registry.js +32 -0
  308. package/dist/src/foundation/ui-components/dialog-panel.d.ts +36 -0
  309. package/dist/src/foundation/ui-components/dialog-panel.js +47 -0
  310. package/dist/src/foundation/ui-components/frame.d.ts +21 -0
  311. package/dist/src/foundation/ui-components/frame.js +54 -0
  312. package/dist/src/foundation/ui-components/index.d.ts +18 -0
  313. package/dist/src/foundation/ui-components/index.js +18 -0
  314. package/dist/src/foundation/ui-components/label.d.ts +8 -0
  315. package/dist/src/foundation/ui-components/label.js +36 -0
  316. package/dist/src/foundation/ui-components/line-input.d.ts +74 -0
  317. package/dist/src/foundation/ui-components/line-input.js +245 -0
  318. package/dist/src/foundation/ui-components/list-block.d.ts +66 -0
  319. package/dist/src/foundation/ui-components/list-block.js +176 -0
  320. package/dist/src/foundation/ui-components/list-view.d.ts +66 -0
  321. package/dist/src/foundation/ui-components/list-view.js +76 -0
  322. package/dist/src/foundation/ui-components/mouse.d.ts +15 -0
  323. package/dist/src/foundation/ui-components/mouse.js +46 -0
  324. package/dist/src/foundation/ui-components/pane.d.ts +33 -0
  325. package/dist/src/foundation/ui-components/pane.js +7 -0
  326. package/dist/src/foundation/ui-components/revision.d.ts +35 -0
  327. package/dist/src/foundation/ui-components/revision.js +79 -0
  328. package/dist/src/foundation/ui-components/scrollbar.d.ts +62 -0
  329. package/dist/src/foundation/ui-components/scrollbar.js +102 -0
  330. package/dist/src/foundation/ui-components/shortcuts.d.ts +57 -0
  331. package/dist/src/foundation/ui-components/shortcuts.js +81 -0
  332. package/dist/src/foundation/ui-components/spans.d.ts +7 -0
  333. package/dist/src/foundation/ui-components/spans.js +59 -0
  334. package/dist/src/foundation/ui-components/status-line.d.ts +16 -0
  335. package/dist/src/foundation/ui-components/status-line.js +14 -0
  336. package/dist/src/foundation/ui-components/stepper.d.ts +24 -0
  337. package/dist/src/foundation/ui-components/stepper.js +33 -0
  338. package/dist/src/foundation/ui-components/surface.d.ts +20 -0
  339. package/dist/src/foundation/ui-components/surface.js +38 -0
  340. package/dist/src/foundation/ui-components/text.d.ts +24 -0
  341. package/dist/src/foundation/ui-components/text.js +123 -0
  342. package/dist/src/foundation/ui-components/theme.d.ts +23 -0
  343. package/dist/src/foundation/ui-components/theme.js +13 -0
  344. package/dist/src/foundation/ui-components/value-menu.d.ts +41 -0
  345. package/dist/src/foundation/ui-components/value-menu.js +33 -0
  346. package/dist/src/foundation/workspace-contracts/index.d.ts +0 -1
  347. package/dist/src/foundation/workspace-contracts/index.js +0 -1
  348. package/dist/src/foundation/workspace-contracts/model.d.ts +0 -1
  349. package/dist/src/foundation/workspace-contracts/model.js +0 -1
  350. package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -1
  351. package/dist/src/foundation/workspace-contracts/validation.js +0 -1
  352. package/dist/src/product-identity.d.ts +37 -0
  353. package/dist/src/product-identity.js +150 -0
  354. package/dist/src/product-identity.json +99 -0
  355. package/docs/architecture/boundaries.md +32 -14
  356. package/docs/architecture/process-guardian-provenance.md +26 -0
  357. package/docs/architecture/project-structure.md +2 -2
  358. package/docs/architecture/resource-and-data-policy.md +1 -1
  359. package/docs/architecture/terminal-host-proof-gate.md +2 -2
  360. package/docs/architecture/terminal-host-provenance.md +3 -3
  361. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  362. package/docs/architecture/toolchain.md +40 -8
  363. package/docs/architecture/ui-reference-provenance.md +50 -0
  364. package/docs/ci-release-runbook.md +67 -0
  365. package/docs/features/launch-profiles.md +12 -6
  366. package/docs/manual-launch-instance-acceptance.md +66 -0
  367. package/docs/manual-pi-boundary-candidate.md +33 -0
  368. package/docs/manual-terminal-colour-check.md +55 -0
  369. package/docs/manual-transparent-checkpoint.md +11 -11
  370. package/package.json +27 -14
  371. package/bin/addone-ui.js +0 -20
  372. package/dist/src/cli/dispatch.d.ts.map +0 -1
  373. package/dist/src/cli/dispatch.js.map +0 -1
  374. package/dist/src/cli/index.d.ts.map +0 -1
  375. package/dist/src/cli/index.js.map +0 -1
  376. package/dist/src/cli/version-stats.d.ts.map +0 -1
  377. package/dist/src/cli/version-stats.js.map +0 -1
  378. package/dist/src/cli/version.d.ts.map +0 -1
  379. package/dist/src/cli/version.js.map +0 -1
  380. package/dist/src/features/launch/development-launch.d.ts.map +0 -1
  381. package/dist/src/features/launch/development-launch.js.map +0 -1
  382. package/dist/src/features/launch/index.d.ts.map +0 -1
  383. package/dist/src/features/launch/index.js.map +0 -1
  384. package/dist/src/features/launch/initialize-profile.d.ts.map +0 -1
  385. package/dist/src/features/launch/initialize-profile.js.map +0 -1
  386. package/dist/src/features/launch/intent.d.ts.map +0 -1
  387. package/dist/src/features/launch/intent.js.map +0 -1
  388. package/dist/src/features/launch/prepare-launch.d.ts.map +0 -1
  389. package/dist/src/features/launch/prepare-launch.js.map +0 -1
  390. package/dist/src/features/launch/profile-paths.d.ts.map +0 -1
  391. package/dist/src/features/launch/profile-paths.js.map +0 -1
  392. package/dist/src/features/launch/profiles.d.ts.map +0 -1
  393. package/dist/src/features/launch/profiles.js.map +0 -1
  394. package/dist/src/features/launch/runtime-selection.d.ts.map +0 -1
  395. package/dist/src/features/launch/runtime-selection.js.map +0 -1
  396. package/dist/src/features/owned-ui/customization.d.ts.map +0 -1
  397. package/dist/src/features/owned-ui/customization.js.map +0 -1
  398. package/dist/src/features/owned-ui/diagnostics.d.ts.map +0 -1
  399. package/dist/src/features/owned-ui/diagnostics.js.map +0 -1
  400. package/dist/src/features/owned-ui/index.d.ts.map +0 -1
  401. package/dist/src/features/owned-ui/index.js.map +0 -1
  402. package/dist/src/features/owned-ui/pi-session-shell.d.ts.map +0 -1
  403. package/dist/src/features/owned-ui/pi-session-shell.js.map +0 -1
  404. package/dist/src/features/owned-ui/run.d.ts.map +0 -1
  405. package/dist/src/features/owned-ui/run.js.map +0 -1
  406. package/dist/src/features/workspace/capabilities.d.ts.map +0 -1
  407. package/dist/src/features/workspace/capabilities.js.map +0 -1
  408. package/dist/src/features/workspace/index.d.ts.map +0 -1
  409. package/dist/src/features/workspace/index.js.map +0 -1
  410. package/dist/src/features/workspace/presentation.d.ts.map +0 -1
  411. package/dist/src/features/workspace/presentation.js.map +0 -1
  412. package/dist/src/features/workspace/reconciliation.d.ts.map +0 -1
  413. package/dist/src/features/workspace/reconciliation.js.map +0 -1
  414. package/dist/src/features/workspace/reducer.d.ts.map +0 -1
  415. package/dist/src/features/workspace/reducer.js.map +0 -1
  416. package/dist/src/features/workspace/router.d.ts.map +0 -1
  417. package/dist/src/features/workspace/router.js.map +0 -1
  418. package/dist/src/features/workspace/store.d.ts.map +0 -1
  419. package/dist/src/features/workspace/store.js.map +0 -1
  420. package/dist/src/foundation/lifecycle/index.d.ts.map +0 -1
  421. package/dist/src/foundation/lifecycle/index.js.map +0 -1
  422. package/dist/src/foundation/lifecycle/model.d.ts.map +0 -1
  423. package/dist/src/foundation/lifecycle/model.js.map +0 -1
  424. package/dist/src/foundation/lifecycle/paths.d.ts.map +0 -1
  425. package/dist/src/foundation/lifecycle/paths.js.map +0 -1
  426. package/dist/src/foundation/native-host-protocol/codec.d.ts.map +0 -1
  427. package/dist/src/foundation/native-host-protocol/codec.js.map +0 -1
  428. package/dist/src/foundation/native-host-protocol/evidence.d.ts.map +0 -1
  429. package/dist/src/foundation/native-host-protocol/evidence.js.map +0 -1
  430. package/dist/src/foundation/native-host-protocol/index.d.ts.map +0 -1
  431. package/dist/src/foundation/native-host-protocol/index.js.map +0 -1
  432. package/dist/src/foundation/native-host-protocol/messages.d.ts.map +0 -1
  433. package/dist/src/foundation/native-host-protocol/messages.js.map +0 -1
  434. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts.map +0 -1
  435. package/dist/src/foundation/native-host-protocol/proof-gate.js.map +0 -1
  436. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts.map +0 -1
  437. package/dist/src/foundation/owned-ui-contracts/extension-ui.js.map +0 -1
  438. package/dist/src/foundation/owned-ui-contracts/index.d.ts.map +0 -1
  439. package/dist/src/foundation/owned-ui-contracts/index.js.map +0 -1
  440. package/dist/src/foundation/owned-ui-contracts/model.d.ts.map +0 -1
  441. package/dist/src/foundation/owned-ui-contracts/model.js.map +0 -1
  442. package/dist/src/foundation/owned-ui-contracts/validation.d.ts.map +0 -1
  443. package/dist/src/foundation/owned-ui-contracts/validation.js.map +0 -1
  444. package/dist/src/foundation/pi-component-adapter/components.d.ts.map +0 -1
  445. package/dist/src/foundation/pi-component-adapter/components.js.map +0 -1
  446. package/dist/src/foundation/pi-component-adapter/conformance.d.ts.map +0 -1
  447. package/dist/src/foundation/pi-component-adapter/conformance.js.map +0 -1
  448. package/dist/src/foundation/pi-component-adapter/index.d.ts.map +0 -1
  449. package/dist/src/foundation/pi-component-adapter/index.js.map +0 -1
  450. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts.map +0 -1
  451. package/dist/src/foundation/pi-component-adapter/shell-components.js.map +0 -1
  452. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.d.ts.map +0 -1
  453. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js.map +0 -1
  454. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts.map +0 -1
  455. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js.map +0 -1
  456. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts.map +0 -1
  457. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js.map +0 -1
  458. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts.map +0 -1
  459. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js.map +0 -1
  460. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts.map +0 -1
  461. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js.map +0 -1
  462. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts.map +0 -1
  463. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js.map +0 -1
  464. package/dist/src/foundation/pi-component-adapter/theme.d.ts.map +0 -1
  465. package/dist/src/foundation/pi-component-adapter/theme.js.map +0 -1
  466. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts.map +0 -1
  467. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js.map +0 -1
  468. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts.map +0 -1
  469. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.js.map +0 -1
  470. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts.map +0 -1
  471. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js.map +0 -1
  472. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts.map +0 -1
  473. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js.map +0 -1
  474. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts.map +0 -1
  475. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js.map +0 -1
  476. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts.map +0 -1
  477. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js.map +0 -1
  478. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts.map +0 -1
  479. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js.map +0 -1
  480. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts.map +0 -1
  481. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js.map +0 -1
  482. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.d.ts.map +0 -1
  483. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js.map +0 -1
  484. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts.map +0 -1
  485. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js.map +0 -1
  486. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.d.ts.map +0 -1
  487. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js.map +0 -1
  488. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts.map +0 -1
  489. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js.map +0 -1
  490. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts.map +0 -1
  491. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js.map +0 -1
  492. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts.map +0 -1
  493. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js.map +0 -1
  494. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts.map +0 -1
  495. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js.map +0 -1
  496. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts.map +0 -1
  497. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js.map +0 -1
  498. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.d.ts.map +0 -1
  499. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js.map +0 -1
  500. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts.map +0 -1
  501. package/dist/src/foundation/pi-component-adapter/upstream/model-search.js.map +0 -1
  502. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts.map +0 -1
  503. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js.map +0 -1
  504. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts.map +0 -1
  505. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js.map +0 -1
  506. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts.map +0 -1
  507. package/dist/src/foundation/pi-engine-adapter/adapter.js.map +0 -1
  508. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts.map +0 -1
  509. package/dist/src/foundation/pi-engine-adapter/conformance.js.map +0 -1
  510. package/dist/src/foundation/pi-engine-adapter/index.d.ts.map +0 -1
  511. package/dist/src/foundation/pi-engine-adapter/index.js.map +0 -1
  512. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts.map +0 -1
  513. package/dist/src/foundation/pi-engine-adapter/workflows.js.map +0 -1
  514. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts.map +0 -1
  515. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js.map +0 -1
  516. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts.map +0 -1
  517. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js.map +0 -1
  518. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts.map +0 -1
  519. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.js.map +0 -1
  520. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts.map +0 -1
  521. package/dist/src/foundation/pi-tui-runtime-adapter/index.js.map +0 -1
  522. package/dist/src/foundation/protocol/client.d.ts.map +0 -1
  523. package/dist/src/foundation/protocol/client.js.map +0 -1
  524. package/dist/src/foundation/protocol/index.d.ts.map +0 -1
  525. package/dist/src/foundation/protocol/index.js.map +0 -1
  526. package/dist/src/foundation/protocol/messages.d.ts.map +0 -1
  527. package/dist/src/foundation/protocol/messages.js.map +0 -1
  528. package/dist/src/foundation/release/bootstrap.d.ts.map +0 -1
  529. package/dist/src/foundation/release/bootstrap.js.map +0 -1
  530. package/dist/src/foundation/release/cohort-selection.d.ts.map +0 -1
  531. package/dist/src/foundation/release/cohort-selection.js.map +0 -1
  532. package/dist/src/foundation/release/cohort-state.d.ts.map +0 -1
  533. package/dist/src/foundation/release/cohort-state.js.map +0 -1
  534. package/dist/src/foundation/release/development-preview-release.d.ts.map +0 -1
  535. package/dist/src/foundation/release/development-preview-release.js.map +0 -1
  536. package/dist/src/foundation/release/index.d.ts.map +0 -1
  537. package/dist/src/foundation/release/index.js.map +0 -1
  538. package/dist/src/foundation/release/process-cleanup.d.ts.map +0 -1
  539. package/dist/src/foundation/release/process-cleanup.js.map +0 -1
  540. package/dist/src/foundation/release/release-gc.d.ts.map +0 -1
  541. package/dist/src/foundation/release/release-gc.js.map +0 -1
  542. package/dist/src/foundation/release/release-store.d.ts.map +0 -1
  543. package/dist/src/foundation/release/release-store.js.map +0 -1
  544. package/dist/src/foundation/release/release.d.ts.map +0 -1
  545. package/dist/src/foundation/release/release.js.map +0 -1
  546. package/dist/src/foundation/release/stable-release.d.ts.map +0 -1
  547. package/dist/src/foundation/release/stable-release.js.map +0 -1
  548. package/dist/src/foundation/release/update-transaction.d.ts.map +0 -1
  549. package/dist/src/foundation/release/update-transaction.js.map +0 -1
  550. package/dist/src/foundation/release/update.d.ts.map +0 -1
  551. package/dist/src/foundation/release/update.js.map +0 -1
  552. package/dist/src/foundation/storage/control-store.d.ts.map +0 -1
  553. package/dist/src/foundation/storage/control-store.js.map +0 -1
  554. package/dist/src/foundation/storage/index.d.ts.map +0 -1
  555. package/dist/src/foundation/storage/index.js.map +0 -1
  556. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts.map +0 -1
  557. package/dist/src/foundation/structured-agent-runtime/backpressure.js.map +0 -1
  558. package/dist/src/foundation/structured-agent-runtime/commands.d.ts.map +0 -1
  559. package/dist/src/foundation/structured-agent-runtime/commands.js.map +0 -1
  560. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts.map +0 -1
  561. package/dist/src/foundation/structured-agent-runtime/handshake.js.map +0 -1
  562. package/dist/src/foundation/structured-agent-runtime/index.d.ts.map +0 -1
  563. package/dist/src/foundation/structured-agent-runtime/index.js.map +0 -1
  564. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts.map +0 -1
  565. package/dist/src/foundation/structured-agent-runtime/reconnection.js.map +0 -1
  566. package/dist/src/foundation/structured-agent-runtime/state.d.ts.map +0 -1
  567. package/dist/src/foundation/structured-agent-runtime/state.js.map +0 -1
  568. package/dist/src/foundation/supervision/index.d.ts.map +0 -1
  569. package/dist/src/foundation/supervision/index.js.map +0 -1
  570. package/dist/src/foundation/supervision/main.d.ts.map +0 -1
  571. package/dist/src/foundation/supervision/main.js.map +0 -1
  572. package/dist/src/foundation/supervision/paths.d.ts.map +0 -1
  573. package/dist/src/foundation/supervision/paths.js.map +0 -1
  574. package/dist/src/foundation/supervision/server.d.ts.map +0 -1
  575. package/dist/src/foundation/supervision/server.js.map +0 -1
  576. package/dist/src/foundation/transparent-terminal/command-resolution.d.ts +0 -14
  577. package/dist/src/foundation/transparent-terminal/command-resolution.d.ts.map +0 -1
  578. package/dist/src/foundation/transparent-terminal/command-resolution.js +0 -70
  579. package/dist/src/foundation/transparent-terminal/command-resolution.js.map +0 -1
  580. package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts +0 -33
  581. package/dist/src/foundation/transparent-terminal/foreground-broker.d.ts.map +0 -1
  582. package/dist/src/foundation/transparent-terminal/foreground-broker.js +0 -88
  583. package/dist/src/foundation/transparent-terminal/foreground-broker.js.map +0 -1
  584. package/dist/src/foundation/transparent-terminal/index.d.ts +0 -4
  585. package/dist/src/foundation/transparent-terminal/index.d.ts.map +0 -1
  586. package/dist/src/foundation/transparent-terminal/index.js +0 -4
  587. package/dist/src/foundation/transparent-terminal/index.js.map +0 -1
  588. package/dist/src/foundation/transparent-terminal/main.d.ts +0 -10
  589. package/dist/src/foundation/transparent-terminal/main.d.ts.map +0 -1
  590. package/dist/src/foundation/transparent-terminal/main.js +0 -107
  591. package/dist/src/foundation/transparent-terminal/main.js.map +0 -1
  592. package/dist/src/foundation/transparent-terminal/native-launcher.d.ts +0 -26
  593. package/dist/src/foundation/transparent-terminal/native-launcher.d.ts.map +0 -1
  594. package/dist/src/foundation/transparent-terminal/native-launcher.js +0 -147
  595. package/dist/src/foundation/transparent-terminal/native-launcher.js.map +0 -1
  596. package/dist/src/foundation/workspace-contracts/index.d.ts.map +0 -1
  597. package/dist/src/foundation/workspace-contracts/index.js.map +0 -1
  598. package/dist/src/foundation/workspace-contracts/model.d.ts.map +0 -1
  599. package/dist/src/foundation/workspace-contracts/model.js.map +0 -1
  600. package/dist/src/foundation/workspace-contracts/validation.d.ts.map +0 -1
  601. package/dist/src/foundation/workspace-contracts/validation.js.map +0 -1
  602. /package/bin/{addone-supervisor.js → supervisor.js} +0 -0
@@ -2,35 +2,55 @@ import { randomUUID } from "node:crypto";
2
2
  import { 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 { assertNativeProcessIdentity, assertTransparentTerminalLaunchProfile, } from "../lifecycle/index.js";
5
+ import { assertLaunchInstanceOutcome, assertNativeProcessIdentity, assertProcessContainmentIdentity, } from "../lifecycle/index.js";
6
6
  import { encodeFrame, isCommandMessage, isControlHello, LineFrameDecoder, localControlHello, MAX_CONTROL_FRAME_BYTES, negotiateControlFeatures } from "../protocol/index.js";
7
+ import { processIsAlive } from "../release/index.js";
7
8
  import { ControlStore } from "../storage/index.js";
8
- import { resolveAddOnePaths } from "./paths.js";
9
+ import { resolveProductPaths } from "./paths.js";
10
+ import { PRODUCT_IDENTITY, PRODUCT_TEXT } from "../../product-identity.js";
9
11
  export class SupervisorServer {
10
12
  store;
11
13
  release;
12
14
  terminateProcess;
15
+ reconciliationDeadlineMs;
16
+ shutdownDeadlineMs;
13
17
  id = randomUUID();
14
18
  bootNonce;
15
19
  pidStartIdentity = `${process.pid}:${Math.floor(Date.now() - process.uptime() * 1_000)}`;
16
20
  startedAt = new Date().toISOString();
17
21
  paths;
18
22
  #server = null;
19
- #foregroundLease;
23
+ #instances = new Map();
24
+ #instanceOwners = new Map();
25
+ #clientIds = new Map();
26
+ #clientInstances = new Map();
27
+ #uncertainInstances = new Set();
28
+ #reconciliations = new Map();
20
29
  #revision = 0;
21
30
  #clients = new Set();
22
31
  #results = new Map();
23
32
  #metadataWrites = Promise.resolve();
24
- constructor(store, paths = resolveAddOnePaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code)) {
33
+ #closing = false;
34
+ constructor(store, paths = resolveProductPaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code), reconciliationDeadlineMs = 3_000, shutdownDeadlineMs = 1_500) {
25
35
  this.store = store;
26
36
  this.release = release;
27
37
  this.terminateProcess = terminateProcess;
38
+ this.reconciliationDeadlineMs = reconciliationDeadlineMs;
39
+ this.shutdownDeadlineMs = shutdownDeadlineMs;
28
40
  this.bootNonce = bootNonce;
29
41
  this.paths = paths;
30
- this.#foregroundLease = store.loadLiveForegroundTerminalLease();
42
+ for (const instance of store.loadActiveLaunchInstances())
43
+ this.#instances.set(instance.id, instance);
31
44
  }
32
45
  snapshot() {
33
- return { revision: this.#revision };
46
+ return {
47
+ revision: this.#revision,
48
+ activeInstances: [...this.#instances.values()].flatMap(instance => {
49
+ if (instance.state !== "requested" && instance.state !== "active" && instance.state !== "stopping")
50
+ return [];
51
+ return [{ id: instance.id, profileId: instance.profileId, state: instance.state }];
52
+ }),
53
+ };
34
54
  }
35
55
  async listen() {
36
56
  if (this.#server)
@@ -38,7 +58,7 @@ export class SupervisorServer {
38
58
  await mkdir(this.paths.runtimeDir, { recursive: true, mode: 0o700 });
39
59
  if (platform() !== "win32") {
40
60
  if (await endpointIsLive(this.paths.endpoint))
41
- throw new Error(`an AddOne supervisor already owns ${this.paths.endpoint}`);
61
+ throw new Error(PRODUCT_TEXT.diagnostic(`supervisor already owns ${this.paths.endpoint}`));
42
62
  await rm(this.paths.endpoint, { force: true });
43
63
  }
44
64
  const server = createServer(socket => this.#attach(socket));
@@ -53,8 +73,10 @@ export class SupervisorServer {
53
73
  await this.#writeEndpointMetadata();
54
74
  }
55
75
  async close(stopAgents = false) {
56
- if (stopAgents && this.#foregroundLease)
57
- this.#releaseForegroundLeaseForUpdate();
76
+ if (stopAgents && !await this.#drainInstances("update", this.shutdownDeadlineMs)) {
77
+ throw new Error("active launch instances did not release ownership within the shutdown deadline");
78
+ }
79
+ this.#closing = true;
58
80
  for (const client of this.#clients)
59
81
  client.destroy();
60
82
  if (this.#server)
@@ -85,13 +107,13 @@ export class SupervisorServer {
85
107
  if (isMessageType(value, "release-idle-ownership")) {
86
108
  const request = value;
87
109
  const identityMatches = request.bootNonce === this.bootNonce && typeof request.candidateReleaseId === "string";
88
- const released = identityMatches && this.#foregroundLease === null;
110
+ const released = identityMatches && this.#instances.size === 0;
89
111
  this.#send(socket, {
90
112
  type: "release-ownership-result",
91
113
  released,
92
114
  reason: released ? "idle cohort released ownership"
93
- : identityMatches ? "foreground terminal lease is still live" : "boot nonce or candidate release mismatch",
94
- liveGenerationIds: this.#liveGenerationIds(),
115
+ : identityMatches ? "launch instances are still active" : "boot nonce or candidate release mismatch",
116
+ liveInstanceIds: this.#liveInstanceIds(),
95
117
  });
96
118
  if (released)
97
119
  setTimeout(() => void this.closeForReleaseReplacement(false), 25);
@@ -99,19 +121,11 @@ export class SupervisorServer {
99
121
  }
100
122
  if (isMessageType(value, "release-update-ownership")) {
101
123
  const request = value;
102
- const accepted = request.bootNonce === this.bootNonce && typeof request.targetVersion === "string";
103
- this.#send(socket, {
104
- type: "release-update-result",
105
- accepted,
106
- reason: accepted ? "verified AddOne owner accepted immediate update shutdown" : "boot nonce or target version mismatch",
107
- liveGenerationIds: this.#liveGenerationIds(),
108
- });
109
- if (accepted)
110
- setTimeout(() => void this.closeForReleaseReplacement(true), 25);
124
+ void this.#handleUpdateRelease(socket, request);
111
125
  continue;
112
126
  }
113
127
  if (!isControlHello(value)) {
114
- this.#send(socket, { type: "protocol-error", code: "invalid-control-handshake", message: "the first message must be a valid AddOne control feature handshake", diagnostics: { received: value } });
128
+ this.#send(socket, { type: "protocol-error", code: "invalid-control-handshake", message: `the first message must be a valid ${PRODUCT_TEXT.displayName} control feature handshake`, diagnostics: { received: value } });
115
129
  socket.destroy();
116
130
  return;
117
131
  }
@@ -124,6 +138,8 @@ export class SupervisorServer {
124
138
  }
125
139
  welcomed = true;
126
140
  this.#clients.add(socket);
141
+ this.#clientIds.set(socket, value.clientId);
142
+ this.#clientInstances.set(socket, new Set());
127
143
  this.#send(socket, { type: "server-hello", ...serverHello, releaseId: this.release.releaseId, supervisorId: this.id, bootNonce: this.bootNonce, pidStartIdentity: this.pidStartIdentity, negotiatedFeatures: negotiation.negotiatedFeatures, snapshot: this.snapshot() });
128
144
  }
129
145
  else if (isCommandMessage(value)) {
@@ -136,25 +152,35 @@ export class SupervisorServer {
136
152
  socket.destroy();
137
153
  }
138
154
  });
139
- socket.on("close", () => this.#clients.delete(socket));
140
- socket.on("error", () => this.#clients.delete(socket));
155
+ socket.on("close", () => this.#onSocketClosed(socket));
156
+ socket.on("error", () => this.#onSocketClosed(socket));
141
157
  }
142
158
  async #execute(command, socket) {
143
- const recorded = this.#results.get(command.requestId);
159
+ const clientId = this.#clientIds.get(socket);
160
+ if (!clientId) {
161
+ this.#send(socket, { type: "protocol-error", code: "unauthenticated-command", message: "launch-instance commands require an authenticated client" });
162
+ return;
163
+ }
164
+ const resultKey = `${clientId}:${command.requestId}`;
165
+ const recorded = this.#results.get(resultKey);
144
166
  if (recorded) {
145
167
  this.#send(socket, { type: "command-result", result: recorded });
146
168
  return;
147
169
  }
148
170
  let result;
149
171
  try {
150
- if (command.type === "acquire-foreground-terminal-lease")
151
- this.#acquireForegroundLease(command);
152
- if (command.type === "activate-foreground-terminal-lease")
153
- this.#activateForegroundLease(command);
154
- if (command.type === "heartbeat-foreground-terminal-lease")
155
- this.#heartbeatForegroundLease(command);
156
- if (command.type === "release-foreground-terminal-lease")
157
- this.#releaseForegroundLease(command);
172
+ if (command.type === "create-launch-instance")
173
+ this.#createLaunchInstance(command, socket, clientId);
174
+ if (command.type === "activate-launch-instance")
175
+ this.#activateLaunchInstance(command, socket, clientId);
176
+ if (command.type === "begin-launch-instance-stop")
177
+ this.#beginLaunchInstanceStop(command, socket, clientId);
178
+ if (command.type === "complete-launch-instance")
179
+ this.#completeLaunchInstance(command, socket, clientId);
180
+ if (command.type === "reconcile-launch-instance") {
181
+ this.#ownedInstance(command.instanceId, socket, clientId);
182
+ await this.#reconcileLaunchInstance(command.instanceId);
183
+ }
158
184
  if (command.type === "resynchronize")
159
185
  this.#send(socket, { type: "snapshot", snapshot: this.snapshot() });
160
186
  await this.#metadataWrites;
@@ -162,76 +188,212 @@ export class SupervisorServer {
162
188
  }
163
189
  catch (error) {
164
190
  const message = error instanceof Error ? error.message : String(error);
165
- const code = /not found/i.test(message) ? "not-found" : "driver-error";
191
+ const code = /not found/i.test(message) ? "not-found" : /owner|ownership|authenticated/i.test(message) ? "ownership-error" : "driver-error";
166
192
  result = { requestId: command.requestId, ok: false, revision: this.#revision, error: { code, message } };
167
193
  }
168
- this.#results.set(command.requestId, result);
194
+ this.#results.set(resultKey, result);
169
195
  this.#send(socket, { type: "command-result", result });
170
196
  }
171
- #acquireForegroundLease(command) {
172
- if (!command.leaseId || !command.ownerId)
173
- throw new Error("foreground lease and owner identities are required");
174
- assertTransparentTerminalLaunchProfile(command.profile);
175
- const lease = {
176
- id: command.leaseId,
177
- ownerId: command.ownerId,
178
- profile: command.profile,
197
+ #createLaunchInstance(command, socket, clientId) {
198
+ assertNativeProcessIdentity(command.guardianIdentity);
199
+ const existing = this.store.loadLaunchInstance(command.instanceId);
200
+ if (existing) {
201
+ if (existing.ownerClientId !== clientId
202
+ || existing.profileId !== command.profileId
203
+ || existing.shutdownPolicy !== command.shutdownPolicy
204
+ || !sameProcessIdentity(existing.guardianIdentity, command.guardianIdentity)) {
205
+ throw new Error("launch instance already exists with different authenticated ownership");
206
+ }
207
+ if (existing.state === "completed" || existing.state === "interrupted")
208
+ throw new Error("launch instance already has a terminal outcome");
209
+ this.#instances.set(existing.id, existing);
210
+ this.#bindOwner(existing.id, socket);
211
+ return;
212
+ }
213
+ const instance = {
214
+ id: command.instanceId,
215
+ ownerClientId: clientId,
216
+ profileId: command.profileId,
179
217
  state: "requested",
180
- generationId: null,
181
- processIdentity: null,
182
- acquiredAt: new Date().toISOString(),
183
- heartbeatAt: null,
184
- releasedAt: null,
218
+ shutdownPolicy: command.shutdownPolicy,
219
+ guardianIdentity: command.guardianIdentity,
220
+ rootIdentity: null,
221
+ containmentIdentity: null,
222
+ createdAt: new Date().toISOString(),
223
+ activatedAt: null,
224
+ stoppingAt: null,
225
+ completedAt: null,
185
226
  outcome: null,
186
227
  };
187
- this.store.acquireForegroundTerminalLease(lease);
188
- this.#foregroundLease = lease;
189
- void this.#writeEndpointMetadata();
228
+ this.store.createLaunchInstance(instance);
229
+ this.#instances.set(instance.id, instance);
230
+ this.#bindOwner(instance.id, socket);
231
+ this.#mutated();
190
232
  }
191
- #activateForegroundLease(command) {
192
- assertNativeProcessIdentity(command.processIdentity);
193
- if (!this.#foregroundLease || this.#foregroundLease.id !== command.leaseId || this.#foregroundLease.state !== "requested")
194
- throw new Error("foreground terminal lease not found or is not requested");
195
- const heartbeatAt = new Date().toISOString();
196
- if (!this.store.activateForegroundTerminalLease(command.leaseId, command.generationId, command.processIdentity, heartbeatAt))
197
- throw new Error("foreground terminal lease activation was rejected");
198
- this.#foregroundLease = { ...this.#foregroundLease, state: "active", generationId: command.generationId, processIdentity: command.processIdentity, heartbeatAt };
199
- void this.#writeEndpointMetadata();
233
+ #activateLaunchInstance(command, socket, clientId) {
234
+ assertNativeProcessIdentity(command.rootIdentity);
235
+ assertProcessContainmentIdentity(command.containmentIdentity);
236
+ const instance = this.#ownedInstance(command.instanceId, socket, clientId);
237
+ if (instance.state === "active"
238
+ && sameProcessIdentity(instance.rootIdentity, command.rootIdentity)
239
+ && sameContainmentIdentity(instance.containmentIdentity, command.containmentIdentity))
240
+ return;
241
+ if (instance.state !== "requested")
242
+ throw new Error("launch instance is not requested");
243
+ const activatedAt = new Date().toISOString();
244
+ if (!this.store.activateLaunchInstance(instance.id, clientId, command.rootIdentity, command.containmentIdentity, activatedAt)) {
245
+ throw new Error("launch instance activation ownership mismatch");
246
+ }
247
+ this.#instances.set(instance.id, { ...instance, state: "active", rootIdentity: command.rootIdentity, containmentIdentity: command.containmentIdentity, activatedAt });
248
+ this.#mutated();
200
249
  }
201
- #heartbeatForegroundLease(command) {
202
- assertNativeProcessIdentity(command.processIdentity);
203
- if (!this.#foregroundLease || this.#foregroundLease.id !== command.leaseId || this.#foregroundLease.state !== "active")
204
- throw new Error("active foreground terminal lease not found");
205
- const heartbeatAt = new Date().toISOString();
206
- if (!this.store.heartbeatForegroundTerminalLease(command.leaseId, command.processIdentity, heartbeatAt))
207
- throw new Error("foreground terminal lease ownership mismatch");
208
- this.#foregroundLease = { ...this.#foregroundLease, heartbeatAt };
250
+ #beginLaunchInstanceStop(command, socket, clientId) {
251
+ const instance = this.#ownedInstance(command.instanceId, socket, clientId);
252
+ if (instance.state === "stopping")
253
+ return;
254
+ if (instance.state !== "active")
255
+ throw new Error("active launch instance not found");
256
+ const stoppingAt = new Date().toISOString();
257
+ if (!this.store.beginLaunchInstanceStop(instance.id, clientId, stoppingAt))
258
+ throw new Error("launch instance stop ownership mismatch");
259
+ this.#instances.set(instance.id, { ...instance, state: "stopping", stoppingAt });
260
+ this.#mutated();
209
261
  }
210
- #releaseForegroundLease(command) {
211
- if (command.processIdentity)
212
- assertNativeProcessIdentity(command.processIdentity);
213
- if (!this.#foregroundLease || this.#foregroundLease.id !== command.leaseId)
214
- throw new Error("foreground terminal lease not found");
215
- const releasedAt = new Date().toISOString();
216
- if (!this.store.releaseForegroundTerminalLease(command.leaseId, command.processIdentity, command.outcome, releasedAt))
217
- throw new Error("foreground terminal lease ownership mismatch");
218
- this.#foregroundLease = null;
219
- void this.#writeEndpointMetadata();
262
+ #completeLaunchInstance(command, socket, clientId) {
263
+ assertLaunchInstanceOutcome(command.outcome);
264
+ const stored = this.store.loadLaunchInstance(command.instanceId);
265
+ if (!stored)
266
+ throw new Error("launch instance not found");
267
+ if (stored.ownerClientId !== clientId || this.#instanceOwners.get(stored.id) !== socket)
268
+ throw new Error("launch instance ownership mismatch");
269
+ if (stored.state === "completed" || stored.state === "interrupted") {
270
+ if (stored.state === command.terminalState && JSON.stringify(stored.outcome) === JSON.stringify(command.outcome))
271
+ return;
272
+ throw new Error("launch instance already has a different terminal outcome");
273
+ }
274
+ const completedAt = new Date().toISOString();
275
+ if (!this.store.completeLaunchInstance(stored.id, clientId, command.terminalState, command.outcome, completedAt)) {
276
+ throw new Error("launch instance completion ownership mismatch");
277
+ }
278
+ this.#instances.delete(stored.id);
279
+ this.#uncertainInstances.delete(stored.id);
280
+ this.#unbindOwner(stored.id, socket);
281
+ this.#mutated();
282
+ }
283
+ #ownedInstance(instanceId, socket, clientId) {
284
+ const instance = this.#instances.get(instanceId) ?? this.store.loadLaunchInstance(instanceId);
285
+ if (!instance || instance.state === "completed" || instance.state === "interrupted")
286
+ throw new Error("active launch instance not found");
287
+ if (instance.ownerClientId !== clientId || this.#instanceOwners.get(instanceId) !== socket)
288
+ throw new Error("launch instance ownership mismatch");
289
+ return instance;
290
+ }
291
+ #bindOwner(instanceId, socket) {
292
+ const current = this.#instanceOwners.get(instanceId);
293
+ if (current && current !== socket)
294
+ throw new Error("launch instance already belongs to another authenticated connection");
295
+ this.#instanceOwners.set(instanceId, socket);
296
+ this.#clientInstances.get(socket)?.add(instanceId);
297
+ }
298
+ #unbindOwner(instanceId, socket) {
299
+ this.#instanceOwners.delete(instanceId);
300
+ this.#clientInstances.get(socket)?.delete(instanceId);
301
+ }
302
+ #onSocketClosed(socket) {
303
+ if (!this.#clients.delete(socket) && !this.#clientIds.has(socket))
304
+ return;
305
+ const instanceIds = [...(this.#clientInstances.get(socket) ?? [])];
306
+ this.#clientInstances.delete(socket);
307
+ this.#clientIds.delete(socket);
308
+ for (const instanceId of instanceIds) {
309
+ if (this.#instanceOwners.get(instanceId) === socket)
310
+ this.#instanceOwners.delete(instanceId);
311
+ if (!this.#closing)
312
+ void this.#reconcileLaunchInstance(instanceId);
313
+ }
314
+ }
315
+ #reconcileLaunchInstance(instanceId) {
316
+ const existing = this.#reconciliations.get(instanceId);
317
+ if (existing)
318
+ return existing;
319
+ const reconciliation = this.#performReconciliation(instanceId).finally(() => this.#reconciliations.delete(instanceId));
320
+ this.#reconciliations.set(instanceId, reconciliation);
321
+ return reconciliation;
220
322
  }
221
- #releaseForegroundLeaseForUpdate() {
222
- const lease = this.#foregroundLease;
223
- if (!lease)
323
+ async #performReconciliation(instanceId) {
324
+ const instance = this.#instances.get(instanceId);
325
+ if (!instance)
326
+ return;
327
+ const deadline = Date.now() + this.reconciliationDeadlineMs;
328
+ while (instance.rootIdentity && processIsAlive(instance.rootIdentity.pid) && Date.now() < deadline) {
329
+ await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
330
+ }
331
+ if (instance.state === "requested" || (instance.rootIdentity && !processIsAlive(instance.rootIdentity.pid))) {
332
+ const outcome = { kind: "interrupted", reason: "owner-disconnect", message: "launch instance owner disconnected before reporting a terminal outcome" };
333
+ if (this.store.completeLaunchInstance(instance.id, instance.ownerClientId, "interrupted", outcome, new Date().toISOString())) {
334
+ this.#instances.delete(instance.id);
335
+ this.#uncertainInstances.delete(instance.id);
336
+ this.#mutated();
337
+ }
338
+ return;
339
+ }
340
+ this.#uncertainInstances.add(instance.id);
341
+ await this.#writeEndpointMetadata();
342
+ }
343
+ async #handleUpdateRelease(socket, request) {
344
+ const identityMatches = request.bootNonce === this.bootNonce && typeof request.targetVersion === "string";
345
+ if (!identityMatches) {
346
+ this.#send(socket, {
347
+ type: "release-update-result",
348
+ accepted: false,
349
+ reason: "boot nonce or target version mismatch",
350
+ liveInstanceIds: this.#liveInstanceIds(),
351
+ });
224
352
  return;
225
- const outcome = { kind: "stopped", reason: "update" };
226
- if (!this.store.releaseForegroundTerminalLease(lease.id, lease.processIdentity, outcome, new Date().toISOString()))
227
- throw new Error("foreground terminal lease update shutdown was rejected");
228
- this.#foregroundLease = null;
353
+ }
354
+ const released = await this.#drainInstances("update", this.shutdownDeadlineMs);
355
+ this.#send(socket, {
356
+ type: "release-update-result",
357
+ accepted: released,
358
+ reason: released
359
+ ? `verified ${PRODUCT_TEXT.displayName} owner drained all launch instances for immediate update shutdown`
360
+ : "one or more launch instances did not release verified ownership within the update deadline",
361
+ liveInstanceIds: this.#liveInstanceIds(),
362
+ });
363
+ if (released)
364
+ setTimeout(() => void this.closeForReleaseReplacement(false), 25);
365
+ }
366
+ async #drainInstances(reason, timeoutMs) {
367
+ if (this.#instances.size === 0)
368
+ return true;
369
+ this.#requestStopAll(reason);
370
+ const deadline = Date.now() + timeoutMs;
371
+ while (Date.now() < deadline) {
372
+ if (this.#instances.size === 0) {
373
+ // Let the terminal command result flush before closing owner sockets.
374
+ await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
375
+ return this.#instances.size === 0;
376
+ }
377
+ await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
378
+ }
379
+ return this.#instances.size === 0;
229
380
  }
230
- #liveGenerationIds() {
231
- return this.#foregroundLease?.generationId ? [this.#foregroundLease.generationId] : [];
381
+ #requestStopAll(reason) {
382
+ for (const [instanceId, socket] of this.#instanceOwners) {
383
+ this.#send(socket, { type: "stop-launch-instance", requestId: randomUUID(), instanceId, reason });
384
+ }
385
+ }
386
+ #mutated() {
387
+ this.#revision += 1;
388
+ void this.#writeEndpointMetadata();
389
+ }
390
+ #liveInstanceIds() {
391
+ return [...this.#instances.keys()];
232
392
  }
233
393
  #writeEndpointMetadata() {
394
+ const liveInstanceIds = this.#liveInstanceIds();
234
395
  const metadata = {
396
+ schema: PRODUCT_IDENTITY.protocol.supervisorSchema,
235
397
  ...localControlHello(this.release.releaseId),
236
398
  supervisorId: this.id,
237
399
  pid: process.pid,
@@ -244,9 +406,10 @@ export class SupervisorServer {
244
406
  releaseRoot: this.release.releaseRoot,
245
407
  contentDigest: this.release.contentDigest,
246
408
  ownership: {
247
- state: this.#foregroundLease ? "busy" : "idle",
248
- liveGenerationIds: this.#liveGenerationIds(),
249
- nonResumableGenerationIds: this.#liveGenerationIds(),
409
+ state: this.#uncertainInstances.size > 0 ? "blocked" : liveInstanceIds.length > 0 ? "busy" : "idle",
410
+ liveInstanceIds,
411
+ nonResumableInstanceIds: liveInstanceIds,
412
+ uncertainInstanceIds: [...this.#uncertainInstances],
250
413
  },
251
414
  };
252
415
  const temporary = `${this.paths.endpointMetadataPath}.${process.pid}.tmp`;
@@ -268,6 +431,12 @@ export class SupervisorServer {
268
431
  socket.write(frame);
269
432
  }
270
433
  }
434
+ function sameProcessIdentity(left, right) {
435
+ return left !== null && left.pid === right.pid && left.startIdentity === right.startIdentity;
436
+ }
437
+ function sameContainmentIdentity(left, right) {
438
+ return left !== null && left.provider === right.provider && left.token === right.token;
439
+ }
271
440
  function isMessageType(value, type) {
272
441
  return typeof value === "object" && value !== null && "type" in value && value.type === type;
273
442
  }
@@ -280,4 +449,3 @@ async function endpointIsLive(endpoint) {
280
449
  setTimeout(() => done(false), 250).unref();
281
450
  });
282
451
  }
283
- //# sourceMappingURL=server.js.map
@@ -0,0 +1,42 @@
1
+ import type { PaneInputResult, PaneMouseEvent, PaneRect, UiTheme } from "../ui-components/index.js";
2
+ export interface AppSize {
3
+ readonly width: number;
4
+ readonly height: number;
5
+ }
6
+ /**
7
+ * What a host offers a presented app. An app reaches the terminal, the pinned
8
+ * shell, or another app only through these — never around them.
9
+ */
10
+ export interface AppHostServices {
11
+ getSize(): AppSize;
12
+ requestRender(): void;
13
+ close(): void;
14
+ /** Restores the surface that opened this app without closing the host. */
15
+ returnToPrevious(): void;
16
+ /** Leaves A1 entirely, as the interrupt chord does from any screen. */
17
+ exit(): void;
18
+ /** True once one interrupt has been seen and the chord is waiting for the second. */
19
+ readonly interruptArmed: boolean;
20
+ /**
21
+ * Whether an idle interrupt closes the presented app. Every host chooses
22
+ * explicitly: a standalone screen closes, a persistent host stays open.
23
+ */
24
+ readonly closeOnInterrupt: boolean;
25
+ /** Colours for the presented app. Absent renders plain text. */
26
+ readonly theme?: UiTheme;
27
+ }
28
+ export interface UiApp {
29
+ readonly id: string;
30
+ render(rect: PaneRect, host: AppHostServices): readonly string[];
31
+ onInput?(data: string, host: AppHostServices): PaneInputResult;
32
+ onMouse?(event: PaneMouseEvent, host: AppHostServices): PaneInputResult;
33
+ onActivate?(host: AppHostServices): void;
34
+ onClose?(host: AppHostServices): void;
35
+ }
36
+ export interface AppRegistration {
37
+ readonly id: string;
38
+ /** Route that opens the app, without its leading slash. */
39
+ readonly route: string;
40
+ create(): UiApp;
41
+ }
42
+ export declare function assertAppRegistration(registration: AppRegistration): void;
@@ -0,0 +1,12 @@
1
+ const ID_PATTERN = /^[a-z][a-z0-9-]{0,63}$/;
2
+ export function assertAppRegistration(registration) {
3
+ if (!ID_PATTERN.test(registration.id)) {
4
+ throw new Error(`owned UI app id is not a bounded slug: ${registration.id}`);
5
+ }
6
+ if (!ID_PATTERN.test(registration.route)) {
7
+ throw new Error(`owned UI app ${registration.id} has an invalid route: ${registration.route}`);
8
+ }
9
+ if (typeof registration.create !== "function") {
10
+ throw new TypeError(`owned UI app ${registration.id} has no create()`);
11
+ }
12
+ }
@@ -0,0 +1,42 @@
1
+ import { type PaneInputResult, type PaneMouseEvent, type UiTheme } from "../ui-components/index.js";
2
+ import type { AppSize, UiApp } from "./contracts.js";
3
+ import type { UiAppRegistry } from "./registry.js";
4
+ export interface AppHostSurface {
5
+ /** Current viewport, re-read on every frame so a resize is picked up. */
6
+ size(): AppSize;
7
+ /** Asks the surrounding runtime to repaint. */
8
+ requestRender(): void;
9
+ /** Presents these rows, or clears the surface when null. */
10
+ present(lines: readonly string[] | null): void;
11
+ /** Reports a failure that closed an app. */
12
+ reportFailure?(appId: string, error: unknown): void;
13
+ /** Leaves A1 entirely. Invoked by the interrupt chord from a presented app. */
14
+ exit?(): void;
15
+ }
16
+ export interface AppHostOptions {
17
+ readonly registry: UiAppRegistry;
18
+ readonly surface: AppHostSurface;
19
+ /** Whether an idle interrupt closes the presented app. Chosen explicitly. */
20
+ readonly closeOnInterrupt: boolean;
21
+ /** Colours handed to every presented app. Absent renders plain text. */
22
+ readonly theme?: UiTheme;
23
+ }
24
+ /**
25
+ * Presents at most one app. Input reaches the presented app first; anything it
26
+ * does not consume continues to the caller. A failure while rendering or
27
+ * handling input closes the app rather than leaving a broken surface on screen.
28
+ */
29
+ export declare class UiAppHost {
30
+ #private;
31
+ constructor(options: AppHostOptions);
32
+ get presented(): UiApp | null;
33
+ get isPresenting(): boolean;
34
+ /** Opens a registered app, replacing whatever was presented. */
35
+ open(id: string): void;
36
+ openRoute(route: string): boolean;
37
+ render(): void;
38
+ handleInput(data: string): PaneInputResult;
39
+ handleMouse(event: PaneMouseEvent): PaneInputResult;
40
+ get interruptArmed(): boolean;
41
+ close(): void;
42
+ }