@timurproko/a1 0.2.7-dev.1245 → 0.2.7-dev.1252

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 (342) hide show
  1. package/README.md +11 -36
  2. package/bin/cli.js +2 -17
  3. package/bin/ui.js +7 -48
  4. package/dist/app/session-shell/exit-notice.d.ts +2 -2
  5. package/dist/app/session-shell/exit-notice.js +10 -10
  6. package/dist/app/session-shell/prompt-submission.d.ts +2 -4
  7. package/dist/app/session-shell/prompt-submission.js +3 -23
  8. package/dist/app/session-shell/response-copy-transport.js +1 -2
  9. package/dist/app/session-shell/session-lifecycle.d.ts +1 -2
  10. package/dist/app/session-shell/session-lifecycle.js +2 -4
  11. package/dist/app/session-shell/session-shell-root.d.ts +0 -31
  12. package/dist/app/session-shell/session-shell-root.js +3 -4
  13. package/dist/app/session-shell/session-shell.js +6 -47
  14. package/dist/app/session-shell/session-viewport-controller.js +3 -6
  15. package/dist/app/session-shell/shell-host.js +2 -18
  16. package/dist/app/session-shell/transcript-document.d.ts +1 -2
  17. package/dist/app/session-shell/transcript-document.js +3 -28
  18. package/dist/app/session-shell/workflow-output.js +1 -1
  19. package/dist/app/session-shell/workflow-router.d.ts +1 -3
  20. package/dist/app/session-shell/workflow-router.js +1 -4
  21. package/dist/cli/dispatch.d.ts +1 -11
  22. package/dist/cli/dispatch.js +5 -92
  23. package/dist/cli/session-context.js +5 -7
  24. package/dist/cli/uninstall.d.ts +1 -5
  25. package/dist/cli/uninstall.js +6 -35
  26. package/dist/cli/version-stats.js +4 -7
  27. package/dist/composition/owned-settings.d.ts +0 -1
  28. package/dist/composition/owned-settings.js +0 -1
  29. package/dist/composition/owned-ui.d.ts +2 -24
  30. package/dist/composition/owned-ui.js +11 -87
  31. package/dist/composition/release-update-observation.d.ts +4 -4
  32. package/dist/composition/release-update-observation.js +17 -47
  33. package/dist/composition/session-backend.d.ts +0 -1
  34. package/dist/composition/session-runtime-registry.d.ts +3 -3
  35. package/dist/composition/settings-route-host.d.ts +0 -7
  36. package/dist/composition/settings-route-host.js +4 -10
  37. package/dist/composition/startup-route.d.ts +0 -1
  38. package/dist/composition/startup-route.js +0 -1
  39. package/dist/contracts/owned-ui/index.d.ts +1 -1
  40. package/dist/contracts/owned-ui/model.d.ts +0 -3
  41. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
  42. package/dist/features/launch/development-launch.js +0 -1
  43. package/dist/features/launch/index.d.ts +1 -1
  44. package/dist/features/launch/intent.d.ts +1 -3
  45. package/dist/features/launch/intent.js +2 -4
  46. package/dist/features/launch/session-context.d.ts +2 -2
  47. package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
  48. package/dist/features/owned-ui/reference-screen-app.js +2 -9
  49. package/dist/features/owned-ui/settings-app.d.ts +0 -6
  50. package/dist/features/owned-ui/settings-app.js +5 -36
  51. package/dist/foundation/launch-context/index.d.ts +0 -12
  52. package/dist/foundation/launch-context/index.js +0 -26
  53. package/dist/foundation/lifecycle/claim-gate.d.ts +8 -0
  54. package/dist/foundation/lifecycle/claim-gate.js +37 -0
  55. package/dist/foundation/lifecycle/index.d.ts +5 -9
  56. package/dist/foundation/lifecycle/index.js +3 -4
  57. package/dist/foundation/lifecycle/model.d.ts +2 -59
  58. package/dist/foundation/lifecycle/model.js +0 -35
  59. package/dist/foundation/lifecycle/paths.d.ts +0 -24
  60. package/dist/foundation/lifecycle/paths.js +0 -40
  61. package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
  62. package/dist/foundation/lifecycle/process-liveness.js +18 -0
  63. package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
  64. package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
  65. package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
  66. package/dist/foundation/lifecycle/session-repository-context.js +2 -3
  67. package/dist/foundation/release/automatic-update.d.ts +1 -3
  68. package/dist/foundation/release/automatic-update.js +9 -30
  69. package/dist/foundation/release/bootstrap.d.ts +2 -25
  70. package/dist/foundation/release/bootstrap.js +33 -344
  71. package/dist/foundation/release/cohort-state.d.ts +21 -46
  72. package/dist/foundation/release/cohort-state.js +30 -62
  73. package/dist/foundation/release/dependency-certification.d.ts +1 -1
  74. package/dist/foundation/release/index.d.ts +10 -17
  75. package/dist/foundation/release/index.js +7 -11
  76. package/dist/foundation/release/latest-release.d.ts +1 -2
  77. package/dist/foundation/release/latest-release.js +1 -2
  78. package/dist/foundation/release/process-liveness.d.ts +2 -0
  79. package/dist/foundation/release/process-liveness.js +12 -0
  80. package/dist/foundation/release/release-gc.d.ts +12 -9
  81. package/dist/foundation/release/release-gc.js +34 -98
  82. package/dist/foundation/release/release-store.d.ts +2 -2
  83. package/dist/foundation/release/release-store.js +2 -2
  84. package/dist/foundation/release/restart-certification.js +1 -1
  85. package/dist/foundation/release/update-activation.d.ts +2 -9
  86. package/dist/foundation/release/update-activation.js +28 -43
  87. package/dist/foundation/release/update-execution-lease.js +1 -1
  88. package/dist/foundation/release/update-launch.d.ts +0 -2
  89. package/dist/foundation/release/update-launch.js +0 -7
  90. package/dist/foundation/release/update-recovery.js +1 -1
  91. package/dist/foundation/release/update-transaction.d.ts +1 -1
  92. package/dist/foundation/release/update-transaction.js +5 -2
  93. package/dist/foundation/release/update.d.ts +2 -10
  94. package/dist/foundation/release/update.js +23 -200
  95. package/dist/foundation/session-writer-lock/index.d.ts +14 -6
  96. package/dist/foundation/session-writer-lock/index.js +48 -103
  97. package/dist/foundation/startup/startup-runtime.d.ts +1 -1
  98. package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
  99. package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
  100. package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
  101. package/dist/foundation/terminal-cleanup/index.js +2 -1
  102. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
  103. package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
  104. package/dist/integrations/pi/components/index.d.ts +1 -1
  105. package/dist/integrations/pi/components/index.js +1 -1
  106. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
  107. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  108. package/dist/integrations/pi/components/shell-footer-status.js +2 -2
  109. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  110. package/dist/integrations/pi/components/shell-presenters-info.d.ts +2 -5
  111. package/dist/integrations/pi/components/shell-presenters-info.js +4 -18
  112. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
  113. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  114. package/dist/integrations/pi/components/shell-shared-facade.d.ts +0 -2
  115. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
  116. package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
  117. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
  118. package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
  119. package/dist/integrations/pi/engine/adapter.d.ts +0 -1
  120. package/dist/integrations/pi/engine/adapter.js +1 -16
  121. package/dist/integrations/pi/engine/compaction-progress.js +13 -5
  122. package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
  123. package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
  124. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +0 -1
  125. package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
  126. package/dist/integrations/pi/engine/session-runtime.js +0 -2
  127. package/dist/integrations/pi/engine/workflow-runner.js +1 -1
  128. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
  129. package/dist/integrations/pi/tui-runtime/adapter.js +2 -2
  130. package/dist/product-identity.d.ts +4 -6
  131. package/dist/product-identity.js +6 -11
  132. package/dist/product-identity.json +1 -40
  133. package/dist/runtime-payload-inventory.json +0 -3
  134. package/dist/ui/components/index.d.ts +2 -2
  135. package/dist/ui/components/index.js +1 -1
  136. package/dist/ui/components/submitted-prompt.d.ts +3 -13
  137. package/dist/ui/components/submitted-prompt.js +8 -41
  138. package/dist/ui/components/transcript-viewport.d.ts +1 -3
  139. package/dist/ui/components/transcript-viewport.js +1 -4
  140. package/dist/ui/settings/declarations.d.ts +3 -97
  141. package/dist/ui/settings/declarations.js +3 -78
  142. package/dist/ui/settings/migrations.js +18 -2
  143. package/docs/architecture/boundaries.md +22 -39
  144. package/docs/architecture/code-documentation.md +2 -2
  145. package/docs/architecture/internal-naming.md +9 -17
  146. package/docs/architecture/project-structure.md +30 -29
  147. package/docs/architecture/resource-and-data-policy.md +16 -31
  148. package/docs/architecture/toolchain.md +14 -19
  149. package/docs/architecture/ui-reference-provenance.md +2 -2
  150. package/docs/ci-release-runbook.md +6 -4
  151. package/docs/features/launch-profiles.md +11 -17
  152. package/docs/features/prompt-history.md +10 -11
  153. package/docs/local-worktree-cleanup.md +32 -1
  154. package/docs/manual-owned-ui-checkpoint.md +0 -1
  155. package/docs/openspec-archive-automation.md +11 -3
  156. package/docs/validation.md +5 -9
  157. package/docs/worktree-link-recovery.md +6 -6
  158. package/package.json +7 -19
  159. package/bin/guardian.js +0 -42
  160. package/bin/supervisor.js +0 -7
  161. package/bin/tab-launch-context.d.ts +0 -27
  162. package/bin/tab-launch-context.js +0 -94
  163. package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
  164. package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
  165. package/dist/cli/tabs-request.d.ts +0 -7
  166. package/dist/cli/tabs-request.js +0 -1
  167. package/dist/cli/tabs.d.ts +0 -14
  168. package/dist/cli/tabs.js +0 -151
  169. package/dist/composition/resident-tab-bridge.d.ts +0 -41
  170. package/dist/composition/resident-tab-bridge.js +0 -209
  171. package/dist/composition/utility-tab.d.ts +0 -28
  172. package/dist/composition/utility-tab.js +0 -244
  173. package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
  174. package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
  175. package/dist/features/resident-tab/auto-name.d.ts +0 -11
  176. package/dist/features/resident-tab/auto-name.js +0 -44
  177. package/dist/features/resident-tab/index.d.ts +0 -5
  178. package/dist/features/resident-tab/index.js +0 -7
  179. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
  180. package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
  181. package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
  182. package/dist/features/resident-tab/shortcut-declarations.js +0 -26
  183. package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
  184. package/dist/features/resident-tab/shortcut-projection.js +0 -64
  185. package/dist/features/resident-tab/status-deriver.d.ts +0 -10
  186. package/dist/features/resident-tab/status-deriver.js +0 -12
  187. package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
  188. package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
  189. package/dist/foundation/launch-guardian/index.d.ts +0 -2
  190. package/dist/foundation/launch-guardian/index.js +0 -1
  191. package/dist/foundation/launch-guardian/main.d.ts +0 -39
  192. package/dist/foundation/launch-guardian/main.js +0 -232
  193. package/dist/foundation/lifecycle/commands.d.ts +0 -40
  194. package/dist/foundation/lifecycle/commands.js +0 -1
  195. package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
  196. package/dist/foundation/lifecycle/launch-instance.js +0 -134
  197. package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
  198. package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
  199. package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
  200. package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
  201. package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
  202. package/dist/foundation/process-containment/addon-containment.js +0 -139
  203. package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
  204. package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
  205. package/dist/foundation/process-containment/addon.d.ts +0 -47
  206. package/dist/foundation/process-containment/addon.js +0 -57
  207. package/dist/foundation/process-containment/artifact.d.ts +0 -1
  208. package/dist/foundation/process-containment/artifact.js +0 -35
  209. package/dist/foundation/process-containment/contracts.d.ts +0 -33
  210. package/dist/foundation/process-containment/contracts.js +0 -35
  211. package/dist/foundation/process-containment/index.d.ts +0 -9
  212. package/dist/foundation/process-containment/index.js +0 -7
  213. package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
  214. package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
  215. package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
  216. package/dist/foundation/process-containment/native-process-inspector.js +0 -21
  217. package/dist/foundation/protocol/client.d.ts +0 -18
  218. package/dist/foundation/protocol/client.js +0 -130
  219. package/dist/foundation/protocol/index.d.ts +0 -3
  220. package/dist/foundation/protocol/index.js +0 -2
  221. package/dist/foundation/protocol/messages.d.ts +0 -90
  222. package/dist/foundation/protocol/messages.js +0 -100
  223. package/dist/foundation/release/cohort-selection.d.ts +0 -33
  224. package/dist/foundation/release/cohort-selection.js +0 -67
  225. package/dist/foundation/release/endpoint-lock.d.ts +0 -2
  226. package/dist/foundation/release/endpoint-lock.js +0 -37
  227. package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
  228. package/dist/foundation/release/endpoint-recovery.js +0 -45
  229. package/dist/foundation/release/endpoints.d.ts +0 -32
  230. package/dist/foundation/release/endpoints.js +0 -152
  231. package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
  232. package/dist/foundation/release/prepared-update-activation.js +0 -27
  233. package/dist/foundation/release/process-cleanup.d.ts +0 -14
  234. package/dist/foundation/release/process-cleanup.js +0 -76
  235. package/dist/foundation/release/supervisor-identity.d.ts +0 -15
  236. package/dist/foundation/release/supervisor-identity.js +0 -63
  237. package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
  238. package/dist/foundation/resident-tabs/boot-identity.js +0 -16
  239. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
  240. package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
  241. package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
  242. package/dist/foundation/resident-tabs/bridge-client.js +0 -327
  243. package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
  244. package/dist/foundation/resident-tabs/continuity.js +0 -63
  245. package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
  246. package/dist/foundation/resident-tabs/doctor.js +0 -166
  247. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
  248. package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
  249. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
  250. package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
  251. package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
  252. package/dist/foundation/resident-tabs/fault-injection.js +0 -26
  253. package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
  254. package/dist/foundation/resident-tabs/fixture-control.js +0 -35
  255. package/dist/foundation/resident-tabs/host-entry.d.ts +0 -1
  256. package/dist/foundation/resident-tabs/host-entry.js +0 -17
  257. package/dist/foundation/resident-tabs/index.d.ts +0 -15
  258. package/dist/foundation/resident-tabs/index.js +0 -10
  259. package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
  260. package/dist/foundation/resident-tabs/maintenance.js +0 -75
  261. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
  262. package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
  263. package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
  264. package/dist/foundation/resident-tabs/progress-observation.js +0 -150
  265. package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
  266. package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
  267. package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
  268. package/dist/foundation/resident-tabs/protocol.js +0 -195
  269. package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
  270. package/dist/foundation/resident-tabs/recovery.js +0 -205
  271. package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
  272. package/dist/foundation/resident-tabs/release-holds.js +0 -78
  273. package/dist/foundation/resident-tabs/routes.d.ts +0 -5
  274. package/dist/foundation/resident-tabs/routes.js +0 -5
  275. package/dist/foundation/resident-tabs/routing.d.ts +0 -11
  276. package/dist/foundation/resident-tabs/routing.js +0 -10
  277. package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
  278. package/dist/foundation/resident-tabs/runtime-control.js +0 -74
  279. package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
  280. package/dist/foundation/resident-tabs/session-sync.js +0 -37
  281. package/dist/foundation/resident-tabs/settings.d.ts +0 -16
  282. package/dist/foundation/resident-tabs/settings.js +0 -60
  283. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
  284. package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
  285. package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
  286. package/dist/foundation/resident-tabs/zip-archive.js +0 -56
  287. package/dist/foundation/storage/control-store.d.ts +0 -20
  288. package/dist/foundation/storage/control-store.js +0 -331
  289. package/dist/foundation/storage/index.d.ts +0 -1
  290. package/dist/foundation/storage/index.js +0 -1
  291. package/dist/foundation/supervision/index.d.ts +0 -3
  292. package/dist/foundation/supervision/index.js +0 -3
  293. package/dist/foundation/supervision/main.d.ts +0 -1
  294. package/dist/foundation/supervision/main.js +0 -86
  295. package/dist/foundation/supervision/paths.d.ts +0 -1
  296. package/dist/foundation/supervision/paths.js +0 -1
  297. package/dist/foundation/supervision/server.d.ts +0 -46
  298. package/dist/foundation/supervision/server.js +0 -606
  299. package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
  300. package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
  301. package/dist/native/darwin-arm64/manifest.json +0 -23
  302. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  303. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
  304. package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
  305. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  306. package/dist/native/darwin-x64/manifest.json +0 -23
  307. package/dist/native/darwin-x64/process-guardian.node +0 -0
  308. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
  309. package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
  310. package/dist/native/darwin-x64/terminal-host.node +0 -0
  311. package/dist/native/linux-x64/manifest.json +0 -23
  312. package/dist/native/linux-x64/process-guardian.node +0 -0
  313. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
  314. package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
  315. package/dist/native/linux-x64/terminal-host.node +0 -0
  316. package/dist/native/win32-x64/manifest.json +0 -23
  317. package/dist/native/win32-x64/process-guardian.node +0 -0
  318. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
  319. package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
  320. package/dist/native/win32-x64/terminal-host.node +0 -0
  321. package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
  322. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
  323. package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
  324. package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
  325. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
  326. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
  327. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
  328. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
  329. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
  330. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
  331. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
  332. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
  333. package/docs/architecture/native-fixture-isolation.md +0 -23
  334. package/docs/architecture/process-guardian-provenance.md +0 -36
  335. package/docs/architecture/resident-tabs-requirements.md +0 -18
  336. package/docs/architecture/resident-tabs.md +0 -668
  337. package/docs/architecture/terminal-host-proof-gate.md +0 -34
  338. package/docs/architecture/terminal-host-provenance.md +0 -81
  339. package/docs/architecture/terminal-host-spike-evidence.md +0 -39
  340. package/docs/launch-recovery.md +0 -23
  341. package/docs/manual-launch-instance-acceptance.md +0 -43
  342. package/docs/manual-resident-tabs-acceptance.md +0 -51
