@timurproko/a1 0.1.8-dev.235df0e → 0.1.8-dev.260

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 (485) hide show
  1. package/README.md +107 -67
  2. package/bin/cli.js +28 -10
  3. package/bin/guardian.js +8 -3
  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 +47 -20
  11. package/bin/warmup.js +27 -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 +15 -1
  15. package/dist/cli/dispatch.js +261 -0
  16. package/dist/cli/package-messages.d.ts +26 -0
  17. package/dist/cli/package-messages.js +71 -0
  18. package/dist/{src/cli → cli}/packages.d.ts +11 -2
  19. package/dist/{src/cli → cli}/packages.js +24 -27
  20. package/dist/{src/cli → cli}/version-stats.d.ts +6 -0
  21. package/dist/cli/version-stats.js +112 -0
  22. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  23. package/dist/composition/agent-engine-bridge.js +108 -0
  24. package/dist/composition/index.d.ts +3 -0
  25. package/dist/composition/index.js +3 -0
  26. package/dist/composition/owned-ui.d.ts +31 -0
  27. package/dist/composition/owned-ui.js +66 -0
  28. package/dist/composition/process.d.ts +16 -0
  29. package/dist/composition/process.js +45 -0
  30. package/dist/composition/settings-route-host.d.ts +8 -0
  31. package/dist/composition/settings-route-host.js +75 -0
  32. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +2 -2
  33. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +22 -4
  34. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +17 -0
  35. package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +6 -0
  36. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +36 -0
  37. package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +25 -0
  38. package/dist/{src/features → features}/launch/development-launch.js +11 -3
  39. package/dist/{src/features → features}/launch/index.d.ts +0 -1
  40. package/dist/{src/features → features}/launch/index.js +0 -1
  41. package/dist/features/launch/intent.d.ts +10 -0
  42. package/dist/features/launch/intent.js +8 -0
  43. package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -2
  44. package/dist/{src/features → features}/launch/prepare-launch.js +2 -9
  45. package/dist/{src/features → features}/launch/profile-paths.d.ts +1 -2
  46. package/dist/{src/features → features}/launch/profile-paths.js +2 -8
  47. package/dist/{src/features → features}/launch/runtime-selection.d.ts +2 -5
  48. package/dist/{src/features → features}/owned-ui/customization.d.ts +3 -1
  49. package/dist/{src/features → features}/owned-ui/customization.js +3 -1
  50. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +2 -1
  51. package/dist/{src/features → features}/owned-ui/diagnostics.js +1 -0
  52. package/dist/{src/features → features}/owned-ui/index.d.ts +2 -0
  53. package/dist/{src/features → features}/owned-ui/index.js +2 -0
  54. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  55. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  56. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  57. package/dist/{src/features → features}/owned-ui/run.js +2 -0
  58. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  59. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  60. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  61. package/dist/{src/features → features}/owned-ui/settings-app.js +103 -54
  62. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  63. package/dist/{src/features → features}/workspace/reducer.d.ts +2 -1
  64. package/dist/{src/features → features}/workspace/reducer.js +2 -1
  65. package/dist/{src/features → features}/workspace/router.d.ts +2 -1
  66. package/dist/{src/features → features}/workspace/router.js +1 -0
  67. package/dist/{src/features → features}/workspace/store.d.ts +2 -1
  68. package/dist/{src/features → features}/workspace/store.js +1 -0
  69. package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +2 -0
  70. package/dist/{src/foundation → foundation}/launch-guardian/main.js +18 -5
  71. package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +2 -0
  72. package/dist/{src/foundation → foundation}/lifecycle/index.js +2 -0
  73. package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +1 -1
  74. package/dist/{src/foundation → foundation}/lifecycle/model.js +1 -1
  75. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  76. package/dist/{src/foundation → foundation}/lifecycle/paths.js +29 -1
  77. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  78. package/dist/foundation/lifecycle/session-selection.js +39 -0
  79. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  80. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  81. package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +2 -0
  82. package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +2 -0
  83. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  84. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  85. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  86. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  87. package/dist/{src/foundation → foundation}/process-containment/index.d.ts +1 -0
  88. package/dist/{src/foundation → foundation}/process-containment/index.js +1 -0
  89. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +1 -0
  90. package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +1 -0
  91. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +1 -0
  92. package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +1 -0
  93. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +3 -1
  94. package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +5 -2
  95. package/dist/{src/foundation → foundation}/protocol/client.d.ts +1 -0
  96. package/dist/{src/foundation → foundation}/protocol/client.js +1 -0
  97. package/dist/{src/foundation → foundation}/protocol/messages.d.ts +1 -0
  98. package/dist/{src/foundation → foundation}/protocol/messages.js +1 -0
  99. package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +25 -6
  100. package/dist/{src/foundation → foundation}/release/bootstrap.js +124 -34
  101. package/dist/foundation/release/cohort-state.d.ts +156 -0
  102. package/dist/foundation/release/cohort-state.js +471 -0
  103. package/dist/foundation/release/dependency-layer.d.ts +82 -0
  104. package/dist/foundation/release/dependency-layer.js +497 -0
  105. package/dist/foundation/release/endpoints.d.ts +20 -0
  106. package/dist/foundation/release/endpoints.js +50 -0
  107. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  108. package/dist/foundation/release/immutable-platform.js +13 -0
  109. package/dist/{src/foundation → foundation}/release/index.d.ts +4 -0
  110. package/dist/{src/foundation → foundation}/release/index.js +4 -0
  111. package/dist/foundation/release/release-gc.d.ts +71 -0
  112. package/dist/foundation/release/release-gc.js +734 -0
  113. package/dist/{src/foundation → foundation}/release/release-store.d.ts +7 -3
  114. package/dist/{src/foundation → foundation}/release/release-store.js +65 -13
  115. package/dist/{src/foundation → foundation}/release/release.d.ts +4 -1
  116. package/dist/{src/foundation → foundation}/release/release.js +10 -3
  117. package/dist/foundation/release/restart-certification.d.ts +67 -0
  118. package/dist/foundation/release/restart-certification.js +211 -0
  119. package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +1 -0
  120. package/dist/{src/foundation → foundation}/release/update-transaction.js +1 -0
  121. package/dist/{src/foundation → foundation}/release/update.d.ts +19 -3
  122. package/dist/{src/foundation → foundation}/release/update.js +116 -56
  123. package/dist/foundation/release/warmup.d.ts +3 -0
  124. package/dist/foundation/release/warmup.js +35 -0
  125. package/dist/foundation/startup/index.d.ts +1 -0
  126. package/dist/foundation/startup/index.js +1 -0
  127. package/dist/foundation/startup/startup-runtime.d.ts +36 -0
  128. package/dist/foundation/startup/startup-runtime.js +140 -0
  129. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +2 -1
  130. package/dist/{src/foundation → foundation}/storage/control-store.js +39 -4
  131. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +2 -1
  132. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +2 -1
  133. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +2 -1
  134. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +2 -1
  135. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  136. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  137. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +2 -1
  138. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +2 -1
  139. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +2 -1
  140. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +2 -1
  141. package/dist/foundation/supervision/index.d.ts +3 -0
  142. package/dist/foundation/supervision/index.js +3 -0
  143. package/dist/foundation/supervision/main.d.ts +1 -0
  144. package/dist/foundation/supervision/main.js +80 -0
  145. package/dist/foundation/supervision/paths.d.ts +1 -0
  146. package/dist/foundation/supervision/paths.js +1 -0
  147. package/dist/{src/foundation → foundation}/supervision/server.d.ts +19 -1
  148. package/dist/{src/foundation → foundation}/supervision/server.js +65 -3
  149. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  150. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +1 -0
  151. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +3 -2
  152. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +1 -1
  153. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +1 -1
  154. package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
  155. package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
  156. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +1 -0
  157. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +1 -0
  158. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +54 -6
  159. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  160. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +3 -3
  161. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +49 -18
  162. package/dist/integrations/pi/components/shell-presenters-info.d.ts +36 -0
  163. package/dist/integrations/pi/components/shell-presenters-info.js +78 -0
  164. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +25 -0
  165. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +92 -131
  166. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +5 -2
  167. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +2 -1
  168. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +57 -8
  169. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +4 -2
  170. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  171. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  172. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +10 -2
  173. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +36 -3
  174. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  175. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +28 -4
  176. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +714 -127
  177. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +2 -0
  178. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +4 -2
  179. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  180. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  181. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +4 -0
  182. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +4 -0
  183. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +2 -1
  184. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +1 -0
  185. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  186. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +32 -26
  187. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  188. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  189. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +2 -1
  190. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +1 -0
  191. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +19 -1
  192. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +47 -5
  193. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +4 -2
  194. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +19 -4
  195. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  196. package/dist/integrations/pi/engine/session-selection.js +90 -0
  197. package/dist/integrations/pi/engine/settings-effects.d.ts +66 -0
  198. package/dist/integrations/pi/engine/settings-effects.js +249 -0
  199. package/dist/integrations/pi/engine/settings-integration.d.ts +43 -0
  200. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +102 -108
  201. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +3 -2
  202. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +1 -0
  203. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +18 -1
  204. package/dist/integrations/pi/session-ui/clipboard-image.d.ts +11 -0
  205. package/dist/integrations/pi/session-ui/clipboard-image.js +29 -0
  206. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.d.ts +1 -0
  207. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/index.js +1 -0
  208. package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
  209. package/dist/integrations/pi/session-ui/prompt-chips.js +246 -0
  210. package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
  211. package/dist/integrations/pi/session-ui/session-shell-root.d.ts +141 -0
  212. package/dist/integrations/pi/session-ui/session-shell-root.js +1158 -0
  213. package/dist/integrations/pi/session-ui/session-shell.d.ts +55 -0
  214. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/session-shell.js +479 -719
  215. package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +45 -0
  216. package/dist/integrations/pi/session-ui/session-viewport-controller.js +463 -0
  217. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.d.ts +29 -0
  218. package/dist/integrations/pi/session-ui/stream-presentation-coalescer.js +79 -0
  219. package/dist/integrations/pi/session-ui/system-clipboard.d.ts +20 -0
  220. package/dist/integrations/pi/session-ui/system-clipboard.js +130 -0
  221. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +8 -1
  222. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +216 -9
  223. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +29 -6
  224. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +74 -0
  225. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +380 -0
  226. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +2 -0
  227. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +2 -0
  228. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  229. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  230. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  231. package/dist/native/darwin-arm64/manifest.json +4 -4
  232. package/dist/native/darwin-arm64/process-guardian +0 -0
  233. package/dist/native/linux-x64/manifest.json +3 -3
  234. package/dist/native/linux-x64/process-guardian +0 -0
  235. package/dist/native/win32-x64/manifest.json +3 -3
  236. package/dist/native/win32-x64/process-guardian.exe +0 -0
  237. package/dist/{src/product-identity.d.ts → product-identity.d.ts} +3 -3
  238. package/dist/{src/product-identity.js → product-identity.js} +7 -5
  239. package/dist/{src/product-identity.json → product-identity.json} +11 -6
  240. package/dist/runtime-payload-inventory.json +122328 -0
  241. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +23 -1
  242. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  243. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +14 -10
  244. package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +1 -0
  245. package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +1 -0
  246. package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +5 -3
  247. package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +1 -0
  248. package/dist/{src/foundation/ui-components → ui/components}/frame.js +1 -0
  249. package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +5 -0
  250. package/dist/{src/foundation/ui-components → ui/components}/index.js +5 -0
  251. package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +1 -6
  252. package/dist/{src/foundation/ui-components → ui/components}/line-input.js +4 -9
  253. package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -6
  254. package/dist/{src/foundation/ui-components → ui/components}/list-view.js +14 -7
  255. package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +10 -0
  256. package/dist/{src/foundation/ui-components → ui/components}/mouse.js +23 -0
  257. package/dist/ui/components/progress-status.d.ts +2 -0
  258. package/dist/ui/components/progress-status.js +4 -0
  259. package/dist/ui/components/prompt-row.d.ts +14 -0
  260. package/dist/ui/components/prompt-row.js +20 -0
  261. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +26 -0
  262. package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +35 -0
  263. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +1 -0
  264. package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +1 -0
  265. package/dist/ui/components/spans.d.ts +25 -0
  266. package/dist/ui/components/spans.js +257 -0
  267. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  268. package/dist/ui/components/submitted-prompt.js +50 -0
  269. package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -5
  270. package/dist/{src/foundation/ui-components → ui/components}/surface.js +1 -5
  271. package/dist/ui/components/text-selection.d.ts +62 -0
  272. package/dist/ui/components/text-selection.js +208 -0
  273. package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +14 -0
  274. package/dist/{src/foundation/ui-components → ui/components}/text.js +66 -4
  275. package/dist/ui/components/transcript-viewport.d.ts +152 -0
  276. package/dist/ui/components/transcript-viewport.js +631 -0
  277. package/dist/ui/components/visible-hyperlinks.d.ts +19 -0
  278. package/dist/ui/components/visible-hyperlinks.js +64 -0
  279. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +8 -1
  280. package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +33 -5
  281. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +1 -1
  282. package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +21 -2
  283. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +6 -19
  284. package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +32 -23
  285. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +9 -17
  286. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +65 -55
  287. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +1 -0
  288. package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +2 -1
  289. package/docs/architecture/boundaries.md +9 -9
  290. package/docs/architecture/code-documentation.md +77 -0
  291. package/docs/architecture/process-guardian-provenance.md +3 -1
  292. package/docs/architecture/project-structure.md +67 -30
  293. package/docs/architecture/resource-and-data-policy.md +1 -1
  294. package/docs/architecture/toolchain.md +10 -10
  295. package/docs/architecture/ui-reference-provenance.md +36 -5
  296. package/docs/ci-release-runbook.md +186 -79
  297. package/docs/features/launch-profiles.md +24 -17
  298. package/docs/manual-ghost-link-baseline.md +89 -0
  299. package/docs/manual-launch-instance-acceptance.md +12 -35
  300. package/docs/manual-owned-ui-checkpoint.md +78 -0
  301. package/docs/manual-pi-boundary-candidate.md +4 -5
  302. package/docs/manual-terminal-colour-check.md +4 -3
  303. package/docs/repository-governance-live-acceptance.md +77 -0
  304. package/package.json +37 -27
  305. package/dist/src/cli/capabilities.d.ts +0 -15
  306. package/dist/src/cli/dispatch.js +0 -177
  307. package/dist/src/cli/version-stats.js +0 -72
  308. package/dist/src/composition/index.d.ts +0 -48
  309. package/dist/src/composition/index.js +0 -258
  310. package/dist/src/features/launch/intent.d.ts +0 -7
  311. package/dist/src/features/launch/intent.js +0 -4
  312. package/dist/src/features/launch/profiles.d.ts +0 -12
  313. package/dist/src/features/launch/profiles.js +0 -26
  314. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  315. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  316. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  317. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  318. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  319. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  320. package/dist/src/foundation/release/cohort-state.js +0 -202
  321. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  322. package/dist/src/foundation/release/release-gc.js +0 -16
  323. package/dist/src/foundation/supervision/index.d.ts +0 -3
  324. package/dist/src/foundation/supervision/index.js +0 -3
  325. package/dist/src/foundation/supervision/main.d.ts +0 -1
  326. package/dist/src/foundation/supervision/main.js +0 -41
  327. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  328. package/dist/src/foundation/supervision/paths.js +0 -1
  329. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  330. package/dist/src/foundation/ui-components/spans.js +0 -59
  331. package/docs/manual-transparent-checkpoint.md +0 -53
  332. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  333. /package/dist/{src/cli → cli}/index.js +0 -0
  334. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  335. /package/dist/{src/cli → cli}/version.js +0 -0
  336. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  337. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  338. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  339. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  340. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  341. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  342. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  343. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  344. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  345. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  346. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  347. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  348. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  349. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  350. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  351. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  352. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  353. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  354. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  355. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  356. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  357. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  358. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  359. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  360. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  361. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  362. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  363. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  364. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  365. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  366. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  367. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  368. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  369. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  370. /package/dist/{src/features → features}/workspace/index.js +0 -0
  371. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  372. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  373. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  374. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  375. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  376. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  377. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  378. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  379. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  380. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  381. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  382. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  383. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  384. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  385. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  386. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  387. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  388. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  389. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  390. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  391. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  392. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  393. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  394. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  395. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  396. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  397. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  398. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  399. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  400. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  401. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  402. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  403. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  404. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  405. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  406. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  407. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  408. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  409. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  410. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  411. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  412. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  413. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  414. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  415. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  416. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  417. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  418. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  419. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  420. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  421. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  422. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  423. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  424. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  425. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  426. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  427. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  428. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  429. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  430. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  431. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  432. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  433. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  434. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  435. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  436. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  437. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  438. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  439. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  440. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  441. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  442. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  443. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  444. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  445. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  446. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  447. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  448. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  449. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  450. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  451. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  452. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  453. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  454. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  455. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  456. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  457. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/session-ui}/route-host.js +0 -0
  458. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  459. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  460. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  461. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  462. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  463. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  464. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  465. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  466. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  467. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  468. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  469. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  470. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  471. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  472. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  473. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  474. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  475. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  476. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  477. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  478. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  479. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  480. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  481. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  482. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  483. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  484. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  485. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
