@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,166 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
3
- import { homedir, release as osRelease } from "node:os";
4
- import { basename, dirname, resolve, sep } from "node:path";
5
- import { resolveTerminalHostPath } from "./ensure-terminal-host.js";
6
- import { TERMINAL_HOST_MANIFEST_FILENAME, verifyTerminalHostArtifact } from "./terminal-host-artifact.js";
7
- import { encodeZip } from "./zip-archive.js";
8
- export const DOCTOR_MAX_BYTES = 25 * 1024 * 1024;
9
- const LOG_NAME = /^terminal-host-[a-z0-9-]+\.log(?:\.(\d{1,2}))?$/u;
10
- const CRASH_NAME = /^crash-[a-z0-9-]+\.json$/u;
11
- /**
12
- * Writes an owner-only diagnostic bundle by allowlist: structured logs, crash records, host
13
- * status, a redacted registry, the owner marker without secrets, artifact verification, platform
14
- * facts, and the Tabs settings. Secrets, tokens, environment values, prompt journals, drafts,
15
- * last screens, the private child-stderr sink, and terminal content are never read.
16
- */
17
- export async function writeDoctorBundle(options) {
18
- const home = options.home ?? homedir();
19
- const redact = (value) => homeRelative(value, home);
20
- const now = options.now ?? new Date();
21
- const maxBytes = options.maxBytes ?? DOCTOR_MAX_BYTES;
22
- const diagnostics = resolve(options.stateDir, "diagnostics");
23
- const names = await readdir(diagnostics).catch(() => []);
24
- const fixed = [
25
- json("host-status.json", redactHostStatus(options.hostStatus, redact)),
26
- json("registry.json", await redactedRegistry(resolve(options.stateDir, "registry.json"), redact)),
27
- json("server-marker.json", await redactedMarker(resolve(options.stateDir, "server.json"), redact)),
28
- json("artifacts.json", await artifactFacts(options.releaseRoots, options.platform ?? process.platform, options.architecture ?? process.arch, redact)),
29
- json("platform.json", {
30
- platform: options.platform ?? process.platform,
31
- architecture: options.architecture ?? process.arch,
32
- osRelease: osRelease(),
33
- node: process.version,
34
- detachmentMode: options.hostStatus.result?.detachmentMode ?? null,
35
- }),
36
- json("settings.json", { tabsAutoName: options.settings.tabsAutoName }),
37
- ];
38
- const crashes = [];
39
- for (const name of names.filter(name => CRASH_NAME.test(name)).sort()) {
40
- crashes.push({ name: `crashes/${name}`, data: await readFile(resolve(diagnostics, name)) });
41
- }
42
- // Rationale: when the bundle would exceed its cap, the oldest log generations go first.
43
- const logs = names
44
- .filter(name => LOG_NAME.test(name))
45
- .map(name => ({ name, generation: Number(LOG_NAME.exec(name)?.[1] ?? 0) }))
46
- .sort((left, right) => left.generation - right.generation || left.name.localeCompare(right.name));
47
- const dropped = [];
48
- const included = [...fixed, ...crashes];
49
- let budget = maxBytes - 64 * 1024 - included.reduce((total, entry) => total + entry.data.length, 0);
50
- for (const log of logs) {
51
- const size = (await stat(resolve(diagnostics, log.name))).size;
52
- if (size > budget) {
53
- dropped.push(log.name);
54
- continue;
55
- }
56
- budget -= size;
57
- included.push({ name: `logs/${log.name}`, data: await readFile(resolve(diagnostics, log.name)) });
58
- }
59
- const manifest = [
60
- "a1 tabs doctor bundle",
61
- `created: ${now.toISOString()}`,
62
- ...included.map(entry => `included: ${entry.name}`),
63
- ...dropped.map(name => `dropped to stay within ${maxBytes} bytes: logs/${name}`),
64
- "",
65
- ].join("\n");
66
- const archive = encodeZip([{ name: "manifest.txt", data: Buffer.from(manifest, "utf8") }, ...included], now);
67
- const directory = resolve(options.stateDir, "doctor");
68
- await mkdir(directory, { recursive: true, mode: 0o700 });
69
- const path = resolve(directory, `a1-tabs-doctor-${now.toISOString().replace(/[:.]/gu, "-")}.zip`);
70
- await writeFile(path, archive, { mode: 0o600, flag: "wx" });
71
- return { path, bytes: archive.length, dropped };
72
- }
73
- function json(name, value) {
74
- return { name, data: Buffer.from(`${JSON.stringify(value, null, 2)}\n`, "utf8") };
75
- }
76
- function stableHash(value) {
77
- return createHash("sha256").update(value).digest("hex").slice(0, 16);
78
- }
79
- function homeRelative(value, home) {
80
- const normalized = resolve(value);
81
- const root = resolve(home);
82
- const comparable = (path) => process.platform === "win32" ? path.toLowerCase() : path;
83
- if (comparable(normalized) === comparable(root))
84
- return "~";
85
- return comparable(normalized).startsWith(comparable(`${root}${sep}`)) ? `~${normalized.slice(root.length).replaceAll("\\", "/")}` : normalized;
86
- }
87
- function redactHostStatus(report, redact) {
88
- const result = report.result ? { ...report.result } : undefined;
89
- if (result && Array.isArray(result.logs))
90
- result.logs = result.logs.map(path => typeof path === "string" ? basename(path) : null);
91
- if (result && typeof result.release === "string")
92
- result.release = redact(result.release);
93
- return {
94
- host: report.host,
95
- pid: report.pid ?? null,
96
- exitCode: report.exitCode,
97
- result: result ?? null,
98
- };
99
- }
100
- async function redactedRegistry(path, redact) {
101
- let document;
102
- try {
103
- document = JSON.parse(await readFile(path, "utf8"));
104
- }
105
- catch (error) {
106
- return { readable: false, reason: error instanceof Error && "code" in error ? String(error.code) : "unparseable" };
107
- }
108
- const tabs = Array.isArray(document.tabs) ? document.tabs : [];
109
- const text = (value) => typeof value === "string" ? value : null;
110
- return {
111
- readable: true,
112
- registryRevision: document.registryRevision ?? null,
113
- epoch: document.epoch ?? null,
114
- tabs: tabs.map(tab => {
115
- const sessionFile = text(tab.sessionFile);
116
- return {
117
- tabId: text(tab.tabId),
118
- // Security: names can be generated from prompts, so only a stable hash is kept.
119
- nameHash: text(tab.displayName) === null ? null : stableHash(text(tab.displayName)),
120
- nameSource: text(tab.nameSource),
121
- order: tab.order ?? null,
122
- cwd: text(tab.cwd) === null ? null : redact(text(tab.cwd)),
123
- sessionDirectory: sessionFile === null ? null : redact(dirname(sessionFile)),
124
- sessionFileHash: sessionFile === null ? null : stableHash(basename(sessionFile)),
125
- desired: text(tab.desired),
126
- lifecycle: text(tab.lifecycle),
127
- incarnation: tab.incarnation ?? null,
128
- holderPid: tab.holderPid ?? null,
129
- childPid: tab.childPid ?? null,
130
- release: text(tab.release) === null ? null : redact(text(tab.release)),
131
- lastExit: text(tab.lastExit),
132
- restarts: tab.restarts ?? null,
133
- };
134
- }),
135
- };
136
- }
137
- async function redactedMarker(path, redact) {
138
- try {
139
- const marker = JSON.parse(await readFile(path, "utf8"));
140
- return {
141
- present: true,
142
- pid: marker.pid ?? null,
143
- generation: marker.generation ?? null,
144
- verified: marker.verified ?? null,
145
- detachmentMode: marker.detachmentMode ?? null,
146
- releaseRoot: typeof marker.releaseRoot === "string" ? redact(marker.releaseRoot) : null,
147
- };
148
- }
149
- catch {
150
- return { present: false };
151
- }
152
- }
153
- async function artifactFacts(roots, platform, architecture, redact) {
154
- const facts = [];
155
- for (const root of roots) {
156
- const addon = resolveTerminalHostPath(root, {}, platform, architecture);
157
- const manifest = await readFile(resolve(dirname(addon), TERMINAL_HOST_MANIFEST_FILENAME), "utf8")
158
- .then(text => JSON.parse(text))
159
- .catch(() => null);
160
- const verification = await verifyTerminalHostArtifact(addon, platform, architecture)
161
- .then(() => "verified")
162
- .catch((error) => error instanceof Error && "code" in error ? String(error.code) : "failed");
163
- facts.push({ releaseRoot: redact(root), verification, manifest });
164
- }
165
- return facts;
166
- }
@@ -1,27 +0,0 @@
1
- import { ResidentTabFaultInjection } from "./fault-injection.js";
2
- export interface DraftCheckpointState {
3
- readonly text: string;
4
- readonly savedAt: string;
5
- }
6
- export interface DraftCheckpointOptions {
7
- readonly intervalMs?: number;
8
- readonly maximumDirtyMs?: number;
9
- readonly faults?: ResidentTabFaultInjection;
10
- readonly now?: () => number;
11
- readonly onDegraded?: (degraded: boolean) => void;
12
- readonly write?: (path: string, text: string) => Promise<void>;
13
- readonly move?: (from: string, to: string) => Promise<void>;
14
- readonly schedule?: (callback: () => void | Promise<void>, delayMs: number) => unknown;
15
- readonly cancel?: (timer: unknown) => void;
16
- }
17
- /** Periodic rather than inactivity-debounced: continuous input still checkpoints every interval. */
18
- export declare class DraftCheckpointer {
19
- #private;
20
- readonly path: string;
21
- constructor(path: string, options?: DraftCheckpointOptions);
22
- get degraded(): boolean;
23
- change(text: string): void;
24
- restore(): Promise<DraftCheckpointState | null>;
25
- flush(): Promise<void>;
26
- close(): Promise<void>;
27
- }
@@ -1,145 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
3
- import { dirname } from "node:path";
4
- import { ResidentTabFaultInjection } from "./fault-injection.js";
5
- /** Periodic rather than inactivity-debounced: continuous input still checkpoints every interval. */
6
- export class DraftCheckpointer {
7
- path;
8
- #intervalMs;
9
- #maximumDirtyMs;
10
- #faults;
11
- #now;
12
- #onDegraded;
13
- #write;
14
- #move;
15
- #scheduleTimer;
16
- #cancelTimer;
17
- #text = "";
18
- #dirtySince = null;
19
- #timer = null;
20
- #degradedTimer = null;
21
- #writing = null;
22
- #closed = false;
23
- #degraded = false;
24
- constructor(path, options = {}) {
25
- this.path = path;
26
- this.#intervalMs = options.intervalMs ?? 500;
27
- this.#maximumDirtyMs = options.maximumDirtyMs ?? 1_000;
28
- this.#faults = options.faults ?? new ResidentTabFaultInjection();
29
- this.#now = options.now ?? Date.now;
30
- this.#onDegraded = options.onDegraded ?? (() => { });
31
- this.#write = options.write ?? (async (target, text) => writeFile(target, text, { encoding: "utf8", mode: 0o600, flag: "wx" }));
32
- this.#move = options.move ?? rename;
33
- this.#scheduleTimer = options.schedule ?? ((callback, delayMs) => setTimeout(callback, delayMs));
34
- this.#cancelTimer = options.cancel ?? (timer => clearTimeout(timer));
35
- }
36
- get degraded() { return this.#degraded; }
37
- change(text) {
38
- if (this.#closed)
39
- return;
40
- this.#text = text;
41
- this.#dirtySince ??= this.#now();
42
- this.#schedule();
43
- this.#armDegradedDeadline();
44
- }
45
- async restore() {
46
- try {
47
- const value = JSON.parse(await readFile(this.path, "utf8"));
48
- if (typeof value !== "object" || value === null || typeof value.text !== "string"
49
- || typeof value.savedAt !== "string")
50
- return null;
51
- return value;
52
- }
53
- catch (error) {
54
- if (error.code === "ENOENT" || error instanceof SyntaxError)
55
- return null;
56
- throw error;
57
- }
58
- }
59
- async flush() {
60
- if (this.#timer !== null) {
61
- this.#cancelTimer(this.#timer);
62
- this.#timer = null;
63
- }
64
- await this.#writing;
65
- if (this.#dirtySince !== null)
66
- await this.#checkpoint();
67
- }
68
- async close() {
69
- await this.flush();
70
- this.#closed = true;
71
- }
72
- #armDegradedDeadline() {
73
- if (this.#degradedTimer !== null || this.#dirtySince === null || this.#closed)
74
- return;
75
- const delay = Math.max(0, this.#maximumDirtyMs - (this.#now() - this.#dirtySince));
76
- this.#degradedTimer = this.#scheduleTimer(() => {
77
- this.#degradedTimer = null;
78
- if (this.#dirtySince !== null && this.#now() - this.#dirtySince >= this.#maximumDirtyMs) {
79
- this.#setDegraded(true);
80
- }
81
- else if (this.#dirtySince !== null) {
82
- this.#armDegradedDeadline();
83
- }
84
- }, delay);
85
- }
86
- #clearDegradedDeadline() {
87
- if (this.#degradedTimer !== null)
88
- this.#cancelTimer(this.#degradedTimer);
89
- this.#degradedTimer = null;
90
- }
91
- #schedule() {
92
- if (this.#timer !== null || this.#writing !== null || this.#closed)
93
- return;
94
- const age = this.#dirtySince === null ? 0 : this.#now() - this.#dirtySince;
95
- if (age > this.#maximumDirtyMs)
96
- this.#setDegraded(true);
97
- this.#timer = this.#scheduleTimer(async () => {
98
- this.#timer = null;
99
- this.#writing = this.#checkpoint().finally(() => {
100
- this.#writing = null;
101
- if (this.#dirtySince !== null)
102
- this.#schedule();
103
- });
104
- await this.#writing.catch(() => undefined);
105
- }, this.#intervalMs);
106
- }
107
- async #checkpoint() {
108
- if (this.#dirtySince === null)
109
- return;
110
- const snapshot = this.#text;
111
- const temporary = `${this.path}.tmp-${process.pid}-${randomUUID()}`;
112
- try {
113
- await mkdir(dirname(this.path), { recursive: true, mode: 0o700 });
114
- if (process.platform !== "win32")
115
- await chmod(dirname(this.path), 0o700);
116
- this.#faults.at("draft-during-temp-write");
117
- await this.#write(temporary, `${JSON.stringify({ text: snapshot, savedAt: new Date(this.#now()).toISOString() })}\n`);
118
- this.#faults.at("draft-before-rename");
119
- await this.#move(temporary, this.path);
120
- this.#faults.at("draft-after-rename");
121
- if (process.platform !== "win32")
122
- await chmod(this.path, 0o600);
123
- if (this.#text === snapshot)
124
- this.#dirtySince = null;
125
- else
126
- this.#dirtySince = this.#now();
127
- this.#clearDegradedDeadline();
128
- if (this.#dirtySince !== null)
129
- this.#armDegradedDeadline();
130
- this.#setDegraded(false);
131
- }
132
- catch (error) {
133
- await unlink(temporary).catch(() => undefined);
134
- this.#clearDegradedDeadline();
135
- this.#setDegraded(true);
136
- throw error;
137
- }
138
- }
139
- #setDegraded(value) {
140
- if (this.#degraded === value)
141
- return;
142
- this.#degraded = value;
143
- this.#onDegraded(value);
144
- }
145
- }
@@ -1,36 +0,0 @@
1
- export type TerminalHostFallbackReason = "unsupported platform" | "no interactive terminal" | "terminal host not installed" | "terminal host not verified" | "host probe failed" | "incompatible generation" | "registry unreadable" | "recovery blocked" | "launch not verified" | "host startup timed out";
2
- export interface TerminalHostCommand {
3
- readonly executable: string;
4
- readonly entry: string;
5
- }
6
- export type EnsureTerminalHostResult = {
7
- readonly status: "ready";
8
- readonly executable: TerminalHostCommand;
9
- readonly endpoint: string;
10
- } | {
11
- readonly status: "fallback";
12
- readonly reason: TerminalHostFallbackReason;
13
- };
14
- interface HostCommandResult {
15
- readonly code: number;
16
- readonly stdout: string;
17
- readonly stderr: string;
18
- }
19
- export interface EnsureTerminalHostOptions {
20
- readonly releaseRoot: string;
21
- readonly profileRoot: string;
22
- readonly dataDir: string;
23
- readonly runtimeDir: string;
24
- readonly environment: NodeJS.ProcessEnv;
25
- readonly platform?: NodeJS.Platform;
26
- readonly architecture?: string;
27
- readonly timeoutMs?: number;
28
- readonly maxConcurrentStarts?: number;
29
- readonly unresponsiveRestartSeconds?: number;
30
- readonly run?: (executable: string, arguments_: readonly string[], environment: NodeJS.ProcessEnv, timeoutMs: number) => Promise<HostCommandResult>;
31
- readonly verify?: (addon: string, platform: NodeJS.Platform, architecture: string) => Promise<unknown>;
32
- }
33
- export declare function resolveTerminalHostPath(releaseRoot: string, environment?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, architecture?: string): string;
34
- export declare function resolveTerminalHostEntryPath(releaseRoot: string): string;
35
- export declare function ensureTerminalHost(options: EnsureTerminalHostOptions): Promise<EnsureTerminalHostResult>;
36
- export {};
@@ -1,151 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { access } from "node:fs/promises";
3
- import { constants } from "node:fs";
4
- import { resolve } from "node:path";
5
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
6
- import { TerminalHostArtifactError, verifyTerminalHostArtifact } from "./terminal-host-artifact.js";
7
- export function resolveTerminalHostPath(releaseRoot, environment = process.env, platform = process.platform, architecture = process.arch) {
8
- const override = developmentOverride(environment);
9
- if (override)
10
- return resolve(override);
11
- return resolve(releaseRoot, "dist", "native", `${platform}-${architecture}`, `${PRODUCT_IDENTITY.artifacts.terminalHostAddon}.node`);
12
- }
13
- export function resolveTerminalHostEntryPath(releaseRoot) {
14
- return resolve(releaseRoot, "dist", "foundation", "resident-tabs", `${PRODUCT_IDENTITY.artifacts.terminalHostEntry}.js`);
15
- }
16
- /** The terminal-host override is a development aid; installed releases always run their own verified artifact. */
17
- function developmentOverride(environment) {
18
- if (!environment[PRODUCT_IDENTITY.environment.developmentInstanceId])
19
- return undefined;
20
- return environment[PRODUCT_IDENTITY.environment.terminalHostPath]?.trim() || undefined;
21
- }
22
- export async function ensureTerminalHost(options) {
23
- const platform = options.platform ?? process.platform;
24
- const architecture = options.architecture ?? process.arch;
25
- if (!supported(platform, architecture))
26
- return { status: "fallback", reason: "unsupported platform" };
27
- const addon = resolveTerminalHostPath(options.releaseRoot, options.environment, platform, architecture);
28
- const command = { executable: process.execPath, entry: resolveTerminalHostEntryPath(options.releaseRoot) };
29
- if (developmentOverride(options.environment)) {
30
- try {
31
- await Promise.all([access(addon, constants.R_OK), access(command.entry, constants.R_OK)]);
32
- }
33
- catch {
34
- return { status: "fallback", reason: "terminal host not installed" };
35
- }
36
- }
37
- else {
38
- try {
39
- await (options.verify ?? verifyTerminalHostArtifact)(addon, platform, architecture);
40
- }
41
- catch (error) {
42
- return { status: "fallback", reason: verificationReason(error) };
43
- }
44
- }
45
- const run = options.run ?? runHostCommand;
46
- const timeoutMs = options.timeoutMs ?? 8_000;
47
- const common = ["--profile", options.profileRoot, "--data-dir", options.dataDir, "--runtime-dir", options.runtimeDir];
48
- const environment = { ...options.environment };
49
- const invoke = async (arguments_, commandTimeoutMs) => await run(command.executable, [command.entry, ...arguments_], environment, commandTimeoutMs);
50
- try {
51
- const probe = await invoke(["probe", ...common], Math.min(4_000, timeoutMs));
52
- const existing = parseResult(probe.stdout);
53
- if (probe.code === 0) {
54
- if (existing?.generation === 1 && typeof existing.endpoint === "string") {
55
- return { status: "ready", executable: command, endpoint: existing.endpoint };
56
- }
57
- return {
58
- status: "fallback",
59
- reason: typeof existing?.generation === "number" ? "incompatible generation" : "host probe failed",
60
- };
61
- }
62
- if (probe.code === 4 || existing?.outcome === "incompatible-generation")
63
- return { status: "fallback", reason: "incompatible generation" };
64
- if (existing?.outcome !== "not-running" && probe.code !== 3)
65
- return { status: "fallback", reason: classifiedReason(existing?.reason, "host probe failed") };
66
- const maximum = Math.max(1, Math.min(8, Math.trunc(options.maxConcurrentStarts ?? 2)));
67
- const unresponsiveRestartSeconds = Math.max(30, Math.min(600, Math.trunc(options.unresponsiveRestartSeconds ?? 120)));
68
- const start = await invoke([
69
- "server", "--detach", ...common,
70
- "--max-concurrent-starts", String(maximum),
71
- "--unresponsive-restart-seconds", String(unresponsiveRestartSeconds),
72
- ], timeoutMs);
73
- const started = parseResult(start.stdout);
74
- if (start.code !== 0)
75
- return { status: "fallback", reason: classifiedReason(started?.reason, "launch not verified") };
76
- if (started?.verified !== true || typeof started.endpoint !== "string")
77
- return { status: "fallback", reason: "launch not verified" };
78
- const deadline = Date.now() + timeoutMs;
79
- while (Date.now() < deadline) {
80
- const result = await invoke(["probe", ...common], Math.min(1_000, Math.max(1, deadline - Date.now())));
81
- const ready = parseResult(result.stdout);
82
- if (result.code === 0) {
83
- if (ready?.generation === 1 && typeof ready.endpoint === "string") {
84
- return { status: "ready", executable: command, endpoint: ready.endpoint };
85
- }
86
- return {
87
- status: "fallback",
88
- reason: typeof ready?.generation === "number" ? "incompatible generation" : "host probe failed",
89
- };
90
- }
91
- if (result.code === 4 || ready?.outcome === "incompatible-generation")
92
- return { status: "fallback", reason: "incompatible generation" };
93
- await new Promise(resolvePromise => setTimeout(resolvePromise, 40));
94
- }
95
- return { status: "fallback", reason: "host startup timed out" };
96
- }
97
- catch (error) {
98
- return { status: "fallback", reason: isTimeout(error) ? "host startup timed out" : "host probe failed" };
99
- }
100
- }
101
- function supported(platform, architecture) {
102
- return (platform === "win32" || platform === "linux") && architecture === "x64"
103
- || platform === "darwin" && (architecture === "arm64" || architecture === "x64");
104
- }
105
- function verificationReason(error) {
106
- if (!(error instanceof TerminalHostArtifactError))
107
- return "terminal host not verified";
108
- if (error.code === "TERMINAL_HOST_ARTIFACT_MISSING")
109
- return "terminal host not installed";
110
- if (error.code === "TERMINAL_HOST_ARTIFACT_UNSUPPORTED")
111
- return "unsupported platform";
112
- return "terminal host not verified";
113
- }
114
- function parseResult(output) {
115
- const line = output.trim().split(/\r?\n/).filter(Boolean).at(-1);
116
- if (!line)
117
- return null;
118
- try {
119
- const parsed = JSON.parse(line);
120
- return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : null;
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- function classifiedReason(value, fallback) {
127
- if (value === "registry-unreadable")
128
- return "registry unreadable";
129
- if (value === "blocked")
130
- return "recovery blocked";
131
- if (value === "incompatible-generation")
132
- return "incompatible generation";
133
- return fallback;
134
- }
135
- function isTimeout(error) { return error instanceof Error && "code" in error && error.code === "ETIMEDOUT"; }
136
- async function runHostCommand(executable, arguments_, environment, timeoutMs) {
137
- return await new Promise((resolvePromise, rejectPromise) => {
138
- const child = spawn(executable, [...arguments_], { env: environment, windowsHide: true, stdio: ["ignore", "pipe", "pipe"] });
139
- const stdout = [];
140
- const stderr = [];
141
- child.stdout.on("data", chunk => stdout.push(Buffer.from(chunk)));
142
- child.stderr.on("data", chunk => stderr.push(Buffer.from(chunk)));
143
- child.once("error", rejectPromise);
144
- child.once("close", code => { clearTimeout(timer); resolvePromise({ code: code ?? 1, stdout: Buffer.concat(stdout).toString("utf8"), stderr: Buffer.concat(stderr).toString("utf8") }); });
145
- const timer = setTimeout(() => {
146
- child.kill("SIGKILL");
147
- rejectPromise(Object.assign(new Error("terminal host command timed out"), { code: "ETIMEDOUT" }));
148
- }, timeoutMs);
149
- timer.unref();
150
- });
151
- }
@@ -1,8 +0,0 @@
1
- export declare const RESIDENT_TAB_FAULT_ENVIRONMENT: readonly ["A1_TABS_FAULT_CRASH_POINT", "A1_TABS_HERMETIC_TEST"];
2
- export declare function residentTabFaultEnvironment(point: string, hermetic?: boolean): NodeJS.ProcessEnv;
3
- /** Test-only crash points are inert unless the caller explicitly marks a hermetic process. */
4
- export declare class ResidentTabFaultInjection {
5
- #private;
6
- constructor(environment?: NodeJS.ProcessEnv, crash?: (point: string) => never);
7
- at(point: string): void;
8
- }
@@ -1,26 +0,0 @@
1
- const CRASH_POINT = "A1_TABS_FAULT_CRASH_POINT";
2
- const HERMETIC = "A1_TABS_HERMETIC_TEST";
3
- export const RESIDENT_TAB_FAULT_ENVIRONMENT = Object.freeze([CRASH_POINT, HERMETIC]);
4
- export function residentTabFaultEnvironment(point, hermetic = true) {
5
- return Object.fromEntries(hermetic ? [[CRASH_POINT, point], [HERMETIC, "1"]] : [[CRASH_POINT, point]]);
6
- }
7
- /** Test-only crash points are inert unless the caller explicitly marks a hermetic process. */
8
- export class ResidentTabFaultInjection {
9
- #point;
10
- #crash;
11
- constructor(environment = process.env, crash = point => {
12
- process.stderr.write(`resident tab injected crash: ${point}\n`);
13
- process.abort();
14
- }) {
15
- const point = environment[CRASH_POINT];
16
- if (point !== undefined && environment[HERMETIC] !== "1") {
17
- throw new Error(`${CRASH_POINT} is available only in a hermetic resident-tab test`);
18
- }
19
- this.#point = point;
20
- this.#crash = crash;
21
- }
22
- at(point) {
23
- if (this.#point === point)
24
- this.#crash(point);
25
- }
26
- }
@@ -1,7 +0,0 @@
1
- export type ResidentFixtureStoppedStage = "child-render-write";
2
- export interface ResidentFixtureControlPort {
3
- stopped(stage: ResidentFixtureStoppedStage): boolean;
4
- fragmentChildWrite(data: string): readonly string[];
5
- }
6
- /** Returns the exact-artifact fixture control, or null for every ordinary resident child. */
7
- export declare function residentFixtureControl(environment?: NodeJS.ProcessEnv): ResidentFixtureControlPort | null;
@@ -1,35 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
4
- import { residentProgressObserver } from "./progress-observation.js";
5
- /** Returns the exact-artifact fixture control, or null for every ordinary resident child. */
6
- export function residentFixtureControl(environment = process.env) {
7
- const directory = environment[PRODUCT_IDENTITY.environment.residentFixtureControlDir];
8
- if (environment === process.env)
9
- delete process.env[PRODUCT_IDENTITY.environment.residentFixtureControlDir];
10
- // Invariant: launch erases the bridge tab identity; the observer retains the observed one.
11
- const tabId = residentProgressObserver(environment)?.tabId;
12
- if (!directory || !tabId || !/^[a-z0-9-]{1,128}$/iu.test(tabId))
13
- return null;
14
- return {
15
- stopped: stage => existsSync(join(directory, `${tabId}.${stage}.stop`)),
16
- fragmentChildWrite: data => existsSync(join(directory, `${tabId}.child-render-fragments.enable`))
17
- ? boundedFragments(data)
18
- : [data],
19
- };
20
- }
21
- function boundedFragments(data) {
22
- const points = [...data];
23
- if (points.length <= 1)
24
- return [data];
25
- if (points.length <= 16)
26
- return points;
27
- const fragments = points.slice(0, 8);
28
- const middle = points.slice(8, -8);
29
- const chunkSize = Math.max(1, Math.ceil(middle.length / 48));
30
- for (let index = 0; index < middle.length; index += chunkSize) {
31
- fragments.push(middle.slice(index, index + chunkSize).join(""));
32
- }
33
- fragments.push(...points.slice(-8));
34
- return fragments;
35
- }
@@ -1,17 +0,0 @@
1
- import { createRequire } from "node:module";
2
- import { dirname, resolve } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
- const filename = fileURLToPath(import.meta.url);
6
- const target = `${process.platform}-${process.arch}`;
7
- const development = process.env[PRODUCT_IDENTITY.environment.developmentInstanceId]?.trim();
8
- const override = development ? process.env[PRODUCT_IDENTITY.environment.terminalHostPath]?.trim() : undefined;
9
- const addonPath = resolve(override || resolve(dirname(filename), "../../native", target, `${PRODUCT_IDENTITY.artifacts.terminalHostAddon}.node`));
10
- const addon = createRequire(import.meta.url)(addonPath);
11
- if (typeof addon.runRole !== "function")
12
- throw new Error("terminal host addon exports are incompatible");
13
- // Invariant: runRole blocks Node's main thread, so this entry must not register JavaScript signal
14
- // listeners whose callbacks cannot run until the native role has already returned. Default process
15
- // signal handling keeps attach clients and identity-verified resident roles externally stoppable.
16
- process.env[PRODUCT_IDENTITY.environment.terminalHostPath] = addonPath;
17
- process.exitCode = addon.runRole(process.argv.slice(2), { executable: process.execPath, entry: filename, artifact: addonPath });
@@ -1,15 +0,0 @@
1
- export { ensureTerminalHost, resolveTerminalHostEntryPath, resolveTerminalHostPath } from "./ensure-terminal-host.js";
2
- export type { EnsureTerminalHostOptions, EnsureTerminalHostResult, TerminalHostCommand, TerminalHostFallbackReason } from "./ensure-terminal-host.js";
3
- export { readResidentTabLaunchSettings } from "./settings.js";
4
- export type { ResidentTabLaunchSettings } from "./settings.js";
5
- export { selectResidentHost } from "./routing.js";
6
- export type { ResidentHostSelectionOptions } from "./routing.js";
7
- export { readResidentReleaseHolds } from "./release-holds.js";
8
- export type { ResidentReleaseHoldReport } from "./release-holds.js";
9
- export { runTerminalHostMaintenance } from "./maintenance.js";
10
- export type { MaintenanceAction, MaintenanceHostState, MaintenanceOptions, MaintenanceReport } from "./maintenance.js";
11
- export { DOCTOR_MAX_BYTES, writeDoctorBundle } from "./doctor.js";
12
- export type { DoctorBundle, DoctorOptions } from "./doctor.js";
13
- export type { ContinuityOptions } from "./continuity.js";
14
- /** Load native continuity inspection only when a caller is preparing client activation. */
15
- export declare function assertResidentContinuity(options: import("./continuity.js").ContinuityOptions): Promise<void>;
@@ -1,10 +0,0 @@
1
- export { ensureTerminalHost, resolveTerminalHostEntryPath, resolveTerminalHostPath } from "./ensure-terminal-host.js";
2
- export { readResidentTabLaunchSettings } from "./settings.js";
3
- export { selectResidentHost } from "./routing.js";
4
- export { readResidentReleaseHolds } from "./release-holds.js";
5
- export { runTerminalHostMaintenance } from "./maintenance.js";
6
- export { DOCTOR_MAX_BYTES, writeDoctorBundle } from "./doctor.js";
7
- /** Load native continuity inspection only when a caller is preparing client activation. */
8
- export async function assertResidentContinuity(options) {
9
- await (await import("./continuity.js")).assertResidentContinuity(options);
10
- }