@@ -1,27 +1,6 @@
1
- import { createHash } from "node:crypto";
2
1
  import { homedir, platform } from "node:os";
3
2
  import { posix, win32 } from "node:path";
4
3
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
- /**
6
- * Endpoint identity for one release cohort. Two cohorts can be live at once — an update
7
- * leaves a working session on the release it started on — so the name a supervisor listens
8
- * on has to name the release as well as the runtime directory, or the two contend for one
9
- * endpoint and replacing one means ending the other.
10
- *
11
- * An explicit endpoint override keeps its single endpoint: it is how an isolated run pins
12
- * the address it is going to talk to.
13
- */
14
- export function resolveCohortEndpoint(paths, releaseId, environment = process.env, hostPlatform = platform()) {
15
- if (environment[PRODUCT_IDENTITY.environment.endpoint]) {
16
- return { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath };
17
- }
18
- const path = hostPlatform === "win32" ? win32 : posix;
19
- const token = createHash("sha256").update(releaseId).digest("hex").slice(0, 16);
20
- const endpoint = hostPlatform === "win32"
21
- ? `${paths.endpoint}-${token}`
22
- : path.join(paths.endpointDirectory ?? paths.runtimeDir, `${token}-${PRODUCT_IDENTITY.endpoint.unixSocketFilename}`);
23
- return { endpoint, endpointMetadataPath: path.join(paths.endpointsDir, `${token}.json`) };
24
- }
25
4
  export function resolveProductPaths(environment = process.env, hostPlatform = platform(), fallbackHome = homedir()) {
26
5
  const windows = hostPlatform === "win32";
27
6
  const path = windows ? win32 : posix;
@@ -29,8 +8,6 @@ export function resolveProductPaths(environment = process.env, hostPlatform = pl
29
8
  const configOverride = environment[PRODUCT_IDENTITY.environment.configDir];
30
9
  const dataOverride = environment[PRODUCT_IDENTITY.environment.dataDir];
31
10
  const runtimeOverride = environment[PRODUCT_IDENTITY.environment.runtimeDir];
32
- const databaseOverride = environment[PRODUCT_IDENTITY.environment.databasePath];
33
- const endpointOverride = environment[PRODUCT_IDENTITY.environment.endpoint];
34
11
  const configDir = path.resolve(configOverride
35
12
  ?? (windows
36
13
  ? path.join(environment.APPDATA ?? home, PRODUCT_IDENTITY.state.windowsControlDirectory)
@@ -45,26 +22,9 @@ export function resolveProductPaths(environment = process.env, hostPlatform = pl
45
22
  : environment.XDG_RUNTIME_DIR
46
23
  ? path.join(environment.XDG_RUNTIME_DIR, PRODUCT_IDENTITY.state.unixControlDirectory)
47
24
  : path.join(dataDir, "runtime")));
48
- const namespace = createHash("sha256").update(runtimeDir.toLowerCase()).digest("hex").slice(0, 20);
49
- // Platform: Darwin limits Unix-domain socket paths to roughly 104 bytes. Runtime roots
50
- // under /var/folders can exceed that before the cohort suffix is added, so only socket
51
- // files use a short owned namespace while metadata remains under the selected runtime.
52
- const endpointDirectory = !endpointOverride && hostPlatform === "darwin"
53
- ? posix.join("/tmp", `${PRODUCT_IDENTITY.state.unixControlDirectory}-${namespace}`)
54
- : null;
55
- const endpoint = endpointOverride
56
- ?? (windows
57
- ? `\\\\.\\pipe\\${PRODUCT_IDENTITY.endpoint.windowsPipeStem}-${namespace}`
58
- : path.join(endpointDirectory ?? runtimeDir, PRODUCT_IDENTITY.endpoint.unixSocketFilename));
59
25
  return {
60
26
  configDir,
61
27
  dataDir,
62
28
  runtimeDir,
63
- databasePath: path.resolve(databaseOverride ?? path.join(dataDir, PRODUCT_IDENTITY.endpoint.databaseFilename)),
64
- endpoint,
65
- endpointMetadataPath: path.join(runtimeDir, PRODUCT_IDENTITY.endpoint.metadataFilename),
66
- endpointsDir: path.join(runtimeDir, "endpoints"),
67
- endpointDirectory,
68
- supervisorLogPath: path.join(runtimeDir, PRODUCT_IDENTITY.endpoint.supervisorLogFilename),
69
29
  };
70
30
  }
@@ -0,0 +1,8 @@
1
+ import type { ProcessIdentity } from "./model.js";
2
+ /**
3
+ * The identity every record written by this build carries. Liveness is a pid probe, so the
4
+ * identity only distinguishes records this build wrote from records an older build left.
5
+ */
6
+ export declare const PID_LIVENESS_IDENTITY = "pid-liveness";
7
+ /** Observe whether a process is running; a permission refusal still proves the pid exists. */
8
+ export declare function inspectLiveProcess(pid: number): Promise<ProcessIdentity | null>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The identity every record written by this build carries. Liveness is a pid probe, so the
3
+ * identity only distinguishes records this build wrote from records an older build left.
4
+ */
5
+ export const PID_LIVENESS_IDENTITY = "pid-liveness";
6
+ /** Observe whether a process is running; a permission refusal still proves the pid exists. */
7
+ export async function inspectLiveProcess(pid) {
8
+ if (!Number.isSafeInteger(pid) || pid <= 0)
9
+ return null;
10
+ try {
11
+ process.kill(pid, 0);
12
+ }
13
+ catch (error) {
14
+ if (!(error instanceof Error && "code" in error && error.code === "EPERM"))
15
+ return null;
16
+ }
17
+ return { pid, startIdentity: PID_LIVENESS_IDENTITY };
18
+ }
@@ -5,7 +5,7 @@ interface ClaimLockOptions {
5
5
  /** Inventory is advisory and read-only, including when abandoned metadata needs recovery. */
6
6
  export declare function claimMutationPending(directory: string): Promise<boolean>;
7
7
  /**
8
- * The persistent directory excludes legacy wx-file writers. Only native descriptor authority
8
+ * The persistent directory excludes legacy wx-file writers. Only the gate beside the authority file
9
9
  * permits upgraded mutations; owner.json is disposable evidence, never a liveness oracle.
10
10
  * Never remove the barrier or authority file: doing so would create a second lock universe.
11
11
  */
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { lstat, mkdir, open, readdir, realpath, rename, rm } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { setTimeout as delay } from "node:timers/promises";
5
- import { tryAcquireClaimGate } from "./native-claim-gate.js";
5
+ import { tryAcquireClaimGate } from "./claim-gate.js";
6
6
  const FILES = new Set(["owner.json", "owner.next", "recovery.json", "recovery.next"]);
7
7
  /** Inventory is advisory and read-only, including when abandoned metadata needs recovery. */
8
8
  export async function claimMutationPending(directory) {
@@ -19,7 +19,7 @@ export async function claimMutationPending(directory) {
19
19
  }
20
20
  }
21
21
  /**
22
- * The persistent directory excludes legacy wx-file writers. Only native descriptor authority
22
+ * The persistent directory excludes legacy wx-file writers. Only the gate beside the authority file
23
23
  * permits upgraded mutations; owner.json is disposable evidence, never a liveness oracle.
24
24
  * Never remove the barrier or authority file: doing so would create a second lock universe.
25
25
  */
@@ -1,4 +1,4 @@
1
- import type { NativeProcessIdentity } from "./model.js";
1
+ import type { ProcessIdentity } from "./model.js";
2
2
  /** Records without an agent id were written by a single-agent release and belong to its one agent. */
3
3
  export declare const PRIMARY_SESSION_AGENT_ID = "primary";
4
4
  export interface SessionRepositoryIdentity {
@@ -21,16 +21,16 @@ export interface SessionRepositoryContextOptions {
21
21
  readonly runtimeId?: string;
22
22
  /** Agent within the runtime that owns the claim; defaults to the primary agent. */
23
23
  readonly agentId?: string;
24
- readonly runtimeIdentity?: NativeProcessIdentity;
25
- readonly inspectProcess?: (pid: number) => Promise<NativeProcessIdentity | null>;
24
+ readonly runtimeIdentity?: ProcessIdentity;
25
+ readonly inspectProcess?: (pid: number) => Promise<ProcessIdentity | null>;
26
26
  readonly lockTimeoutMs?: number;
27
27
  }
28
28
  /** Publish the exact live runtime that may acquire a delivery worktree. */
29
- export declare function registerSessionRepositoryRuntime(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: NativeProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
29
+ export declare function registerSessionRepositoryRuntime(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
30
30
  /** Revalidate a durable association and acquire its live claim for this runtime's agent; sibling agents' claims stay. */
31
- export declare function activateSessionRepositoryContext(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: NativeProcessIdentity, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext | null>;
31
+ export declare function activateSessionRepositoryContext(identity: SessionRepositoryIdentity, runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext | null>;
32
32
  /** Release every agent's cooperative editing claims held by this exact runtime generation. */
33
- export declare function releaseSessionRepositoryRuntime(runtimeId: string, runtimeIdentity: NativeProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
33
+ export declare function releaseSessionRepositoryRuntime(runtimeId: string, runtimeIdentity: ProcessIdentity, options?: SessionRepositoryContextOptions): Promise<void>;
34
34
  /** Persist one explicit same-repository worktree association after atomically claiming it. */
35
35
  export declare function setSessionRepositoryContext(identity: SessionRepositoryIdentity, worktreePath: string, options?: SessionRepositoryContextOptions): Promise<SessionRepositoryContext>;
36
36
  /** Remove only the association and live claim belonging to the supplied stable session/runtime. */
@@ -3,6 +3,7 @@ import { open, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile
3
3
  import { dirname, isAbsolute, join, resolve } from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
6
+ import { inspectLiveProcess } from "./process-liveness.js";
6
7
  import { resolveProductPaths } from "./paths.js";
7
8
  import { claimMutationPending, withSessionClaimLock } from "./session-claim-lock.js";
8
9
  const CONTEXT_SCHEMA = "a1-session-repository-context-v1";
@@ -512,9 +513,7 @@ function ownedBy(record, owner) {
512
513
  return record.runtimeId === owner.runtimeId && record.agentId === owner.agentId;
513
514
  }
514
515
  function requireInspector(options) {
515
- if (options.inspectProcess === undefined)
516
- throw contextError("native process identity inspection is unavailable", "process-inspection-unavailable");
517
- return options.inspectProcess;
516
+ return options.inspectProcess ?? inspectLiveProcess;
518
517
  }
519
518
  function processIdentityOf(record) {
520
519
  return { pid: record.pid, startIdentity: record.startIdentity };
@@ -1,13 +1,12 @@
1
1
  import { type AvailableRelease, type ReleaseChannel } from "./latest-release.js";
2
2
  export declare const AUTOMATIC_UPDATE_STATE_SCHEMA = 1;
3
3
  export declare const AUTOMATIC_UPDATE_RETRY_MS: number;
4
- export declare const AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS = 15000;
5
4
  export declare const ACTIVE_RELEASE_FALLBACK_MS = 5000;
6
5
  export interface AutomaticUpdateState {
7
6
  readonly schema: typeof AUTOMATIC_UPDATE_STATE_SCHEMA;
8
7
  readonly channel: ReleaseChannel;
9
8
  readonly targetVersion: string;
10
- readonly status: "running" | "blocked" | "installed" | "failed";
9
+ readonly status: "running" | "installed" | "failed";
11
10
  readonly attemptedAt: number;
12
11
  readonly updatedAt: number;
13
12
  readonly installedVersion: string | null;
@@ -44,7 +43,6 @@ export interface AutomaticUpdateRequestOptions {
44
43
  readonly packageRoot: string;
45
44
  };
46
45
  readonly activeVersion?: () => Promise<string | null>;
47
- readonly onActivationBlocked?: (version: string | null) => void;
48
46
  }
49
47
  /** Start or observe one silent update and resolve with the active newer version once restart is useful. */
50
48
  export declare function requestAutomaticUpdate(options: AutomaticUpdateRequestOptions): Promise<string | null>;
@@ -7,15 +7,14 @@ import { valid as validSemver } from "semver";
7
7
  import { readLaunchContext } from "../launch-context/index.js";
8
8
  import { resolveProductPaths } from "../lifecycle/index.js";
9
9
  import { CohortStateStore } from "./cohort-state.js";
10
- import { processIsAlive } from "./process-cleanup.js";
10
+ import { processIsAlive } from "./process-liveness.js";
11
11
  import { isNewerRelease, releaseChannelOf } from "./latest-release.js";
12
12
  import { readCertifiedReleaseManifest, resolveReleaseEntryPoint } from "./release-store.js";
13
13
  import { acquireUpdateExecutionLease, readUpdateExecutionOwner } from "./update-execution-lease.js";
14
14
  import { UpdateTransactionStore } from "./update-transaction.js";
15
- import { runSelfUpdate, UPDATE_ACTIVATION_BLOCKED_EXIT_CODE, UPDATE_ALREADY_RUNNING_EXIT_CODE } from "./update.js";
15
+ import { runSelfUpdate, UPDATE_ALREADY_RUNNING_EXIT_CODE } from "./update.js";
16
16
  export const AUTOMATIC_UPDATE_STATE_SCHEMA = 1;
17
17
  export const AUTOMATIC_UPDATE_RETRY_MS = 24 * 60 * 60_000;
18
- export const AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS = 15_000;
19
18
  const AUTOMATIC_UPDATE_STATE_FILENAME = "automatic-update.json";
20
19
  const MAX_STATE_BYTES = 16_384;
21
20
  const OBSERVER_POLL_MS = 250;
@@ -37,6 +36,10 @@ export class AutomaticUpdateStateStore {
37
36
  if (Buffer.byteLength(source, "utf8") > MAX_STATE_BYTES)
38
37
  throw new Error("automatic update state is oversized");
39
38
  const value = JSON.parse(source);
39
+ // Compatibility: a record left by an activation that waited on resident tabs says nothing
40
+ // about the next attempt, so it is read as no record at all.
41
+ if (value?.status === "blocked")
42
+ return null;
40
43
  validateState(value);
41
44
  return value;
42
45
  }
@@ -183,14 +186,6 @@ export async function requestAutomaticUpdate(options) {
183
186
  await store.write(existing).catch(() => undefined);
184
187
  }
185
188
  }
186
- const blockedUpdatedAt = existing?.status === "blocked" && existing.channel === options.release.channel
187
- && existing.targetVersion === options.release.version ? existing.updatedAt : null;
188
- const observedBlocked = blockedUpdatedAt !== null;
189
- if (observedBlocked) {
190
- options.onActivationBlocked?.(options.release.version);
191
- if (now() - blockedUpdatedAt >= 0 && now() - blockedUpdatedAt < AUTOMATIC_UPDATE_ACTIVATION_RETRY_MS)
192
- return null;
193
- }
194
189
  if (existing?.status === "failed" && existing.channel === options.release.channel && now() - existing.attemptedAt >= 0
195
190
  && now() - existing.attemptedAt < AUTOMATIC_UPDATE_RETRY_MS
196
191
  && !isNewerRelease(options.release.version, existing.targetVersion))
@@ -223,8 +218,6 @@ export async function requestAutomaticUpdate(options) {
223
218
  // Invariant: no worker began this attempt. Do not invent a successful install or an owner.
224
219
  await store.write(state({ packageRoot: worker.packageRoot, channel: options.release.channel,
225
220
  targetVersion: options.release.version, dataDir: paths.dataDir }, "failed", now(), null, "worker-start-failed")).catch(() => undefined);
226
- if (observedBlocked)
227
- options.onActivationBlocked?.(null);
228
221
  return null;
229
222
  }
230
223
  }
@@ -238,15 +231,8 @@ export async function requestAutomaticUpdate(options) {
238
231
  if (installed !== null)
239
232
  return installed;
240
233
  const state = await store.read().catch(() => null);
241
- if (state?.targetVersion === options.release.version && state.status === "blocked") {
242
- options.onActivationBlocked?.(state.targetVersion);
243
- return null;
244
- }
245
- if (state?.targetVersion === options.release.version && state.status === "failed" && state.attemptedAt >= startedAt) {
246
- if (observedBlocked)
247
- options.onActivationBlocked?.(null);
234
+ if (state?.targetVersion === options.release.version && state.status === "failed" && state.attemptedAt >= startedAt)
248
235
  return null;
249
- }
250
236
  const owner = await readUpdateExecutionOwner(paths.dataDir).catch(() => null);
251
237
  if ((owner === null || !processIsAlive(owner.pid)) && now() - startedAt >= WORKER_START_GRACE_MS)
252
238
  return null;
@@ -296,12 +282,6 @@ export async function runAutomaticUpdateWorker(argv, environment = process.env)
296
282
  });
297
283
  if (code === UPDATE_ALREADY_RUNNING_EXIT_CODE)
298
284
  return 0;
299
- if (code === UPDATE_ACTIVATION_BLOCKED_EXIT_CODE) {
300
- await runningWrite;
301
- if (acquired)
302
- await store.write(state(parsed, "blocked", attemptedAt, null, "resident-continuity-blocked"));
303
- return code;
304
- }
305
285
  if (code !== 0) {
306
286
  await runningWrite;
307
287
  if (acquired)
@@ -419,11 +399,10 @@ function parseWorkerArguments(argv) {
419
399
  }
420
400
  function validateState(value) {
421
401
  if (value.schema !== AUTOMATIC_UPDATE_STATE_SCHEMA || (value.channel !== "stable" && value.channel !== "development")
422
- || validSemver(value.targetVersion) === null || !["running", "blocked", "installed", "failed"].includes(value.status)
402
+ || validSemver(value.targetVersion) === null || !["running", "installed", "failed"].includes(value.status)
423
403
  || !Number.isFinite(value.attemptedAt) || !Number.isFinite(value.updatedAt)
424
404
  || (value.installedVersion !== null && validSemver(value.installedVersion) === null)
425
- || (value.failure !== null && (typeof value.failure !== "string" || value.failure.length > 512))
426
- || value.status === "blocked" && (value.installedVersion !== null || value.failure !== "resident-continuity-blocked")) {
405
+ || (value.failure !== null && (typeof value.failure !== "string" || value.failure.length > 512))) {
427
406
  throw new Error("invalid automatic update state");
428
407
  }
429
408
  }
@@ -1,49 +1,26 @@
1
- import { type SupervisorEndpointMetadata } from "./cohort-state.js";
2
- import { resolveProductPaths, type SessionSelection, type LaunchProfileId, type SupervisorStartupAttemptIdentity } from "../lifecycle/index.js";
3
- import { cleanupProvenIdleOwner } from "./process-cleanup.js";
1
+ import { resolveProductPaths, type SessionSelection, type LaunchProfileId } from "../lifecycle/index.js";
4
2
  import { type MaterializedRelease, type VerifyMaterializedReleaseOptions } from "./release-store.js";
5
- import { type EnsureTerminalHostOptions, type EnsureTerminalHostResult } from "../resident-tabs/index.js";
6
3
  export interface BootstrapOptions {
7
4
  readonly packageRoot: string;
8
5
  readonly launchIntent?: {
9
6
  readonly kind: "interactive";
10
7
  readonly profileId: LaunchProfileId;
11
- readonly launchMode: "tabs" | "solo";
12
8
  readonly sessionSelection?: SessionSelection;
13
9
  };
14
10
  readonly environment?: NodeJS.ProcessEnv;
15
11
  readonly output?: Pick<NodeJS.WriteStream, "write">;
16
12
  /** Optional package-resolution probe that excludes a damaged retained release. */
17
13
  readonly releaseIsLaunchable?: (releaseRoot: string) => boolean;
18
- /** Test seam for bounded maintenance scheduled after stale endpoint sweeping. */
14
+ /** Test seam for bounded maintenance scheduled before the UI starts. */
19
15
  readonly scheduleMaintenance?: (dataDir: string, paths: ReturnType<typeof resolveProductPaths>) => Promise<void>;
20
- /** Test seam for resident launch routing before the guardian starts. */
21
- readonly ensureTerminalHost?: (options: EnsureTerminalHostOptions) => Promise<EnsureTerminalHostResult>;
22
- /** Test seam for whether this process's standard input and output are terminals; absent reads them. */
23
- readonly interactiveTerminal?: boolean;
24
16
  }
25
17
  export declare function runBootstrap(options: BootstrapOptions): Promise<number>;
26
18
  export declare function certifyMaterializedRelease(release: MaterializedRelease, dataDir: string, verification?: VerifyMaterializedReleaseOptions): Promise<string>;
27
19
  /** Persist current-format evidence after an authenticated parent has certified the exact release. */
28
20
  export declare function recordParentCertifiedRelease(release: MaterializedRelease, dataDir: string): Promise<string>;
29
- export interface SupervisorStartupAttempt extends SupervisorStartupAttemptIdentity {
30
- readonly childOutcome: Promise<{
31
- readonly exitCode: number | null;
32
- readonly signal: NodeJS.Signals | null;
33
- }>;
34
- }
35
- /** Reuse a verified owner, or join the winner if another launch starts the same cohort first. */
36
- export declare function ensureSupervisor(release: MaterializedRelease, environment: NodeJS.ProcessEnv): Promise<void>;
37
- export declare function startSupervisor(release: MaterializedRelease, environment: NodeJS.ProcessEnv): Promise<SupervisorStartupAttempt>;
38
21
  /**
39
22
  * Hand a release the key set its own build reads. A retained pre-cutover release is
40
23
  * still startable this way, which is what lets a launch fall back to the previous
41
24
  * version instead of failing while an installation is being replaced.
42
25
  */
43
26
  export declare function releaseEnvironment(environment: NodeJS.ProcessEnv, release: MaterializedRelease, profile?: LaunchProfileId): NodeJS.ProcessEnv;
44
- export declare function waitForVerifiedEndpoint(path: string, release: MaterializedRelease, timeoutMs: number, startup?: SupervisorStartupAttempt): Promise<void>;
45
- export declare function releaseVerifiedIdleOwner(metadata: SupervisorEndpointMetadata, dataDir: string, operations?: {
46
- readonly waitForExit?: typeof waitForProcessExit;
47
- readonly cleanup?: typeof cleanupProvenIdleOwner;
48
- }): Promise<boolean>;
49
- export declare function waitForProcessExit(pid: number, timeoutMs: number): Promise<void>;