@timurproko/a1 0.2.7-dev.1249 → 0.2.7-dev.1255

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 (524) hide show
  1. package/README.md +11 -36
  2. package/bin/cli.js +2 -17
  3. package/bin/ui.js +10 -51
  4. package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
  5. package/dist/app/session-shell/clipboard-image.d.ts +0 -1
  6. package/dist/app/session-shell/clipboard-image.js +1 -1
  7. package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
  8. package/dist/app/session-shell/dialog-coordinator.js +3 -4
  9. package/dist/app/session-shell/dock-chrome.d.ts +11 -6
  10. package/dist/app/session-shell/dock-chrome.js +5 -8
  11. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
  12. package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
  13. package/dist/app/session-shell/exit-notice.d.ts +3 -3
  14. package/dist/app/session-shell/exit-notice.js +10 -10
  15. package/dist/app/session-shell/extension-surface.d.ts +8 -7
  16. package/dist/app/session-shell/helper-pool.d.ts +3 -4
  17. package/dist/app/session-shell/helper-pool.js +1 -1
  18. package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
  19. package/dist/app/session-shell/image-preparation.d.ts +0 -2
  20. package/dist/app/session-shell/image-preparation.js +2 -2
  21. package/dist/app/session-shell/image-source.d.ts +2 -3
  22. package/dist/app/session-shell/image-source.js +2 -2
  23. package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
  24. package/dist/app/session-shell/input-surface-switch.js +1 -2
  25. package/dist/app/session-shell/login-interaction.d.ts +5 -4
  26. package/dist/app/session-shell/login-interaction.js +2 -3
  27. package/dist/app/session-shell/paste-executor.d.ts +4 -8
  28. package/dist/app/session-shell/paste-executor.js +2 -2
  29. package/dist/app/session-shell/paste-protocol.d.ts +2 -2
  30. package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
  31. package/dist/app/session-shell/path-chip-presentation.js +3 -3
  32. package/dist/app/session-shell/prompt-chips.d.ts +8 -7
  33. package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
  34. package/dist/app/session-shell/prompt-submission.d.ts +7 -6
  35. package/dist/app/session-shell/prompt-submission.js +7 -28
  36. package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
  37. package/dist/app/session-shell/quit-outro-effects.js +1 -4
  38. package/dist/app/session-shell/quit-outro.d.ts +9 -12
  39. package/dist/app/session-shell/quit-outro.js +11 -11
  40. package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
  41. package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
  42. package/dist/app/session-shell/response-copy-transport.js +2 -3
  43. package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
  44. package/dist/app/session-shell/session-lifecycle.js +2 -4
  45. package/dist/app/session-shell/session-shell-root.d.ts +74 -120
  46. package/dist/app/session-shell/session-shell-root.js +82 -115
  47. package/dist/app/session-shell/session-shell.d.ts +13 -16
  48. package/dist/app/session-shell/session-shell.js +149 -314
  49. package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
  50. package/dist/app/session-shell/session-viewport-controller.js +5 -8
  51. package/dist/app/session-shell/settings-bindings.d.ts +24 -2
  52. package/dist/app/session-shell/settings-bindings.js +24 -0
  53. package/dist/app/session-shell/share-operation.d.ts +3 -3
  54. package/dist/app/session-shell/share-operation.js +4 -6
  55. package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
  56. package/dist/app/session-shell/shell-clipboard.js +119 -0
  57. package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
  58. package/dist/app/session-shell/shell-editor-factory.js +13 -15
  59. package/dist/app/session-shell/shell-host.d.ts +16 -17
  60. package/dist/app/session-shell/shell-host.js +20 -37
  61. package/dist/app/session-shell/shell-layout.d.ts +2 -2
  62. package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
  63. package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
  64. package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
  65. package/dist/app/session-shell/suggestion-surface.js +1 -1
  66. package/dist/app/session-shell/system-clipboard.d.ts +2 -14
  67. package/dist/app/session-shell/system-clipboard.js +2 -7
  68. package/dist/app/session-shell/transcript-document.d.ts +12 -10
  69. package/dist/app/session-shell/transcript-document.js +15 -41
  70. package/dist/app/session-shell/viewport-layout.d.ts +2 -2
  71. package/dist/app/session-shell/workflow-output.d.ts +5 -3
  72. package/dist/app/session-shell/workflow-output.js +13 -15
  73. package/dist/app/session-shell/workflow-router.d.ts +1 -3
  74. package/dist/app/session-shell/workflow-router.js +1 -4
  75. package/dist/cli/dispatch.d.ts +1 -11
  76. package/dist/cli/dispatch.js +5 -92
  77. package/dist/cli/package-messages.d.ts +0 -1
  78. package/dist/cli/package-messages.js +1 -1
  79. package/dist/cli/session-context.d.ts +1 -1
  80. package/dist/cli/session-context.js +5 -7
  81. package/dist/cli/uninstall.d.ts +4 -7
  82. package/dist/cli/uninstall.js +6 -35
  83. package/dist/cli/version-stats.js +4 -7
  84. package/dist/composition/owned-settings.d.ts +2 -2
  85. package/dist/composition/owned-settings.js +0 -4
  86. package/dist/composition/owned-ui.d.ts +3 -25
  87. package/dist/composition/owned-ui.js +37 -113
  88. package/dist/composition/reference-selection-options.d.ts +1 -1
  89. package/dist/composition/reference-selection-options.js +1 -1
  90. package/dist/composition/release-update-observation.d.ts +4 -4
  91. package/dist/composition/release-update-observation.js +17 -47
  92. package/dist/composition/session-backend.d.ts +0 -1
  93. package/dist/composition/session-runtime-registry.d.ts +5 -4
  94. package/dist/composition/settings-route-host.d.ts +0 -7
  95. package/dist/composition/settings-route-host.js +7 -20
  96. package/dist/composition/settings-search-input.d.ts +2 -1
  97. package/dist/composition/startup-route.d.ts +2 -3
  98. package/dist/composition/startup-route.js +2 -3
  99. package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
  100. package/dist/contracts/owned-ui/index.d.ts +2 -1
  101. package/dist/contracts/owned-ui/model.d.ts +0 -3
  102. package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
  103. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
  104. package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
  105. package/dist/contracts/presentation/component.d.ts +17 -0
  106. package/dist/contracts/presentation/component.js +8 -0
  107. package/dist/contracts/presentation/index.d.ts +6 -15
  108. package/dist/contracts/presentation/index.js +2 -0
  109. package/dist/contracts/presentation/terminal.d.ts +290 -0
  110. package/dist/contracts/presentation/theme.d.ts +46 -0
  111. package/dist/features/launch/development-launch.js +1 -2
  112. package/dist/features/launch/index.d.ts +1 -1
  113. package/dist/features/launch/intent.d.ts +1 -3
  114. package/dist/features/launch/intent.js +2 -4
  115. package/dist/features/launch/runtime-selection.d.ts +2 -2
  116. package/dist/features/launch/runtime-selection.js +2 -2
  117. package/dist/features/launch/session-context.d.ts +2 -2
  118. package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
  119. package/dist/features/owned-ui/project-trust-prompt.js +1 -1
  120. package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
  121. package/dist/features/owned-ui/reference-screen-app.js +2 -9
  122. package/dist/features/owned-ui/release-note-state.d.ts +2 -1
  123. package/dist/features/owned-ui/settings-app.d.ts +0 -6
  124. package/dist/features/owned-ui/settings-app.js +42 -254
  125. package/dist/features/owned-ui/settings-edits.d.ts +31 -0
  126. package/dist/features/owned-ui/settings-edits.js +139 -0
  127. package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
  128. package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
  129. package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
  130. package/dist/features/prompt-history/service.d.ts +3 -2
  131. package/dist/foundation/launch-context/index.d.ts +0 -12
  132. package/dist/foundation/launch-context/index.js +0 -26
  133. package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
  134. package/dist/foundation/lifecycle/claim-gate.js +37 -0
  135. package/dist/foundation/lifecycle/index.d.ts +5 -9
  136. package/dist/foundation/lifecycle/index.js +3 -4
  137. package/dist/foundation/lifecycle/model.d.ts +2 -59
  138. package/dist/foundation/lifecycle/model.js +0 -35
  139. package/dist/foundation/lifecycle/paths.d.ts +0 -24
  140. package/dist/foundation/lifecycle/paths.js +0 -40
  141. package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
  142. package/dist/foundation/lifecycle/process-liveness.js +18 -0
  143. package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
  144. package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
  145. package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
  146. package/dist/foundation/lifecycle/session-repository-context.js +2 -3
  147. package/dist/foundation/release/automatic-update.d.ts +6 -17
  148. package/dist/foundation/release/automatic-update.js +23 -44
  149. package/dist/foundation/release/bootstrap.d.ts +2 -25
  150. package/dist/foundation/release/bootstrap.js +37 -348
  151. package/dist/foundation/release/dependency-certification.d.ts +1 -2
  152. package/dist/foundation/release/dependency-certification.js +1 -1
  153. package/dist/foundation/release/early-accent.d.ts +2 -2
  154. package/dist/foundation/release/early-accent.js +1 -1
  155. package/dist/foundation/release/index.d.ts +10 -17
  156. package/dist/foundation/release/index.js +7 -11
  157. package/dist/foundation/release/latest-release.d.ts +3 -19
  158. package/dist/foundation/release/latest-release.js +11 -12
  159. package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
  160. package/dist/foundation/release/ordinary-launch-selection.js +1 -1
  161. package/dist/foundation/release/process-liveness.d.ts +2 -0
  162. package/dist/foundation/release/process-liveness.js +12 -0
  163. package/dist/foundation/release/release-gc.d.ts +13 -10
  164. package/dist/foundation/release/release-gc.js +37 -101
  165. package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
  166. package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
  167. package/dist/foundation/release/release-store.d.ts +2 -2
  168. package/dist/foundation/release/release-store.js +2 -2
  169. package/dist/foundation/release/restart-certification.js +1 -1
  170. package/dist/foundation/release/update-activation.d.ts +2 -9
  171. package/dist/foundation/release/update-activation.js +30 -45
  172. package/dist/foundation/release/update-execution-lease.d.ts +2 -3
  173. package/dist/foundation/release/update-execution-lease.js +2 -2
  174. package/dist/foundation/release/update-launch.d.ts +2 -4
  175. package/dist/foundation/release/update-launch.js +0 -7
  176. package/dist/foundation/release/update-recovery.js +1 -1
  177. package/dist/foundation/release/update-transaction.d.ts +1 -1
  178. package/dist/foundation/release/update-transaction.js +5 -2
  179. package/dist/foundation/release/update.d.ts +2 -12
  180. package/dist/foundation/release/update.js +37 -214
  181. package/dist/foundation/session-writer-lock/index.d.ts +14 -6
  182. package/dist/foundation/session-writer-lock/index.js +48 -103
  183. package/dist/foundation/startup/startup-budget.d.ts +5 -5
  184. package/dist/foundation/startup/startup-budget.js +2 -2
  185. package/dist/foundation/startup/startup-runtime.d.ts +1 -1
  186. package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
  187. package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
  188. package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
  189. package/dist/foundation/terminal-cleanup/index.js +2 -1
  190. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
  191. package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
  192. package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
  193. package/dist/integrations/pi/components/index.d.ts +15 -9
  194. package/dist/integrations/pi/components/index.js +9 -5
  195. package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
  196. package/dist/integrations/pi/components/lazy-selectors.js +1 -1
  197. package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
  198. package/dist/integrations/pi/components/modal-frame.js +3 -23
  199. package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
  200. package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
  201. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
  202. package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
  203. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
  204. package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
  205. package/dist/integrations/pi/components/shell-footer-status.js +5 -4
  206. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  207. package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
  208. package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
  209. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
  210. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  211. package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
  212. package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
  213. package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
  214. package/dist/integrations/pi/components/skills-command.d.ts +1 -9
  215. package/dist/integrations/pi/components/skills-command.js +5 -5
  216. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
  217. package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
  218. package/dist/integrations/pi/components/theme.d.ts +9 -2
  219. package/dist/integrations/pi/components/theme.js +17 -2
  220. package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
  221. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
  222. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
  223. package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
  224. package/dist/integrations/pi/engine/adapter.d.ts +3 -6
  225. package/dist/integrations/pi/engine/adapter.js +4 -28
  226. package/dist/integrations/pi/engine/changelog.d.ts +2 -2
  227. package/dist/integrations/pi/engine/changelog.js +3 -3
  228. package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
  229. package/dist/integrations/pi/engine/compaction-progress.js +1 -1
  230. package/dist/integrations/pi/engine/conformance.d.ts +2 -1
  231. package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
  232. package/dist/integrations/pi/engine/default-model-setting.js +1 -2
  233. package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
  234. package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
  235. package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
  236. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
  237. package/dist/integrations/pi/engine/host.js +2 -2
  238. package/dist/integrations/pi/engine/message-values.d.ts +0 -1
  239. package/dist/integrations/pi/engine/message-values.js +1 -1
  240. package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
  241. package/dist/integrations/pi/engine/pending-delivery.js +3 -3
  242. package/dist/integrations/pi/engine/ports.d.ts +7 -1
  243. package/dist/integrations/pi/engine/ports.js +4 -0
  244. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
  245. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
  246. package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
  247. package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
  248. package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
  249. package/dist/integrations/pi/engine/public-main-entry.js +1 -1
  250. package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
  251. package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
  252. package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
  253. package/dist/integrations/pi/engine/repository-pr.js +1 -1
  254. package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
  255. package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
  256. package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
  257. package/dist/integrations/pi/engine/session-runtime.js +0 -2
  258. package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
  259. package/dist/integrations/pi/engine/settings-bridge.js +1 -1
  260. package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
  261. package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
  262. package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
  263. package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
  264. package/dist/integrations/pi/engine/workflow-runner.js +1 -1
  265. package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
  266. package/dist/integrations/pi/engine/workflow-support.js +4 -18
  267. package/dist/integrations/pi/engine/workflows.d.ts +5 -5
  268. package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
  269. package/dist/integrations/pi/session-presenters/components.js +75 -0
  270. package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
  271. package/dist/integrations/pi/session-presenters/index.js +1 -0
  272. package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
  273. package/dist/integrations/pi/session-presenters/presentation.js +10 -0
  274. package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
  275. package/dist/integrations/pi/session-presenters/presenters.js +3 -1
  276. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
  277. package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
  278. package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
  279. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
  280. package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
  281. package/dist/integrations/pi/tui-runtime/index.js +1 -0
  282. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
  283. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
  284. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
  285. package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
  286. package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
  287. package/dist/product-identity.d.ts +4 -6
  288. package/dist/product-identity.js +6 -11
  289. package/dist/product-identity.json +1 -40
  290. package/dist/runtime-payload-inventory.json +0 -3
  291. package/dist/ui/components/index.d.ts +4 -4
  292. package/dist/ui/components/index.js +2 -2
  293. package/dist/ui/components/selection-copy.d.ts +0 -1
  294. package/dist/ui/components/selection-copy.js +0 -12
  295. package/dist/ui/components/submitted-prompt.d.ts +3 -13
  296. package/dist/ui/components/submitted-prompt.js +8 -41
  297. package/dist/ui/components/theme.d.ts +4 -19
  298. package/dist/ui/components/theme.js +6 -0
  299. package/dist/ui/components/transcript-viewport.d.ts +1 -3
  300. package/dist/ui/components/transcript-viewport.js +1 -4
  301. package/dist/ui/settings/declarations.d.ts +2 -97
  302. package/dist/ui/settings/declarations.js +2 -78
  303. package/dist/ui/settings/early-accent.js +1 -1
  304. package/dist/ui/settings/index.d.ts +3 -5
  305. package/dist/ui/settings/index.js +2 -3
  306. package/dist/ui/settings/manager.d.ts +0 -4
  307. package/dist/ui/settings/manager.js +6 -62
  308. package/dist/ui/settings/resolution.d.ts +6 -18
  309. package/dist/ui/settings/resolution.js +4 -103
  310. package/dist/ui/settings/sections.d.ts +0 -4
  311. package/dist/ui/settings/sections.js +1 -1
  312. package/docs/architecture/boundaries.md +23 -40
  313. package/docs/architecture/code-documentation.md +2 -2
  314. package/docs/architecture/internal-naming.md +11 -17
  315. package/docs/architecture/project-structure.md +13 -16
  316. package/docs/architecture/resource-and-data-policy.md +16 -31
  317. package/docs/architecture/toolchain.md +14 -19
  318. package/docs/architecture/ui-reference-provenance.md +2 -2
  319. package/docs/ci-release-runbook.md +5 -5
  320. package/docs/features/launch-profiles.md +11 -17
  321. package/docs/features/prompt-history.md +10 -11
  322. package/docs/local-worktree-cleanup.md +28 -1
  323. package/docs/manual-owned-ui-checkpoint.md +0 -1
  324. package/docs/validation.md +5 -11
  325. package/docs/worktree-link-recovery.md +6 -6
  326. package/package.json +7 -20
  327. package/bin/guardian.js +0 -42
  328. package/bin/supervisor.js +0 -7
  329. package/bin/tab-launch-context.d.ts +0 -27
  330. package/bin/tab-launch-context.js +0 -94
  331. package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
  332. package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
  333. package/dist/cli/tabs-request.d.ts +0 -7
  334. package/dist/cli/tabs.d.ts +0 -14
  335. package/dist/cli/tabs.js +0 -151
  336. package/dist/composition/resident-tab-bridge.d.ts +0 -41
  337. package/dist/composition/resident-tab-bridge.js +0 -209
  338. package/dist/composition/utility-tab.d.ts +0 -28
  339. package/dist/composition/utility-tab.js +0 -244
  340. package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
  341. package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
  342. package/dist/features/resident-tab/auto-name.d.ts +0 -11
  343. package/dist/features/resident-tab/auto-name.js +0 -44
  344. package/dist/features/resident-tab/index.d.ts +0 -5
  345. package/dist/features/resident-tab/index.js +0 -7
  346. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
  347. package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
  348. package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
  349. package/dist/features/resident-tab/shortcut-declarations.js +0 -26
  350. package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
  351. package/dist/features/resident-tab/shortcut-projection.js +0 -64
  352. package/dist/features/resident-tab/status-deriver.d.ts +0 -10
  353. package/dist/features/resident-tab/status-deriver.js +0 -12
  354. package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
  355. package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
  356. package/dist/foundation/launch-guardian/index.d.ts +0 -2
  357. package/dist/foundation/launch-guardian/index.js +0 -1
  358. package/dist/foundation/launch-guardian/main.d.ts +0 -39
  359. package/dist/foundation/launch-guardian/main.js +0 -232
  360. package/dist/foundation/lifecycle/commands.d.ts +0 -40
  361. package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
  362. package/dist/foundation/lifecycle/launch-instance.js +0 -134
  363. package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
  364. package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
  365. package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
  366. package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
  367. package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
  368. package/dist/foundation/process-containment/addon-containment.js +0 -139
  369. package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
  370. package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
  371. package/dist/foundation/process-containment/addon.d.ts +0 -47
  372. package/dist/foundation/process-containment/addon.js +0 -57
  373. package/dist/foundation/process-containment/artifact.d.ts +0 -1
  374. package/dist/foundation/process-containment/artifact.js +0 -35
  375. package/dist/foundation/process-containment/contracts.d.ts +0 -33
  376. package/dist/foundation/process-containment/contracts.js +0 -35
  377. package/dist/foundation/process-containment/index.d.ts +0 -9
  378. package/dist/foundation/process-containment/index.js +0 -7
  379. package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
  380. package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
  381. package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
  382. package/dist/foundation/process-containment/native-process-inspector.js +0 -21
  383. package/dist/foundation/protocol/client.d.ts +0 -18
  384. package/dist/foundation/protocol/client.js +0 -130
  385. package/dist/foundation/protocol/index.d.ts +0 -3
  386. package/dist/foundation/protocol/index.js +0 -2
  387. package/dist/foundation/protocol/messages.d.ts +0 -90
  388. package/dist/foundation/protocol/messages.js +0 -100
  389. package/dist/foundation/release/cohort-selection.d.ts +0 -33
  390. package/dist/foundation/release/cohort-selection.js +0 -67
  391. package/dist/foundation/release/endpoint-lock.d.ts +0 -2
  392. package/dist/foundation/release/endpoint-lock.js +0 -37
  393. package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
  394. package/dist/foundation/release/endpoint-recovery.js +0 -45
  395. package/dist/foundation/release/endpoints.d.ts +0 -32
  396. package/dist/foundation/release/endpoints.js +0 -152
  397. package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
  398. package/dist/foundation/release/prepared-update-activation.js +0 -27
  399. package/dist/foundation/release/process-cleanup.d.ts +0 -14
  400. package/dist/foundation/release/process-cleanup.js +0 -76
  401. package/dist/foundation/release/supervisor-identity.d.ts +0 -15
  402. package/dist/foundation/release/supervisor-identity.js +0 -63
  403. package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
  404. package/dist/foundation/resident-tabs/boot-identity.js +0 -16
  405. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
  406. package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
  407. package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
  408. package/dist/foundation/resident-tabs/bridge-client.js +0 -327
  409. package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
  410. package/dist/foundation/resident-tabs/continuity.js +0 -63
  411. package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
  412. package/dist/foundation/resident-tabs/doctor.js +0 -166
  413. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
  414. package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
  415. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
  416. package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
  417. package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
  418. package/dist/foundation/resident-tabs/fault-injection.js +0 -26
  419. package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
  420. package/dist/foundation/resident-tabs/fixture-control.js +0 -35
  421. package/dist/foundation/resident-tabs/host-entry.js +0 -17
  422. package/dist/foundation/resident-tabs/index.d.ts +0 -15
  423. package/dist/foundation/resident-tabs/index.js +0 -10
  424. package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
  425. package/dist/foundation/resident-tabs/maintenance.js +0 -75
  426. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
  427. package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
  428. package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
  429. package/dist/foundation/resident-tabs/progress-observation.js +0 -150
  430. package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
  431. package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
  432. package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
  433. package/dist/foundation/resident-tabs/protocol.js +0 -195
  434. package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
  435. package/dist/foundation/resident-tabs/recovery.js +0 -205
  436. package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
  437. package/dist/foundation/resident-tabs/release-holds.js +0 -78
  438. package/dist/foundation/resident-tabs/routes.d.ts +0 -5
  439. package/dist/foundation/resident-tabs/routes.js +0 -5
  440. package/dist/foundation/resident-tabs/routing.d.ts +0 -11
  441. package/dist/foundation/resident-tabs/routing.js +0 -10
  442. package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
  443. package/dist/foundation/resident-tabs/runtime-control.js +0 -74
  444. package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
  445. package/dist/foundation/resident-tabs/session-sync.js +0 -37
  446. package/dist/foundation/resident-tabs/settings.d.ts +0 -16
  447. package/dist/foundation/resident-tabs/settings.js +0 -60
  448. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
  449. package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
  450. package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
  451. package/dist/foundation/resident-tabs/zip-archive.js +0 -56
  452. package/dist/foundation/storage/control-store.d.ts +0 -20
  453. package/dist/foundation/storage/control-store.js +0 -331
  454. package/dist/foundation/storage/index.d.ts +0 -1
  455. package/dist/foundation/storage/index.js +0 -1
  456. package/dist/foundation/supervision/index.d.ts +0 -3
  457. package/dist/foundation/supervision/index.js +0 -3
  458. package/dist/foundation/supervision/main.d.ts +0 -1
  459. package/dist/foundation/supervision/main.js +0 -86
  460. package/dist/foundation/supervision/paths.d.ts +0 -1
  461. package/dist/foundation/supervision/paths.js +0 -1
  462. package/dist/foundation/supervision/server.d.ts +0 -46
  463. package/dist/foundation/supervision/server.js +0 -611
  464. package/dist/integrations/pi/components/components.d.ts +0 -4
  465. package/dist/integrations/pi/components/components.js +0 -48
  466. package/dist/integrations/pi/components/conformance.d.ts +0 -18
  467. package/dist/integrations/pi/components/conformance.js +0 -70
  468. package/dist/integrations/pi/components/shell-components.d.ts +0 -7
  469. package/dist/integrations/pi/components/shell-components.js +0 -7
  470. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
  471. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
  472. package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
  473. package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
  474. package/dist/native/darwin-arm64/manifest.json +0 -23
  475. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  476. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
  477. package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
  478. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  479. package/dist/native/darwin-x64/manifest.json +0 -23
  480. package/dist/native/darwin-x64/process-guardian.node +0 -0
  481. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
  482. package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
  483. package/dist/native/darwin-x64/terminal-host.node +0 -0
  484. package/dist/native/linux-x64/manifest.json +0 -23
  485. package/dist/native/linux-x64/process-guardian.node +0 -0
  486. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
  487. package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
  488. package/dist/native/linux-x64/terminal-host.node +0 -0
  489. package/dist/native/win32-x64/manifest.json +0 -23
  490. package/dist/native/win32-x64/process-guardian.node +0 -0
  491. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
  492. package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
  493. package/dist/native/win32-x64/terminal-host.node +0 -0
  494. package/dist/ui/settings/migrations.d.ts +0 -19
  495. package/dist/ui/settings/migrations.js +0 -209
  496. package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
  497. package/dist/ui/settings/progress-palette.generated.js +0 -139
  498. package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
  499. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
  500. package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
  501. package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
  502. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
  503. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
  504. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
  505. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
  506. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
  507. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
  508. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
  509. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
  510. package/docs/architecture/native-fixture-isolation.md +0 -23
  511. package/docs/architecture/process-guardian-provenance.md +0 -36
  512. package/docs/architecture/resident-tabs-requirements.md +0 -18
  513. package/docs/architecture/resident-tabs.md +0 -668
  514. package/docs/architecture/terminal-host-proof-gate.md +0 -34
  515. package/docs/architecture/terminal-host-provenance.md +0 -81
  516. package/docs/architecture/terminal-host-spike-evidence.md +0 -39
  517. package/docs/launch-recovery.md +0 -23
  518. package/docs/manual-launch-instance-acceptance.md +0 -43
  519. package/docs/manual-resident-tabs-acceptance.md +0 -51
  520. /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
  521. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
  522. /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
  523. /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
  524. /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
