@timurproko/a1 0.1.8-dev.112 → 0.1.8-dev.121

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 (386) hide show
  1. package/bin/cli.js +7 -7
  2. package/bin/guardian.js +1 -1
  3. package/bin/supervisor.js +1 -1
  4. package/bin/ui.js +3 -3
  5. package/dist/{src/cli → cli}/packages.d.ts +1 -1
  6. package/dist/composition/agent-engine-bridge.d.ts +3 -0
  7. package/dist/composition/agent-engine-bridge.js +108 -0
  8. package/dist/composition/index.d.ts +3 -0
  9. package/dist/composition/index.js +3 -0
  10. package/dist/composition/owned-ui.d.ts +25 -0
  11. package/dist/composition/owned-ui.js +40 -0
  12. package/dist/composition/process.d.ts +16 -0
  13. package/dist/composition/process.js +45 -0
  14. package/dist/composition/settings-route-host.d.ts +8 -0
  15. package/dist/composition/settings-route-host.js +73 -0
  16. package/dist/{src/features → features}/owned-ui/customization.d.ts +1 -1
  17. package/dist/{src/features → features}/owned-ui/customization.js +1 -1
  18. package/dist/{src/features → features}/owned-ui/diagnostics.d.ts +1 -1
  19. package/dist/{src/features → features}/owned-ui/run.d.ts +2 -2
  20. package/dist/{src/features → features}/owned-ui/settings-app.d.ts +3 -3
  21. package/dist/{src/features → features}/owned-ui/settings-app.js +1 -1
  22. package/dist/{src/features → features}/workspace/capabilities.d.ts +1 -1
  23. package/dist/{src/features → features}/workspace/reducer.d.ts +1 -1
  24. package/dist/{src/features → features}/workspace/reducer.js +1 -1
  25. package/dist/{src/features → features}/workspace/router.d.ts +1 -1
  26. package/dist/{src/features → features}/workspace/store.d.ts +1 -1
  27. package/dist/{src/foundation → foundation}/launch-guardian/main.js +8 -2
  28. package/dist/foundation/lifecycle/paths.d.ts +28 -0
  29. package/dist/{src/foundation → foundation}/lifecycle/paths.js +21 -0
  30. package/dist/{src/foundation → foundation}/native-host-protocol/messages.d.ts +1 -1
  31. package/dist/{src/foundation → foundation}/native-host-protocol/messages.js +1 -1
  32. package/dist/{src/foundation → foundation}/release/bootstrap.js +42 -10
  33. package/dist/foundation/release/endpoints.d.ts +20 -0
  34. package/dist/foundation/release/endpoints.js +50 -0
  35. package/dist/{src/foundation → foundation}/release/index.d.ts +1 -0
  36. package/dist/{src/foundation → foundation}/release/index.js +1 -0
  37. package/dist/{src/foundation → foundation}/release/release-gc.d.ts +4 -1
  38. package/dist/{src/foundation → foundation}/release/release-gc.js +9 -1
  39. package/dist/{src/foundation → foundation}/release/update.d.ts +8 -0
  40. package/dist/{src/foundation → foundation}/release/update.js +60 -22
  41. package/dist/{src/foundation → foundation}/storage/control-store.d.ts +1 -1
  42. package/dist/{src/foundation → foundation}/storage/control-store.js +1 -1
  43. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.d.ts +1 -1
  44. package/dist/{src/foundation → foundation}/structured-agent-runtime/backpressure.js +1 -1
  45. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.d.ts +1 -1
  46. package/dist/{src/foundation → foundation}/structured-agent-runtime/commands.js +1 -1
  47. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.d.ts +1 -1
  48. package/dist/{src/foundation → foundation}/structured-agent-runtime/handshake.js +1 -1
  49. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.d.ts +1 -1
  50. package/dist/{src/foundation → foundation}/structured-agent-runtime/reconnection.js +1 -1
  51. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.d.ts +1 -1
  52. package/dist/{src/foundation → foundation}/structured-agent-runtime/state.js +1 -1
  53. package/dist/foundation/supervision/index.d.ts +3 -0
  54. package/dist/foundation/supervision/index.js +3 -0
  55. package/dist/{src/foundation → foundation}/supervision/main.js +11 -5
  56. package/dist/foundation/supervision/paths.d.ts +1 -0
  57. package/dist/foundation/supervision/paths.js +1 -0
  58. package/dist/{src/foundation → foundation}/supervision/server.d.ts +18 -1
  59. package/dist/{src/foundation → foundation}/supervision/server.js +52 -1
  60. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.d.ts +1 -1
  61. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.js +2 -2
  62. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.d.ts +1 -1
  63. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.d.ts +1 -1
  64. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.d.ts +1 -1
  65. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-presenters-transcript.js +1 -1
  66. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.d.ts +1 -1
  67. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.d.ts +1 -1
  68. package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.d.ts +1 -1
  69. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.d.ts +2 -2
  70. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/adapter.js +59 -6
  71. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.js +2 -2
  72. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.d.ts +1 -1
  73. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.d.ts +1 -1
  74. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/package-integration.js +1 -1
  75. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.d.ts +1 -1
  76. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.d.ts +1 -1
  77. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/session-integration.js +1 -1
  78. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.d.ts +1 -1
  79. package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.d.ts +1 -1
  80. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/owned-ui}/route-host.d.ts +1 -1
  81. package/dist/{src/foundation/pi-owned-ui-integration/session-shell.d.ts → integrations/pi/owned-ui/session-shell-root.d.ts} +7 -46
  82. package/dist/integrations/pi/owned-ui/session-shell-root.js +722 -0
  83. package/dist/integrations/pi/owned-ui/session-shell.d.ts +46 -0
  84. package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/owned-ui}/session-shell.js +6 -720
  85. package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.d.ts +1 -1
  86. package/dist/native/darwin-arm64/manifest.json +1 -1
  87. package/dist/native/linux-x64/manifest.json +1 -1
  88. package/dist/native/win32-x64/manifest.json +2 -2
  89. package/dist/native/win32-x64/process-guardian.exe +0 -0
  90. package/dist/{src/foundation/ui-apps → ui/apps}/contracts.d.ts +1 -1
  91. package/dist/{src/foundation/ui-apps → ui/apps}/host.d.ts +1 -1
  92. package/dist/{src/foundation/ui-apps → ui/apps}/host.js +1 -1
  93. package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.d.ts +1 -1
  94. package/docs/architecture/boundaries.md +8 -8
  95. package/docs/architecture/project-structure.md +52 -29
  96. package/docs/architecture/toolchain.md +4 -4
  97. package/docs/ci-release-runbook.md +1 -1
  98. package/docs/features/launch-profiles.md +6 -8
  99. package/docs/manual-owned-ui-checkpoint.md +52 -0
  100. package/docs/manual-terminal-colour-check.md +1 -1
  101. package/package.json +23 -23
  102. package/dist/src/composition/index.d.ts +0 -48
  103. package/dist/src/composition/index.js +0 -258
  104. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  105. package/dist/src/foundation/supervision/index.d.ts +0 -3
  106. package/dist/src/foundation/supervision/index.js +0 -3
  107. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  108. package/dist/src/foundation/supervision/paths.js +0 -1
  109. package/docs/manual-transparent-checkpoint.md +0 -53
  110. /package/dist/{src/cli → cli}/capabilities.d.ts +0 -0
  111. /package/dist/{src/cli → cli}/capabilities.js +0 -0
  112. /package/dist/{src/cli → cli}/dispatch.d.ts +0 -0
  113. /package/dist/{src/cli → cli}/dispatch.js +0 -0
  114. /package/dist/{src/cli → cli}/index.d.ts +0 -0
  115. /package/dist/{src/cli → cli}/index.js +0 -0
  116. /package/dist/{src/cli → cli}/packages.js +0 -0
  117. /package/dist/{src/cli → cli}/version-stats.d.ts +0 -0
  118. /package/dist/{src/cli → cli}/version-stats.js +0 -0
  119. /package/dist/{src/cli → cli}/version.d.ts +0 -0
  120. /package/dist/{src/cli → cli}/version.js +0 -0
  121. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.d.ts +0 -0
  122. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  123. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  124. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.js +0 -0
  125. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.d.ts +0 -0
  126. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain.js +0 -0
  127. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.d.ts +0 -0
  128. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/index.js +0 -0
  129. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  130. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  131. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.d.ts +0 -0
  132. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  133. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  134. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.js +0 -0
  135. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  136. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  137. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  138. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  139. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.d.ts +0 -0
  140. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  141. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.d.ts +0 -0
  142. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/index.js +0 -0
  143. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.d.ts +0 -0
  144. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  145. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.d.ts +0 -0
  146. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/validation.js +0 -0
  147. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.d.ts +0 -0
  148. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  149. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.d.ts +0 -0
  150. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/index.js +0 -0
  151. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.d.ts +0 -0
  152. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/model.js +0 -0
  153. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.d.ts +0 -0
  154. /package/dist/{src/foundation/workspace-contracts → contracts/workspace}/validation.js +0 -0
  155. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  156. /package/dist/{src/features → features}/launch/development-launch.js +0 -0
  157. /package/dist/{src/features → features}/launch/index.d.ts +0 -0
  158. /package/dist/{src/features → features}/launch/index.js +0 -0
  159. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  160. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  161. /package/dist/{src/features → features}/launch/intent.d.ts +0 -0
  162. /package/dist/{src/features → features}/launch/intent.js +0 -0
  163. /package/dist/{src/features → features}/launch/prepare-launch.d.ts +0 -0
  164. /package/dist/{src/features → features}/launch/prepare-launch.js +0 -0
  165. /package/dist/{src/features → features}/launch/profile-paths.d.ts +0 -0
  166. /package/dist/{src/features → features}/launch/profile-paths.js +0 -0
  167. /package/dist/{src/features → features}/launch/profiles.d.ts +0 -0
  168. /package/dist/{src/features → features}/launch/profiles.js +0 -0
  169. /package/dist/{src/features → features}/launch/runtime-selection.d.ts +0 -0
  170. /package/dist/{src/features → features}/launch/runtime-selection.js +0 -0
  171. /package/dist/{src/features → features}/owned-ui/diagnostics.js +0 -0
  172. /package/dist/{src/features → features}/owned-ui/index.d.ts +0 -0
  173. /package/dist/{src/features → features}/owned-ui/index.js +0 -0
  174. /package/dist/{src/features → features}/owned-ui/run.js +0 -0
  175. /package/dist/{src/features → features}/workspace/capabilities.js +0 -0
  176. /package/dist/{src/features → features}/workspace/index.d.ts +0 -0
  177. /package/dist/{src/features → features}/workspace/index.js +0 -0
  178. /package/dist/{src/features → features}/workspace/presentation.d.ts +0 -0
  179. /package/dist/{src/features → features}/workspace/presentation.js +0 -0
  180. /package/dist/{src/features → features}/workspace/reconciliation.d.ts +0 -0
  181. /package/dist/{src/features → features}/workspace/reconciliation.js +0 -0
  182. /package/dist/{src/features → features}/workspace/router.js +0 -0
  183. /package/dist/{src/features → features}/workspace/store.js +0 -0
  184. /package/dist/{src/foundation → foundation}/launch-guardian/index.d.ts +0 -0
  185. /package/dist/{src/foundation → foundation}/launch-guardian/index.js +0 -0
  186. /package/dist/{src/foundation → foundation}/launch-guardian/main.d.ts +0 -0
  187. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  188. /package/dist/{src/foundation → foundation}/lifecycle/commands.js +0 -0
  189. /package/dist/{src/foundation → foundation}/lifecycle/index.d.ts +0 -0
  190. /package/dist/{src/foundation → foundation}/lifecycle/index.js +0 -0
  191. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  192. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  193. /package/dist/{src/foundation → foundation}/lifecycle/model.d.ts +0 -0
  194. /package/dist/{src/foundation → foundation}/lifecycle/model.js +0 -0
  195. /package/dist/{src/foundation → foundation}/native-host-protocol/codec.d.ts +0 -0
  196. /package/dist/{src/foundation → foundation}/native-host-protocol/codec.js +0 -0
  197. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.d.ts +0 -0
  198. /package/dist/{src/foundation → foundation}/native-host-protocol/evidence.js +0 -0
  199. /package/dist/{src/foundation → foundation}/native-host-protocol/index.d.ts +0 -0
  200. /package/dist/{src/foundation → foundation}/native-host-protocol/index.js +0 -0
  201. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.d.ts +0 -0
  202. /package/dist/{src/foundation → foundation}/native-host-protocol/proof-gate.js +0 -0
  203. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  204. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  205. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  206. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  207. /package/dist/{src/foundation → foundation}/process-containment/index.d.ts +0 -0
  208. /package/dist/{src/foundation → foundation}/process-containment/index.js +0 -0
  209. /package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.d.ts +0 -0
  210. /package/dist/{src/foundation → foundation}/process-containment/linux-process-inspector.js +0 -0
  211. /package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.d.ts +0 -0
  212. /package/dist/{src/foundation → foundation}/process-containment/native-guardian-containment.js +0 -0
  213. /package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.d.ts +0 -0
  214. /package/dist/{src/foundation → foundation}/process-containment/windows-process-inspector.js +0 -0
  215. /package/dist/{src/foundation → foundation}/protocol/client.d.ts +0 -0
  216. /package/dist/{src/foundation → foundation}/protocol/client.js +0 -0
  217. /package/dist/{src/foundation → foundation}/protocol/index.d.ts +0 -0
  218. /package/dist/{src/foundation → foundation}/protocol/index.js +0 -0
  219. /package/dist/{src/foundation → foundation}/protocol/messages.d.ts +0 -0
  220. /package/dist/{src/foundation → foundation}/protocol/messages.js +0 -0
  221. /package/dist/{src/foundation → foundation}/release/bootstrap.d.ts +0 -0
  222. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  223. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  224. /package/dist/{src/foundation → foundation}/release/cohort-state.d.ts +0 -0
  225. /package/dist/{src/foundation → foundation}/release/cohort-state.js +0 -0
  226. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  227. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  228. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  229. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  230. /package/dist/{src/foundation → foundation}/release/release-store.d.ts +0 -0
  231. /package/dist/{src/foundation → foundation}/release/release-store.js +0 -0
  232. /package/dist/{src/foundation → foundation}/release/release.d.ts +0 -0
  233. /package/dist/{src/foundation → foundation}/release/release.js +0 -0
  234. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  235. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  236. /package/dist/{src/foundation → foundation}/release/update-transaction.d.ts +0 -0
  237. /package/dist/{src/foundation → foundation}/release/update-transaction.js +0 -0
  238. /package/dist/{src/foundation → foundation}/storage/index.d.ts +0 -0
  239. /package/dist/{src/foundation → foundation}/storage/index.js +0 -0
  240. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.d.ts +0 -0
  241. /package/dist/{src/foundation → foundation}/structured-agent-runtime/index.js +0 -0
  242. /package/dist/{src/foundation → foundation}/supervision/main.d.ts +0 -0
  243. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/components.js +0 -0
  244. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/conformance.d.ts +0 -0
  245. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.d.ts +0 -0
  246. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/index.js +0 -0
  247. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.d.ts +0 -0
  248. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/resources/builtin-themes.js +0 -0
  249. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.d.ts +0 -0
  250. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-components.js +0 -0
  251. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  252. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.js +0 -0
  253. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-extension-ui.js +0 -0
  254. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-footer-status.js +0 -0
  255. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-selectors-dialogs.js +0 -0
  256. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-shared-facade.js +0 -0
  257. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  258. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  259. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.d.ts +0 -0
  260. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/adjacent/core/keybindings.js +0 -0
  261. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.d.ts +0 -0
  262. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  263. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.d.ts +0 -0
  264. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/custom-entry.js +0 -0
  265. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.d.ts +0 -0
  266. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/daxnuts.js +0 -0
  267. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.d.ts +0 -0
  268. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/earendil-announcement.js +0 -0
  269. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.d.ts +0 -0
  270. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/extension-editor.js +0 -0
  271. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.d.ts +0 -0
  272. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/first-time-setup.js +0 -0
  273. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.d.ts +0 -0
  274. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/markdown-transform.js +0 -0
  275. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  276. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.js +0 -0
  277. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.d.ts +0 -0
  278. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/owned-editor.js +0 -0
  279. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.d.ts +0 -0
  280. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/scoped-models-selector.js +0 -0
  281. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-footer.js +0 -0
  282. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  283. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.js +0 -0
  284. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.d.ts +0 -0
  285. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector.js +0 -0
  286. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.d.ts +0 -0
  287. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/skill-invocation-message.js +0 -0
  288. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.d.ts +0 -0
  289. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/status-indicator.js +0 -0
  290. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.d.ts +0 -0
  291. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/tree-selector.js +0 -0
  292. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.d.ts +0 -0
  293. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/trust-selector.js +0 -0
  294. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  295. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.js +0 -0
  296. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.d.ts +0 -0
  297. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  298. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.d.ts +0 -0
  299. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme-controller.js +0 -0
  300. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.d.ts +0 -0
  301. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/theme/theme.js +0 -0
  302. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/conformance.d.ts +0 -0
  303. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.d.ts +0 -0
  304. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/index.js +0 -0
  305. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/model-auth-integration.js +0 -0
  306. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/pi-settings-metadata.json +0 -0
  307. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  308. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  309. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/resource-extension-integration.js +0 -0
  310. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.d.ts +0 -0
  311. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/runtime-integration.js +0 -0
  312. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/settings-integration.js +0 -0
  313. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflow-controllers.js +0 -0
  314. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.d.ts +0 -0
  315. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/workflows.js +0 -0
  316. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/owned-ui}/index.d.ts +0 -0
  317. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/owned-ui}/index.js +0 -0
  318. /package/dist/{src/foundation/pi-owned-ui-integration → integrations/pi/owned-ui}/route-host.js +0 -0
  319. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.d.ts +0 -0
  320. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/adapter.js +0 -0
  321. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.d.ts +0 -0
  322. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/conformance.js +0 -0
  323. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.d.ts +0 -0
  324. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/contracts.js +0 -0
  325. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.d.ts +0 -0
  326. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/index.js +0 -0
  327. /package/dist/{src/foundation/pi-tui-runtime-adapter → integrations/pi/tui-runtime}/presentation-adapter.js +0 -0
  328. /package/dist/{src/product-identity.d.ts → product-identity.d.ts} +0 -0
  329. /package/dist/{src/product-identity.js → product-identity.js} +0 -0
  330. /package/dist/{src/product-identity.json → product-identity.json} +0 -0
  331. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  332. /package/dist/{src/foundation/ui-apps → ui/apps}/index.d.ts +0 -0
  333. /package/dist/{src/foundation/ui-apps → ui/apps}/index.js +0 -0
  334. /package/dist/{src/foundation/ui-apps → ui/apps}/registry.d.ts +0 -0
  335. /package/dist/{src/foundation/ui-apps → ui/apps}/registry.js +0 -0
  336. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  337. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.js +0 -0
  338. /package/dist/{src/foundation/ui-components → ui/components}/frame.d.ts +0 -0
  339. /package/dist/{src/foundation/ui-components → ui/components}/frame.js +0 -0
  340. /package/dist/{src/foundation/ui-components → ui/components}/index.d.ts +0 -0
  341. /package/dist/{src/foundation/ui-components → ui/components}/index.js +0 -0
  342. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  343. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  344. /package/dist/{src/foundation/ui-components → ui/components}/line-input.d.ts +0 -0
  345. /package/dist/{src/foundation/ui-components → ui/components}/line-input.js +0 -0
  346. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  347. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  348. /package/dist/{src/foundation/ui-components → ui/components}/list-view.d.ts +0 -0
  349. /package/dist/{src/foundation/ui-components → ui/components}/list-view.js +0 -0
  350. /package/dist/{src/foundation/ui-components → ui/components}/mouse.d.ts +0 -0
  351. /package/dist/{src/foundation/ui-components → ui/components}/mouse.js +0 -0
  352. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  353. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  354. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  355. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  356. /package/dist/{src/foundation/ui-components → ui/components}/scrollbar.d.ts +0 -0
  357. /package/dist/{src/foundation/ui-components → ui/components}/scrollbar.js +0 -0
  358. /package/dist/{src/foundation/ui-components → ui/components}/shortcuts.d.ts +0 -0
  359. /package/dist/{src/foundation/ui-components → ui/components}/shortcuts.js +0 -0
  360. /package/dist/{src/foundation/ui-components → ui/components}/spans.d.ts +0 -0
  361. /package/dist/{src/foundation/ui-components → ui/components}/spans.js +0 -0
  362. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  363. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  364. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  365. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  366. /package/dist/{src/foundation/ui-components → ui/components}/surface.d.ts +0 -0
  367. /package/dist/{src/foundation/ui-components → ui/components}/surface.js +0 -0
  368. /package/dist/{src/foundation/ui-components → ui/components}/text.d.ts +0 -0
  369. /package/dist/{src/foundation/ui-components → ui/components}/text.js +0 -0
  370. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  371. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  372. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  373. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  374. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.d.ts +0 -0
  375. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/declarations.js +0 -0
  376. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.d.ts +0 -0
  377. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/index.js +0 -0
  378. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.d.ts +0 -0
  379. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/migrations.js +0 -0
  380. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  381. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
  382. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.d.ts +0 -0
  383. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/sections.js +0 -0
  384. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/session.js +0 -0
  385. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.d.ts +0 -0
  386. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/store.js +0 -0
