@timurproko/a1 0.2.6 → 0.2.7-dev.1222

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 (419) hide show
  1. package/README.md +41 -3
  2. package/bin/automatic-update.js +7 -0
  3. package/bin/cli.js +4 -0
  4. package/bin/guardian.js +5 -0
  5. package/bin/tab-launch-context.d.ts +27 -0
  6. package/bin/tab-launch-context.js +94 -0
  7. package/bin/ui.js +107 -59
  8. package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
  9. package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
  10. package/dist/app/session-shell/dialog-coordinator.js +133 -0
  11. package/dist/app/session-shell/dock-chrome.d.ts +34 -0
  12. package/dist/app/session-shell/dock-chrome.js +109 -0
  13. package/dist/app/session-shell/exit-notice.d.ts +1 -1
  14. package/dist/app/session-shell/exit-notice.js +1 -1
  15. package/dist/app/session-shell/extension-surface.d.ts +30 -0
  16. package/dist/app/session-shell/extension-surface.js +105 -0
  17. package/dist/app/session-shell/helper-pool.d.ts +3 -5
  18. package/dist/app/session-shell/helper-pool.js +3 -5
  19. package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
  20. package/dist/app/session-shell/input-surface-switch.js +85 -0
  21. package/dist/app/session-shell/login-interaction.d.ts +27 -0
  22. package/dist/app/session-shell/login-interaction.js +91 -0
  23. package/dist/app/session-shell/prompt-submission.d.ts +48 -0
  24. package/dist/app/session-shell/prompt-submission.js +276 -0
  25. package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
  26. package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
  27. package/dist/app/session-shell/response-copy-helper.js +21 -6
  28. package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
  29. package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
  30. package/dist/app/session-shell/response-copy-transport.js +69 -17
  31. package/dist/app/session-shell/session-concern.d.ts +22 -0
  32. package/dist/app/session-shell/session-concern.js +29 -0
  33. package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
  34. package/dist/app/session-shell/session-lifecycle.js +49 -0
  35. package/dist/app/session-shell/session-shell-root.d.ts +42 -6
  36. package/dist/app/session-shell/session-shell-root.js +197 -908
  37. package/dist/app/session-shell/session-shell.d.ts +3 -8
  38. package/dist/app/session-shell/session-shell.js +327 -835
  39. package/dist/app/session-shell/session-viewport-controller.d.ts +2 -1
  40. package/dist/app/session-shell/session-viewport-controller.js +41 -38
  41. package/dist/app/session-shell/settings-bindings.d.ts +17 -0
  42. package/dist/app/session-shell/settings-bindings.js +91 -0
  43. package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
  44. package/dist/app/session-shell/shell-editor-factory.js +105 -0
  45. package/dist/app/session-shell/shell-host.d.ts +6 -0
  46. package/dist/app/session-shell/shell-host.js +34 -7
  47. package/dist/app/session-shell/shell-layout.d.ts +64 -0
  48. package/dist/app/session-shell/shell-layout.js +18 -0
  49. package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
  50. package/dist/app/session-shell/suggestion-surface.js +63 -0
  51. package/dist/app/session-shell/transcript-document.d.ts +78 -0
  52. package/dist/app/session-shell/transcript-document.js +365 -0
  53. package/dist/app/session-shell/viewport-layout.d.ts +31 -0
  54. package/dist/app/session-shell/viewport-layout.js +160 -0
  55. package/dist/app/session-shell/workflow-output.d.ts +33 -0
  56. package/dist/app/session-shell/workflow-output.js +174 -0
  57. package/dist/app/session-shell/workflow-router.d.ts +25 -0
  58. package/dist/app/session-shell/workflow-router.js +39 -0
  59. package/dist/cli/dispatch.d.ts +11 -1
  60. package/dist/cli/dispatch.js +79 -5
  61. package/dist/cli/tabs-request.d.ts +7 -0
  62. package/dist/cli/tabs-request.js +1 -0
  63. package/dist/cli/tabs.d.ts +14 -0
  64. package/dist/cli/tabs.js +151 -0
  65. package/dist/cli/version-stats.js +38 -3
  66. package/dist/composition/owned-settings.d.ts +12 -0
  67. package/dist/composition/owned-settings.js +36 -0
  68. package/dist/composition/owned-ui.d.ts +27 -28
  69. package/dist/composition/owned-ui.js +207 -153
  70. package/dist/composition/reference-selection-options.d.ts +3 -0
  71. package/dist/composition/reference-selection-options.js +16 -0
  72. package/dist/composition/resident-tab-bridge.d.ts +25 -0
  73. package/dist/composition/resident-tab-bridge.js +180 -0
  74. package/dist/composition/session-backend.d.ts +19 -0
  75. package/dist/composition/session-backend.js +1 -0
  76. package/dist/composition/session-runtime-registry.d.ts +20 -0
  77. package/dist/composition/session-runtime-registry.js +85 -0
  78. package/dist/composition/settings-route-host.d.ts +16 -2
  79. package/dist/composition/settings-route-host.js +42 -17
  80. package/dist/composition/settings-search-input.d.ts +9 -0
  81. package/dist/composition/settings-search-input.js +61 -0
  82. package/dist/composition/startup-route.d.ts +32 -0
  83. package/dist/composition/startup-route.js +72 -0
  84. package/dist/composition/utility-tab.d.ts +28 -0
  85. package/dist/composition/utility-tab.js +244 -0
  86. package/dist/contracts/owned-ui/index.d.ts +1 -1
  87. package/dist/contracts/owned-ui/model.d.ts +3 -0
  88. package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
  89. package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
  90. package/dist/contracts/presentation/index.d.ts +11 -0
  91. package/dist/contracts/presentation/index.js +12 -0
  92. package/dist/features/launch/development-launch.js +6 -0
  93. package/dist/features/launch/index.d.ts +1 -1
  94. package/dist/features/launch/intent.d.ts +3 -1
  95. package/dist/features/launch/intent.js +7 -4
  96. package/dist/features/launch/profile-paths.js +4 -0
  97. package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
  98. package/dist/features/owned-ui/plus-menu-dialog.js +84 -0
  99. package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
  100. package/dist/features/owned-ui/project-trust-dialog.js +6 -8
  101. package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
  102. package/dist/features/owned-ui/project-trust-prompt.js +7 -3
  103. package/dist/features/owned-ui/reference-document-selection.d.ts +30 -0
  104. package/dist/features/owned-ui/reference-document-selection.js +179 -0
  105. package/dist/features/owned-ui/reference-screen-app.d.ts +6 -1
  106. package/dist/features/owned-ui/reference-screen-app.js +51 -10
  107. package/dist/features/owned-ui/settings-app.d.ts +13 -2
  108. package/dist/features/owned-ui/settings-app.js +136 -97
  109. package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
  110. package/dist/features/owned-ui/settings-search-input.js +1 -0
  111. package/dist/features/prompt-history/index.d.ts +1 -1
  112. package/dist/features/prompt-history/paths.d.ts +2 -1
  113. package/dist/features/prompt-history/paths.js +10 -2
  114. package/dist/features/prompt-history/service.d.ts +5 -0
  115. package/dist/features/prompt-history/service.js +1 -1
  116. package/dist/features/resident-tab/auto-name.d.ts +11 -0
  117. package/dist/features/resident-tab/auto-name.js +44 -0
  118. package/dist/features/resident-tab/index.d.ts +5 -0
  119. package/dist/features/resident-tab/index.js +7 -0
  120. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
  121. package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
  122. package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
  123. package/dist/features/resident-tab/shortcut-declarations.js +26 -0
  124. package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
  125. package/dist/features/resident-tab/shortcut-projection.js +64 -0
  126. package/dist/features/resident-tab/status-deriver.d.ts +10 -0
  127. package/dist/features/resident-tab/status-deriver.js +12 -0
  128. package/dist/foundation/launch-context/index.d.ts +12 -0
  129. package/dist/foundation/launch-context/index.js +26 -0
  130. package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
  131. package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
  132. package/dist/foundation/launch-guardian/main.d.ts +7 -1
  133. package/dist/foundation/launch-guardian/main.js +60 -7
  134. package/dist/foundation/lifecycle/session-repository-context.js +16 -2
  135. package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
  136. package/dist/foundation/process-containment/addon-containment.js +139 -0
  137. package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
  138. package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
  139. package/dist/foundation/process-containment/addon.d.ts +42 -0
  140. package/dist/foundation/process-containment/addon.js +57 -0
  141. package/dist/foundation/process-containment/artifact.d.ts +1 -1
  142. package/dist/foundation/process-containment/artifact.js +6 -5
  143. package/dist/foundation/process-containment/contracts.d.ts +2 -0
  144. package/dist/foundation/process-containment/index.d.ts +4 -4
  145. package/dist/foundation/process-containment/index.js +3 -3
  146. package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
  147. package/dist/foundation/process-containment/native-process-inspector.js +10 -10
  148. package/dist/foundation/release/automatic-update.d.ts +37 -0
  149. package/dist/foundation/release/automatic-update.js +265 -0
  150. package/dist/foundation/release/bootstrap.d.ts +7 -9
  151. package/dist/foundation/release/bootstrap.js +107 -24
  152. package/dist/foundation/release/cohort-state.d.ts +1 -1
  153. package/dist/foundation/release/cohort-state.js +1 -1
  154. package/dist/foundation/release/dependency-certification.js +54 -19
  155. package/dist/foundation/release/early-accent.d.ts +12 -0
  156. package/dist/foundation/release/early-accent.js +59 -0
  157. package/dist/foundation/release/index.d.ts +2 -2
  158. package/dist/foundation/release/index.js +2 -2
  159. package/dist/foundation/release/latest-release.d.ts +24 -2
  160. package/dist/foundation/release/latest-release.js +51 -1
  161. package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
  162. package/dist/foundation/release/progress-palette.generated.js +137 -3
  163. package/dist/foundation/release/release-gc.d.ts +3 -0
  164. package/dist/foundation/release/release-gc.js +59 -8
  165. package/dist/foundation/release/release-store.d.ts +12 -0
  166. package/dist/foundation/release/release-store.js +124 -2
  167. package/dist/foundation/release/update-execution-lease.d.ts +48 -0
  168. package/dist/foundation/release/update-execution-lease.js +161 -0
  169. package/dist/foundation/release/update.d.ts +12 -7
  170. package/dist/foundation/release/update.js +281 -196
  171. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
  172. package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
  173. package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
  174. package/dist/foundation/resident-tabs/bridge-client.js +321 -0
  175. package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
  176. package/dist/foundation/resident-tabs/doctor.js +166 -0
  177. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
  178. package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
  179. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
  180. package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
  181. package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
  182. package/dist/foundation/resident-tabs/fault-injection.js +26 -0
  183. package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
  184. package/dist/foundation/resident-tabs/fixture-control.js +35 -0
  185. package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
  186. package/dist/foundation/resident-tabs/host-entry.js +17 -0
  187. package/dist/foundation/resident-tabs/index.d.ts +12 -0
  188. package/dist/foundation/resident-tabs/index.js +6 -0
  189. package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
  190. package/dist/foundation/resident-tabs/maintenance.js +75 -0
  191. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
  192. package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
  193. package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
  194. package/dist/foundation/resident-tabs/progress-observation.js +150 -0
  195. package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
  196. package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
  197. package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
  198. package/dist/foundation/resident-tabs/protocol.js +195 -0
  199. package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
  200. package/dist/foundation/resident-tabs/recovery.js +205 -0
  201. package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
  202. package/dist/foundation/resident-tabs/release-holds.js +75 -0
  203. package/dist/foundation/resident-tabs/routes.d.ts +5 -0
  204. package/dist/foundation/resident-tabs/routes.js +5 -0
  205. package/dist/foundation/resident-tabs/routing.d.ts +11 -0
  206. package/dist/foundation/resident-tabs/routing.js +10 -0
  207. package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
  208. package/dist/foundation/resident-tabs/session-sync.js +37 -0
  209. package/dist/foundation/resident-tabs/settings.d.ts +12 -0
  210. package/dist/foundation/resident-tabs/settings.js +58 -0
  211. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
  212. package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
  213. package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
  214. package/dist/foundation/resident-tabs/zip-archive.js +56 -0
  215. package/dist/foundation/session-writer-lock/index.d.ts +30 -0
  216. package/dist/foundation/session-writer-lock/index.js +203 -0
  217. package/dist/foundation/startup/startup-descriptor.js +2 -2
  218. package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
  219. package/dist/foundation/terminal-cleanup/index.js +1 -1
  220. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
  221. package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
  222. package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
  223. package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
  224. package/dist/integrations/pi/components/modal-frame.js +48 -9
  225. package/dist/integrations/pi/components/models-dialog.js +4 -52
  226. package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
  227. package/dist/integrations/pi/components/owned-editor-ux.js +138 -11
  228. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
  229. package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
  230. package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
  231. package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
  232. package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
  233. package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
  234. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  235. package/dist/integrations/pi/components/shell-footer-status.js +21 -5
  236. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  237. package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
  238. package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
  239. package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
  240. package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
  241. package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
  242. package/dist/integrations/pi/components/skills-dialog.js +2 -2
  243. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  244. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
  245. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  246. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  247. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  248. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
  249. package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
  250. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  251. package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
  252. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  253. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
  254. package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
  255. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  256. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
  257. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
  258. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
  259. package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
  260. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
  261. package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
  262. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  263. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  264. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
  265. package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
  266. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  267. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  268. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
  269. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
  270. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
  271. package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
  272. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
  273. package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
  274. package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
  275. package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
  276. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
  277. package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
  278. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  279. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  280. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  281. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  282. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  283. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  284. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  285. package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
  286. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  287. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
  288. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
  289. package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
  290. package/dist/integrations/pi/engine/adapter.d.ts +5 -77
  291. package/dist/integrations/pi/engine/adapter.js +95 -394
  292. package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
  293. package/dist/integrations/pi/engine/command-dispatch.js +57 -0
  294. package/dist/integrations/pi/engine/host.js +2 -2
  295. package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
  296. package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
  297. package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
  298. package/dist/integrations/pi/engine/ports.d.ts +56 -0
  299. package/dist/integrations/pi/engine/ports.js +93 -0
  300. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
  301. package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
  302. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  303. package/dist/integrations/pi/engine/runtime-integration.js +102 -29
  304. package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
  305. package/dist/integrations/pi/engine/session-runtime.js +13 -5
  306. package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
  307. package/dist/integrations/pi/engine/session-selection.js +45 -9
  308. package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
  309. package/dist/integrations/pi/engine/settings-bridge.js +15 -0
  310. package/dist/integrations/pi/engine/settings-port.js +11 -15
  311. package/dist/integrations/pi/engine/view-state.d.ts +42 -0
  312. package/dist/integrations/pi/engine/view-state.js +126 -0
  313. package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
  314. package/dist/integrations/pi/engine/workflow-runner.js +74 -5
  315. package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
  316. package/dist/integrations/pi/engine/workflow-support.js +36 -0
  317. package/dist/integrations/pi/engine/workflows.d.ts +3 -1
  318. package/dist/integrations/pi/engine/workflows.js +1 -0
  319. package/dist/integrations/pi/startup-public.js +257 -310
  320. package/dist/integrations/pi/startup-public.manifest.json +564 -440
  321. package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
  322. package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
  323. package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
  324. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
  325. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
  326. package/dist/native/darwin-arm64/manifest.json +10 -7
  327. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  328. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
  329. package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
  330. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  331. package/dist/native/darwin-x64/manifest.json +23 -0
  332. package/dist/native/darwin-x64/process-guardian.node +0 -0
  333. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
  334. package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
  335. package/dist/native/darwin-x64/terminal-host.node +0 -0
  336. package/dist/native/linux-x64/manifest.json +10 -7
  337. package/dist/native/linux-x64/process-guardian.node +0 -0
  338. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
  339. package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
  340. package/dist/native/linux-x64/terminal-host.node +0 -0
  341. package/dist/native/win32-x64/manifest.json +10 -7
  342. package/dist/native/win32-x64/process-guardian.node +0 -0
  343. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
  344. package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
  345. package/dist/native/win32-x64/terminal-host.node +0 -0
  346. package/dist/product-identity.d.ts +3 -3
  347. package/dist/product-identity.js +4 -4
  348. package/dist/product-identity.json +16 -2
  349. package/dist/runtime-payload-inventory.json +6330 -6677
  350. package/dist/ui/apps/host.d.ts +2 -0
  351. package/dist/ui/apps/host.js +7 -1
  352. package/dist/ui/components/dialog-panel.d.ts +17 -8
  353. package/dist/ui/components/dialog-panel.js +117 -41
  354. package/dist/ui/components/index.d.ts +5 -5
  355. package/dist/ui/components/index.js +4 -4
  356. package/dist/ui/components/line-input.d.ts +4 -1
  357. package/dist/ui/components/line-input.js +3 -1
  358. package/dist/ui/components/prompt-input.d.ts +11 -8
  359. package/dist/ui/components/prompt-input.js +15 -13
  360. package/dist/ui/components/scrollbar.d.ts +1 -1
  361. package/dist/ui/components/scrollbar.js +1 -1
  362. package/dist/ui/components/selection-copy.d.ts +3 -3
  363. package/dist/ui/components/selection-copy.js +16 -1
  364. package/dist/ui/components/spans.js +2 -2
  365. package/dist/ui/components/submitted-prompt.d.ts +9 -6
  366. package/dist/ui/components/submitted-prompt.js +20 -12
  367. package/dist/ui/components/surface.js +4 -2
  368. package/dist/ui/components/text-selection.d.ts +1 -2
  369. package/dist/ui/components/text-selection.js +5 -2
  370. package/dist/ui/components/text.d.ts +3 -6
  371. package/dist/ui/components/text.js +6 -8
  372. package/dist/ui/components/transcript-viewport.d.ts +9 -2
  373. package/dist/ui/components/transcript-viewport.js +179 -58
  374. package/dist/ui/settings/declarations.d.ts +90 -16
  375. package/dist/ui/settings/declarations.js +67 -14
  376. package/dist/ui/settings/early-accent.d.ts +81 -0
  377. package/dist/ui/settings/early-accent.js +50 -0
  378. package/dist/ui/settings/index.d.ts +4 -2
  379. package/dist/ui/settings/index.js +2 -1
  380. package/dist/ui/settings/manager.d.ts +16 -3
  381. package/dist/ui/settings/manager.js +122 -33
  382. package/dist/ui/settings/migrations.d.ts +6 -0
  383. package/dist/ui/settings/migrations.js +73 -0
  384. package/dist/ui/settings/profile-document.d.ts +26 -0
  385. package/dist/ui/settings/profile-document.js +164 -0
  386. package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
  387. package/dist/ui/settings/progress-palette.generated.js +139 -0
  388. package/dist/ui/settings/sections.d.ts +4 -0
  389. package/dist/ui/settings/sections.js +9 -3
  390. package/docs/architecture/boundaries.md +24 -9
  391. package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
  392. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
  393. package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
  394. package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
  395. package/docs/architecture/internal-naming.md +3 -1
  396. package/docs/architecture/process-guardian-provenance.md +18 -10
  397. package/docs/architecture/project-structure.md +8 -0
  398. package/docs/architecture/resident-tabs-requirements.md +18 -0
  399. package/docs/architecture/resident-tabs.md +649 -0
  400. package/docs/architecture/response-copy-delivery.md +1 -1
  401. package/docs/architecture/terminal-host-proof-gate.md +2 -0
  402. package/docs/architecture/terminal-host-provenance.md +16 -4
  403. package/docs/architecture/tool-image-presentation.md +2 -1
  404. package/docs/architecture/toolchain.md +11 -9
  405. package/docs/ci-release-runbook.md +14 -7
  406. package/docs/features/launch-profiles.md +11 -8
  407. package/docs/features/prompt-history.md +41 -20
  408. package/docs/manual-resident-tabs-acceptance.md +51 -0
  409. package/docs/openspec-archive-automation.md +49 -22
  410. package/docs/validation.md +49 -9
  411. package/package.json +19 -6
  412. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
  413. package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
  414. package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
  415. package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
  416. package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
  417. package/dist/native/darwin-arm64/process-guardian +0 -0
  418. package/dist/native/linux-x64/process-guardian +0 -0
  419. package/dist/native/win32-x64/process-guardian.exe +0 -0
