@timurproko/a1 0.1.8-dev.3b54f21 → 0.1.8-dev.402

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 (642) hide show
  1. package/README.md +159 -65
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +12 -6
  4. package/bin/module-identity.js +69 -35
  5. package/bin/pi-tui.d.ts +6 -0
  6. package/bin/pi-tui.js +28 -0
  7. package/bin/release-cleanup.js +8 -0
  8. package/bin/supervisor.js +2 -2
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +62 -21
  11. package/bin/update-recovery.js +274 -0
  12. package/bin/warmup.js +27 -0
  13. package/dist/cli/capabilities.d.ts +6 -0
  14. package/dist/{src/cli → cli}/capabilities.js +1 -1
  15. package/dist/{src/cli → cli}/dispatch.d.ts +15 -1
  16. package/dist/cli/dispatch.js +261 -0
  17. package/dist/cli/package-messages.d.ts +26 -0
  18. package/dist/cli/package-messages.js +71 -0
  19. package/dist/{src/cli → cli}/packages.d.ts +11 -2
  20. package/dist/{src/cli → cli}/packages.js +24 -27
  21. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  22. package/dist/cli/version-stats.js +112 -0
  23. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  24. package/dist/composition/agent-engine-bridge.js +108 -0
  25. package/dist/composition/index.d.ts +3 -0
  26. package/dist/composition/index.js +3 -0
  27. package/dist/composition/owned-ui.d.ts +35 -0
  28. package/dist/composition/owned-ui.js +118 -0
  29. package/dist/composition/process.d.ts +16 -0
  30. package/dist/composition/process.js +45 -0
  31. package/dist/composition/settings-route-host.d.ts +8 -0
  32. package/dist/composition/settings-route-host.js +75 -0
  33. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  34. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  35. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  36. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
  37. package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
  38. package/dist/contracts/owned-ui/image-attachments.js +67 -0
  39. package/dist/contracts/owned-ui/index.d.ts +8 -0
  40. package/dist/contracts/owned-ui/index.js +8 -0
  41. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +123 -0
  42. package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
  43. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  44. package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
  45. package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
  46. package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
  47. package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
  48. package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
  49. package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
  50. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +5 -1
  51. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +129 -4
  52. package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +8 -0
  53. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  54. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  55. package/dist/{src/features → features}/launch/index.js +0 -1
  56. package/dist/features/launch/intent.d.ts +10 -0
  57. package/dist/features/launch/intent.js +8 -0
  58. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  59. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  60. package/dist/{src/features → features}/launch/profile-paths.d.ts +3 -2
  61. package/dist/{src/features → features}/launch/profile-paths.js +13 -8
  62. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  63. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  64. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  65. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  66. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  67. package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
  68. package/dist/{src/features → features}/owned-ui/index.js +2 -0
  69. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  70. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  71. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  72. package/dist/features/owned-ui/run.js +32 -0
  73. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  74. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  75. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  76. package/dist/{src/features → features}/owned-ui/settings-app.js +105 -56
  77. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  78. package/dist/features/prompt-history/image-sidecar.js +130 -0
  79. package/dist/features/prompt-history/index.d.ts +4 -0
  80. package/dist/features/prompt-history/index.js +3 -0
  81. package/dist/features/prompt-history/paths.d.ts +5 -0
  82. package/dist/features/prompt-history/paths.js +17 -0
  83. package/dist/features/prompt-history/service.d.ts +54 -0
  84. package/dist/features/prompt-history/service.js +425 -0
  85. package/dist/features/prompt-history/store.d.ts +16 -0
  86. package/dist/features/prompt-history/store.js +223 -0
  87. package/dist/features/prompt-history/worker.d.ts +9 -0
  88. package/dist/features/prompt-history/worker.js +45 -0
  89. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  90. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  91. package/dist/features/prompt-suggestions/index.d.ts +1 -0
  92. package/dist/features/prompt-suggestions/index.js +1 -0
  93. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  94. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  95. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  96. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  97. package/dist/{src/features → features}/workspace/router.js +1 -0
  98. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  99. package/dist/{src/features → features}/workspace/store.js +1 -0
  100. package/dist/foundation/launch-context/index.d.ts +59 -0
  101. package/dist/foundation/launch-context/index.js +136 -0
  102. package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
  103. package/dist/{src/foundation → foundation}/launch-guardian/main.js +23 -8
  104. package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
  105. package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
  106. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  107. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  108. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  109. package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
  110. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  111. package/dist/foundation/lifecycle/session-selection.js +39 -0
  112. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  113. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  114. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  115. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  116. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  117. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  118. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  119. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  120. package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
  121. package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
  122. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  123. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  124. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  125. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  126. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
  127. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
  128. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  129. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  130. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  131. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  132. package/dist/foundation/release/bootstrap.d.ts +55 -0
  133. package/dist/{src/foundation → foundation}/release/bootstrap.js +219 -46
  134. package/dist/foundation/release/cohort-state.d.ts +157 -0
  135. package/dist/foundation/release/cohort-state.js +472 -0
  136. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  137. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  138. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  139. package/dist/foundation/release/dependency-certification.js +266 -0
  140. package/dist/foundation/release/dependency-layer.d.ts +81 -0
  141. package/dist/foundation/release/dependency-layer.js +466 -0
  142. package/dist/foundation/release/endpoints.d.ts +20 -0
  143. package/dist/foundation/release/endpoints.js +50 -0
  144. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  145. package/dist/foundation/release/immutable-platform.js +13 -0
  146. package/dist/{src/foundation → foundation}/release/index.d.ts +6 -0
  147. package/dist/{src/foundation → foundation}/release/index.js +6 -0
  148. package/dist/foundation/release/release-gc.d.ts +71 -0
  149. package/dist/foundation/release/release-gc.js +764 -0
  150. package/dist/{src/foundation → foundation}/release/release-store.d.ts +9 -3
  151. package/dist/{src/foundation → foundation}/release/release-store.js +74 -14
  152. package/dist/{src/foundation → foundation}/release/release.d.ts +6 -1
  153. package/dist/{src/foundation → foundation}/release/release.js +15 -4
  154. package/dist/foundation/release/restart-certification.d.ts +68 -0
  155. package/dist/foundation/release/restart-certification.js +227 -0
  156. package/dist/foundation/release/update-launch.d.ts +6 -0
  157. package/dist/foundation/release/update-launch.js +17 -0
  158. package/dist/foundation/release/update-recovery.d.ts +76 -0
  159. package/dist/foundation/release/update-recovery.js +356 -0
  160. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +11 -0
  161. package/dist/{src/foundation → foundation}/release/update-transaction.js +13 -1
  162. package/dist/{src/foundation → foundation}/release/update.d.ts +40 -4
  163. package/dist/{src/foundation → foundation}/release/update.js +196 -78
  164. package/dist/foundation/release/warmup.d.ts +3 -0
  165. package/dist/foundation/release/warmup.js +47 -0
  166. package/dist/foundation/startup/index.d.ts +1 -0
  167. package/dist/foundation/startup/index.js +1 -0
  168. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  169. package/dist/foundation/startup/startup-runtime.js +142 -0
  170. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  171. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  172. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  173. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  174. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  175. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  176. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  177. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  178. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  179. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  180. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  181. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  182. package/dist/foundation/supervision/index.d.ts +3 -0
  183. package/dist/foundation/supervision/index.js +3 -0
  184. package/dist/foundation/supervision/main.d.ts +1 -0
  185. package/dist/foundation/supervision/main.js +84 -0
  186. package/dist/foundation/supervision/paths.d.ts +1 -0
  187. package/dist/foundation/supervision/paths.js +1 -0
  188. package/dist/foundation/supervision/server.d.ts +51 -0
  189. package/dist/{src/foundation → foundation}/supervision/server.js +142 -20
  190. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  191. package/dist/foundation/terminal-cleanup/fatal-exit.js +85 -0
  192. package/dist/foundation/terminal-cleanup/index.d.ts +2 -0
  193. package/dist/foundation/terminal-cleanup/index.js +2 -0
  194. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  195. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  196. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  197. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  198. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  199. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  200. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  201. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  202. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +2 -1
  203. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +2 -1
  204. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  205. package/dist/integrations/pi/components/owned-editor-ux.js +1093 -0
  206. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  207. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  208. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  209. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  210. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  211. package/dist/integrations/pi/components/shell-editor-autocomplete.js +297 -0
  212. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  213. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +4 -4
  214. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +58 -23
  215. package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
  216. package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
  217. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  218. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +174 -170
  219. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +8 -4
  220. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +10 -6
  221. package/dist/integrations/pi/components/shell-shared-facade.d.ts +213 -0
  222. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +5 -2
  223. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +15 -0
  224. package/dist/integrations/pi/components/submitted-prompt-adapter.js +43 -0
  225. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  226. package/dist/integrations/pi/components/tool-image-presentation.js +86 -0
  227. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  228. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  229. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  230. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  231. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +11 -2
  232. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +41 -3
  233. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  234. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +42 -0
  235. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +40 -0
  236. package/dist/integrations/pi/components/upstream/components/owned-editor.js +166 -0
  237. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +1 -1
  238. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +3 -1
  239. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +3 -2
  240. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +12 -7
  241. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +61 -0
  242. package/dist/integrations/pi/components/upstream/components/tool-execution.js +344 -0
  243. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +280 -0
  244. package/dist/integrations/pi/components/upstream/history/editor-core.js +2062 -0
  245. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +32 -0
  246. package/dist/integrations/pi/components/upstream/history/kill-ring.js +48 -0
  247. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  248. package/dist/integrations/pi/components/upstream/history/printable-key.js +40 -0
  249. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  250. package/dist/integrations/pi/components/upstream/history/text-helpers.js +28 -0
  251. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +22 -0
  252. package/dist/integrations/pi/components/upstream/history/undo-stack.js +36 -0
  253. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  254. package/dist/integrations/pi/components/upstream/history/word-navigation.js +100 -0
  255. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +74 -6
  256. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +1340 -228
  257. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  258. package/dist/integrations/pi/engine/changelog.js +63 -0
  259. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +4 -2
  260. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +15 -5
  261. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  262. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  263. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
  264. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
  265. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  266. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  267. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  268. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
  269. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  270. package/dist/integrations/pi/engine/pending-delivery.js +158 -0
  271. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  272. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  273. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  274. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  275. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  276. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
  277. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +56 -5
  278. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  279. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  280. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  281. package/dist/integrations/pi/engine/session-selection.js +90 -0
  282. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  283. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  284. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  285. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  286. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  287. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  288. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  289. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  290. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  291. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  292. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  293. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  294. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +19 -2
  295. package/dist/integrations/pi/session-ui/clipboard-diagnostics.d.ts +16 -0
  296. package/dist/integrations/pi/session-ui/clipboard-diagnostics.js +65 -0
  297. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  298. package/dist/integrations/pi/session-ui/clipboard-image.js +38 -0
  299. package/dist/integrations/pi/session-ui/editor-hyperlink-budget.d.ts +9 -0
  300. package/dist/integrations/pi/session-ui/editor-hyperlink-budget.js +23 -0
  301. package/dist/integrations/pi/session-ui/image-preparation-client.d.ts +20 -0
  302. package/dist/integrations/pi/session-ui/image-preparation-client.js +145 -0
  303. package/dist/integrations/pi/session-ui/image-preparation.d.ts +18 -0
  304. package/dist/integrations/pi/session-ui/image-preparation.js +126 -0
  305. package/dist/integrations/pi/session-ui/image-source.d.ts +13 -0
  306. package/dist/integrations/pi/session-ui/image-source.js +171 -0
  307. package/dist/integrations/pi/session-ui/image-worker.d.ts +17 -0
  308. package/dist/integrations/pi/session-ui/image-worker.js +23 -0
  309. package/dist/integrations/pi/session-ui/index.d.ts +5 -0
  310. package/dist/integrations/pi/session-ui/index.js +5 -0
  311. package/dist/integrations/pi/session-ui/paste-executor.d.ts +10 -0
  312. package/dist/integrations/pi/session-ui/paste-executor.js +232 -0
  313. package/dist/integrations/pi/session-ui/paste-helper.d.ts +1 -0
  314. package/dist/integrations/pi/session-ui/paste-helper.js +173 -0
  315. package/dist/integrations/pi/session-ui/paste-preparation-client.d.ts +16 -0
  316. package/dist/integrations/pi/session-ui/paste-preparation-client.js +159 -0
  317. package/dist/integrations/pi/session-ui/paste-protocol.d.ts +78 -0
  318. package/dist/integrations/pi/session-ui/paste-protocol.js +18 -0
  319. package/dist/integrations/pi/session-ui/paste-text-preparation.d.ts +20 -0
  320. package/dist/integrations/pi/session-ui/paste-text-preparation.js +134 -0
  321. package/dist/integrations/pi/session-ui/paste-text-worker.d.ts +1 -0
  322. package/dist/integrations/pi/session-ui/paste-text-worker.js +12 -0
  323. package/dist/integrations/pi/session-ui/path-chip-presentation.d.ts +7 -0
  324. package/dist/integrations/pi/session-ui/path-chip-presentation.js +24 -0
  325. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +72 -0
  326. package/dist/integrations/pi/session-ui/prompt-chips.js +503 -0
  327. package/dist/integrations/pi/session-ui/prompt-history-controller.d.ts +36 -0
  328. package/dist/integrations/pi/session-ui/prompt-history-controller.js +170 -0
  329. package/dist/integrations/pi/session-ui/prompt-suggestion-controller.d.ts +35 -0
  330. package/dist/integrations/pi/session-ui/prompt-suggestion-controller.js +207 -0
  331. package/dist/integrations/pi/session-ui/response-copy-coordinator.d.ts +27 -0
  332. package/dist/integrations/pi/session-ui/response-copy-coordinator.js +189 -0
  333. package/dist/integrations/pi/session-ui/response-copy-helper.d.ts +1 -0
  334. package/dist/integrations/pi/session-ui/response-copy-helper.js +122 -0
  335. package/dist/integrations/pi/session-ui/response-copy-protocol.d.ts +56 -0
  336. package/dist/integrations/pi/session-ui/response-copy-protocol.js +5 -0
  337. package/dist/integrations/pi/session-ui/response-copy-transport.d.ts +31 -0
  338. package/dist/integrations/pi/session-ui/response-copy-transport.js +187 -0
  339. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  340. package/dist/integrations/pi/session-ui/route-host.js +1 -0
  341. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +221 -0
  342. package/dist/integrations/pi/session-ui/session-shell-root.js +1305 -0
  343. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  344. package/dist/integrations/pi/session-ui/session-shell.js +1792 -0
  345. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +56 -0
  346. package/dist/integrations/pi/session-ui/session-viewport-controller.js +569 -0
  347. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  348. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  349. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  350. package/dist/integrations/pi/session-ui/system-clipboard.js +156 -0
  351. package/dist/integrations/pi/session-ui/text-paste.d.ts +5 -0
  352. package/dist/integrations/pi/session-ui/text-paste.js +16 -0
  353. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +10 -1
  354. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +255 -11
  355. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +32 -6
  356. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  357. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +81 -0
  358. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +424 -0
  359. package/dist/integrations/pi/tui-runtime/index.d.ts +7 -0
  360. package/dist/integrations/pi/tui-runtime/index.js +7 -0
  361. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  362. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  363. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
  364. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +59 -0
  365. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  366. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +159 -0
  367. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  368. package/dist/native/darwin-arm64/manifest.json +4 -4
  369. package/dist/native/darwin-arm64/process-guardian +0 -0
  370. package/dist/native/linux-x64/manifest.json +3 -3
  371. package/dist/native/linux-x64/process-guardian +0 -0
  372. package/dist/native/win32-x64/manifest.json +3 -3
  373. package/dist/native/win32-x64/process-guardian.exe +0 -0
  374. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +4 -4
  375. package/dist/{src/product-identity.js → product-identity.js} +7 -38
  376. package/dist/{src/product-identity.json → product-identity.json} +13 -27
  377. package/dist/runtime-payload-inventory.json +122333 -0
  378. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  379. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  380. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  381. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  382. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  383. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  384. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  385. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  386. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +7 -0
  387. package/dist/{src/foundation/ui-components → ui/components}/index.js +7 -0
  388. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +2 -8
  389. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +7 -28
  390. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  391. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  392. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  393. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +24 -0
  394. package/dist/ui/components/progress-status.d.ts +2 -0
  395. package/dist/ui/components/progress-status.js +4 -0
  396. package/dist/ui/components/prompt-input.d.ts +32 -0
  397. package/dist/ui/components/prompt-input.js +54 -0
  398. package/dist/ui/components/prompt-row.d.ts +14 -0
  399. package/dist/ui/components/prompt-row.js +20 -0
  400. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  401. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  402. package/dist/ui/components/selection-copy.d.ts +24 -0
  403. package/dist/ui/components/selection-copy.js +39 -0
  404. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  405. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  406. package/dist/ui/components/spans.d.ts +28 -0
  407. package/dist/ui/components/spans.js +266 -0
  408. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  409. package/dist/ui/components/submitted-prompt.js +50 -0
  410. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  411. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  412. package/dist/ui/components/text-selection.d.ts +62 -0
  413. package/dist/ui/components/text-selection.js +210 -0
  414. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  415. package/dist/{src/foundation/ui-components → ui/components}/text.js +67 -5
  416. package/dist/ui/components/transcript-viewport.d.ts +173 -0
  417. package/dist/ui/components/transcript-viewport.js +753 -0
  418. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  419. package/dist/ui/components/visible-hyperlinks.js +97 -0
  420. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  421. package/dist/ui/settings/declarations.js +94 -0
  422. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  423. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +28 -2
  424. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  425. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +41 -22
  426. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  427. package/dist/ui/settings/session.js +164 -0
  428. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  429. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  430. package/docs/architecture/boundaries.md +14 -10
  431. package/docs/architecture/code-documentation.md +77 -0
  432. package/docs/architecture/history-editor-provenance.md +100 -0
  433. package/docs/architecture/internal-naming.md +91 -0
  434. package/docs/architecture/process-guardian-provenance.md +3 -1
  435. package/docs/architecture/project-structure.md +69 -30
  436. package/docs/architecture/prompt-suggestions.md +68 -0
  437. package/docs/architecture/resource-and-data-policy.md +28 -2
  438. package/docs/architecture/response-copy-delivery.md +83 -0
  439. package/docs/architecture/tool-image-presentation.md +62 -0
  440. package/docs/architecture/toolchain.md +24 -10
  441. package/docs/architecture/ui-reference-provenance.md +59 -5
  442. package/docs/ci-release-runbook.md +236 -79
  443. package/docs/features/launch-profiles.md +24 -17
  444. package/docs/features/modal-content-interaction.md +37 -0
  445. package/docs/features/prompt-history.md +149 -0
  446. package/docs/manual-code-streaming-cleanup.md +88 -0
  447. package/docs/manual-ghost-link-baseline.md +89 -0
  448. package/docs/manual-launch-instance-acceptance.md +12 -35
  449. package/docs/manual-owned-ui-checkpoint.md +78 -0
  450. package/docs/manual-pi-boundary-candidate.md +4 -5
  451. package/docs/manual-terminal-colour-check.md +4 -3
  452. package/docs/openspec-archive-automation.md +124 -0
  453. package/docs/repository-governance-live-acceptance.md +77 -0
  454. package/package.json +45 -28
  455. package/dist/src/cli/capabilities.d.ts +0 -15
  456. package/dist/src/cli/dispatch.js +0 -142
  457. package/dist/src/cli/version-stats.js +0 -72
  458. package/dist/src/composition/index.d.ts +0 -48
  459. package/dist/src/composition/index.js +0 -258
  460. package/dist/src/features/launch/intent.d.ts +0 -7
  461. package/dist/src/features/launch/intent.js +0 -4
  462. package/dist/src/features/launch/profiles.d.ts +0 -12
  463. package/dist/src/features/launch/profiles.js +0 -26
  464. package/dist/src/features/owned-ui/run.js +0 -15
  465. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  466. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  467. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  468. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  469. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  470. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  471. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  472. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  473. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  474. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  475. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  476. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  477. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  478. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  479. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  480. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  481. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  482. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  483. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  484. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  485. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  486. package/dist/src/foundation/release/cohort-state.js +0 -202
  487. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  488. package/dist/src/foundation/release/release-gc.js +0 -16
  489. package/dist/src/foundation/supervision/index.d.ts +0 -3
  490. package/dist/src/foundation/supervision/index.js +0 -3
  491. package/dist/src/foundation/supervision/main.d.ts +0 -1
  492. package/dist/src/foundation/supervision/main.js +0 -41
  493. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  494. package/dist/src/foundation/supervision/paths.js +0 -1
  495. package/dist/src/foundation/supervision/server.d.ts +0 -22
  496. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  497. package/dist/src/foundation/ui-components/spans.js +0 -59
  498. package/docs/manual-transparent-checkpoint.md +0 -53
  499. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  500. /package/dist/{src/cli → cli}/index.js +0 -0
  501. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  502. /package/dist/{src/cli → cli}/version.js +0 -0
  503. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  504. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  505. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  506. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  507. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  508. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  509. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  510. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  511. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  512. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  513. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  514. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  515. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  516. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  517. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  518. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  519. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  520. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  521. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  522. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  523. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  524. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  525. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  526. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  527. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  528. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  529. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  530. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  531. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  532. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  533. /package/dist/{src/features → features}/workspace/index.js +0 -0
  534. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  535. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  536. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  537. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  538. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  539. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  540. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  541. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  542. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  543. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  544. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  545. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  546. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  547. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  548. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  549. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  550. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  551. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  552. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  553. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  554. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  555. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  556. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  557. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  558. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  559. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  560. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  561. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  562. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  563. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  564. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  565. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  566. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  567. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  568. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  569. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → integrations/pi/components/editor-interaction.js} +0 -0
  570. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → integrations/pi/components/prompt-input-port.js} +0 -0
  571. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  572. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  573. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  574. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  575. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  576. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  577. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  578. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  579. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  580. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  581. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  582. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  583. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  584. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  585. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  586. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  587. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  588. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  589. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  590. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  591. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  592. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  593. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  594. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  595. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  596. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  597. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  598. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  599. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  600. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  601. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  602. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  603. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  604. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  605. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  606. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  607. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  608. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  609. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  610. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  611. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  612. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  613. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  614. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  615. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  616. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  617. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  618. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  619. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  620. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  621. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  622. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  623. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  624. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  625. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  626. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  627. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  628. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  629. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  630. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  631. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  632. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  633. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  634. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  635. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  636. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  637. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  638. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  639. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  640. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  641. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  642. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,2 @@
