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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +11 -36
  2. package/bin/cli.js +2 -17
  3. package/bin/ui.js +7 -48
  4. package/dist/app/session-shell/exit-notice.d.ts +2 -2
  5. package/dist/app/session-shell/exit-notice.js +10 -10
  6. package/dist/app/session-shell/prompt-submission.d.ts +2 -4
  7. package/dist/app/session-shell/prompt-submission.js +3 -23
  8. package/dist/app/session-shell/response-copy-transport.js +1 -2
  9. package/dist/app/session-shell/session-lifecycle.d.ts +1 -2
  10. package/dist/app/session-shell/session-lifecycle.js +2 -4
  11. package/dist/app/session-shell/session-shell-root.d.ts +0 -31
  12. package/dist/app/session-shell/session-shell-root.js +3 -4
  13. package/dist/app/session-shell/session-shell.js +6 -47
  14. package/dist/app/session-shell/session-viewport-controller.js +3 -6
  15. package/dist/app/session-shell/shell-host.js +2 -18
  16. package/dist/app/session-shell/transcript-document.d.ts +1 -2
  17. package/dist/app/session-shell/transcript-document.js +3 -28
  18. package/dist/app/session-shell/workflow-output.js +1 -1
  19. package/dist/app/session-shell/workflow-router.d.ts +1 -3
  20. package/dist/app/session-shell/workflow-router.js +1 -4
  21. package/dist/cli/dispatch.d.ts +1 -11
  22. package/dist/cli/dispatch.js +5 -92
  23. package/dist/cli/session-context.js +5 -7
  24. package/dist/cli/uninstall.d.ts +1 -5
  25. package/dist/cli/uninstall.js +6 -35
  26. package/dist/cli/version-stats.js +4 -7
  27. package/dist/composition/owned-settings.d.ts +0 -1
  28. package/dist/composition/owned-settings.js +0 -1
  29. package/dist/composition/owned-ui.d.ts +2 -24
  30. package/dist/composition/owned-ui.js +11 -87
  31. package/dist/composition/release-update-observation.d.ts +4 -4
  32. package/dist/composition/release-update-observation.js +17 -47
  33. package/dist/composition/session-backend.d.ts +0 -1
  34. package/dist/composition/session-runtime-registry.d.ts +3 -3
  35. package/dist/composition/settings-route-host.d.ts +0 -7
  36. package/dist/composition/settings-route-host.js +4 -10
  37. package/dist/composition/startup-route.d.ts +0 -1
  38. package/dist/composition/startup-route.js +0 -1
  39. package/dist/contracts/owned-ui/index.d.ts +1 -1
  40. package/dist/contracts/owned-ui/model.d.ts +0 -3
  41. package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
  42. package/dist/features/launch/development-launch.js +0 -1
  43. package/dist/features/launch/index.d.ts +1 -1
  44. package/dist/features/launch/intent.d.ts +1 -3
  45. package/dist/features/launch/intent.js +2 -4
  46. package/dist/features/launch/session-context.d.ts +2 -2
  47. package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
  48. package/dist/features/owned-ui/reference-screen-app.js +2 -9
  49. package/dist/features/owned-ui/settings-app.d.ts +0 -6
  50. package/dist/features/owned-ui/settings-app.js +5 -36
  51. package/dist/foundation/launch-context/index.d.ts +0 -12
  52. package/dist/foundation/launch-context/index.js +0 -26
  53. package/dist/foundation/lifecycle/claim-gate.d.ts +8 -0
  54. package/dist/foundation/lifecycle/claim-gate.js +37 -0
  55. package/dist/foundation/lifecycle/index.d.ts +5 -9
  56. package/dist/foundation/lifecycle/index.js +3 -4
  57. package/dist/foundation/lifecycle/model.d.ts +2 -59
  58. package/dist/foundation/lifecycle/model.js +0 -35
  59. package/dist/foundation/lifecycle/paths.d.ts +0 -24
  60. package/dist/foundation/lifecycle/paths.js +0 -40
  61. package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
  62. package/dist/foundation/lifecycle/process-liveness.js +18 -0
  63. package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
  64. package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
  65. package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
  66. package/dist/foundation/lifecycle/session-repository-context.js +2 -3
  67. package/dist/foundation/release/automatic-update.d.ts +1 -3
  68. package/dist/foundation/release/automatic-update.js +9 -30
  69. package/dist/foundation/release/bootstrap.d.ts +2 -25
  70. package/dist/foundation/release/bootstrap.js +33 -344
  71. package/dist/foundation/release/cohort-state.d.ts +21 -46
  72. package/dist/foundation/release/cohort-state.js +30 -62
  73. package/dist/foundation/release/dependency-certification.d.ts +1 -1
  74. package/dist/foundation/release/index.d.ts +10 -17
  75. package/dist/foundation/release/index.js +7 -11
  76. package/dist/foundation/release/latest-release.d.ts +1 -2
  77. package/dist/foundation/release/latest-release.js +1 -2
  78. package/dist/foundation/release/process-liveness.d.ts +2 -0
  79. package/dist/foundation/release/process-liveness.js +12 -0
  80. package/dist/foundation/release/release-gc.d.ts +12 -9
  81. package/dist/foundation/release/release-gc.js +34 -98
  82. package/dist/foundation/release/release-store.d.ts +2 -2
  83. package/dist/foundation/release/release-store.js +2 -2
  84. package/dist/foundation/release/restart-certification.js +1 -1
  85. package/dist/foundation/release/update-activation.d.ts +2 -9
  86. package/dist/foundation/release/update-activation.js +28 -43
  87. package/dist/foundation/release/update-execution-lease.js +1 -1
  88. package/dist/foundation/release/update-launch.d.ts +0 -2
  89. package/dist/foundation/release/update-launch.js +0 -7
  90. package/dist/foundation/release/update-recovery.js +1 -1
  91. package/dist/foundation/release/update-transaction.d.ts +1 -1
  92. package/dist/foundation/release/update-transaction.js +5 -2
  93. package/dist/foundation/release/update.d.ts +2 -10
  94. package/dist/foundation/release/update.js +23 -200
  95. package/dist/foundation/session-writer-lock/index.d.ts +14 -6
  96. package/dist/foundation/session-writer-lock/index.js +48 -103
  97. package/dist/foundation/startup/startup-runtime.d.ts +1 -1
  98. package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
  99. package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
  100. package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
  101. package/dist/foundation/terminal-cleanup/index.js +2 -1
  102. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
  103. package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
  104. package/dist/integrations/pi/components/index.d.ts +1 -1
  105. package/dist/integrations/pi/components/index.js +1 -1
  106. package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
  107. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  108. package/dist/integrations/pi/components/shell-footer-status.js +2 -2
  109. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  110. package/dist/integrations/pi/components/shell-presenters-info.d.ts +2 -5
  111. package/dist/integrations/pi/components/shell-presenters-info.js +4 -18
  112. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
  113. package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
  114. package/dist/integrations/pi/components/shell-shared-facade.d.ts +0 -2
  115. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
  116. package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
  117. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
  118. package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
  119. package/dist/integrations/pi/engine/adapter.d.ts +0 -1
  120. package/dist/integrations/pi/engine/adapter.js +1 -16
  121. package/dist/integrations/pi/engine/compaction-progress.js +13 -5
  122. package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
  123. package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
  124. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +0 -1
  125. package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
  126. package/dist/integrations/pi/engine/session-runtime.js +0 -2
  127. package/dist/integrations/pi/engine/workflow-runner.js +1 -1
  128. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
  129. package/dist/integrations/pi/tui-runtime/adapter.js +2 -2
  130. package/dist/product-identity.d.ts +4 -6
  131. package/dist/product-identity.js +6 -11
  132. package/dist/product-identity.json +1 -40
  133. package/dist/runtime-payload-inventory.json +0 -3
  134. package/dist/ui/components/index.d.ts +2 -2
  135. package/dist/ui/components/index.js +1 -1
  136. package/dist/ui/components/submitted-prompt.d.ts +3 -13
  137. package/dist/ui/components/submitted-prompt.js +8 -41
  138. package/dist/ui/components/transcript-viewport.d.ts +1 -3
  139. package/dist/ui/components/transcript-viewport.js +1 -4
  140. package/dist/ui/settings/declarations.d.ts +3 -97
  141. package/dist/ui/settings/declarations.js +3 -78
  142. package/dist/ui/settings/migrations.js +18 -2
  143. package/docs/architecture/boundaries.md +22 -39
  144. package/docs/architecture/code-documentation.md +2 -2
  145. package/docs/architecture/internal-naming.md +9 -17
  146. package/docs/architecture/project-structure.md +30 -29
  147. package/docs/architecture/resource-and-data-policy.md +16 -31
  148. package/docs/architecture/toolchain.md +14 -19
  149. package/docs/architecture/ui-reference-provenance.md +2 -2
  150. package/docs/ci-release-runbook.md +6 -4
  151. package/docs/features/launch-profiles.md +11 -17
  152. package/docs/features/prompt-history.md +10 -11
  153. package/docs/local-worktree-cleanup.md +32 -1
  154. package/docs/manual-owned-ui-checkpoint.md +0 -1
  155. package/docs/openspec-archive-automation.md +11 -3
  156. package/docs/validation.md +5 -9
  157. package/docs/worktree-link-recovery.md +6 -6
  158. package/package.json +7 -19
  159. package/bin/guardian.js +0 -42
  160. package/bin/supervisor.js +0 -7
  161. package/bin/tab-launch-context.d.ts +0 -27
  162. package/bin/tab-launch-context.js +0 -94
  163. package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
  164. package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
  165. package/dist/cli/tabs-request.d.ts +0 -7
  166. package/dist/cli/tabs-request.js +0 -1
  167. package/dist/cli/tabs.d.ts +0 -14
  168. package/dist/cli/tabs.js +0 -151
  169. package/dist/composition/resident-tab-bridge.d.ts +0 -41
  170. package/dist/composition/resident-tab-bridge.js +0 -209
  171. package/dist/composition/utility-tab.d.ts +0 -28
  172. package/dist/composition/utility-tab.js +0 -244
  173. package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
  174. package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
  175. package/dist/features/resident-tab/auto-name.d.ts +0 -11
  176. package/dist/features/resident-tab/auto-name.js +0 -44
  177. package/dist/features/resident-tab/index.d.ts +0 -5
  178. package/dist/features/resident-tab/index.js +0 -7
  179. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
  180. package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
  181. package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
  182. package/dist/features/resident-tab/shortcut-declarations.js +0 -26
  183. package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
  184. package/dist/features/resident-tab/shortcut-projection.js +0 -64
  185. package/dist/features/resident-tab/status-deriver.d.ts +0 -10
  186. package/dist/features/resident-tab/status-deriver.js +0 -12
  187. package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
  188. package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
  189. package/dist/foundation/launch-guardian/index.d.ts +0 -2
  190. package/dist/foundation/launch-guardian/index.js +0 -1
  191. package/dist/foundation/launch-guardian/main.d.ts +0 -39
  192. package/dist/foundation/launch-guardian/main.js +0 -232
  193. package/dist/foundation/lifecycle/commands.d.ts +0 -40
  194. package/dist/foundation/lifecycle/commands.js +0 -1
  195. package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
  196. package/dist/foundation/lifecycle/launch-instance.js +0 -134
  197. package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
  198. package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
  199. package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
  200. package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
  201. package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
  202. package/dist/foundation/process-containment/addon-containment.js +0 -139
  203. package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
  204. package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
  205. package/dist/foundation/process-containment/addon.d.ts +0 -47
  206. package/dist/foundation/process-containment/addon.js +0 -57
  207. package/dist/foundation/process-containment/artifact.d.ts +0 -1
  208. package/dist/foundation/process-containment/artifact.js +0 -35
  209. package/dist/foundation/process-containment/contracts.d.ts +0 -33
  210. package/dist/foundation/process-containment/contracts.js +0 -35
  211. package/dist/foundation/process-containment/index.d.ts +0 -9
  212. package/dist/foundation/process-containment/index.js +0 -7
  213. package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
  214. package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
  215. package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
  216. package/dist/foundation/process-containment/native-process-inspector.js +0 -21
  217. package/dist/foundation/protocol/client.d.ts +0 -18
  218. package/dist/foundation/protocol/client.js +0 -130
  219. package/dist/foundation/protocol/index.d.ts +0 -3
  220. package/dist/foundation/protocol/index.js +0 -2
  221. package/dist/foundation/protocol/messages.d.ts +0 -90
  222. package/dist/foundation/protocol/messages.js +0 -100
  223. package/dist/foundation/release/cohort-selection.d.ts +0 -33
  224. package/dist/foundation/release/cohort-selection.js +0 -67
  225. package/dist/foundation/release/endpoint-lock.d.ts +0 -2
  226. package/dist/foundation/release/endpoint-lock.js +0 -37
  227. package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
  228. package/dist/foundation/release/endpoint-recovery.js +0 -45
  229. package/dist/foundation/release/endpoints.d.ts +0 -32
  230. package/dist/foundation/release/endpoints.js +0 -152
  231. package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
  232. package/dist/foundation/release/prepared-update-activation.js +0 -27
  233. package/dist/foundation/release/process-cleanup.d.ts +0 -14
  234. package/dist/foundation/release/process-cleanup.js +0 -76
  235. package/dist/foundation/release/supervisor-identity.d.ts +0 -15
  236. package/dist/foundation/release/supervisor-identity.js +0 -63
  237. package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
  238. package/dist/foundation/resident-tabs/boot-identity.js +0 -16
  239. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
  240. package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
  241. package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
  242. package/dist/foundation/resident-tabs/bridge-client.js +0 -327
  243. package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
  244. package/dist/foundation/resident-tabs/continuity.js +0 -63
  245. package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
  246. package/dist/foundation/resident-tabs/doctor.js +0 -166
  247. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
  248. package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
  249. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
  250. package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
  251. package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
  252. package/dist/foundation/resident-tabs/fault-injection.js +0 -26
  253. package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
  254. package/dist/foundation/resident-tabs/fixture-control.js +0 -35
  255. package/dist/foundation/resident-tabs/host-entry.d.ts +0 -1
  256. package/dist/foundation/resident-tabs/host-entry.js +0 -17
  257. package/dist/foundation/resident-tabs/index.d.ts +0 -15
  258. package/dist/foundation/resident-tabs/index.js +0 -10
  259. package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
  260. package/dist/foundation/resident-tabs/maintenance.js +0 -75
  261. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
  262. package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
  263. package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
  264. package/dist/foundation/resident-tabs/progress-observation.js +0 -150
  265. package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
  266. package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
  267. package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
  268. package/dist/foundation/resident-tabs/protocol.js +0 -195
  269. package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
  270. package/dist/foundation/resident-tabs/recovery.js +0 -205
  271. package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
  272. package/dist/foundation/resident-tabs/release-holds.js +0 -78
  273. package/dist/foundation/resident-tabs/routes.d.ts +0 -5
  274. package/dist/foundation/resident-tabs/routes.js +0 -5
  275. package/dist/foundation/resident-tabs/routing.d.ts +0 -11
  276. package/dist/foundation/resident-tabs/routing.js +0 -10
  277. package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
  278. package/dist/foundation/resident-tabs/runtime-control.js +0 -74
  279. package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
  280. package/dist/foundation/resident-tabs/session-sync.js +0 -37
  281. package/dist/foundation/resident-tabs/settings.d.ts +0 -16
  282. package/dist/foundation/resident-tabs/settings.js +0 -60
  283. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
  284. package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
  285. package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
  286. package/dist/foundation/resident-tabs/zip-archive.js +0 -56
  287. package/dist/foundation/storage/control-store.d.ts +0 -20
  288. package/dist/foundation/storage/control-store.js +0 -331
  289. package/dist/foundation/storage/index.d.ts +0 -1
  290. package/dist/foundation/storage/index.js +0 -1
  291. package/dist/foundation/supervision/index.d.ts +0 -3
  292. package/dist/foundation/supervision/index.js +0 -3
  293. package/dist/foundation/supervision/main.d.ts +0 -1
  294. package/dist/foundation/supervision/main.js +0 -86
  295. package/dist/foundation/supervision/paths.d.ts +0 -1
  296. package/dist/foundation/supervision/paths.js +0 -1
  297. package/dist/foundation/supervision/server.d.ts +0 -46
  298. package/dist/foundation/supervision/server.js +0 -606
  299. package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
  300. package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
  301. package/dist/native/darwin-arm64/manifest.json +0 -23
  302. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  303. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
  304. package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
  305. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  306. package/dist/native/darwin-x64/manifest.json +0 -23
  307. package/dist/native/darwin-x64/process-guardian.node +0 -0
  308. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
  309. package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
  310. package/dist/native/darwin-x64/terminal-host.node +0 -0
  311. package/dist/native/linux-x64/manifest.json +0 -23
  312. package/dist/native/linux-x64/process-guardian.node +0 -0
  313. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
  314. package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
  315. package/dist/native/linux-x64/terminal-host.node +0 -0
  316. package/dist/native/win32-x64/manifest.json +0 -23
  317. package/dist/native/win32-x64/process-guardian.node +0 -0
  318. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
  319. package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
  320. package/dist/native/win32-x64/terminal-host.node +0 -0
  321. package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
  322. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
  323. package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
  324. package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
  325. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
  326. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
  327. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
  328. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
  329. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
  330. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
  331. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
  332. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
  333. package/docs/architecture/native-fixture-isolation.md +0 -23
  334. package/docs/architecture/process-guardian-provenance.md +0 -36
  335. package/docs/architecture/resident-tabs-requirements.md +0 -18
  336. package/docs/architecture/resident-tabs.md +0 -668
  337. package/docs/architecture/terminal-host-proof-gate.md +0 -34
  338. package/docs/architecture/terminal-host-provenance.md +0 -81
  339. package/docs/architecture/terminal-host-spike-evidence.md +0 -39
  340. package/docs/launch-recovery.md +0 -23
  341. package/docs/manual-launch-instance-acceptance.md +0 -43
  342. package/docs/manual-resident-tabs-acceptance.md +0 -51