package/bin/ui.js CHANGED
@@ -1,30 +1,57 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const { assertSinglePiTuiModuleAtLaunch } = await import("./module-identity.js");
4
- const { fileURLToPath } = await import("node:url");
3
+ const startup = await import("../dist/foundation/startup/index.js");
4
+ startup.enableEnvironmentCompileCache(process.env);
5
+ // Performance: begin the exact launch graph together while the trace write is pending.
6
+ // Direct owned-module entries avoid evaluating unrelated barrel exports before first paint.
7
+ const modules = Promise.all([
8
+ import("./module-identity.js"),
9
+ import("node:url"),
10
+ import("../dist/features/launch/runtime-selection.js"),
11
+ import("../dist/foundation/lifecycle/session-selection.js"),
12
+ import("../dist/features/owned-ui/project-trust-prompt.js"),
13
+ import("../dist/features/owned-ui/session-fork-prompt.js"),
14
+ import("../dist/features/owned-ui/run.js"),
15
+ import("../dist/composition/owned-ui.js"),
16
+ ]);
17
+ await startup.markStartupPhase(process.env, "ui-entry");
18
+ const [
19
+ { assertSinglePiTuiModuleAtLaunch },
20
+ { fileURLToPath },
21
+ { runSelectedInteractiveRuntime },
22
+ { parseSessionSelection },
23
+ { createConsoleProjectTrustPrompt },
24
+ { createConsoleSessionForkPrompt },
25
+ { runOwnedUi },
26
+ { composeOwnedUi },
27
+ ] = await modules;
5
28
 
