@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,62 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- /** Diagnostics beyond this many bytes are dropped rather than buffered. */
3
- const MAX_STDERR_BYTES = 4096;
4
- /**
5
- * Runs one terminal-host command whose report is small. An oversized report kills the command and
6
- * reports a failed exchange; a command that outlives its deadline is killed and rejected.
7
- */
8
- export async function runBoundedHostCommand(command, arguments_, limits) {
9
- return await new Promise((resolvePromise, rejectPromise) => {
10
- const child = spawn(command.executable, [command.entry, ...arguments_], {
11
- env: limits.environment,
12
- windowsHide: true,
13
- stdio: ["ignore", "pipe", "pipe"],
14
- });
15
- const stdout = [];
16
- const stderr = [];
17
- let stderrSize = 0;
18
- child.stderr.on("data", (chunk) => {
19
- if (stderrSize >= MAX_STDERR_BYTES)
20
- return;
21
- const kept = chunk.subarray(0, MAX_STDERR_BYTES - stderrSize);
22
- stderrSize += kept.length;
23
- stderr.push(Buffer.from(kept));
24
- });
25
- let size = 0;
26
- let overflowed = false;
27
- child.stdout.on("data", chunk => {
28
- size += chunk.length;
29
- // Security: an oversized answer is a failed exchange, never a truncated report to parse.
30
- if (size > limits.maxStdoutBytes) {
31
- overflowed = true;
32
- child.kill("SIGKILL");
33
- }
34
- else
35
- stdout.push(Buffer.from(chunk));
36
- });
37
- child.once("error", rejectPromise);
38
- child.once("close", code => {
39
- clearTimeout(timer);
40
- const diagnostic = lastDiagnosticLine(Buffer.concat(stderr).toString("utf8"));
41
- resolvePromise(overflowed
42
- ? { code: code === 0 || code === null ? 1 : code, stdout: "", stderr: diagnostic }
43
- : { code: code ?? 1, stdout: Buffer.concat(stdout).toString("utf8"), stderr: diagnostic });
44
- });
45
- const timer = setTimeout(() => {
46
- child.kill("SIGKILL");
47
- rejectPromise(new Error(`${limits.label} timed out`));
48
- }, limits.timeoutMs);
49
- timer.unref();
50
- });
51
- }
52
- /** Keeps one terminal-safe line: the native host reports its reason last. */
53
- function lastDiagnosticLine(text) {
54
- const lines = text.split(/\r?\n/u)
55
- // Security: diagnostics never carry terminal controls into a later message.
56
- .map(line => line
57
- .replace(/\u001b\[[0-?]*[ -/]*[@-~]/gu, "")
58
- .replace(/[\u0000-\u001f\u007f-\u009f]/gu, "")
59
- .trim())
60
- .filter(line => line.length > 0);
61
- return (lines.at(-1) ?? "").slice(0, 300);
62
- }
@@ -1,73 +0,0 @@
1
- import { type ResidentTabRoute } from "./routes.js";
2
- export type ResidentTabStatus = "starting" | "working" | "needs-input" | "done-unseen" | "done" | "aborted" | "error" | "idle" | "unresponsive" | "crashed" | "restarting" | "failed";
3
- export { residentUtilityRoute, type ResidentTabRoute } from "./routes.js";
4
- export interface TabBridgeCredentials {
5
- readonly tabId: string;
6
- readonly token: string;
7
- readonly endpoint: string;
8
- readonly releaseId?: string;
9
- }
10
- export interface TabAttachment {
11
- readonly clientId: string;
12
- readonly controllerRevision: number;
13
- }
14
- export type TabBridgeCommand = {
15
- readonly type: "visibility";
16
- readonly visible: boolean;
17
- } | {
18
- readonly type: "client";
19
- readonly version: string;
20
- } | {
21
- readonly type: "rename";
22
- readonly name: string;
23
- readonly nameSource: "default" | "user" | "auto";
24
- } | {
25
- readonly type: "route";
26
- readonly route: ResidentTabRoute;
27
- } | {
28
- readonly type: "stop";
29
- readonly deadlineMs: number;
30
- };
31
- interface BridgeTransport {
32
- write(bytes: Uint8Array): boolean;
33
- destroy(): void;
34
- once(event: "connect" | "error" | "close", listener: (...args: unknown[]) => void): unknown;
35
- on(event: "data", listener: (bytes: Buffer) => void): unknown;
36
- }
37
- export interface TabBridgeOptions {
38
- readonly credentials: TabBridgeCredentials;
39
- readonly pid?: number;
40
- readonly startIdentity?: string;
41
- readonly build?: string;
42
- readonly connect?: (endpoint: string) => BridgeTransport;
43
- readonly heartbeatIntervalMs?: number;
44
- readonly setInterval?: (callback: () => void, milliseconds: number) => unknown;
45
- readonly clearInterval?: (timer: unknown) => void;
46
- }
47
- /** Metadata-only advisory bridge. Terminal input and transcript bytes have no API here. */
48
- export declare class TabBridgeClient {
49
- #private;
50
- constructor(options: TabBridgeOptions);
51
- get tabId(): string;
52
- get available(): boolean;
53
- captureAttachment(): TabAttachment | null;
54
- onCommand(listener: (command: TabBridgeCommand) => void): () => void;
55
- start(timeoutMs?: number): Promise<boolean>;
56
- status(state: ResidentTabStatus, degraded?: boolean, pendingRequests?: number, queuedInput?: number): void;
57
- degraded(degraded: boolean): void;
58
- accent(accent: string): void;
59
- session(file: string | null, name: string | null, nameSource?: "default" | "user" | "auto"): void;
60
- prompt(interrupted: boolean): void;
61
- /** Publishes the effective tab shortcut assignments so the host dispatches and labels the same keys. */
62
- shortcuts(assignments: Readonly<Record<string, string | null>>): void;
63
- requestDetach(origin?: TabAttachment | null, timeoutMs?: number): Promise<boolean>;
64
- requestRestart(origin?: TabAttachment | null, timeoutMs?: number): Promise<boolean>;
65
- requestClose(origin?: TabAttachment | null, timeoutMs?: number): Promise<boolean>;
66
- consumeControllerBoundaryInput(data: string): string;
67
- close(): void;
68
- /**
69
- * Asks the server to act for the client that controls this tab, as `origin`: leave it, restart or close the tab,
70
- * or open the tab bar's Plus Menu dialog (`configure-plus`).
71
- */
72
- requestAction(action: "detach" | "restart" | "close" | "configure-plus", origin?: TabAttachment | null, timeoutMs?: number): Promise<boolean>;
73
- }
@@ -1,327 +0,0 @@
1
- import { connect } from "node:net";
2
- import { encodeResidentFrame, ResidentFrameDecoder } from "./protocol.js";
3
- import { RESIDENT_TAB_ROUTES } from "./routes.js";
4
- export { residentUtilityRoute } from "./routes.js";
5
- const RESIDENT_TAB_ROUTE_SET = new Set(RESIDENT_TAB_ROUTES);
6
- /** Metadata-only advisory bridge. Terminal input and transcript bytes have no API here. */
7
- export class TabBridgeClient {
8
- #options;
9
- #transport = null;
10
- #connected = false;
11
- #available = true;
12
- #features = new Set();
13
- #sequence = 0;
14
- #request = 0;
15
- #attachment = null;
16
- #closed = false;
17
- #retry = null;
18
- #latestStatus = null;
19
- #accent = null;
20
- #latestSession = null;
21
- #latestShortcuts = null;
22
- #heartbeat = null;
23
- #pending = new Map();
24
- #startWaiter = null;
25
- #commandListeners = new Set();
26
- #pendingCommands = [];
27
- #boundaryInputRemainder = "";
28
- constructor(options) { this.#options = options; }
29
- get tabId() { return this.#options.credentials.tabId; }
30
- get available() { return this.#available && this.#connected; }
31
- captureAttachment() { return this.#attachment === null ? null : { ...this.#attachment }; }
32
- onCommand(listener) {
33
- this.#commandListeners.add(listener);
34
- for (const command of this.#pendingCommands.splice(0))
35
- listener(command);
36
- return () => this.#commandListeners.delete(listener);
37
- }
38
- async start(timeoutMs = 4_000) {
39
- if (this.#closed || this.#transport !== null)
40
- return this.available;
41
- const transport = (this.#options.connect ?? (endpoint => connect(endpoint)))(this.#options.credentials.endpoint);
42
- this.#transport = transport;
43
- const decoder = new ResidentFrameDecoder();
44
- transport.on("data", bytes => {
45
- try {
46
- for (const message of decoder.push(bytes))
47
- this.#receive(message);
48
- }
49
- catch {
50
- if (this.#transport === transport)
51
- this.#fail();
52
- }
53
- });
54
- transport.once("close", () => { if (this.#transport === transport)
55
- this.#fail(); });
56
- transport.once("error", () => { if (this.#transport === transport)
57
- this.#fail(); });
58
- return await new Promise(resolvePromise => {
59
- let settled = false;
60
- let timer;
61
- const finish = (value) => {
62
- if (settled)
63
- return;
64
- settled = true;
65
- if (timer !== undefined)
66
- clearTimeout(timer);
67
- this.#startWaiter = null;
68
- resolvePromise(value);
69
- };
70
- this.#startWaiter = finish;
71
- transport.once("connect", () => {
72
- this.#send("hello", {
73
- role: "bridge", generation: 1, build: this.#options.build ?? "a1", releaseId: this.#options.credentials.releaseId,
74
- features: ["bridge-status", "bridge-detach", "bridge-heartbeat", "bridge-restart", "bridge-visibility", "bridge-rename", "bridge-route", "bridge-stop", "bridge-shortcuts", "controller-boundary", "recovery-journal", "client-identity"],
75
- token: [...Buffer.from(this.#options.credentials.token, "base64")], tabId: this.#options.credentials.tabId,
76
- pid: this.#options.pid ?? process.pid, startIdentity: this.#options.startIdentity ?? `${process.pid}:node`,
77
- }, ++this.#request);
78
- });
79
- transport.once("error", () => finish(false));
80
- timer = setTimeout(() => { this.#fail(); finish(false); }, timeoutMs);
81
- timer.unref();
82
- });
83
- }
84
- status(state, degraded = false, pendingRequests = 0, queuedInput = 0) {
85
- this.#latestStatus = { state, degraded, accent: this.#accent, pendingRequests, queuedInput };
86
- const recoveryState = state === "unresponsive" || state === "crashed" || state === "restarting" || state === "failed";
87
- if (recoveryState && !this.#supports("recovery-status"))
88
- return;
89
- this.#send("bridge.status", {
90
- seq: ++this.#sequence,
91
- state,
92
- pendingRequests: Math.max(0, Math.trunc(pendingRequests)),
93
- queuedInput: Math.max(0, Math.trunc(queuedInput)),
94
- ...(this.#accent === null ? {} : { accent: this.#accent }),
95
- ...(degraded && this.#supports("recovery-status") ? { degraded: true } : {}),
96
- });
97
- }
98
- degraded(degraded) {
99
- this.status(this.#latestStatus?.state ?? "idle", degraded);
100
- }
101
- accent(accent) {
102
- this.#accent = accent;
103
- if (this.#latestStatus !== null)
104
- this.status(this.#latestStatus.state, this.#latestStatus.degraded, this.#latestStatus.pendingRequests, this.#latestStatus.queuedInput);
105
- }
106
- session(file, name, nameSource = "default") {
107
- this.#latestSession = { file, name, nameSource };
108
- this.#send("bridge.session", { file, name, nameSource });
109
- }
110
- prompt(interrupted) {
111
- this.#send("bridge.prompt", { interrupted });
112
- }
113
- /** Publishes the effective tab shortcut assignments so the host dispatches and labels the same keys. */
114
- shortcuts(assignments) {
115
- this.#latestShortcuts = Object.entries(assignments).map(([action, key]) => [action, key]);
116
- this.#sendShortcuts();
117
- }
118
- #sendShortcuts() {
119
- if (this.#latestShortcuts === null || !this.#supports("bridge-shortcuts"))
120
- return;
121
- this.#send("bridge.shortcuts", { assignments: this.#latestShortcuts.map(([action, key]) => [action, key]) });
122
- }
123
- requestDetach(origin = this.captureAttachment(), timeoutMs = 1_000) {
124
- return this.requestAction("detach", origin, timeoutMs);
125
- }
126
- requestRestart(origin = this.captureAttachment(), timeoutMs = 1_000) {
127
- return this.requestAction("restart", origin, timeoutMs);
128
- }
129
- requestClose(origin = this.captureAttachment(), timeoutMs = 1_000) {
130
- return this.requestAction("close", origin, timeoutMs);
131
- }
132
- consumeControllerBoundaryInput(data) {
133
- const prefix = "\x1bP+a1;controller=";
134
- const suffix = "\x1b\\";
135
- let pending = this.#boundaryInputRemainder + data;
136
- this.#boundaryInputRemainder = "";
137
- let output = "";
138
- while (pending.length > 0) {
139
- const start = pending.indexOf(prefix);
140
- if (start === -1) {
141
- let retained = 0;
142
- const maximum = Math.min(prefix.length - 1, pending.length);
143
- // Invariant: a lone trailing Esc is a user key and passes at once; only `\x1bP` or more is withheld.
144
- for (let length = maximum; length > 1; length--) {
145
- if (pending.endsWith(prefix.slice(0, length))) {
146
- retained = length;
147
- break;
148
- }
149
- }
150
- const split = pending.length - retained;
151
- output += pending.slice(0, split);
152
- this.#boundaryInputRemainder = pending.slice(split);
153
- break;
154
- }
155
- output += pending.slice(0, start);
156
- const end = pending.indexOf(suffix, start + prefix.length);
157
- if (end === -1) {
158
- this.#boundaryInputRemainder = pending.slice(start);
159
- break;
160
- }
161
- const body = pending.slice(start + prefix.length, end);
162
- const separator = body.indexOf(";");
163
- const generation = Number(body.slice(0, separator));
164
- const nonceHex = body.slice(separator + 1);
165
- if (separator > 0 && Number.isSafeInteger(generation) && generation > 0 && /^[0-9a-f]{32}$/u.test(nonceHex)) {
166
- this.#send("bridge.boundary", {
167
- generation,
168
- nonce: [...Buffer.from(nonceHex, "hex")],
169
- });
170
- }
171
- else {
172
- output += pending.slice(start, end + suffix.length);
173
- }
174
- pending = pending.slice(end + suffix.length);
175
- }
176
- return output;
177
- }
178
- close() {
179
- this.#closed = true;
180
- if (this.#retry !== null)
181
- clearTimeout(this.#retry);
182
- this.#retry = null;
183
- this.#stopHeartbeat();
184
- const transport = this.#transport;
185
- this.#transport = null;
186
- transport?.destroy();
187
- this.#fail(false);
188
- }
189
- #emitCommand(command) {
190
- if (this.#commandListeners.size === 0) {
191
- if (this.#pendingCommands.length >= 16)
192
- this.#pendingCommands.shift();
193
- this.#pendingCommands.push(command);
194
- return;
195
- }
196
- for (const listener of this.#commandListeners)
197
- listener(command);
198
- }
199
- #send(type, body, requestId) {
200
- if (this.#transport === null || (!this.#connected && type !== "hello"))
201
- return;
202
- try {
203
- this.#transport.write(encodeResidentFrame({ type, ...(requestId === undefined ? {} : { requestId }), body }));
204
- }
205
- catch {
206
- this.#fail();
207
- }
208
- }
209
- #receive(message) {
210
- if (message.type === "welcome" && message.body["generation"] === 1) {
211
- const id = this.#options.credentials.releaseId;
212
- if (id !== undefined && message.body["releaseId"] !== id) {
213
- this.#fail(false);
214
- return;
215
- }
216
- const advertised = message.body["features"];
217
- this.#features = new Set(Array.isArray(advertised) ? advertised.filter((feature) => typeof feature === "string") : []);
218
- this.#connected = true;
219
- this.#available = true;
220
- this.#startWaiter?.(true);
221
- if (this.#supports("bridge-heartbeat"))
222
- this.#startHeartbeat();
223
- if (this.#latestStatus !== null)
224
- this.status(this.#latestStatus.state, this.#latestStatus.degraded, this.#latestStatus.pendingRequests, this.#latestStatus.queuedInput);
225
- if (this.#latestSession !== null)
226
- this.#send("bridge.session", this.#latestSession);
227
- this.#sendShortcuts();
228
- return;
229
- }
230
- if (message.type === "incompatible-generation") {
231
- this.#fail();
232
- return;
233
- }
234
- if (message.type === "bridge.client" && typeof message.body["version"] === "string") {
235
- const version = message.body["version"];
236
- if (version.length <= 128 && /^\d+\.\d+\.\d+(?:[-+][a-z0-9.+-]+)?$/iu.test(version))
237
- this.#emitCommand({ type: "client", version });
238
- return;
239
- }
240
- if (message.type === "bridge.visibility" && typeof message.body["visible"] === "boolean") {
241
- this.#emitCommand({ type: "visibility", visible: message.body["visible"] });
242
- return;
243
- }
244
- if (message.type === "bridge.rename" && typeof message.body["name"] === "string") {
245
- const source = message.body["nameSource"];
246
- this.#emitCommand({ type: "rename", name: message.body["name"], nameSource: source === "auto" || source === "default" ? source : "user" });
247
- return;
248
- }
249
- if (message.type === "bridge.route" && RESIDENT_TAB_ROUTE_SET.has(message.body["route"])) {
250
- this.#emitCommand({ type: "route", route: message.body["route"] });
251
- return;
252
- }
253
- if (message.type === "bridge.stop" && typeof message.body["deadlineMs"] === "number") {
254
- this.#emitCommand({ type: "stop", deadlineMs: message.body["deadlineMs"] });
255
- return;
256
- }
257
- if (message.type === "attachment") {
258
- const clientId = message.body["clientId"];
259
- const revision = message.body["controllerRevision"];
260
- if (typeof clientId === "string" && typeof revision === "number")
261
- this.#attachment = { clientId, controllerRevision: revision };
262
- return;
263
- }
264
- if ((message.type === "bridge.result" || message.type === "result") && typeof message.requestId === "number") {
265
- const resolvePromise = this.#pending.get(message.requestId);
266
- if (resolvePromise) {
267
- this.#pending.delete(message.requestId);
268
- resolvePromise(message.body["accepted"] === true);
269
- }
270
- }
271
- }
272
- /**
273
- * Asks the server to act for the client that controls this tab, as `origin`: leave it, restart or close the tab,
274
- * or open the tab bar's Plus Menu dialog (`configure-plus`).
275
- */
276
- async requestAction(action, origin = this.captureAttachment(), timeoutMs = 1_000) {
277
- if (!this.available || origin === null || (action === "restart" && !this.#supports("bridge-restart")))
278
- return false;
279
- const requestId = ++this.#request;
280
- const result = new Promise(resolvePromise => this.#pending.set(requestId, resolvePromise));
281
- this.#send("bridge.request", { action, clientId: origin.clientId, controllerRevision: origin.controllerRevision }, requestId);
282
- const timeout = new Promise(resolvePromise => {
283
- const timer = setTimeout(() => { this.#pending.delete(requestId); resolvePromise(false); }, timeoutMs);
284
- timer.unref();
285
- });
286
- return await Promise.race([result, timeout]);
287
- }
288
- #startHeartbeat() {
289
- if (this.#heartbeat !== null)
290
- return;
291
- const schedule = this.#options.setInterval ?? ((callback, milliseconds) => setInterval(callback, milliseconds));
292
- this.#heartbeat = schedule(() => this.#send("bridge.heartbeat", { seq: ++this.#sequence }), this.#options.heartbeatIntervalMs ?? 5_000);
293
- this.#heartbeat.unref?.();
294
- }
295
- #stopHeartbeat() {
296
- if (this.#heartbeat === null)
297
- return;
298
- (this.#options.clearInterval ?? (timer => clearInterval(timer)))(this.#heartbeat);
299
- this.#heartbeat = null;
300
- }
301
- #supports(feature) {
302
- return this.#features.has("crash-recovery") || this.#features.has(feature);
303
- }
304
- #fail(retry = true) {
305
- const transport = this.#transport;
306
- this.#stopHeartbeat();
307
- this.#available = false;
308
- this.#connected = false;
309
- this.#features.clear();
310
- this.#attachment = null;
311
- this.#transport = null;
312
- transport?.destroy();
313
- this.#startWaiter?.(false);
314
- this.#startWaiter = null;
315
- for (const resolvePromise of this.#pending.values())
316
- resolvePromise(false);
317
- this.#pending.clear();
318
- if (retry && !this.#closed && this.#retry === null) {
319
- this.#retry = setTimeout(() => {
320
- this.#retry = null;
321
- void this.start().then(connected => { if (!connected)
322
- this.#fail(); });
323
- }, 250);
324
- this.#retry.unref();
325
- }
326
- }
327
- }
@@ -1,12 +0,0 @@
1
- export interface ContinuityOptions {
2
- readonly releaseRoot: string;
3
- readonly dataDir: string;
4
- readonly profileRoot: string;
5
- readonly runtimeDir: string;
6
- readonly environment: NodeJS.ProcessEnv;
7
- readonly inspect?: (options: Omit<ContinuityOptions, "inspect">) => Promise<string>;
8
- }
9
- /** Activation authority requires a stable authenticated source-contract set, never an idle Agent. */
10
- export declare function assertResidentContinuity(options: ContinuityOptions): Promise<void>;
11
- /** Native inspection/import is read-only toward execution and never starts or stops a source. */
12
- export declare function inspectResidentContinuity(options: Omit<ContinuityOptions, "inspect">): Promise<string>;
@@ -1,63 +0,0 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import { resolve } from "node:path";
3
- import { RUNTIME_CONTROL_API } from "./runtime-control.js";
4
- import { runBoundedHostCommand } from "./bounded-host-command.js";
5
- import { resolveTerminalHostEntryPath, resolveTerminalHostPath } from "./ensure-terminal-host.js";
6
- import { verifyTerminalHostArtifact } from "./terminal-host-artifact.js";
7
- /** Activation authority requires a stable authenticated source-contract set, never an idle Agent. */
8
- export async function assertResidentContinuity(options) {
9
- const { inspect = inspectResidentContinuity, ...context } = options;
10
- const first = await inspect(context);
11
- const second = await inspect(context);
12
- if (first !== second && second !== await inspect(context)) {
13
- throw new Error("Resident workspace changed during update readiness");
14
- }
15
- }
16
- /** Native inspection/import is read-only toward execution and never starts or stops a source. */
17
- export async function inspectResidentContinuity(options) {
18
- let hasRecords = false;
19
- for (const directory of ["tabs", "resident-workspaces"]) {
20
- try {
21
- hasRecords ||= (await readdir(resolve(options.dataDir, directory))).length > 0;
22
- }
23
- catch (error) {
24
- if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) {
25
- throw new Error("Resident workspace discovery is unavailable; update activation was refused.");
26
- }
27
- }
28
- }
29
- if (!hasRecords)
30
- return "empty";
31
- const manifest = JSON.parse(await readFile(resolve(options.releaseRoot, "package.json"), "utf8"));
32
- const contracts = manifest.residentControlContracts;
33
- if (!Array.isArray(contracts)
34
- || ![RUNTIME_CONTROL_API, "resident-workspace-v1"].every(contract => contracts.includes(contract))) {
35
- throw new Error("Candidate does not preserve the stable resident control and workspace contracts; activation was refused.");
36
- }
37
- const addon = resolveTerminalHostPath(options.releaseRoot, {}, process.platform, process.arch);
38
- await verifyTerminalHostArtifact(addon, process.platform, process.arch);
39
- const result = await runBoundedHostCommand({ executable: process.execPath, entry: resolveTerminalHostEntryPath(options.releaseRoot) }, [
40
- "workspace-check", "--profile", options.profileRoot,
41
- "--data-dir", options.dataDir, "--runtime-dir", options.runtimeDir,
42
- ], { label: "resident continuity check", maxStdoutBytes: 4096, timeoutMs: 8_000, environment: options.environment });
43
- const unverified = new Error(continuityFailure(result.stderr));
44
- let report;
45
- try {
46
- report = JSON.parse(result.stdout.trim());
47
- }
48
- catch {
49
- throw unverified;
50
- }
51
- if (result.code !== 0 || report.schema !== "resident-workspace-check-v1" || report.compatible !== true
52
- || typeof report.fingerprint !== "string" || !/^[a-f0-9]{64}$/u.test(report.fingerprint)) {
53
- throw unverified;
54
- }
55
- return report.fingerprint;
56
- }
57
- /** Names the native reason when the host reported one, without the host's own prefix. */
58
- function continuityFailure(diagnostic) {
59
- const reason = diagnostic.replace(/^a1-terminal-host:\s*/u, "").replace(/[.\s]+$/u, "");
60
- return reason.length > 0
61
- ? `Resident control compatibility could not be verified: ${reason}`
62
- : "Resident control compatibility could not be verified";
63
- }
@@ -1,28 +0,0 @@
1
- import type { MaintenanceReport } from "./maintenance.js";
2
- export declare const DOCTOR_MAX_BYTES: number;
3
- export interface DoctorOptions {
4
- /** The profile's resident state directory, as reported by the terminal host. */
5
- readonly stateDir: string;
6
- readonly hostStatus: MaintenanceReport;
7
- readonly releaseRoots: readonly string[];
8
- readonly settings: {
9
- readonly tabsAutoName: boolean;
10
- };
11
- readonly home?: string;
12
- readonly platform?: NodeJS.Platform;
13
- readonly architecture?: string;
14
- readonly now?: Date;
15
- readonly maxBytes?: number;
16
- }
17
- export interface DoctorBundle {
18
- readonly path: string;
19
- readonly bytes: number;
20
- readonly dropped: readonly string[];
21
- }
22
- /**
23
- * Writes an owner-only diagnostic bundle by allowlist: structured logs, crash records, host
24
- * status, a redacted registry, the owner marker without secrets, artifact verification, platform
25
- * facts, and the Tabs settings. Secrets, tokens, environment values, prompt journals, drafts,
26
- * last screens, the private child-stderr sink, and terminal content are never read.
27
- */
28
- export declare function writeDoctorBundle(options: DoctorOptions): Promise<DoctorBundle>;