package/README.md CHANGED
@@ -53,19 +53,19 @@ The installer needs Node.js 22.19 or later. When npm's global folder is not writ
53
53
 
54
54
  ## Launch
55
55
 
56
- Launch A1 (profile: `~/.a1/agent`):
56
+ Launch A1, one agent in this terminal (profile: `~/.a1/agent`):
57
57
 
58
58
  ```text
59
59
  a1
60
60
  ```
61
61
 
62
- Launch A1 in single agent mode:
62
+ Resume a saved session:
63
63
 
64
64
  ```text
65
- a1 solo
65
+ a1 --session <id>
66
66
  ```
67
67
 
68
- When a solo session exits, its printed `a1 solo --session <id>` command resumes that same conversation in solo mode; a custom session store is included in the printed command. Resident tabs are different: they keep running after detach, and bare `a1` returns to them.
68
+ When a session exits, A1 prints the `a1 --session <id>` command that resumes it; a custom session store is included in the printed command. Closing the terminal ends the agent, as it does for Pi.
69
69
 
70
70
  Show all commands:
71
71
 
@@ -73,7 +73,7 @@ Show all commands:
73
73
  a1 help
74
74
  ```
75
75
 
76
- Show the current and latest versions:
76
+ Show the current version and the latest Develop and Release versions, from either installed channel:
77
77
 
78
78
  ```text