1
+ import type { PiShellEditorTextRange } from "./shell-shared-facade.js";
2
+ export declare function promptPathWordRanges(line: string): readonly PiShellEditorTextRange[];
@@ -0,0 +1,37 @@
1
+ const WHITESPACE = /\s/u;
2
+ const DRIVE_ROOT = /^[A-Za-z]:[\\/]/u;
3
+ const UNC_ROOT = /^(?:\\\\|\/\/)[^\\/\s]+[\\/][^\\/\s]+/u;
4
+ const POSIX_ROOT = /^\//u;
5
+ const EXPLICIT_RELATIVE_ROOT = /^(?:\.{1,2}|~)[\\/]/u;
6
+ export function promptPathWordRanges(line) {
7
+ const ranges = [];
8
+ let index = 0;
9
+ while (index < line.length) {
10
+ while (index < line.length && WHITESPACE.test(line[index] ?? ""))
11
+ index += 1;
12
+ if (index >= line.length)
13
+ break;
14
+ const start = index;
15
+ const quote = line[index] === '"' || line[index] === "'" ? line[index] : undefined;
16
+ if (quote !== undefined) {
17
+ const closing = line.indexOf(quote, index + 1);
18
+ if (closing >= 0 && (closing + 1 === line.length || WHITESPACE.test(line[closing + 1] ?? ""))) {
19
+ if (isExplicitPath(line.slice(index + 1, closing)))
20
+ ranges.push({ start, end: closing + 1 });
21
+ index = closing + 1;
22
+ continue;
23
+ }
24
+ }
25
+ while (index < line.length && !WHITESPACE.test(line[index] ?? ""))
26
+ index += 1;
27
+ if (isExplicitPath(line.slice(start, index)))
28
+ ranges.push({ start, end: index });
29
+ }
30
+ return ranges;
31
+ }
32
+ function isExplicitPath(value) {
33
+ return DRIVE_ROOT.test(value)
34
+ || UNC_ROOT.test(value)
35
+ || POSIX_ROOT.test(value)
36
+ || EXPLICIT_RELATIVE_ROOT.test(value);
37
+ }
@@ -0,0 +1,18 @@
1
+ export interface PiShellPromptInputGeometry {
2
+ readonly prefixWidth: number;
3
+ readonly innerWidth: number;
4
+ readonly paddingX: number;
5
+ readonly contentWidth: number;
6
+ readonly layoutWidth: number;
7
+ }
8
+ export interface PiShellPromptInputBody {
9
+ readonly rows: readonly string[];
10
+ readonly topRule?: string | undefined;
11
+ readonly bottomRule?: string | undefined;
12
+ readonly after?: readonly string[];
13
+ }
14
+ export interface PiShellPromptInputPresentation {
15
+ geometry(width: number, padding?: number): PiShellPromptInputGeometry;
16
+ styleRule(text: string): string;
17
+ render(width: number, body: (innerWidth: number) => PiShellPromptInputBody, ruled?: boolean, padding?: number): string[];
18
+ }
@@ -2,5 +2,6 @@ export * from "./shell-shared-facade.js";
2
2
  export * from "./shell-editor-autocomplete.js";