@@ -1,67 +0,0 @@
1
- export function selectCohortLaunch(candidate, state, endpoint, probe) {
2
- if (endpoint && probe === "live-verified") {
3
- const retained = state.releases[endpoint.releaseId];
4
- if (!retained || retained.releaseRoot !== endpoint.releaseRoot || retained.contentDigest !== endpoint.contentDigest) {
5
- return {
6
- action: "blocked",
7
- releaseId: endpoint.releaseId,
8
- releaseRoot: endpoint.releaseRoot,
9
- reason: "live supervisor identity does not match a retained verified release record",
10
- pid: endpoint.pid,
11
- };
12
- }
13
- if (endpoint.releaseId !== candidate.releaseId && endpoint.ownership.liveInstanceIds.length === 0) {
14
- return {
15
- action: "replace-idle-cohort",
16
- releaseId: candidate.releaseId,
17
- releaseRoot: candidate.releaseRoot,
18
- reason: "older cohort is idle and can release ownership for verified candidate activation",
19
- pid: endpoint.pid,
20
- };
21
- }
22
- return {
23
- action: "launch-retained-ui",
24
- releaseId: endpoint.releaseId,
25
- releaseRoot: endpoint.releaseRoot,
26
- reason: endpoint.releaseId === candidate.releaseId
27
- ? "live supervisor already owns the installed release cohort"
28
- : "live supervisor owns a non-resumable generation; candidate remains pending",
29
- recordPending: endpoint.releaseId !== candidate.releaseId,
30
- };
31
- }
32
- if (endpoint && probe === "unresponsive") {
33
- // Security: even an empty persisted list cannot authorize killing an unresponsive process.
34
- return {
35
- action: "blocked",
36
- releaseId: endpoint.releaseId,
37
- releaseRoot: endpoint.releaseRoot,
38
- reason: "the background service did not respond after automatic recovery; retry shortly",
39
- pid: endpoint.pid,
40
- };
41
- }
42
- if (endpoint && probe === "identity-mismatch") {
43
- return {
44
- action: "blocked",
45
- releaseId: endpoint.releaseId,
46
- releaseRoot: endpoint.releaseRoot,
47
- reason: "endpoint handshake, boot nonce, or process start identity did not match durable ownership metadata",
48
- pid: endpoint.pid,
49
- };
50
- }
51
- const active = state.references.active ? state.releases[state.references.active] : undefined;
52
- const approvedCandidate = state.releases[candidate.releaseId]?.approval === "approved";
53
- if (approvedCandidate || !active) {
54
- return {
55
- action: "activate-candidate",
56
- releaseId: candidate.releaseId,
57
- releaseRoot: candidate.releaseRoot,
58
- reason: approvedCandidate ? "approved candidate can become the active cohort" : "initial verified release can be certified and activated",
59
- };
60
- }
61
- return {
62
- action: "start-active",
63
- releaseId: active.releaseId,
64
- releaseRoot: active.releaseRoot,
65
- reason: "candidate is not approved; retaining the active release",
66
- };
67
- }
@@ -1,2 +0,0 @@
1
- /** Serialize endpoint publication and retirement using a lock released by the OS on process death. */
2
- export declare function withEndpointLock<T>(metadataPath: string, operation: () => Promise<T>): Promise<T>;
@@ -1,37 +0,0 @@
1
- import { mkdir, realpath } from "node:fs/promises";
2
- import { basename, dirname, join } from "node:path";
3
- import { setTimeout as delay } from "node:timers/promises";
4
- import { acquireSupervisorGate } from "./supervisor-identity.js";
5
- /** Serialize endpoint publication and retirement using a lock released by the OS on process death. */
6
- export async function withEndpointLock(metadataPath, operation) {
7
- let authority;
8
- try {
9
- await mkdir(dirname(metadataPath), { recursive: true, mode: 0o700 });
10
- authority = join(await realpath(dirname(metadataPath)), `${basename(metadataPath)}.authority`);
11
- }
12
- catch (cause) {
13
- throw Object.assign(new Error("cannot access A1 startup state; check runtime-directory permissions and free disk space", { cause }), { code: "SUPERVISOR_RECOVERY_UNAVAILABLE" });
14
- }
15
- const deadline = Date.now() + 3_000;
16
- for (;;) {
17
- let gate;
18
- try {
19
- gate = acquireSupervisorGate(authority);
20
- }
21
- catch (cause) {
22
- throw Object.assign(new Error("cannot access A1 startup coordination; check installation and runtime-directory permissions", { cause }), { code: "SUPERVISOR_RECOVERY_UNAVAILABLE" });
23
- }
24
- if (gate.acquired) {
25
- try {
26
- return await operation();
27
- }
28
- finally {
29
- gate.release();
30
- }
31
- }
32
- gate.release();
33
- if (Date.now() >= deadline)
34
- throw Object.assign(new Error("another A1 startup is still preparing; retry shortly"), { code: "SUPERVISOR_RECOVERY_BUSY" });
35
- await delay(20);
36
- }
37
- }
@@ -1,10 +0,0 @@
1
- import type { SupervisorEndpointMetadata } from "./cohort-state.js";
2
- interface SupervisorRecoveryOptions {
3
- readonly metadataPath: string;
4
- readonly endpoint: string;
5
- readonly matches: (metadata: SupervisorEndpointMetadata) => boolean;
6
- readonly startAndWait: () => Promise<void>;
7
- }
8
- /** Recover all launch routes identically; a retry never grants permission to kill a live process. */
9
- export declare function recoverSupervisorEndpoint(options: SupervisorRecoveryOptions): Promise<void>;
10
- export {};
@@ -1,45 +0,0 @@
1
- import { writeFile } from "node:fs/promises";
2
- import { probeOwnership, readEndpointMetadata, removeEndpointArtifacts } from "./endpoints.js";
3
- /** Recover all launch routes identically; a retry never grants permission to kill a live process. */
4
- export async function recoverSupervisorEndpoint(options) {
5
- const { metadataPath, endpoint } = options;
6
- let recovered = false;
7
- for (let attempt = 0; attempt < 3; attempt++) {
8
- const metadata = await readEndpointMetadata(metadataPath);
9
- if (metadata) {
10
- const probe = await probeOwnership(metadata);
11
- if (probe === "live-verified" && options.matches(metadata)) {
12
- if (recovered)
13
- await diagnostic(metadataPath, "recovered", attempt + 1);
14
- return;
15
- }
16
- // Concurrency: another owner may have published while an earlier identity probe was pending.
17
- if (JSON.stringify(await readEndpointMetadata(metadataPath)) !== JSON.stringify(metadata))
18
- continue;
19
- if (probe !== "dead") {
20
- await diagnostic(metadataPath, probe, attempt + 1);
21
- throw Object.assign(new Error(probe === "unresponsive"
22
- ? "A1's background service is not responding; retry shortly. Your sessions have been preserved."
23
- : "A1's background service identity changed; retry startup. Your sessions have been preserved."), {
24
- code: "SUPERVISOR_RECOVERY_BLOCKED",
25
- });
26
- }
27
- recovered = true;
28
- if (!await removeEndpointArtifacts(metadataPath, endpoint, metadata))
29
- continue;
30
- await diagnostic(metadataPath, "stale-owner-retired", attempt + 1);
31
- }
32
- // Concurrency: the child takes the same endpoint gate before binding/publication. If another launch wins,
33
- // startAndWait joins its authenticated endpoint; it never unlinks that winner's socket.
34
- await options.startAndWait();
35
- if (recovered)
36
- await diagnostic(metadataPath, "recovered", attempt + 1);
37
- return;
38
- }
39
- await diagnostic(metadataPath, "ownership-changing", 3);
40
- throw Object.assign(new Error("A1 startup changed repeatedly; retry shortly"), { code: "SUPERVISOR_RECOVERY_BUSY" });
41
- }
42
- async function diagnostic(path, reason, attempts) {
43
- // Security: one bounded summary per endpoint, no raw metadata, user paths, or session content.
44
- await writeFile(`${path}.recovery.json`, JSON.stringify({ reason, attempts, at: new Date().toISOString() }), { mode: 0o600 }).catch(() => undefined);
45
- }
@@ -1,32 +0,0 @@
1
- import type { OwnershipProbe } from "./cohort-selection.js";
2
- import { type ObserveSupervisorProcess } from "./supervisor-identity.js";
3
- import type { SupervisorEndpointMetadata } from "./cohort-state.js";
4
- import type { CohortEndpointPaths, ProductPaths } from "../lifecycle/index.js";
5
- export interface RecordedEndpoint {
6
- readonly metadata: SupervisorEndpointMetadata;
7
- readonly paths: CohortEndpointPaths;
8
- }
9
- /**
10
- * Every endpoint recorded under this runtime directory: one per cohort, plus the single
11
- * endpoint published by releases that predate cohort-scoped identity. More than one can be
12
- * live at a time, and each is validated on its own identity rather than by being the only one.
13
- */
14
- export declare function listRecordedEndpoints(paths: ProductPaths): Promise<readonly RecordedEndpoint[]>;
15
- /**
16
- * Removes the records of cohorts whose processes are gone. A record left by a cohort that
17
- * exited without cleaning up is not evidence of ownership, and a later launch should not have
18
- * to reason about it. Returns the release ids whose records were removed.
19
- */
20
- export declare function sweepDeadEndpoints(paths: ProductPaths): Promise<readonly string[]>;
21
- /** The releases that an identity-verified live cohort runs from and that must be retained. */
22
- export declare function liveReleaseIds(paths: ProductPaths): Promise<readonly string[]>;
23
- export declare function readEndpointMetadata(path: string): Promise<SupervisorEndpointMetadata | null>;
24
- export interface OwnershipProbeOptions {
25
- readonly observe?: ObserveSupervisorProcess;
26
- readonly attempts?: number;
27
- readonly timeoutMs?: number;
28
- }
29
- /** Reprobe transient failures; only native absence or a replaced generation establishes death. */
30
- export declare function probeOwnership(metadata: SupervisorEndpointMetadata, options?: OwnershipProbeOptions): Promise<OwnershipProbe>;
31
- /** Retire only a still-dead exact publication. Socket removal belongs to the gated listener. */
32
- export declare function removeEndpointArtifacts(metadataPath: string, endpoint: string, expected: SupervisorEndpointMetadata): Promise<boolean>;
@@ -1,152 +0,0 @@
1
- import { readdir, readFile, rm } from "node:fs/promises";
2
- import { connect } from "node:net";
3
- import { resolve } from "node:path";
4
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
- import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
6
- import { supervisorProcessState } from "./supervisor-identity.js";
7
- import { withEndpointLock } from "./endpoint-lock.js";
8
- /**
9
- * Every endpoint recorded under this runtime directory: one per cohort, plus the single
10
- * endpoint published by releases that predate cohort-scoped identity. More than one can be
11
- * live at a time, and each is validated on its own identity rather than by being the only one.
12
- */
13
- export async function listRecordedEndpoints(paths) {
14
- const recorded = [];
15
- // Compatibility: a cohort listener passes its scoped paths here; legacy discovery still
16
- // names the runtime directory's fixed metadata path, not that listener's own record.
17
- const legacyPath = resolve(paths.runtimeDir, PRODUCT_IDENTITY.endpoint.metadataFilename);
18
- const legacy = await readEndpointMetadata(legacyPath);
19
- if (legacy) {
20
- recorded.push({ metadata: legacy, paths: { endpoint: legacy.endpoint, endpointMetadataPath: legacyPath } });
21
- }
22
- const names = await readdir(paths.endpointsDir).catch(() => []);
23
- for (const name of names) {
24
- if (!name.endsWith(".json"))
25
- continue;
26
- const endpointMetadataPath = resolve(paths.endpointsDir, name);
27
- const metadata = await readEndpointMetadata(endpointMetadataPath);
28
- if (metadata)
29
- recorded.push({ metadata, paths: { endpoint: metadata.endpoint, endpointMetadataPath } });
30
- }
31
- return recorded;
32
- }
33
- /**
34
- * Removes the records of cohorts whose processes are gone. A record left by a cohort that
35
- * exited without cleaning up is not evidence of ownership, and a later launch should not have
36
- * to reason about it. Returns the release ids whose records were removed.
37
- */
38
- export async function sweepDeadEndpoints(paths) {
39
- const swept = [];
40
- for (const recorded of await listRecordedEndpoints(paths)) {
41
- if (await supervisorProcessState(recorded.metadata) !== "gone")
42
- continue;
43
- if (await removeEndpointArtifacts(recorded.paths.endpointMetadataPath, recorded.paths.endpoint, recorded.metadata)) {
44
- swept.push(recorded.metadata.releaseId);
45
- }
46
- }
47
- return swept;
48
- }
49
- /** The releases that an identity-verified live cohort runs from and that must be retained. */
50
- export async function liveReleaseIds(paths) {
51
- const recorded = await listRecordedEndpoints(paths);
52
- const ownership = await Promise.all(recorded.map(async (endpoint) => ({
53
- releaseId: endpoint.metadata.releaseId,
54
- probe: await probeOwnership(endpoint.metadata),
55
- })));
56
- return [...new Set(ownership.filter(item => item.probe === "live-verified").map(item => item.releaseId))].sort();
57
- }
58
- export async function readEndpointMetadata(path) {
59
- try {
60
- const value = JSON.parse(await readFile(path, "utf8"));
61
- const ownership = value.ownership;
62
- const liveInstanceIds = Array.isArray(ownership?.liveInstanceIds)
63
- ? ownership.liveInstanceIds
64
- : Array.isArray(ownership?.liveGenerationIds) ? ownership.liveGenerationIds : null;
65
- const nonResumableInstanceIds = Array.isArray(ownership?.nonResumableInstanceIds)
66
- ? ownership.nonResumableInstanceIds
67
- : Array.isArray(ownership?.nonResumableGenerationIds) ? ownership.nonResumableGenerationIds : null;
68
- const uncertainInstanceIds = Array.isArray(ownership?.uncertainInstanceIds) ? ownership.uncertainInstanceIds : [];
69
- if (!value || value.schema !== PRODUCT_IDENTITY.protocol.supervisorSchema || typeof value.supervisorId !== "string" || typeof value.endpoint !== "string" || !Number.isSafeInteger(value.pid)
70
- || typeof value.pidStartIdentity !== "string" || typeof value.bootNonce !== "string" || typeof value.releaseId !== "string"
71
- || typeof value.releaseRoot !== "string" || typeof value.contentDigest !== "string" || !ownership
72
- || !isStringArray(liveInstanceIds) || !isStringArray(nonResumableInstanceIds) || !isStringArray(uncertainInstanceIds)) {
73
- return null;
74
- }
75
- return {
76
- ...value,
77
- ownership: {
78
- ...ownership,
79
- liveInstanceIds,
80
- nonResumableInstanceIds,
81
- uncertainInstanceIds,
82
- },
83
- };
84
- }
85
- catch {
86
- return null;
87
- }
88
- }
89
- /** Reprobe transient failures; only native absence or a replaced generation establishes death. */
90
- export async function probeOwnership(metadata, options = {}) {
91
- const attempts = options.attempts ?? 3;
92
- for (let attempt = 0; attempt < attempts; attempt++) {
93
- const identity = await requestIdentity(metadata.endpoint, options.timeoutMs ?? 500);
94
- if (identity) {
95
- return identity.supervisorId === metadata.supervisorId
96
- && identity.bootNonce === metadata.bootNonce
97
- && identity.pidStartIdentity === metadata.pidStartIdentity
98
- && identity.releaseId === metadata.releaseId
99
- ? "live-verified" : "identity-mismatch";
100
- }
101
- if (await supervisorProcessState(metadata, options.observe) === "gone")
102
- return "dead";
103
- if (attempt + 1 < attempts)
104
- await new Promise(resolvePromise => setTimeout(resolvePromise, 50));
105
- }
106
- return "unresponsive";
107
- }
108
- async function requestIdentity(endpoint, timeoutMs) {
109
- return await new Promise(resolvePromise => {
110
- const socket = connect(endpoint);
111
- const decoder = new LineFrameDecoder();
112
- let settled = false;
113
- const finish = (value) => {
114
- if (settled)
115
- return;
116
- settled = true;
117
- clearTimeout(timer);
118
- socket.destroy();
119
- resolvePromise(value);
120
- };
121
- socket.once("error", () => finish(null));
122
- socket.once("connect", () => socket.write(encodeFrame({ type: "identity-probe" })));
123
- socket.on("data", chunk => {
124
- try {
125
- const message = decoder.push(chunk)[0];
126
- if (message?.type === "identity" && typeof message.supervisorId === "string" && typeof message.bootNonce === "string"
127
- && typeof message.pidStartIdentity === "string" && typeof message.releaseId === "string") {
128
- finish({ supervisorId: message.supervisorId, bootNonce: message.bootNonce, pidStartIdentity: message.pidStartIdentity, releaseId: message.releaseId });
129
- }
130
- }
131
- catch {
132
- finish(null);
133
- }
134
- });
135
- const timer = setTimeout(() => finish(null), timeoutMs);
136
- });
137
- }
138
- function isStringArray(value) {
139
- return Array.isArray(value) && value.every(item => typeof item === "string" && item.length > 0);
140
- }
141
- /** Retire only a still-dead exact publication. Socket removal belongs to the gated listener. */
142
- export async function removeEndpointArtifacts(metadataPath, endpoint, expected) {
143
- return await withEndpointLock(metadataPath, async () => {
144
- const current = await readEndpointMetadata(metadataPath);
145
- if (!current || current.endpoint !== endpoint || JSON.stringify(current) !== JSON.stringify(expected))
146
- return false;
147
- if (await supervisorProcessState(current) !== "gone" || await probeOwnership(current, { attempts: 1 }) !== "dead")
148
- return false;
149
- await rm(metadataPath, { force: true });
150
- return true;
151
- });
152
- }
@@ -1,3 +0,0 @@
1
- import { type UpdateActivationCallbacks, type UpdateActivationRequest } from "./update-activation.js";
2
- /** Retry only the selection boundary for an exact candidate already materialized and certified. */
3
- export declare function activatePreparedRelease(request: Omit<UpdateActivationRequest, "packageRoot">, callbacks: UpdateActivationCallbacks): Promise<void>;
@@ -1,27 +0,0 @@
1
- import { resolve } from "node:path";
2
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
3
- import { assertContinuityOrBlock } from "./update-activation.js";
4
- import { ensureSupervisor } from "./bootstrap.js";
5
- import { CohortStateStore } from "./cohort-state.js";
6
- import { resolveProductPaths } from "../lifecycle/index.js";
7
- import { readCertifiedReleaseManifest } from "./release-store.js";
8
- /** Retry only the selection boundary for an exact candidate already materialized and certified. */
9
- export async function activatePreparedRelease(request, callbacks) {
10
- const stateStore = new CohortStateStore(request.dataDir);
11
- const state = await stateStore.read();
12
- const releaseId = state.references.pending;
13
- const record = releaseId === null ? undefined : state.releases[releaseId];
14
- if (record === undefined || record.approval !== "approved" || record.packageVersion !== request.targetVersion
15
- || state.references.approved !== releaseId) {
16
- throw new Error(`no certified prepared release matches target ${request.targetVersion}`);
17
- }
18
- const candidate = await readCertifiedReleaseManifest(record, resolve(request.dataDir, "releases"));
19
- const paths = resolveProductPaths(request.environment);
20
- const continuity = { releaseRoot: candidate.releaseRoot, dataDir: request.dataDir, environment: request.environment,
21
- profileRoot: request.environment[PRODUCT_IDENTITY.environment.profileHome] ?? paths.configDir, runtimeDir: paths.runtimeDir };
22
- await assertContinuityOrBlock(continuity);
23
- await ensureSupervisor(candidate, request.environment);
24
- await assertContinuityOrBlock(continuity);
25
- await stateStore.activate(candidate.releaseId);
26
- await callbacks.phase("active-reference-committed");
27
- }
@@ -1,14 +0,0 @@
1
- import type { SupervisorEndpointMetadata } from "./cohort-state.js";
2
- export interface CleanupDiagnostics {
3
- readonly pid: number;
4
- readonly attempted: readonly string[];
5
- readonly terminated: boolean;
6
- readonly elapsedMs: number;
7
- }
8
- export declare function processIsAlive(pid: number): boolean;
9
- export declare function cleanupProvenIdleOwner(metadata: SupervisorEndpointMetadata, graceMs?: number): Promise<CleanupDiagnostics>;
10
- export declare function cleanupVerifiedOwner(metadata: SupervisorEndpointMetadata, options?: {
11
- readonly graceMs?: number;
12
- readonly allowLiveInstances?: boolean;
13
- readonly reason?: "stale-idle-owner" | "explicit-update" | "legacy-mutable-install";
14
- }): Promise<CleanupDiagnostics>;
@@ -1,76 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { supervisorProcessState } from "./supervisor-identity.js";
3
- export function processIsAlive(pid) {
4
- if (!Number.isSafeInteger(pid) || pid <= 0)
5
- return false;
6
- try {
7
- process.kill(pid, 0);
8
- return true;
9
- }
10
- catch (error) {
11
- return error instanceof Error && "code" in error && error.code === "EPERM";
12
- }
13
- }
14
- export async function cleanupProvenIdleOwner(metadata, graceMs = 1_500) {
15
- return await cleanupVerifiedOwner(metadata, { graceMs, allowLiveInstances: false });
16
- }
17
- export async function cleanupVerifiedOwner(metadata, options = {}) {
18
- const graceMs = options.graceMs ?? 1_500;
19
- if (!options.allowLiveInstances && (metadata.ownership.liveInstanceIds.length > 0 || metadata.ownership.nonResumableInstanceIds.length > 0 || metadata.ownership.uncertainInstanceIds.length > 0)) {
20
- throw new Error("refusing to terminate an owner with recorded live generations");
21
- }
22
- const started = Date.now();
23
- const attempted = [];
24
- const state = await supervisorProcessState(metadata);
25
- if (state === "gone")
26
- return { pid: metadata.pid, attempted: ["owner-already-dead"], terminated: true, elapsedMs: Date.now() - started };
27
- // Security: ordinary recovery never signals a live owner, even with an empty durable list.
28
- // Explicit update cleanup also needs the exact native generation, not merely an old handshake.
29
- if (!options.allowLiveInstances || state !== "same") {
30
- return { pid: metadata.pid, attempted: ["live-owner-preserved"], terminated: false, elapsedMs: Date.now() - started };
31
- }
32
- attempted.push("graceful-termination");
33
- await terminate(metadata.pid, false);
34
- if (await waitUntilDead(metadata.pid, graceMs))
35
- return { pid: metadata.pid, attempted, terminated: true, elapsedMs: Date.now() - started };
36
- if (await supervisorProcessState(metadata) !== "same") {
37
- return { pid: metadata.pid, attempted, terminated: await supervisorProcessState(metadata) === "gone", elapsedMs: Date.now() - started };
38
- }
39
- attempted.push("forced-process-tree-termination");
40
- await terminate(metadata.pid, true);
41
- const terminated = await waitUntilDead(metadata.pid, graceMs);
42
- return { pid: metadata.pid, attempted, terminated, elapsedMs: Date.now() - started };
43
- }
44
- async function terminate(pid, force) {
45
- if (process.platform === "win32") {
46
- await new Promise(resolvePromise => {
47
- const child = spawn("taskkill.exe", ["/PID", String(pid), "/T", ...(force ? ["/F"] : [])], {
48
- shell: false,
49
- windowsHide: true,
50
- stdio: "ignore",
51
- });
52
- child.once("error", () => resolvePromise());
53
- child.once("close", () => resolvePromise());
54
- });
55
- return;
56
- }
57
- const signal = force ? "SIGKILL" : "SIGTERM";
58
- try {
59
- process.kill(-pid, signal);
60
- }
61
- catch {
62
- try {
63
- process.kill(pid, signal);
64
- }
65
- catch { }
66
- }
67
- }
68
- async function waitUntilDead(pid, timeoutMs) {
69
- const deadline = Date.now() + timeoutMs;
70
- while (Date.now() < deadline) {
71
- if (!processIsAlive(pid))
72
- return true;
73
- await new Promise(resolvePromise => setTimeout(resolvePromise, 25));
74
- }
75
- return !processIsAlive(pid);
76
- }
@@ -1,15 +0,0 @@
1
- import type { NativeProcessIdentity } from "../lifecycle/index.js";
2
- import type { SupervisorEndpointMetadata } from "./cohort-state.js";
3
- export type SupervisorProcessState = "same" | "gone" | "unknown";
4
- export type ObserveSupervisorProcess = (pid: number) => Promise<NativeProcessIdentity | null>;
5
- /** Inspection code comes from this runtime, never from a path in a stale endpoint record. */
6
- export declare function observeSupervisorProcess(pid: number): Promise<NativeProcessIdentity | null>;
7
- /** New supervisors use a native creation token as their opaque handshake identity as well. */
8
- export declare function currentSupervisorStartIdentity(): string;
9
- /** The current runtime also owns the OS gate ABI; metadata cannot choose a different addon. */
10
- export declare function acquireSupervisorGate(path: string): {
11
- readonly acquired: boolean;
12
- release(): void;
13
- };
14
- /** A failed inspection is uncertainty, never permission to erase a possibly live owner. */
15
- export declare function supervisorProcessState(metadata: SupervisorEndpointMetadata, observe?: ObserveSupervisorProcess): Promise<SupervisorProcessState>;
@@ -1,63 +0,0 @@
1
- import { fileURLToPath } from "node:url";
2
- import { createNativeProcessInspector, loadProcessGuardianAddon, resolveProcessGuardianPath } from "../process-containment/index.js";
3
- const ownRoot = fileURLToPath(new URL("../../../", import.meta.url));
4
- /** Inspection code comes from this runtime, never from a path in a stale endpoint record. */
5
- export async function observeSupervisorProcess(pid) {
6
- return await (await createNativeProcessInspector(process.env, process.platform, ownRoot)).observe(pid);
7
- }
8
- /** New supervisors use a native creation token as their opaque handshake identity as well. */
9
- export function currentSupervisorStartIdentity() {
10
- try {
11
- const token = loadProcessGuardianAddon(resolveProcessGuardianPath(ownRoot, process.env)).inspectProcessStart(process.pid);
12
- if (!validNativeToken(token))
13
- throw new Error("native process identity is unavailable");
14
- return token;
15
- }
16
- catch (cause) {
17
- throw Object.assign(new Error("cannot verify A1's background service process; check installation and process-inspection permissions", { cause }), { code: "SUPERVISOR_RECOVERY_UNAVAILABLE" });
18
- }
19
- }
20
- /** The current runtime also owns the OS gate ABI; metadata cannot choose a different addon. */
21
- export function acquireSupervisorGate(path) {
22
- const addon = loadProcessGuardianAddon(resolveProcessGuardianPath(ownRoot, process.env));
23
- if (!addon.tryAcquireProcessGate)
24
- throw new Error("this installation lacks startup recovery support; update or repair A1");
25
- return addon.tryAcquireProcessGate(path);
26
- }
27
- /** A failed inspection is uncertainty, never permission to erase a possibly live owner. */
28
- export async function supervisorProcessState(metadata, observe = observeSupervisorProcess) {
29
- let identity;
30
- try {
31
- identity = await observe(metadata.pid);
32
- }
33
- catch {
34
- return "unknown";
35
- }
36
- if (identity === null)
37
- return "gone";
38
- if (identity.pid !== metadata.pid)
39
- return "unknown";
40
- if (metadata.nativeStartIdentity !== undefined) {
41
- // Compatibility: only compare tokens of the same native format, not an old Node timestamp.
42
- if (!validNativeToken(metadata.nativeStartIdentity) || !validNativeToken(identity.startIdentity)
43
- || identity.startIdentity.split(":")[0] !== metadata.nativeStartIdentity.split(":")[0])
44
- return "unknown";
45
- return identity.startIdentity === metadata.nativeStartIdentity ? "same" : "gone";
46
- }
47
- // Compatibility: legacy publication happened after process creation. A native creation time
48
- // strictly later than that publication (with a one-second clock margin) disproves ownership;
49
- // a near timestamp is NOT proof of ownership. Linux tick-only tokens cannot prove this.
50
- const published = Date.parse(metadata.startedAt);
51
- const created = nativeCreationTime(identity.startIdentity);
52
- return Number.isFinite(published) && created !== null && created > published + 1_000 ? "gone" : "unknown";
53
- }
54
- function validNativeToken(value) {
55
- return typeof value === "string" && /^(?:windows-filetime:\d{1,20}|linux-proc-start:\d{1,20}|darwin-proc-start:\d{1,20}:\d{1,6})$/.test(value);
56
- }
57
- function nativeCreationTime(identity) {
58
- const windows = /^windows-filetime:(\d+)$/.exec(identity);
59
- if (windows)
60
- return Number(BigInt(windows[1]) / 10000n - 11644473600000n);
61
- const darwin = /^darwin-proc-start:(\d+):(\d+)$/.exec(identity);
62
- return darwin ? Number(darwin[1]) * 1_000 + Number(darwin[2]) / 1_000 : null;
63
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Mirrors the native boot matching rule. Legacy `macos-boot:<sec>:<usec>` records drift on clock
3
- * corrections, so two of them match within the tolerance; only the native host can prove one
4
- * against a current identity.
5
- */
6
- export declare function sameBootIdentity(left: string, right: string): boolean;
@@ -1,16 +0,0 @@
1
- /** Seconds a legacy clock-derived boot identity may drift and still name the same boot. */
2
- const LEGACY_BOOT_TOLERANCE_SECONDS = 2;
3
- const LEGACY_MACOS_BOOT = /^macos-boot:(\d+):\d+$/u;
4
- /**
5
- * Mirrors the native boot matching rule. Legacy `macos-boot:<sec>:<usec>` records drift on clock
6
- * corrections, so two of them match within the tolerance; only the native host can prove one
7
- * against a current identity.
8
- */
9
- export function sameBootIdentity(left, right) {
10
- if (left === right)
11
- return true;
12
- const first = LEGACY_MACOS_BOOT.exec(left)?.[1];
13
- const second = LEGACY_MACOS_BOOT.exec(right)?.[1];
14
- return first !== undefined && second !== undefined
15
- && Math.abs(Number(first) - Number(second)) <= LEGACY_BOOT_TOLERANCE_SECONDS;
16
- }
@@ -1,20 +0,0 @@
1
- import type { TerminalHostCommand } from "./ensure-terminal-host.js";
2
- export interface BoundedHostCommandResult {
3
- readonly code: number;
4
- readonly stdout: string;
5
- /** The command's last diagnostic line, bounded and stripped of control characters; never parsed. */
6
- readonly stderr: string;
7
- }
8
- export interface BoundedHostCommandLimits {
9
- /** Output beyond this many bytes fails the exchange instead of being parsed. */
10
- readonly maxStdoutBytes: number;
11
- readonly timeoutMs: number;
12
- /** Names the exchange in the timeout error. */
13
- readonly label: string;
14
- readonly environment?: NodeJS.ProcessEnv;
15
- }
16
- /**
17
- * Runs one terminal-host command whose report is small. An oversized report kills the command and
18
- * reports a failed exchange; a command that outlives its deadline is killed and rejected.
19
- */
20
- export declare function runBoundedHostCommand(command: TerminalHostCommand, arguments_: readonly string[], limits: BoundedHostCommandLimits): Promise<BoundedHostCommandResult>;