@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,8 +0,0 @@
1
- import type { ShortcutBindings } from "./shortcut-projection.js";
2
- /** Largest `keybindings.json` the projection reads; a larger file counts as absent. */
3
- export declare const MAX_SHORTCUT_BINDINGS_BYTES: number;
4
- /**
5
- * Reads the user's `keybindings.json` as shortcut bindings, keeping `null` entries so an
6
- * explicit unbind survives, and treating any unreadable or malformed file as empty.
7
- */
8
- export declare function readShortcutBindingsFile(agentDir: string): ShortcutBindings;
@@ -1,40 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- /** Largest `keybindings.json` the projection reads; a larger file counts as absent. */
4
- export const MAX_SHORTCUT_BINDINGS_BYTES = 256 * 1024;
5
- /**
6
- * Reads the user's `keybindings.json` as shortcut bindings, keeping `null` entries so an
7
- * explicit unbind survives, and treating any unreadable or malformed file as empty.
8
- */
9
- export function readShortcutBindingsFile(agentDir) {
10
- let text;
11
- try {
12
- text = readFileSync(join(agentDir, "keybindings.json"), "utf8");
13
- }
14
- catch {
15
- return {};
16
- }
17
- if (text.length > MAX_SHORTCUT_BINDINGS_BYTES)
18
- return {};
19
- let parsed;
20
- try {
21
- parsed = JSON.parse(text.replace(/^/u, ""));
22
- }
23
- catch {
24
- return {};
25
- }
26
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
27
- return {};
28
- const bindings = {};
29
- for (const [action, value] of Object.entries(parsed)) {
30
- if (action === "$schema")
31
- continue;
32
- if (value === null || typeof value === "string") {
33
- bindings[action] = value;
34
- continue;
35
- }
36
- if (Array.isArray(value))
37
- bindings[action] = value.filter((key) => typeof key === "string");
38
- }
39
- return bindings;
40
- }
@@ -1,13 +0,0 @@
1
- export type ResidentTabAction = "tabs.new" | "tabs.close" | "tabs.rename" | "tabs.settings" | "tabs.changelog" | "tabs.commands" | "tabs.retry" | "tabs.fresh" | "tabs.next" | "tabs.previous" | "tabs.moveRight" | "tabs.moveLeft" | `tabs.jump${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10}`;
2
- export interface ResidentTabShortcut {
3
- readonly id: ResidentTabAction;
4
- readonly defaultKey: string | null;
5
- readonly scope: "global" | "failed-banner";
6
- readonly description: string;
7
- }
8
- /**
9
- * The tab shortcut declarations, in the order that decides which action keeps a duplicated key.
10
- * This module stays dependency-free so startup presentation and the resident projection can
11
- * read it without loading the component registry.
12
- */
13
- export declare const RESIDENT_TAB_SHORTCUTS: readonly ResidentTabShortcut[];
@@ -1,26 +0,0 @@
1
- const jumps = Array.from({ length: 10 }, (_, index) => ({
2
- id: `tabs.jump${index + 1}`,
3
- defaultKey: `alt+${(index + 1) % 10}`,
4
- scope: "global",
5
- description: `View A1 tab ${index + 1}`,
6
- }));
7
- /**
8
- * The tab shortcut declarations, in the order that decides which action keeps a duplicated key.
9
- * This module stays dependency-free so startup presentation and the resident projection can
10
- * read it without loading the component registry.
11
- */
12
- export const RESIDENT_TAB_SHORTCUTS = Object.freeze([
13
- { id: "tabs.new", defaultKey: "alt+a", scope: "global", description: "New A1 tab" },
14
- { id: "tabs.close", defaultKey: "alt+w", scope: "global", description: "Close A1 tab" },
15
- { id: "tabs.rename", defaultKey: "f2", scope: "global", description: "Rename A1 tab" },
16
- { id: "tabs.settings", defaultKey: "alt+,", scope: "global", description: "Open Settings tab" },
17
- { id: "tabs.changelog", defaultKey: null, scope: "global", description: "Open Changelog tab" },
18
- { id: "tabs.commands", defaultKey: "alt+/", scope: "global", description: "Open command palette" },
19
- ...jumps,
20
- { id: "tabs.next", defaultKey: null, scope: "global", description: "View next A1 tab" },
21
- { id: "tabs.previous", defaultKey: null, scope: "global", description: "View previous A1 tab" },
22
- { id: "tabs.moveRight", defaultKey: null, scope: "global", description: "Move A1 tab right" },
23
- { id: "tabs.moveLeft", defaultKey: null, scope: "global", description: "Move A1 tab left" },
24
- { id: "tabs.retry", defaultKey: "r", scope: "failed-banner", description: "Retry failed A1 tab" },
25
- { id: "tabs.fresh", defaultKey: "f", scope: "failed-banner", description: "Start failed A1 tab fresh" },
26
- ]);
@@ -1,29 +0,0 @@
1
- import { type ResidentTabAction } from "./shortcut-declarations.js";
2
- /** Key assignments as `keybindings.json` and the keybinding manager express them. */
3
- export type ShortcutBindings = Readonly<Record<string, string | readonly string[] | null | undefined>>;
4
- export type ResidentTabGlobalAction = Exclude<ResidentTabAction, "tabs.retry" | "tabs.fresh">;
5
- export interface ResidentTabShortcutConflict {
6
- readonly id: ResidentTabGlobalAction;
7
- readonly key: string;
8
- /** `reserved` keys belong to an A1 action; `duplicate` keys were claimed by an earlier tab action. */
9
- readonly reason: "reserved" | "duplicate";
10
- }
11
- /** The effective tab shortcuts the resident shell dispatches and every presentation shows. */
12
- export interface ResidentTabShortcutProjection {
13
- readonly assignments: Readonly<Record<ResidentTabGlobalAction, string | null>>;
14
- readonly conflicts: readonly ResidentTabShortcutConflict[];
15
- }
16
- export interface ResidentTabShortcutInput {
17
- /** The user's `keybindings.json`, including any `tabs.*` entries; `null` unbinds an action. */
18
- readonly configured?: ShortcutBindings | undefined;
19
- /** The effective A1 declarations (defaults plus customization) whose keys tab actions may not take. */
20
- readonly reserved?: ShortcutBindings | undefined;
21
- }
22
- /** The declarations the projection covers, in the order that decides duplicate claims. */
23
- export declare const RESIDENT_TAB_GLOBAL_SHORTCUTS: import("./shortcut-declarations.js").ResidentTabShortcut[];
24
- /**
25
- * Projects the effective A1 declarations and the user's customization into one tab shortcut
26
- * assignment per action. A key an A1 action holds after customization never becomes a tab
27
- * shortcut; between tab actions the earlier declaration keeps a duplicated key.
28
- */
29
- export declare function projectResidentTabShortcuts(input?: ResidentTabShortcutInput): ResidentTabShortcutProjection;
@@ -1,64 +0,0 @@
1
- import { RESIDENT_TAB_SHORTCUTS } from "./shortcut-declarations.js";
2
- /** The declarations the projection covers, in the order that decides duplicate claims. */
3
- export const RESIDENT_TAB_GLOBAL_SHORTCUTS = RESIDENT_TAB_SHORTCUTS.filter(shortcut => shortcut.scope === "global");
4
- function normalizeKey(key) {
5
- return key.trim().toLowerCase();
6
- }
7
- function keysOf(value) {
8
- if (value === null || value === undefined)
9
- return value;
10
- if (typeof value === "string")
11
- return [value];
12
- return value.filter((key) => typeof key === "string");
13
- }
14
- /**
15
- * Projects the effective A1 declarations and the user's customization into one tab shortcut
16
- * assignment per action. A key an A1 action holds after customization never becomes a tab
17
- * shortcut; between tab actions the earlier declaration keeps a duplicated key.
18
- */
19
- export function projectResidentTabShortcuts(input = {}) {
20
- const configured = input.configured ?? {};
21
- const claimedByOwnedActions = new Map();
22
- for (const [action, value] of Object.entries(input.reserved ?? {})) {
23
- if (action.startsWith("tabs."))
24
- continue;
25
- claimedByOwnedActions.set(action, keysOf(value) ?? []);
26
- }
27
- for (const [action, value] of Object.entries(configured)) {
28
- if (action.startsWith("tabs.") || action === "$schema")
29
- continue;
30
- claimedByOwnedActions.set(action, keysOf(value) ?? []);
31
- }
32
- const reserved = new Set();
33
- for (const keys of claimedByOwnedActions.values())
34
- for (const key of keys)
35
- reserved.add(normalizeKey(key));
36
- const claimed = new Set();
37
- const conflicts = [];
38
- const assignments = {};
39
- for (const shortcut of RESIDENT_TAB_GLOBAL_SHORTCUTS) {
40
- const id = shortcut.id;
41
- const custom = configured[id];
42
- const candidates = custom === undefined
43
- ? (shortcut.defaultKey === null ? [] : [shortcut.defaultKey])
44
- : (keysOf(custom) ?? []);
45
- let assigned = null;
46
- for (const candidate of candidates.map(normalizeKey)) {
47
- if (candidate.length === 0)
48
- continue;
49
- if (reserved.has(candidate)) {
50
- conflicts.push({ id, key: candidate, reason: "reserved" });
51
- continue;
52
- }
53
- if (claimed.has(candidate)) {
54
- conflicts.push({ id, key: candidate, reason: "duplicate" });
55
- continue;
56
- }
57
- assigned = candidate;
58
- claimed.add(candidate);
59
- break;
60
- }
61
- assignments[id] = assigned;
62
- }
63
- return { assignments, conflicts };
64
- }
@@ -1,10 +0,0 @@
1
- /** How the tab's last agent turn settled; it persists until the next turn starts. */
2
- export type ResidentTabTurnSettlement = "done" | "aborted" | "error";
3
- export type ResidentTabDerivedStatus = "starting" | "working" | "needs-input" | "idle" | "failed" | ResidentTabTurnSettlement;
4
- export interface ResidentTabFacts {
5
- readonly lifecycle: string;
6
- readonly pendingRequests: number;
7
- readonly queuedInput: number;
8
- readonly lastTurn?: ResidentTabTurnSettlement;
9
- }
10
- export declare function deriveResidentTabStatus(facts: ResidentTabFacts): ResidentTabDerivedStatus;
@@ -1,12 +0,0 @@
1
- // Invariant: `failed` is reserved for a failed tab lifecycle; a turn that errored reports `error`.
2
- export function deriveResidentTabStatus(facts) {
3
- if (facts.lifecycle === "failed")
4
- return "failed";
5
- if (facts.pendingRequests > 0)
6
- return "needs-input";
7
- if (facts.lifecycle === "busy" || facts.queuedInput > 0)
8
- return "working";
9
- if (facts.lifecycle === "starting")
10
- return "starting";
11
- return facts.lastTurn ?? "idle";
12
- }
@@ -1,14 +0,0 @@
1
- import { type ProcessGuardianAddon } from "../process-containment/index.js";
2
- interface ExitWatcherOptions {
3
- readonly guardianPid: number;
4
- readonly noticePath: string;
5
- readonly encodedModes: string;
6
- readonly addonPath: string;
7
- readonly runtimePid: number;
8
- readonly processGroup: number | null;
9
- readonly foregroundGroup: number | null;
10
- }
11
- /** Waits outside launch containment, then performs the cleanup its dead guardian could not. */
12
- export declare function runExitWatcher(arguments_: readonly string[], platform?: NodeJS.Platform, loadAddon?: (path: string) => ProcessGuardianAddon): Promise<number>;
13
- export declare function exitWatcherArguments(options: ExitWatcherOptions): string[];
14
- export {};
@@ -1,103 +0,0 @@
1
- import { fileURLToPath } from "node:url";
2
- import { resolve } from "node:path";
3
- import { loadProcessGuardianAddon } from "../process-containment/index.js";
4
- /** Waits outside launch containment, then performs the cleanup its dead guardian could not. */
5
- export async function runExitWatcher(arguments_, platform = process.platform, loadAddon = loadProcessGuardianAddon) {
6
- const options = parseArguments(arguments_);
7
- const addon = loadAddon(options.addonPath);
8
- if (platform === "win32")
9
- addon.ignoreConsoleControl();
10
- else {
11
- process.on("SIGINT", ignoreSignal);
12
- process.on("SIGTTOU", ignoreSignal);
13
- }
14
- try {
15
- await addon.waitForProcessExit(options.guardianPid);
16
- let cleanupFailure = null;
17
- try {
18
- if (platform === "win32") {
19
- // Rationale: job termination is asynchronous; keep the runtime's final frame ahead of the notice.
20
- await Promise.race([
21
- addon.waitForProcessExit(options.runtimePid),
22
- delay(2_000),
23
- ]);
24
- }
25
- else if (options.processGroup !== null) {
26
- addon.stopProcessGroup(options.processGroup);
27
- if (options.foregroundGroup !== null)
28
- addon.restoreForegroundGroup(options.foregroundGroup);
29
- }
30
- }
31
- catch (error) {
32
- cleanupFailure = error;
33
- }
34
- // Invariant: an armed notice, such as the running-Agent reminder, survives a failed cleanup.
35
- addon.deliverExitNotice(options.noticePath, options.encodedModes);
36
- if (cleanupFailure !== null)
37
- throw cleanupFailure;
38
- return 0;
39
- }
40
- finally {
41
- if (platform !== "win32") {
42
- process.off("SIGINT", ignoreSignal);
43
- process.off("SIGTTOU", ignoreSignal);
44
- }
45
- }
46
- }
47
- export function exitWatcherArguments(options) {
48
- return [
49
- "--guardian-pid", String(options.guardianPid),
50
- "--notice", options.noticePath,
51
- "--modes", options.encodedModes,
52
- "--addon", options.addonPath,
53
- "--runtime-pid", String(options.runtimePid),
54
- ...(options.processGroup === null ? [] : ["--process-group", String(options.processGroup)]),
55
- ...(options.foregroundGroup === null ? [] : ["--foreground-group", String(options.foregroundGroup)]),
56
- ];
57
- }
58
- function parseArguments(arguments_) {
59
- const values = new Map();
60
- for (let index = 0; index < arguments_.length; index += 2) {
61
- const name = arguments_[index];
62
- const value = arguments_[index + 1];
63
- if (!name?.startsWith("--") || value === undefined || values.has(name))
64
- throw new TypeError("exit watcher arguments are malformed");
65
- values.set(name, value);
66
- }
67
- const guardianPid = positiveInteger(values.get("--guardian-pid"), "guardian PID");
68
- const runtimePid = positiveInteger(values.get("--runtime-pid"), "runtime PID");
69
- const noticePath = boundedValue(values.get("--notice"), "notice path");
70
- const encodedModes = boundedValue(values.get("--modes"), "terminal modes", 32_768);
71
- const addonPath = boundedValue(values.get("--addon"), "addon path");
72
- const processGroup = optionalPositiveInteger(values.get("--process-group"), "process group");
73
- const foregroundGroup = optionalPositiveInteger(values.get("--foreground-group"), "foreground group");
74
- const expected = 5 + (processGroup === null ? 0 : 1) + (foregroundGroup === null ? 0 : 1);
75
- if (values.size !== expected)
76
- throw new TypeError("exit watcher received an unknown argument");
77
- return { guardianPid, noticePath, encodedModes, addonPath, runtimePid, processGroup, foregroundGroup };
78
- }
79
- function positiveInteger(value, name) {
80
- const parsed = Number(value);
81
- if (!Number.isSafeInteger(parsed) || parsed <= 0)
82
- throw new TypeError(`exit watcher ${name} must be a positive safe integer`);
83
- return parsed;
84
- }
85
- function optionalPositiveInteger(value, name) {
86
- return value === undefined ? null : positiveInteger(value, name);
87
- }
88
- function boundedValue(value, name, limit = 4_096) {
89
- if (!value || value.length > limit || value.includes("\0"))
90
- throw new TypeError(`exit watcher ${name} is invalid`);
91
- return value;
92
- }
93
- function delay(milliseconds) {
94
- return new Promise(resolvePromise => setTimeout(resolvePromise, milliseconds));
95
- }
96
- function ignoreSignal() { }
97
- const invokedPath = process.argv[1] ? resolve(process.argv[1]) : null;
98
- if (invokedPath === fileURLToPath(import.meta.url)) {
99
- void runExitWatcher(process.argv.slice(2)).then(code => process.exit(code), error => {
100
- process.stderr.write(`a1 exit watcher: ${error instanceof Error ? error.message : String(error)}\n`);
101
- process.exit(2);
102
- });
103
- }
@@ -1,2 +0,0 @@
1
- export { runLaunchGuardian } from "./main.js";
2
- export type { LaunchGuardianOptions } from "./main.js";
@@ -1 +0,0 @@
1
- export { runLaunchGuardian } from "./main.js";
@@ -1,39 +0,0 @@
1
- import type { LaunchInstanceStopIntent, LaunchProfileId, SupervisorCommand } from "../lifecycle/index.js";
2
- import { type SessionSelection } from "../lifecycle/index.js";
3
- import { type NativeProcessInspector, type ProcessContainment, type ProcessGuardianAddon } from "../process-containment/index.js";
4
- interface GuardianControl {
5
- connect(endpoint: string, timeoutMs?: number): Promise<unknown>;
6
- command(command: SupervisorCommand): Promise<{
7
- readonly ok: boolean;
8
- readonly error?: {
9
- readonly code: string;
10
- readonly message: string;
11
- };
12
- }>;
13
- on(event: "stopIntent", listener: (intent: LaunchInstanceStopIntent) => void): unknown;
14
- on(event: "disconnect", listener: () => void): unknown;
15
- off(event: "stopIntent", listener: (intent: LaunchInstanceStopIntent) => void): unknown;
16
- off(event: "disconnect", listener: () => void): unknown;
17
- close(): void;
18
- }
19
- export interface LaunchGuardianRootCommand {
20
- readonly executable: string;
21
- readonly arguments: readonly string[];
22
- }
23
- export interface LaunchGuardianOptions {
24
- readonly profileId: LaunchProfileId;
25
- readonly releaseRoot: string;
26
- readonly uiEntry: string;
27
- readonly sessionSelection?: SessionSelection;
28
- readonly rootCommand?: LaunchGuardianRootCommand;
29
- readonly environment?: NodeJS.ProcessEnv;
30
- readonly cwd?: string;
31
- readonly helperPath?: string;
32
- readonly inspector?: NativeProcessInspector;
33
- readonly control?: GuardianControl;
34
- readonly containment?: ProcessContainment;
35
- readonly addon?: ProcessGuardianAddon;
36
- readonly ensureHelper?: (path: string) => Promise<void>;
37
- }
38
- export declare function runLaunchGuardian(options: LaunchGuardianOptions): Promise<number>;
39
- export {};
@@ -1,232 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { randomUUID } from "node:crypto";
3
- import { fileURLToPath } from "node:url";
4
- import { PRODUCT_TEXT } from "../../product-identity.js";
5
- import { readLaunchContext } from "../launch-context/index.js";
6
- import { resolve } from "node:path";
7
- import { assertLaunchProfileId, resolveCohortEndpoint, resolveProductPaths, sessionSelectionArguments } from "../lifecycle/index.js";
8
- import { AddonContainment, AddonProcessInspector, closeVerifiedContainment, LinuxNativeProcessInspector, loadProcessGuardianAddon, resolveProcessGuardianPath, verifyProcessGuardianArtifact, } from "../process-containment/index.js";
9
- import { SupervisorClient } from "../protocol/index.js";
10
- import { markStartupPhase } from "../startup/index.js";
11
- import { exitWatcherArguments } from "./exit-watcher.js";
12
- export async function runLaunchGuardian(options) {
13
- assertLaunchProfileId(options.profileId);
14
- const sessionArgs = sessionSelectionArguments(options.sessionSelection);
15
- if (sessionArgs.length > 0 && options.profileId !== "a1")
16
- throw new Error("session selection requires the normal A1 profile");
17
- const environment = { ...(options.environment ?? process.env) };
18
- const paths = resolveProductPaths(environment);
19
- const instanceId = randomUUID();
20
- const helperPath = options.helperPath ?? resolveProcessGuardianPath(options.releaseRoot, environment);
21
- await (options.ensureHelper ?? verifyProcessGuardianArtifact)(helperPath);
22
- // Rationale: tests that inject both process boundaries need no native module; every production
23
- // path loads the exact artifact only after its manifest and digest have been verified.
24
- const addon = options.addon ?? (options.containment && options.inspector ? null : loadProcessGuardianAddon(helperPath));
25
- const inspector = options.inspector ?? platformInspector(requireAddon(addon));
26
- const guardianIdentity = await inspector.observe(process.pid);
27
- if (!guardianIdentity)
28
- throw diagnosticError("launch guardian cannot verify its own native process identity", "PROCESS_IDENTITY_UNAVAILABLE");
29
- const context = readLaunchContext(environment);
30
- const client = options.control ?? new SupervisorClient(context.releaseId);
31
- // Invariant: an instance belongs to the cohort that launched it and talks to that cohort's endpoint
32
- // for its whole life, whatever release becomes the active one meanwhile.
33
- const releaseId = context.releaseId;
34
- const endpoint = releaseId
35
- ? resolveCohortEndpoint(paths, releaseId, environment).endpoint
36
- : paths.endpoint;
37
- await client.connect(endpoint);
38
- await markStartupPhase(environment, "guardian-connected");
39
- const exitNoticePath = resolve(paths.runtimeDir, "launch-instances", `${instanceId}.exit-notice`);
40
- const containment = options.containment ?? new AddonContainment(instanceId, helperPath, exitNoticePath, requireAddon(addon));
41
- const stop = stopRequests(client, instanceId);
42
- let rootIdentity = null;
43
- try {
44
- await requireAccepted(client, {
45
- type: "create-launch-instance",
46
- requestId: randomUUID(),
47
- instanceId,
48
- profileId: options.profileId,
49
- shutdownPolicy: "terminate-tree-on-close",
50
- guardianIdentity,
51
- });
52
- let handle;
53
- let encodedModes = null;
54
- try {
55
- const rootCommand = options.rootCommand ?? { executable: process.execPath, arguments: [options.uiEntry, ...sessionArgs] };
56
- encodedModes = addon?.captureTerminalModes() ?? null;
57
- handle = await containment.spawn(rootCommand.executable, [...rootCommand.arguments], {
58
- cwd: options.cwd ?? process.cwd(),
59
- environment: environmentEntries(environment),
60
- ...(environment.TERM ? { terminalType: environment.TERM } : {}),
61
- });
62
- rootIdentity = handle.identity;
63
- if (addon && encodedModes !== null) {
64
- await startExitWatcher(addon, {
65
- addonPath: helperPath,
66
- noticePath: exitNoticePath,
67
- encodedModes,
68
- runtimePid: handle.identity.pid,
69
- processGroup: handle.processGroup ?? null,
70
- foregroundGroup: handle.foregroundGroup ?? null,
71
- });
72
- }
73
- await requireAccepted(client, {
74
- type: "activate-launch-instance",
75
- requestId: randomUUID(),
76
- instanceId,
77
- rootIdentity,
78
- containmentIdentity: containment.identity,
79
- });
80
- }
81
- catch (error) {
82
- const outcome = failureOutcome(error, "guardian-error");
83
- await completeBestEffort(client, instanceId, "completed", outcome);
84
- throw error;
85
- }
86
- const outcome = await Promise.race([
87
- handle.outcome,
88
- stop.requested.then(async (reason) => {
89
- if (reason !== "supervisor-disconnect") {
90
- await requireAccepted(client, {
91
- type: "begin-launch-instance-stop",
92
- requestId: randomUUID(),
93
- instanceId,
94
- reason,
95
- });
96
- }
97
- if (!rootIdentity)
98
- return failureOutcome(new Error("launch root identity is unavailable"), "cleanup-error");
99
- const result = await closeVerifiedContainment(containment, inspector, rootIdentity, reason);
100
- await containment.close();
101
- if (reason === "supervisor-disconnect" && result.outcome.kind === "stopped") {
102
- return {
103
- kind: "interrupted",
104
- reason,
105
- message: "supervisor disconnected after local launch-instance containment closed",
106
- };
107
- }
108
- return result.outcome;
109
- }),
110
- ]);
111
- // Invariant: the root removes a clean notice. If it left the notice armed, the guardian claims,
112
- // restores, and prints it before closing the native containment handle.
113
- if (addon && encodedModes !== null)
114
- addon.deliverExitNotice(exitNoticePath, encodedModes);
115
- await containment.close();
116
- if (outcome.kind !== "interrupted" || outcome.reason !== "supervisor-disconnect") {
117
- await completeBestEffort(client, instanceId, outcome.kind === "interrupted" || outcome.kind === "cleanup-error" ? "interrupted" : "completed", outcome);
118
- }
119
- return exitCode(outcome);
120
- }
121
- catch (error) {
122
- await containment.close().catch(() => undefined);
123
- throw error;
124
- }
125
- finally {
126
- stop.dispose();
127
- client.close();
128
- }
129
- }
130
- async function startExitWatcher(addon, options) {
131
- const entry = fileURLToPath(new URL("./exit-watcher.js", import.meta.url));
132
- const arguments_ = [entry, ...exitWatcherArguments({
133
- guardianPid: process.pid,
134
- ...options,
135
- })];
136
- if (process.platform === "win32") {
137
- addon.spawnWatcher({ executable: process.execPath, arguments: arguments_ });
138
- return;
139
- }
140
- await new Promise((resolvePromise, rejectPromise) => {
141
- const watcher = spawn(process.execPath, arguments_, {
142
- stdio: "inherit",
143
- detached: false,
144
- windowsHide: false,
145
- });
146
- watcher.once("error", rejectPromise);
147
- watcher.once("spawn", () => {
148
- watcher.off("error", rejectPromise);
149
- watcher.unref();
150
- resolvePromise();
151
- });
152
- });
153
- }
154
- function platformInspector(addon) {
155
- if (process.platform === "win32")
156
- return new AddonProcessInspector(addon, "windows-filetime:");
157
- if (process.platform === "linux")
158
- return new LinuxNativeProcessInspector();
159
- if (process.platform === "darwin")
160
- return new AddonProcessInspector(addon, "darwin-proc-start:");
161
- throw diagnosticError(`launch-instance process containment is unsupported on ${process.platform}`, "CONTAINMENT_UNSUPPORTED");
162
- }
163
- function requireAddon(addon) {
164
- if (!addon)
165
- throw diagnosticError("process guardian addon is unavailable", "CONTAINMENT_ARTIFACT_MISSING");
166
- return addon;
167
- }
168
- function stopRequests(client, instanceId) {
169
- let resolveStop;
170
- let settled = false;
171
- const requested = new Promise(resolvePromise => { resolveStop = resolvePromise; });
172
- const request = (reason) => {
173
- if (settled)
174
- return;
175
- settled = true;
176
- resolveStop(reason);
177
- };
178
- const onStopIntent = (intent) => {
179
- if (intent.instanceId === instanceId)
180
- request(intent.reason);
181
- };
182
- const onDisconnect = () => request("supervisor-disconnect");
183
- const onSigterm = () => request("user-request");
184
- const onSigint = () => undefined;
185
- client.on("stopIntent", onStopIntent);
186
- client.on("disconnect", onDisconnect);
187
- process.once("SIGTERM", onSigterm);
188
- process.on("SIGINT", onSigint);
189
- return {
190
- requested,
191
- dispose() {
192
- client.off("stopIntent", onStopIntent);
193
- client.off("disconnect", onDisconnect);
194
- process.off("SIGTERM", onSigterm);
195
- process.off("SIGINT", onSigint);
196
- },
197
- };
198
- }
199
- async function requireAccepted(client, command) {
200
- const result = await client.command(command);
201
- if (!result.ok)
202
- throw diagnosticError(result.error?.message ?? `supervisor rejected ${command.type}`, result.error?.code ?? "SUPERVISOR_REJECTED");
203
- }
204
- async function completeBestEffort(client, instanceId, terminalState, outcome) {
205
- await requireAccepted(client, {
206
- type: "complete-launch-instance",
207
- requestId: randomUUID(),
208
- instanceId,
209
- terminalState,
210
- outcome,
211
- }).catch(() => undefined);
212
- }
213
- function environmentEntries(environment) {
214
- return Object.fromEntries(Object.entries(environment).filter((entry) => entry[1] !== undefined));
215
- }
216
- function failureOutcome(error, kind) {
217
- return {
218
- kind,
219
- message: error instanceof Error ? error.message : String(error),
220
- code: error instanceof Error && "code" in error && typeof error.code === "string" ? error.code : null,
221
- };
222
- }
223
- function exitCode(outcome) {
224
- if (outcome.kind === "exited")
225
- return outcome.exitCode;
226
- if (outcome.kind === "stopped")
227
- return 0;
228
- return 1;
229
- }
230
- function diagnosticError(message, code) {
231
- return Object.assign(new Error(`${PRODUCT_TEXT.displayName}: ${message}`), { code });
232
- }
@@ -1,40 +0,0 @@
1
- import type { LaunchInstanceId, LaunchInstanceOutcome, LaunchInstanceShutdownPolicy, LaunchInstanceStopReason, ProcessContainmentIdentity } from "./launch-instance.js";
2
- import type { LaunchProfileId, NativeProcessIdentity, RequestId } from "./model.js";
3
- export type SupervisorCommand = {
4
- readonly type: "create-launch-instance";
5
- readonly requestId: RequestId;
6
- readonly instanceId: LaunchInstanceId;
7
- readonly profileId: LaunchProfileId;
8
- readonly shutdownPolicy: LaunchInstanceShutdownPolicy;
9
- readonly guardianIdentity: NativeProcessIdentity;
10
- } | {
11
- readonly type: "activate-launch-instance";
12
- readonly requestId: RequestId;
13
- readonly instanceId: LaunchInstanceId;
14
- readonly rootIdentity: NativeProcessIdentity;
15
- readonly containmentIdentity: ProcessContainmentIdentity;
16
- } | {
17
- readonly type: "begin-launch-instance-stop";
18
- readonly requestId: RequestId;
19
- readonly instanceId: LaunchInstanceId;
20
- readonly reason: LaunchInstanceStopReason;
21
- } | {
22
- readonly type: "complete-launch-instance";
23
- readonly requestId: RequestId;
24
- readonly instanceId: LaunchInstanceId;
25
- readonly terminalState: "completed" | "interrupted";
26
- readonly outcome: LaunchInstanceOutcome;
27
- } | {
28
- readonly type: "reconcile-launch-instance";
29
- readonly requestId: RequestId;
30
- readonly instanceId: LaunchInstanceId;
31
- } | {
32
- readonly type: "resynchronize";
33
- readonly requestId: RequestId;
34
- };
35
- export interface LaunchInstanceStopIntent {
36
- readonly type: "stop-launch-instance";
37
- readonly requestId: RequestId;
38
- readonly instanceId: LaunchInstanceId;
39
- readonly reason: LaunchInstanceStopReason;
40
- }