@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
@@ -1,4 +1,4 @@
1
- import type { PaneInputResult, PaneMouseEvent, PaneRect, UiTheme } from "../ui-components/index.js";
1
+ import type { PaneInputResult, PaneMouseEvent, PaneRect, RenderCacheContract, UiTheme } from "../components/index.js";
2
2
  export interface AppSize {
3
3
  readonly width: number;
4
4
  readonly height: number;
@@ -27,6 +27,8 @@ export interface AppHostServices {
27
27
  }
28
28
  export interface UiApp {
29
29
  readonly id: string;
30
+ /** Optional declared revisions used by the host's shared frame cache. */
31
+ readonly renderCache?: RenderCacheContract;
30
32
  render(rect: PaneRect, host: AppHostServices): readonly string[];
31
33
  onInput?(data: string, host: AppHostServices): PaneInputResult;
32
34
  onMouse?(event: PaneMouseEvent, host: AppHostServices): PaneInputResult;
@@ -39,4 +41,24 @@ export interface AppRegistration {
39
41
  readonly route: string;
40
42
  create(): UiApp;
41
43
  }
44
+ /** A neutral owned-app surface mounted by a surrounding presentation runtime. */
45
+ export interface UiRouteSurface {
46
+ readonly id: string;
47
+ /** Renders exactly `height` rows of at most `width` columns. */
48
+ render(width: number, height: number): readonly string[];
49
+ /** True when the key was consumed; false leaves it to the surrounding shell. */
50
+ handleInput(data: string): boolean;
51
+ /** Mouse report in surface-local coordinates. True when consumed. */
52
+ handleMouse(event: PaneMouseEvent): boolean;
53
+ isClosed(): boolean;
54
+ close(): void;
55
+ onRenderRequested(listener: () => void): void;
56
+ /** The surface asks to leave A1 entirely, not merely to close itself. */
57
+ onExitRequested(listener: () => void): void;
58
+ }
59
+ /** Route lookup seam shared by owned apps and any presentation runtime hosting them. */
60
+ export interface UiRouteHost {
61
+ claims(route: string): boolean;
62
+ open(route: string): UiRouteSurface | null;
63
+ }
42
64
  export declare function assertAppRegistration(registration: AppRegistration): void;
@@ -1,4 +1,4 @@
1
- import { type PaneInputResult, type PaneMouseEvent, type UiTheme } from "../ui-components/index.js";
1
+ import { type PaneInputResult, type PaneMouseEvent, type UiTheme } from "../components/index.js";
2
2
  import type { AppSize, UiApp } from "./contracts.js";
3
3
  import type { UiAppRegistry } from "./registry.js";
4
4
  export interface AppHostSurface {
@@ -1,5 +1,5 @@
1
- import { FrameCache, finalizeFrame, } from "../ui-components/index.js";
2
- // The interrupt byte, written as an escape: as a raw byte it is invisible to
1
+ import { FrameCache, finalizeFrame, } from "../components/index.js";
2
+ // Invariant: the interrupt byte is written as an escape: as a raw byte it is invisible to
3
3
  // every text tool, and this constant had already been emptied by one.
4
4
  const INTERRUPT = "";
5
5
  /** How long the first interrupt of the chord stays armed. */
@@ -14,8 +14,9 @@ export class UiAppHost {
14
14
  #surface;
15
15
  #closeOnInterrupt;
16
16
  #theme;
17
- /** When the first interrupt of a chord was seen, or null when disarmed. */
17
+ // Invariant: the first interrupt timestamp is null whenever the chord is disarmed.
18
18
  #interruptArmedAt = null;
19
+ #renderedInterruptArmed;
19
20
  #cache = new FrameCache();
20
21
  #app = null;
21
22
  constructor(options) {
@@ -58,7 +59,11 @@ export class UiAppHost {
58
59
  }
59
60
  const size = this.#surface.size();
60
61
  const rect = { width: Math.max(0, size.width), height: Math.max(0, size.height) };
61
- const lines = this.#guard(() => finalizeFrame(app.render(rect, this.#services()), rect, app.id));
62
+ const interruptArmed = this.interruptArmed;
63
+ if (this.#renderedInterruptArmed !== interruptArmed)
64
+ this.#cache.invalidate();
65
+ this.#renderedInterruptArmed = interruptArmed;
66
+ const lines = this.#guard(() => this.#cache.render(app, rect, () => finalizeFrame(app.render(rect, this.#services()), rect, app.id)));
62
67
  this.#surface.present(lines ?? null);
63
68
  }
64
69
  handleInput(data) {
@@ -86,11 +91,7 @@ export class UiAppHost {
86
91
  this.render();
87
92
  return result;
88
93
  }
89
- /**
90
- * Two interrupts leave A1, from any screen. One arms the chord and repaints so
91
- * the screen can say so; a second within the window exits rather than merely
92
- * closing the screen, which is what the chord means everywhere else.
93
- */
94
+ // Protocol: two interrupts within the chord window leave A1 from every screen.
94
95
  #interrupt() {
95
96
  const now = Date.now();
96
97
  const armed = this.#interruptArmedAt;
@@ -101,6 +102,9 @@ export class UiAppHost {
101
102
  return { consumed: true, render: true };
102
103
  }
103
104
  this.#interruptArmedAt = now;
105
+ // Invariant: host-owned state participates in the app's next frame independently of
106
+ // the app's own revision contract.
107
+ this.#cache.invalidate();
104
108
  return { consumed: true, render: true };
105
109
  }
106
110
  get interruptArmed() {
@@ -135,7 +139,7 @@ export class UiAppHost {
135
139
  ...(this.#theme === undefined ? {} : { theme: this.#theme }),
136
140
  };
137
141
  }
138
- /** Contains a failure: the app is closed and the surface restored, never left broken. */
142
+ // Security: an app failure closes its app and restores the surface.
139
143
  #guard(work) {
140
144
  try {
141
145
  return work();
@@ -1,4 +1,5 @@
1
1
  import { type AppRegistration } from "./contracts.js";
2
+ /** Registers owned applications under unique routes and unregisters only the matching definition. */
2
3
  export declare class UiAppRegistry {
3
4
  #private;
4
5
  /** Registering a known id replaces its definition rather than adding a second app. */
@@ -1,4 +1,5 @@
1
1
  import { assertAppRegistration } from "./contracts.js";
2
+ /** Registers owned applications under unique routes and unregisters only the matching definition. */
2
3
  export class UiAppRegistry {
3
4
  #byId = new Map();
4
5
  /** Registering a known id replaces its definition rather than adding a second app. */
@@ -17,9 +17,11 @@ export function renderDialogPanel(state, width, theme) {
17
17
  const padded = `${row.label}${" ".repeat(Math.max(0, labelColumn - displayWidth(row.label)))}`;
18
18
  const cursor = selected ? "→ " : " ";
19
19
  const raw = `${cursor}${padded} ${row.value}`;
20
- // An unselected label is left unpainted and its value quietened, both lifted
21
- // to the accent on the row the cursor is on as the engine paints its own.
22
- const painted = `${theme.fg("accent", cursor)}${selected ? theme.fg("accent", padded) : padded} ${theme.fg("muted", row.value)}`;
20
+ // Compatibility: match pinned SettingsList: selected cursor, label, and value all use the
21
+ // accent role; an unselected label is plain and its value is muted.
22
+ const painted = selected
23
+ ? `${theme.fg("accent", cursor)}${theme.fg("accent", padded)} ${theme.fg("accent", row.value)}`
24
+ : `${cursor}${padded} ${theme.fg("muted", row.value)}`;
23
25
  return pad(truncateToWidth(painted, width), width, raw);
24
26
  });
25
27
  const description = state.rows[state.index]?.description ?? "";
@@ -2,6 +2,7 @@ export interface PaneRect {
2
2
  readonly width: number;
3
3
  readonly height: number;
4
4
  }
5
+ /** Identifies the pane whose bounded frame geometry or rendered rows violated the contract. */
5
6
  export declare class FrameContractError extends Error {
6
7
  readonly pane: string;
7
8
  constructor(pane: string, message: string);
@@ -1,4 +1,5 @@
1
1
  import { displayWidth, truncateToWidth } from "./text.js";
2
+ /** Identifies the pane whose bounded frame geometry or rendered rows violated the contract. */
2
3
  export class FrameContractError extends Error {
3
4
  pane;
4
5
  constructor(pane, message) {
@@ -2,17 +2,24 @@ export * from "./dialog-panel.js";
2
2
  export * from "./frame.js";
3
3
  export * from "./label.js";
4
4
  export * from "./line-input.js";
5
+ export * from "./prompt-input.js";
5
6
  export * from "./list-block.js";
6
7
  export * from "./list-view.js";
7
8
  export * from "./mouse.js";
8
9
  export * from "./pane.js";
10
+ export * from "./progress-status.js";
9
11
  export * from "./revision.js";
12
+ export * from "./selection-copy.js";
10
13
  export * from "./scrollbar.js";
11
14
  export * from "./shortcuts.js";
12
15
  export * from "./spans.js";
16
+ export * from "./visible-hyperlinks.js";
13
17
  export * from "./status-line.js";
18
+ export * from "./submitted-prompt.js";
14
19
  export * from "./stepper.js";
20
+ export * from "./transcript-viewport.js";
15
21
  export * from "./surface.js";
16
22
  export * from "./text.js";
23
+ export * from "./text-selection.js";
17
24
  export * from "./theme.js";
18
25
  export * from "./value-menu.js";
@@ -2,17 +2,24 @@ export * from "./dialog-panel.js";
2
2
  export * from "./frame.js";
3
3
  export * from "./label.js";
4
4
  export * from "./line-input.js";
5
+ export * from "./prompt-input.js";
5
6
  export * from "./list-block.js";
6
7
  export * from "./list-view.js";
7
8
  export * from "./mouse.js";
8
9
  export * from "./pane.js";
10
+ export * from "./progress-status.js";
9
11
  export * from "./revision.js";
12
+ export * from "./selection-copy.js";
10
13
  export * from "./scrollbar.js";
11
14
  export * from "./shortcuts.js";
12
15
  export * from "./spans.js";
16
+ export * from "./visible-hyperlinks.js";
13
17
  export * from "./status-line.js";
18
+ export * from "./submitted-prompt.js";
14
19
  export * from "./stepper.js";
20
+ export * from "./transcript-viewport.js";
15
21
  export * from "./surface.js";
16
22
  export * from "./text.js";
23
+ export * from "./text-selection.js";
17
24
  export * from "./theme.js";
18
25
  export * from "./value-menu.js";
@@ -1,3 +1,4 @@
1
+ import type { UiTheme } from "./theme.js";
1
2
  export type LineInputOutcome = {
2
3
  readonly kind: "editing";
3
4
  } | {
@@ -47,14 +48,6 @@ export declare class LineInput {
47
48
  }
48
49
  /** Applies one key to the input and reports whether the caller should commit. */
49
50
  export declare function handleLineInputKey(input: LineInput, data: string): LineInputOutcome;
50
- /**
51
- * The prompt the reference draws at the head of an input row, in the grey it
52
- * uses for one (#9AA0A6), painted foreground-only so anything drawn behind the
53
- * row survives.
54
- */
55
- /** A rule drawn in the prompt's own grey, as the reference rules an input row. */
56
- export declare function promptRule(width: number): string;
57
- export declare const PROMPT_GLYPH = "\u001B[38;2;154;160;166m\u276F\u001B[39m ";
58
51
  /**
59
52
  * The caret the reference draws: the cell under it is reversed rather than given
60
53
  * a colour of its own, so it reads as a block in whatever theme is in use.
@@ -65,6 +58,7 @@ export interface InputRowOptions {
65
58
  readonly placeholder?: string;
66
59
  /** Rules above and below, in the prompt's own grey. Default true. */
67
60
  readonly ruled?: boolean;
61
+ readonly theme?: Pick<UiTheme, "fg">;
68
62
  }
69
63
  export interface InputRow {
70
64
  /** The rows to draw, already padded to the width. */
@@ -1,4 +1,5 @@
1
1
  import { displayWidth, faint, truncateToWidth } from "./text.js";
2
+ import { PromptInput } from "./prompt-input.js";
2
3
  const MAX_VALUE_LENGTH = 4_096;
3
4
  const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: "grapheme" });
4
5
  /** Character class for a word boundary: 0 space, 1 word, 2 anything else. */
@@ -148,7 +149,7 @@ export function handleLineInputKey(input, data) {
148
149
  return { kind: "accepted", value: input.value };
149
150
  if (data === "\u001b" || data === "\u0003")
150
151
  return { kind: "cancelled" };
151
- // A word delete is decided before a plain one: on Windows Terminal the raw
152
+ // Platform: a word delete is decided before a plain one: on Windows Terminal the raw
152
153
  // backspace byte IS ctrl+backspace, and the plain branch would swallow it.
153
154
  if (data === "\b" || data === "\u001b\u007f" || data === "\u0017") {
154
155
  input.deleteWordBefore();
@@ -190,7 +191,7 @@ export function handleLineInputKey(input, data) {
190
191
  input.moveCaretToEnd();
191
192
  return { kind: "editing" };
192
193
  }
193
- // Any other escape sequence is a key this input has no answer for - a page
194
+ // Rationale: any other escape sequence is a key this input has no answer for - a page
194
195
  // key, a function key, a chord. It is swallowed rather than typed, because the
195
196
  // one thing it certainly is not is text the reader meant to enter.
196
197
  if (data.startsWith("\u001b"))
@@ -198,16 +199,6 @@ export function handleLineInputKey(input, data) {
198
199
  input.insert(data);
199
200
  return { kind: "editing" };
200
201
  }
201
- /**
202
- * The prompt the reference draws at the head of an input row, in the grey it
203
- * uses for one (#9AA0A6), painted foreground-only so anything drawn behind the
204
- * row survives.
205
- */
206
- /** A rule drawn in the prompt's own grey, as the reference rules an input row. */
207
- export function promptRule(width) {
208
- return `\u001b[38;2;154;160;166m${"─".repeat(Math.max(0, width))}\u001b[39m`;
209
- }
210
- export const PROMPT_GLYPH = `\u001b[38;2;154;160;166m❯\u001b[39m `;
211
202
  /**
212
203
  * The caret the reference draws: the cell under it is reversed rather than given
213
204
  * a colour of its own, so it reads as a block in whatever theme is in use.
@@ -217,29 +208,17 @@ export function caretCell(text) {
217
208
  }
218
209
  /** The input row as the reference draws one, padded to exactly the width. */
219
210
  export function renderInputRow(input, width, options = {}) {
220
- const inner = Math.max(0, width - 2);
221
- const view = input.view(inner);
211
+ const presentation = new PromptInput(options.theme);
212
+ const view = input.view(Math.max(0, width - presentation.geometry(width).prefixWidth));
222
213
  const placeholder = options.placeholder ?? "";
223
214
  const empty = view.text.length === 0 && placeholder.length > 0;
224
215
  const before = view.text.slice(0, view.caretColumn);
225
216
  const under = view.text.slice(view.caretColumn, view.caretColumn + 1) || " ";
226
217
  const after = view.text.slice(view.caretColumn + 1);
227
- // Typed text is left unpainted, the caret reverses its cell, and the
218
+ // Rationale: typed text is left unpainted, the caret reverses its cell, and the
228
219
  // placeholder is quietened by weight rather than by a colour of its own.
229
220
  const body = empty
230
221
  ? `${caretCell(placeholder.slice(0, 1))}${faint(placeholder.slice(1))}`
231
222
  : `${before}${caretCell(under)}${after}`;
232
- const plain = empty
233
- ? placeholder
234
- : `${view.text}${view.caretColumn >= view.text.length ? " " : ""}`;
235
- const row = padVisible(truncateToWidth(`${PROMPT_GLYPH}${body}`, width), width, `❯ ${plain}`);
236
- if (options.ruled === false)
237
- return { lines: [row] };
238
- const rule = promptRule(width);
239
- return { lines: [rule, row, rule] };
240
- }
241
- /** Pads by visible width, so styling escapes do not shift the layout. */
242
- function padVisible(line, width, raw) {
243
- const visible = displayWidth(raw);
244
- return visible >= width ? line : line + " ".repeat(width - visible);
223
+ return { lines: presentation.render(width, () => ({ rows: [body] }), options.ruled) };
245
224
  }
@@ -1,10 +1,4 @@
1
1
  import type { UiTheme } from "./theme.js";
2
- /**
3
- * A list of things that each carry a label and a value. It owns where a value
4
- * starts, how a row reads when it is selected or pointed at, and which part of a
5
- * row the pointer is on — so a screen decides what a row means and this decides
6
- * how it looks and where it can be touched.
7
- */
8
2
  /** The part of a row the pointer is over. A label selects; a value acts. */
9
3
  export type ListRegion = "label" | "value" | "minus" | "plus";
10
4
  /** Columns a stepper's controls occupy on either side of the value. */
@@ -6,8 +6,8 @@ export const STEPPER_RESERVE = 2;
6
6
  * and with the stepper's columns reserved for every row when any row has one, so
7
7
  * a number does not shift its own value out of the column it shares.
8
8
  */
9
- export function valueColumnFor(rows, indent = 4, gap = 2) {
10
- const widest = Math.max(0, ...rows.map(row => displayWidth(row.label)));
9
+ export function valueColumnFor(rows, indent = 2, gap = 2) {
10
+ const widest = Math.min(30, Math.max(0, ...rows.map(row => displayWidth(row.label))));
11
11
  const stepper = rows.some(row => row.stepper !== undefined) ? STEPPER_RESERVE : 0;
12
12
  return indent + widest + gap + stepper;
13
13
  }
@@ -22,14 +22,21 @@ export function renderGroupHeader(title, width, theme) {
22
22
  */
23
23
  export function renderListRow(row, state, valueColumn, width, theme) {
24
24
  const cursor = state.selected ? "→ " : " ";
25
- const leftRaw = `${cursor} ${row.label}`;
26
- const left = `${theme.fg("accent", cursor)} ${state.selected ? theme.fg("accent", row.label) : theme.plain(row.label)}`;
25
+ const labelColumn = Math.max(displayWidth(row.label), valueColumn - 4 - (row.stepper === undefined ? 0 : STEPPER_RESERVE));
26
+ const labelPadded = `${row.label}${" ".repeat(Math.max(0, labelColumn - displayWidth(row.label)))}`;
27
+ const leftRaw = `${cursor}${labelPadded}`;
28
+ const left = state.selected
29
+ ? `${theme.fg("accent", cursor)}${theme.fg("accent", labelPadded)}`
30
+ : `${cursor}${theme.plain(labelPadded)}`;
27
31
  const gap = Math.max(2, valueColumn - displayWidth(leftRaw));
28
- // Pointing anywhere on the row is pointing at the item; pointing at the value
29
- // is what brightens it. The selection speaks through the label alone.
32
+ // Compatibility: pinned SettingsList gives the selected label and value the same accent
33
+ // role. Pointer hover may brighten an unselected value without changing the
34
+ // keyboard selection.
30
35
  const valueHovered = state.hovered && state.region !== "label";
31
36
  const stepper = row.stepper !== undefined && valueHovered;
32
- const value = valueHovered ? theme.plain(row.value) : theme.fg("muted", row.value);
37
+ const value = state.selected
38
+ ? theme.fg("accent", row.value)
39
+ : valueHovered ? theme.plain(row.value) : theme.fg("muted", row.value);
33
40
  const minus = stepper
34
41
  ? row.stepper?.lower === true
35
42
  ? state.region === "minus" ? theme.plain("- ") : theme.fg("dim", "- ")
@@ -13,3 +13,13 @@ export interface ParsedMouseInput {
13
13
  }
14
14
  /** Extracts SGR mouse reports, leaving any keyboard input untouched. */
15
15
  export declare function parseMouseInput(data: string): ParsedMouseInput;
16
+ export interface RoutedMouseInput {
17
+ /** Input left for the TUI after only claimed reports were removed. */
18
+ readonly data: string;
19
+ readonly consumed: boolean;
20
+ }
21
+ /**
22
+ * Routes every SGR report independently, preserving keyboard bytes and mouse
23
+ * reports the caller does not claim even when they share one physical chunk.
24
+ */
25
+ export declare function routeMouseInput(data: string, claim: (event: PaneMouseEvent, report: string) => boolean): RoutedMouseInput;
@@ -30,6 +30,30 @@ export function parseMouseInput(data) {
30
30
  rest += data.slice(index);
31
31
  return { events: Object.freeze(events), rest };
32
32
  }
33
+ /**
34
+ * Routes every SGR report independently, preserving keyboard bytes and mouse
35
+ * reports the caller does not claim even when they share one physical chunk.
36
+ */
37
+ export function routeMouseInput(data, claim) {
38
+ if (!data.includes("\u001b[<"))
39
+ return { data, consumed: false };
40
+ let output = "";
41
+ let index = 0;
42
+ let consumed = false;
43
+ // Concurrency: reentrant routing may deliver a report to another component using this parser.
44
+ const pattern = new RegExp(SGR_PATTERN.source, "g");
45
+ for (let match = pattern.exec(data); match !== null; match = pattern.exec(data)) {
46
+ output += data.slice(index, match.index);
47
+ index = match.index + match[0].length;
48
+ const event = toEvent(Number.parseInt(match[1] ?? "", 10), Number.parseInt(match[2] ?? "", 10), Number.parseInt(match[3] ?? "", 10), match[4] === "m");
49
+ if (event !== null && claim(event, match[0]))
50
+ consumed = true;
51
+ else
52
+ output += match[0];
53
+ }
54
+ output += data.slice(index);
55
+ return { data: output, consumed };
56
+ }
33
57
  function toEvent(code, column, row, released) {
34
58
  if ((code & 64) !== 0) {
35
59
  const kind = (code & 1) === 0 ? "wheel-up" : "wheel-down";
@@ -0,0 +1,2 @@
1
+ /** Returns spinner-backed status text with A1's canonical three-period marker. */
2
+ export declare function progressStatusText(message: string): string;
@@ -0,0 +1,4 @@
1
+ /** Returns spinner-backed status text with A1's canonical three-period marker. */
2
+ export function progressStatusText(message) {
3
+ return `${message.replace(/(?:…|\.+)$/u, "")}...`;
4
+ }
@@ -0,0 +1,32 @@
1
+ import { type UiTheme } from "./theme.js";
2
+ export declare const PROMPT_GLYPH = "\u276F ";
3
+ export declare const PROMPT_PREFIX_WIDTH = 2;
4
+ export declare function promptRuleText(text: string): string;
5
+ export declare function promptRule(width: number): string;
6
+ export declare function promptArrow(text: string, theme: Pick<UiTheme, "fg">): string;
7
+ export interface PromptInputBody {
8
+ readonly rows: readonly string[];
9
+ /** Semantic border fragments retain editor history and scroll annotations. */
10
+ readonly topRule?: string | undefined;
11
+ readonly bottomRule?: string | undefined;
12
+ readonly after?: readonly string[];
13
+ }
14
+ export interface PromptInputMetrics {
15
+ readonly measure: (text: string) => number;
16
+ readonly truncate: (text: string, width: number) => string;
17
+ }
18
+ /** Composes shared input chrome around controller-owned body rows without owning editing state. */
19
+ export declare class PromptInput {
20
+ readonly theme: Pick<UiTheme, "fg">;
21
+ readonly metrics: PromptInputMetrics;
22
+ constructor(theme?: Pick<UiTheme, "fg">, metrics?: PromptInputMetrics);
23
+ styleRule(text: string): string;
24
+ geometry(width: number, padding?: number): {
25
+ prefixWidth: number;
26
+ innerWidth: number;
27
+ paddingX: number;
28
+ contentWidth: number;
29
+ layoutWidth: number;
30
+ };
31
+ render(width: number, renderBody: (innerWidth: number) => PromptInputBody, ruled?: boolean, padding?: number): string[];
32
+ }
@@ -0,0 +1,54 @@
1
+ import { displayWidth, truncateToWidth } from "./text.js";
2
+ import { PLAIN_THEME } from "./theme.js";
3
+ export const PROMPT_GLYPH = "❯ ";
4
+ export const PROMPT_PREFIX_WIDTH = 2;
5
+ export function promptRuleText(text) {
6
+ return `\u001b[38;2;154;160;166m${text}\u001b[39m`;
7
+ }
8
+ export function promptRule(width) {
9
+ return promptRuleText("─".repeat(Math.max(0, width)));
10
+ }
11
+ export function promptArrow(text, theme) {
12
+ return theme.fg("muted", text);
13
+ }
14
+ /** Composes shared input chrome around controller-owned body rows without owning editing state. */
15
+ export class PromptInput {
16
+ theme;
17
+ metrics;
18
+ constructor(theme = PLAIN_THEME, metrics = { measure: displayWidth, truncate: truncateToWidth }) {
19
+ this.theme = theme;
20
+ this.metrics = metrics;
21
+ }
22
+ styleRule(text) { return promptRuleText(text); }
23
+ geometry(width, padding = 0) {
24
+ const prefixWidth = Math.min(PROMPT_PREFIX_WIDTH, Math.max(0, width));
25
+ // Compatibility: editor wrapping needs room for a two-cell grapheme plus its cursor cell.
26
+ // Lay out against a safe virtual width, then clip only at the shared frame boundary.
27
+ const innerWidth = Math.max(3 + padding * 2, width - prefixWidth);
28
+ const paddingX = Math.min(padding, Math.max(0, Math.floor((innerWidth - 1) / 2)));
29
+ const contentWidth = Math.max(1, innerWidth - paddingX * 2);
30
+ return { prefixWidth, innerWidth, paddingX, contentWidth, layoutWidth: Math.max(1, contentWidth - (paddingX ? 0 : 1)) };
31
+ }
32
+ render(width, renderBody, ruled = true, padding = 0) {
33
+ if (width <= 0)
34
+ return [];
35
+ const { prefixWidth, innerWidth } = this.geometry(width, padding);
36
+ const body = renderBody(innerWidth);
37
+ const fit = (row) => {
38
+ const clipped = this.metrics.truncate(row, width);
39
+ return clipped + " ".repeat(Math.max(0, width - this.metrics.measure(clipped)));
40
+ };
41
+ const rows = body.rows.map((row, index) => fit(`${index === 0
42
+ ? promptArrow(PROMPT_GLYPH, this.theme)
43
+ : " ".repeat(prefixWidth)}${row}`));
44
+ const rule = (fragment) => fragment === undefined
45
+ ? promptRule(width)
46
+ : fit(fragment + promptRule(Math.max(0, width - this.metrics.measure(fragment))));
47
+ return [
48
+ ...(ruled ? [rule(body.topRule)] : []),
49
+ ...rows,
50
+ ...(ruled ? [rule(body.bottomRule)] : []),
51
+ ...(body.after ?? []).map(row => fit(`${" ".repeat(prefixWidth)}${row}`)),
52
+ ];
53
+ }
54
+ }
@@ -0,0 +1,14 @@
1
+ export interface TimestampedPromptRowsInput {
2
+ readonly width: number;
3
+ readonly sourceTimestamp: number | Date;
4
+ readonly render: (contentWidth: number) => readonly string[];
5
+ /** Styles the reserved suffix while keeping policy independent of a vendor theme. */
6
+ readonly decorateSuffix?: (text: string, firstRow: boolean) => string;
7
+ readonly minimumWidth?: number;
8
+ }
9
+ export declare function formatPromptTimestamp(source: number | Date): string | null;
10
+ /**
11
+ * Reserves timestamp columns before wrapping, so the clock never overwrites
12
+ * prompt content. At narrow widths the same renderer is used without a clock.
13
+ */
14
+ export declare function composeTimestampedPromptRows(input: TimestampedPromptRowsInput): readonly string[];
@@ -0,0 +1,20 @@
1
+ import { overlaySpan } from "./spans.js";
2
+ export function formatPromptTimestamp(source) {
3
+ const date = source instanceof Date ? source : new Date(source);
4
+ if (Number.isNaN(date.getTime()))
5
+ return null;
6
+ return `${String(date.getHours()).padStart(2, "0")}:${String(date.getMinutes()).padStart(2, "0")}`;
7
+ }
8
+ /**
9
+ * Reserves timestamp columns before wrapping, so the clock never overwrites
10
+ * prompt content. At narrow widths the same renderer is used without a clock.
11
+ */
12
+ export function composeTimestampedPromptRows(input) {
13
+ const timestamp = formatPromptTimestamp(input.sourceTimestamp);
14
+ if (timestamp === null || input.width < (input.minimumWidth ?? 20))
15
+ return input.render(input.width);
16
+ const suffixWidth = timestamp.length + 2;
17
+ const contentWidth = Math.max(1, input.width - suffixWidth);
18
+ const decorate = input.decorateSuffix ?? ((text) => text);
19
+ return input.render(contentWidth).map((row, index) => overlaySpan(row, contentWidth, input.width, decorate(index === 0 ? ` ${timestamp}` : " ".repeat(suffixWidth), index === 0)));
20
+ }
@@ -19,6 +19,30 @@ export interface ScrollbarInput {
19
19
  readonly scroll: number;
20
20
  readonly trackHeight: number;
21
21
  }
22
+ export type ScrollbarAppearance = "auto" | "always" | "hidden";
23
+ export type ScrollbarStyle = "thin" | "thick";
24
+ export type ScrollbarSpeed = "normal" | "fast" | "high";
25
+ /** Wheel distance: normal (3), fast (6), high as normal + fast (9). */
26
+ export declare function scrollbarWheelRows(speed: ScrollbarSpeed): number;
27
+ /** Selection edge distance uses the same configured rate as a wheel event. */
28
+ export declare function scrollbarSelectionRows(speed: ScrollbarSpeed): number;
29
+ export interface ScrollbarPresentationInput {
30
+ readonly geometry: ScrollbarGeometry | null;
31
+ readonly appearance: ScrollbarAppearance;
32
+ readonly style: ScrollbarStyle;
33
+ readonly hovered: boolean;
34
+ readonly dragging: boolean;
35
+ readonly activeUntil: number;
36
+ readonly now: number;
37
+ }
38
+ export interface ScrollbarPresentation {
39
+ readonly visible: boolean;
40
+ readonly reservesSpace: boolean;
41
+ readonly trackGlyph: "│" | "┃";
42
+ readonly thumbGlyph: "│" | "┃";
43
+ }
44
+ /** Pure appearance decision; activity time is supplied so tests own the clock. */
45
+ export declare function scrollbarPresentation(input: ScrollbarPresentationInput): ScrollbarPresentation;
22
46
  /** Null when the content fits: no scrollbar is drawn and no width is reserved. */
23
47
  export declare function scrollbarGeometry(input: ScrollbarInput): ScrollbarGeometry | null;
24
48
  export declare function scrollbarReservesSpace(geometry: ScrollbarGeometry | null): boolean;
@@ -48,6 +72,8 @@ export interface RailPointer {
48
72
  */
49
73
  export declare class ScrollbarRails {
50
74
  #private;
75
+ noteActivity(key: string, now: number, lingerMs?: number): void;
76
+ isRecentlyActive(key: string, now: number): boolean;
51
77
  isHovered(key: string): boolean;
52
78
  isDragging(key: string): boolean;
53
79
  get draggingKey(): string | null;
@@ -3,6 +3,33 @@
3
3
  * rail rather than to a global, because two scrollable surfaces can be visible
4
4
  * at once and a shared flag lights up the wrong one.
5
5
  */
6
+ /** Wheel distance: normal (3), fast (6), high as normal + fast (9). */
7
+ export function scrollbarWheelRows(speed) {
8
+ return speed === "high" ? 9 : speed === "fast" ? 6 : 3;
9
+ }
10
+ /** Selection edge distance uses the same configured rate as a wheel event. */
11
+ export function scrollbarSelectionRows(speed) {
12
+ return scrollbarWheelRows(speed);
13
+ }
14
+ /** Pure appearance decision; activity time is supplied so tests own the clock. */
15
+ export function scrollbarPresentation(input) {
16
+ const overflowing = input.geometry !== null;
17
+ // Invariant: auto/always reserve the final rail cell even while content fits.
18
+ // The blank gutter prevents prompt timestamps from touching the terminal edge
19
+ // and keeps later scrollbar appearance from reflowing the transcript.
20
+ const reservesSpace = input.appearance !== "hidden";
21
+ const visible = overflowing && reservesSpace && (input.appearance === "always"
22
+ || input.hovered
23
+ || input.dragging
24
+ || (input.activeUntil > 0 && input.now <= input.activeUntil));
25
+ const thick = input.style === "thick";
26
+ return {
27
+ visible,
28
+ reservesSpace,
29
+ trackGlyph: thick ? "┃" : "│",
30
+ thumbGlyph: thick || input.hovered || input.dragging ? "┃" : "│",
31
+ };
32
+ }
6
33
  /** Null when the content fits: no scrollbar is drawn and no width is reserved. */
7
34
  export function scrollbarGeometry(input) {
8
35
  const { contentLength, viewportHeight, trackHeight } = input;
@@ -51,7 +78,14 @@ export function scrollForTrackPage(geometry, trackRow, scroll, viewportHeight) {
51
78
  */
52
79
  export class ScrollbarRails {
53
80
  #hovered = new Set();
81
+ #activeUntil = new Map();
54
82
  #dragging;
83
+ noteActivity(key, now, lingerMs = 900) {
84
+ this.#activeUntil.set(key, Math.max(this.#activeUntil.get(key) ?? 0, now + Math.max(0, lingerMs)));
85
+ }
86
+ isRecentlyActive(key, now) {
87
+ return now <= (this.#activeUntil.get(key) ?? 0);
88
+ }
55
89
  isHovered(key) {
56
90
  return this.#hovered.has(key);
57
91
  }
@@ -97,6 +131,7 @@ export class ScrollbarRails {
97
131
  }
98
132
  clear() {
99
133
  this.#hovered.clear();
134
+ this.#activeUntil.clear();
100
135
  this.#dragging = undefined;
101
136
  }
102
137
  }