@timurproko/a1 0.2.6-dev.736 → 0.2.7-dev.1221

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 (423) 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 +196 -908
  37. package/dist/app/session-shell/session-shell.d.ts +3 -8
  38. package/dist/app/session-shell/session-shell.js +324 -835
  39. package/dist/app/session-shell/session-viewport-controller.d.ts +2 -2
  40. package/dist/app/session-shell/session-viewport-controller.js +29 -15
  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 +102 -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 +205 -153
  70. package/dist/composition/resident-tab-bridge.d.ts +25 -0
  71. package/dist/composition/resident-tab-bridge.js +180 -0
  72. package/dist/composition/session-backend.d.ts +19 -0
  73. package/dist/composition/session-backend.js +1 -0
  74. package/dist/composition/session-runtime-registry.d.ts +20 -0
  75. package/dist/composition/session-runtime-registry.js +85 -0
  76. package/dist/composition/settings-route-host.d.ts +16 -1
  77. package/dist/composition/settings-route-host.js +29 -10
  78. package/dist/composition/settings-search-input.d.ts +9 -0
  79. package/dist/composition/settings-search-input.js +58 -0
  80. package/dist/composition/startup-route.d.ts +32 -0
  81. package/dist/composition/startup-route.js +72 -0
  82. package/dist/composition/utility-tab.d.ts +28 -0
  83. package/dist/composition/utility-tab.js +242 -0
  84. package/dist/contracts/owned-ui/index.d.ts +1 -1
  85. package/dist/contracts/owned-ui/model.d.ts +3 -0
  86. package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
  87. package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
  88. package/dist/contracts/presentation/index.d.ts +11 -0
  89. package/dist/contracts/presentation/index.js +12 -0
  90. package/dist/features/launch/development-launch.js +6 -0
  91. package/dist/features/launch/index.d.ts +1 -1
  92. package/dist/features/launch/intent.d.ts +3 -1
  93. package/dist/features/launch/intent.js +7 -4
  94. package/dist/features/launch/profile-paths.js +4 -0
  95. package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
  96. package/dist/features/owned-ui/plus-menu-dialog.js +76 -0
  97. package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
  98. package/dist/features/owned-ui/project-trust-dialog.js +6 -8
  99. package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
  100. package/dist/features/owned-ui/project-trust-prompt.js +7 -3
  101. package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
  102. package/dist/features/owned-ui/reference-screen-app.js +12 -2
  103. package/dist/features/owned-ui/resources/release-notes.json +4 -0
  104. package/dist/features/owned-ui/settings-app.d.ts +12 -2
  105. package/dist/features/owned-ui/settings-app.js +119 -84
  106. package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
  107. package/dist/features/owned-ui/settings-search-input.js +1 -0
  108. package/dist/features/prompt-history/index.d.ts +1 -1
  109. package/dist/features/prompt-history/paths.d.ts +2 -1
  110. package/dist/features/prompt-history/paths.js +10 -2
  111. package/dist/features/prompt-history/service.d.ts +5 -0
  112. package/dist/features/prompt-history/service.js +1 -1
  113. package/dist/features/resident-tab/auto-name.d.ts +11 -0
  114. package/dist/features/resident-tab/auto-name.js +44 -0
  115. package/dist/features/resident-tab/index.d.ts +5 -0
  116. package/dist/features/resident-tab/index.js +7 -0
  117. package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
  118. package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
  119. package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
  120. package/dist/features/resident-tab/shortcut-declarations.js +26 -0
  121. package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
  122. package/dist/features/resident-tab/shortcut-projection.js +64 -0
  123. package/dist/features/resident-tab/status-deriver.d.ts +10 -0
  124. package/dist/features/resident-tab/status-deriver.js +12 -0
  125. package/dist/foundation/launch-context/index.d.ts +12 -0
  126. package/dist/foundation/launch-context/index.js +26 -0
  127. package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
  128. package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
  129. package/dist/foundation/launch-guardian/main.d.ts +7 -1
  130. package/dist/foundation/launch-guardian/main.js +60 -7
  131. package/dist/foundation/lifecycle/session-repository-context.js +16 -2
  132. package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
  133. package/dist/foundation/process-containment/addon-containment.js +139 -0
  134. package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
  135. package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
  136. package/dist/foundation/process-containment/addon.d.ts +42 -0
  137. package/dist/foundation/process-containment/addon.js +57 -0
  138. package/dist/foundation/process-containment/artifact.d.ts +1 -1
  139. package/dist/foundation/process-containment/artifact.js +6 -5
  140. package/dist/foundation/process-containment/contracts.d.ts +2 -0
  141. package/dist/foundation/process-containment/index.d.ts +4 -4
  142. package/dist/foundation/process-containment/index.js +3 -3
  143. package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
  144. package/dist/foundation/process-containment/native-process-inspector.js +10 -10
  145. package/dist/foundation/release/automatic-update.d.ts +37 -0
  146. package/dist/foundation/release/automatic-update.js +265 -0
  147. package/dist/foundation/release/bootstrap.d.ts +7 -9
  148. package/dist/foundation/release/bootstrap.js +107 -24
  149. package/dist/foundation/release/cohort-state.d.ts +1 -1
  150. package/dist/foundation/release/cohort-state.js +6 -3
  151. package/dist/foundation/release/dependency-certification.js +54 -19
  152. package/dist/foundation/release/early-accent.d.ts +12 -0
  153. package/dist/foundation/release/early-accent.js +59 -0
  154. package/dist/foundation/release/index.d.ts +2 -2
  155. package/dist/foundation/release/index.js +2 -2
  156. package/dist/foundation/release/latest-release.d.ts +24 -2
  157. package/dist/foundation/release/latest-release.js +51 -1
  158. package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
  159. package/dist/foundation/release/progress-palette.generated.js +137 -3
  160. package/dist/foundation/release/release-gc.d.ts +3 -0
  161. package/dist/foundation/release/release-gc.js +59 -8
  162. package/dist/foundation/release/release-store.d.ts +12 -0
  163. package/dist/foundation/release/release-store.js +124 -2
  164. package/dist/foundation/release/update-execution-lease.d.ts +48 -0
  165. package/dist/foundation/release/update-execution-lease.js +161 -0
  166. package/dist/foundation/release/update.d.ts +12 -7
  167. package/dist/foundation/release/update.js +281 -196
  168. package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
  169. package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
  170. package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
  171. package/dist/foundation/resident-tabs/bridge-client.js +321 -0
  172. package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
  173. package/dist/foundation/resident-tabs/doctor.js +166 -0
  174. package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
  175. package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
  176. package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
  177. package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
  178. package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
  179. package/dist/foundation/resident-tabs/fault-injection.js +26 -0
  180. package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
  181. package/dist/foundation/resident-tabs/fixture-control.js +35 -0
  182. package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
  183. package/dist/foundation/resident-tabs/host-entry.js +17 -0
  184. package/dist/foundation/resident-tabs/index.d.ts +12 -0
  185. package/dist/foundation/resident-tabs/index.js +6 -0
  186. package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
  187. package/dist/foundation/resident-tabs/maintenance.js +75 -0
  188. package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
  189. package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
  190. package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
  191. package/dist/foundation/resident-tabs/progress-observation.js +150 -0
  192. package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
  193. package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
  194. package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
  195. package/dist/foundation/resident-tabs/protocol.js +195 -0
  196. package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
  197. package/dist/foundation/resident-tabs/recovery.js +205 -0
  198. package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
  199. package/dist/foundation/resident-tabs/release-holds.js +75 -0
  200. package/dist/foundation/resident-tabs/routes.d.ts +5 -0
  201. package/dist/foundation/resident-tabs/routes.js +5 -0
  202. package/dist/foundation/resident-tabs/routing.d.ts +11 -0
  203. package/dist/foundation/resident-tabs/routing.js +10 -0
  204. package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
  205. package/dist/foundation/resident-tabs/session-sync.js +37 -0
  206. package/dist/foundation/resident-tabs/settings.d.ts +12 -0
  207. package/dist/foundation/resident-tabs/settings.js +58 -0
  208. package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
  209. package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
  210. package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
  211. package/dist/foundation/resident-tabs/zip-archive.js +56 -0
  212. package/dist/foundation/session-writer-lock/index.d.ts +30 -0
  213. package/dist/foundation/session-writer-lock/index.js +203 -0
  214. package/dist/foundation/startup/startup-descriptor.js +2 -2
  215. package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
  216. package/dist/foundation/terminal-cleanup/index.js +1 -1
  217. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
  218. package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
  219. package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
  220. package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
  221. package/dist/integrations/pi/components/modal-frame.js +48 -9
  222. package/dist/integrations/pi/components/models-dialog.js +4 -52
  223. package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
  224. package/dist/integrations/pi/components/owned-editor-ux.js +90 -6
  225. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
  226. package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
  227. package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
  228. package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
  229. package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
  230. package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
  231. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  232. package/dist/integrations/pi/components/shell-footer-status.js +21 -5
  233. package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
  234. package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
  235. package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
  236. package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
  237. package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
  238. package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
  239. package/dist/integrations/pi/components/skills-dialog.js +2 -2
  240. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
  241. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
  242. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
  243. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
  244. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
  245. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
  246. package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
  247. package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
  248. package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
  249. package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
  250. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
  251. package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
  252. package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
  253. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
  254. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
  255. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
  256. package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
  257. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
  258. package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
  259. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
  260. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
  261. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
  262. package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
  263. package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
  264. package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
  265. package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
  266. package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
  267. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
  268. package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
  269. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
  270. package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
  271. package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
  272. package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
  273. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
  274. package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
  275. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
  276. package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
  277. package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
  278. package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
  279. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
  280. package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
  281. package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
  282. package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
  283. package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
  284. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
  285. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
  286. package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
  287. package/dist/integrations/pi/engine/adapter.d.ts +5 -77
  288. package/dist/integrations/pi/engine/adapter.js +95 -394
  289. package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
  290. package/dist/integrations/pi/engine/command-dispatch.js +57 -0
  291. package/dist/integrations/pi/engine/host.js +2 -2
  292. package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
  293. package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
  294. package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
  295. package/dist/integrations/pi/engine/ports.d.ts +56 -0
  296. package/dist/integrations/pi/engine/ports.js +93 -0
  297. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
  298. package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
  299. package/dist/integrations/pi/engine/resources/changelog.json +4 -4
  300. package/dist/integrations/pi/engine/runtime-integration.js +102 -29
  301. package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
  302. package/dist/integrations/pi/engine/session-runtime.js +13 -5
  303. package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
  304. package/dist/integrations/pi/engine/session-selection.js +45 -9
  305. package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
  306. package/dist/integrations/pi/engine/settings-bridge.js +15 -0
  307. package/dist/integrations/pi/engine/settings-port.js +11 -15
  308. package/dist/integrations/pi/engine/view-state.d.ts +42 -0
  309. package/dist/integrations/pi/engine/view-state.js +126 -0
  310. package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
  311. package/dist/integrations/pi/engine/workflow-runner.js +73 -4
  312. package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
  313. package/dist/integrations/pi/engine/workflow-support.js +36 -0
  314. package/dist/integrations/pi/engine/workflows.d.ts +3 -1
  315. package/dist/integrations/pi/engine/workflows.js +1 -0
  316. package/dist/integrations/pi/startup-public.js +257 -310
  317. package/dist/integrations/pi/startup-public.manifest.json +564 -440
  318. package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
  319. package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
  320. package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
  321. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
  322. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
  323. package/dist/native/darwin-arm64/manifest.json +10 -7
  324. package/dist/native/darwin-arm64/process-guardian.node +0 -0
  325. package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
  326. package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
  327. package/dist/native/darwin-arm64/terminal-host.node +0 -0
  328. package/dist/native/darwin-x64/manifest.json +23 -0
  329. package/dist/native/darwin-x64/process-guardian.node +0 -0
  330. package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
  331. package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
  332. package/dist/native/darwin-x64/terminal-host.node +0 -0
  333. package/dist/native/linux-x64/manifest.json +10 -7
  334. package/dist/native/linux-x64/process-guardian.node +0 -0
  335. package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
  336. package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
  337. package/dist/native/linux-x64/terminal-host.node +0 -0
  338. package/dist/native/win32-x64/manifest.json +10 -7
  339. package/dist/native/win32-x64/process-guardian.node +0 -0
  340. package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
  341. package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
  342. package/dist/native/win32-x64/terminal-host.node +0 -0
  343. package/dist/product-identity.d.ts +3 -3
  344. package/dist/product-identity.js +4 -4
  345. package/dist/product-identity.json +16 -2
  346. package/dist/runtime-payload-inventory.json +6330 -6677
  347. package/dist/ui/apps/host.d.ts +2 -0
  348. package/dist/ui/apps/host.js +7 -1
  349. package/dist/ui/components/dialog-panel.js +35 -30
  350. package/dist/ui/components/index.d.ts +2 -2
  351. package/dist/ui/components/index.js +1 -1
  352. package/dist/ui/components/line-input.d.ts +4 -1
  353. package/dist/ui/components/line-input.js +3 -1
  354. package/dist/ui/components/prompt-input.d.ts +11 -8
  355. package/dist/ui/components/prompt-input.js +15 -13
  356. package/dist/ui/components/selection-copy.d.ts +2 -0
  357. package/dist/ui/components/selection-copy.js +13 -0
  358. package/dist/ui/components/spans.js +2 -2
  359. package/dist/ui/components/submitted-prompt.d.ts +9 -6
  360. package/dist/ui/components/submitted-prompt.js +20 -12
  361. package/dist/ui/components/surface.js +4 -2
  362. package/dist/ui/components/text.d.ts +3 -6
  363. package/dist/ui/components/text.js +6 -8
  364. package/dist/ui/components/transcript-viewport.d.ts +9 -2
  365. package/dist/ui/components/transcript-viewport.js +176 -55
  366. package/dist/ui/components/value-menu.d.ts +6 -3
  367. package/dist/ui/components/value-menu.js +6 -5
  368. package/dist/ui/settings/declarations.d.ts +90 -16
  369. package/dist/ui/settings/declarations.js +67 -14
  370. package/dist/ui/settings/early-accent.d.ts +81 -0
  371. package/dist/ui/settings/early-accent.js +50 -0
  372. package/dist/ui/settings/index.d.ts +4 -2
  373. package/dist/ui/settings/index.js +2 -1
  374. package/dist/ui/settings/manager.d.ts +16 -3
  375. package/dist/ui/settings/manager.js +122 -33
  376. package/dist/ui/settings/migrations.d.ts +6 -0
  377. package/dist/ui/settings/migrations.js +73 -0
  378. package/dist/ui/settings/profile-document.d.ts +26 -0
  379. package/dist/ui/settings/profile-document.js +164 -0
  380. package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
  381. package/dist/ui/settings/progress-palette.generated.js +139 -0
  382. package/dist/ui/settings/sections.d.ts +4 -0
  383. package/dist/ui/settings/sections.js +9 -3
  384. package/docs/architecture/boundaries.md +25 -10
  385. package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
  386. package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
  387. package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
  388. package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
  389. package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +70 -0
  390. package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +32 -0
  391. package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +115 -0
  392. package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +48 -0
  393. package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +125 -0
  394. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +56 -0
  395. package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +174 -0
  396. package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +18 -0
  397. package/docs/architecture/internal-naming.md +3 -1
  398. package/docs/architecture/process-guardian-provenance.md +18 -10
  399. package/docs/architecture/project-structure.md +8 -0
  400. package/docs/architecture/resident-tabs-requirements.md +18 -0
  401. package/docs/architecture/resident-tabs.md +648 -0
  402. package/docs/architecture/response-copy-delivery.md +1 -1
  403. package/docs/architecture/terminal-host-proof-gate.md +3 -1
  404. package/docs/architecture/terminal-host-provenance.md +16 -4
  405. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  406. package/docs/architecture/tool-image-presentation.md +2 -1
  407. package/docs/architecture/toolchain.md +11 -9
  408. package/docs/ci-release-runbook.md +14 -7
  409. package/docs/features/launch-profiles.md +11 -8
  410. package/docs/features/prompt-history.md +41 -20
  411. package/docs/manual-resident-tabs-acceptance.md +51 -0
  412. package/docs/openspec-archive-automation.md +49 -22
  413. package/docs/releases/0.2.6.md +44 -0
  414. package/docs/validation.md +49 -9
  415. package/package.json +19 -6
  416. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
  417. package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
  418. package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
  419. package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
  420. package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
  421. package/dist/native/darwin-arm64/process-guardian +0 -0
  422. package/dist/native/linux-x64/process-guardian +0 -0
  423. package/dist/native/win32-x64/process-guardian.exe +0 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/session-selector.ts.
