@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,209 +0,0 @@
1
- import { residentUtilityRoute } from "../foundation/resident-tabs/routes.js";
2
- import { deriveResidentTabStatus } from "../features/resident-tab/status-deriver.js";
3
- import { projectResidentTabShortcuts } from "../features/resident-tab/shortcut-projection.js";
4
- import { readShortcutBindingsFile } from "../features/resident-tab/shortcut-bindings-file.js";
5
- /**
6
- * The keybindings the shells borrow. Inside a resident tab the host dispatches and labels the tab
7
- * shortcuts this child projects from its effective declarations, so the projection is published now
8
- * and again after every customization reload.
9
- */
10
- export function residentTabKeybindings(tabBridge, agentDir, keybindingsHost) {
11
- if (tabBridge === null)
12
- return keybindingsHost;
13
- const publish = () => tabBridge.shortcuts(projectResidentTabShortcuts({
14
- configured: readShortcutBindingsFile(agentDir),
15
- reserved: keybindingsHost.manager.getEffectiveConfig(),
16
- }).assignments);
17
- publish();
18
- return { ...keybindingsHost, reload: () => { keybindingsHost.reload(); publish(); } };
19
- }
20
- /**
21
- * How owned screens are presented in a resident tab: a Settings or Changelog tab's screen is the tab, and the Plus menu entry opens
22
- * the tab bar's own Plus Menu dialog while this tab's controlling client can show it.
23
- */
24
- export function residentRouteHostOptions(tabBridge) {
25
- return {
26
- ...(tabBridge === null ? {} : { tabRoute: residentUtilityRoute(tabBridge.tabId) }),
27
- configurePlusMenu: () => {
28
- if (tabBridge === null || !tabBridge.available || tabBridge.captureAttachment() === null)
29
- return false;
30
- void tabBridge.requestAction("configure-plus");
31
- return true;
32
- },
33
- };
34
- }
35
- /** Closes a utility tab when its own screen closes. Invariant: a utility tab's screen is the tab. */
36
- export function closeResidentUtilityRoute(tabBridge, route) {
37
- if (residentUtilityRoute(tabBridge.tabId) === route)
38
- void tabBridge.requestClose();
39
- }
40
- export async function bindResidentTabBridge(tabBridge, backend, recovery = null, options = {}) {
41
- await tabBridge.start().catch(() => false);
42
- tabBridge.status("starting");
43
- const currentSessionFile = () => currentBackendSessionFile(backend);
44
- let pendingAutoName = null;
45
- // Invariant: while a generated name is being applied, the session name it produces is automatic
46
- // even if the session normalizes it; reporting it as `user` would block the strip's title
47
- // animation and every later automatic rename.
48
- let applyingAutoName = false;
49
- const isDefaultName = (name) => name == null || /^agent(?: \d+)?$/i.test(name);
50
- const currentSessionName = () => backend.session.view().status.footer?.sessionName ?? null;
51
- const announceSession = () => {
52
- const name = currentSessionName();
53
- // Invariant: the session may announce the applied name after the workflow resolves; the
54
- // first non-default name announced for a pending auto-name is that automatic name.
55
- if (applyingAutoName && !isDefaultName(name)) {
56
- pendingAutoName = name;
57
- applyingAutoName = false;
58
- }
59
- const automatic = name === pendingAutoName;
60
- const nameSource = automatic ? "auto" : isDefaultName(name) ? "default" : "user";
61
- tabBridge.session(currentSessionFile(), name, nameSource);
62
- };
63
- let working = false;
64
- // Invariant: the last turn's settlement stays reported until the next turn starts.
65
- let lastTurn;
66
- let autoNameAttempted = false;
67
- let autoNameArmed = false;
68
- // Invariant: naming launches once per tab during an agent run, as soon as its prompt is projected,
69
- // and runs beside the turn instead of waiting for it to settle.
70
- const launchAutoName = () => {
71
- if (!autoNameArmed || autoNameAttempted || options.autoName !== true || !isDefaultName(currentSessionName()))
72
- return;
73
- const prompt = backend.session.view().transcript.find(block => block.kind === "user")?.text.trim();
74
- if (!prompt)
75
- return;
76
- autoNameAttempted = true;
77
- void import("../features/resident-tab/index.js").then(({ generateAutoName }) => generateAutoName(prompt, request => backend.generateResidentTabName(request.prompt, request.maxTokens, request.signal))).then(async (name) => {
78
- // Invariant: a manual rename made while generation was pending owns both the session and the tab.
79
- if (!isDefaultName(currentSessionName()))
80
- return;
81
- pendingAutoName = name;
82
- applyingAutoName = true;
83
- const result = await backend.workflows.executeWorkflow({ command: "name", argument: name });
84
- if (result.outcome !== "completed") {
85
- applyingAutoName = false;
86
- if (pendingAutoName === name)
87
- pendingAutoName = null;
88
- return;
89
- }
90
- const current = currentSessionName();
91
- if (current !== null && !isDefaultName(current)) {
92
- // Invariant: The session already holds the applied name; report it as automatic now.
93
- pendingAutoName = current;
94
- applyingAutoName = false;
95
- tabBridge.session(currentSessionFile(), current, "auto");
96
- }
97
- else {
98
- // Invariant: The session announces later; show the generated name meanwhile, still automatic.
99
- tabBridge.session(currentSessionFile(), name, "auto");
100
- }
101
- }).catch(() => { pendingAutoName = null; applyingAutoName = false; });
102
- };
103
- const reportStatus = (lifecycle) => {
104
- const view = backend.session.view();
105
- const pendingRequests = view.dialog == null ? 0 : 1;
106
- const queuedInput = view.editor?.queuedSubmissions.length ?? 0;
107
- tabBridge.status(deriveResidentTabStatus({
108
- lifecycle: lifecycle ?? view.lifecycle,
109
- pendingRequests,
110
- queuedInput,
111
- ...(lastTurn === undefined ? {} : { lastTurn }),
112
- }), false, pendingRequests, queuedInput);
113
- };
114
- announceSession();
115
- const unsubscribeCommands = typeof tabBridge.onCommand === "function"
116
- ? tabBridge.onCommand(command => applyBridgeCommand(command, backend, options)) : () => { };
117
- const unsubscribeEvents = backend.session.onEvent(event => {
118
- if (event.type === "session-lifecycle") {
119
- const wasWorking = working;
120
- working = event.lifecycle === "busy";
121
- if (working)
122
- lastTurn = undefined;
123
- reportStatus(event.lifecycle);
124
- if (wasWorking && !working && recovery !== null) {
125
- void recovery.settled(currentSessionFile()).catch(() => tabBridge.degraded(true));
126
- }
127
- }
128
- if (event.type === "agent-run-started") {
129
- autoNameArmed = true;
130
- launchAutoName();
131
- }
132
- // Rationale: Pi starts the run before it projects the user message, so the prompt may arrive later.
133
- if (event.type === "transcript-block" || event.type === "session-view")
134
- launchAutoName();
135
- if (event.type === "agent-run-settled") {
136
- launchAutoName();
137
- autoNameArmed = false;
138
- lastTurn = event.aborted ? "aborted" : event.successful ? "done" : "error";
139
- tabBridge.prompt(event.aborted);
140
- reportStatus();
141
- }
142
- if (event.type === "session-view") {
143
- announceSession();
144
- reportStatus();
145
- }
146
- });
147
- return () => {
148
- unsubscribeCommands();
149
- unsubscribeEvents();
150
- };
151
- }
152
- function applyBridgeCommand(command, backend, options) {
153
- // Invariant: visibility never pauses resident rendering or autonomous work.
154
- if (command.type === "client")
155
- options.onClientVersion?.(command.version);
156
- else if (command.type === "rename")
157
- void backend.workflows.executeWorkflow({ command: "name", argument: command.name }).catch(() => { });
158
- else if (command.type === "route") {
159
- if (options.openRoute !== undefined)
160
- options.openRoute(command.route);
161
- else
162
- void backend.workflows.executeWorkflow({ command: command.route, argument: "" }).catch(() => { });
163
- }
164
- else if (command.type === "stop")
165
- void backend.session.dispose().catch(() => { });
166
- }
167
- export function createResidentClientIdentity(announce) {
168
- let version = null;
169
- let changed;
170
- return {
171
- current: () => version,
172
- onChange: (listener) => { changed = listener; },
173
- observe: (next) => {
174
- if (next === version)
175
- return;
176
- version = next;
177
- announce({ status: "client-connected", version: next });
178
- changed?.();
179
- },
180
- };
181
- }
182
- /** Input ownership is established before the presenter starts, and released if bridge binding fails. */
183
- export async function bindResidentPresentation(bridge, backend, recovery, options, input) {
184
- if (bridge === null)
185
- return { unsubscribeTabBridge() { }, removeControllerBoundaryInput() { } };
186
- const removeControllerBoundaryInput = input.addPreInputListener(data => ({ data: bridge.consumeControllerBoundaryInput(data) }));
187
- try {
188
- return { unsubscribeTabBridge: await bindResidentTabBridge(bridge, backend, recovery, options), removeControllerBoundaryInput };
189
- }
190
- catch (error) {
191
- removeControllerBoundaryInput();
192
- throw error;
193
- }
194
- }
195
- export async function correlateResidentTabSubmission(recovery, backend, submissionId, entryId) {
196
- await recovery.correlated(submissionId, entryId);
197
- // Concurrency: a normal prompt command can resolve after the ready transition already fired.
198
- // Re-read lifecycle only after correlation is active; a concurrent ready observer and this path
199
- // safely race because recovery consumes the active entry once and retirement is idempotent.
200
- if (backend.session.view().lifecycle !== "busy")
201
- await recovery.settled(currentBackendSessionFile(backend));
202
- }
203
- export function currentBackendSessionFile(backend) {
204
- const direct = backend.identity.currentSessionFile?.();
205
- if (direct !== undefined && direct !== null)
206
- return direct;
207
- const resume = backend.identity.currentSessionResumeMetadata();
208
- return resume === null ? null : `${resume.sessionDir}/${resume.sessionId}`;
209
- }
@@ -1,28 +0,0 @@
1
- import type { OwnedUiApplicationPort, PresentationTerminalPort } from "../contracts/presentation/index.js";
2
- import type { TabBridgeClient } from "../foundation/resident-tabs/bridge-client.js";
3
- import type { ResidentTabRoute } from "../foundation/resident-tabs/routes.js";
4
- import type { ReleaseNoteCatalog } from "../features/owned-ui/release-notes.js";
5
- import type { UiRouteHost } from "../ui/apps/contracts.js";
6
- import type { OwnedSettingsManager } from "../ui/settings/manager.js";
7
- import { terminateOwnedUiProcess } from "../features/owned-ui/run.js";
8
- export { terminateOwnedUiProcess };
9
- export interface UtilityTabOptions {
10
- readonly route: ResidentTabRoute;
11
- readonly bridge: TabBridgeClient;
12
- readonly cwd?: string;
13
- readonly profileId?: string;
14
- readonly terminal?: PresentationTerminalPort;
15
- readonly agentDir?: string;
16
- readonly settings?: OwnedSettingsManager;
17
- readonly routeHost?: UiRouteHost;
18
- readonly releaseNotes?: ReleaseNoteCatalog;
19
- readonly onApplication?: (application: OwnedUiApplicationPort) => void;
20
- }
21
- export interface UtilityTabComposition {
22
- readonly application: OwnedUiApplicationPort;
23
- readonly settings: OwnedSettingsManager;
24
- }
25
- /** Runs one pinned Settings or Changelog screen without constructing an Agent engine or session. */
26
- export declare function runUtilityTab(options: UtilityTabOptions): Promise<number>;
27
- export declare function composeUtilityTab(options: UtilityTabOptions): Promise<UtilityTabComposition>;
28
- export declare function utilityAgentDir(environment?: NodeJS.ProcessEnv): string;
@@ -1,244 +0,0 @@
1
- import { homedir } from "node:os";
2
- import { resolve } from "node:path";
3
- import { MAX_CLIPBOARD_TEXT_BYTES } from "../contracts/owned-ui/index.js";
4
- import { writeSystemClipboardText } from "../app/session-shell/system-clipboard.js";
5
- import { OwnedUiTerminalHost, } from "../app/session-shell/shell-host.js";
6
- import { nativeHyperlinkStyle } from "../ui/components/spans.js";
7
- import { createPiKeybindingsHost } from "../integrations/pi/components/shell-shared-facade.js";
8
- import { applyConfiguredPiTheme, setPiAccentColor, setPiPackageBorderProjectionEnabled } from "../integrations/pi/components/upstream/theme/theme.js";
9
- import { createPiTerminalBridge } from "../integrations/pi/tui-runtime/presentation-adapter.js";
10
- import { resolveLaunchProfilePaths } from "../features/launch/profile-paths.js";
11
- import { createOwnedSettingsManager, watchSharedSettings } from "./owned-settings.js";
12
- import { residentRouteHostOptions, residentTabKeybindings } from "./resident-tab-bridge.js";
13
- import { createOwnedRouteHost } from "./settings-route-host.js";
14
- import { runOwnedUi, terminateOwnedUiProcess } from "../features/owned-ui/run.js";
15
- export { terminateOwnedUiProcess };
16
- /** Runs one pinned Settings or Changelog screen without constructing an Agent engine or session. */
17
- export async function runUtilityTab(options) {
18
- const composition = await composeUtilityTab(options);
19
- options.onApplication?.(composition.application);
20
- return await runOwnedUi(composition);
21
- }
22
- export async function composeUtilityTab(options) {
23
- const cwd = options.cwd ?? process.cwd();
24
- const agentDir = options.agentDir ?? utilityAgentDir();
25
- const { settings, offline } = await prepareUtilitySettings(options, cwd, agentDir);
26
- await options.bridge.start().catch(() => false);
27
- options.bridge.status("starting");
28
- applyUtilityTheme(settings, options.bridge);
29
- const keybindings = residentTabKeybindings(options.bridge, agentDir, createPiKeybindingsHost({ profile: "a1", agentDir }));
30
- const routeHost = options.routeHost ?? createUtilityRouteHost(options, settings, keybindings, cwd, agentDir);
31
- return {
32
- settings,
33
- application: createUtilityApplication(options, settings, offline, routeHost),
34
- };
35
- }
36
- async function prepareUtilitySettings(options, cwd, agentDir) {
37
- const offline = options.settings === undefined && options.route === "settings"
38
- ? await import("../integrations/pi/engine/offline-settings-port.js")
39
- .then(module => module.createOfflinePiSettingsPort({ cwd, agentDir }))
40
- : null;
41
- return {
42
- offline,
43
- settings: options.settings ?? createOwnedSettingsManager({
44
- profileId: options.profileId ?? "a1",
45
- agent: offline?.port ?? null,
46
- }),
47
- };
48
- }
49
- function applyUtilityTheme(settings, bridge) {
50
- setPiPackageBorderProjectionEnabled(true);
51
- setPiAccentColor(settings.value("accentColor"));
52
- applyConfiguredPiTheme("dark");
53
- bridge.accent(settings.value("accentColor"));
54
- }
55
- function createUtilityRouteHost(options, settings, keybindings, cwd, agentDir) {
56
- let catalog;
57
- const releaseNoteCatalog = () => catalog ??= options.releaseNotes === undefined
58
- ? import("../features/owned-ui/release-notes.js").then(module => module.readPackagedReleaseNotes())
59
- : Promise.resolve(options.releaseNotes);
60
- return pinnedRouteHost(options.route, createOwnedRouteHost(settings, {
61
- changelog: async () => {
62
- const [notes, { renderPiShellChangelogLines }] = await Promise.all([
63
- releaseNoteCatalog(),
64
- import("../integrations/pi/components/shell-presenters-info.js"),
65
- ]);
66
- return { rows: width => renderPiShellChangelogLines(notes.completeMarkdown, width).map(row => nativeHyperlinkStyle(row)) };
67
- },
68
- hotkeys: async () => { throw new Error("hotkeys are unavailable in a utility tab"); },
69
- session: async () => { throw new Error("session information is unavailable in a utility tab"); },
70
- }, {
71
- ...residentRouteHostOptions(options.bridge),
72
- keybindings,
73
- agentDir,
74
- cwd,
75
- copyText: text => {
76
- if (Buffer.byteLength(text) > MAX_CLIPBOARD_TEXT_BYTES)
77
- return false;
78
- void writeSystemClipboardText(text).catch(() => { });
79
- return true;
80
- },
81
- }));
82
- }
83
- function createUtilityApplication(options, settings, offline, routeHost) {
84
- const backgroundSettings = {
85
- snapshot: () => settings.value("backgroundStyle"),
86
- onChange: listener => settings.onChange(current => listener(current.value("backgroundStyle"))),
87
- };
88
- const terminalHost = new OwnedUiTerminalHost({
89
- layout: "custom-viewport", mode: "fullscreen", hardwareCursor: false,
90
- ...(options.terminal === undefined ? {} : { terminal: createPiTerminalBridge(options.terminal) }),
91
- backgroundSettings,
92
- });
93
- const presenter = new UtilityTabPresenter(terminalHost, routeHost, options.route, options.bridge);
94
- const removeBoundaryInput = terminalHost.runtime.addPreInputListener(data => ({ data: options.bridge.consumeControllerBoundaryInput(data) }));
95
- const unwatchSettings = watchSharedSettings(settings);
96
- const unsubscribeAccent = settings.onChange(current => {
97
- const accent = current.value("accentColor");
98
- setPiAccentColor(accent);
99
- options.bridge.accent(accent);
100
- });
101
- let disposed = false;
102
- let started = false;
103
- let stopResolve;
104
- let unsubscribeBridge = () => { };
105
- const stopped = new Promise(resolvePromise => { stopResolve = resolvePromise; });
106
- return {
107
- get disposed() { return disposed; },
108
- start: () => {
109
- if (started || disposed)
110
- return;
111
- started = true;
112
- presenter.start();
113
- terminalHost.attach(presenter);
114
- unsubscribeBridge = options.bridge.onCommand(command => handleBridgeCommand(command, presenter, options.route, () => {
115
- stopResolve();
116
- void terminalHost.dispose().catch(() => undefined);
117
- }));
118
- options.bridge.status("idle");
119
- void offline?.modelsReady.then(() => settings.load()).catch(() => undefined);
120
- },
121
- flush: async () => { },
122
- waitUntilStopped: () => stopped,
123
- dispose: async () => {
124
- if (disposed)
125
- return;
126
- disposed = true;
127
- stopResolve();
128
- unsubscribeBridge();
129
- unsubscribeAccent();
130
- unwatchSettings();
131
- removeBoundaryInput();
132
- try {
133
- await terminalHost.dispose();
134
- }
135
- finally {
136
- options.bridge.close();
137
- }
138
- },
139
- };
140
- }
141
- function pinnedRouteHost(route, host) {
142
- return {
143
- claims: candidate => candidate === route && host.claims(candidate),
144
- open: (candidate, input) => candidate === route ? host.open(candidate, input) : null,
145
- };
146
- }
147
- function handleBridgeCommand(command, presenter, route, stop) {
148
- if (command.type === "stop")
149
- stop();
150
- else if (command.type === "route" && command.route === route)
151
- presenter.presentRoute();
152
- }
153
- export function utilityAgentDir(environment = process.env) {
154
- const configured = environment.PI_CODING_AGENT_DIR;
155
- if (configured !== undefined && configured.trim().length > 0) {
156
- return resolve(configured.startsWith("~/") || configured.startsWith("~\\")
157
- ? `${homedir()}${configured.slice(1)}`
158
- : configured);
159
- }
160
- return resolveLaunchProfilePaths().agentProfile;
161
- }
162
- class UtilityTabPresenter {
163
- #host;
164
- #terminal;
165
- #routeHost;
166
- #route;
167
- #bridge;
168
- #surface = null;
169
- #routeHandle = null;
170
- #released = false;
171
- constructor(host, routeHost, route, bridge) {
172
- this.#host = host;
173
- this.#routeHost = routeHost;
174
- this.#route = route;
175
- this.#bridge = bridge;
176
- this.#terminal = host.connect(this);
177
- }
178
- render(_width) { return []; }
179
- handleInput(_data) { }
180
- invalidate() { this.#terminal.requestRender(); }
181
- setFocused(_focused) { }
182
- inputCoordinationSurface() { return "owned"; }
183
- setOverlaySurfaces(_surfaces) { }
184
- noteImmediatePresentation() { }
185
- handleViewportInput(_data) { return undefined; }
186
- layoutPart(_part) { return EMPTY_COMPONENT; }
187
- activated() { this.presentRoute(); }
188
- start() { this.#terminal.start(); }
189
- waitUntilStopped() { return new Promise(() => { }); }
190
- dispose() { return this.#host.close(this); }
191
- presentRoute() {
192
- if (this.#released || this.#routeHandle !== null)
193
- return;
194
- if (!this.#terminal.running || !this.#terminal.attached)
195
- return;
196
- const surface = this.#routeHost.open(this.#route);
197
- if (surface === null)
198
- throw new Error(`utility route is unavailable: ${this.#route}`);
199
- this.#surface = surface;
200
- let exitRequested = false;
201
- const handle = this.#terminal.openRoute(surface, {
202
- closed: rendered => {
203
- if (this.#routeHandle === handle)
204
- this.#routeHandle = null;
205
- this.#surface = null;
206
- queueMicrotask(() => {
207
- if (rendered && !exitRequested)
208
- void this.#bridge.requestClose();
209
- });
210
- },
211
- exit: () => {
212
- exitRequested = true;
213
- void this.#bridge.requestDetach().then(() => this.presentRoute(), () => this.presentRoute());
214
- },
215
- });
216
- this.#routeHandle = handle;
217
- }
218
- release() {
219
- if (this.#released)
220
- return { exitText: "", failures: [], settle: async () => [] };
221
- this.#released = true;
222
- const failures = [];
223
- try {
224
- this.#routeHandle?.hide();
225
- }
226
- catch (error) {
227
- failures.push(error);
228
- }
229
- try {
230
- this.#surface?.close();
231
- }
232
- catch (error) {
233
- failures.push(error);
234
- }
235
- this.#routeHandle = null;
236
- this.#surface = null;
237
- return { exitText: "", failures, settle: async () => [] };
238
- }
239
- }
240
- const EMPTY_COMPONENT = {
241
- render: () => [],
242
- handleInput: () => { },
243
- invalidate: () => { },
244
- };
@@ -1,28 +0,0 @@
1
- import type { UiTheme } from "../../ui/components/index.js";
2
- /** The A1 setting holding the tab kinds the strip's `+` offers. */
3
- export declare const PLUS_MENU_SETTING_ID = "tabBarPlusMenu";
4
- /** One tab kind the plus menu can offer. */
5
- export interface PlusMenuKind {
6
- readonly key: string;
7
- readonly label: string;
8
- }
9
- /** Presentation copy for a searchable ordered flag multi-select dialog. */
10
- export interface FlagToggleDialogPresentation {
11
- readonly title: string;
12
- readonly description: string;
13
- readonly empty: string;
14
- }
15
- /** Owns only filtering and selection; the Settings screen owns enabled state and persistence. */
16
- export declare class FlagToggleDialog {
17
- #private;
18
- constructor(kinds: readonly PlusMenuKind[], presentation: FlagToggleDialogPresentation);
19
- /** The kinds the filter keeps, in kind order. */
20
- shown(): readonly PlusMenuKind[];
21
- /** Handles one key by its resolved name; `toggle` flips a kind. Returns whether the dialog closed. */
22
- handle(name: string, data: string, toggle: (key: string) => void): "close" | "handled";
23
- lines(enabled: Readonly<Record<string, boolean | string>>, width: number, theme: UiTheme): readonly string[];
24
- }
25
- /** The tab bar's specialized flag dialog, retained as the public Plus Menu surface. */
26
- export declare class PlusMenuDialog extends FlagToggleDialog {
27
- constructor(kinds: readonly PlusMenuKind[]);
28
- }
@@ -1,89 +0,0 @@
1
- import { LineInput, handleLineInputKey, padToWidth, renderInputRow, renderShortcutHintsWithClose, truncateToWidth, } from "../../ui/components/index.js";
2
- /** The A1 setting holding the tab kinds the strip's `+` offers. */
3
- export const PLUS_MENU_SETTING_ID = "tabBarPlusMenu";
4
- const PLUS_MENU_PRESENTATION = Object.freeze({
5
- title: "Plus Menu",
6
- description: "Choose what the + button in the tab bar can add.",
7
- empty: "No tabs match",
8
- });
9
- const HINTS = [
10
- { key: "Type", action: "search" },
11
- { key: "↑↓", action: "navigate" },
12
- { key: "Space", action: "toggle" },
13
- { key: "esc", action: "close" },
14
- ];
15
- const PADDING_X = 2;
16
- /** Owns only filtering and selection; the Settings screen owns enabled state and persistence. */
17
- export class FlagToggleDialog {
18
- #kinds;
19
- #presentation;
20
- #filter = new LineInput("");
21
- #index = 0;
22
- constructor(kinds, presentation) {
23
- this.#kinds = kinds;
24
- this.#presentation = presentation;
25
- }
26
- /** The kinds the filter keeps, in kind order. */
27
- shown() {
28
- const needle = this.#filter.value.trim().toLowerCase();
29
- return this.#kinds.filter(kind => needle.length === 0 || kind.label.toLowerCase().includes(needle));
30
- }
31
- /** Handles one key by its resolved name; `toggle` flips a kind. Returns whether the dialog closed. */
32
- handle(name, data, toggle) {
33
- const shown = this.shown();
34
- if (name === "escape")
35
- return "close";
36
- if (name === "up" || name === "down") {
37
- this.#index = Math.min(Math.max(0, shown.length - 1), Math.max(0, this.#index + (name === "down" ? 1 : -1)));
38
- return "handled";
39
- }
40
- if (name === "space") {
41
- const kind = shown[this.#index];
42
- if (kind !== undefined)
43
- toggle(kind.key);
44
- return "handled";
45
- }
46
- handleLineInputKey(this.#filter, data);
47
- this.#index = 0;
48
- return "handled";
49
- }
50
- lines(enabled, width, theme) {
51
- const frameWidth = Math.max(0, width);
52
- const left = Math.min(PADDING_X, frameWidth);
53
- const right = Math.min(PADDING_X, frameWidth - left);
54
- const contentWidth = Math.max(0, frameWidth - left - right);
55
- const blank = " ".repeat(frameWidth);
56
- const row = (painted, selected = false) => {
57
- const content = padToWidth(truncateToWidth(painted, contentWidth), contentWidth);
58
- const rightPadding = " ".repeat(right);
59
- return `${" ".repeat(left)}${selected ? theme.highlight(content) : content}${selected ? theme.panel(rightPadding) : rightPadding}`;
60
- };
61
- const shown = this.shown();
62
- const index = Math.min(this.#index, Math.max(0, shown.length - 1));
63
- const rows = shown.length === 0
64
- ? [row(theme.fg("dim", this.#presentation.empty))]
65
- : shown.map((kind, position) => {
66
- const selected = position === index;
67
- const cursor = selected ? "→ " : " ";
68
- const marker = enabled[kind.key] === true ? "●" : "○";
69
- const content = `${selected ? theme.fg("accent", cursor) : cursor}${theme.fg("text", marker)} ${theme.fg("text", kind.label)}`;
70
- return row(content, selected);
71
- });
72
- return [
73
- blank,
74
- row(theme.bold(theme.fg("accent", this.#presentation.title))),
75
- row(theme.fg("dim", this.#presentation.description)),
76
- blank,
77
- ...renderInputRow(this.#filter, contentWidth, { ruled: false, promptGlyph: "> ", theme }).lines.map(line => row(line)),
78
- blank,
79
- ...rows,
80
- blank,
81
- row(renderShortcutHintsWithClose(HINTS, theme, contentWidth)),
82
- blank,
83
- ];
84
- }
85
- }
86
- /** The tab bar's specialized flag dialog, retained as the public Plus Menu surface. */
87
- export class PlusMenuDialog extends FlagToggleDialog {
88
- constructor(kinds) { super(kinds, PLUS_MENU_PRESENTATION); }
89
- }
@@ -1,11 +0,0 @@
1
- export declare const AUTO_NAME_MAX_LENGTH = 16;
2
- export declare const AUTO_NAME_TIMEOUT_MS = 30000;
3
- export declare const AUTO_NAME_TOKEN_BUDGETS: readonly [4096, 32768];
4
- export declare function normalizeAutoName(value: string): string | null;
5
- export declare function fallbackAutoName(prompt: string): string;
6
- export interface AutoNameCompletion {
7
- readonly prompt: string;
8
- readonly maxTokens: number;
9
- readonly signal: AbortSignal;
10
- }
11
- export declare function generateAutoName(firstPrompt: string, complete: (request: AutoNameCompletion) => Promise<string | null>, timeoutMs?: number): Promise<string>;
@@ -1,44 +0,0 @@
1
- export const AUTO_NAME_MAX_LENGTH = 16;
2
- export const AUTO_NAME_TIMEOUT_MS = 30_000;
3
- // Rationale: reasoning models can spend a small ceiling on hidden thinking and emit no title, so an
4
- // answerless attempt retries with a larger bound; budgets stay strictly increasing, as in v2.
5
- export const AUTO_NAME_TOKEN_BUDGETS = [4_096, 32_768];
6
- export function normalizeAutoName(value) {
7
- const normalized = value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").replace(/-+/g, "-");
8
- if (!normalized)
9
- return null;
10
- if (normalized.length <= AUTO_NAME_MAX_LENGTH)
11
- return normalized;
12
- const clipped = normalized.slice(0, AUTO_NAME_MAX_LENGTH + 1);
13
- const boundary = clipped.lastIndexOf("-");
14
- const result = (boundary >= 4 ? clipped.slice(0, boundary) : normalized.slice(0, AUTO_NAME_MAX_LENGTH)).replace(/-+$/g, "");
15
- return result || null;
16
- }
17
- export function fallbackAutoName(prompt) {
18
- const words = prompt.toLowerCase().match(/[a-z0-9]+/g) ?? [];
19
- return normalizeAutoName(words.slice(0, 3).join("-")) ?? "new-task";
20
- }
21
- export async function generateAutoName(firstPrompt, complete, timeoutMs = AUTO_NAME_TIMEOUT_MS) {
22
- for (const maxTokens of AUTO_NAME_TOKEN_BUDGETS) {
23
- const controller = new AbortController();
24
- const timer = setTimeout(() => controller.abort(), timeoutMs);
25
- timer.unref?.();
26
- try {
27
- const response = await complete({
28
- prompt: `Name this coding task with a lowercase hyphenated title of at most ${AUTO_NAME_MAX_LENGTH} characters. Reply only with the title.\n\n${firstPrompt.slice(0, 500)}`,
29
- maxTokens,
30
- signal: controller.signal,
31
- });
32
- const name = response === null ? null : normalizeAutoName(response);
33
- if (name !== null)
34
- return name;
35
- }
36
- catch {
37
- // Rationale: naming is best effort; the larger bounded attempt precedes the deterministic fallback.
38
- }
39
- finally {
40
- clearTimeout(timer);
41
- }
42
- }
43
- return fallbackAutoName(firstPrompt);
44
- }
@@ -1,5 +0,0 @@
1
- export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_TIMEOUT_MS, AUTO_NAME_TOKEN_BUDGETS, fallbackAutoName, generateAutoName, normalizeAutoName, type AutoNameCompletion, } from "./auto-name.js";
2
- export { RESIDENT_TAB_SHORTCUTS, type ResidentTabAction, type ResidentTabShortcut, } from "./shortcut-declarations.js";
3
- export { projectResidentTabShortcuts, RESIDENT_TAB_GLOBAL_SHORTCUTS, type ResidentTabGlobalAction, type ResidentTabShortcutConflict, type ResidentTabShortcutProjection, type ShortcutBindings, } from "./shortcut-projection.js";
4
- export { readShortcutBindingsFile } from "./shortcut-bindings-file.js";
5
- export { deriveResidentTabStatus, type ResidentTabDerivedStatus, type ResidentTabFacts, } from "./status-deriver.js";
@@ -1,7 +0,0 @@
1
- export { AUTO_NAME_MAX_LENGTH, AUTO_NAME_TIMEOUT_MS, AUTO_NAME_TOKEN_BUDGETS, fallbackAutoName, generateAutoName, normalizeAutoName, } from "./auto-name.js";
2
- // Performance: the registry builder lives in `shortcuts.ts`, outside this barrel, so startup
3
- // presentation can read the declarations without loading the component registry.
4
- export { RESIDENT_TAB_SHORTCUTS, } from "./shortcut-declarations.js";
5
- export { projectResidentTabShortcuts, RESIDENT_TAB_GLOBAL_SHORTCUTS, } from "./shortcut-projection.js";
6
- export { readShortcutBindingsFile } from "./shortcut-bindings-file.js";
7
- export { deriveResidentTabStatus, } from "./status-deriver.js";