@@ -0,0 +1,28 @@
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;
@@ -0,0 +1,244 @@
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
+ };
@@ -3,7 +3,7 @@ export type UiAccentColor = "purple" | "blue" | "cyan" | "green" | "orange" | "p
3
3
  export { OWNED_UI_EXTENSION_CONTRACT_VERSION, OWNED_UI_EXTENSION_RENDER_CALLBACKS, OWNED_UI_EXTENSION_UI_CALLBACKS, OWNED_UI_EXTENSION_UI_PROPERTIES, assertOwnedUiExtensionUiPort, } from "./extension-ui.js";
4
4
  export type { OwnedUiExtensionAutocompleteItem, OwnedUiExtensionAutocompleteProvider, OwnedUiExtensionAutocompleteProviderFactory, OwnedUiExtensionAutocompleteSuggestions, OwnedUiExtensionComponent, OwnedUiExtensionComponentFactory, OwnedUiExtensionComponentFactoryContext, OwnedUiExtensionCustomFactory, OwnedUiExtensionCustomOptions, OwnedUiExtensionDialogOptions, OwnedUiExtensionEditorComponent, OwnedUiExtensionEditorFactory, OwnedUiExtensionEditorThemePort, OwnedUiExtensionEntryRenderInput, OwnedUiExtensionFooterDataPort, OwnedUiExtensionFooterFactory, OwnedUiExtensionInputListener, OwnedUiExtensionKeybindingsPort, OwnedUiExtensionMessageRenderInput, OwnedUiExtensionNotificationSeverity, OwnedUiExtensionOverlayAnchor, OwnedUiExtensionOverlayHandle, OwnedUiExtensionOverlayMargin, OwnedUiExtensionOverlayOptions, OwnedUiExtensionRenderCallback, OwnedUiExtensionRendererPort, OwnedUiExtensionRuntimePort, OwnedUiExtensionSelectListThemePort, OwnedUiExtensionSizeValue, OwnedUiExtensionTerminalPort, OwnedUiExtensionThemeBackground, OwnedUiExtensionThemeColor, OwnedUiExtensionThemeInfo, OwnedUiExtensionThemePort, OwnedUiExtensionToolRenderContext, OwnedUiExtensionUiCallback, OwnedUiExtensionUiPort, OwnedUiExtensionUiProperty, OwnedUiExtensionWidgetOptions, OwnedUiExtensionWidgetPlacement, OwnedUiExtensionWorkingIndicatorOptions, } from "./extension-ui.js";