6
- // Before the composition loads pinned Pi's terminal stack: confirm A1 and Pi
7
- // resolve it to the same copy, so extensions and the owned UI share one module
8
- // identity (see bin/module-identity.js for the full story). Nothing is repaired
9
- // here — A1's package manifest decides which copy wins, and this only reports
10
- // when that stopped being true.
29
+ // Compatibility: before the composition uses pinned Pi's terminal stack: confirm A1 and Pi
30
+ // resolve it to the same copy, so extensions and the owned UI share one module identity.
11
31
  assertSinglePiTuiModuleAtLaunch(fileURLToPath(new URL("..", import.meta.url)), message => process.stderr.write(message));
32
+ await startup.markStartupPhase(process.env, "ui-modules-loaded");
12
33
 
13
- const { runSelectedInteractiveRuntime } = await import("../dist/src/features/launch/index.js");
14
-
15
- runSelectedInteractiveRuntime(process.env.A1_LAUNCH_PROFILE ?? "a1", {
16
- ownedUi: async (profileId, ownedSurfaces) => {
17
- const [{ runOwnedUi }, { composeOwnedUi }] = await Promise.all([
18
- import("../dist/src/features/owned-ui/index.js"),
19
- import("../dist/src/composition/index.js"),
20
- ]);
21
- const { application, settings } = await composeOwnedUi({ cwd: process.cwd(), profileId, ownedSurfaces });
22
- return await runOwnedUi({ application, ...(settings === null ? {} : { settings }) });
23
- },
34
+ const sessionSelection = parseSessionSelection(process.argv.slice(2));
35
+ const profile = process.env.A1_LAUNCH_PROFILE ?? "a1";
36
+ Promise.resolve().then(() => {
37
+ if (sessionSelection && profile !== "a1") throw new Error("session selection requires the normal A1 profile");
38
+ return runSelectedInteractiveRuntime(profile, {
39
+ ownedUi: async (profileId, ownedSurfaces) => {
40
+ const { application, settings } = await composeOwnedUi({
41
+ cwd: process.cwd(),
42
+ profileId,
43
+ ownedSurfaces,
44
+ projectTrustPrompt: createConsoleProjectTrustPrompt(),
45
+ sessionForkPrompt: createConsoleSessionForkPrompt(),
46
+ ...(sessionSelection === undefined ? {} : { sessionSelection }),
47
+ });
48
+ return await runOwnedUi({ application, ...(settings === null ? {} : { settings }) });
49
+ },
50
+ });
24
51
  }).then(
25
52
  code => { process.exitCode = code; },
26
53
  error => {
27
- console.error(error instanceof Error ? error.stack ?? error.message : String(error));
28
- process.exitCode = 1;
54
+ console.error(error instanceof Error ? error.message : String(error));
55
+ process.exitCode = error?.name === "PiSessionSelectionError" ? error.exitCode : 1;
29
56
  },
30
57
  );
package/bin/warmup.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+
3
+ const startup = await import("../dist/foundation/startup/index.js");
4
+ startup.assertImmutableWarmupEnvironment(process.env);
5
+ startup.enableEnvironmentCompileCache(process.env);
6
+
7
+ // Security: this entry imports the exact interactive graph but never composes it, so it
8
+ // creates no terminal, profile/session path, trust callback, executable resource loader,
9
+ // extension runner, or network client.
10
+ const [identity, launch, selection, trustPrompt, forkPrompt, run, composition] = await Promise.all([
11
+ import("./module-identity.js"),
12
+ import("../dist/features/launch/runtime-selection.js"),
13
+ import("../dist/foundation/lifecycle/session-selection.js"),
14
+ import("../dist/features/owned-ui/project-trust-prompt.js"),
15
+ import("../dist/features/owned-ui/session-fork-prompt.js"),
16
+ import("../dist/features/owned-ui/run.js"),
17
+ import("../dist/composition/owned-ui.js"),
18
+ ]);
19
+ if (typeof identity.assertSinglePiTuiModuleAtLaunch !== "function"
20
+ || typeof launch.runSelectedInteractiveRuntime !== "function"
21
+ || typeof selection.parseSessionSelection !== "function"
22
+ || typeof trustPrompt.createConsoleProjectTrustPrompt !== "function"
23
+ || typeof forkPrompt.createConsoleSessionForkPrompt !== "function"
24
+ || typeof run.runOwnedUi !== "function"
25
+ || typeof composition.composeOwnedUi !== "function") {
26
+ throw new Error("immutable startup graph is incomplete");
27
+ }
@@ -0,0 +1,6 @@
1
+ /** The Pi comparison launch is a prerelease development instrument, not product. */
2
+ export interface CliCapabilities {
3
+ readonly developmentComparison: boolean;
4
+ }
5
+ export declare function cliCapabilities(version: string): CliCapabilities;
6
+ export declare function isPrereleaseVersion(version: string): boolean;
@@ -1,6 +1,6 @@
1
1
  import { prerelease } from "semver";
2
2
  export function cliCapabilities(version) {
3
- return Object.freeze({ developmentProfiles: isPrereleaseVersion(version) });
3
+ return Object.freeze({ developmentComparison: isPrereleaseVersion(version) });
4
4
  }
5
5
  export function isPrereleaseVersion(version) {
6
6
  return (prerelease(version)?.length ?? 0) > 0;
@@ -1,6 +1,7 @@
1
- import { type InteractiveLaunchIntent, type LaunchProfileId } from "../features/launch/index.js";
1
+ import { type InteractiveLaunchIntent, type LaunchProfileId, type SessionSelection } from "../features/launch/index.js";
2
2
  import type { CliCapabilities } from "./capabilities.js";
3
3
  import type { PackageCommandRequest } from "./packages.js";
4
+ import { type PackageCliVerb, type PackageSyntaxDiagnostic } from "./package-messages.js";
4
5
  export type UpdateChannel = "stable" | "next";
5
6
  export interface CliHandlers {
6
7
  readonly launch: (intent: InteractiveLaunchIntent) => Promise<number>;
@@ -9,13 +10,26 @@ export interface CliHandlers {
9
10
  readonly packages: (request: PackageCommandRequest) => Promise<number>;
10
11
  }
11
12
  export interface CliOutput {
13
+ readonly stdout: (message: string) => void;
12
14
  readonly stderr: (message: string) => void;
13
15
  }
14
16
  export declare function cliUsage(capabilities: CliCapabilities): string;
17
+ export declare function cliHelp(capabilities: CliCapabilities): string;
15
18
  export declare function dispatchCli(arguments_: readonly string[], handlers: CliHandlers, output: CliOutput, capabilities: CliCapabilities): Promise<number>;
16
19
  export type CliCommand = {
20
+ readonly kind: "noop";
21
+ } | {
22
+ readonly kind: "help";
23
+ } | {
24
+ readonly kind: "package-help";
25
+ readonly verb: PackageCliVerb;
26
+ } | {
27
+ readonly kind: "package-error";
28
+ readonly diagnostic: PackageSyntaxDiagnostic;
29
+ } | {
17
30
  readonly kind: "launch";
18
31
  readonly profileId: LaunchProfileId;
32
+ readonly sessionSelection?: SessionSelection;
19
33
  } | {
20
34
  readonly kind: "version";
21
35
  } | {
@@ -0,0 +1,261 @@
1
+ import { interactiveLaunchIntent, parseSessionSelection } from "../features/launch/index.js";
2
+ import { packageCommandHelp, renderPackageSyntax } from "./package-messages.js";
3
+ import { PRODUCT_TEXT } from "../product-identity.js";
4
+ export function cliUsage(capabilities) {
5
+ return PRODUCT_TEXT.usage([
6
+ "",
7
+ "--session <path|id>",
8
+ "--session-dir <dir> --session <path|id>",
9
+ ...(capabilities.developmentComparison ? ["pi"] : []),
10
+ "--help",
11
+ "-h",
12
+ "--version",
13
+ "-v",
14
+ "update",
15
+ "update --develop [preview-or-version]",
16
+ "update --models",
17
+ "pi install <source>",
18
+ "pi remove <source>",
19
+ "pi uninstall <source>",
20
+ "pi list",
21
+ "pi update --extensions",
22
+ "pi update --models",
23
+ "pi update <source>",
24
+ ]);
25
+ }
26
+ export function cliHelp(capabilities) {
27
+ const command = PRODUCT_TEXT.commandName;
28
+ return [
29
+ "Common:",
30
+ ` ${command}`,
31
+ ` ${command} --session <path|id>`,
32
+ ` ${command} --session-dir <dir> --session <path|id>`,
33
+ ...(capabilities.developmentComparison ? [` ${command} pi`] : []),
34
+ ` ${command} --help`,
35
+ ` ${command} -h`,
36
+ ` ${command} --version`,
37
+ ` ${command} -v`,
38
+ "",
39
+ "Update:",
40
+ ` ${command} update`,
41
+ ` ${command} update --develop [preview-or-version]`,
42
+ ` ${command} update --models`,
43
+ "",
44
+ "Pi-compatible packages:",
45
+ ` ${command} pi install <source>`,
46
+ ` ${command} pi remove <source>`,
47
+ ` ${command} pi uninstall <source>`,
48
+ ` ${command} pi list`,
49
+ ` ${command} pi update --extensions`,
50
+ ` ${command} pi update --models`,
51
+ ` ${command} pi update <source>`,
52
+ "",
53
+ ].join("\n");
54
+ }
55
+ const PROFILE_WORDS = new Set(["pi"]);
56
+ export async function dispatchCli(arguments_, handlers, output, capabilities) {
57
+ const command = parseCliCommand(arguments_, capabilities);
58
+ if (command.kind === "noop")
59
+ return 0;
60
+ if (command.kind === "help") {
61
+ output.stdout(cliHelp(capabilities));
62
+ return 0;
63
+ }
64
+ if (command.kind === "package-help") {
65
+ output.stdout(packageCommandHelp(command.verb));
66
+ return 0;
67
+ }
68
+ if (command.kind === "package-error") {
69
+ output.stderr(renderPackageSyntax(command.diagnostic));
70
+ return 2;
71
+ }
72
+ if (command.kind === "error") {
73
+ output.stderr(`${command.message}\n`);
74
+ return 2;
75
+ }
76
+ if (command.kind === "launch")
77
+ return await handlers.launch(interactiveLaunchIntent(command.profileId, command.sessionSelection));
78
+ if (command.kind === "version")
79
+ return await handlers.version();
80
+ if (command.kind === "packages")
81
+ return await handlers.packages(command.request);
82
+ return await handlers.update(command.channel, command.target);
83
+ }
84
+ export function parseCliCommand(arguments_, capabilities) {
85
+ if (arguments_.length === 0)
86
+ return { kind: "launch", profileId: "a1" };
87
+ const [command, ...rest] = arguments_;
88
+ if (command === "--session" || command === "--session-dir") {
89
+ try {
90
+ const sessionSelection = parseSessionSelection(arguments_);
91
+ return { kind: "launch", profileId: "a1", ...(sessionSelection === undefined ? {} : { sessionSelection }) };
92
+ }
93
+ catch (error) {
94
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic(`could not parse session launch: ${error instanceof Error ? error.message : String(error)}`) };
95
+ }
96
+ }
97
+ if (command === "--help" || command === "-h")
98
+ return withoutArguments(rest, { kind: "help" });
99
+ if (command === "--version" || command === "-v")
100
+ return withoutArguments(rest, { kind: "version" });
101
+ if (command === "pi") {
102
+ if (rest.length > 0)
103
+ return parsePiPackageCommand(rest);
104
+ return capabilities.developmentComparison ? { kind: "launch", profileId: "pi" } : { kind: "noop" };
105
+ }
106
+ if (command === "update")
107
+ return parseUpdate(rest);
108
+ if (command?.startsWith("update:"))
109
+ return { kind: "noop" };
110
+ // Rationale: unsupported and reserved command spaces are deliberately quiet. Help is
111
+ // explicit, and a typo must never start an interactive or maintenance path.
112
+ return { kind: "noop" };
113
+ }
114
+ /**
115
+ * Stable update is the empty form. `--develop` selects the moving development
116
+ * head or one immutable numbered preview, while model refresh remains a separate
117
+ * operation that cannot be combined with either update channel.
118
+ */
119
+ function parseUpdate(rest) {
120
+ if (rest.length === 0)
121
+ return { kind: "update", channel: "stable" };
122
+ const [selector, ...values] = rest;
123
+ // Compatibility: removed notation is unsupported rather than deprecated.
124
+ if (selector === "self")
125
+ return { kind: "noop" };
126
+ if (selector === "--develop") {
127
+ if (values.length === 0)
128
+ return { kind: "update", channel: "next" };
129
+ if (values.length > 1)
130
+ return updateGrammarError("--develop accepts at most one preview number or version.");
131
+ const [target] = values;
132
+ if (target === undefined || !isDevelopmentTarget(target)) {
133
+ return updateGrammarError(`--develop received an unusable preview: ${target ?? ""}`);
134
+ }
135
+ return { kind: "update", channel: "next", target };
136
+ }
137
+ if (selector === "--models") {
138
+ if (values.length > 0)
139
+ return updateGrammarError("--models cannot be combined with another update selector.");
140
+ return { kind: "packages", request: { verb: "refresh-models", source: null } };
141
+ }
142
+ if (selector === "pi")
143
+ return pinnedPiUpdateError();
144
+ if (selector !== undefined && selector.startsWith("-"))
145
+ return unknownOption(selector, "update");
146
+ // Rationale: positional update targets are reserved for a future A1-native plugin model.
147
+ return { kind: "noop" };
148
+ }
149
+ function isDevelopmentTarget(target) {
150
+ return /^[1-9]\d*$/.test(target) || /^\d+\.\d+\.\d+-dev\.[1-9]\d*$/.test(target);
151
+ }
152
+ function updateGrammarError(detail) {
153
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic(`could not parse update: ${detail}`) };
154
+ }
155
+ function parsePiPackageCommand(arguments_) {
156
+ const [verb, ...rest] = arguments_;
157
+ if ((verb === "install" || verb === "remove" || verb === "uninstall" || verb === "list" || verb === "update")
158
+ && rest.some(value => value === "--help" || value === "-h")) {
159
+ return { kind: "package-help", verb: verb === "uninstall" ? "remove" : verb };
160
+ }
161
+ if (verb === "install" || verb === "remove" || verb === "uninstall") {
162
+ return parseSourceCommand(verb === "install" ? "install" : "remove", rest);
163
+ }
164
+ if (verb === "list") {
165
+ const flag = rest.find(argument => argument.startsWith("-"));
166
+ if (flag !== undefined)
167
+ return packageOptionError(flag, "list");
168
+ if (rest[0] !== undefined)
169
+ return packageSyntax({ verb: "list", kind: "unexpected-argument", value: rest[0] });
170
+ return { kind: "packages", request: { verb: "list", source: null } };
171
+ }
172
+ if (verb === "update")
173
+ return parsePiPackageUpdate(rest);
174
+ return { kind: "noop" };
175
+ }
176
+ function parsePiPackageUpdate(rest) {
177
+ if (rest.length === 0)
178
+ return pinnedPiUpdateError();
179
+ if (rest.length > 1) {
180
+ const unknown = rest.find(value => value.startsWith("-") && !["--extensions", "--models", "--self", "--all"].includes(value));
181
+ if (unknown !== undefined)
182
+ return packageOptionError(unknown, "update");
183
+ if (rest.includes("--self") || rest.includes("--all") || rest.includes("self") || rest.includes("pi"))
184
+ return pinnedPiUpdateError();
185
+ if (rest.every(value => value === rest[0]) && rest[0]?.startsWith("-")) {
186
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic("pi update accepts one target.") };
187
+ }
188
+ const sources = rest.filter(value => !value.startsWith("-"));
189
+ if (sources[1] !== undefined)
190
+ return packageSyntax({ verb: "update", kind: "unexpected-argument", value: sources[1] });
191
+ const message = rest.includes("--models")
192
+ ? rest.includes("--extensions")
193
+ ? "--models cannot be combined with --self, --extensions, --all, or --extension"
194
+ : "--models cannot be combined with a positional source"
195
+ : "positional update targets cannot be combined with --self, --extensions, or --all";
196
+ return packageSyntax({ verb: "update", kind: "conflict", message });
197
+ }
198
+ const [target] = rest;
199
+ if (target === "--extensions")
200
+ return { kind: "packages", request: { verb: "update", source: null } };
201
+ if (target === "--models")
202
+ return { kind: "packages", request: { verb: "refresh-models", source: null } };
203
+ if (target === "--self" || target === "--all" || target === "self" || target === "pi")
204
+ return pinnedPiUpdateError();
205
+ if (target === undefined || target.startsWith("-"))
206
+ return packageOptionError(target ?? "", "update");
207
+ return { kind: "packages", request: { verb: "update", source: target } };
208
+ }
209
+ function pinnedPiUpdateError() {
210
+ return {
211
+ kind: "error",
212
+ message: [
213
+ PRODUCT_TEXT.diagnostic("pins its certified Pi runtime and cannot update it independently."),
214
+ "Use:",
215
+ ` ${PRODUCT_TEXT.commandName} update Update A1`,
216
+ ` ${PRODUCT_TEXT.commandName} pi update --extensions Update Pi-compatible packages`,
217
+ ` ${PRODUCT_TEXT.commandName} pi update --models Refresh model catalogs`,
218
+ ].join("\n"),
219
+ };
220
+ }
221
+ function parseSourceCommand(verb, rest) {
222
+ const flag = rest.find(argument => argument.startsWith("-"));
223
+ if (flag !== undefined)
224
+ return packageOptionError(flag, verb);
225
+ const [source, extra] = rest;
226
+ if (extra !== undefined)
227
+ return packageSyntax({ verb, kind: "unexpected-argument", value: extra });
228
+ if (source === undefined)
229
+ return packageSyntax({ verb, kind: "missing-source" });
230
+ if (PROFILE_WORDS.has(source))
231
+ return profileRejection(verb);
232
+ return { kind: "packages", request: { verb, source } };
233
+ }
234
+ function packageSyntax(diagnostic) {
235
+ return { kind: "package-error", diagnostic };
236
+ }
237
+ function packageOptionError(option, verb) {
238
+ if (option.startsWith("--profile") || option === "-l" || option === "--local")
239
+ return profileRejection(verb);
240
+ // Compatibility: these recognized Pi flags remain outside A1's supported subset.
241
+ if (["--extension", "--approve", "--no-approve", "-a", "-na", "--force"].includes(option)) {
242
+ return unknownOption(option, `pi ${verb}`);
243
+ }
244
+ return packageSyntax({ verb, kind: "unknown-option", value: option });
245
+ }
246
+ function withoutArguments(rest, command) {
247
+ if (rest.length === 0)
248
+ return command;
249
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic("commands do not accept additional arguments.") };
250
+ }
251
+ function profileRejection(verb) {
252
+ return {
253
+ kind: "error",
254
+ message: PRODUCT_TEXT.diagnostic(`manages packages in its own profile, so ${verb} takes no profile; Pi manages Pi's own profile.`),
255
+ };
256
+ }
257
+ function unknownOption(option, verb) {
258
+ if (option.startsWith("--profile"))
259
+ return profileRejection(verb);
260
+ return { kind: "error", message: PRODUCT_TEXT.diagnostic(`received an unknown option for ${verb}: ${option}`) };
261
+ }
@@ -0,0 +1,26 @@
1
+ import chalk from "chalk";
2
+ /** Supported subset of pinned Pi's package-manager CLI presentation. */
3
+ export type PackageCliVerb = "install" | "remove" | "list" | "update";
4
+ export type PackageSyntaxDiagnostic = {
5
+ readonly verb: PackageCliVerb;
6
+ readonly kind: "missing-source";
7
+ } | {
8
+ readonly verb: PackageCliVerb;
9
+ readonly kind: "unknown-option";
10
+ readonly value: string;
11
+ } | {
12
+ readonly verb: PackageCliVerb;
13
+ readonly kind: "unexpected-argument";
14
+ readonly value: string;
15
+ } | {
16
+ readonly verb: "update";
17
+ readonly kind: "conflict";
18
+ readonly message: string;
19
+ };
20
+ type MessageStyle = Pick<typeof chalk, "red" | "dim" | "bold">;
21
+ export declare function packageCommandUsage(verb: PackageCliVerb): string;
22
+ /** Diagnostic facts stay unstyled until the terminal boundary decides color support. */
23
+ export declare function renderPackageSyntax(diagnostic: PackageSyntaxDiagnostic, style?: MessageStyle): string;
24
+ /** Pi's help layout, with unsupported options and examples deliberately absent. */
25
+ export declare function packageCommandHelp(verb: PackageCliVerb, style?: MessageStyle): string;
26
+ export {};
@@ -0,0 +1,71 @@
1
+ // Provenance: wording/layout adapted from Pi 0.84.2 packages/coding-agent/src/package-manager-cli.ts
2
+ // at 914cf1472e715297caa30db4b9535d534a9eb718 (MIT); grammar is restricted to A1's supported subset.
3
+ import chalk from "chalk";
4
+ import { PRODUCT_TEXT } from "../product-identity.js";
5
+ export function packageCommandUsage(verb) {
6
+ const command = `${PRODUCT_TEXT.commandName} pi ${verb}`;
7
+ if (verb === "install" || verb === "remove")
8
+ return `${command} <source>`;
9
+ if (verb === "update")
10
+ return `${command} [source|--extensions|--models]`;
11
+ return command;
12
+ }
13
+ /** Diagnostic facts stay unstyled until the terminal boundary decides color support. */
14
+ export function renderPackageSyntax(diagnostic, style = chalk) {
15
+ const usage = packageCommandUsage(diagnostic.verb);
16
+ let message;
17
+ if (diagnostic.kind === "unknown-option") {
18
+ return `${style.red(`Unknown option ${diagnostic.value} for "${diagnostic.verb}".`)}\n`
19
+ + `${style.dim(`Use "${PRODUCT_TEXT.commandName} --help" or "${usage}".`)}\n`;
20
+ }
21
+ if (diagnostic.kind === "missing-source")
22
+ message = `Missing ${diagnostic.verb} source.`;
23
+ else if (diagnostic.kind === "unexpected-argument")
24
+ message = `Unexpected argument ${diagnostic.value}.`;
25
+ else
26
+ message = diagnostic.message;
27
+ return `${style.red(message)}\n${style.dim(`Usage: ${usage}`)}\n`;
28
+ }
29
+ /** Pi's help layout, with unsupported options and examples deliberately absent. */
30
+ export function packageCommandHelp(verb, style = chalk) {
31
+ const command = `${PRODUCT_TEXT.commandName} pi`;
32
+ const header = `${style.bold("Usage:")}\n ${packageCommandUsage(verb)}\n\n`;
33
+ switch (verb) {
34
+ case "install":
35
+ return header + `Install a package and add it to settings.
36
+
37
+ Examples:
38
+ ${command} install npm:@foo/bar
39
+ ${command} install git:github.com/user/repo
40
+ ${command} install git:git@github.com:user/repo
41
+ ${command} install https://github.com/user/repo
42
+ ${command} install ssh://git@github.com/user/repo
43
+ ${command} install ./local/path
44
+
45
+ `;
46
+ case "remove":
47
+ return header + `Remove a package and its source from settings.
48
+ Alias: ${command} uninstall <source>
49
+
50
+ Examples:
51
+ ${command} remove npm:@foo/bar
52
+ ${command} uninstall npm:@foo/bar
53
+
54
+ `;
55
+ case "list":
56
+ return header + "List installed packages from user settings.\n\n";
57
+ case "update":
58
+ return header + `Update installed packages or model catalogs.
59
+
60
+ Options:
61
+ --extensions Update installed packages only
62
+ --models Refresh model catalogs only
63
+
64
+ Short forms:
65
+ ${command} update --extensions Update installed packages only
66
+ ${command} update --models Refresh model catalogs only
67
+ ${command} update <source> Update one package
68
+
69
+ `;
70
+ }
71
+ }
@@ -1,5 +1,5 @@
1
1
  import { initializeProductProfile } from "../features/launch/index.js";
2
- import type { AgentPackageOutcome, AgentPackagesPort, AgentPackagesPortInput } from "../foundation/agent-engine-contracts/index.js";
2
+ import type { AgentPackageOutcome, AgentPackagesPort, AgentPackagesPortInput } from "../contracts/agent-engine/index.js";
3
3
  /**
4
4
  * Package commands manage A1's own profile and nothing else, so no request carries
5
5
  * a profile: `update` with no source means every installed package, and refreshing
@@ -11,6 +11,13 @@ export interface PackageCommandRequest {
11
11
  readonly verb: PackageCommandVerb;
12
12
  readonly source: string | null;
13
13
  }
14
+ export interface PackageCommandStyle {
15
+ readonly dim: (message: string) => string;
16
+ readonly bold: (message: string) => string;
17
+ readonly green: (message: string) => string;
18
+ readonly red: (message: string) => string;
19
+ readonly yellow: (message: string) => string;
20
+ }
14
21
  export interface PackageCommandEnvironment {
15
22
  readonly createPort: (input: AgentPackagesPortInput) => AgentPackagesPort;
16
23
  readonly cwd?: string;
@@ -18,6 +25,8 @@ export interface PackageCommandEnvironment {
18
25
  readonly stdout?: (message: string) => void;
19
26
  readonly stderr?: (message: string) => void;
20
27
  readonly initializeProfile?: typeof initializeProductProfile;
28
+ /** Defaults to Chalk's terminal-aware styles; injectable for transcript tests. */
29
+ readonly style?: PackageCommandStyle;
21
30
  }
