@timurproko/a1 0.1.8-dev.21b95d6 → 0.1.8-dev.224

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 (461) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +4 -1
  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 +1 -1
  9. package/bin/sync-pi-tui-proxy.js +97 -0
  10. package/bin/ui.js +25 -6
  11. package/bin/warmup.js +18 -0
  12. package/dist/cli/capabilities.d.ts +6 -0
  13. package/dist/{src/cli → cli}/capabilities.js +1 -1
  14. package/dist/{src/cli → cli}/dispatch.d.ts +6 -0
  15. package/dist/cli/dispatch.js +202 -0
  16. package/dist/{src/cli → cli}/packages.d.ts +10 -2
  17. package/dist/{src/cli → cli}/packages.js +24 -20
  18. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  19. package/dist/cli/version-stats.js +112 -0
  20. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  21. package/dist/composition/agent-engine-bridge.js +108 -0
  22. package/dist/composition/index.d.ts +3 -0
  23. package/dist/composition/index.js +3 -0
  24. package/dist/composition/owned-ui.d.ts +28 -0
  25. package/dist/composition/owned-ui.js +64 -0
  26. package/dist/composition/process.d.ts +16 -0
  27. package/dist/composition/process.js +45 -0
  28. package/dist/composition/settings-route-host.d.ts +8 -0
  29. package/dist/composition/settings-route-host.js +75 -0
  30. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  31. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  33. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  34. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  35. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  36. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  37. package/dist/{src/features → features}/launch/index.js +0 -1
  38. package/dist/{src/features → features}/launch/intent.d.ts +3 -2
  39. package/dist/features/launch/intent.js +3 -0
  40. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  41. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  42. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  43. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  44. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  45. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  46. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  47. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  48. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  49. package/dist/{src/features → features}/owned-ui/index.d.ts +1 -0
  50. package/dist/{src/features → features}/owned-ui/index.js +1 -0
  51. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  52. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  53. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  54. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  55. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  56. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  57. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  58. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  59. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  60. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  61. package/dist/{src/features → features}/workspace/router.js +1 -0
  62. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  63. package/dist/{src/features → features}/workspace/store.js +1 -0
  64. package/dist/{src/foundation → foundation}/launch-guardian/main.js +10 -2
  65. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  66. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  67. package/dist/foundation/lifecycle/paths.d.ts +28 -0
  68. package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -0
  69. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  71. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  72. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  73. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  74. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  75. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  76. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  77. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +1 -0
  78. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +1 -0
  79. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  80. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  81. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  82. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  83. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +14 -4
  84. package/dist/{src/foundation → foundation}/release/bootstrap.js +66 -13
  85. package/dist/foundation/release/cohort-state.d.ts +131 -0
  86. package/dist/foundation/release/cohort-state.js +384 -0
  87. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  88. package/dist/foundation/release/dependency-layer.js +487 -0
  89. package/dist/foundation/release/endpoints.d.ts +20 -0
  90. package/dist/foundation/release/endpoints.js +50 -0
  91. package/dist/{src/foundation → foundation}/release/index.d.ts +3 -0
  92. package/dist/{src/foundation → foundation}/release/index.js +3 -0
  93. package/dist/foundation/release/release-gc.d.ts +60 -0
  94. package/dist/foundation/release/release-gc.js +538 -0
  95. package/dist/{src/foundation → foundation}/release/release-store.d.ts +3 -1
  96. package/dist/{src/foundation → foundation}/release/release-store.js +60 -10
  97. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  98. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  99. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  100. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  101. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  102. package/dist/{src/foundation → foundation}/release/update.js +114 -54
  103. package/dist/foundation/release/warmup.d.ts +3 -0
  104. package/dist/foundation/release/warmup.js +35 -0
  105. package/dist/foundation/startup/index.d.ts +1 -0
  106. package/dist/foundation/startup/index.js +1 -0
  107. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  108. package/dist/foundation/startup/startup-runtime.js +140 -0
  109. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  110. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  111. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  112. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  113. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  114. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  115. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  116. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  117. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  118. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  119. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  120. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  121. package/dist/foundation/supervision/index.d.ts +3 -0
  122. package/dist/foundation/supervision/index.js +3 -0
  123. package/dist/{src/foundation → foundation}/supervision/main.js +11 -5
  124. package/dist/foundation/supervision/paths.d.ts +1 -0
  125. package/dist/foundation/supervision/paths.js +1 -0
  126. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  127. package/dist/{src/foundation → foundation}/supervision/server.js +51 -2
  128. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  129. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  130. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  131. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  132. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  133. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  134. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  135. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  136. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  137. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  138. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +32 -17
  139. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  140. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  141. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  142. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  143. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +1 -1
  144. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +52 -8
  145. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  146. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  147. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  148. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  151. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +22 -4
  152. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +289 -68
  153. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  154. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  155. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  156. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  157. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +3 -0
  158. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +3 -0
  159. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  160. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  161. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  162. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +2 -2
  163. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  164. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  165. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  166. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  167. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +16 -1
  168. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +39 -4
  169. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  170. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  171. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  172. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  173. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  174. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  177. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  178. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  179. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  180. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  181. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  182. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  183. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  184. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +137 -0
  185. package/dist/integrations/pi/session-ui/session-shell-root.js +1106 -0
  186. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  187. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +415 -775
  188. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +44 -0
  189. package/dist/integrations/pi/session-ui/session-viewport-controller.js +434 -0
  190. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  191. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  192. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  193. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  194. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  195. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  196. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  197. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +63 -0
  198. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +240 -0
  199. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  200. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  201. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  202. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  203. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  204. package/dist/native/darwin-arm64/manifest.json +1 -1
  205. package/dist/native/linux-x64/manifest.json +3 -3
  206. package/dist/native/linux-x64/process-guardian +0 -0
  207. package/dist/native/win32-x64/manifest.json +3 -3
  208. package/dist/native/win32-x64/process-guardian.exe +0 -0
  209. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  210. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  211. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  212. package/dist/runtime-payload-inventory.json +122328 -0
  213. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  214. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  215. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  216. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  217. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  218. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  219. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  220. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  221. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +4 -0
  222. package/dist/{src/foundation/ui-components → ui/components}/index.js +4 -0
  223. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  224. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  225. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  226. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  227. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  228. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  229. package/dist/ui/components/progress-status.d.ts +2 -0
  230. package/dist/ui/components/progress-status.js +4 -0
  231. package/dist/ui/components/prompt-row.d.ts +14 -0
  232. package/dist/ui/components/prompt-row.js +20 -0
  233. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  234. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  235. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  236. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  237. package/dist/ui/components/spans.d.ts +25 -0
  238. package/dist/ui/components/spans.js +257 -0
  239. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  240. package/dist/ui/components/submitted-prompt.js +50 -0
  241. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  242. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  243. package/dist/ui/components/text-selection.d.ts +62 -0
  244. package/dist/ui/components/text-selection.js +235 -0
  245. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  247. package/dist/ui/components/transcript-viewport.d.ts +146 -0
  248. package/dist/ui/components/transcript-viewport.js +629 -0
  249. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  250. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  251. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  252. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  253. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  254. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  255. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  256. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  257. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  258. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  259. package/docs/architecture/boundaries.md +9 -9
  260. package/docs/architecture/code-documentation.md +77 -0
  261. package/docs/architecture/project-structure.md +67 -30
  262. package/docs/architecture/resource-and-data-policy.md +1 -1
  263. package/docs/architecture/toolchain.md +10 -10
  264. package/docs/architecture/ui-reference-provenance.md +34 -5
  265. package/docs/ci-release-runbook.md +186 -79
  266. package/docs/features/launch-profiles.md +10 -19
  267. package/docs/manual-launch-instance-acceptance.md +12 -35
  268. package/docs/manual-owned-ui-checkpoint.md +78 -0
  269. package/docs/manual-pi-boundary-candidate.md +4 -5
  270. package/docs/manual-terminal-colour-check.md +4 -3
  271. package/docs/repository-governance-live-acceptance.md +77 -0
  272. package/package.json +37 -27
  273. package/dist/src/cli/capabilities.d.ts +0 -15
  274. package/dist/src/cli/dispatch.js +0 -177
  275. package/dist/src/cli/version-stats.js +0 -72
  276. package/dist/src/composition/index.d.ts +0 -48
  277. package/dist/src/composition/index.js +0 -258
  278. package/dist/src/features/launch/intent.js +0 -4
  279. package/dist/src/features/launch/profiles.d.ts +0 -12
  280. package/dist/src/features/launch/profiles.js +0 -26
  281. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  282. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  283. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  284. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  285. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -112
  286. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  287. package/dist/src/foundation/release/cohort-state.js +0 -202
  288. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  289. package/dist/src/foundation/release/release-gc.js +0 -16
  290. package/dist/src/foundation/supervision/index.d.ts +0 -3
  291. package/dist/src/foundation/supervision/index.js +0 -3
  292. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  293. package/dist/src/foundation/supervision/paths.js +0 -1
  294. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  295. package/dist/src/foundation/ui-components/spans.js +0 -59
  296. package/docs/manual-transparent-checkpoint.md +0 -53
  297. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  298. /package/dist/{src/cli → cli}/index.js +0 -0
  299. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  300. /package/dist/{src/cli → cli}/version.js +0 -0
  301. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  302. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  303. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  304. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  305. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  306. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  307. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  308. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +0 -0
  309. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  310. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  311. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  312. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  313. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  314. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  315. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  316. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  317. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  318. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  319. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  320. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  321. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  322. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  323. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  324. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  325. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  326. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  327. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  328. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  329. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  330. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  331. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  332. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  333. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  334. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  335. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  336. /package/dist/{src/features → features}/workspace/index.js +0 -0
  337. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  338. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  339. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  340. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  341. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  342. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  343. /package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +0 -0
  344. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  345. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  346. /package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +0 -0
  347. /package/dist/{src/foundation → foundation}/lifecycle/index.js +0 -0
  348. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  349. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  350. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  351. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  352. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  353. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  354. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  355. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  356. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  357. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  358. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  359. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  360. /package/dist/{src/foundation → foundation}/process-containment/index.d.ts +0 -0
  361. /package/dist/{src/foundation → foundation}/process-containment/index.js +0 -0
  362. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  363. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  364. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  365. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  366. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  367. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  368. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  369. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  370. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  371. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  372. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  373. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  374. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  375. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  376. /package/dist/{src/foundation → foundation}/supervision/main.d.ts +0 -0
  377. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  378. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +0 -0
  379. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +0 -0
  380. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  381. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  382. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  383. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  384. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +0 -0
  385. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  386. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  387. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  388. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  389. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  390. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  391. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  392. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  393. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  394. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  395. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  396. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  397. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  398. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  399. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  400. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  401. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  402. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  403. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  404. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  428. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  429. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  430. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  431. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +0 -0
  432. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  433. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  434. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  435. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  436. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  437. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  438. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  439. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  440. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  441. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  442. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  443. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  444. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  445. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  446. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  447. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  448. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  449. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  450. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  451. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  452. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  453. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  454. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  455. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  456. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  457. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  458. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  459. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  460. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  461. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,29 @@