5
5
  export { OWNED_UI_CONTRACT_VERSION } from "./model.js";
6
- export type { OwnedUiBackgroundSettingsPort, OwnedUiBackgroundStyle, OwnedUiBlockStatus, OwnedUiCommand, OwnedUiCommandOutcome, OwnedUiCorrelationId, OwnedUiCustomization, OwnedUiDiagnostics, OwnedUiDialog, OwnedUiEditorState, OwnedUiEntityId, OwnedUiEvent, OwnedUiFooterView, OwnedUiImageAttachment, OwnedUiLifecycle, OwnedUiModelInfo, OwnedUiOverlay, OwnedUiPromptSuggestionGeneratorPort, OwnedUiPromptSuggestionIdentity, OwnedUiPromptSuggestionReasoning, OwnedUiPromptSuggestionRequest, OwnedUiPromptSuggestionResult, OwnedUiPromptSuggestionState, OwnedUiQuitOutroSettings, OwnedUiQuitOutroSettingsPort, OwnedUiSessionId, OwnedUiSessionViewModel, OwnedUiSeverity, OwnedUiSlotId, OwnedUiSnapshot, OwnedUiStatusView, OwnedUiTerminalSurface, OwnedUiThinkingLevel, OwnedUiToolRendering, OwnedUiToolResultPart, OwnedUiToolState, OwnedUiTranscriptBlock, OwnedUiTranscriptBlockKind, OwnedUiTranscriptImageReference, OwnedUiUsageView, OwnedUiViewportSettings, OwnedUiViewportSettingsPort, } from "./model.js";
6
+ export type { OwnedUiBackgroundSettingsPort, OwnedUiBackgroundStyle, OwnedUiBlockStatus, OwnedUiCommand, OwnedUiCommandOutcome, OwnedUiCorrelationId, OwnedUiCustomization, OwnedUiDiagnostics, OwnedUiDialog, OwnedUiEditorState, OwnedUiEntityId, OwnedUiEvent, OwnedUiFooterView, OwnedUiImageAttachment, OwnedUiLifecycle, OwnedUiModelInfo, OwnedUiOverlay, OwnedUiPromptSuggestionGeneratorPort, OwnedUiPromptSuggestionIdentity, OwnedUiPromptSuggestionReasoning, OwnedUiPromptSuggestionRequest, OwnedUiPromptSuggestionResult, OwnedUiPromptSuggestionState, OwnedUiQuitOutroSettings, OwnedUiQuitOutroSettingsPort, OwnedUiSessionId, OwnedUiSessionViewModel, OwnedUiSeverity, OwnedUiSlotId, OwnedUiSnapshot, OwnedUiStatusView, OwnedUiTerminalSurface, OwnedUiThinkingLevel, OwnedUiTimeFormat, OwnedUiToolRendering, OwnedUiToolResultPart, OwnedUiToolState, OwnedUiTranscriptBlock, OwnedUiTranscriptBlockKind, OwnedUiTranscriptImageReference, OwnedUiUsageView, OwnedUiViewportSettings, OwnedUiViewportSettingsPort, } from "./model.js";
7
7
  export type { OwnedUiExtensionPort, OwnedUiSessionBackend, OwnedUiSessionCatalogPort, OwnedUiSessionFactory, OwnedUiSessionIdentityPort, OwnedUiSessionPort, OwnedUiSessionRequest, OwnedUiSessionSettingsPort, OwnedUiWorkflowPort, } from "./session-backend.js";