22
31
  export declare function runPackageCommand(request: PackageCommandRequest, environment: PackageCommandEnvironment): Promise<number>;
23
- export declare function renderPackageOutcome(outcome: AgentPackageOutcome, profileRoot: string): string;
32
+ export declare function renderPackageOutcome(outcome: AgentPackageOutcome, style?: PackageCommandStyle): string;
@@ -1,3 +1,4 @@
1
+ import chalk from "chalk";
1
2
  import { configurationRootForProfile, initializeProductProfile, resolveLaunchProfilePaths } from "../features/launch/index.js";
2
3
  import { PRODUCT_TEXT } from "../product-identity.js";
3
4
  export async function runPackageCommand(request, environment) {
@@ -5,6 +6,7 @@ export async function runPackageCommand(request, environment) {
5
6
  const stderr = environment.stderr ?? (message => process.stderr.write(message));
6
7
  const cwd = environment.cwd ?? process.cwd();
7
8
  const processEnvironment = environment.environment ?? process.env;
9
+ const style = environment.style ?? chalk;
8
10
  const paths = resolveLaunchProfilePaths({ environment: processEnvironment });
9
11
  const profileRoot = configurationRootForProfile("a1", paths);
10
12
  if (profileRoot === null)
@@ -19,10 +21,15 @@ export async function runPackageCommand(request, environment) {
19
21
  const port = environment.createPort({
20
22
  profileRoot,
21
23
  cwd,
22
- onProgress: progress => stdout(`${progress.message}\n`),
24
+ onProgress: progress => stdout(style.dim(`${progress.message}\n`)),
25
+ onDiagnostic: diagnostic => {
26
+ stderr(`${style.yellow(diagnostic.message)}\n`);
27
+ if (diagnostic.detail)
28
+ stderr(`${style.dim(diagnostic.detail)}\n`);
29
+ },
23
30
  });
24
31
  const outcome = await runVerb(port, request);
25
- const rendered = renderPackageOutcome(outcome, profileRoot);
32
+ const rendered = renderPackageOutcome(outcome, style);
26
33
  (outcome.status === "completed" ? stdout : stderr)(rendered);
27
34
  return outcome.status === "completed" ? 0 : 1;
28
35
  }
@@ -37,48 +44,38 @@ async function runVerb(port, request) {
37
44
  throw new Error(PRODUCT_TEXT.diagnostic(`requires a source for ${request.verb}`));
38
45
  return request.verb === "install" ? await port.install(request.source) : await port.remove(request.source);
39
46
  }
40
- export function renderPackageOutcome(outcome, profileRoot) {
41
- const name = PRODUCT_TEXT.displayName;
47
+ export function renderPackageOutcome(outcome, style = chalk) {
42
48
  if (outcome.status === "failed") {
43
- return `${PRODUCT_TEXT.diagnostic(`could not ${describeOperation(outcome.operation)}: ${outcome.detail ?? "unknown failure"}`)}\n`;
49
+ const fallback = outcome.operation === "refresh-models" ? "Unknown model catalog refresh error" : "Unknown package command error";
50
+ return `${style.red(`Error: ${outcome.detail ?? fallback}`)}\n`;
44
51
  }
45
52
  if (outcome.status === "not-found") {
46
- return `${PRODUCT_TEXT.diagnostic(`found no package matching ${outcome.source ?? "that source"} in ${profileRoot}.`)}\n`;
53
+ return `${style.red(`No matching package found for ${outcome.source ?? "that source"}`)}\n`;
47
54
  }
48
55
  switch (outcome.operation) {
56
+ case "refresh-models":
57
+ return `${style.green("Model catalogs refreshed")}\n`;
49
58
  case "install":
50
- return `${name} installed ${outcome.source} into ${profileRoot}.\n`
51
- + `Restart ${PRODUCT_TEXT.commandName} for a running session to load it.\n`;
59
+ return `${style.green(`Installed ${outcome.source}`)}\n`;
52
60
  case "remove":
53
- return `${name} removed ${outcome.source} from ${profileRoot}.\n`;
61
+ return `${style.green(`Removed ${outcome.source}`)}\n`;
54
62
  case "update":
55
- return outcome.source === null
56
- ? `${name} updated the packages in ${profileRoot}.\n`
57
- : `${name} updated ${outcome.source}.\n`;
58
- case "refresh-models":
59
- return `${name} refreshed the model catalogs in ${profileRoot}.\n`;
63
+ return `${style.green(outcome.source === null ? "Updated packages" : `Updated ${outcome.source}`)}\n`;
60
64
  case "list":
61
- return renderPackageList(outcome, profileRoot);
65
+ return renderPackageList(outcome, style);
62
66
  }
63
67
  }
64
- function renderPackageList(outcome, profileRoot) {
68
+ function renderPackageList(outcome, style) {
65
69
  if (outcome.packages.length === 0)
66
- return `${PRODUCT_TEXT.displayName} has no packages installed in ${profileRoot}.\n`;
67
- const lines = [`Packages installed for ${PRODUCT_TEXT.commandName} in ${profileRoot}:`];
70
+ return `${style.dim("No packages installed.")}\n`;
71
+ const lines = [style.bold("User packages:")];
68
72
  for (const entry of outcome.packages) {
69
- lines.push(` ${entry.source}${entry.filtered ? " (partly enabled)" : ""}`);
73
+ lines.push(` ${entry.source}${entry.filtered ? " (filtered)" : ""}`);
70
74
  if (entry.installedPath !== null)
71
- lines.push(` ${entry.installedPath}`);
75
+ lines.push(style.dim(` ${entry.installedPath}`));
72
76
  }
73
77
  return `${lines.join("\n")}\n`;
74
78
  }
75
- function describeOperation(operation) {
76
- if (operation === "refresh-models")
77
- return "refresh the model catalogs";
78
- if (operation === "list")
79
- return "list installed packages";
80
- return `${operation} the package`;
81
- }
82
79
  function message(error) {
83
80
  return (error instanceof Error ? error.message : String(error)).replace(/\s+/g, " ").trim();
84
81
  }