1
+ const STANDARD_BASE64 = /^[A-Za-z0-9+/]*={0,2}$/u;
2
+ /**
3
+ * Converts valid padded or unpadded standard base64 into its unique padded form.
4
+ * Clipboard adapters are untrusted at this boundary, so reject representations
5
+ * that Node's permissive base64 decoder would otherwise partially accept.
6
+ */
7
+ export function canonicalizeClipboardImage(image) {
8
+ const data = canonicalizeStandardBase64(image.data);
9
+ return data === null ? null : { data, mimeType: image.mimeType };
10
+ }
11
+ export function canonicalizeStandardBase64(value) {
12
+ if (value.length === 0 || !STANDARD_BASE64.test(value))
13
+ return null;
14
+ const paddingStart = value.indexOf("=");
15
+ const core = paddingStart < 0 ? value : value.slice(0, paddingStart);
16
+ const suppliedPadding = value.length - core.length;
17
+ const remainder = core.length % 4;
18
+ if (remainder === 1)
19
+ return null;
20
+ const requiredPadding = remainder === 0 ? 0 : 4 - remainder;
21
+ if (suppliedPadding !== 0 && suppliedPadding !== requiredPadding)
22
+ return null;
23
+ const padded = `${core}${"=".repeat(requiredPadding)}`;
24
+ const decoded = Buffer.from(padded, "base64");
25
+ if (decoded.length === 0)
26
+ return null;
27
+ const canonical = decoded.toString("base64");
28
+ return canonical === padded ? canonical : null;
29
+ }
@@ -1,2 +1,3 @@
1
1
  export * from "./session-shell.js";