4
4
  * Modifications: Source-synchronized session selector port: preserve threaded/current/all scope,
5
5
  * search, sort, named/path filters, rename, delete confirmation, active-session protection,
@@ -7,11 +7,12 @@
7
7
  * keybindings/theme, canonical path handling, reverse-Tab scope cycling, and the shared bare-A1 modal
8
8
  * frame with standalone title, standard outer rules, stable filter/status row, progressive result
9
9
  * paging, aligned result columns, Session Tree selection roles, quiet in-field query syntax guidance,
10
- * and one-line bottom dynamic feedback and searchable-dialog shortcut footer. Selected session rows
11
- * use the blue selection surface while preserving title and metadata foregrounds; the active session
12
- * title uses success green independently of keyboard selection, with ordinary text weight.
10
+ * an accent dialog-search marker, and one-line bottom dynamic feedback and searchable-dialog shortcut
11
+ * footer. Selected session rows use the blue selection surface while preserving title and metadata
12
+ * foregrounds; the active session title uses success green independently of keyboard selection, with
13
+ * ordinary text weight.
13
14
  * Deviations: owned-modal-shortcut-hints, owned-resume-session-dialog,
14
- * owned-standard-dialog-selection.
15
+ * owned-standard-dialog-selection, owned-dialog-search-marker.
15
16
  */