3
3
  export * from "./shell-selectors-dialogs.js";
4
4
  export * from "./shell-presenters-transcript.js";
5
+ export * from "./shell-presenters-info.js";
5
6
  export * from "./shell-footer-status.js";
6
7
  export * from "./shell-extension-ui.js";
@@ -2,5 +2,6 @@ export * from "./shell-shared-facade.js";
2
2
  export * from "./shell-editor-autocomplete.js";
3
3
  export * from "./shell-selectors-dialogs.js";
4
4
  export * from "./shell-presenters-transcript.js";
5
+ export * from "./shell-presenters-info.js";
5
6
  export * from "./shell-footer-status.js";
6
7
  export * from "./shell-extension-ui.js";
@@ -0,0 +1,297 @@
1
+ import { getSelectListTheme } from "@earendil-works/pi-coding-agent";
2
+ import { CombinedAutocompleteProvider, matchesKey, setKeybindings, visibleWidth, } from "#pi-tui";
3
+ import { PROMPT_HISTORY_EDITOR_REPLACEMENT } from "../../../contracts/owned-ui/index.js";
4
+ import { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
5
+ import { OwnedEditor } from "./upstream/components/owned-editor.js";
6
+ import { OwnedEditorUxInterception, createPromptSelectionInterceptor, editorVisualLineCount, } from "./owned-editor-ux.js";
7
+ import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
8
+ import { createTuiFacade, ensureTheme, isAutocompleteProvider, } from "./shell-shared-facade.js";
9
+ export const PINNED_PI_BUILTIN_SLASH_COMMANDS = [
10
+ { name: "settings", description: "Open settings menu" },
11
+ { name: "model", description: "Select model (opens selector UI)", argumentHint: "<provider/model>" },
12
+ { name: "scoped-models", description: "Enable/disable models for Ctrl+P cycling" },
13
+ { name: "export", description: "Export session (HTML default, or specify path: .html/.jsonl)" },
14
+ { name: "import", description: "Import and resume a session from a JSONL file" },
15
+ { name: "share", description: "Share session as a secret GitHub gist" },
16
+ { name: "copy", description: "Copy last agent message to clipboard" },
17
+ { name: "name", description: "Set session display name" },
18
+ { name: "session", description: "Show session info and stats" },
19
+ { name: "changelog", description: "Show changelog entries" },
20
+ { name: "hotkeys", description: "Show all keyboard shortcuts" },
21
+ { name: "fork", description: "Create a new fork from a previous user message" },
22
+ { name: "clone", description: "Duplicate the current session at the current position" },
23
+ { name: "tree", description: "Navigate session tree (switch branches)" },
24
+ { name: "trust", description: "Save project trust decision for future sessions" },
25
+ { name: "login", description: "Configure provider authentication", argumentHint: "<provider>" },
26
+ { name: "logout", description: "Remove provider authentication" },
27
+ { name: "new", description: "Start a new session" },
28
+ { name: "compact", description: "Manually compact the session context" },
29
+ { name: "resume", description: "Resume a different session" },
30
+ { name: "reload", description: "Reload keybindings, extensions, skills, prompts, themes, and context files" },
31
+ { name: "quit", description: "Quit pi" },
32
+ ];
33
+ export function createPiShellEditor(options) {
34
+ ensureTheme();
35
+ const tui = createTuiFacade(options);
36
+ const inputPresentation = options.keybindingProfile === "a1" ? options.promptPresentation?.input : undefined;
37
+ const keybindings = options.keybindingProfile === "a1"
38
+ ? KeybindingsManager.createForOwnedInput(options.agentDir)
39
+ : KeybindingsManager.create(options.agentDir);
40
+ setKeybindings(keybindings);
41
+ if (options.persistentHistory === true && options.keybindingProfile === "a1" && options.historyEditor === undefined) {
42
+ throw new Error("Persistent history requires the loaded owned editor");
43
+ }
44
+ const scrollInfo = { emitted: false, counter: undefined };
45
+ const selectListTheme = getSelectListTheme();
46
+ const EditorClass = options.keybindingProfile === "a1" && options.persistentHistory === true ? options.historyEditor : OwnedEditor;
47
+ const editor = new EditorClass(tui, {
48
+ borderColor: (value) => inputPresentation === undefined ? piTheme().fg("borderMuted", value) : inputPresentation.styleRule(value),
49
+ selectList: options.keybindingProfile !== "a1" ? selectListTheme : {
50
+ ...selectListTheme,
51
+ scrollInfo: text => {
52
+ // Protocol: the pinned list emits its final counter row through this callback.
53
+ scrollInfo.emitted = true;
54
+ scrollInfo.counter = /^ \((\d+\/\d+)\)$/u.exec(text)?.[1];
55
+ return selectListTheme.scrollInfo(text);
56
+ },
57
+ },
58
+ }, keybindings, {
59
+ paddingX: PINNED_PI_LAYOUT.editorPaddingX,
60
+ autocompleteMaxVisible: PINNED_PI_LAYOUT.autocompleteMaxVisible,
61
+ persistentHistory: options.persistentHistory === true,
62
+ styleHistoryLabel: text => piTheme().fg("dim", text),
63
+ ...(options.keybindingProfile === "a1" ? {
64
+ terminalRows: options.getRows,
65
+ getVisualLineCount: (width) => editorVisualLineCount(editor, width),
66
+ } : {}),
67
+ ...(options.keybindingProfile === "a1" && options.promptPresentation !== undefined ? {
68
+ ...(inputPresentation === undefined ? {} : { inputPresentation }),
69
+ styleSuggestion: options.promptPresentation.styleSuggestion,
70
+ styleSuggestionCaret: options.promptPresentation.styleSuggestionCaret,
71
+ } : {}),
72
+ });
73
+ const editorUx = options.keybindingProfile === "a1"
74
+ ? new OwnedEditorUxInterception([
75
+ createPromptSelectionInterceptor(editor, keybindings, {
76
+ copyText: options.onCopyText ?? (() => { }),
77
+ readClipboardContent: options.readClipboardContent ?? (async () => null),
78
+ ...(options.beginClipboardPaste === undefined ? {} : { beginClipboardPaste: options.beginClipboardPaste }),
79
+ ...(options.beginTextPaste === undefined ? {} : { beginTextPaste: options.beginTextPaste }),
80
+ ...(options.deferTextPaste === undefined ? {} : { deferTextPaste: options.deferTextPaste }),
81
+ ...(options.onPasteRejected === undefined ? {} : { onPasteRejected: options.onPasteRejected }),
82
+ ...(options.onPasteInput === undefined ? {} : { onPasteInput: options.onPasteInput }),
83
+ transformPastedContent: options.transformPastedContent ?? (content => content.kind === "text" ? content.text : ""),
84
+ atomicRanges: options.editorAtomicRanges ?? (() => []),
85
+ hiddenRanges: options.editorHiddenRanges ?? (() => []),
86
+ expandCopiedText: options.expandCopiedEditorText ?? (text => text),
87
+ paintSelection: options.paintEditorSelection ?? (line => line),
88
+ decorateRow: options.decorateEditorRow ?? (row => row),
89
+ requestRender: options.requestRender,
90
+ getRows: options.getRows,
91
+ ...(inputPresentation === undefined ? {} : { promptGeometry: (width, padding) => inputPresentation.geometry(width, padding) }),
92
+ }),
93
+ ], {
94
+ render: width => editor.render(width),
95
+ handleInput: data => editor.handleInput(data),
96
+ })
97
+ : undefined;
98
+ let thinkingLevel = "off";
99
+ let isBashMode = false;
100
+ const updateBorderColor = () => {
101
+ editor.borderColor = inputPresentation !== undefined
102
+ ? text => inputPresentation.styleRule(text)
103
+ : isBashMode ? piTheme().getBashModeBorderColor() : piTheme().getThinkingBorderColor(thinkingLevel);
104
+ tui.requestRender();
105
+ };
106
+ let autocompleteProvider;
107
+ const setAutocompleteCommands = (commands) => {
108
+ const additions = new Map(commands.map(command => [command.name, command]));
109
+ const builtInNames = new Set(PINNED_PI_BUILTIN_SLASH_COMMANDS.map(command => command.name));
110
+ const builtIns = PINNED_PI_BUILTIN_SLASH_COMMANDS.map(command => autocompleteCommand(command, additions.get(command.name)));
111
+ const resources = commands.filter(command => !builtInNames.has(command.name)).map(command => autocompleteCommand(command));
112
+ autocompleteProvider = new CombinedAutocompleteProvider([...builtIns, ...resources], options.cwd ?? process.cwd());
113
+ editor.setAutocompleteProvider(autocompleteProvider);
114
+ };
115
+ setAutocompleteCommands(options.autocompleteCommands ?? []);
116
+ let submitHandler = options.onSubmit;
117
+ let interruptHandler = options.onInterrupt ?? (() => { });
118
+ editor.onSubmit = text => submitHandler(text);
119
+ editor.onChange = text => {
120
+ const nextBashMode = text.trimStart().startsWith("!");
121
+ if (nextBashMode !== isBashMode) {
122
+ isBashMode = nextBashMode;
123
+ updateBorderColor();
124
+ }
125
+ options.onChange?.(text);
126
+ };
127
+ if (options.onInterrupt !== undefined) {
128
+ editor.onEscape = () => interruptHandler();
129
+ editor.onAction("app.interrupt", () => interruptHandler());
130
+ }
131
+ if (options.onClear !== undefined)
132
+ editor.onAction("app.clear", options.onClear);
133
+ if (options.onExit !== undefined) {
134
+ editor.onCtrlD = options.onExit;
135
+ editor.onAction("app.exit", options.onExit);
136
+ }
137
+ if (options.onSuspend !== undefined)
138
+ editor.onAction("app.suspend", options.onSuspend);
139
+ if (options.onExternalEditor !== undefined)
140
+ editor.onAction("app.editor.external", options.onExternalEditor);
141
+ if (options.onPasteImage !== undefined) {
142
+ editor.onPasteImage = options.onPasteImage;
143
+ editor.onAction("app.clipboard.pasteImage", options.onPasteImage);
144
+ }
145
+ if (options.onExtensionShortcut !== undefined)
146
+ editor.onExtensionShortcut = options.onExtensionShortcut;
147
+ if (options.onModelSelect !== undefined)
148
+ editor.onAction("app.model.select", options.onModelSelect);
149
+ if (options.onModelCycle !== undefined) {
150
+ editor.onAction("app.model.cycleForward", () => options.onModelCycle?.("forward"));
151
+ editor.onAction("app.model.cycleBackward", () => options.onModelCycle?.("backward"));
152
+ }
153
+ if (options.onThinkingCycle !== undefined)
154
+ editor.onAction("app.thinking.cycle", options.onThinkingCycle);
155
+ if (options.onThinkingToggle !== undefined)
156
+ editor.onAction("app.thinking.toggle", options.onThinkingToggle);
157
+ if (options.onToolsExpand !== undefined)
158
+ editor.onAction("app.tools.expand", options.onToolsExpand);
159
+ if (options.onMessageCopy !== undefined)
160
+ editor.onAction("app.message.copy", options.onMessageCopy);
161
+ if (options.onFollowUp !== undefined)
162
+ editor.onAction("app.message.followUp", options.onFollowUp);
163
+ if (options.onDequeue !== undefined)
164
+ editor.onAction("app.message.dequeue", options.onDequeue);
165
+ if (options.onPromptSuggestionAccepted !== undefined) {
166
+ editor.onPromptSuggestionAccepted = options.onPromptSuggestionAccepted;
167
+ }
168
+ let bodyGeometry = { rowOffset: 0, rowCount: 0 };
169
+ return {
170
+ ...(editorUx === undefined ? {} : { bodyGeometry: () => bodyGeometry }),
171
+ render: width => {
172
+ scrollInfo.emitted = false;
173
+ scrollInfo.counter = undefined;
174
+ const rows = editorUx?.render(width) ?? editor.render(width);
175
+ if (editorUx === undefined)
176
+ return rows;
177
+ const rowCount = editor.getRenderedBodyRowCount();
178
+ const menu = rows.slice(rowCount, scrollInfo.emitted ? -1 : undefined);
179
+ const label = scrollInfo.counter === undefined ? "" : `${scrollInfo.counter} `;
180
+ // Compatibility: match the history border's four-cell inset and dim label style.
181
+ const counterBorder = label.length > 0 && 4 + visibleWidth(label) <= width
182
+ ? editor.borderColor("─── ") + piTheme().fg("dim", label)
183
+ + editor.borderColor("─".repeat(width - 4 - visibleWidth(label)))
184
+ : editor.borderColor("─".repeat(width));
185
+ // Rationale: when the menu is open, drop the plain top border above the
186
+ // menu and instead show the counter on the border directly above the input
187
+ // prompt (the body's own top border row), mirroring the history header.
188
+ const bodyRows = menu.length === 0
189
+ ? rows.slice(0, rowCount)
190
+ : [counterBorder, ...rows.slice(1, rowCount)];
191
+ bodyGeometry = { rowOffset: menu.length, rowCount };
192
+ // Invariant: decorate/select in body coordinates first, then move the whole menu.
193
+ // Completion state, sizing, styles, and pagination still belong to the editor.
194
+ return [...menu, ...bodyRows];
195
+ },
196
+ activateKeybindings: () => setKeybindings(keybindings),
197
+ keybindingConfig: () => keybindings.getEffectiveConfig(),
198
+ reloadKeybindings: () => { keybindings.reload(); setKeybindings(keybindings); },
199
+ matchesTerminalKey: (data, key) => matchesKey(data, key),
200
+ handleInput: data => {
201
+ // Compatibility: an unassigned reverse Tab must not clear selection or reach autocomplete fallback.
202
+ if (editorUx !== undefined && matchesKey(data, "shift+tab")
203
+ && !Object.values(keybindings.getEffectiveConfig()).some(keys => (Array.isArray(keys) ? keys : [keys]).some(key => key !== undefined && matchesKey(data, key))))
204
+ return;
205
+ if (editorUx === undefined)
206
+ editor.handleInput(data);
207
+ else
208
+ editorUx.handleInput(data);
209
+ },
210
+ invalidate: () => editor.invalidate(),
211
+ setFocused: focused => {
212
+ editor.focused = focused;
213
+ },
214
+ getText: () => editor.getExpandedText(),
215
+ setText: text => {
216
+ editorUx?.reset();
217
+ editor.setText(text);
218
+ },
219
+ insertText: text => {
220
+ editorUx?.reset();
221
+ editor.insertTextAtCursor(text);
222
+ },
223
+ addToHistory: text => editor.addToHistory(text),
224
+ ...(editor.recall === undefined ? {} : { recall: editor.recall, historyReplacement: PROMPT_HISTORY_EDITOR_REPLACEMENT }),
225
+ setSubmitEnabled: enabled => {
226
+ editor.disableSubmit = !enabled;
227
+ },
228
+ setSubmitHandler: handler => { submitHandler = handler; },
229
+ setInterruptHandler: handler => { interruptHandler = handler; },
230
+ setAutocompleteCommands,
231
+ setPaddingX(padding) {
232
+ editor.setPaddingX(padding);
233
+ editor.invalidate();
234
+ tui.requestRender();
235
+ },
236
+ setAutocompleteMaxVisible(maxVisible) {
237
+ editor.setAutocompleteMaxVisible(maxVisible);
238
+ editor.invalidate();
239
+ tui.requestRender();
240
+ },
241
+ addAutocompleteProvider(factory) {
242
+ if (typeof factory !== "function")
243
+ throw new TypeError("extension autocomplete factory must be a function");
244
+ const candidate = Reflect.apply(factory, undefined, [autocompleteProvider]);
245
+ if (!isAutocompleteProvider(candidate))
246
+ throw new TypeError("extension autocomplete factory returned a malformed provider");
247
+ autocompleteProvider = candidate;
248
+ editor.setAutocompleteProvider(autocompleteProvider);
249
+ },
250
+ setThinkingLevel(level) {
251
+ if (thinkingLevel === level)
252
+ return;
253
+ thinkingLevel = level;
254
+ updateBorderColor();
255
+ },
256
+ setPromptSuggestion(text) {
257
+ editor.setPromptSuggestion(text);
258
+ editor.invalidate();
259
+ },
260
+ canPresentPromptSuggestion: () => editor.canPresentPromptSuggestion(),
261
+ promptSuggestionBlockReason: () => {
262
+ if (!editor.focused)
263
+ return "not-focused";
264
+ if (editor.disableSubmit)
265
+ return "not-ready";
266
+ if (editor.getText().length > 0)
267
+ return "draft";
268
+ if (editor.isShowingAutocomplete())
269
+ return "autocomplete";
270
+ return editor.canPresentPromptSuggestion() ? null : "prompt-mode";
271
+ },
272
+ hasSelection: () => editorUx?.hasSelection() ?? false,
273
+ ownsPointer: () => editorUx?.ownsPointer() ?? false,
274
+ handlePointer: event => editorUx?.handlePointer(event) ?? false,
275
+ pasteClipboard: () => editorUx?.pasteClipboard() ?? false,
276
+ cancelPendingPastes: () => editorUx?.cancelPendingPastes(),
277
+ };
278
+ }
279
+ function autocompleteCommand(command, addition) {
280
+ const argumentOptions = addition?.argumentOptions ?? command.argumentOptions;
281
+ return {
282
+ ...command,
283
+ ...addition,
284
+ ...(argumentOptions === undefined ? {} : {
285
+ getArgumentCompletions: (prefix) => {
286
+ const normalized = prefix.toLowerCase();
287
+ return argumentOptions
288
+ .filter(option => option.id.toLowerCase().includes(normalized) || option.label.toLowerCase().includes(normalized))
289
+ .map(option => ({
290
+ value: option.id,
291
+ label: option.label,
292
+ ...(option.description === undefined ? {} : { description: option.description }),
293
+ }));
294
+ },
295
+ }),
296
+ };
297
+ }
@@ -1,5 +1,5 @@
1
1
  import { type ExtensionUIContext } from "@earendil-works/pi-coding-agent";
2
- import type { OwnedUiExtensionOverlayHandle, OwnedUiExtensionOverlayOptions } from "../owned-ui-contracts/index.js";
2
+ import type { OwnedUiExtensionOverlayHandle, OwnedUiExtensionOverlayOptions } from "../../../contracts/owned-ui/index.js";
3
3
  import { type PiShellComponentPort, type PiShellEditorOptions } from "./shell-shared-facade.js";
4
4
  export interface PiExtensionUiBridgeHost {
5
5
  readonly runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">;
@@ -1,7 +1,7 @@
1
- import type { OwnedUiSessionViewModel } from "../owned-ui-contracts/index.js";
1
+ import type { OwnedUiSessionViewModel } from "../../../contracts/owned-ui/index.js";
2
2
  import { type PiShellViewComponentPort, type PiShellStatusPort, type PiShellQueuedInputPort, type PiShellHeaderPort, type PiShellResourceEntry, type PiShellLoadedResourcesPort, type PiShellHeaderOptions, type PiShellEditorOptions } from "./shell-shared-facade.js";
3
3
  export declare function createPiShellHeader(options?: PiShellHeaderOptions): PiShellHeaderPort;
4
4
  export declare function createPiShellLoadedResources(resources: readonly PiShellResourceEntry[], initialExpanded?: boolean): PiShellLoadedResourcesPort;
5
- export declare function createPiShellStatus(view: OwnedUiSessionViewModel, runtime?: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellStatusPort;
6
- export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string): PiShellViewComponentPort;
7
- export declare function createPiQueuedInputStatus(submissions: readonly string[]): PiShellQueuedInputPort;
5
+ export declare function createPiShellStatus(view: OwnedUiSessionViewModel, formatProgressStatus: (message: string) => string, runtime?: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellStatusPort;
6
+ export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1"): PiShellViewComponentPort;
7
+ export declare function createPiQueuedInputStatus(submissions: readonly string[], presentation?: "pinned" | "custom-viewport"): PiShellQueuedInputPort;
@@ -1,6 +1,7 @@
1
1
  import { rawKeyHint, VERSION } from "@earendil-works/pi-coding-agent";
2
2
  import { Spacer, Text, } from "#pi-tui";
3
3
  import { SessionFooter } from "./upstream/components/session-footer.js";
4
+ import { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
4
5
  import { WorkingStatusIndicator } from "./upstream/components/status-indicator.js";
5
6
  import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
6
7
  import { createTuiFacade, ensureTheme, } from "./shell-shared-facade.js";
@@ -16,6 +17,8 @@ export function createPiShellHeader(options = {}) {
16
17
  render(width) {
17
18
  if (options.quiet)
18
19
  return [];
20
+ if (expanded && options.getKeybindings !== undefined)
21
+ full.setText(expandedHeaderText(options.getKeybindings()));
19
22
  return [
20
23
  ...new Spacer(1).render(width),
21
24
  ...(expanded ? full : compact).render(width),
@@ -67,23 +70,30 @@ export function createPiShellLoadedResources(resources, initialExpanded = false)
67
70
  invalidate() { },
68
71
  };
69
72
  }
70
- export function createPiShellStatus(view, runtime) {
73
+ export function createPiShellStatus(view, formatProgressStatus, runtime) {
71
74
  ensureTheme();
72
75
  const statusUi = createTuiFacade(runtime ?? { getColumns: () => 80, getRows: () => 24, requestRender() { } });
73
76
  let workingOverride;
74
- let component = statusComponent(view, statusUi, workingOverride);
75
- let signature = statusSignature(view, workingOverride);
77
+ let outputPad = PINNED_PI_LAYOUT.outputPad;
78
+ let placement = statusPlacement(view, workingOverride);
79
+ let component = statusComponent(view, statusUi, workingOverride, outputPad, formatProgressStatus, placement);
80
+ let signature = statusSignature(view, workingOverride, outputPad, placement);
76
81
  const rebuild = () => {
77
- const nextSignature = statusSignature(view, workingOverride);
82
+ const nextPlacement = statusPlacement(view, workingOverride);
83
+ const nextSignature = statusSignature(view, workingOverride, outputPad, nextPlacement);
78
84
  if (nextSignature === signature)
79
85
  return;
80
86
  if (component !== undefined && "dispose" in component && typeof component.dispose === "function")
81
87
  component.dispose();
88
+ placement = nextPlacement;
82
89
  signature = nextSignature;
83
- component = statusComponent(view, statusUi, workingOverride);
90
+ component = statusComponent(view, statusUi, workingOverride, outputPad, formatProgressStatus, placement);
84
91
  };
85
92
  return {
86
93
  render: width => component?.render(width) ?? [],
94
+ renderDock: width => placement === "dock" ? component?.render(width) ?? [] : [],
95
+ renderLive: width => placement === "live" ? component?.render(width) ?? [] : [],
96
+ placement: () => placement,
87
97
  invalidate: () => component?.invalidate(),
88
98
  update(next) {
89
99
  view = next;
@@ -93,6 +103,10 @@ export function createPiShellStatus(view, runtime) {
93
103
  workingOverride = message;
94
104
  rebuild();
95
105
  },
106
+ setOutputPad(padding) {
107
+ outputPad = padding;
108
+ rebuild();
109
+ },
96
110
  dispose() {
97
111
  if (component !== undefined && "dispose" in component && typeof component.dispose === "function")
98
112
  component.dispose();
@@ -100,9 +114,9 @@ export function createPiShellStatus(view, runtime) {
100
114
  },
101
115
  };
102
116
  }
103
- export function createPiShellFooter(view, cwd) {
117
+ export function createPiShellFooter(view, cwd, profile = "pi") {
104
118
  ensureTheme();
105
- const footer = new SessionFooter(() => view, cwd);
119
+ const footer = new SessionFooter(() => view, cwd, profile);
106
120
  return {
107
121
  render: width => footer.render(width),
108
122
  invalidate: () => footer.invalidate(),
@@ -110,34 +124,54 @@ export function createPiShellFooter(view, cwd) {
110
124
  dispose: () => footer.dispose(),
111
125
  };
112
126
  }
113
- export function createPiQueuedInputStatus(submissions) {
114
- const text = new Text(queuedInputText(submissions), 1, 0);
127
+ export function createPiQueuedInputStatus(submissions, presentation = "pinned") {
128
+ const text = new Text(queuedInputText(submissions, presentation), 1, 0);
115
129
  return {
116
130
  render: width => submissions.length === 0 ? [] : text.render(width),
117
131
  invalidate: () => text.invalidate(),
118
132
  update(next) {
119
133
  submissions = next;
120
- text.setText(queuedInputText(next));
134
+ text.setText(queuedInputText(next, presentation));
121
135
  },
122
136
  };
123
137
  }
124
- function statusComponent(view, ui, workingOverride) {
138
+ function statusPlacement(view, workingOverride) {
139
+ // Invariant: live spinner placement follows semantic lifecycle, not text. An extension
140
+ // override is visible only when its lifecycle is busy, so a stale override cannot spin
141
+ // after completion or make an idle informational status scrollable.
125
142
  if (view.lifecycle === "busy")
126
- return new WorkingStatusIndicator(ui, workingOverride ?? view.status.workingMessage ?? "Working...");
127
- if (view.lifecycle === "failed") {
128
- return new Text(piTheme().fg("error", view.status.diagnostics.at(-1) ?? "Session failed"), PINNED_PI_LAYOUT.outputPad, 0);
143
+ return "live";
144
+ if (view.lifecycle === "failed")
145
+ return "dock";
146
+ return view.status.workingMessage === null ? "hidden" : "dock";
147
+ }
148
+ function statusComponent(view, ui, workingOverride, outputPad, formatProgressStatus, placement) {
149
+ if (placement === "live") {
150
+ return new WorkingStatusIndicator(ui, formatProgressStatus(workingOverride ?? view.status.workingMessage ?? "Working"));
129
151
  }
130
- if (view.status.workingMessage !== null) {
131
- return new Text(piTheme().fg("muted", view.status.workingMessage), PINNED_PI_LAYOUT.outputPad, 0);
152
+ if (placement === "dock") {
153
+ if (view.lifecycle === "failed") {
154
+ return new Text(piTheme().fg("error", view.status.diagnostics.at(-1) ?? "Session failed"), outputPad, 0);
155
+ }
156
+ return new Text(piTheme().fg("muted", view.status.workingMessage), outputPad, 0);
132
157
  }
133
158
  return undefined;
134
159
  }
135
- function statusSignature(view, workingOverride) {
136
- return `${view.lifecycle}\u0000${workingOverride ?? ""}\u0000${view.status.workingMessage ?? ""}\u0000${view.status.diagnostics.at(-1) ?? ""}`;
160
+ function statusSignature(view, workingOverride, outputPad, placement) {
161
+ return `${placement}\u0000${outputPad}\u0000${view.lifecycle}\u0000${workingOverride ?? ""}\u0000${view.status.workingMessage ?? ""}\u0000${view.status.diagnostics.at(-1) ?? ""}`;
137
162
  }
138
- function queuedInputText(submissions) {
163
+ function queuedInputText(submissions, presentation) {
164
+ if (submissions.length === 0)
165
+ return "";
139
166
  const theme = piTheme();
140
- return submissions.map(submission => theme.fg("muted", `Steering: ${submission.replaceAll("\n", " ⏎ ")}`)).join("\n");
167
+ if (presentation === "pinned") {
168
+ return submissions.map(submission => theme.fg("muted", `Steering: ${submission.replaceAll("\n", " ⏎ ")}`)).join("\n");
169
+ }
170
+ const messages = submissions.map(submission => theme.fg("dim", `Steering: ${submission.replaceAll("\n", " ⏎ ")}`));
171
+ const dequeueHint = theme.fg("dim", "↳ Alt+Up to edit all queued messages");
172
+ // Compatibility: the custom viewport matches Pi's interactive queue presentation while the
173
+ // comparison shell remains byte-for-byte compatible with its pinned fixture.
174
+ return ["", ...messages, dequeueHint].join("\n");
141
175
  }
142
176
  function compactHeaderText() {
143
177
  const theme = piTheme();
@@ -153,7 +187,8 @@ function compactHeaderText() {
153
187
  const onboarding = theme.fg("dim", "Pi can explain its own features and look up its docs. Ask it how to use or extend Pi.");
154
188
  return `${logo}\n${instructions}\n${compactOnboarding}\n\n${onboarding}`;
155
189
  }
156
- function expandedHeaderText() {
190
+ function expandedHeaderText(bindings) {
191
+ const keys = bindings === undefined ? undefined : KeybindingsManager.fromOwnedBindings(bindings);
157
192
  const instructions = [
158
193
  rawKeyHint("escape", "to interrupt"),
159
194
  rawKeyHint("ctrl+c", "to clear"),
@@ -161,9 +196,9 @@ function expandedHeaderText() {
161
196
  rawKeyHint("ctrl+d", "to exit (empty)"),
162
197
  rawKeyHint(process.platform === "win32" ? "" : "ctrl+z", "to suspend"),
163
198
  rawKeyHint("ctrl+k", "to delete to end"),
164
- rawKeyHint("shift+tab", "to cycle thinking level"),
199
+ rawKeyHint(keys?.getKeys("app.thinking.cycle").join("/") ?? "shift+tab", "to cycle thinking level"),
165
200
  rawKeyHint("ctrl+p/shift+ctrl+p", "to cycle models"),
166
- rawKeyHint("ctrl+l", "to select model"),
201
+ rawKeyHint(keys === undefined ? "ctrl+l" : keys.getKeys("app.model.select").join("/") || "/model", "to select model"),
167
202
  rawKeyHint("ctrl+o", "to expand tools"),
168
203
  rawKeyHint("ctrl+t", "to expand thinking"),
169
204
  rawKeyHint("ctrl+g", "for external editor"),
@@ -0,0 +1,43 @@
1
+ import { type KeybindingsConfig } from "#pi-tui";
2
+ import { type PiShellComponentPort, type PiShellExtensionRendererResolver } from "./shell-shared-facade.js";
3
+ export interface PiShellSessionInfoPresentation {
4
+ readonly sessionName?: string;
5
+ readonly stats: {
6
+ readonly sessionFile?: string;
7
+ readonly sessionId: string;
8
+ readonly userMessages: number;
9
+ readonly assistantMessages: number;
10
+ readonly toolCalls: number;
11
+ readonly toolResults: number;
12
+ readonly totalMessages: number;
13
+ readonly tokens: {
14
+ readonly input: number;
15
+ readonly output: number;
16
+ readonly cacheRead: number;
17
+ readonly cacheWrite: number;
18
+ readonly total: number;
19
+ };
20
+ readonly cost: number;
21
+ };
22
+ readonly cacheWaste: {
23
+ readonly missedTokens: number;
24
+ readonly missedCost: number;
25
+ readonly missCount: number;
26
+ };
27
+ readonly usageBreakdown: readonly {
28
+ readonly key: string;
29
+ readonly cost: number;
30
+ readonly tokens: number;
31
+ }[];
32
+ }
33
+ export declare function renderPiShellStatusText(message: string, width: number, outputPad?: 0 | 1): readonly string[];
34
+ export interface PiShellCommandMessagePresentation {
35
+ readonly kind: "error" | "warning" | "accent" | "new" | "name" | "debug";
36
+ readonly message: string;
37
+ readonly detail?: string;
38
+ }
39
+ export declare function renderPiShellCommandMessage(presentation: PiShellCommandMessagePresentation, width: number, outputPad?: 0 | 1): readonly string[];
40
+ export declare function createPiShellSessionInfo(presentation: PiShellSessionInfoPresentation): PiShellComponentPort;
41
+ export declare function createPiShellCollapsedChangelog(): PiShellComponentPort;
42
+ export declare function createPiShellChangelog(markdown: string): PiShellComponentPort;
43
+ export declare function createPiShellHotkeys(bindings?: KeybindingsConfig, getShortcuts?: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile?: "pi" | "a1"): PiShellComponentPort;