8
8
  export type { OwnedUiDialogHost, OwnedUiInputSurface, OwnedUiPresenterHost, OwnedUiSessionPresenter, OwnedUiSessionPresenters, OwnedUiShortcutDescription, OwnedUiTerminalHost, OwnedUiTranscriptRendererPort, } from "./session-presenters.js";
9
9
  export { OWNED_UI_HIDDEN_COMMAND_NAMES, OWNED_UI_MODELS_COMMAND_NAME, OWNED_UI_WORKFLOW_COMMAND_NAMES, } from "./session-workflows.js";
@@ -53,7 +53,10 @@ export interface OwnedUiPromptSuggestionGeneratorPort {
53
53
  generate(request: OwnedUiPromptSuggestionRequest): Promise<OwnedUiPromptSuggestionResult>;
54
54
  }
55
55
  export type OwnedUiThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
56
+ export type OwnedUiTimeFormat = "20:00" | "8:00 PM";
56
57
  export interface OwnedUiViewportSettings {
58
+ /** Omitted by older SDK callers; bare A1 composition always supplies the owned default. */
59
+ readonly timeFormat?: OwnedUiTimeFormat;
57
60
  readonly scrollbarAppearance: "auto" | "always" | "hidden";
58
61
  readonly scrollbarStyle: "thin" | "thick";
59
62
  /** normal is baseline; fast is 2x normal; high is normal plus fast. */
@@ -36,6 +36,9 @@ export interface OwnedUiSessionIdentityPort {
36
36
  /** Actual session replacements, excluding delivery-only invalidation of callbacks. */
37
37
  readonly sessionBindingGeneration: number;
38
38
  readonly disposed: boolean;
39
+ currentSessionFile(): string | null;
40
+ /** The durable conversation identity; unlike sessionId it survives agent process restart. */
41
+ currentHistorySessionId(): string | null;
39
42
  currentSessionResumeMetadata(): OwnedUiSessionResumeMetadata | null;
40
43
  }
41
44
  /** The session lifecycle, its view, its event stream, and command admission. */
@@ -49,6 +49,8 @@ export interface OwnedUiWorkflowRequest {
49
49
  readonly cwdOverride?: string;
50
50
  /** Cancellation for an owned operation surface such as `/share`. */
51
51
  readonly signal?: AbortSignal;
52
+ /** Progress label for that operation surface, e.g. when `/share` picks its upload destination. */
53
+ readonly onProgress?: (message: string) => void;
52
54
  readonly treeSummary?: {
53
55
  readonly summarize: boolean;
54
56
  readonly customInstructions?: string;
@@ -272,6 +274,7 @@ export interface OwnedUiSessionSettingsSnapshot {
272
274
  readonly autocompleteMaxVisible: number;
273
275
  readonly quietStartup: boolean | "header";
274
276
  readonly defaultProjectTrust: "ask" | "always" | "never";
277
+ readonly sessionShareDestination: "auto" | "gist" | "radius";
275
278
  readonly clearOnShrink: boolean;
276
279
  readonly showTerminalProgress: boolean;
277
280
  readonly tuiMode: "regular" | "fullscreen";
@@ -289,7 +292,7 @@ export type OwnedUiJsonValue = null | boolean | number | string | readonly Owned
289
292
  /** The layer that installs a setting's live effect. */
290
293
  export type OwnedUiSettingOwner = "agent" | "shell" | "terminal" | "startup" | "shutdown" | "installation";
291
294
  /** Engine settings whose live effect an owner may bind. */
292
- export type OwnedUiSessionSettingKey = "autoCompact" | "showImages" | "imageWidthCells" | "autoResizeImages" | "blockImages" | "enableSkillCommands" | "steeringMode" | "followUpMode" | "transport" | "httpIdleTimeoutMs" | "cacheWarmingMode" | "modelThinkingLevels" | "theme" | "hideThinkingBlock" | "mermaidRenderingMode" | "showCacheMissNotices" | "collapseChangelog" | "enableInstallTelemetry" | "quietStartup" | "defaultProjectTrust" | "doubleEscapeAction" | "treeFilterMode" | "showHardwareCursor" | "editorPaddingX" | "outputPad" | "autocompleteMaxVisible" | "clearOnShrink" | "showTerminalProgress" | "tuiMode" | "fullscreenExitOutput" | "fullscreenScrollbar" | "fullscreenCopyOnSelect" | "fullscreenWheelScrollLines" | "warnings";
295
+ export type OwnedUiSessionSettingKey = "autoCompact" | "showImages" | "imageWidthCells" | "autoResizeImages" | "blockImages" | "enableSkillCommands" | "steeringMode" | "followUpMode" | "transport" | "httpIdleTimeoutMs" | "cacheWarmingMode" | "modelThinkingLevels" | "theme" | "hideThinkingBlock" | "mermaidRenderingMode" | "showCacheMissNotices" | "collapseChangelog" | "enableInstallTelemetry" | "quietStartup" | "defaultProjectTrust" | "sessionShareDestination" | "doubleEscapeAction" | "treeFilterMode" | "showHardwareCursor" | "editorPaddingX" | "outputPad" | "autocompleteMaxVisible" | "clearOnShrink" | "showTerminalProgress" | "tuiMode" | "fullscreenExitOutput" | "fullscreenScrollbar" | "fullscreenCopyOnSelect" | "fullscreenWheelScrollLines" | "warnings";
293
296
  export interface OwnedUiSettingEffectHandler {
294
297
  /** Install one value in the active owner. Handlers must be idempotent and reversible. */
295
298
  apply(value: OwnedUiJsonValue): void | Promise<void>;
@@ -334,9 +337,13 @@ export interface OwnedUiVisualExtensionSupport {
334
337
  readonly renderCallbacks: typeof OWNED_UI_EXTENSION_RENDER_CALLBACKS;
335
338
  readonly diagnostic: string;
336
339
  }
337
- /** A newer release found by the startup check. */
338
- export interface OwnedUiReleaseUpdate {
340
+ /** A newer release found by the startup check, or one installed for the next restart. */
341
+ export type OwnedUiReleaseUpdate = {
342
+ readonly status?: "available";
339
343
  readonly version: string;
340
344
  readonly command: string;
341
345
  readonly changelogUrl: string | null;
342
- }
346
+ } | {
347
+ readonly status: "installed";
348
+ readonly version: string;
349
+ };
@@ -14,6 +14,17 @@ export declare const DIALOG_BACK_SHORTCUT_HINT: Readonly<{
14
14
  key: string;
15
15
  action: string;
16
16
  }>;
17
+ /** Global inset inherited by every semantic row inside an A1-owned dialog frame. */
18
+ export declare const DIALOG_CONTENT_PADDING_X = 1;
19
+ export interface DialogFrameGeometry {
20
+ readonly frameWidth: number;
21
+ readonly contentPaddingX: number;
22
+ readonly contentWidth: number;
23
+ }
24
+ /** Shared full-width-rule/content-width geometry for string and component dialog renderers. */
25
+ export declare function dialogFrameGeometry(width: number): DialogFrameGeometry;
26
+ /** Injects a semantic row into the frame's global content inset. */
27
+ export declare function insetDialogContent(row: string, geometry: DialogFrameGeometry): string;
17
28
  export interface ShortcutHintRoles {
18
29
  key(label: string): string;
19
30
  action(name: string): string;
@@ -2,6 +2,18 @@
2
2
  export const DIALOG_CLOSE_SHORTCUT_HINT = Object.freeze({ key: "esc", action: "close" });
3
3
  /** Canonical return guidance for a nested step within a dialog surface. */
4
4
  export const DIALOG_BACK_SHORTCUT_HINT = Object.freeze({ key: "esc", action: "back" });
5
+ /** Global inset inherited by every semantic row inside an A1-owned dialog frame. */
6
+ export const DIALOG_CONTENT_PADDING_X = 1;
7
+ /** Shared full-width-rule/content-width geometry for string and component dialog renderers. */
8
+ export function dialogFrameGeometry(width) {
9
+ const frameWidth = Math.max(0, width);
10
+ const contentPaddingX = Math.min(DIALOG_CONTENT_PADDING_X, frameWidth);
11
+ return { frameWidth, contentPaddingX, contentWidth: frameWidth - contentPaddingX };
12
+ }
13
+ /** Injects a semantic row into the frame's global content inset. */
14
+ export function insetDialogContent(row, geometry) {
15
+ return `${" ".repeat(geometry.contentPaddingX)}${row}`;
16
+ }
5
17
  const SHORTCUT_KEY_NAMES = Object.freeze({
6
18
  alt: "Alt", backspace: "Backspace", cmd: "Cmd", ctrl: "Ctrl", delete: "Delete", down: "Down", end: "End",
7
19
  enter: "Enter", esc: "Esc", escape: "Escape", home: "Home", insert: "Insert", left: "Left", meta: "Meta",
@@ -19,6 +19,11 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
19
19
  ? join(developmentRoot, "config")
20
20
  : join(checkoutRoot, "config");
21
21
  const dataDir = resolve(source[PRODUCT_IDENTITY.environment.dataDir] ?? join(developmentRoot, "data"));
22
+ // Rationale: solo processes keep isolated control state but must see the same history
23
+ // after selecting Shared; use a checkout-wide root across rebuilds unless overridden.
24
+ const historyDataDir = resolve(source[PRODUCT_IDENTITY.environment.developmentHistoryDataDir]
25
+ ?? source[PRODUCT_IDENTITY.environment.dataDir]
26
+ ?? (selectedDevelopmentRoot ? dataDir : join(checkoutRoot, "data")));
22
27
  return {
23
28
  checkoutId,
24
29
  releaseId,
@@ -27,6 +32,7 @@ export function resolveDevelopmentLaunchEnvironment(canonicalPackageRoot, releas
27
32
  environment: {
28
33
  ...source,
29
34
  [PRODUCT_IDENTITY.environment.developmentInstanceId]: instanceId,
35
+ [PRODUCT_IDENTITY.environment.developmentHistoryDataDir]: historyDataDir,
30
36
  [PRODUCT_IDENTITY.environment.configDir]: resolve(source[PRODUCT_IDENTITY.environment.configDir] ?? persistentConfigDir),
31
37
  [PRODUCT_IDENTITY.environment.dataDir]: dataDir,
32
38
  [PRODUCT_IDENTITY.environment.runtimeDir]: resolve(source[PRODUCT_IDENTITY.environment.runtimeDir] ?? join(developmentRoot, "runtime")),
@@ -3,7 +3,7 @@ export type { DevelopmentLaunchEnvironment } from "./development-launch.js";
3
3
  export { PI_PROFILE_RESOURCE_DIRECTORIES, initializeProductProfile } from "./initialize-profile.js";
4
4
  export type { InitializedProfile } from "./initialize-profile.js";
5
5
  export { interactiveLaunchIntent, parseSessionSelection } from "./intent.js";
6
- export type { InteractiveLaunchIntent, LaunchIntent, LaunchProfileId, SessionSelection } from "./intent.js";
6
+ export type { InteractiveLaunchIntent, InteractiveLaunchMode, LaunchIntent, LaunchProfileId, SessionSelection } from "./intent.js";
7
7
  export { configurationRootForProfile, resolveLaunchProfilePaths, resolvePromptHistoryDataDir } from "./profile-paths.js";
8
8
  export type { LaunchProfilePathOptions, LaunchProfilePaths } from "./profile-paths.js";
9
9
  export { prepareInteractiveLaunch } from "./prepare-launch.js";
@@ -3,10 +3,12 @@ import type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
3
3
  export { parseSessionSelection } from "../../foundation/lifecycle/index.js";
4
4
  export type { SessionSelection } from "../../foundation/lifecycle/index.js";
5
5
  export type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
6
+ export type InteractiveLaunchMode = "tabs" | "solo";
6
7
  export interface InteractiveLaunchIntent {
7
8
  readonly kind: "interactive";
8
9
  readonly profileId: LaunchProfileId;
10
+ readonly launchMode: InteractiveLaunchMode;
9
11
  readonly sessionSelection?: SessionSelection;
10
12
  }
11
13
  export type LaunchIntent = InteractiveLaunchIntent;
12
- export declare function interactiveLaunchIntent(profileId: LaunchProfileId, sessionSelection?: SessionSelection): InteractiveLaunchIntent;
14
+ export declare function interactiveLaunchIntent(profileId: LaunchProfileId, sessionSelection?: SessionSelection, launchMode?: InteractiveLaunchMode): InteractiveLaunchIntent;
@@ -1,8 +1,11 @@
1
1
  import { sessionSelectionArguments } from "../../foundation/lifecycle/index.js";
2
2
  export { parseSessionSelection } from "../../foundation/lifecycle/index.js";
3
- export function interactiveLaunchIntent(profileId, sessionSelection) {
4
- if (sessionSelection !== undefined && profileId !== "a1")
5
- throw new Error("session selection requires the normal A1 profile");
3
+ export function interactiveLaunchIntent(profileId, sessionSelection, launchMode = profileId === "a1" ? "tabs" : "solo") {
4
+ if (sessionSelection !== undefined && (profileId !== "a1" || launchMode === "solo")) {
5
+ throw new Error("session selection requires the normal tabbed A1 launch");
6
+ }
7
+ if (profileId === "pi" && launchMode !== "solo")
8
+ throw new Error("the Pi comparison launch is always solo");
6
9
  sessionSelectionArguments(sessionSelection);
7
- return Object.freeze({ kind: "interactive", profileId, ...(sessionSelection === undefined ? {} : { sessionSelection }) });
10
+ return Object.freeze({ kind: "interactive", profileId, launchMode, ...(sessionSelection === undefined ? {} : { sessionSelection }) });
8
11
  }
@@ -18,6 +18,10 @@ export function resolveLaunchProfilePaths(options = {}) {
18
18
  export function resolvePromptHistoryDataDir(options = {}) {
19
19
  const environment = options.environment ?? process.env;
20
20
  const platform = options.platform ?? process.platform;
21
+ const developmentHistoryDataDir = environment[PRODUCT_IDENTITY.environment.developmentHistoryDataDir];
22
+ if (developmentHistoryDataDir !== undefined) {
23
+ return resolveProductPaths({ ...environment, [PRODUCT_IDENTITY.environment.dataDir]: developmentHistoryDataDir }, platform).dataDir;
24
+ }
21
25
  if (environment[PRODUCT_IDENTITY.environment.dataDir] !== undefined) {
22
26
  return resolveProductPaths(environment, platform).dataDir;
23
27
  }
@@ -0,0 +1,22 @@
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
+ /**
10
+ * The plus-menu dialog: every tab kind with `●` when `+` offers it and `○` when not, filtered by typed
11
+ * text. It owns only its filter and the row in hand; the enabled record and its saving stay with the
12
+ * Settings screen that opened it.
13
+ */
14
+ export declare class PlusMenuDialog {
15
+ #private;
16
+ constructor(kinds: readonly PlusMenuKind[]);
17
+ /** The kinds the filter keeps, in kind order. */
18
+ shown(): readonly PlusMenuKind[];
19
+ /** Handles one key by its resolved name; `toggle` flips a kind. Returns whether the dialog closed. */
20
+ handle(name: string, data: string, toggle: (key: string) => void): "close" | "handled";
21
+ lines(enabled: Readonly<Record<string, boolean | string>>, width: number, theme: UiTheme): readonly string[];
22
+ }
@@ -0,0 +1,84 @@
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 TITLE = "Plus Menu";
5
+ const DESCRIPTION = "Choose what the + button in the tab bar can add.";
6
+ const HINTS = [
7
+ { key: "Type", action: "search" },
8
+ { key: "↑↓", action: "navigate" },
9
+ { key: "Space", action: "toggle" },
10
+ { key: "esc", action: "close" },
11
+ ];
12
+ const PADDING_X = 2;
13
+ /**
14
+ * The plus-menu dialog: every tab kind with `●` when `+` offers it and `○` when not, filtered by typed
15
+ * text. It owns only its filter and the row in hand; the enabled record and its saving stay with the
16
+ * Settings screen that opened it.
17
+ */
18
+ export class PlusMenuDialog {
19
+ #kinds;
20
+ #filter = new LineInput("");
21
+ #index = 0;
22
+ constructor(kinds) {
23
+ this.#kinds = kinds;
24
+ }
25
+ /** The kinds the filter keeps, in kind order. */
26
+ shown() {
27
+ const needle = this.#filter.value.trim().toLowerCase();
28
+ return this.#kinds.filter(kind => needle.length === 0 || kind.label.toLowerCase().includes(needle));
29
+ }
30
+ /** Handles one key by its resolved name; `toggle` flips a kind. Returns whether the dialog closed. */
31
+ handle(name, data, toggle) {
32
+ const shown = this.shown();
33
+ if (name === "escape")
34
+ return "close";
35
+ if (name === "up" || name === "down") {
36
+ this.#index = Math.min(Math.max(0, shown.length - 1), Math.max(0, this.#index + (name === "down" ? 1 : -1)));
37
+ return "handled";
38
+ }
39
+ if (name === "space") {
40
+ const kind = shown[this.#index];
41
+ if (kind !== undefined)
42
+ toggle(kind.key);
43
+ return "handled";
44
+ }
45
+ handleLineInputKey(this.#filter, data);
46
+ this.#index = 0;
47
+ return "handled";
48
+ }
49
+ lines(enabled, width, theme) {
50
+ const frameWidth = Math.max(0, width);
51
+ const left = Math.min(PADDING_X, frameWidth);
52
+ const right = Math.min(PADDING_X, frameWidth - left);
53
+ const contentWidth = Math.max(0, frameWidth - left - right);
54
+ const blank = " ".repeat(frameWidth);
55
+ const row = (painted, selected = false) => {
56
+ const content = padToWidth(truncateToWidth(painted, contentWidth), contentWidth);
57
+ const rightPadding = " ".repeat(right);
58
+ return `${" ".repeat(left)}${selected ? theme.highlight(content) : content}${selected ? theme.panel(rightPadding) : rightPadding}`;
59
+ };
60
+ const shown = this.shown();
61
+ const index = Math.min(this.#index, Math.max(0, shown.length - 1));
62
+ const rows = shown.length === 0
63
+ ? [row(theme.fg("dim", "No tabs match"))]
64
+ : shown.map((kind, position) => {
65
+ const selected = position === index;
66
+ const cursor = selected ? "→ " : " ";
67
+ const marker = enabled[kind.key] === true ? "●" : "○";
68
+ const content = `${selected ? theme.fg("accent", cursor) : cursor}${theme.fg("text", marker)} ${theme.fg("text", kind.label)}`;
69
+ return row(content, selected);
70
+ });
71
+ return [
72
+ blank,
73
+ row(theme.bold(theme.fg("accent", TITLE))),
74
+ row(theme.fg("dim", DESCRIPTION)),
75
+ blank,
76
+ ...renderInputRow(this.#filter, contentWidth, { ruled: false, promptGlyph: "> ", theme }).lines.map(line => row(line)),
77
+ blank,
78
+ ...rows,
79
+ blank,
80
+ row(renderShortcutHintsWithClose(HINTS, theme, contentWidth)),
81
+ blank,
82
+ ];
83
+ }
84
+ }
@@ -1,2 +1,2 @@
1
1
  /** Fixed startup-safe rendering only; project-derived presentation is forbidden before trust resolves. */
2
- export declare function renderProjectTrustDialog(cwd: string, options: readonly string[], selected: number, terminalWidth: number, terminalRows: number): readonly string[];
2
+ export declare function renderProjectTrustDialog(cwd: string, options: readonly string[], selected: number, terminalWidth: number, terminalRows: number, accent: string, border: string): readonly string[];
@@ -1,6 +1,4 @@
1
1
  import { DIALOG_CLOSE_SHORTCUT_HINT, displayShortcutKeyLabel } from "../../contracts/presentation/index.js";
2
- const ACCENT = "\u001b[38;2;167;152;215m";
3
- const BORDER = "\u001b[38;2;97;133;204m";
4
2
  const MUTED = "\u001b[38;2;157;165;169m";
5
3
  const DIM = "\u001b[38;2;126;136;142m";
6
4
  const RESET_FG = "\u001b[39m";
@@ -8,12 +6,12 @@ const BOLD = "\u001b[1m";
8
6
  const RESET_BOLD = "\u001b[22m";
9
7
  const EXPLANATION = "This allows to load project settings and resources, install missing project packages, and execute project extensions.";
10
8
  /** Fixed startup-safe rendering only; project-derived presentation is forbidden before trust resolves. */
11
- export function renderProjectTrustDialog(cwd, options, selected, terminalWidth, terminalRows) {
9
+ export function renderProjectTrustDialog(cwd, options, selected, terminalWidth, terminalRows, accent, border) {
12
10
  const width = Math.max(1, terminalWidth);
13
- const rule = `${BORDER}${"─".repeat(width)}${RESET_FG}`;
14
- const title = ` ${BOLD}${ACCENT}Trust project folder?${RESET_FG}${RESET_BOLD}`;
11
+ const rule = `${border}${"─".repeat(width)}${RESET_FG}`;
12
+ const title = ` ${BOLD}${accent}Trust project folder?${RESET_FG}${RESET_BOLD}`;
15
13
  const path = ` ${MUTED}${sanitize(cwd)}${RESET_FG}`;
16
- const choices = options.map((label, index) => choice(label, selected === index));
14
+ const choices = options.map((label, index) => choice(label, selected === index, accent));
17
15
  const closeKey = displayShortcutKeyLabel(DIALOG_CLOSE_SHORTCUT_HINT.key);
18
16
  const hint = ` ${DIM}↑↓${MUTED} navigate ${DIM}Enter${MUTED} select ${DIM}${closeKey}${MUTED} ${DIALOG_CLOSE_SHORTCUT_HINT.action}${RESET_FG}`;
19
17
  const explanation = wrap(EXPLANATION, Math.max(1, width - 2)).map(line => ` ${line}`);
@@ -35,8 +33,8 @@ export function renderProjectTrustDialog(cwd, options, selected, terminalWidth,
35
33
  return choiceWindow(choices, selected, 2);
36
34
  return [choices[selected] ?? choices[0] ?? ""];
37
35
  }
38
- function choice(label, selected) {
39
- return selected ? ` ${ACCENT}→ ${label}${RESET_FG}` : ` ${label}`;
36
+ function choice(label, selected, accent) {
37
+ return selected ? ` ${accent}→ ${label}${RESET_FG}` : ` ${label}`;
40
38
  }
41
39
  function choiceWindow(choices, selected, capacity) {
42
40
  const start = Math.min(Math.max(0, selected - Math.floor(capacity / 2)), Math.max(0, choices.length - capacity));
@@ -22,6 +22,7 @@ export interface ConsoleProjectTrustPromptOptions {
22
22
  readonly rows?: number;
23
23
  };
24
24
  readonly presentation?: "bare" | "comparison";
25
+ readonly environment?: NodeJS.ProcessEnv;
25
26
  }
26
27
  /** Fixed pre-resource selector; no project resource is available. */
27
28
  export declare function createConsoleProjectTrustPrompt(options?: ConsoleProjectTrustPromptOptions): OwnedProjectTrustPrompt;