16
17
  import { spawnSync } from "node:child_process";
17
18
  import { existsSync, realpathSync } from "node:fs";
@@ -20,7 +21,7 @@ import * as os from "node:os";
20
21
  import { Container, getKeybindings, Input, matchesKey, sliceByColumn, Spacer, Text, truncateToWidth, visibleWidth, } from "@earendil-works/pi-tui";
21
22
  import { KeybindingsManager } from "../adjacent/core/keybindings.js";
22
23
  import { DynamicBorder } from "../../../startup-public.js";
23
- import { addPiModalHeader, adoptPiModalFrame } from "../../modal-frame.js";
24
+ import { addPiModalHeader, adoptPiModalFrame, renderPiModalSearchInput } from "../../modal-frame.js";
24
25
  import { DIALOG_CLOSE_SHORTCUT_HINT, paintPiBorder, piTheme, renderPiModalShortcutHints } from "../../theme.js";
25
26
  const theme = new Proxy({}, {
26
27
  get(_target, property) {
@@ -408,7 +409,7 @@ class SessionList {
408
409
  render(width) {
409
410
  const lines = [];
410
411
  // Render search input
411
- lines.push(...this.searchInput.render(width));
412
+ lines.push(...renderPiModalSearchInput(this.searchInput, width));
412
413
  lines.push(""); // Blank line after search
413
414
  if (this.filteredSessions.length === 0) {
414
415
  let emptyMessage;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
4
4
  * Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
5
5
  * root-instance keybinding registry because the public coding-agent component closes over a second
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/skill-invocation-message.ts.
4
4
  * Modifications: Mechanical port uses A1's public pi-tui instance, owned theme boundary, and
5
5
  * root-instance keybinding registry because the public coding-agent component closes over a second
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
4
4
  * Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
5
5
  * theme/countdown imports plus ECMAScript private fields.
@@ -24,7 +24,7 @@ export declare class RetryStatusIndicator extends StatusIndicator {
24
24
  }
25
25
  export type CompactionStatusReason = "manual" | "threshold" | "overflow";
26
26
  export declare class CompactionStatusIndicator extends StatusIndicator {
27
- constructor(ui: TUI, reason: CompactionStatusReason);
27
+ constructor(ui: TUI, reason: CompactionStatusReason, colorFn?: (text: string) => string);
28
28
  }
29
29
  export declare class BranchSummaryStatusIndicator extends StatusIndicator {
30
30
  constructor(ui: TUI);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/status-indicator.ts.
4
4
  * Modifications: Mechanical source port with public package-root keybinding, Loader, and owned
5
5
  * theme/countdown imports plus ECMAScript private fields.
@@ -47,12 +47,12 @@ export class RetryStatusIndicator extends StatusIndicator {
47
47
  }
48
48
  }
49
49
  export class CompactionStatusIndicator extends StatusIndicator {
50
- constructor(ui, reason) {
50
+ constructor(ui, reason, colorFn) {
51
51
  const cancelHint = `(${keyText("app.interrupt")} to cancel)`;
52
52
  const label = reason === "manual"
53
53
  ? `Compacting context... ${cancelHint}`
54
54
  : `${reason === "overflow" ? "Context overflow detected, " : ""}Auto-compacting... ${cancelHint}`;
55
- super("compaction", ui, spinner => piTheme().fg("accent", spinner), text => piTheme().fg("muted", text), label);
55
+ super("compaction", ui, colorFn ?? (spinner => piTheme().fg("accent", spinner)), colorFn ?? (text => piTheme().fg("muted", text)), label);
56
56
  }
57
57
  }
58
58
  export class BranchSummaryStatusIndicator extends StatusIndicator {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/themed-text.ts.
4
4
  * Modifications: Integrated invalidation-aware text into A1's owned startup header and notices;
5
5
  * repository formatting only.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/themed-text.ts.
4
4
  * Modifications: Integrated invalidation-aware text into A1's owned startup header and notices;
5
5
  * repository formatting only.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/thinking-selector.ts.
4
4
  * Modifications: Preserve the searchable thinking-level selector, current/default semantics,
5
5
  * selection, and focus while accepting the active bare-A1 cycle-key label from the shell, styling the
@@ -8,13 +8,14 @@
8
8
  * levels, and rendering exclusive radio-style default markers before level names, an item-adjacent
9
9
  * active checkmark, and aligned muted descriptions. Bare A1 persists defaults immediately on Space,
10
10
  * closes through the implicit Ctrl+C-capable selection-cancel action, and uses the shared compact
11
- * semantic shortcut row with Type/search guidance without advertising that alias. All list and border
12
- * colors use the owned theme and its explicit color mode. Selected rows use the shared bare-A1 blue
13
- * selection surface only around the rendered item span, with the existing accent arrow, normal-text
14
- * level, and preserved current/default/description roles. The comparison profile retains the public
15
- * pinned component.
11
+ * semantic shortcut row with Type/search guidance and an accent search marker without advertising that
12
+ * alias. All list and border colors use the owned theme and its explicit color mode. Selected rows use
13
+ * the shared bare-A1 blue selection surface only around the rendered item span, with the existing
14
+ * accent arrow, normal-text level, and preserved current/default/description roles. The comparison
15
+ * profile retains the public pinned component.
16
16
  * Deviations: owned-modal-shortcut-hints, owned-level-cycle-shortcut, owned-thinking-selector-heading,
17
- * owned-thinking-selector-controls, owned-dialog-ctrl-c-cancel, owned-standard-dialog-selection.
17
+ * owned-thinking-selector-controls, owned-dialog-ctrl-c-cancel, owned-standard-dialog-selection,
18
+ * owned-dialog-search-marker.
18
19
  */
19
20
  import { Container, type Focusable, SelectList } from "@earendil-works/pi-tui";
20
21
  export type ThinkingSelectorLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/thinking-selector.ts.
4
4
  * Modifications: Preserve the searchable thinking-level selector, current/default semantics,
5
5
  * selection, and focus while accepting the active bare-A1 cycle-key label from the shell, styling the
@@ -8,17 +8,18 @@
8
8
  * levels, and rendering exclusive radio-style default markers before level names, an item-adjacent
9
9
  * active checkmark, and aligned muted descriptions. Bare A1 persists defaults immediately on Space,
10
10
  * closes through the implicit Ctrl+C-capable selection-cancel action, and uses the shared compact
11
- * semantic shortcut row with Type/search guidance without advertising that alias. All list and border
12
- * colors use the owned theme and its explicit color mode. Selected rows use the shared bare-A1 blue
13
- * selection surface only around the rendered item span, with the existing accent arrow, normal-text
14
- * level, and preserved current/default/description roles. The comparison profile retains the public
15
- * pinned component.
11
+ * semantic shortcut row with Type/search guidance and an accent search marker without advertising that
12
+ * alias. All list and border colors use the owned theme and its explicit color mode. Selected rows use
13
+ * the shared bare-A1 blue selection surface only around the rendered item span, with the existing
14
+ * accent arrow, normal-text level, and preserved current/default/description roles. The comparison
15
+ * profile retains the public pinned component.
16
16
  * Deviations: owned-modal-shortcut-hints, owned-level-cycle-shortcut, owned-thinking-selector-heading,
17
- * owned-thinking-selector-controls, owned-dialog-ctrl-c-cancel, owned-standard-dialog-selection.
17
+ * owned-thinking-selector-controls, owned-dialog-ctrl-c-cancel, owned-standard-dialog-selection,
18
+ * owned-dialog-search-marker.
18
19
  */
19
20
  import { Container, fuzzyFilter, getKeybindings, Input, SelectList, Spacer, Text, } from "@earendil-works/pi-tui";
20
21
  import { DynamicBorder } from "../../../startup-public.js";
21
- import { addPiModalHeader, adoptPiModalFrame } from "../../modal-frame.js";
22
+ import { addPiModalHeader, addPiModalSearchInput, adoptPiModalFrame } from "../../modal-frame.js";
22
23
  import { DIALOG_CLOSE_SHORTCUT_HINT, piTheme, renderPiModalListRow, renderPiModalShortcutHints } from "../../theme.js";
23
24
  const THINKING_SELECT_LIST_LAYOUT = {
24
25
  minPrimaryColumnWidth: 12,
@@ -88,7 +89,7 @@ export class OwnedThinkingSelectorComponent extends Container {
88
89
  this.addChild(new Spacer(1));
89
90
  this.searchInput = new Input();
90
91
  this.searchInput.onSubmit = () => this.selectList.handleInput("\r");
91
- this.addChild(this.searchInput);
92
+ addPiModalSearchInput(this, this.searchInput);
92
93
  this.addChild(new Spacer(1));
93
94
  const initialList = this.buildSelectList(this.allItems, currentLevel);
94
95
  this.selectList = initialList.list;
@@ -4,7 +4,6 @@ type ToolPresentationResult = Parameters<NonNullable<ToolDefinition["renderResul
4
4
  isError: boolean;
5
5
  durationMs?: number;
6
6
  };
7
- /** The caller-side merge 0.85.1 performs before handing a definition to the component: built-in renderers fill the gaps. */
8
7
  type ToolRendererInput = ToolRenderers | ToolDefinition<any, any, any>;
9
8
  export declare function mergeBuiltInRenderers(definition: ToolRendererInput | undefined, builtIn: ToolRendererInput | undefined): ToolRenderers | undefined;
10
9
  export interface ToolExecutionOptions {
@@ -15,7 +14,6 @@ export interface ToolExecutionOptions {
15
14
  export declare class ToolExecutionComponent extends Container {
16
15
  private contentBox;
17
16
  private contentText;
18
- private contentTextRegion;
19
17
  private selfRenderContainer;
20
18
  private selfRenderHeight;
21
19
  private callRendererComponent;
@@ -43,9 +41,6 @@ export declare class ToolExecutionComponent extends Container {
43
41
  private result;
44
42
  private hideComponent;
45
43
  constructor(toolName: string, toolCallId: string, args: any, options: ToolExecutionOptions | undefined, toolDefinition: ToolRenderers | ToolDefinition<any, any, any> | undefined, ui: TUI, cwd: string);
46
- private getCallRenderer;
47
- private getResultRenderer;
48
- private hasRendererDefinition;
49
44
  private getRenderShell;
50
45
  private getRenderContext;
51
46
  private createCallFallback;
@@ -55,7 +50,6 @@ export declare class ToolExecutionComponent extends Container {
55
50
  markExecutionStarted(): void;
56
51
  setArgsComplete(): void;
57
52
  updateResult(result: ToolPresentationResult, isPartial?: boolean): void;
58
- /** End mount ownership without letting an obsolete conversion or extension callback repaint. */
59
53
  dispose(): void;
60
54
  setExpanded(expanded: boolean): void;
61
55
  setOutputPad(outputPad: number): void;
@@ -65,6 +59,8 @@ export declare class ToolExecutionComponent extends Container {
65
59
  render(width: number): string[];
66
60
  handleMouse(event: TuiMouseEvent): ReturnType<Container["handleMouse"]>;
67
61
  private updateDisplay;
62
+ private callTheme;
63
+ private appendRenderer;
68
64
  private composeDisplay;
69
65
  private getTextOutput;
70
66
  private formatToolExecution;
@@ -1,18 +1,61 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/tool-execution.ts.
4
- * Modifications: Retain pinned shell and actual public tool-definition renderers. Replace private
5
- * index-keyed image conversion with current-source ownership, serial conversion, visible fallback, and
6
- * disposal; guard reentrant invalidation. Remap private types, definition factories, theme, and
7
- * generic text helpers to public or locally attributed equivalents. See
4
+ * Modifications: Retain pinned shell/public renderers. Own image conversion; replace private APIs with
5
+ * public/local equivalents. Use bare-A1 secondary-accent read ranges and concise collapse shortcut
6
+ * hints. Restore the enclosing default-shell background after nested renderer resets. Omit
7
+ * non-actionable image fallback rows when the terminal has no image protocol. See
8
8
  * docs/architecture/tool-image-presentation.md.
9
- * Deviations: current-tool-image-conversion-ownership.
9
+ * Deviations: current-tool-image-conversion-ownership, read-range-secondary-accent,
10
+ * concise-tool-expand-shortcut-hint, default-shell-background-reset-scoping,
11
+ * unsupported-image-fallback-omission.
10
12
  */
11
13
  import { stripVTControlCharacters } from "node:util";
12
- import { Box, Container, getCapabilities, getImageDimensions, imageFallback, MouseRegion, Spacer, Text } from "@earendil-works/pi-tui";
13
- import { createReadToolDefinition, createBashToolDefinition, createEditToolDefinition, createWriteToolDefinition, createGrepToolDefinition, createFindToolDefinition, createLsToolDefinition, keyHint, } from "../../../startup-public.js";
14
- import { piTheme } from "../theme/theme.js";
14
+ import { Box, Container, getImageDimensions, imageFallback, MouseRegion, Spacer, Text } from "@earendil-works/pi-tui";
15
+ import { createReadToolDefinition, createBashToolDefinition, createEditToolDefinition, createWriteToolDefinition, createGrepToolDefinition, createFindToolDefinition, createLsToolDefinition, keyHint, keyText, } from "../../../startup-public.js";
16
+ import { renderPiModalShortcutHints } from "../../theme.js";
17
+ import { isPiAccentProjectionEnabled, piTheme } from "../theme/theme.js";
15
18
  import { ToolImagePresentation } from "../../tool-image-presentation.js";
19
+ function conciseExpandHint() {
20
+ return renderPiModalShortcutHints([{ key: keyText("app.tools.expand"), action: "expand" }]);
21
+ }
22
+ function withConciseExpandHint(component) {
23
+ return new Proxy(component, { get(target, property) {
24
+ if (property === "render")
25
+ return (width) => {
26
+ const theme = piTheme(), key = keyText("app.tools.expand"), concise = conciseExpandHint();
27
+ const compact = theme.fg("dim", ` (${key} to expand)`);
28
+ return target.render(width).map(row => row.replaceAll(keyHint("app.tools.expand", "to expand"), concise)
29
+ .replaceAll(compact, `${theme.fg("dim", " (")}${concise}${theme.fg("dim", ")")}`));
30
+ };
31
+ const value = Reflect.get(target, property, target);
32
+ return typeof value === "function" ? value.bind(target) : value;
33
+ } });
34
+ }
35
+ function enclosingToolBackground(theme, role) {
36
+ const background = theme.bg(role, "\u0000").split("\u0000")[0];
37
+ // Invariant: child defaults return to the enclosing shell, not the terminal canvas.
38
+ return text => theme.bg(role, text.replace(/\u001b\[([0-9:;]*)m/gu, (ansi, parameters) => {
39
+ const values = parameters.split(";");
40
+ let restore = false;
41
+ for (let index = 0; index < values.length; index++) {
42
+ const token = values[index], code = Number(token.split(":", 1)[0] || "0");
43
+ if (code === 0 || code === 49)
44
+ restore = true;
45
+ else if (code >= 40 && code <= 47 || code >= 100 && code <= 107)
46
+ restore = false;
47
+ else if (code === 38 || code === 48 || code === 58) {
48
+ if (code === 48)
49
+ restore = false;
50
+ if (!token.includes(":")) {
51
+ const mode = Number(values[index + 1]);
52
+ index += mode === 2 ? 4 : mode === 5 ? 2 : 1;
53
+ }
54
+ }
55
+ }
56
+ return restore ? ansi + background : ansi;
57
+ }));
58
+ }
16
59
  export function mergeBuiltInRenderers(definition, builtIn) {
17
60
  if (definition === undefined)
18
61
  return builtIn;
@@ -31,7 +74,6 @@ const definitions = { read: createReadToolDefinition, bash: createBashToolDefini
31
74
  write: createWriteToolDefinition, grep: createGrepToolDefinition, find: createFindToolDefinition, ls: createLsToolDefinition };
32
75
  const FALLBACK_PREVIEW_LINES = 10;
33
76
  const COLLAPSED_ARGS_CHARS = 100;
34
- /** Locally attributed equivalent of pinned Pi's private generic tool-call formatter. */
35
77
  function formatToolCallWithArgs(title, args, expanded) {
36
78
  const theme = piTheme();
37
79
  const header = theme.fg("toolTitle", theme.bold(title));
@@ -56,7 +98,6 @@ function formatToolCallWithArgs(title, args, expanded) {
56
98
  export class ToolExecutionComponent extends Container {
57
99
  contentBox;
58
100
  contentText;
59
- contentTextRegion;
60
101
  selfRenderContainer;
61
102
  selfRenderHeight = 0;
62
103
  callRendererComponent;
@@ -90,8 +131,6 @@ export class ToolExecutionComponent extends Container {
90
131
  this.args = args;
91
132
  this.builtInToolDefinition = Object.hasOwn(definitions, toolName)
92
133
  ? definitions[toolName](cwd) : undefined;
93
- // Rationale: 0.85.1 moved the built-in renderer fallback to the caller; A1 keeps it here so every caller of
94
- // the owned component gets the built-in edit/read/bash renderers without reaching into the tool registry.
95
134
  this.toolDefinition = mergeBuiltInRenderers(toolDefinition, this.builtInToolDefinition);
96
135
  this.showImages = options.showImages ?? true;
97
136
  this.imageWidthCells = options.imageWidthCells ?? 60;
@@ -105,30 +144,17 @@ export class ToolExecutionComponent extends Container {
105
144
  this.ui.requestRender();
106
145
  });
107
146
  this.addChild(new Spacer(1));
108
- // Always create all shell variants. contentBox is used for default renderer-based composition.
109
- // selfRenderContainer is used when the tool renders its own framing.
110
- // contentText is reserved for generic fallback rendering when no tool definition exists.
111
- this.contentBox = new Box(1, 1, (text) => piTheme().bg("toolPendingBg", text));
112
- this.contentText = new Text("", 1, 1, (text) => piTheme().bg("toolPendingBg", text));
113
- this.contentTextRegion = this.createResultRegion(this.contentText);
147
+ this.contentBox = new Box(1, 1, enclosingToolBackground(piTheme(), "toolPendingBg"));
148
+ this.contentText = new Text("", 1, 1, enclosingToolBackground(piTheme(), "toolPendingBg"));
114
149
  this.selfRenderContainer = new Container();
115
- if (this.hasRendererDefinition()) {
150
+ if (this.toolDefinition !== undefined) {
116
151
  this.addChild(this.getRenderShell() === "self" ? this.selfRenderContainer : this.contentBox);
117
152
  }
118
153
  else {
119
- this.addChild(this.contentTextRegion);
154
+ this.addChild(this.createResultRegion(this.contentText));
120
155
  }
121
156
  this.updateDisplay();
122
157
  }
123
- getCallRenderer() {
124
- return this.toolDefinition?.renderCall;
125
- }
126
- getResultRenderer() {
127
- return this.toolDefinition?.renderResult;
128
- }
129
- hasRendererDefinition() {
130
- return this.toolDefinition !== undefined;
131
- }
132
158
  getRenderShell() {
133
159
  return this.toolDefinition?.renderShell ?? "default";
134
160
  }
@@ -161,15 +187,14 @@ export class ToolExecutionComponent extends Container {
161
187
  createResultFallback() {
162
188
  const theme = piTheme();
163
189
  const output = this.getTextOutput();
164
- if (!output) {
190
+ if (!output)
165
191
  return undefined;
166
- }
167
192
  const lines = output.split("\n");
168
193
  const displayLines = this.expanded ? lines : lines.slice(0, FALLBACK_PREVIEW_LINES);
169
194
  const remaining = lines.length - displayLines.length;
170
195
  let text = displayLines.map((line) => theme.fg("toolOutput", line)).join("\n");
171
196
  if (remaining > 0) {
172
- text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${keyHint("app.tools.expand", "to expand")}${theme.fg("muted", ")")}`;
197
+ text += `${theme.fg("muted", `\n... (${remaining} more lines,`)} ${conciseExpandHint()}${theme.fg("muted", ")")}`;
173
198
  }
174
199
  return new Text(text, 0, 0);
175
200
  }
@@ -200,7 +225,6 @@ export class ToolExecutionComponent extends Container {
200
225
  this.isPartial = isPartial;
201
226
  this.updateDisplay();
202
227
  }
203
- /** End mount ownership without letting an obsolete conversion or extension callback repaint. */
204
228
  dispose() {
205
229
  this.disposed = true;
206
230
  this.images.dispose();
@@ -236,7 +260,7 @@ export class ToolExecutionComponent extends Container {
236
260
  if (this.hideComponent) {
237
261
  return [];
238
262
  }
239
- if (this.hasRendererDefinition() && this.getRenderShell() === "self") {
263
+ if (this.toolDefinition !== undefined && this.getRenderShell() === "self") {
240
264
  const contentLines = this.selfRenderContainer.render(width);
241
265
  this.selfRenderHeight = contentLines.length;
242
266
  if (contentLines.length === 0 && this.imageComponents.length === 0) {
@@ -262,7 +286,7 @@ export class ToolExecutionComponent extends Container {
262
286
  return super.render(width);
263
287
  }
264
288
  handleMouse(event) {
265
- if (!this.hasRendererDefinition() || this.getRenderShell() !== "self")
289
+ if (this.toolDefinition === undefined || this.getRenderShell() !== "self")
266
290
  return super.handleMouse(event);
267
291
  if (event.y <= 0 || event.y > this.selfRenderHeight)
268
292
  return undefined;
@@ -283,65 +307,52 @@ export class ToolExecutionComponent extends Container {
283
307
  this.updatingDisplay = false;
284
308
  }
285
309
  }
310
+ callTheme(theme, renderer) {
311
+ if (this.toolName !== "read" || renderer !== this.builtInToolDefinition?.renderCall || !isPiAccentProjectionEnabled)
312
+ return theme;
313
+ return new Proxy(theme, { get(target, property) {
314
+ if (property === "fg")
315
+ return (...args) => target.fg(args[0] === "warning" ? "mdHeading" : args[0], args[1]);
316
+ const value = Reflect.get(target, property, target);
317
+ return typeof value === "function" ? value.bind(target) : value;
318
+ } });
319
+ }
320
+ appendRenderer(container, field, render, fallback, builtIn) {
321
+ if (render) {
322
+ try {
323
+ const component = render(this.getRenderContext(this[field]));
324
+ this[field] = component;
325
+ container.addChild(this.createResultRegion(builtIn ? withConciseExpandHint(component) : component));
326
+ return true;
327
+ }
328
+ catch {
329
+ this[field] = undefined;
330
+ }
331
+ }
332
+ const component = fallback();
333
+ if (component)
334
+ container.addChild(this.createResultRegion(component));
335
+ return component !== undefined;
336
+ }
286
337
  composeDisplay() {
287
338
  const theme = piTheme();
288
- const bgFn = this.isPartial
289
- ? (text) => theme.bg("toolPendingBg", text)
290
- : this.result?.isError
291
- ? (text) => theme.bg("toolErrorBg", text)
292
- : (text) => theme.bg("toolSuccessBg", text);
339
+ const bgFn = enclosingToolBackground(theme, this.isPartial ? "toolPendingBg"
340
+ : this.result?.isError ? "toolErrorBg" : "toolSuccessBg");
293
341
  let hasContent = false;
294
342
  this.hideComponent = false;
295
- if (this.hasRendererDefinition()) {
343
+ if (this.toolDefinition !== undefined) {
296
344
  const renderContainer = this.getRenderShell() === "self" ? this.selfRenderContainer : this.contentBox;
297
345
  if (renderContainer instanceof Box) {
298
346
  renderContainer.setBgFn(bgFn);
299
347
  renderContainer.setPaddingX(this.outputPad);
300
348
  }
301
349
  renderContainer.clear();
302
- const callRenderer = this.getCallRenderer();
303
- if (!callRenderer) {
304
- renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
305
- hasContent = true;
306
- }
307
- else {
308
- try {
309
- const component = callRenderer(this.args, theme, this.getRenderContext(this.callRendererComponent));
310
- this.callRendererComponent = component;
311
- renderContainer.addChild(this.createResultRegion(component));
312
- hasContent = true;
313
- }
314
- catch {
315
- this.callRendererComponent = undefined;
316
- renderContainer.addChild(this.createResultRegion(this.createCallFallback()));
317
- hasContent = true;
318
- }
319
- }
320
- if (this.result) {
321
- const resultRenderer = this.getResultRenderer();
322
- if (!resultRenderer) {
323
- const component = this.createResultFallback();
324
- if (component) {
325
- renderContainer.addChild(this.createResultRegion(component));
326
- hasContent = true;
327
- }
328
- }
329
- else {
330
- try {
331
- const component = resultRenderer({ content: this.result.content, details: this.result.details }, { expanded: this.expanded, isPartial: this.isPartial }, theme, this.getRenderContext(this.resultRendererComponent));
332
- this.resultRendererComponent = component;
333
- renderContainer.addChild(this.createResultRegion(component));
334
- hasContent = true;
335
- }
336
- catch {
337
- this.resultRendererComponent = undefined;
338
- const component = this.createResultFallback();
339
- if (component) {
340
- renderContainer.addChild(this.createResultRegion(component));
341
- hasContent = true;
342
- }
343
- }
344
- }
350
+ const call = this.toolDefinition?.renderCall;
351
+ hasContent = this.appendRenderer(renderContainer, "callRendererComponent", call ? context => call(this.args, this.callTheme(theme, call), context) : undefined, () => this.createCallFallback(), call === this.builtInToolDefinition?.renderCall);
352
+ const result = this.result;
353
+ if (result) {
354
+ const render = this.toolDefinition?.renderResult;
355
+ hasContent = this.appendRenderer(renderContainer, "resultRendererComponent", render ? context => render({ content: result.content, details: result.details }, { expanded: this.expanded, isPartial: this.isPartial }, theme, context) : undefined, () => this.createResultFallback(), render === this.builtInToolDefinition?.renderResult) || hasContent;
345
356
  }
346
357
  }
347
358
  else {
@@ -350,13 +361,9 @@ export class ToolExecutionComponent extends Container {
350
361
  this.contentText.setText(this.formatToolExecution());
351
362
  hasContent = true;
352
363
  }
353
- for (const img of this.imageComponents) {
354
- this.removeChild(img);
355
- }
364
+ for (const child of [...this.imageComponents, ...this.imageSpacers])
365
+ this.removeChild(child);
356
366
  this.imageComponents = [];
357
- for (const spacer of this.imageSpacers) {
358
- this.removeChild(spacer);
359
- }
360
367
  this.imageSpacers = [];
361
368
  this.images.update(this.result?.content ?? [], this.showImages);
362
369
  for (const imageComponent of this.images.components(this.imageWidthCells)) {
@@ -366,18 +373,15 @@ export class ToolExecutionComponent extends Container {
366
373
  this.imageComponents.push(imageComponent);
367
374
  this.addChild(imageComponent);
368
375
  }
369
- if (this.hasRendererDefinition() && !hasContent && this.imageComponents.length === 0) {
376
+ if (this.toolDefinition !== undefined && !hasContent && this.imageComponents.length === 0) {
370
377
  this.hideComponent = true;
371
378
  }
372
379
  }
373
380
  getTextOutput() {
374
381
  if (!this.result)
375
382
  return "";
376
- const text = this.result.content.filter(part => part.type === "text").map(part => Array.from(stripVTControlCharacters(part.text ?? "")).filter(char => {
377
- const code = char.codePointAt(0);
378
- return code === 9 || code === 10 || code > 31 && (code < 0xfff9 || code > 0xfffb);
379
- }).join("")).join("\n");
380
- if (getCapabilities().images && this.showImages)
383
+ const text = this.result.content.filter(part => part.type === "text").map(part => stripVTControlCharacters(part.text ?? "").replace(/[\u0000-\u0008\u000b-\u001f\ufff9-\ufffb]/gu, "")).join("\n");
384
+ if (this.showImages)
381
385
  return text;
382
386
  const indicators = this.result.content.filter(part => part.type === "image").map(part => imageFallback(part.mimeType ?? "image/unknown", part.data && part.mimeType ? getImageDimensions(part.data, part.mimeType) ?? undefined : undefined)).join("\n");
383
387
  return text && indicators ? `${text}\n${indicators}` : text || indicators;
@@ -386,13 +390,11 @@ export class ToolExecutionComponent extends Container {
386
390
  const theme = piTheme();
387
391
  let text = theme.fg("toolTitle", theme.bold(this.toolName));
388
392
  const content = JSON.stringify(this.args, null, 2);
389
- if (content) {
393
+ if (content)
390
394
  text += `\n\n${content}`;
391
- }
392
395
  const output = this.getTextOutput();
393
- if (output) {
396
+ if (output)
394
397
  text += `\n${output}`;
395
- }
396
398
  return text;
397
399
  }
398
400
  }
@@ -1,18 +1,18 @@
1
1
  /**
2
- * Provenance: @earendil-works/pi-coding-agent 1.1.0 (MIT), commit abe508e1b89912adde45528136c3221eb69acdd7,
2
+ * Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
3
3
  * packages/coding-agent/src/modes/interactive/components/tree-selector.ts.
4
4
  * Modifications: Port remaps public types/components plus owned keybindings/theme helpers while
5
5
  * preserving tree behavior; bare A1 uses compact modal chrome and label editing, four-mode
6
6
  * Models-style filter status with Tab/Shift+Tab directional cycling and concise all-first presentation
7
- * excluding internal bookkeeping, standard search input, blue full-row menu-arrow selection that
8
- * preserves per-entry semantic foregrounds and has no path bullets, accent entry labels, bracketed
9
- * timestamps, numeric result counters without duplicate label-time status, and a stateful time on/off
10
- * shortcut, semantic role colors with session naming for the system root, standard
11
- * paging/first-last/non-root containing-branch folding keys with a permanently expanded system session
12
- * entry even behind hidden metadata, single-character ellipses on both clipped edges with
13
- * bracket-delimiter preservation and selected-fragment highlighting, and Models-ordered semantic
7
+ * excluding internal bookkeeping, a standard accent-marked search input, blue full-row menu-arrow
8
+ * selection that preserves per-entry semantic foregrounds and has no path bullets, accent entry
9
+ * labels, bracketed timestamps, numeric result counters without duplicate label-time status, and a
10
+ * stateful time on/off shortcut, semantic role colors with session naming for the system root,
11
+ * standard paging/first-last/non-root containing-branch folding keys with a permanently expanded
12
+ * system session entry even behind hidden metadata, single-character ellipses on both clipped edges
13
+ * with bracket-delimiter preservation and selected-fragment highlighting, and Models-ordered semantic
14
14
  * Type/search shortcut footers without a redundant select hint.
15
- * Deviations: owned-modal-shortcut-hints, owned-session-tree-dialog.
15
+ * Deviations: owned-modal-shortcut-hints, owned-session-tree-dialog, owned-dialog-search-marker.
16
16
  */
17
17
  import { type Component, Container, type Focusable } from "@earendil-works/pi-tui";
18
18
  import { type SessionTreeNode } from "@earendil-works/pi-coding-agent";