2
+ export * from "./stream-presentation-coalescer.js";
2
3
  export * from "./route-host.js";
@@ -1,2 +1,3 @@
1
1
  export * from "./session-shell.js";
2
+ export * from "./stream-presentation-coalescer.js";
2
3
  export * from "./route-host.js";
@@ -0,0 +1,23 @@
1
+ import type { PiShellClipboardContent, PiShellEditorTextRange } from "../components/index.js";
2
+ export interface PromptImageAttachment {
3
+ readonly type: "image";
4
+ readonly data: string;
5
+ readonly mimeType: string;
6
+ }
7
+ export interface PreparedPrompt {
8
+ readonly text: string;
9
+ readonly images: readonly PromptImageAttachment[];
10
+ }
11
+ /** Owns semantic clipboard records while the prompt displays compact chips. */
12
+ export declare class PromptChipStore {
13
+ #private;
14
+ transformPastedContent(content: PiShellClipboardContent): string;
15
+ atomicRanges(line: string): readonly PiShellEditorTextRange[];
16
+ hyperlinkRanges(text: string): readonly {
17
+ start: number;
18
+ end: number;
19
+ target: string;
20
+ }[];
21
+ expandCopiedText(text: string): string;
22
+ prepareSubmission(text: string): PreparedPrompt;
23
+ }
@@ -0,0 +1,246 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { existsSync, statSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { canonicalizeClipboardImage } from "./clipboard-image.js";
6
+ const CHIP_PATTERN = /\[(?:📷 [^\]]+|📁 [^\]]+|📄 [^\]]+|🖼 {1,2}[^\]]+|🔗 [^\]]+)\]/gu;
7
+ const IMAGE_EXTENSION = /\.(?:jpe?g|png|webp|gif|bmp|tiff?)$/iu;
8
+ const URL_PATTERN = /^https?:\/\/[^\s\u0000-\u001f\u007f]+$/iu;
9
+ const URL_DISPLAY_LENGTH = 40;
10
+ /** Owns semantic clipboard records while the prompt displays compact chips. */
11
+ export class PromptChipStore {
12
+ #chips = new Map();
13
+ transformPastedContent(content) {
14
+ if (content.kind === "image") {
15
+ const image = canonicalizeClipboardImage(content);
16
+ if (image === null)
17
+ return "";
18
+ const id = randomBytes(5).toString("hex");
19
+ const tag = `[📷 screenshot-${id}.png]`;
20
+ this.#chips.set(tag, {
21
+ kind: "image",
22
+ tag,
23
+ image: { type: "image", data: image.data, mimeType: image.mimeType },
24
+ });
25
+ return tag;
26
+ }
27
+ const text = content.text;
28
+ if (this.#chips.has(text.trim()))
29
+ return text.trim();
30
+ const url = text.trim();
31
+ if (URL_PATTERN.test(url)) {
32
+ const label = url.length <= URL_DISPLAY_LENGTH ? url : `${url.slice(0, URL_DISPLAY_LENGTH)}…`;
33
+ return this.#recordUnique({ kind: "url", tag: `[🔗 ${label}]`, label, url });
34
+ }
35
+ const paths = pathsFromClipboard(text);
36
+ if (paths.length === 0)
37
+ return text;
38
+ return paths.map(item => {
39
+ const label = pathLabel(item.fullPath);
40
+ if (item.kind === "folder") {
41
+ return this.#recordUnique({ kind: "folder", tag: `[📁 ${label}]`, path: item.fullPath });
42
+ }
43
+ const icon = IMAGE_EXTENSION.test(item.fullPath) ? "🖼 " : "📄";
44
+ return this.#recordUnique({ kind: "file", tag: `[${icon} ${label}]`, path: item.fullPath });
45
+ }).join("");
46
+ }
47
+ atomicRanges(line) {
48
+ return [...line.matchAll(CHIP_PATTERN)].map(match => ({
49
+ start: match.index,
50
+ end: match.index + match[0].length,
51
+ }));
52
+ }
53
+ hyperlinkRanges(text) {
54
+ const ranges = [];
55
+ for (const chip of this.#chips.values()) {
56
+ if (chip.kind !== "url")
57
+ continue;
58
+ const labelOffset = chip.tag.indexOf(chip.label);
59
+ if (labelOffset < 0)
60
+ continue;
61
+ let searchFrom = 0;
62
+ while (searchFrom <= text.length - chip.tag.length) {
63
+ const tagStart = text.indexOf(chip.tag, searchFrom);
64
+ if (tagStart < 0)
65
+ break;
66
+ const start = tagStart + labelOffset;
67
+ ranges.push({ start, end: start + chip.label.length, target: chip.url });
68
+ searchFrom = tagStart + chip.tag.length;
69
+ }
70
+ }
71
+ return ranges.sort((left, right) => right.start - left.start);
72
+ }
73
+ expandCopiedText(text) {
74
+ return this.#replaceResolvable(text, false).text;
75
+ }
76
+ prepareSubmission(text) {
77
+ const expanded = this.#replaceResolvable(text, true);
78
+ return { text: expanded.text, images: expanded.images };
79
+ }
80
+ #replaceResolvable(text, includeImages) {
81
+ let expanded = text;
82
+ const images = [];
83
+ const seenImages = new Set();
84
+ for (const [tag, chip] of this.#chips) {
85
+ if (!expanded.includes(tag))
86
+ continue;
87
+ if (chip.kind === "image") {
88
+ if (includeImages && !seenImages.has(tag)) {
89
+ images.push(chip.image);
90
+ seenImages.add(tag);
91
+ }
92
+ continue;
93
+ }
94
+ const value = chip.kind === "url" ? chip.url : chip.path;
95
+ expanded = expanded.replaceAll(tag, value);
96
+ }
97
+ return { text: expanded, images };
98
+ }
99
+ #recordUnique(chip) {
100
+ const existing = this.#chips.get(chip.tag);
101
+ if (existing === undefined || sameChipValue(existing, chip)) {
102
+ this.#chips.set(chip.tag, chip);
103
+ return chip.tag;
104
+ }
105
+ const suffix = randomBytes(2).toString("hex");
106
+ const uniqueTag = `${chip.tag.slice(0, -1)} #${suffix}]`;
107
+ const unique = { ...chip, tag: uniqueTag };
108
+ this.#chips.set(uniqueTag, unique);
109
+ return uniqueTag;
110
+ }
111
+ }
112
+ function pathsFromClipboard(text) {
113
+ const normalized = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n").trim();
114
+ if (normalized.length === 0)
115
+ return [];
116
+ const paths = [];
117
+ for (const line of normalized.split("\n").filter(value => value.trim().length > 0)) {
118
+ const wholeLine = existingClipboardPath(line);
119
+ if (wholeLine !== null) {
120
+ paths.push(wholeLine);
121
+ continue;
122
+ }
123
+ const tokens = tokenizePathLine(line)?.filter(token => token.quoted || token.text !== "&");
124
+ if (tokens === undefined || tokens.length === 0)
125
+ return [];
126
+ for (let index = 0; index < tokens.length;) {
127
+ const token = tokens[index];
128
+ if (token === undefined)
129
+ return [];
130
+ if (token.quoted) {
131
+ const quoted = existingClipboardPath(token.text);
132
+ if (quoted === null)
133
+ return [];
134
+ paths.push(quoted);
135
+ index += 1;
136
+ continue;
137
+ }
138
+ if (normalizePath(token.text) === null)
139
+ return [];
140
+ let runEnd = index;
141
+ while (runEnd < tokens.length && tokens[runEnd]?.quoted !== true)
142
+ runEnd += 1;
143
+ let matched = null;
144
+ let matchedEnd = index;
145
+ for (let end = runEnd; end > index; end -= 1) {
146
+ matched = existingClipboardPath(tokens.slice(index, end).map(candidate => candidate.text).join(" "));
147
+ if (matched !== null) {
148
+ matchedEnd = end;
149
+ break;
150
+ }
151
+ }
152
+ if (matched === null)
153
+ return [];
154
+ paths.push(matched);
155
+ index = matchedEnd;
156
+ }
157
+ }
158
+ return paths;
159
+ }
160
+ function existingClipboardPath(value) {
161
+ const fullPath = normalizePath(unquote(value.trim()));
162
+ if (fullPath === null || !existsSync(fullPath))
163
+ return null;
164
+ try {
165
+ const stat = statSync(fullPath);
166
+ if (stat.isDirectory())
167
+ return { fullPath, kind: "folder" };
168
+ if (stat.isFile())
169
+ return { fullPath, kind: "file" };
170
+ }
171
+ catch {
172
+ // Compatibility: clipboard path probing is best-effort.
173
+ }
174
+ return null;
175
+ }
176
+ function tokenizePathLine(line) {
177
+ const tokens = [];
178
+ let index = 0;
179
+ while (index < line.length) {
180
+ while (index < line.length && /\s/u.test(line[index] ?? ""))
181
+ index += 1;
182
+ if (index >= line.length)
183
+ break;
184
+ const quote = line[index] === '"' || line[index] === "'" ? line[index] : undefined;
185
+ if (quote !== undefined) {
186
+ index += 1;
187
+ const start = index;
188
+ while (index < line.length && line[index] !== quote)
189
+ index += 1;
190
+ if (index >= line.length)
191
+ return undefined;
192
+ tokens.push({ text: line.slice(start, index), quoted: true });
193
+ index += 1;
194
+ if (index < line.length && !/\s/u.test(line[index] ?? ""))
195
+ return undefined;
196
+ continue;
197
+ }
198
+ const start = index;
199
+ while (index < line.length && !/\s/u.test(line[index] ?? ""))
200
+ index += 1;
201
+ tokens.push({ text: line.slice(start, index), quoted: false });
202
+ }
203
+ return tokens;
204
+ }
205
+ function normalizePath(value) {
206
+ let candidate = value;
207
+ if (/^file:\/\//iu.test(candidate)) {
208
+ try {
209
+ candidate = fileURLToPath(candidate);
210
+ }
211
+ catch {
212
+ return null;
213
+ }
214
+ }
215
+ if (process.platform === "win32") {
216
+ const msys = /^\/([A-Za-z])\/(.*)$/u.exec(candidate);
217
+ if (msys !== null)
218
+ candidate = `${msys[1]}:\\${msys[2]?.replaceAll("/", "\\") ?? ""}`;
219
+ }
220
+ return /^(?:[A-Za-z]:\\|\/)/u.test(candidate) ? path.normalize(candidate) : null;
221
+ }
222
+ function unquote(value) {
223
+ let result = value.startsWith("& ") ? value.slice(2).trim() : value;
224
+ if ((result.startsWith('"') && result.endsWith('"')) || (result.startsWith("'") && result.endsWith("'"))) {
225
+ result = result.slice(1, -1).trim();
226
+ }
227
+ return result;
228
+ }
229
+ function pathLabel(fullPath) {
230
+ const basename = path.basename(fullPath);
231
+ if (basename.length > 0)
232
+ return basename;
233
+ return path.parse(fullPath).root.replace(/[\\/]+$/u, "") || fullPath;
234
+ }
235
+ function sameChipValue(left, right) {
236
+ if (left.kind !== right.kind)
237
+ return false;
238
+ if (left.kind === "url" && right.kind === "url")
239
+ return left.url === right.url;
240
+ if ((left.kind === "file" || left.kind === "folder") && (right.kind === "file" || right.kind === "folder")) {
241
+ return path.normalize(left.path) === path.normalize(right.path);
242
+ }
243
+ if (left.kind === "image" && right.kind === "image")
244
+ return left.image.data === right.image.data;
245
+ return false;
246
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Compatibility export. Owned application route lifecycle belongs to the
3
+ * vendor-neutral UI app owner; the Pi shell only hosts that contract.
4
+ */
5
+ export type { UiRouteHost, UiRouteSurface } from "../../../ui/apps/index.js";
@@ -0,0 +1,137 @@
1
+ import type { OwnedUiSessionViewModel, OwnedUiViewportSettings, OwnedUiViewportSettingsPort } from "../../../contracts/owned-ui/index.js";
2
+ import type { UiRouteHost } from "../../../ui/apps/index.js";
3
+ import { type TranscriptViewportFrame, type TranscriptViewportFrameDescriptor } from "../../../ui/components/index.js";
4
+ import { type PiEngineAdapter, type PiWorkflowResult } from "../engine/index.js";
5
+ import { type PiShellClipboardContent, type PiShellComponentPort, type PiShellEditorPort, type PiShellExtensionRendererResolver, type PiShellHeaderOptions, type PiShellHeaderPort, type PiShellImageAssetResolver, type PiShellLoadedResourcesPort, type PiShellResourceEntry, type PiShellTranscriptComponentPort } from "../components/index.js";
6
+ import { type PiTuiComponentPort, type PiTuiInputSurfaceKind, type PiTuiInputCoordinationScheduler, type PiTuiInputDiagnosticsEvent, type PiTuiLayoutNode, type PiTuiTerminalPort } from "../tui-runtime/index.js";
7
+ import { type PreparedPrompt } from "./prompt-chips.js";
8
+ import type { StreamPresentationScheduler } from "./stream-presentation-coalescer.js";
9
+ export type OwnedUiBackendPort = PiEngineAdapter;
10
+ export type OwnedUiTerminalPort = PiTuiTerminalPort;
11
+ type OwnedUiStartupOptions = PiShellHeaderOptions;
12
+ export interface OwnedUiClipboardPort {
13
+ readText(): Promise<string | null>;
14
+ readImage?(): Promise<{
15
+ readonly data: string;
16
+ readonly mimeType: string;
17
+ } | null>;
18
+ writeText?(text: string): Promise<void>;
19
+ }
20
+ export interface OwnedUiSessionShellOptions {
21
+ readonly backend: OwnedUiBackendPort;
22
+ readonly cwd: string;
23
+ readonly terminal?: OwnedUiTerminalPort;
24
+ readonly startup?: OwnedUiStartupOptions;
25
+ /**
26
+ * Declared A1-owned routes. A route this host claims resolves to its app;
27
+ * every other route continues to the pinned workflow table unchanged.
28
+ */
29
+ readonly routeHost?: UiRouteHost;
30
+ /** Bare A1 selects the owned bounded viewport; comparison profiles stay pinned. */
31
+ readonly sessionLayout?: "pinned" | "custom-viewport";
32
+ /** Live profile-local settings, supplied only to the bare-A1 composition. */
33
+ readonly viewportSettings?: OwnedUiViewportSettingsPort;
34
+ /** Optional platform seam; production uses A1's system clipboard adapter. */
35
+ readonly clipboard?: OwnedUiClipboardPort;
36
+ /** Deterministic scheduling seam for presentation-cadence tests. */
37
+ readonly streamPresentation?: {
38
+ readonly intervalMs?: number;
39
+ readonly scheduler?: StreamPresentationScheduler;
40
+ };
41
+ /** Optional deterministic seam for keyboard scheduling and phase evidence. */
42
+ readonly inputPresentation?: {
43
+ readonly scheduler?: PiTuiInputCoordinationScheduler;
44
+ readonly onEvent?: (event: PiTuiInputDiagnosticsEvent) => void;
45
+ readonly now?: () => number;
46
+ /** Evidence-only baseline seam; production leaves coordination enabled. */
47
+ readonly coordination?: boolean;
48
+ /** Evidence-only baseline seam; production leaves dock reuse enabled. */
49
+ readonly viewportReuse?: boolean;
50
+ };
51
+ }
52
+ /** Composes backend session state into the owned transcript, viewport, editor, and dock presentation. */
53
+ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
54
+ #private;
55
+ readonly editor: PiShellEditorPort;
56
+ readonly header: PiShellHeaderPort;
57
+ readonly resources: PiShellLoadedResourcesPort;
58
+ constructor(view: OwnedUiSessionViewModel, cwd: string, handlers: {
59
+ readonly getColumns: () => number;
60
+ readonly getRows: () => number;
61
+ readonly requestRender: (force?: boolean) => void;
62
+ readonly onViewportFrame?: (frame: TranscriptViewportFrame) => void;
63
+ readonly enableDockInputReuse?: boolean;
64
+ readonly onSubmit: (text: string) => void;
65
+ readonly onInterrupt: () => void;
66
+ readonly onClear?: () => void;
67
+ readonly onExit: () => void;
68
+ readonly onModelSelect: () => void;
69
+ readonly onModelCycle?: (direction: "forward" | "backward") => void;
70
+ readonly onThinkingCycle: () => void;
71
+ readonly onThinkingToggle?: () => void;
72
+ readonly onMessageCopy?: () => void;
73
+ readonly onFollowUp?: () => void;
74
+ readonly onDequeue?: () => void;
75
+ readonly onCopyText?: (text: string) => void;
76
+ readonly readClipboardContent?: () => Promise<PiShellClipboardContent | null>;
77
+ }, startup?: PiShellHeaderOptions, agentDir?: string, extensionRenderers?: PiShellExtensionRendererResolver, sessionLayout?: "pinned" | "custom-viewport", imageAssets?: PiShellImageAssetResolver);
78
+ setEditorPaddingX(padding: number): void;
79
+ setAutocompleteMaxVisible(maxVisible: number): void;
80
+ setOutputPad(padding: 0 | 1): void;
81
+ setHideThinkingBlock(hidden: boolean): void;
82
+ setMermaidRenderingMode(mode: "off" | "final" | "streaming"): void;
83
+ setImagePresentation(showImages: boolean, imageWidthCells: number): void;
84
+ preparePromptSubmission(text: string): PreparedPrompt;
85
+ update(view: OwnedUiSessionViewModel): void;
86
+ /**
87
+ * Applies one block: its component is created or updated in place and the order grows
88
+ * only when the block is new. A streamed chunk costs one component update rather than a
89
+ * walk of the whole transcript.
90
+ */
91
+ applyTranscriptBlock(block: OwnedUiSessionViewModel["transcript"][number]): void;
92
+ render(width: number): readonly string[];
93
+ viewportFrameDescriptor(): TranscriptViewportFrameDescriptor | null;
94
+ hasActiveSelection(): boolean;
95
+ setViewportConfig(config: OwnedUiViewportSettings): void;
96
+ resumeViewportFollowing(): void;
97
+ noteCompletedAssistantMessage(): void;
98
+ resetViewport(): void;
99
+ clearViewportPointerState(): void;
100
+ handleViewportPreInput(data: string, allowWheel?: boolean, now?: number): {
101
+ readonly data: string;
102
+ readonly consumed: boolean;
103
+ readonly copyText?: string;
104
+ };
105
+ layoutRoot(): PiTuiLayoutNode;
106
+ transcriptComponent(id: string): PiShellTranscriptComponentPort | undefined;
107
+ exitTranscript(width: number): string;
108
+ appendWorkflowStatus(message: string): void;
109
+ appendWorkflowResult(result: PiWorkflowResult): void;
110
+ appendDaxnuts(): void;
111
+ toggleThinkingVisibility(): void;
112
+ get toolsExpanded(): boolean;
113
+ setToolsExpanded(expanded: boolean): void;
114
+ setExtensionWidget(key: string, component: PiShellComponentPort | null, placement: "aboveEditor" | "belowEditor"): void;
115
+ setExtensionHeader(component: PiShellComponentPort | null): void;
116
+ setExtensionFooter(component: PiShellComponentPort | null): void;
117
+ setExtensionStatus(key: string, text: string | undefined): void;
118
+ setExtensionWorking(message: string | undefined, visible?: boolean): void;
119
+ resetWorkflowPresentation(): void;
120
+ resetExtensionUi(): void;
121
+ addExtensionNotification(message: string, type: "info" | "warning" | "error"): void;
122
+ extensionFooterData(): unknown;
123
+ usesDefaultInputSurface(): boolean;
124
+ inputCoordinationSurface(): PiTuiInputSurfaceKind;
125
+ viewportCompositionEvidence(): {
126
+ readonly full: number;
127
+ readonly dockOnly: number;
128
+ };
129
+ transcriptRenderCount(): number;
130
+ setInputSurface(component: PiShellComponentPort | null, disposePrevious?: boolean, coordination?: Exclude<PiTuiInputSurfaceKind, "editor">): void;
131
+ handleInput(data: string): void;
132
+ invalidate(): void;
133
+ setFocused(focused: boolean): void;
134
+ dispose(): void;
135
+ }
136
+ export declare function shellResourceEntries(backend: OwnedUiBackendPort): readonly PiShellResourceEntry[];
137
+ export {};