79
79
  a1 version
@@ -87,30 +87,6 @@ a1 pi
87
87
 
88
88
  <p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
89
89
 
90
- ## Tabs
91
-
92
- Tabs keep running after their terminal closes. List them, or stop one; its session stays resumable:
93
-
94
- ```text
95
- a1 tabs
96
- a1 tabs stop <id>
97
- ```
98
-
99
- Stop every tab and the resident host when you are finished with them (not required to run `a1 solo`):
100
-
101
- ```text
102
- a1 tabs host stop
103
- ```
104
-
105
- Show host health, or write a redacted diagnostic bundle:
106
-
107
- ```text
108
- a1 tabs host status
109
- a1 tabs doctor
110
- ```
111
-
112
- <p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
113
-
114
90
  ## Update
115
91
 
116
92
  Update on the channel you already use (release stays on release, develop stays on develop):
@@ -157,17 +133,16 @@ npm x -y -- @timurproko/a1-install
157
133
 
158
134
  The **Update** setting controls release discovery:
159
135
 
160
- - **Auto** (default) checks the running release's stable or development channel at startup and every 15 minutes while open. It silently installs a verified update, then shows `Update installed, restart to update` above the editor; existing sessions keep running until restarted.
161
- - **Notify** checks at startup (at most daily), keeps the `Update Available` notice, and leaves installation manual.
136
+ - **Auto** (default) checks the running release's stable or development channel at startup and every 15 minutes while open. It silently installs a verified update, then shows `Update installed, restart to update` above the editor; existing sessions keep running on their release, and the next `a1` starts the new one.
162
137
  - **No** performs no update check; updates remain available through the commands above.