@@ -14,6 +14,8 @@ export class SupervisorServer {
14
14
  terminateProcess;
15
15
  reconciliationDeadlineMs;
16
16
  shutdownDeadlineMs;
17
+ readActiveReleaseId;
18
+ supersededPollMs;
17
19
  id = randomUUID();
18
20
  bootNonce;
19
21
  pidStartIdentity = `${process.pid}:${Math.floor(Date.now() - process.uptime() * 1_000)}`;
@@ -31,12 +33,22 @@ export class SupervisorServer {
31
33
  #results = new Map();
32
34
  #metadataWrites = Promise.resolve();
33
35
  #closing = false;
34
- constructor(store, paths = resolveProductPaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code), reconciliationDeadlineMs = 3_000, shutdownDeadlineMs = 1_500) {
36
+ #superseded = false;
37
+ #supersededPoll = null;
38
+ constructor(store, paths = resolveProductPaths(), release, bootNonce = randomUUID(), terminateProcess = code => process.exit(code), reconciliationDeadlineMs = 3_000, shutdownDeadlineMs = 1_500,
39
+ /**
40
+ * Which release new sessions start on. A cohort that is no longer that release keeps
41
+ * serving the instances it already has, takes no new ones, and exits when its last one
42
+ * leaves. Absent, this supervisor never considers itself superseded.
43
+ */
44
+ readActiveReleaseId = null, supersededPollMs = 1_000) {
35
45
  this.store = store;
36
46
  this.release = release;
37
47
  this.terminateProcess = terminateProcess;
38
48
  this.reconciliationDeadlineMs = reconciliationDeadlineMs;
39
49
  this.shutdownDeadlineMs = shutdownDeadlineMs;
50
+ this.readActiveReleaseId = readActiveReleaseId;
51
+ this.supersededPollMs = supersededPollMs;
40
52
  this.bootNonce = bootNonce;
41
53
  this.paths = paths;
42
54
  for (const instance of store.loadActiveLaunchInstances())
@@ -56,6 +68,7 @@ export class SupervisorServer {
56
68
  if (this.#server)
57
69
  throw new Error("supervisor is already listening");
58
70
  await mkdir(this.paths.runtimeDir, { recursive: true, mode: 0o700 });
71
+ await mkdir(this.paths.endpointsDir, { recursive: true, mode: 0o700 });
59
72
  if (platform() !== "win32") {
60
73
  if (await endpointIsLive(this.paths.endpoint))
61
74
  throw new Error(PRODUCT_TEXT.diagnostic(`supervisor already owns ${this.paths.endpoint}`));
@@ -71,12 +84,44 @@ export class SupervisorServer {
71
84
  });
72
85
  });
73
86
  await this.#writeEndpointMetadata();
87
+ if (this.readActiveReleaseId) {
88
+ const poll = setInterval(() => void this.#refreshCohortRole(), this.supersededPollMs);
89
+ poll.unref();
90
+ this.#supersededPoll = poll;
91
+ }
92
+ }
93
+ /**
94
+ * Notices that another release has become the one new sessions start on. Nothing is
95
+ * interrupted by that: this cohort finishes what it is holding and then leaves.
96
+ */
97
+ async #refreshCohortRole() {
98
+ if (this.#closing || !this.readActiveReleaseId)
99
+ return;
100
+ const active = await this.readActiveReleaseId().catch(() => null);
101
+ if (active === null)
102
+ return;
103
+ this.#superseded = active !== this.release.releaseId;
104
+ if (this.#superseded && this.#instances.size === 0)
105
+ await this.retire();
106
+ }
107
+ /** Whether new sessions start on some other release. */
108
+ get superseded() {
109
+ return this.#superseded;
110
+ }
111
+ /** Leaves, taking this cohort's own endpoint artifacts with it. */
112
+ async retire() {
113
+ if (this.#closing)
114
+ return;
115
+ await this.close(false);
74
116
  }
75
117
  async close(stopAgents = false) {
76
118
  if (stopAgents && !await this.#drainInstances("update", this.shutdownDeadlineMs)) {
77
119
  throw new Error("active launch instances did not release ownership within the shutdown deadline");
78
120
  }
79
121
  this.#closing = true;
122
+ if (this.#supersededPoll)
123
+ clearInterval(this.#supersededPoll);
124
+ this.#supersededPoll = null;
80
125
  for (const client of this.#clients)
81
126
  client.destroy();
82
127
  if (this.#server)
@@ -197,6 +242,9 @@ export class SupervisorServer {
197
242
  #createLaunchInstance(command, socket, clientId) {
198
243
  assertNativeProcessIdentity(command.guardianIdentity);
199
244
  const existing = this.store.loadLaunchInstance(command.instanceId);
245
+ if (this.#superseded && !existing) {
246
+ throw new Error(PRODUCT_TEXT.diagnostic(`release ${this.release.releaseId} is no longer the release new sessions start on`));
247
+ }
200
248
  if (existing) {
201
249
  if (existing.ownerClientId !== clientId
202
250
  || existing.profileId !== command.profileId
@@ -279,6 +327,9 @@ export class SupervisorServer {
279
327
  this.#uncertainInstances.delete(stored.id);
280
328
  this.#unbindOwner(stored.id, socket);
281
329
  this.#mutated();
330
+ // The last session on a superseded cohort has left; there is nothing here to keep.
331
+ if (this.#superseded && this.#instances.size === 0)
332
+ void this.retire();
282
333
  }
283
334
  #ownedInstance(instanceId, socket, clientId) {
284
335
  const instance = this.#instances.get(instanceId) ?? this.store.loadLaunchInstance(instanceId);
@@ -1,4 +1,4 @@
1
- import type { OwnedUiTranscriptBlock } from "../owned-ui-contracts/index.js";
1
+ import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
2
2
  export declare function adaptPiUserMessage(block: OwnedUiTranscriptBlock, width: number): readonly string[];
3
3
  export declare function adaptPiAssistantMessage(block: OwnedUiTranscriptBlock, width: number): readonly string[];
4
4
  export declare function adaptPiToolExecution(block: OwnedUiTranscriptBlock, width: number, cwd: string): readonly string[];
@@ -2,9 +2,9 @@ import { mkdtemp, rm } from "node:fs/promises";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { AssistantMessageComponent, ExtensionSelectorComponent, initTheme, LoginDialogComponent, ModelSelectorComponent, SettingsSelectorComponent, ThemeSelectorComponent, ThinkingSelectorComponent, ToolExecutionComponent, UserMessageComponent, UserMessageSelectorComponent, VERSION, } from "@earendil-works/pi-coding-agent";
5
- import { OWNED_UI_CONTRACT_VERSION } from "../owned-ui-contracts/index.js";
5
+ import { OWNED_UI_CONTRACT_VERSION } from "../../../contracts/owned-ui/index.js";
6
6
  import { createTuiFacade, validatedAssistantMessage } from "./shell-components.js";
7
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
7
+ import { PRODUCT_IDENTITY } from "../../../product-identity.js";
8
8
  export class PiComponentConformanceError extends Error {
9
9
  stage;
10
10
  constructor(stage, cause) {
@@ -1,5 +1,5 @@
1
1
  import { type ExtensionUIContext } from "@earendil-works/pi-coding-agent";
2
- import type { OwnedUiExtensionOverlayHandle, OwnedUiExtensionOverlayOptions } from "../owned-ui-contracts/index.js";
2
+ import type { OwnedUiExtensionOverlayHandle, OwnedUiExtensionOverlayOptions } from "../../../contracts/owned-ui/index.js";
3
3
  import { type PiShellComponentPort, type PiShellEditorOptions } from "./shell-shared-facade.js";
4
4
  export interface PiExtensionUiBridgeHost {
5
5
  readonly runtime: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">;
@@ -1,4 +1,4 @@
1
- import type { OwnedUiSessionViewModel } from "../owned-ui-contracts/index.js";
1
+ import type { OwnedUiSessionViewModel } from "../../../contracts/owned-ui/index.js";
2
2
  import { type PiShellViewComponentPort, type PiShellStatusPort, type PiShellQueuedInputPort, type PiShellHeaderPort, type PiShellResourceEntry, type PiShellLoadedResourcesPort, type PiShellHeaderOptions, type PiShellEditorOptions } from "./shell-shared-facade.js";
3
3
  export declare function createPiShellHeader(options?: PiShellHeaderOptions): PiShellHeaderPort;
4
4
  export declare function createPiShellLoadedResources(resources: readonly PiShellResourceEntry[], initialExpanded?: boolean): PiShellLoadedResourcesPort;
@@ -1,5 +1,5 @@
1
1
  import { AssistantMessageComponent } from "@earendil-works/pi-coding-agent";
2
- import type { OwnedUiTranscriptBlock } from "../owned-ui-contracts/index.js";
2
+ import type { OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
3
3
  import { type PiShellComponentPort, type PiShellExtensionRendererResolver, type PiShellTranscriptComponentPort } from "./shell-shared-facade.js";
4
4
  export interface PiShellSessionInfoPresentation {
5
5
  readonly sessionName?: string;
@@ -1,7 +1,7 @@
1
1
  import { AssistantMessageComponent, BashExecutionComponent, CompactionSummaryMessageComponent, CustomMessageComponent, DynamicBorder, getMarkdownTheme, parseSkillBlock, ToolExecutionComponent, UserMessageComponent, } from "@earendil-works/pi-coding-agent";
2
2
  import { SkillInvocationMessageComponent, } from "./upstream/components/skill-invocation-message.js";
3
3
  import { Container, Markdown, Spacer, Text, } from "#pi-tui";
4
- import { PRODUCT_TEXT } from "../../product-identity.js";
4
+ import { PRODUCT_TEXT } from "../../../product-identity.js";
5
5
  import { KeybindingsManager, } from "./upstream/adjacent/core/keybindings.js";
6
6
  import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
7
7
  import { componentPort, createTuiFacade, ensureTheme, formatSessionTokens, isRecord, } from "./shell-shared-facade.js";
@@ -1,5 +1,5 @@
1
1
  import { ModelSelectorComponent, type SessionInfo, type SettingsCallbacks, type SettingsConfig } from "@earendil-works/pi-coding-agent";
2
- import type { OwnedUiDialog } from "../owned-ui-contracts/index.js";
2
+ import type { OwnedUiDialog } from "../../../contracts/owned-ui/index.js";
3
3
  import { type TrustDecision, type TrustOption, type TrustUpdate } from "./upstream/components/trust-selector.js";
4
4
  import { type PiShellComponentPort, type PiShellEditorOptions, type PiShellSelectorOption, type PiShellSelectorOptions } from "./shell-shared-facade.js";
5
5
  export declare function createPiShellSelector(options: PiShellSelectorOptions): PiShellComponentPort;
@@ -1,5 +1,5 @@
1
1
  import { type AutocompleteProvider, type Component, type TUI } from "#pi-tui";
2
- import type { OwnedUiSessionViewModel, OwnedUiThinkingLevel, OwnedUiTranscriptBlock } from "../owned-ui-contracts/index.js";
2
+ import type { OwnedUiSessionViewModel, OwnedUiThinkingLevel, OwnedUiTranscriptBlock } from "../../../contracts/owned-ui/index.js";
3
3
  export interface PiShellComponentPort {
4
4
  render(width: number): readonly string[];
5
5
  handleInput?(data: string): void;
@@ -1,5 +1,5 @@
1
1
  import { type Component } from "#pi-tui";
2
- import type { OwnedUiSessionViewModel } from "../../../owned-ui-contracts/index.js";
2
+ import type { OwnedUiSessionViewModel } from "../../../../../contracts/owned-ui/index.js";
3
3
  export declare class SessionFooter implements Component {
4
4
  private readonly getView;
5
5
  private readonly cwd;
@@ -1,7 +1,7 @@
1
1
  import { type AgentSessionRuntime, type AgentSessionServices, type SessionInfo } from "@earendil-works/pi-coding-agent";
2
- import { OWNED_UI_EXTENSION_CONTRACT_VERSION, OWNED_UI_EXTENSION_RENDER_CALLBACKS, OWNED_UI_EXTENSION_UI_CALLBACKS, OWNED_UI_EXTENSION_UI_PROPERTIES, type OwnedUiCommand, type OwnedUiCommandOutcome, type OwnedUiEvent, type OwnedUiSessionViewModel, type OwnedUiSnapshot } from "../owned-ui-contracts/index.js";
2
+ import { OWNED_UI_EXTENSION_CONTRACT_VERSION, OWNED_UI_EXTENSION_RENDER_CALLBACKS, OWNED_UI_EXTENSION_UI_CALLBACKS, OWNED_UI_EXTENSION_UI_PROPERTIES, type OwnedUiCommand, type OwnedUiCommandOutcome, type OwnedUiEvent, type OwnedUiSessionViewModel, type OwnedUiSnapshot } from "../../../contracts/owned-ui/index.js";
3
3
  import { type PiAuthenticationProviderOption, type PiBashWorkflowResult, type PiPinnedSettingsCallback, type PiPinnedSettingsSnapshot, type PiWorkflowAutocompleteCommand, type PiWorkflowHost, type PiWorkflowInteractionHost, type PiWorkflowOption, type PiWorkflowRequest, type PiWorkflowResult } from "./workflows.js";
4
- import type { AgentSettingsPort } from "../agent-engine-contracts/index.js";
4
+ import type { AgentSettingsPort } from "../../../contracts/agent-engine/index.js";
5
5
  export interface PiEngineRuntimeFactoryInput {
6
6
  readonly cwd: string;
7
7
  readonly agentDir: string;
@@ -3,9 +3,9 @@ import { mkdir, rm, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { dirname, join, resolve } from "node:path";
5
5
  import { promisify } from "node:util";
6
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
6
+ import { PRODUCT_IDENTITY } from "../../../product-identity.js";
7
7
  import { copyToClipboard, DefaultPackageManager, getAgentDir, ProjectTrustStore, SessionManager, } from "@earendil-works/pi-coding-agent";
8
- import { OWNED_UI_EXTENSION_CONTRACT_VERSION, OWNED_UI_EXTENSION_RENDER_CALLBACKS, OWNED_UI_EXTENSION_UI_CALLBACKS, OWNED_UI_EXTENSION_UI_PROPERTIES, assertOwnedUiCommand, assertOwnedUiExtensionUiPort, assertOwnedUiSnapshot, } from "../owned-ui-contracts/index.js";
8
+ import { OWNED_UI_EXTENSION_CONTRACT_VERSION, OWNED_UI_EXTENSION_RENDER_CALLBACKS, OWNED_UI_EXTENSION_UI_CALLBACKS, OWNED_UI_EXTENSION_UI_PROPERTIES, assertOwnedUiCommand, assertOwnedUiExtensionUiPort, assertOwnedUiSnapshot, } from "../../../contracts/owned-ui/index.js";
9
9
  import { PINNED_PI_SETTINGS_CALLBACKS, PINNED_PI_WORKFLOW_COMMAND_NAMES, } from "./workflows.js";
10
10
  import { createPiRuntimeIntegration } from "./runtime-integration.js";
11
11
  import { PiSessionCommandIntegration } from "./session-integration.js";
@@ -17,6 +17,7 @@ const execFileAsync = promisify(execFile);
17
17
  * batch.
18
18
  */
19
19
  const EVENT_DELIVERY_BATCH = 16;
20
+ const TOOL_UPDATE_COALESCE_MS = 50;
20
21
  const DEFAULT_SURFACE = {
21
22
  columns: 100,
22
23
  rows: 32,
@@ -64,6 +65,9 @@ export class PiEngineAdapter {
64
65
  #messageBlockIds = new WeakMap();
65
66
  #messageFallbackIds = new Map();
66
67
  #toolBlockIds = new Map();
68
+ #pendingToolUpdates = new Map();
69
+ #toolUpdateFlush = null;
70
+ #usageCache;
67
71
  #nextBlockSequence = 0;
68
72
  #diagnostics = [];
69
73
  #eventQueue = [];
@@ -162,6 +166,7 @@ export class PiEngineAdapter {
162
166
  return () => this.#listeners.delete(listener);
163
167
  }
164
168
  async flushEvents() {
169
+ this.#flushPendingToolUpdates();
165
170
  while (this.#eventQueueProcessing)
166
171
  await this.#eventQueueProcessing;
167
172
  }
@@ -742,7 +747,7 @@ export class PiEngineAdapter {
742
747
  ...this.#status,
743
748
  diagnostics: [...this.#status.diagnostics],
744
749
  badges: [...this.#status.badges],
745
- usage: this.#readUsage(),
750
+ usage: this.#usageCache ??= this.#readUsage(),
746
751
  footer: {
747
752
  branch: this.#gitBranch,
748
753
  sessionName: this.#session?.sessionManager?.getSessionName() ?? null,
@@ -808,6 +813,11 @@ export class PiEngineAdapter {
808
813
  if (this.#disposed)
809
814
  return;
810
815
  this.#disposed = true;
816
+ if (this.#toolUpdateFlush !== null) {
817
+ clearTimeout(this.#toolUpdateFlush);
818
+ this.#toolUpdateFlush = null;
819
+ }
820
+ this.#pendingToolUpdates.clear();
811
821
  this.#extensionBound = false;
812
822
  this.#extensionUi = undefined;
813
823
  this.#extensionShutdown = undefined;
@@ -1467,6 +1477,10 @@ export class PiEngineAdapter {
1467
1477
  #handlePiEvent(event) {
1468
1478
  if (!isRecord(event) || typeof event.type !== "string")
1469
1479
  return;
1480
+ // Usage moves at message and lifecycle boundaries, not with stream chunks, so the
1481
+ // two streaming event kinds keep the memo and everything else drops it.
1482
+ if (event.type !== "message_update" && event.type !== "tool_execution_update")
1483
+ this.#usageCache = undefined;
1470
1484
  switch (event.type) {
1471
1485
  case "agent_start":
1472
1486
  this.#agentRunActive = true;
@@ -1500,10 +1514,17 @@ export class PiEngineAdapter {
1500
1514
  }
1501
1515
  return;
1502
1516
  case "tool_execution_start":
1503
- case "tool_execution_update":
1504
- case "tool_execution_end":
1517
+ case "tool_execution_end": {
1518
+ // The end supersedes any update still waiting on the coalescing timer.
1519
+ const toolCallId = stringValue(event.toolCallId);
1520
+ if (toolCallId !== undefined)
1521
+ this.#pendingToolUpdates.delete(toolCallId);
1505
1522
  this.#upsertToolExecutionBlock(event);
1506
1523
  return;
1524
+ }
1525
+ case "tool_execution_update":
1526
+ this.#coalesceToolExecutionUpdate(event);
1527
+ return;
1507
1528
  case "agent_settled":
1508
1529
  case "agent_end": {
1509
1530
  if (event.type === "agent_end" && event.willRetry === true)
@@ -1795,6 +1816,35 @@ export class PiEngineAdapter {
1795
1816
  }
1796
1817
  return blocks;
1797
1818
  }
1819
+ /**
1820
+ * A busy tool streams far more output chunks than a terminal frame can show, and every
1821
+ * chunk restates the whole accumulated output. Keeping only the newest chunk per tool
1822
+ * and applying it on a short timer bounds the per-command work by frames rather than
1823
+ * by chunks, which is what keeps typed input and the spinner alive under the stream.
1824
+ */
1825
+ #coalesceToolExecutionUpdate(event) {
1826
+ const toolCallId = stringValue(event.toolCallId);
1827
+ if (!toolCallId)
1828
+ return;
1829
+ this.#pendingToolUpdates.set(toolCallId, event);
1830
+ this.#toolUpdateFlush ??= setTimeout(() => {
1831
+ this.#toolUpdateFlush = null;
1832
+ if (!this.#disposed)
1833
+ this.#flushPendingToolUpdates();
1834
+ }, TOOL_UPDATE_COALESCE_MS);
1835
+ }
1836
+ #flushPendingToolUpdates() {
1837
+ if (this.#toolUpdateFlush !== null) {
1838
+ clearTimeout(this.#toolUpdateFlush);
1839
+ this.#toolUpdateFlush = null;
1840
+ }
1841
+ if (this.#pendingToolUpdates.size === 0)
1842
+ return;
1843
+ const pending = [...this.#pendingToolUpdates.values()];
1844
+ this.#pendingToolUpdates.clear();
1845
+ for (const update of pending)
1846
+ this.#upsertToolExecutionBlock(update);
1847
+ }
1798
1848
  #upsertToolExecutionBlock(event) {
1799
1849
  const toolCallId = stringValue(event.toolCallId);
1800
1850
  if (!toolCallId)
@@ -1814,7 +1864,9 @@ export class PiEngineAdapter {
1814
1864
  toolCallId,
1815
1865
  toolName: stringValue(event.toolName) ?? "unknown",
1816
1866
  arguments: jsonSummary(event.args),
1817
- result: jsonSummary(source),
1867
+ // A partial result repeats the whole accumulated output on every chunk;
1868
+ // summarizing it each time would cost quadratic work over the stream.
1869
+ result: ended ? jsonSummary(source) : { summary: "", json: null },
1818
1870
  partialResult: event.type === "tool_execution_update",
1819
1871
  argsComplete: ended,
1820
1872
  isError: event.isError === true,
@@ -1897,6 +1949,7 @@ export class PiEngineAdapter {
1897
1949
  this.#emitEvent({ type: "diagnostic", diagnostic });
1898
1950
  }
1899
1951
  #emitView() {
1952
+ this.#usageCache = undefined;
1900
1953
  this.#viewRevision += 1;
1901
1954
  this.#emitEvent({ type: "session-view", view: this.view() });
1902
1955
  }
@@ -2,8 +2,8 @@ import { mkdtemp, rm } from "node:fs/promises";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { createAgentSessionFromServices, createAgentSessionRuntime, createAgentSessionServices, ModelRuntime, SessionManager, VERSION, } from "@earendil-works/pi-coding-agent";
5
- import { OWNED_UI_CONTRACT_VERSION } from "../owned-ui-contracts/index.js";
6
- import { PRODUCT_IDENTITY } from "../../product-identity.js";
5
+ import { OWNED_UI_CONTRACT_VERSION } from "../../../contracts/owned-ui/index.js";
6
+ import { PRODUCT_IDENTITY } from "../../../product-identity.js";
7
7
  export const REQUIRED_PI_CAPABILITY_OPERATIONS = Object.freeze({
8
8
  "public-exports": ["services.create", "session.create", "runtime.create"],
9
9
  "session-lifecycle": ["session.new", "session.resume", "session.rebind", "session.dispose"],
@@ -1,5 +1,5 @@
1
1
  import type { ModelRuntime } from "@earendil-works/pi-coding-agent";
2
- import type { AgentAuthenticationPort, AgentModelDescriptor, AgentModelPort } from "../agent-engine-contracts/index.js";
2
+ import type { AgentAuthenticationPort, AgentModelDescriptor, AgentModelPort } from "../../../contracts/agent-engine/index.js";
3
3
  export type PiDocumentedModelRuntime = Pick<ModelRuntime, "getAvailableSnapshot" | "getModel" | "getProvider" | "hasConfiguredAuth" | "refresh" | "logout">;
4
4
  export interface PiModelAuthenticationOptions {
5
5
  readonly runtime: PiDocumentedModelRuntime;
@@ -1,4 +1,4 @@
1
- import { type AgentPackagesPort, type AgentPackagesPortInput } from "../agent-engine-contracts/index.js";
1
+ import { type AgentPackagesPort, type AgentPackagesPortInput } from "../../../contracts/agent-engine/index.js";
2
2
  /**
3
3
  * Pinned Pi's package manager already takes the profile root as an argument, so
4
4
  * this binds it to the root A1 chose rather than to whatever the configuration-root
@@ -1,6 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { DefaultPackageManager, ModelRuntime, SettingsManager } from "@earendil-works/pi-coding-agent";
3
- import { agentPackageOutcome, } from "../agent-engine-contracts/index.js";
3
+ import { agentPackageOutcome, } from "../../../contracts/agent-engine/index.js";
4
4
  const MODEL_REFRESH_TIMEOUT_MS = 15_000;
5
5
  /**
6
6
  * Pinned Pi's package manager already takes the profile root as an argument, so
@@ -1,5 +1,5 @@
1
1
  import type { AgentSession } from "@earendil-works/pi-coding-agent";
2
- import type { AgentExtensionBinding, AgentExtensionFailure, AgentExtensionPort, AgentResourceDescriptor, AgentResourcesPort, AgentSessionMetadata } from "../agent-engine-contracts/index.js";
2
+ import type { AgentExtensionBinding, AgentExtensionFailure, AgentExtensionPort, AgentResourceDescriptor, AgentResourcesPort, AgentSessionMetadata } from "../../../contracts/agent-engine/index.js";
3
3
  export interface PiResourceExtensionOptions {
4
4
  readonly session: AgentSession;
5
5
  readonly bindUi: () => Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import type { AgentSession, AgentSessionEvent } from "@earendil-works/pi-coding-agent";
2
- import { type AgentCommandOutcome, type AgentEvent } from "../agent-engine-contracts/index.js";
2
+ import { type AgentCommandOutcome, type AgentEvent } from "../../../contracts/agent-engine/index.js";
3
3
  export interface PiDocumentedSessionCommands {
4
4
  readonly isStreaming: AgentSession["isStreaming"];
5
5
  readonly isRetrying: AgentSession["isRetrying"];
@@ -1,4 +1,4 @@
1
- import { AGENT_ENGINE_CONTRACT_VERSION, } from "../agent-engine-contracts/index.js";
1
+ import { AGENT_ENGINE_CONTRACT_VERSION, } from "../../../contracts/agent-engine/index.js";
2
2
  export class PiSessionCommandIntegration {
3
3
  session;
4
4
  #lastPrompt = null;
@@ -1,5 +1,5 @@
1
1
  import type { SettingsManager } from "@earendil-works/pi-coding-agent";
2
- import type { AgentJsonValue, AgentSettingDescriptor, AgentSettingsPort } from "../agent-engine-contracts/index.js";
2
+ import type { AgentJsonValue, AgentSettingDescriptor, AgentSettingsPort } from "../../../contracts/agent-engine/index.js";
3
3
  /**
4
4
  * Values only the running engine knows: the themes installed on this machine and
5
5
  * the thinking levels this session supports. The boundary asks for them as it is
@@ -1,4 +1,4 @@
1
- import type { AgentJsonValue, AgentWorkflowDescriptor, AgentWorkflowPort } from "../agent-engine-contracts/index.js";
1
+ import type { AgentJsonValue, AgentWorkflowDescriptor, AgentWorkflowPort } from "../../../contracts/agent-engine/index.js";
2
2
  import { type PiWorkflowRoute } from "./workflows.js";
3
3
  export type WorkflowCapability = "prompt" | "abort" | "compact" | "bash" | "models.read" | "models.write" | "auth.login" | "auth.logout" | "settings.read" | "settings.write" | "resources.read" | "resources.reload" | "session.read" | "session.new" | "session.resume" | "session.fork" | "session.tree" | "session.import" | "clipboard.write" | "export.write" | "share.write" | "process.quit" | "diagnostics.read";
4
4
  export interface WorkflowControllerResult {
@@ -1,4 +1,4 @@
1
- import type { PaneMouseEvent } from "../ui-components/index.js";
1
+ import type { PaneMouseEvent } from "../../../ui/components/index.js";
2
2
  /**
3
3
  * The seam between the pinned shell and A1-owned screens. The shell asks whether
4
4
  * a route is claimed, mounts whatever surface it is handed, and forwards keys to
@@ -1,10 +1,10 @@
1
- import type { OwnedUiSessionViewModel, OwnedUiThinkingLevel } from "../owned-ui-contracts/index.js";
1
+ import type { OwnedUiSessionViewModel } from "../../../contracts/owned-ui/index.js";
2
2
  import type { UiRouteHost } from "./route-host.js";
3
- import { type AdapterCommandResult, type PiEngineAdapter, type PiWorkflowRequest, type PiWorkflowResult } from "../pi-engine-adapter/index.js";
4
- import { type PiShellComponentPort, type PiShellEditorPort, type PiShellExtensionRendererResolver, type PiShellHeaderOptions, type PiShellHeaderPort, type PiShellLoadedResourcesPort, type PiShellSelectorOption, type PiShellTranscriptComponentPort } from "../pi-component-adapter/index.js";
5
- import { PiTuiRuntimeAdapter, type PiTuiComponentPort, type PiTuiLayoutNode, type PiTuiOverlayHandle, type PiTuiTerminalPort } from "../pi-tui-runtime-adapter/index.js";
6
- type OwnedUiBackendPort = PiEngineAdapter;
7
- type OwnedUiTerminalPort = PiTuiTerminalPort;
3
+ import { type PiEngineAdapter, type PiWorkflowResult } from "../engine/index.js";
4
+ import { type PiShellComponentPort, type PiShellEditorPort, type PiShellExtensionRendererResolver, type PiShellHeaderOptions, type PiShellHeaderPort, type PiShellLoadedResourcesPort, type PiShellResourceEntry, type PiShellTranscriptComponentPort } from "../components/index.js";
5
+ import { type PiTuiComponentPort, type PiTuiLayoutNode, type PiTuiTerminalPort } from "../tui-runtime/index.js";
6
+ export type OwnedUiBackendPort = PiEngineAdapter;
7
+ export type OwnedUiTerminalPort = PiTuiTerminalPort;
8
8
  type OwnedUiStartupOptions = PiShellHeaderOptions;
9
9
  export interface OwnedUiSessionShellOptions {
10
10
  readonly backend: OwnedUiBackendPort;
@@ -69,44 +69,5 @@ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
69
69
  setFocused(focused: boolean): void;
70
70
  dispose(): void;
71
71
  }
72
- export declare class OwnedUiSessionShell {
73
- #private;
74
- readonly backend: OwnedUiBackendPort;
75
- readonly root: OwnedUiSessionShellRoot;
76
- readonly runtime: PiTuiRuntimeAdapter;
77
- constructor(options: OwnedUiSessionShellOptions);
78
- view(): OwnedUiSessionViewModel;
79
- start(): void;
80
- onView(listener: (view: OwnedUiSessionViewModel) => void): () => void;
81
- waitUntilStopped(): Promise<void>;
82
- submit(text: string): Promise<AdapterCommandResult>;
83
- clearOrExit(now?: number): Promise<AdapterCommandResult>;
84
- interrupt(): Promise<AdapterCommandResult>;
85
- abort(): Promise<AdapterCommandResult>;
86
- retry(): Promise<AdapterCommandResult>;
87
- compact(): Promise<AdapterCommandResult>;
88
- newSession(): Promise<AdapterCommandResult>;
89
- resumeSession(sessionPath: string): Promise<AdapterCommandResult>;
90
- setModel(providerId: string, modelId: string): Promise<AdapterCommandResult>;
91
- setThinkingLevel(thinkingLevel: OwnedUiThinkingLevel): Promise<AdapterCommandResult>;
92
- cycleThinkingLevel(): Promise<AdapterCommandResult>;
93
- cycleModel(direction: "forward" | "backward"): Promise<AdapterCommandResult>;
94
- queueFollowUp(): Promise<AdapterCommandResult>;
95
- restoreQueuedInput(): void;
96
- showSelector(title: string, options: readonly PiShellSelectorOption[], onSelect: (id: string) => void, onCancel?: () => void): PiTuiOverlayHandle;
97
- showModelSelector(): void;
98
- showForkSelector(): void;
99
- showLogoutSelector(): Promise<void>;
100
- showLoginMethodSelector(providerReference: string): void;
101
- showTreeSelector(initialSelectedId?: string): void;
102
- showLoginAuthTypeSelector(): void;
103
- showLoginProviderSelector(authType: "oauth" | "api_key"): void;
104
- showSessionSelector(): void;
105
- showSettingsSelector(): void;
106
- shutdown(): Promise<AdapterCommandResult>;
107
- runWorkflow(request: PiWorkflowRequest): Promise<AdapterCommandResult>;
108
- showTrustSelector(): void;
109
- showScopedModelsSelector(): void;
110
- dispose(): Promise<void>;
111
- }
72
+ export declare function shellResourceEntries(backend: OwnedUiBackendPort): readonly PiShellResourceEntry[];
112
73
  export {};