163
138
 
164
- `A1_SKIP_VERSION_CHECK=1` disables both Auto and Notify discovery. Manual stable, development, and exact-version update commands remain available in every mode.
139
+ `A1_SKIP_VERSION_CHECK=1` disables Auto discovery. Manual stable, development, and exact-version update commands remain available in every mode.
165
140
 
166
141
  <p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
167
142
 
168
143
  ## Uninstall
169
144
 
170
- Remove A1 from this machine. It stops running tabs and asks before deleting your sessions and settings in `~/.a1`:
145
+ Remove A1 from this machine. It asks before deleting your sessions and settings in `~/.a1`:
171
146
 
172
147
  ```text
173
148
  a1 uninstall
@@ -217,7 +192,7 @@ a1 update npm:pi-mcp-adapter
217
192
 
218
193
  ## Develop
219
194
 
220
- A source build needs Node.js, npm, git, and Rustup. Windows additionally needs Visual Studio or Visual Studio Build Tools with the **Desktop development with C++** workload, MSVC x64/x86 tools, and a Windows SDK; Visual Studio Code is not required. A1 discovers installed Rustup and Visual Studio tools and initializes them for build children, so Git Bash and ordinary PowerShell do not need manual `PATH` or developer-shell setup. It never installs these tools or accepts their licenses automatically.
195
+ A source build needs Node.js, npm, and git. The product is pure TypeScript; there is no native toolchain to install.
221
196
 
222
197
  Install exact locked dependencies:
223
198
 
@@ -225,7 +200,7 @@ Install exact locked dependencies:
225
200
  npm ci
226
201
  ```
227
202
 
228
- Compile TypeScript and the native addons into `dist`:
203
+ Compile TypeScript into `dist`:
229
204
 
230
205
  ```text
231
206
  npm run build
@@ -255,7 +230,7 @@ Complete non-physical suite:
255
230
  npm run test:full
256
231
  ```
257
232
 
258
- Report Node, npm, git, Rust, dependency, and Windows C++ readiness. Missing Windows tools are listed in setup order; after installing them, rerun the same build command:
233
+ Report Node, npm, git, GitHub CLI, and dependency readiness; after fixing anything it lists, rerun the same build command:
259
234
 
260
235
  ```text
261
236
  npm run doctor
package/bin/cli.js CHANGED
@@ -55,23 +55,8 @@ process.exitCode = await dispatchCli(process.argv.slice(2), {
55
55
  return await runPackageCommand(request, { createPort: createPiPackagesPort });
56
56
  },
57
57
  sessionContext: async request => {
58
- const [{ runSessionContextCommand }, { createNativeProcessInspector }, { readLaunchContext }] = await Promise.all([
59
- import("../dist/cli/session-context.js"),
60
- import("../dist/foundation/process-containment/native-process-inspector.js"),
61
- import("../dist/foundation/launch-context/index.js"),
62
- ]);
63
- const launch = readLaunchContext(process.env);
64
- let inspector;
65
- return await runSessionContextCommand(request, {
66
- inspectProcess: async pid => {
67
- inspector ??= createNativeProcessInspector(process.env, process.platform, launch.releaseRoot);
68
- return (await inspector).observe(pid);
69
- },
70
- });
71
- },
72
- tabs: async request => {
73
- const { runTabsCommand } = await import("../dist/cli/tabs.js");
74
- return await runTabsCommand(request, { packageRoot: fileURLToPath(packageRoot) });
58
+ const { runSessionContextCommand } = await import("../dist/cli/session-context.js");
59
+ return await runSessionContextCommand(request);
75
60
  },
76
61
  uninstall: async request => {
77
62
  const [{ runUninstall }, { createInterface }] = await Promise.all([
package/bin/ui.js CHANGED
@@ -1,18 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // Security: this helper has no A1, Pi, tool, or extension dependency and erases credentials before those modules load.
4
- const { assignFreshSessionRuntimeId, consumeTabLaunchContext, formatResidentFallbackNotice, waitForStandbyPromotion } = await import("./tab-launch-context.js");
5
- const { uiArguments, tabCredentials, tabDataDir, tabIncarnation, tabStandby } = consumeTabLaunchContext(process.argv.slice(2), process.env);
6
-
7
3
  // Invariant: one terminal module identity per process, decided before any A1 or Pi module loads.
8
4
  const { installPinnedPiTuiResolver } = await import("./module-resolver.js");
9
5
  installPinnedPiTuiResolver(new URL("..", import.meta.url).pathname.replace(/^\/(.:)/, "$1").replace(/\/$/, ""));
10
- const utilityRoute = tabCredentials === undefined
11
- ? null
12
- : (await import("../dist/foundation/resident-tabs/routes.js")).residentUtilityRoute(tabCredentials.tabId);
13
6
  const startup = await import("../dist/foundation/startup/startup-runtime.js");
14
7
  startup.enableEnvironmentCompileCache(process.env);
15
- const { hidesTabSettings, readLaunchContext } = await import("../dist/foundation/launch-context/index.js");
8
+ const { readLaunchContext } = await import("../dist/foundation/launch-context/index.js");
16
9
  const launchContext = readLaunchContext(process.env, "profile");
17
10
  const profile = launchContext.launchProfile;
18
11
  if (profile === undefined) throw new Error("A1 launch profile is missing");
@@ -21,17 +14,16 @@ if (profile === "a1") {
21
14
  import("node:crypto"),
22
15
  import("../dist/product-identity.js"),
23
16
  ]);
24
- assignFreshSessionRuntimeId(process.env, PRODUCT_IDENTITY.environment.sessionRuntimeId, randomUUID);
17
+ // Invariant: every UI process is its own session runtime, never one inherited from a parent shell.
18
+ process.env[PRODUCT_IDENTITY.environment.sessionRuntimeId] = randomUUID();
25
19
  }
26
20
  const { installFatalExit } = await import("../dist/foundation/terminal-cleanup/fatal-exit.js");
27
21
  const { resolveProductPaths } = await import("../dist/foundation/lifecycle/paths.js");
28
- const { dirname, join } = await import("node:path");
22
+ const { join } = await import("node:path");
29
23
  /** @type {{ dispose(): void | Promise<unknown> } | undefined} */
30
24
  let runningApplication;
31
25
  const fatal = profile === "a1" ? installFatalExit({
32
- directory: tabDataDir === undefined
33
- ? join(resolveProductPaths().runtimeDir, "crashes")
34
- : join(dirname(tabDataDir), "diagnostics"),
26
+ directory: join(resolveProductPaths().runtimeDir, "crashes"),
35
27
  ...(launchContext.releaseId === undefined ? {} : { releaseId: launchContext.releaseId }),
36
28
  dispose: () => runningApplication?.dispose(),
37
29
  }) : undefined;
@@ -49,21 +41,7 @@ const assertPiTuiIdentity = () => identity.assertSinglePiTuiModuleAtLaunch(
49
41
  (/** @type {string} */ message) => process.stderr.write(message),
50
42
  );
51
43
 
52
- if (utilityRoute !== null) {
53
- if (profile !== "a1" || tabCredentials === undefined) throw new Error("utility tabs require the normal A1 tab profile");
54
- await startup.markStartupPhase(process.env, "ui-entry");
55
- assertPiTuiIdentity();
56
- const utility = await import("../dist/composition/utility-tab.js");
57
- await startup.markStartupPhase(process.env, "ui-modules-loaded");
58
- const bridge = new (await import("../dist/foundation/resident-tabs/bridge-client.js")).TabBridgeClient({ credentials: tabCredentials });
59
- completeRun(utility.runUtilityTab({
60
- route: utilityRoute,
61
- bridge,
62
- cwd: process.cwd(),
63
- profileId: profile,
64
- onApplication: application => { runningApplication = application; },
65
- }), utility.terminateOwnedUiProcess);
66
- } else {
44
+ {
67
45
  const descriptor = await import("../dist/foundation/startup/startup-descriptor.js");
68
46
  // Performance: begin the exact Agent launch graph together while the trace write is pending.
69
47
  // Direct owned-module entries avoid evaluating unrelated barrel exports before first paint.
@@ -78,40 +56,21 @@ if (utilityRoute !== null) {
78
56
  { composeOwnedUi },
79
57
  ] = await modules;
80
58
 
81
- if (tabStandby) await waitForStandbyPromotion(process.stdin, tabDataDir === undefined ? undefined : join(tabDataDir, "standby-promote"));
82
59
  assertPiTuiIdentity();
83
60
  await startup.markStartupPhase(process.env, "ui-modules-loaded");
84
61
 
85
- const sessionSelection = parseSessionSelection(uiArguments);
62
+ const sessionSelection = parseSessionSelection(process.argv.slice(2));
86
63
  completeRun(Promise.resolve().then(async () => {
87
- const tab = tabCredentials === undefined ? undefined : {
88
- bridge: new (await import("../dist/foundation/resident-tabs/bridge-client.js")).TabBridgeClient({ credentials: tabCredentials }),
89
- dataDir: /** @type {string} */ (tabDataDir),
90
- incarnation: /** @type {number} */ (tabIncarnation),
91
- };
92
64
  if (sessionSelection && profile !== "a1") throw new Error("session selection requires the normal A1 profile");
93
65
  return runSelectedInteractiveRuntime(profile, {
94
66
  ownedUi: async (profileId, ownedSurfaces) => {
95
- const processInspector = ownedSurfaces
96
- ? await import("../dist/foundation/process-containment/native-process-inspector.js")
97
- .then(module => module.createNativeProcessInspector(process.env, process.platform, launchContext.releaseRoot))
98
- .catch(() => null)
99
- : null;
100
67
  const { application, settings } = await composeOwnedUi({
101
68
  cwd: process.cwd(),
102
69
  profileId,
103
70
  ownedSurfaces,
104
- notificationVersion: launchContext.updateVersion,
105
- ...(hidesTabSettings(launchContext) ? { hideTabSettings: true } : {}),
106
- soloResumeHint: profile === "a1" && launchContext.launchMode === "solo",
107
- ...(processInspector === null ? {} : { inspectProcess: pid => processInspector.observe(pid) }),
108
71
  projectTrustPrompt: createConsoleProjectTrustPrompt({ presentation: profile === "a1" ? "bare" : "comparison" }),
109
72
  sessionForkPrompt: createConsoleSessionForkPrompt(),
110
73
  ...(sessionSelection === undefined ? {} : { sessionSelection }),
111
- ...(tab === undefined ? {} : { tab }),
112
- ...(launchContext.residentFallback === undefined ? {} : {
113
- residentFallbackNotice: formatResidentFallbackNotice(launchContext.residentFallback),
114
- }),
115
74
  });
116
75
  runningApplication = application;
117
76
  return await runOwnedUi({ application, ...(settings === null ? {} : { settings }) });
@@ -13,6 +13,6 @@ export interface ExitNoticeSource {
13
13
  export interface ArmedExitNotice {
14
14
  clear(): void;
15
15
  }
16
- export declare function uncleanExitNoticeLines(resume: SessionResumeCommandMetadata | null, soloResumeHint?: boolean): string[];
16
+ export declare function uncleanExitNoticeLines(resume: SessionResumeCommandMetadata | null): string[];
17
17
  /** Arms the notice and keeps its resume command following the bound session until cleared. */
18
- export declare function armExitNotice(source: ExitNoticeSource, path: string, soloResumeHint?: boolean): ArmedExitNotice;
18
+ export declare function armExitNotice(source: ExitNoticeSource, path: string): ArmedExitNotice;
@@ -1,32 +1,32 @@
1
1
  /**
2
- * The runtime's half of the unclean-exit protocol with the native process guardian. While the
3
- * notice is armed, the guardian treats the runtime's end as unclean: it restores the terminal and
4
- * prints these lines, so a killed session still leaves its resume command behind. A clean shutdown
5
- * clears the notice after the terminal is restored.
2
+ * The runtime's half of the unclean-exit protocol with the launcher. While the notice is armed,
3
+ * the launcher treats the runtime's end as unclean: it restores the terminal and prints these
4
+ * lines, so a killed session still leaves its resume command behind. A clean shutdown clears the
5
+ * notice after the terminal is restored.
6
6
  */
7
7
  import { renameSync, rmSync, writeFileSync } from "node:fs";
8
8
  import { PRODUCT_IDENTITY } from "../../product-identity.js";
9
9
  import { formatSessionResumeCommand } from "./session-lifecycle.js";
10
- export function uncleanExitNoticeLines(resume, soloResumeHint = false) {
10
+ export function uncleanExitNoticeLines(resume) {
11
11
  return [
12
12
  `${PRODUCT_IDENTITY.displayName} was stopped unexpectedly.`,
13
- ...(resume === null ? [] : [`To resume this session: ${formatSessionResumeCommand(resume, soloResumeHint)}`]),
13
+ ...(resume === null ? [] : [`To resume this session: ${formatSessionResumeCommand(resume)}`]),
14
14
  ];
15
15
  }
16
16
  /** Arms the notice and keeps its resume command following the bound session until cleared. */
17
- export function armExitNotice(source, path, soloResumeHint = false) {
17
+ export function armExitNotice(source, path) {
18
18
  let current = null;
19
19
  let cleared = false;
20
20
  let generation = source.identity.sessionGeneration;
21
21
  const write = () => {
22
22
  if (cleared)
23
23
  return;
24
- // Protocol: plain text only; the guardian strips control characters, so styling would be lost.
25
- const text = `${uncleanExitNoticeLines(source.identity.currentSessionResumeMetadata(), soloResumeHint).join("\n")}\n`;
24
+ // Protocol: plain text only; the launcher strips control characters, so styling would be lost.
25
+ const text = `${uncleanExitNoticeLines(source.identity.currentSessionResumeMetadata()).join("\n")}\n`;
26
26
  if (text === current)
27
27
  return;
28
28
  try {
29
- // Invariant: the guardian may read at any instant, so it sees the previous or the next notice, never half of one.
29
+ // Invariant: the launcher may read at any instant, so it sees the previous or the next notice, never half of one.
30
30
  const temporary = `${path}.${process.pid}.tmp`;
31
31
  writeFileSync(temporary, text, { mode: 0o600 });
32
32
  renameSync(temporary, path);
@@ -1,6 +1,5 @@
1
1
  import type { OwnedUiCommand, OwnedUiCommandResult, OwnedUiSessionBackend, OwnedUiSessionViewModel, PromptHistoryImageSidecarPort } from "../../contracts/owned-ui/index.js";
2
2
  import type { PromptHistoryController } from "./prompt-history-controller.js";
3
- import type { ResidentTabCoordinator } from "./resident-tab-coordinator.js";
4
3
  import type { SessionConcern } from "./session-concern.js";
5
4
  import type { OwnedUiSessionShellRoot } from "./session-shell-root.js";
6
5
  import type { OwnedUiPresenterTerminal } from "./shell-host.js";
@@ -8,7 +7,6 @@ export interface PromptSubmissionPorts {
8
7
  readonly backend: Pick<OwnedUiSessionBackend, "session" | "identity" | "workflows">;
9
8
  readonly root: Pick<OwnedUiSessionShellRoot, "editor" | "hasPendingPastes" | "waitForPromptPastes" | "setExtensionWidget" | "prepareHistoryText" | "imageChipAttachmentsFromEditor" | "preparePromptSubmission" | "omitUnsentPromptImages" | "resumeViewportFollowing" | "beginImageSubmissionStatus" | "appendWorkflowResult">;
10
9
  readonly terminal: Pick<OwnedUiPresenterTerminal, "requestRender">;
11
- readonly residentTab: ResidentTabCoordinator;
12
10
  readonly cwd: string;
13
11
  promptHistory(): PromptHistoryController | null;
14
12
  imageSidecar(): PromptHistoryImageSidecarPort | undefined;
@@ -23,8 +21,8 @@ export interface PromptSubmissionPorts {
23
21
  }
24
22
  /**
25
23
  * Turns editor input into engine commands: prompts, steering, follow-ups, and bash, each recorded
26
- * in history first. It holds a submission whose image pastes are still preparing, journals prompts
27
- * for resident tabs, and recovers the draft when a submission is rejected.
24
+ * in history first. It holds a submission whose image pastes are still preparing and recovers the
25
+ * draft when a submission is rejected.
28
26
  */
29
27
  export declare class PromptSubmission implements SessionConcern {
30
28
  #private;
@@ -3,8 +3,8 @@ import { renderPiShellStatusText } from "../../integrations/pi/components/shell-
3
3
  const rejected = (diagnostic) => ({ outcome: "rejected", diagnostic });
4
4
  /**
5
5
  * Turns editor input into engine commands: prompts, steering, follow-ups, and bash, each recorded
6
- * in history first. It holds a submission whose image pastes are still preparing, journals prompts
7
- * for resident tabs, and recovers the draft when a submission is rejected.
6
+ * in history first. It holds a submission whose image pastes are still preparing and recovers the
7
+ * draft when a submission is rejected.
8
8
  */
9
9
  export class PromptSubmission {
10
10
  #ports;
@@ -199,29 +199,9 @@ export class PromptSubmission {
199
199
  text: input,
200
200
  ...(prepared.images.length === 0 ? {} : { images: prepared.images }),
201
201
  };
202
- let submission;
203
- try {
204
- submission = await this.#ports.residentTab.admit({
205
- sessionId: command.sessionId,
206
- sessionFile: this.#ports.currentSessionFile(),
207
- kind: type,
208
- text: input,
209
- });
210
- }
211
- catch {
212
- if (root.editor.getText().length === 0)
213
- root.editor.setText(displayInput);
214
- const message = "Prompt was not sent because its recovery journal could not be synchronized.";
215
- this.reportError(undefined, message);
216
- return rejected(message);
217
- }
218
202
  const finishSending = prepared.images.length === 0 ? () => { } : root.beginImageSubmissionStatus();
219
203
  try {
220
- const result = await this.execute(command, displayInput);
221
- if (submission !== undefined && result.outcome !== "rejected") {
222
- await this.#ports.residentTab.dispatched(submission.id, command.correlationId);
223
- }
224
- return result;
204
+ return await this.execute(command, displayInput);
225
205
  }
226
206
  finally {
227
207
  finishSending();
@@ -1,11 +1,10 @@
1
1
  import { execFile, fork } from "node:child_process";
2
2
  import { HelperPool } from "./helper-pool.js";
3
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
4
3
  import { COPY_CHUNK_UNITS, COPY_CLEANUP_MS, MAX_COPY_BYTES, MAX_COPY_CONTROL_BYTES } from "./response-copy-protocol.js";
5
4
  const PLATFORM_WRITE_TIMEOUT_MS = 1_500;
6
5
  /** Never substitute a remote host's native clipboard for the terminal user's clipboard. */
7
6
  export function responseCopyDestination(env) {
8
- return env[PRODUCT_IDENTITY.environment.tabId] || env.SSH_CONNECTION || env.SSH_CLIENT || env.SSH_TTY || env.TMUX || env.STY || env.WSL_DISTRO_NAME
7
+ return env.SSH_CONNECTION || env.SSH_CLIENT || env.SSH_TTY || env.TMUX || env.STY || env.WSL_DISTRO_NAME
9
8
  ? "terminal" : "native";
10
9
  }
11
10
  function platformClipboardCommands() {
@@ -3,14 +3,13 @@ export interface SessionResumeCommandMetadata {
3
3
  readonly sessionDir: string;
4
4
  readonly usesDefaultSessionDir: boolean;
5
5
  }
6
- export declare function formatSessionResumeCommand(metadata: SessionResumeCommandMetadata, solo?: boolean): string;
6
+ export declare function formatSessionResumeCommand(metadata: SessionResumeCommandMetadata): string;
7
7
  export declare function quoteCommandArgument(value: string): string;
8
8
  export interface ExitTextInput {
9
9
  readonly terminalMode: "regular" | "fullscreen";
10
10
  readonly customViewport: boolean;
11
11
  readonly exitMode: "transcript" | "resume-hint";
12
12
  readonly resume: SessionResumeCommandMetadata | null;
13
- readonly soloResumeHint?: boolean;
14
13
  /** The styled transcript, rendered only when the pinned profile asks for it. */
15
14
  readonly transcript: () => string;
16
15
  }
@@ -1,8 +1,6 @@
1
1
  import { PRODUCT_TEXT } from "../../product-identity.js";
2
- export function formatSessionResumeCommand(metadata, solo = false) {
2
+ export function formatSessionResumeCommand(metadata) {
3
3
  const args = [PRODUCT_TEXT.commandName];
4
- if (solo)
5
- args.push("solo");
6
4
  if (!metadata.usesDefaultSessionDir)
7
5
  args.push("--session-dir", quoteCommandArgument(metadata.sessionDir));
8
6
  args.push("--session", metadata.sessionId);
@@ -20,7 +18,7 @@ export function quoteCommandArgument(value) {
20
18
  export function composeExitText(input) {
21
19
  if (input.terminalMode !== "fullscreen")
22
20
  return "";
23
- const resumeHint = input.resume === null ? "" : `${dim("To resume this session:")} ${formatSessionResumeCommand(input.resume, input.soloResumeHint)}`;
21
+ const resumeHint = input.resume === null ? "" : `${dim("To resume this session:")} ${formatSessionResumeCommand(input.resume)}`;
24
22
  // Invariant: bare A1 leaves only the hint behind; the pinned comparison profile still
25
23
  // honors fullscreenExitOutput, including the styled transcript.
26
24
  if (input.customViewport || input.exitMode === "resume-hint")
@@ -43,38 +43,10 @@ export interface OwnedUiShellEngineOptions {
43
43
  };
44
44
  /** Bare A1 selects the owned bounded viewport; comparison profiles stay pinned. */
45
45
  readonly sessionLayout?: "pinned" | "custom-viewport";
46
- /** Resident tab quit routes detach the outer client without stopping this engine session. */
47
- readonly residentTab?: {
48
- requestDetach(): Promise<boolean>;
49
- closeOwnedRoute?(route: string): void;
50
- reportStatus?(status: "working" | "idle"): void;
51
- admit?(input: {
52
- readonly sessionId: string;
53
- readonly sessionFile: string | null;
54
- readonly kind: "prompt" | "steer" | "follow-up";
55
- readonly text: string;
56
- }): Promise<{
57
- readonly id: string;
58
- }>;
59
- dispatched?(): void;
60
- correlated?(submissionId: string, entryId: string): Promise<void>;
61
- checkpoint?(text: string): void;
62
- gracefulStop?(sessionFile: string | null): Promise<void>;
63
- readonly recovered?: {
64
- readonly prompts: readonly {
65
- readonly id: string;
66
- readonly text: string;
67
- }[];
68
- readonly draft: string | null;
69
- };
70
- readonly unavailableNotice?: string;
71
- };
72
46
  }
73
47
  /** Terminal, startup, viewport, and presentation-cadence seams; production leaves most at their defaults. */
74
48
  export interface OwnedUiShellPresentationOptions {
75
49
  readonly terminal?: OwnedUiTerminalPort;
76
- /** Explicit direct solo launch, not a resident fallback or comparison launch. */
77
- readonly soloResumeHint?: boolean;
78
50
  readonly startup?: OwnedUiStartupOptions;
79
51
  /** Live profile-local settings, supplied only to the bare-A1 composition. */
80
52
  readonly viewportSettings?: OwnedUiViewportSettingsPort;
@@ -200,7 +172,6 @@ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
200
172
  readonly requestHyperlinkCleanup?: (rows?: readonly number[]) => void;
201
173
  readonly enableDockInputReuse?: boolean;
202
174
  readonly persistentHistory?: boolean;
203
- readonly hideUtilityTabCommands?: boolean;
204
175
  readonly historyEditor?: import("../../integrations/pi/components/index.js").HistoryEditorConstructor;
205
176
  readonly onSubmit: (text: string) => void;
206
177
  readonly onPasteRejected?: (error: unknown) => void;
@@ -226,8 +197,6 @@ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
226
197
  readonly keybindings?: PiKeybindingsHost;
227
198
  readonly promptImageLimit?: () => number;
228
199
  readonly skillsPresentation?: () => "collapse" | "expand";
229
- /** Resident tab chips already show the session name. */
230
- readonly footerSessionName?: boolean;
231
200
  }, startup?: PiShellHeaderOptions, agentDir?: string, extensionRenderers?: OwnedUiTranscriptRendererPort, sessionLayout?: "pinned" | "custom-viewport", imageAssets?: PiShellImageAssetResolver);
232
201
  setEditorPaddingX(padding: number): void;
233
202
  setAutocompleteMaxVisible(maxVisible: number): void;
@@ -81,7 +81,7 @@ export class OwnedUiSessionShellRoot {
81
81
  frame: progressStatusFrame,
82
82
  }, handlers);
83
83
  this.#status.setProgressPresentation(this.#customViewport ? "custom-viewport" : "pinned");
84
- this.#footer = createPiShellFooter(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel, handlers.footerSessionName ?? true);
84
+ this.#footer = createPiShellFooter(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel);
85
85
  this.editor = createShellEditor({
86
86
  handlers,
87
87
  customViewport: this.#customViewport,
@@ -149,7 +149,6 @@ export class OwnedUiSessionShellRoot {
149
149
  resourceRows: width => this.#customViewport ? [] : this.resources.render(width),
150
150
  hasExtensionHeader: () => this.#extensions.header !== null,
151
151
  thinkingVisible: () => this.#thinkingVisible,
152
- timeFormat: () => this.#viewportController.config.timeFormat,
153
152
  },
154
153
  });
155
154
  }
@@ -174,8 +173,8 @@ export class OwnedUiSessionShellRoot {
174
173
  }
175
174
  #createSubmittedPromptComposer() {
176
175
  return {
177
- layout: (width, source) => submittedPromptLayout(width, source, this.#viewportController.config.timeFormat ?? "8:00 PM"),
178
- compose: (rows, width, source, style) => composeSubmittedPromptRows(rows, width, source, { ...style, prefix: text => promptArrow(text, piTheme()) }, this.#viewportController.config.timeFormat ?? "8:00 PM").map(row => nativeHyperlinkStyle(row, nativeTranscriptLinkColor)),
176
+ layout: width => submittedPromptLayout(width),
177
+ compose: (rows, width, style) => composeSubmittedPromptRows(rows, width, { ...style, prefix: text => promptArrow(text, piTheme()) }).map(row => nativeHyperlinkStyle(row, nativeTranscriptLinkColor)),
179
178
  };
180
179
  }
181
180
  setEditorPaddingX(padding) {