@timurproko/a1 0.1.8-dev.49ff83a → 0.1.8-dev.508

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 (865) hide show
  1. package/README.md +168 -65
  2. package/bin/cli.js +33 -11
  3. package/bin/guardian.js +16 -6
  4. package/bin/module-identity.js +76 -69
  5. package/bin/module-resolver.js +138 -0
  6. package/bin/pinned-pi-public.d.ts +3 -0
  7. package/bin/pinned-pi-public.js +93 -0
  8. package/bin/release-cleanup.js +8 -0
  9. package/bin/supervisor.js +2 -2
  10. package/bin/ui.js +67 -22
  11. package/bin/update-recovery.js +343 -0
  12. package/bin/warmup.js +28 -0
  13. package/dist/app/session-shell/clipboard-diagnostics.d.ts +16 -0
  14. package/dist/app/session-shell/clipboard-diagnostics.js +65 -0
  15. package/dist/app/session-shell/clipboard-image.d.ts +11 -0
  16. package/dist/app/session-shell/clipboard-image.js +38 -0
  17. package/dist/app/session-shell/editor-hyperlink-budget.d.ts +9 -0
  18. package/dist/app/session-shell/editor-hyperlink-budget.js +23 -0
  19. package/dist/app/session-shell/helper-pool.d.ts +33 -0
  20. package/dist/app/session-shell/helper-pool.js +98 -0
  21. package/dist/app/session-shell/image-preparation-client.d.ts +20 -0
  22. package/dist/app/session-shell/image-preparation-client.js +145 -0
  23. package/dist/app/session-shell/image-preparation.d.ts +18 -0
  24. package/dist/app/session-shell/image-preparation.js +126 -0
  25. package/dist/app/session-shell/image-source.d.ts +13 -0
  26. package/dist/app/session-shell/image-source.js +171 -0
  27. package/dist/app/session-shell/image-worker.d.ts +17 -0
  28. package/dist/app/session-shell/image-worker.js +23 -0
  29. package/dist/app/session-shell/index.d.ts +7 -0
  30. package/dist/app/session-shell/index.js +4 -0
  31. package/dist/app/session-shell/paste-executor.d.ts +18 -0
  32. package/dist/app/session-shell/paste-executor.js +253 -0
  33. package/dist/app/session-shell/paste-helper.js +173 -0
  34. package/dist/app/session-shell/paste-preparation-client.d.ts +31 -0
  35. package/dist/app/session-shell/paste-preparation-client.js +170 -0
  36. package/dist/app/session-shell/paste-protocol.d.ts +78 -0
  37. package/dist/app/session-shell/paste-protocol.js +18 -0
  38. package/dist/app/session-shell/paste-text-preparation.d.ts +6 -0
  39. package/dist/app/session-shell/paste-text-preparation.js +134 -0
  40. package/dist/app/session-shell/paste-text-worker.js +12 -0
  41. package/dist/app/session-shell/paste-types.d.ts +17 -0
  42. package/dist/app/session-shell/path-chip-presentation.d.ts +7 -0
  43. package/dist/app/session-shell/path-chip-presentation.js +24 -0
  44. package/dist/app/session-shell/prompt-chips.d.ts +76 -0
  45. package/dist/app/session-shell/prompt-chips.js +507 -0
  46. package/dist/app/session-shell/prompt-history-controller.d.ts +36 -0
  47. package/dist/app/session-shell/prompt-history-controller.js +170 -0
  48. package/dist/app/session-shell/prompt-suggestion-controller.d.ts +35 -0
  49. package/dist/app/session-shell/prompt-suggestion-controller.js +207 -0
  50. package/dist/app/session-shell/quit-outro-effects.d.ts +29 -0
  51. package/dist/app/session-shell/quit-outro-effects.js +242 -0
  52. package/dist/app/session-shell/quit-outro.d.ts +38 -0
  53. package/dist/app/session-shell/quit-outro.js +98 -0
  54. package/dist/app/session-shell/response-copy-coordinator.d.ts +27 -0
  55. package/dist/app/session-shell/response-copy-coordinator.js +187 -0
  56. package/dist/app/session-shell/response-copy-helper.js +122 -0
  57. package/dist/app/session-shell/response-copy-protocol.d.ts +56 -0
  58. package/dist/app/session-shell/response-copy-protocol.js +5 -0
  59. package/dist/app/session-shell/response-copy-transport.d.ts +39 -0
  60. package/dist/app/session-shell/response-copy-transport.js +217 -0
  61. package/dist/app/session-shell/session-shell-root.d.ts +265 -0
  62. package/dist/app/session-shell/session-shell-root.js +1366 -0
  63. package/dist/app/session-shell/session-shell.d.ts +59 -0
  64. package/dist/app/session-shell/session-shell.js +1917 -0
  65. package/dist/app/session-shell/session-viewport-controller.d.ts +61 -0
  66. package/dist/app/session-shell/session-viewport-controller.js +597 -0
  67. package/dist/app/session-shell/stream-presentation-coalescer.d.ts +29 -0
  68. package/dist/app/session-shell/stream-presentation-coalescer.js +79 -0
  69. package/dist/app/session-shell/system-clipboard.d.ts +20 -0
  70. package/dist/app/session-shell/system-clipboard.js +159 -0
  71. package/dist/app/session-shell/text-paste.d.ts +5 -0
  72. package/dist/app/session-shell/text-paste.js +16 -0
  73. package/dist/cli/capabilities.d.ts +6 -0
  74. package/dist/cli/capabilities.js +7 -0
  75. package/dist/cli/dispatch.d.ts +46 -0
  76. package/dist/cli/dispatch.js +261 -0
  77. package/dist/cli/index.d.ts +8 -0
  78. package/dist/cli/index.js +4 -0
  79. package/dist/cli/package-messages.d.ts +26 -0
  80. package/dist/cli/package-messages.js +71 -0
  81. package/dist/cli/packages.d.ts +32 -0
  82. package/dist/cli/packages.js +81 -0
  83. package/dist/cli/version-stats.d.ts +22 -0
  84. package/dist/cli/version-stats.js +112 -0
  85. package/dist/composition/index.d.ts +2 -0
  86. package/dist/composition/index.js +2 -0
  87. package/dist/composition/owned-ui.d.ts +37 -0
  88. package/dist/composition/owned-ui.js +136 -0
  89. package/dist/composition/settings-route-host.d.ts +7 -0
  90. package/dist/composition/settings-route-host.js +110 -0
  91. package/dist/contracts/agent-engine/capability-ports.d.ts +95 -0
  92. package/dist/contracts/agent-engine/domain-validation.js +107 -0
  93. package/dist/contracts/agent-engine/domain.d.ts +138 -0
  94. package/dist/contracts/agent-engine/index.d.ts +11 -0
  95. package/dist/contracts/agent-engine/index.js +6 -0
  96. package/dist/contracts/agent-engine/package-ports.d.ts +60 -0
  97. package/dist/contracts/agent-engine/ports.js +1 -0
  98. package/dist/contracts/owned-ui/extension-ui.d.ts +310 -0
  99. package/dist/contracts/owned-ui/image-attachments.d.ts +36 -0
  100. package/dist/contracts/owned-ui/image-attachments.js +67 -0
  101. package/dist/contracts/owned-ui/index.d.ts +12 -0
  102. package/dist/contracts/owned-ui/index.js +8 -0
  103. package/dist/contracts/owned-ui/model.d.ts +378 -0
  104. package/dist/contracts/owned-ui/prompt-history.d.ts +55 -0
  105. package/dist/contracts/owned-ui/prompt-history.js +23 -0
  106. package/dist/contracts/owned-ui/prompt-suggestions.d.ts +3 -0
  107. package/dist/contracts/owned-ui/prompt-suggestions.js +44 -0
  108. package/dist/contracts/owned-ui/suggestion-diagnostics.d.ts +22 -0
  109. package/dist/contracts/owned-ui/suggestion-diagnostics.js +9 -0
  110. package/dist/contracts/owned-ui/transcript-lifecycle.d.ts +5 -0
  111. package/dist/contracts/owned-ui/transcript-lifecycle.js +33 -0
  112. package/dist/contracts/owned-ui/validation.d.ts +15 -0
  113. package/dist/contracts/owned-ui/validation.js +523 -0
  114. package/dist/contracts/presentation/index.d.ts +104 -0
  115. package/dist/features/launch/development-launch.js +36 -0
  116. package/dist/features/launch/index.d.ts +12 -0
  117. package/dist/features/launch/index.js +6 -0
  118. package/dist/features/launch/intent.d.ts +12 -0
  119. package/dist/features/launch/intent.js +8 -0
  120. package/dist/features/launch/prepare-launch.d.ts +11 -0
  121. package/dist/features/launch/prepare-launch.js +14 -0
  122. package/dist/features/launch/profile-paths.d.ts +16 -0
  123. package/dist/features/launch/profile-paths.js +36 -0
  124. package/dist/features/launch/runtime-selection.d.ts +16 -0
  125. package/dist/features/launch/runtime-selection.js +13 -0
  126. package/dist/features/owned-ui/index.d.ts +6 -0
  127. package/dist/features/owned-ui/index.js +4 -0
  128. package/dist/features/owned-ui/project-trust-prompt.d.ts +25 -0
  129. package/dist/features/owned-ui/project-trust-prompt.js +149 -0
  130. package/dist/features/owned-ui/run.d.ts +17 -0
  131. package/dist/features/owned-ui/run.js +64 -0
  132. package/dist/features/owned-ui/session-fork-prompt.d.ts +8 -0
  133. package/dist/features/owned-ui/session-fork-prompt.js +34 -0
  134. package/dist/features/owned-ui/settings-app.d.ts +21 -0
  135. package/dist/features/owned-ui/settings-app.js +807 -0
  136. package/dist/features/owned-ui/settings-route.d.ts +2 -0
  137. package/dist/features/owned-ui/settings-route.js +2 -0
  138. package/dist/features/prompt-history/image-sidecar.d.ts +32 -0
  139. package/dist/features/prompt-history/image-sidecar.js +130 -0
  140. package/dist/features/prompt-history/index.d.ts +4 -0
  141. package/dist/features/prompt-history/index.js +3 -0
  142. package/dist/features/prompt-history/paths.d.ts +5 -0
  143. package/dist/features/prompt-history/paths.js +17 -0
  144. package/dist/features/prompt-history/service.d.ts +54 -0
  145. package/dist/features/prompt-history/service.js +425 -0
  146. package/dist/features/prompt-history/store.d.ts +16 -0
  147. package/dist/features/prompt-history/store.js +219 -0
  148. package/dist/features/prompt-history/worker.d.ts +9 -0
  149. package/dist/features/prompt-history/worker.js +45 -0
  150. package/dist/features/prompt-suggestions/diagnostics.d.ts +18 -0
  151. package/dist/features/prompt-suggestions/diagnostics.js +82 -0
  152. package/dist/features/prompt-suggestions/index.d.ts +2 -0
  153. package/dist/features/prompt-suggestions/index.js +1 -0
  154. package/dist/foundation/launch-context/index.d.ts +59 -0
  155. package/dist/foundation/launch-context/index.js +136 -0
  156. package/dist/foundation/launch-guardian/index.d.ts +2 -0
  157. package/dist/foundation/launch-guardian/index.js +1 -0
  158. package/dist/foundation/launch-guardian/main.d.ts +33 -0
  159. package/dist/foundation/launch-guardian/main.js +180 -0
  160. package/dist/foundation/lifecycle/commands.js +1 -0
  161. package/dist/foundation/lifecycle/index.d.ts +11 -0
  162. package/dist/foundation/lifecycle/index.js +5 -0
  163. package/dist/foundation/lifecycle/model.d.ts +64 -0
  164. package/dist/foundation/lifecycle/model.js +40 -0
  165. package/dist/foundation/lifecycle/paths.d.ts +30 -0
  166. package/dist/foundation/lifecycle/paths.js +70 -0
  167. package/dist/foundation/lifecycle/session-selection.d.ts +9 -0
  168. package/dist/foundation/lifecycle/session-selection.js +39 -0
  169. package/dist/foundation/lifecycle/supervisor-startup.d.ts +30 -0
  170. package/dist/foundation/lifecycle/supervisor-startup.js +106 -0
  171. package/dist/foundation/process-containment/darwin-process-inspector.d.ts +5 -0
  172. package/dist/foundation/process-containment/darwin-process-inspector.js +7 -0
  173. package/dist/foundation/process-containment/index.d.ts +8 -0
  174. package/dist/foundation/process-containment/index.js +6 -0
  175. package/dist/foundation/process-containment/linux-process-inspector.d.ts +7 -0
  176. package/dist/foundation/process-containment/linux-process-inspector.js +27 -0
  177. package/dist/foundation/process-containment/native-guardian-containment.d.ts +17 -0
  178. package/dist/foundation/process-containment/native-guardian-containment.js +140 -0
  179. package/dist/foundation/process-containment/windows-process-inspector.d.ts +19 -0
  180. package/dist/foundation/process-containment/windows-process-inspector.js +56 -0
  181. package/dist/foundation/protocol/client.d.ts +18 -0
  182. package/dist/foundation/protocol/client.js +130 -0
  183. package/dist/foundation/protocol/index.d.ts +3 -0
  184. package/dist/foundation/protocol/index.js +2 -0
  185. package/dist/foundation/protocol/messages.d.ts +90 -0
  186. package/dist/foundation/protocol/messages.js +100 -0
  187. package/dist/foundation/release/bootstrap.d.ts +51 -0
  188. package/dist/foundation/release/bootstrap.js +427 -0
  189. package/dist/foundation/release/cohort-state.d.ts +157 -0
  190. package/dist/foundation/release/cohort-state.js +472 -0
  191. package/dist/foundation/release/dependency-certification-retention.d.ts +7 -0
  192. package/dist/foundation/release/dependency-certification-retention.js +88 -0
  193. package/dist/foundation/release/dependency-certification.d.ts +24 -0
  194. package/dist/foundation/release/dependency-certification.js +266 -0
  195. package/dist/foundation/release/dependency-layer.d.ts +78 -0
  196. package/dist/foundation/release/dependency-layer.js +466 -0
  197. package/dist/foundation/release/endpoints.d.ts +24 -0
  198. package/dist/foundation/release/endpoints.js +134 -0
  199. package/dist/foundation/release/immutable-platform.d.ts +6 -0
  200. package/dist/foundation/release/immutable-platform.js +13 -0
  201. package/dist/foundation/release/index.d.ts +30 -0
  202. package/dist/foundation/release/index.js +16 -0
  203. package/dist/foundation/release/release-gc.d.ts +71 -0
  204. package/dist/foundation/release/release-gc.js +764 -0
  205. package/dist/foundation/release/release-store.d.ts +49 -0
  206. package/dist/foundation/release/release-store.js +235 -0
  207. package/dist/foundation/release/release.d.ts +43 -0
  208. package/dist/foundation/release/release.js +215 -0
  209. package/dist/foundation/release/restart-certification.d.ts +68 -0
  210. package/dist/foundation/release/restart-certification.js +227 -0
  211. package/dist/foundation/release/types.d.ts +11 -0
  212. package/dist/foundation/release/types.js +1 -0
  213. package/dist/foundation/release/update-launch.d.ts +6 -0
  214. package/dist/foundation/release/update-launch.js +17 -0
  215. package/dist/foundation/release/update-recovery.d.ts +76 -0
  216. package/dist/foundation/release/update-recovery.js +356 -0
  217. package/dist/foundation/release/update-transaction.d.ts +42 -0
  218. package/dist/foundation/release/update-transaction.js +101 -0
  219. package/dist/foundation/release/update.d.ts +119 -0
  220. package/dist/foundation/release/update.js +632 -0
  221. package/dist/foundation/release/warmup.d.ts +3 -0
  222. package/dist/foundation/release/warmup.js +47 -0
  223. package/dist/foundation/startup/index.d.ts +4 -0
  224. package/dist/foundation/startup/index.js +2 -0
  225. package/dist/foundation/startup/startup-budget.d.ts +46 -0
  226. package/dist/foundation/startup/startup-budget.js +42 -0
  227. package/dist/foundation/startup/startup-descriptor.js +34 -0
  228. package/dist/foundation/startup/startup-runtime.d.ts +27 -0
  229. package/dist/foundation/startup/startup-runtime.js +128 -0
  230. package/dist/foundation/storage/control-store.d.ts +18 -0
  231. package/dist/foundation/storage/control-store.js +342 -0
  232. package/dist/foundation/storage/index.d.ts +1 -0
  233. package/dist/foundation/storage/index.js +1 -0
  234. package/dist/foundation/supervision/index.d.ts +3 -0
  235. package/dist/foundation/supervision/index.js +3 -0
  236. package/dist/foundation/supervision/main.d.ts +1 -0
  237. package/dist/foundation/supervision/main.js +84 -0
  238. package/dist/foundation/supervision/paths.d.ts +1 -0
  239. package/dist/foundation/supervision/paths.js +1 -0
  240. package/dist/foundation/supervision/server.d.ts +46 -0
  241. package/dist/foundation/supervision/server.js +573 -0
  242. package/dist/foundation/terminal-cleanup/fatal-exit.d.ts +12 -0
  243. package/dist/foundation/terminal-cleanup/fatal-exit.js +87 -0
  244. package/dist/foundation/terminal-cleanup/index.d.ts +3 -0
  245. package/dist/foundation/terminal-cleanup/index.js +2 -0
  246. package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +4 -0
  247. package/dist/foundation/terminal-cleanup/terminal-reset.js +40 -0
  248. package/dist/integrations/pi/components/components.d.ts +4 -0
  249. package/dist/integrations/pi/components/components.js +64 -0
  250. package/dist/integrations/pi/components/conformance.d.ts +18 -0
  251. package/dist/integrations/pi/components/conformance.js +70 -0
  252. package/dist/integrations/pi/components/editor-interaction.d.ts +38 -0
  253. package/dist/integrations/pi/components/editor-interaction.js +1 -0
  254. package/dist/integrations/pi/components/history-editor-loader.d.ts +5 -0
  255. package/dist/integrations/pi/components/history-editor-loader.js +5 -0
  256. package/dist/integrations/pi/components/index.d.ts +21 -0
  257. package/dist/integrations/pi/components/index.js +13 -0
  258. package/dist/integrations/pi/components/owned-editor-ux.d.ts +74 -0
  259. package/dist/integrations/pi/components/owned-editor-ux.js +1094 -0
  260. package/dist/integrations/pi/components/path-word-ranges.d.ts +2 -0
  261. package/dist/integrations/pi/components/path-word-ranges.js +37 -0
  262. package/dist/integrations/pi/components/prompt-input-port.d.ts +18 -0
  263. package/dist/integrations/pi/components/prompt-input-port.js +1 -0
  264. package/dist/integrations/pi/components/resources/builtin-themes.d.ts +167 -0
  265. package/dist/integrations/pi/components/resources/builtin-themes.js +168 -0
  266. package/dist/integrations/pi/components/shell-components.d.ts +7 -0
  267. package/dist/integrations/pi/components/shell-components.js +7 -0
  268. package/dist/integrations/pi/components/shell-editor-autocomplete.js +298 -0
  269. package/dist/integrations/pi/components/shell-extension-ui.d.ts +35 -0
  270. package/dist/integrations/pi/components/shell-extension-ui.js +280 -0
  271. package/dist/integrations/pi/components/shell-footer-status.d.ts +7 -0
  272. package/dist/integrations/pi/components/shell-footer-status.js +248 -0
  273. package/dist/integrations/pi/components/shell-presenters-info.d.ts +43 -0
  274. package/dist/integrations/pi/components/shell-presenters-info.js +114 -0
  275. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +29 -0
  276. package/dist/integrations/pi/components/shell-presenters-transcript.js +433 -0
  277. package/dist/integrations/pi/components/shell-selectors-dialogs.d.ts +123 -0
  278. package/dist/integrations/pi/components/shell-selectors-dialogs.js +242 -0
  279. package/dist/integrations/pi/components/shell-shared-facade.d.ts +217 -0
  280. package/dist/integrations/pi/components/shell-shared-facade.js +92 -0
  281. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +17 -0
  282. package/dist/integrations/pi/components/submitted-prompt-adapter.js +49 -0
  283. package/dist/integrations/pi/components/tool-image-presentation.d.ts +21 -0
  284. package/dist/integrations/pi/components/tool-image-presentation.js +83 -0
  285. package/dist/integrations/pi/components/tool-result-adapter.d.ts +6 -0
  286. package/dist/integrations/pi/components/tool-result-adapter.js +27 -0
  287. package/dist/integrations/pi/components/transcript-image-resolver.d.ts +7 -0
  288. package/dist/integrations/pi/components/transcript-image-resolver.js +19 -0
  289. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +445 -0
  290. package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +370 -0
  291. package/dist/integrations/pi/components/upstream/assets/earendil-image.json +12 -0
  292. package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +13 -0
  293. package/dist/integrations/pi/components/upstream/components/daxnuts.d.ts +29 -0
  294. package/dist/integrations/pi/components/upstream/components/daxnuts.js +146 -0
  295. package/dist/integrations/pi/components/upstream/components/earendil-announcement.d.ts +4 -0
  296. package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +48 -0
  297. package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +20 -0
  298. package/dist/integrations/pi/components/upstream/components/extension-editor.js +84 -0
  299. package/dist/integrations/pi/components/upstream/components/mermaid.js +81 -0
  300. package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +46 -0
  301. package/dist/integrations/pi/components/upstream/components/owned-editor.js +187 -0
  302. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +59 -0
  303. package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +346 -0
  304. package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +11 -0
  305. package/dist/integrations/pi/components/upstream/components/session-footer.js +123 -0
  306. package/dist/integrations/pi/components/upstream/components/session-selector-search.js +161 -0
  307. package/dist/integrations/pi/components/upstream/components/session-selector.d.ts +95 -0
  308. package/dist/integrations/pi/components/upstream/components/session-selector.js +893 -0
  309. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +21 -0
  310. package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +46 -0
  311. package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +35 -0
  312. package/dist/integrations/pi/components/upstream/components/status-indicator.js +69 -0
  313. package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +67 -0
  314. package/dist/integrations/pi/components/upstream/components/tool-execution.js +365 -0
  315. package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +101 -0
  316. package/dist/integrations/pi/components/upstream/components/tree-selector.js +1275 -0
  317. package/dist/integrations/pi/components/upstream/components/trust-selector.d.ts +33 -0
  318. package/dist/integrations/pi/components/upstream/components/trust-selector.js +81 -0
  319. package/dist/integrations/pi/components/upstream/external-editor.js +43 -0
  320. package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +289 -0
  321. package/dist/integrations/pi/components/upstream/history/editor-core.js +2144 -0
  322. package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +35 -0
  323. package/dist/integrations/pi/components/upstream/history/kill-ring.js +51 -0
  324. package/dist/integrations/pi/components/upstream/history/printable-key.d.ts +1 -0
  325. package/dist/integrations/pi/components/upstream/history/printable-key.js +43 -0
  326. package/dist/integrations/pi/components/upstream/history/text-helpers.d.ts +14 -0
  327. package/dist/integrations/pi/components/upstream/history/text-helpers.js +31 -0
  328. package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +25 -0
  329. package/dist/integrations/pi/components/upstream/history/undo-stack.js +39 -0
  330. package/dist/integrations/pi/components/upstream/history/word-navigation.d.ts +24 -0
  331. package/dist/integrations/pi/components/upstream/history/word-navigation.js +103 -0
  332. package/dist/integrations/pi/components/upstream/model-search.d.ts +18 -0
  333. package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +33 -0
  334. package/dist/integrations/pi/components/upstream/theme/theme-controller.js +114 -0
  335. package/dist/integrations/pi/components/upstream/theme/theme.d.ts +61 -0
  336. package/dist/integrations/pi/components/upstream/theme/theme.js +337 -0
  337. package/dist/integrations/pi/engine/adapter.d.ts +135 -0
  338. package/dist/integrations/pi/engine/adapter.js +648 -0
  339. package/dist/integrations/pi/engine/changelog.d.ts +2 -0
  340. package/dist/integrations/pi/engine/changelog.js +63 -0
  341. package/dist/integrations/pi/engine/command-dispatch.d.ts +41 -0
  342. package/dist/integrations/pi/engine/command-dispatch.js +125 -0
  343. package/dist/integrations/pi/engine/compaction-progress.d.ts +28 -0
  344. package/dist/integrations/pi/engine/compaction-progress.js +96 -0
  345. package/dist/integrations/pi/engine/conformance.d.ts +39 -0
  346. package/dist/integrations/pi/engine/conformance.js +140 -0
  347. package/dist/integrations/pi/engine/event-delivery.d.ts +100 -0
  348. package/dist/integrations/pi/engine/event-delivery.js +184 -0
  349. package/dist/integrations/pi/engine/extension-ui-binding.d.ts +35 -0
  350. package/dist/integrations/pi/engine/extension-ui-binding.js +81 -0
  351. package/dist/integrations/pi/engine/http-dispatcher.d.ts +4 -0
  352. package/dist/integrations/pi/engine/http-dispatcher.js +25 -0
  353. package/dist/integrations/pi/engine/index.d.ts +18 -0
  354. package/dist/integrations/pi/engine/index.js +10 -0
  355. package/dist/integrations/pi/engine/message-values.d.ts +29 -0
  356. package/dist/integrations/pi/engine/message-values.js +168 -0
  357. package/dist/integrations/pi/engine/package-integration.d.ts +13 -0
  358. package/dist/integrations/pi/engine/package-integration.js +118 -0
  359. package/dist/integrations/pi/engine/pending-delivery.d.ts +30 -0
  360. package/dist/integrations/pi/engine/pending-delivery.js +156 -0
  361. package/dist/integrations/pi/engine/pi-settings-metadata.json +385 -0
  362. package/dist/integrations/pi/engine/project-trust-preflight.d.ts +22 -0
  363. package/dist/integrations/pi/engine/project-trust-preflight.js +50 -0
  364. package/dist/integrations/pi/engine/prompt-suggestions.d.ts +30 -0
  365. package/dist/integrations/pi/engine/prompt-suggestions.js +102 -0
  366. package/dist/integrations/pi/engine/provider-authentication.d.ts +34 -0
  367. package/dist/integrations/pi/engine/provider-authentication.js +209 -0
  368. package/dist/integrations/pi/engine/resource-catalog.d.ts +49 -0
  369. package/dist/integrations/pi/engine/resource-catalog.js +289 -0
  370. package/dist/integrations/pi/engine/resources/changelog.json +12 -0
  371. package/dist/integrations/pi/engine/runtime-integration.d.ts +53 -0
  372. package/dist/integrations/pi/engine/runtime-integration.js +118 -0
  373. package/dist/integrations/pi/engine/session-events.d.ts +48 -0
  374. package/dist/integrations/pi/engine/session-events.js +223 -0
  375. package/dist/integrations/pi/engine/session-integration.d.ts +67 -0
  376. package/dist/integrations/pi/engine/session-integration.js +195 -0
  377. package/dist/integrations/pi/engine/session-runtime.d.ts +84 -0
  378. package/dist/integrations/pi/engine/session-runtime.js +249 -0
  379. package/dist/integrations/pi/engine/session-selection.d.ts +28 -0
  380. package/dist/integrations/pi/engine/session-selection.js +90 -0
  381. package/dist/integrations/pi/engine/settings-bridge.d.ts +121 -0
  382. package/dist/integrations/pi/engine/settings-bridge.js +514 -0
  383. package/dist/integrations/pi/engine/settings-metadata.d.ts +31 -0
  384. package/dist/integrations/pi/engine/settings-metadata.js +67 -0
  385. package/dist/integrations/pi/engine/settings-port.d.ts +42 -0
  386. package/dist/integrations/pi/engine/settings-port.js +353 -0
  387. package/dist/integrations/pi/engine/tool-rendering.d.ts +13 -0
  388. package/dist/integrations/pi/engine/tool-rendering.js +145 -0
  389. package/dist/integrations/pi/engine/transcript-image-assets.d.ts +11 -0
  390. package/dist/integrations/pi/engine/transcript-image-assets.js +86 -0
  391. package/dist/integrations/pi/engine/transcript-projection.d.ts +39 -0
  392. package/dist/integrations/pi/engine/transcript-projection.js +405 -0
  393. package/dist/integrations/pi/engine/usage-view.d.ts +4 -0
  394. package/dist/integrations/pi/engine/usage-view.js +56 -0
  395. package/dist/integrations/pi/engine/windows-filesystem-hygiene.d.ts +21 -0
  396. package/dist/integrations/pi/engine/windows-filesystem-hygiene.js +55 -0
  397. package/dist/integrations/pi/engine/workflow-contexts.d.ts +59 -0
  398. package/dist/integrations/pi/engine/workflow-contexts.js +316 -0
  399. package/dist/integrations/pi/engine/workflow-runner.d.ts +60 -0
  400. package/dist/integrations/pi/engine/workflow-runner.js +509 -0
  401. package/dist/integrations/pi/engine/workflow-support.d.ts +33 -0
  402. package/dist/integrations/pi/engine/workflow-support.js +352 -0
  403. package/dist/integrations/pi/engine/workflows.d.ts +251 -0
  404. package/dist/integrations/pi/engine/workflows.js +63 -0
  405. package/dist/integrations/pi/startup-public.d.ts +2 -0
  406. package/dist/integrations/pi/startup-public.js +2223 -0
  407. package/dist/integrations/pi/startup-public.manifest.json +12502 -0
  408. package/dist/integrations/pi/tui-runtime/adapter.d.ts +56 -0
  409. package/dist/integrations/pi/tui-runtime/adapter.js +783 -0
  410. package/dist/integrations/pi/tui-runtime/contracts.d.ts +156 -0
  411. package/dist/integrations/pi/tui-runtime/contracts.js +1 -0
  412. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +88 -0
  413. package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +433 -0
  414. package/dist/integrations/pi/tui-runtime/index.d.ts +9 -0
  415. package/dist/integrations/pi/tui-runtime/index.js +5 -0
  416. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +39 -0
  417. package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.js +139 -0
  418. package/dist/integrations/pi/tui-runtime/mouse-report-input.d.ts +13 -0
  419. package/dist/integrations/pi/tui-runtime/mouse-report-input.js +57 -0
  420. package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +32 -0
  421. package/dist/integrations/pi/tui-runtime/overlay-geometry.js +158 -0
  422. package/dist/integrations/pi/tui-runtime/presentation-adapter.d.ts +4 -0
  423. package/dist/integrations/pi/tui-runtime/presentation-adapter.js +48 -0
  424. package/dist/native/darwin-arm64/manifest.json +4 -4
  425. package/dist/native/darwin-arm64/process-guardian +0 -0
  426. package/dist/native/linux-x64/manifest.json +3 -3
  427. package/dist/native/linux-x64/process-guardian +0 -0
  428. package/dist/native/win32-x64/manifest.json +3 -3
  429. package/dist/native/win32-x64/process-guardian.exe +0 -0
  430. package/dist/product-identity.d.ts +37 -0
  431. package/dist/product-identity.js +119 -0
  432. package/dist/product-identity.json +85 -0
  433. package/dist/runtime-payload-inventory.json +127147 -0
  434. package/dist/ui/apps/contracts.d.ts +64 -0
  435. package/dist/ui/apps/host.d.ts +42 -0
  436. package/dist/ui/apps/host.js +156 -0
  437. package/dist/ui/apps/index.d.ts +5 -0
  438. package/dist/ui/apps/index.js +3 -0
  439. package/dist/ui/apps/registry.d.ts +12 -0
  440. package/dist/ui/apps/registry.js +33 -0
  441. package/dist/ui/components/dialog-panel.js +49 -0
  442. package/dist/ui/components/frame.d.ts +22 -0
  443. package/dist/ui/components/frame.js +55 -0
  444. package/dist/ui/components/index.d.ts +47 -0
  445. package/dist/ui/components/index.js +25 -0
  446. package/dist/ui/components/line-input.d.ts +68 -0
  447. package/dist/ui/components/line-input.js +224 -0
  448. package/dist/ui/components/list-view.d.ts +60 -0
  449. package/dist/ui/components/list-view.js +82 -0
  450. package/dist/ui/components/mouse.d.ts +25 -0
  451. package/dist/ui/components/mouse.js +70 -0
  452. package/dist/ui/components/progress-status.d.ts +2 -0
  453. package/dist/ui/components/progress-status.js +4 -0
  454. package/dist/ui/components/prompt-input.d.ts +32 -0
  455. package/dist/ui/components/prompt-input.js +51 -0
  456. package/dist/ui/components/scrollbar.d.ts +88 -0
  457. package/dist/ui/components/scrollbar.js +137 -0
  458. package/dist/ui/components/selection-copy.d.ts +24 -0
  459. package/dist/ui/components/selection-copy.js +39 -0
  460. package/dist/ui/components/shortcuts.d.ts +58 -0
  461. package/dist/ui/components/shortcuts.js +82 -0
  462. package/dist/ui/components/spans.d.ts +28 -0
  463. package/dist/ui/components/spans.js +266 -0
  464. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  465. package/dist/ui/components/submitted-prompt.js +50 -0
  466. package/dist/ui/components/surface.d.ts +20 -0
  467. package/dist/ui/components/surface.js +44 -0
  468. package/dist/ui/components/text-selection.d.ts +62 -0
  469. package/dist/ui/components/text-selection.js +210 -0
  470. package/dist/ui/components/text.d.ts +38 -0
  471. package/dist/ui/components/text.js +185 -0
  472. package/dist/ui/components/transcript-viewport.d.ts +173 -0
  473. package/dist/ui/components/transcript-viewport.js +753 -0
  474. package/dist/ui/components/visible-hyperlinks.d.ts +26 -0
  475. package/dist/ui/components/visible-hyperlinks.js +97 -0
  476. package/dist/ui/settings/declarations.d.ts +141 -0
  477. package/dist/ui/settings/declarations.js +135 -0
  478. package/dist/ui/settings/index.d.ts +10 -0
  479. package/dist/ui/settings/index.js +5 -0
  480. package/dist/ui/settings/manager.d.ts +54 -0
  481. package/dist/ui/settings/manager.js +256 -0
  482. package/dist/ui/settings/migrations.d.ts +13 -0
  483. package/dist/ui/settings/migrations.js +74 -0
  484. package/dist/ui/settings/sections.d.ts +52 -0
  485. package/dist/ui/settings/sections.js +112 -0
  486. package/docs/architecture/boundaries.md +17 -13
  487. package/docs/architecture/code-documentation.md +77 -0
  488. package/docs/architecture/history-editor-provenance.md +100 -0
  489. package/docs/architecture/internal-naming.md +91 -0
  490. package/docs/architecture/process-guardian-provenance.md +3 -1
  491. package/docs/architecture/project-structure.md +69 -30
  492. package/docs/architecture/prompt-suggestions.md +68 -0
  493. package/docs/architecture/resource-and-data-policy.md +28 -2
  494. package/docs/architecture/response-copy-delivery.md +85 -0
  495. package/docs/architecture/terminal-host-proof-gate.md +1 -1
  496. package/docs/architecture/terminal-host-spike-evidence.md +1 -1
  497. package/docs/architecture/tool-image-presentation.md +62 -0
  498. package/docs/architecture/toolchain.md +32 -10
  499. package/docs/architecture/ui-reference-provenance.md +60 -6
  500. package/docs/ci-release-runbook.md +256 -79
  501. package/docs/features/launch-profiles.md +24 -17
  502. package/docs/features/modal-content-interaction.md +37 -0
  503. package/docs/features/prompt-history.md +149 -0
  504. package/docs/local-worktree-cleanup.md +212 -0
  505. package/docs/manual-code-streaming-cleanup.md +88 -0
  506. package/docs/manual-ghost-link-baseline.md +89 -0
  507. package/docs/manual-launch-instance-acceptance.md +12 -35
  508. package/docs/manual-owned-ui-checkpoint.md +79 -0
  509. package/docs/manual-pi-boundary-candidate.md +4 -5
  510. package/docs/manual-terminal-colour-check.md +4 -3
  511. package/docs/openspec-archive-automation.md +259 -0
  512. package/docs/repository-governance-live-acceptance.md +77 -0
  513. package/docs/validation.md +100 -0
  514. package/package.json +49 -34
  515. package/dist/src/cli/capabilities.d.ts +0 -15
  516. package/dist/src/cli/capabilities.js +0 -7
  517. package/dist/src/cli/dispatch.d.ts +0 -32
  518. package/dist/src/cli/dispatch.js +0 -142
  519. package/dist/src/cli/index.d.ts +0 -5
  520. package/dist/src/cli/index.js +0 -5
  521. package/dist/src/cli/packages.d.ts +0 -23
  522. package/dist/src/cli/packages.js +0 -84
  523. package/dist/src/cli/version-stats.d.ts +0 -16
  524. package/dist/src/cli/version-stats.js +0 -72
  525. package/dist/src/cli/version.d.ts +0 -2
  526. package/dist/src/cli/version.js +0 -23
  527. package/dist/src/composition/index.d.ts +0 -48
  528. package/dist/src/composition/index.js +0 -258
  529. package/dist/src/features/launch/development-launch.js +0 -28
  530. package/dist/src/features/launch/index.d.ts +0 -7
  531. package/dist/src/features/launch/index.js +0 -7
  532. package/dist/src/features/launch/intent.d.ts +0 -7
  533. package/dist/src/features/launch/intent.js +0 -4
  534. package/dist/src/features/launch/prepare-launch.d.ts +0 -13
  535. package/dist/src/features/launch/prepare-launch.js +0 -21
  536. package/dist/src/features/launch/profile-paths.d.ts +0 -15
  537. package/dist/src/features/launch/profile-paths.js +0 -31
  538. package/dist/src/features/launch/profiles.d.ts +0 -12
  539. package/dist/src/features/launch/profiles.js +0 -26
  540. package/dist/src/features/launch/runtime-selection.d.ts +0 -19
  541. package/dist/src/features/launch/runtime-selection.js +0 -13
  542. package/dist/src/features/owned-ui/customization.d.ts +0 -38
  543. package/dist/src/features/owned-ui/customization.js +0 -108
  544. package/dist/src/features/owned-ui/diagnostics.d.ts +0 -33
  545. package/dist/src/features/owned-ui/diagnostics.js +0 -94
  546. package/dist/src/features/owned-ui/index.d.ts +0 -4
  547. package/dist/src/features/owned-ui/index.js +0 -4
  548. package/dist/src/features/owned-ui/run.d.ts +0 -11
  549. package/dist/src/features/owned-ui/run.js +0 -15
  550. package/dist/src/features/owned-ui/settings-app.d.ts +0 -22
  551. package/dist/src/features/owned-ui/settings-app.js +0 -633
  552. package/dist/src/features/workspace/capabilities.d.ts +0 -31
  553. package/dist/src/features/workspace/capabilities.js +0 -75
  554. package/dist/src/features/workspace/index.d.ts +0 -6
  555. package/dist/src/features/workspace/index.js +0 -6
  556. package/dist/src/features/workspace/presentation.d.ts +0 -30
  557. package/dist/src/features/workspace/presentation.js +0 -70
  558. package/dist/src/features/workspace/reconciliation.d.ts +0 -15
  559. package/dist/src/features/workspace/reconciliation.js +0 -82
  560. package/dist/src/features/workspace/reducer.d.ts +0 -42
  561. package/dist/src/features/workspace/reducer.js +0 -213
  562. package/dist/src/features/workspace/router.d.ts +0 -31
  563. package/dist/src/features/workspace/router.js +0 -124
  564. package/dist/src/features/workspace/store.d.ts +0 -17
  565. package/dist/src/features/workspace/store.js +0 -54
  566. package/dist/src/foundation/agent-engine-contracts/capability-ports.d.ts +0 -95
  567. package/dist/src/foundation/agent-engine-contracts/domain-validation.js +0 -89
  568. package/dist/src/foundation/agent-engine-contracts/domain.d.ts +0 -116
  569. package/dist/src/foundation/agent-engine-contracts/index.d.ts +0 -8
  570. package/dist/src/foundation/agent-engine-contracts/index.js +0 -8
  571. package/dist/src/foundation/agent-engine-contracts/package-ports.d.ts +0 -54
  572. package/dist/src/foundation/launch-guardian/index.d.ts +0 -1
  573. package/dist/src/foundation/launch-guardian/index.js +0 -1
  574. package/dist/src/foundation/launch-guardian/main.d.ts +0 -31
  575. package/dist/src/foundation/launch-guardian/main.js +0 -165
  576. package/dist/src/foundation/lifecycle/index.d.ts +0 -4
  577. package/dist/src/foundation/lifecycle/index.js +0 -4
  578. package/dist/src/foundation/lifecycle/model.d.ts +0 -64
  579. package/dist/src/foundation/lifecycle/model.js +0 -40
  580. package/dist/src/foundation/lifecycle/paths.d.ts +0 -10
  581. package/dist/src/foundation/lifecycle/paths.js +0 -42
  582. package/dist/src/foundation/native-host-protocol/codec.d.ts +0 -11
  583. package/dist/src/foundation/native-host-protocol/codec.js +0 -56
  584. package/dist/src/foundation/native-host-protocol/evidence.d.ts +0 -67
  585. package/dist/src/foundation/native-host-protocol/evidence.js +0 -141
  586. package/dist/src/foundation/native-host-protocol/index.d.ts +0 -4
  587. package/dist/src/foundation/native-host-protocol/index.js +0 -4
  588. package/dist/src/foundation/native-host-protocol/messages.d.ts +0 -56
  589. package/dist/src/foundation/native-host-protocol/messages.js +0 -149
  590. package/dist/src/foundation/native-host-protocol/proof-gate.d.ts +0 -13
  591. package/dist/src/foundation/native-host-protocol/proof-gate.js +0 -33
  592. package/dist/src/foundation/owned-ui-contracts/extension-ui.d.ts +0 -302
  593. package/dist/src/foundation/owned-ui-contracts/index.d.ts +0 -3
  594. package/dist/src/foundation/owned-ui-contracts/index.js +0 -3
  595. package/dist/src/foundation/owned-ui-contracts/model.d.ts +0 -241
  596. package/dist/src/foundation/owned-ui-contracts/validation.d.ts +0 -11
  597. package/dist/src/foundation/owned-ui-contracts/validation.js +0 -395
  598. package/dist/src/foundation/owned-ui-settings/declarations.d.ts +0 -13
  599. package/dist/src/foundation/owned-ui-settings/declarations.js +0 -39
  600. package/dist/src/foundation/owned-ui-settings/index.d.ts +0 -6
  601. package/dist/src/foundation/owned-ui-settings/index.js +0 -6
  602. package/dist/src/foundation/owned-ui-settings/migrations.d.ts +0 -13
  603. package/dist/src/foundation/owned-ui-settings/migrations.js +0 -28
  604. package/dist/src/foundation/owned-ui-settings/sections.d.ts +0 -70
  605. package/dist/src/foundation/owned-ui-settings/sections.js +0 -93
  606. package/dist/src/foundation/owned-ui-settings/session.d.ts +0 -44
  607. package/dist/src/foundation/owned-ui-settings/session.js +0 -145
  608. package/dist/src/foundation/owned-ui-settings/store.d.ts +0 -28
  609. package/dist/src/foundation/owned-ui-settings/store.js +0 -90
  610. package/dist/src/foundation/pi-component-adapter/components.d.ts +0 -4
  611. package/dist/src/foundation/pi-component-adapter/components.js +0 -64
  612. package/dist/src/foundation/pi-component-adapter/conformance.d.ts +0 -17
  613. package/dist/src/foundation/pi-component-adapter/conformance.js +0 -69
  614. package/dist/src/foundation/pi-component-adapter/index.d.ts +0 -13
  615. package/dist/src/foundation/pi-component-adapter/index.js +0 -13
  616. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.d.ts +0 -165
  617. package/dist/src/foundation/pi-component-adapter/resources/builtin-themes.js +0 -166
  618. package/dist/src/foundation/pi-component-adapter/shell-components.d.ts +0 -6
  619. package/dist/src/foundation/pi-component-adapter/shell-components.js +0 -6
  620. package/dist/src/foundation/pi-component-adapter/shell-editor-autocomplete.js +0 -162
  621. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.d.ts +0 -35
  622. package/dist/src/foundation/pi-component-adapter/shell-extension-ui.js +0 -279
  623. package/dist/src/foundation/pi-component-adapter/shell-footer-status.d.ts +0 -7
  624. package/dist/src/foundation/pi-component-adapter/shell-footer-status.js +0 -189
  625. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.d.ts +0 -57
  626. package/dist/src/foundation/pi-component-adapter/shell-presenters-transcript.js +0 -429
  627. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.d.ts +0 -113
  628. package/dist/src/foundation/pi-component-adapter/shell-selectors-dialogs.js +0 -235
  629. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.d.ts +0 -116
  630. package/dist/src/foundation/pi-component-adapter/shell-shared-facade.js +0 -87
  631. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.d.ts +0 -422
  632. package/dist/src/foundation/pi-component-adapter/upstream/adjacent/core/keybindings.js +0 -296
  633. package/dist/src/foundation/pi-component-adapter/upstream/components/countdown-timer.d.ts +0 -10
  634. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.d.ts +0 -17
  635. package/dist/src/foundation/pi-component-adapter/upstream/components/custom-entry.js +0 -51
  636. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.d.ts +0 -22
  637. package/dist/src/foundation/pi-component-adapter/upstream/components/daxnuts.js +0 -142
  638. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.d.ts +0 -4
  639. package/dist/src/foundation/pi-component-adapter/upstream/components/earendil-announcement.js +0 -19
  640. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.d.ts +0 -17
  641. package/dist/src/foundation/pi-component-adapter/upstream/components/extension-editor.js +0 -81
  642. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.d.ts +0 -24
  643. package/dist/src/foundation/pi-component-adapter/upstream/components/first-time-setup.js +0 -105
  644. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.d.ts +0 -2
  645. package/dist/src/foundation/pi-component-adapter/upstream/components/markdown-transform.js +0 -18
  646. package/dist/src/foundation/pi-component-adapter/upstream/components/mermaid.js +0 -77
  647. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.d.ts +0 -18
  648. package/dist/src/foundation/pi-component-adapter/upstream/components/owned-editor.js +0 -55
  649. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.d.ts +0 -55
  650. package/dist/src/foundation/pi-component-adapter/upstream/components/scoped-models-selector.js +0 -342
  651. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.d.ts +0 -10
  652. package/dist/src/foundation/pi-component-adapter/upstream/components/session-footer.js +0 -120
  653. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector-search.js +0 -159
  654. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.d.ts +0 -95
  655. package/dist/src/foundation/pi-component-adapter/upstream/components/session-selector.js +0 -889
  656. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.d.ts +0 -19
  657. package/dist/src/foundation/pi-component-adapter/upstream/components/skill-invocation-message.js +0 -44
  658. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.d.ts +0 -30
  659. package/dist/src/foundation/pi-component-adapter/upstream/components/status-indicator.js +0 -59
  660. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.d.ts +0 -98
  661. package/dist/src/foundation/pi-component-adapter/upstream/components/tree-selector.js +0 -1272
  662. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.d.ts +0 -33
  663. package/dist/src/foundation/pi-component-adapter/upstream/components/trust-selector.js +0 -76
  664. package/dist/src/foundation/pi-component-adapter/upstream/external-editor.js +0 -39
  665. package/dist/src/foundation/pi-component-adapter/upstream/model-search.d.ts +0 -15
  666. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.d.ts +0 -25
  667. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme-controller.js +0 -117
  668. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.d.ts +0 -61
  669. package/dist/src/foundation/pi-component-adapter/upstream/theme/theme.js +0 -326
  670. package/dist/src/foundation/pi-engine-adapter/adapter.d.ts +0 -164
  671. package/dist/src/foundation/pi-engine-adapter/adapter.js +0 -2367
  672. package/dist/src/foundation/pi-engine-adapter/conformance.d.ts +0 -37
  673. package/dist/src/foundation/pi-engine-adapter/conformance.js +0 -130
  674. package/dist/src/foundation/pi-engine-adapter/index.d.ts +0 -10
  675. package/dist/src/foundation/pi-engine-adapter/index.js +0 -10
  676. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.d.ts +0 -30
  677. package/dist/src/foundation/pi-engine-adapter/model-auth-integration.js +0 -61
  678. package/dist/src/foundation/pi-engine-adapter/package-integration.d.ts +0 -13
  679. package/dist/src/foundation/pi-engine-adapter/package-integration.js +0 -112
  680. package/dist/src/foundation/pi-engine-adapter/pi-settings-metadata.json +0 -374
  681. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.d.ts +0 -31
  682. package/dist/src/foundation/pi-engine-adapter/resource-extension-integration.js +0 -80
  683. package/dist/src/foundation/pi-engine-adapter/runtime-integration.d.ts +0 -35
  684. package/dist/src/foundation/pi-engine-adapter/runtime-integration.js +0 -67
  685. package/dist/src/foundation/pi-engine-adapter/session-integration.d.ts +0 -43
  686. package/dist/src/foundation/pi-engine-adapter/session-integration.js +0 -97
  687. package/dist/src/foundation/pi-engine-adapter/settings-integration.d.ts +0 -55
  688. package/dist/src/foundation/pi-engine-adapter/settings-integration.js +0 -233
  689. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.d.ts +0 -20
  690. package/dist/src/foundation/pi-engine-adapter/workflow-controllers.js +0 -48
  691. package/dist/src/foundation/pi-engine-adapter/workflows.d.ts +0 -173
  692. package/dist/src/foundation/pi-engine-adapter/workflows.js +0 -60
  693. package/dist/src/foundation/pi-owned-ui-integration/index.d.ts +0 -2
  694. package/dist/src/foundation/pi-owned-ui-integration/index.js +0 -2
  695. package/dist/src/foundation/pi-owned-ui-integration/route-host.d.ts +0 -29
  696. package/dist/src/foundation/pi-owned-ui-integration/session-shell.d.ts +0 -106
  697. package/dist/src/foundation/pi-owned-ui-integration/session-shell.js +0 -1518
  698. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.d.ts +0 -39
  699. package/dist/src/foundation/pi-tui-runtime-adapter/adapter.js +0 -493
  700. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.d.ts +0 -18
  701. package/dist/src/foundation/pi-tui-runtime-adapter/conformance.js +0 -145
  702. package/dist/src/foundation/pi-tui-runtime-adapter/contracts.d.ts +0 -120
  703. package/dist/src/foundation/pi-tui-runtime-adapter/index.d.ts +0 -4
  704. package/dist/src/foundation/pi-tui-runtime-adapter/index.js +0 -4
  705. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.d.ts +0 -4
  706. package/dist/src/foundation/pi-tui-runtime-adapter/presentation-adapter.js +0 -48
  707. package/dist/src/foundation/presentation-contracts/index.d.ts +0 -96
  708. package/dist/src/foundation/process-containment/index.d.ts +0 -5
  709. package/dist/src/foundation/process-containment/index.js +0 -5
  710. package/dist/src/foundation/process-containment/linux-process-inspector.d.ts +0 -6
  711. package/dist/src/foundation/process-containment/linux-process-inspector.js +0 -26
  712. package/dist/src/foundation/process-containment/native-guardian-containment.d.ts +0 -16
  713. package/dist/src/foundation/process-containment/native-guardian-containment.js +0 -139
  714. package/dist/src/foundation/process-containment/windows-process-inspector.d.ts +0 -17
  715. package/dist/src/foundation/process-containment/windows-process-inspector.js +0 -53
  716. package/dist/src/foundation/protocol/client.d.ts +0 -17
  717. package/dist/src/foundation/protocol/client.js +0 -129
  718. package/dist/src/foundation/protocol/index.d.ts +0 -2
  719. package/dist/src/foundation/protocol/index.js +0 -2
  720. package/dist/src/foundation/protocol/messages.d.ts +0 -89
  721. package/dist/src/foundation/protocol/messages.js +0 -99
  722. package/dist/src/foundation/release/bootstrap.d.ts +0 -29
  723. package/dist/src/foundation/release/bootstrap.js +0 -335
  724. package/dist/src/foundation/release/cohort-state.d.ts +0 -70
  725. package/dist/src/foundation/release/cohort-state.js +0 -202
  726. package/dist/src/foundation/release/index.d.ts +0 -10
  727. package/dist/src/foundation/release/index.js +0 -10
  728. package/dist/src/foundation/release/release-gc.d.ts +0 -5
  729. package/dist/src/foundation/release/release-gc.js +0 -16
  730. package/dist/src/foundation/release/release-store.d.ts +0 -43
  731. package/dist/src/foundation/release/release-store.js +0 -175
  732. package/dist/src/foundation/release/release.d.ts +0 -38
  733. package/dist/src/foundation/release/release.js +0 -204
  734. package/dist/src/foundation/release/update-transaction.d.ts +0 -31
  735. package/dist/src/foundation/release/update-transaction.js +0 -89
  736. package/dist/src/foundation/release/update.d.ts +0 -82
  737. package/dist/src/foundation/release/update.js +0 -529
  738. package/dist/src/foundation/storage/control-store.d.ts +0 -61
  739. package/dist/src/foundation/storage/control-store.js +0 -530
  740. package/dist/src/foundation/storage/index.d.ts +0 -1
  741. package/dist/src/foundation/storage/index.js +0 -1
  742. package/dist/src/foundation/structured-agent-runtime/backpressure.d.ts +0 -46
  743. package/dist/src/foundation/structured-agent-runtime/backpressure.js +0 -118
  744. package/dist/src/foundation/structured-agent-runtime/commands.d.ts +0 -52
  745. package/dist/src/foundation/structured-agent-runtime/commands.js +0 -164
  746. package/dist/src/foundation/structured-agent-runtime/handshake.d.ts +0 -41
  747. package/dist/src/foundation/structured-agent-runtime/handshake.js +0 -151
  748. package/dist/src/foundation/structured-agent-runtime/index.d.ts +0 -5
  749. package/dist/src/foundation/structured-agent-runtime/index.js +0 -5
  750. package/dist/src/foundation/structured-agent-runtime/reconnection.d.ts +0 -37
  751. package/dist/src/foundation/structured-agent-runtime/reconnection.js +0 -129
  752. package/dist/src/foundation/structured-agent-runtime/state.d.ts +0 -56
  753. package/dist/src/foundation/structured-agent-runtime/state.js +0 -118
  754. package/dist/src/foundation/supervision/index.d.ts +0 -3
  755. package/dist/src/foundation/supervision/index.js +0 -3
  756. package/dist/src/foundation/supervision/main.d.ts +0 -1
  757. package/dist/src/foundation/supervision/main.js +0 -41
  758. package/dist/src/foundation/supervision/paths.d.ts +0 -1
  759. package/dist/src/foundation/supervision/paths.js +0 -1
  760. package/dist/src/foundation/supervision/server.d.ts +0 -22
  761. package/dist/src/foundation/supervision/server.js +0 -451
  762. package/dist/src/foundation/ui-apps/contracts.d.ts +0 -42
  763. package/dist/src/foundation/ui-apps/host.d.ts +0 -42
  764. package/dist/src/foundation/ui-apps/host.js +0 -152
  765. package/dist/src/foundation/ui-apps/index.d.ts +0 -3
  766. package/dist/src/foundation/ui-apps/index.js +0 -3
  767. package/dist/src/foundation/ui-apps/registry.d.ts +0 -11
  768. package/dist/src/foundation/ui-apps/registry.js +0 -32
  769. package/dist/src/foundation/ui-components/dialog-panel.js +0 -47
  770. package/dist/src/foundation/ui-components/frame.d.ts +0 -21
  771. package/dist/src/foundation/ui-components/frame.js +0 -54
  772. package/dist/src/foundation/ui-components/index.d.ts +0 -18
  773. package/dist/src/foundation/ui-components/index.js +0 -18
  774. package/dist/src/foundation/ui-components/line-input.d.ts +0 -74
  775. package/dist/src/foundation/ui-components/line-input.js +0 -245
  776. package/dist/src/foundation/ui-components/list-view.d.ts +0 -66
  777. package/dist/src/foundation/ui-components/list-view.js +0 -76
  778. package/dist/src/foundation/ui-components/mouse.d.ts +0 -15
  779. package/dist/src/foundation/ui-components/mouse.js +0 -46
  780. package/dist/src/foundation/ui-components/scrollbar.d.ts +0 -62
  781. package/dist/src/foundation/ui-components/scrollbar.js +0 -102
  782. package/dist/src/foundation/ui-components/shortcuts.d.ts +0 -57
  783. package/dist/src/foundation/ui-components/shortcuts.js +0 -81
  784. package/dist/src/foundation/ui-components/spans.d.ts +0 -7
  785. package/dist/src/foundation/ui-components/spans.js +0 -59
  786. package/dist/src/foundation/ui-components/surface.d.ts +0 -20
  787. package/dist/src/foundation/ui-components/surface.js +0 -38
  788. package/dist/src/foundation/ui-components/text.d.ts +0 -24
  789. package/dist/src/foundation/ui-components/text.js +0 -123
  790. package/dist/src/foundation/workspace-contracts/index.d.ts +0 -2
  791. package/dist/src/foundation/workspace-contracts/index.js +0 -2
  792. package/dist/src/foundation/workspace-contracts/model.d.ts +0 -248
  793. package/dist/src/foundation/workspace-contracts/model.js +0 -2
  794. package/dist/src/foundation/workspace-contracts/validation.d.ts +0 -13
  795. package/dist/src/foundation/workspace-contracts/validation.js +0 -335
  796. package/dist/src/product-identity.d.ts +0 -37
  797. package/dist/src/product-identity.js +0 -150
  798. package/dist/src/product-identity.json +0 -99
  799. package/docs/manual-transparent-checkpoint.md +0 -53
  800. /package/dist/{src/foundation/agent-engine-contracts/domain.js → app/session-shell/paste-helper.d.ts} +0 -0
  801. /package/dist/{src/foundation/agent-engine-contracts/ports.js → app/session-shell/paste-text-worker.d.ts} +0 -0
  802. /package/dist/{src/foundation/lifecycle/commands.js → app/session-shell/paste-types.js} +0 -0
  803. /package/dist/{src/foundation/pi-owned-ui-integration/route-host.js → app/session-shell/response-copy-helper.d.ts} +0 -0
  804. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/capability-ports.js +0 -0
  805. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/domain-validation.d.ts +0 -0
  806. /package/dist/{src/foundation/pi-tui-runtime-adapter/contracts.js → contracts/agent-engine/domain.js} +0 -0
  807. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.d.ts +0 -0
  808. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/model.js +0 -0
  809. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/package-ports.js +0 -0
  810. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/ports.d.ts +0 -0
  811. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.d.ts +0 -0
  812. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/serialization.js +0 -0
  813. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.d.ts +0 -0
  814. /package/dist/{src/foundation/agent-engine-contracts → contracts/agent-engine}/validation.js +0 -0
  815. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/extension-ui.js +0 -0
  816. /package/dist/{src/foundation/owned-ui-contracts → contracts/owned-ui}/model.js +0 -0
  817. /package/dist/{src/foundation/presentation-contracts → contracts/presentation}/index.js +0 -0
  818. /package/dist/{src/features → features}/launch/development-launch.d.ts +0 -0
  819. /package/dist/{src/features → features}/launch/initialize-profile.d.ts +0 -0
  820. /package/dist/{src/features → features}/launch/initialize-profile.js +0 -0
  821. /package/dist/{src/foundation → foundation}/lifecycle/commands.d.ts +0 -0
  822. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.d.ts +0 -0
  823. /package/dist/{src/foundation → foundation}/lifecycle/launch-instance.js +0 -0
  824. /package/dist/{src/foundation → foundation}/process-containment/artifact.d.ts +0 -0
  825. /package/dist/{src/foundation → foundation}/process-containment/artifact.js +0 -0
  826. /package/dist/{src/foundation → foundation}/process-containment/contracts.d.ts +0 -0
  827. /package/dist/{src/foundation → foundation}/process-containment/contracts.js +0 -0
  828. /package/dist/{src/foundation → foundation}/release/cohort-selection.d.ts +0 -0
  829. /package/dist/{src/foundation → foundation}/release/cohort-selection.js +0 -0
  830. /package/dist/{src/foundation → foundation}/release/concurrency.d.ts +0 -0
  831. /package/dist/{src/foundation → foundation}/release/concurrency.js +0 -0
  832. /package/dist/{src/foundation → foundation}/release/process-cleanup.d.ts +0 -0
  833. /package/dist/{src/foundation → foundation}/release/process-cleanup.js +0 -0
  834. /package/dist/{src/foundation → foundation}/release/stable-release.d.ts +0 -0
  835. /package/dist/{src/foundation → foundation}/release/stable-release.js +0 -0
  836. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/shell-editor-autocomplete.d.ts +0 -0
  837. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.d.ts +0 -0
  838. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/theme.js +0 -0
  839. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/countdown-timer.js +0 -0
  840. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/mermaid.d.ts +0 -0
  841. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/components/session-selector-search.d.ts +0 -0
  842. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/external-editor.d.ts +0 -0
  843. /package/dist/{src/foundation/pi-component-adapter → integrations/pi/components}/upstream/model-search.js +0 -0
  844. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.d.ts +0 -0
  845. /package/dist/{src/foundation/pi-engine-adapter → integrations/pi/engine}/public-main-entry.js +0 -0
  846. /package/dist/{src/foundation/ui-apps → ui/apps}/contracts.js +0 -0
  847. /package/dist/{src/foundation/ui-components → ui/components}/dialog-panel.d.ts +0 -0
  848. /package/dist/{src/foundation/ui-components → ui/components}/label.d.ts +0 -0
  849. /package/dist/{src/foundation/ui-components → ui/components}/label.js +0 -0
  850. /package/dist/{src/foundation/ui-components → ui/components}/list-block.d.ts +0 -0
  851. /package/dist/{src/foundation/ui-components → ui/components}/list-block.js +0 -0
  852. /package/dist/{src/foundation/ui-components → ui/components}/pane.d.ts +0 -0
  853. /package/dist/{src/foundation/ui-components → ui/components}/pane.js +0 -0
  854. /package/dist/{src/foundation/ui-components → ui/components}/revision.d.ts +0 -0
  855. /package/dist/{src/foundation/ui-components → ui/components}/revision.js +0 -0
  856. /package/dist/{src/foundation/ui-components → ui/components}/status-line.d.ts +0 -0
  857. /package/dist/{src/foundation/ui-components → ui/components}/status-line.js +0 -0
  858. /package/dist/{src/foundation/ui-components → ui/components}/stepper.d.ts +0 -0
  859. /package/dist/{src/foundation/ui-components → ui/components}/stepper.js +0 -0
  860. /package/dist/{src/foundation/ui-components → ui/components}/theme.d.ts +0 -0
  861. /package/dist/{src/foundation/ui-components → ui/components}/theme.js +0 -0
  862. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.d.ts +0 -0
  863. /package/dist/{src/foundation/ui-components → ui/components}/value-menu.js +0 -0
  864. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.d.ts +0 -0
  865. /package/dist/{src/foundation/owned-ui-settings → ui/settings}/resolution.js +0 -0
@@ -0,0 +1,466 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { chmod, lstat, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { dirname, posix, relative, resolve, sep } from "node:path";
4
+ import { mapWithConcurrency } from "./concurrency.js";
5
+ import { assertImmutableFileMode } from "./immutable-platform.js";
6
+ import { readDependencyCertification, writeDependencyCertification as writeLayerCertification } from "./dependency-certification.js";
7
+ export { dependencyLayerCertificationPath, legacyDependencyLayerCertificationPath } from "./dependency-certification.js";
8
+ import { digestManifestFiles, releaseFileIdentity, resolveWithin } from "./release.js";
9
+ import { PRODUCT_IDENTITY } from "../../product-identity.js";
10
+ const LAYER_IO_CONCURRENCY = 32;
11
+ export const DEPENDENCY_LAYER_SCHEMA = PRODUCT_IDENTITY.evidence.dependencyLayerSchema;
12
+ export const DEPENDENCY_LAYER_MANIFEST = "dependency-layer-manifest.json";
13
+ export const RUNTIME_PAYLOAD_INVENTORY = "dist/runtime-payload-inventory.json";
14
+ /** Consume topology-independent publication classifications, retaining unknown installed content. */
15
+ export async function selectPublishedDependencyRuntimePayload(packageRoot, paths) {
16
+ const inventoryPath = resolve(packageRoot, RUNTIME_PAYLOAD_INVENTORY);
17
+ const published = await readFile(inventoryPath, "utf8").then(source => JSON.parse(source)).catch(() => null);
18
+ if (published === null)
19
+ return await selectDependencyRuntimePayload(packageRoot, paths);
20
+ if (published.schema !== PRODUCT_IDENTITY.evidence.runtimePayloadSchema || !Array.isArray(published.paths)
21
+ || !Array.isArray(published.entryPoints) || !Array.isArray(published.declaredAssets) || !Array.isArray(published.classifications)
22
+ || !published.inventory || published.inventory.schema !== PRODUCT_IDENTITY.evidence.runtimePayloadSchema
23
+ || published.classifications.some(classification => !validPublishedClassification(classification))) {
24
+ throw new Error("published runtime payload inventory is invalid");
25
+ }
26
+ const classificationByKey = new Map();
27
+ for (const classification of published.classifications) {
28
+ const key = classificationKey(classification.packageName, classification.packageVersion, classification.packagePath);
29
+ const existing = classificationByKey.get(key);
30
+ if (existing && (existing.disposition !== classification.disposition || existing.reason !== classification.reason)) {
31
+ throw new Error("published runtime payload inventory contains conflicting classifications");
32
+ }
33
+ classificationByKey.set(key, classification);
34
+ }
35
+ const descriptors = await dependencyPackageDescriptors(packageRoot, paths);
36
+ const selected = [];
37
+ const exclusions = [];
38
+ let includedBytes = 0;
39
+ let excludedBytes = 0;
40
+ let uncertaintyRetainedFiles = 0;
41
+ await mapWithConcurrency([...paths].sort(), LAYER_IO_CONCURRENCY, async (path) => {
42
+ const descriptor = descriptorForPath(path, descriptors);
43
+ const packagePath = descriptor === null ? null : path.slice(descriptor.root.length + 1);
44
+ const classification = descriptor === null || packagePath === null
45
+ ? undefined
46
+ : classificationByKey.get(classificationKey(descriptor.name, descriptor.version, packagePath));
47
+ const bytes = (await lstat(resolveWithin(packageRoot, path))).size;
48
+ const intrinsicExclusion = /\.d\.(?:ts|mts|cts)$/.test(path) ? "type-declaration"
49
+ : /\.map$/.test(path) ? "source-map"
50
+ : null;
51
+ if (classification?.disposition === "exclude" || intrinsicExclusion !== null) {
52
+ exclusions.push({ path, reason: classification?.disposition === "exclude" ? classification.reason : intrinsicExclusion });
53
+ excludedBytes += bytes;
54
+ return;
55
+ }
56
+ selected.push(path);
57
+ includedBytes += bytes;
58
+ if (classification === undefined || !isKnownRuntimePath(path))
59
+ uncertaintyRetainedFiles += 1;
60
+ });
61
+ selected.sort();
62
+ exclusions.sort((left, right) => left.path.localeCompare(right.path));
63
+ return {
64
+ paths: selected,
65
+ inventory: {
66
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
67
+ includedFiles: selected.length,
68
+ includedBytes,
69
+ excludedFiles: exclusions.length,
70
+ excludedBytes,
71
+ uncertaintyRetainedFiles,
72
+ exclusions,
73
+ },
74
+ };
75
+ }
76
+ /** Generate publication evidence from literal module reachability and declared runtime assets. */
77
+ export async function generateDependencyRuntimePayload(packageRoot, allPaths, productPaths) {
78
+ const available = new Set(allPaths);
79
+ const selected = new Set();
80
+ const queue = productPaths.filter(isJavaScriptModule);
81
+ for (const manifestPath of allPaths.filter(path => path.startsWith("node_modules/") && path.endsWith("/package.json"))) {
82
+ try {
83
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, manifestPath), "utf8"));
84
+ const packagePath = manifestPath.slice(0, -"/package.json".length);
85
+ const target = exportedTarget(manifest.exports, "")
86
+ ?? (typeof manifest.module === "string" ? manifest.module : typeof manifest.main === "string" ? manifest.main : "index.js");
87
+ const entry = availableModule(relativePath(packagePath, target), available);
88
+ if (entry !== null && !selected.has(entry)) {
89
+ selected.add(entry);
90
+ if (isJavaScriptModule(entry))
91
+ queue.push(entry);
92
+ }
93
+ }
94
+ catch { }
95
+ }
96
+ const visited = new Set();
97
+ while (queue.length > 0) {
98
+ const importer = queue.shift();
99
+ if (visited.has(importer))
100
+ continue;
101
+ visited.add(importer);
102
+ const source = await readFile(resolveWithin(packageRoot, importer), "utf8");
103
+ const specifiers = [...source.matchAll(/(?:\bimport\s*(?:[^"'`]*?\sfrom\s*)?|\bexport\s+[^"'`]*?\sfrom\s*|\bimport\s*\(|\brequire\s*\()\s*["'`]([^"'`]+)["'`]/g)]
104
+ .map(match => match[1])
105
+ .filter(specifier => !specifier.startsWith("node:"));
106
+ for (const specifier of specifiers) {
107
+ const resolved = await resolvePublishedSpecifier(packageRoot, importer, specifier, available);
108
+ if (resolved === null || !resolved.startsWith("node_modules/"))
109
+ continue;
110
+ if (!selected.has(resolved)) {
111
+ selected.add(resolved);
112
+ if (isJavaScriptModule(resolved))
113
+ queue.push(resolved);
114
+ }
115
+ }
116
+ if (importer.startsWith("node_modules/") && /\b(?:import|require)\s*\(\s*(?!["'`])/.test(source)) {
117
+ const prefix = dependencyPackagePrefix(importer);
118
+ for (const path of allPaths)
119
+ if (path.startsWith(`${prefix}/`))
120
+ selected.add(path);
121
+ }
122
+ }
123
+ for (const path of allPaths) {
124
+ if (!path.startsWith("node_modules/"))
125
+ continue;
126
+ if (path.endsWith("/package.json") || /(?:^|\/)LICENSE(?:\.|$)/i.test(path)
127
+ || /\.(?:json|node|wasm|css|html|png|jpg|jpeg|gif|svg|md)$/.test(path))
128
+ selected.add(path);
129
+ }
130
+ const conservative = await selectDependencyRuntimePayload(packageRoot, allPaths.filter(path => path.startsWith("node_modules/")));
131
+ const paths = conservative.paths.filter(path => selected.has(path)).sort();
132
+ const exclusions = [];
133
+ let includedBytes = 0;
134
+ let excludedBytes = 0;
135
+ let uncertaintyRetainedFiles = 0;
136
+ const conservativeReasons = new Map(conservative.inventory.exclusions.map(item => [item.path, item.reason]));
137
+ for (const path of allPaths.filter(path => path.startsWith("node_modules/")).sort()) {
138
+ const bytes = (await lstat(resolveWithin(packageRoot, path))).size;
139
+ if (paths.includes(path)) {
140
+ includedBytes += bytes;
141
+ if (!isJavaScriptModule(path) && !/\.(?:json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path))
142
+ uncertaintyRetainedFiles += 1;
143
+ }
144
+ else {
145
+ excludedBytes += bytes;
146
+ exclusions.push({ path, reason: conservativeReasons.get(path) ?? "unreachable-development" });
147
+ }
148
+ }
149
+ const inventory = {
150
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
151
+ includedFiles: paths.length,
152
+ includedBytes,
153
+ excludedFiles: exclusions.length,
154
+ excludedBytes,
155
+ uncertaintyRetainedFiles,
156
+ exclusions,
157
+ };
158
+ return {
159
+ paths,
160
+ inventory,
161
+ classifications: await createPublishedClassifications(packageRoot, allPaths, new Set(paths), new Map(exclusions.map(item => [item.path, item.reason]))),
162
+ };
163
+ }
164
+ /** Conservatively omit only files Node never executes; uncertain assets remain selected. */
165
+ export async function selectDependencyRuntimePayload(packageRoot, paths) {
166
+ const included = [];
167
+ const exclusions = [];
168
+ let includedBytes = 0;
169
+ let excludedBytes = 0;
170
+ let uncertaintyRetainedFiles = 0;
171
+ await mapWithConcurrency([...paths].sort(), LAYER_IO_CONCURRENCY, async (path) => {
172
+ const metadata = await lstat(resolveWithin(packageRoot, path));
173
+ const reason = /\.d\.(?:ts|mts|cts)$/.test(path) ? "type-declaration"
174
+ : /\.map$/.test(path) ? "source-map"
175
+ : null;
176
+ if (reason !== null) {
177
+ exclusions.push({ path, reason });
178
+ excludedBytes += metadata.size;
179
+ return;
180
+ }
181
+ included.push(path);
182
+ includedBytes += metadata.size;
183
+ if (!/\.(?:js|mjs|cjs|json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path) && !/(?:^|\/)LICENSE(?:\.|$)/i.test(path)) {
184
+ uncertaintyRetainedFiles += 1;
185
+ }
186
+ });
187
+ exclusions.sort((left, right) => left.path.localeCompare(right.path));
188
+ included.sort();
189
+ return {
190
+ paths: included,
191
+ inventory: {
192
+ schema: PRODUCT_IDENTITY.evidence.runtimePayloadSchema,
193
+ includedFiles: included.length,
194
+ includedBytes,
195
+ excludedFiles: exclusions.length,
196
+ excludedBytes,
197
+ uncertaintyRetainedFiles,
198
+ exclusions,
199
+ },
200
+ };
201
+ }
202
+ /** Materialize or reuse an exact immutable dependency layer after one source-content pass. */
203
+ export async function materializeDependencyLayer(packageRoot, dataDir, paths, options) {
204
+ if (paths.length === 0)
205
+ return null;
206
+ const sourceRoot = await realpath(packageRoot);
207
+ const selected = [...paths].sort();
208
+ const content = await mapWithConcurrency(selected, LAYER_IO_CONCURRENCY, async (path) => {
209
+ const source = resolveWithin(sourceRoot, path);
210
+ const metadata = await lstat(source);
211
+ if (!metadata.isFile() || metadata.isSymbolicLink())
212
+ throw new Error(`dependency-layer input is not a regular file: ${path}`);
213
+ const cached = options.cachedFiles?.get(path);
214
+ const bytes = cached ?? await readFile(source);
215
+ if (!cached)
216
+ options.onOperation?.({ operation: "source-read", path, bytes: bytes.length });
217
+ return { path, bytes, mode: (metadata.mode & 0o111) !== 0 ? 0o500 : 0o400, identity: releaseFileIdentity(path, bytes, (metadata.mode & 0o111) !== 0) };
218
+ });
219
+ const files = content.map(item => item.identity);
220
+ const contentDigest = digestManifestFiles(files);
221
+ const identity = {
222
+ schema: DEPENDENCY_LAYER_SCHEMA,
223
+ layerId: `dependencies-${contentDigest.slice(0, 32)}`,
224
+ contentDigest,
225
+ files,
226
+ inventory: options.inventory,
227
+ };
228
+ const layersRoot = resolve(dataDir, "dependency-layers");
229
+ await mkdir(layersRoot, { recursive: true, mode: 0o700 });
230
+ const layerRoot = resolveWithin(layersRoot, identity.layerId);
231
+ if (await lstat(layerRoot).catch(() => null)) {
232
+ const reused = await reuseDependencyLayer(dataDir, identity);
233
+ for (const file of reused.files)
234
+ options.onOperation?.({ operation: "layer-reuse", path: file.path, bytes: file.bytes });
235
+ return { ...reused, reused: true };
236
+ }
237
+ const candidate = resolveWithin(layersRoot, `.candidate-${randomUUID()}`);
238
+ await mkdir(candidate, { mode: 0o700 });
239
+ try {
240
+ const directories = [...new Set(content.map(item => dirname(resolveWithin(candidate, item.path))))];
241
+ await mapWithConcurrency(directories, LAYER_IO_CONCURRENCY, async (directory) => await mkdir(directory, { recursive: true, mode: 0o700 }));
242
+ await mapWithConcurrency(content, LAYER_IO_CONCURRENCY, async (item) => {
243
+ const destination = resolveWithin(candidate, item.path);
244
+ if (options.writeCandidateFile)
245
+ await options.writeCandidateFile(destination, item.bytes, item.mode);
246
+ else {
247
+ await writeFile(destination, item.bytes, { flag: "wx", mode: item.mode });
248
+ await chmod(destination, item.mode);
249
+ }
250
+ options.onOperation?.({ operation: "layer-write", path: item.path, bytes: item.bytes.length });
251
+ });
252
+ await writeFile(resolve(candidate, DEPENDENCY_LAYER_MANIFEST), JSON.stringify(identity, null, 2), { flag: "wx", mode: 0o400 });
253
+ try {
254
+ await rename(candidate, layerRoot);
255
+ }
256
+ catch (error) {
257
+ if (!await lstat(layerRoot).catch(() => null))
258
+ throw error;
259
+ await rm(candidate, { recursive: true, force: true });
260
+ const winner = await reuseDependencyLayer(dataDir, identity);
261
+ for (const file of winner.files)
262
+ options.onOperation?.({ operation: "layer-reuse", path: file.path, bytes: file.bytes });
263
+ return { ...winner, reused: true };
264
+ }
265
+ await writeLayerCertification(dataDir, identity);
266
+ return { ...identity, layerRoot: await realpath(layerRoot), reused: false };
267
+ }
268
+ catch (error) {
269
+ await rm(candidate, { recursive: true, force: true });
270
+ throw error;
271
+ }
272
+ }
273
+ /** Read trusted layer certification and canonical metadata without rereading every payload byte. */
274
+ export async function readCertifiedDependencyLayer(dataDir, layerId, expected, options = {}) {
275
+ const layersRoot = await realpath(resolve(dataDir, "dependency-layers"));
276
+ const layerRoot = await realpath(resolveWithin(layersRoot, layerId));
277
+ assertDirectChild(layersRoot, layerRoot);
278
+ const metadata = await lstat(resolve(layersRoot, layerId));
279
+ if (!metadata.isDirectory() || metadata.isSymbolicLink())
280
+ throw new Error(`dependency layer is not a managed non-link directory: ${layerId}`);
281
+ const manifest = JSON.parse(await readFile(resolve(layerRoot, DEPENDENCY_LAYER_MANIFEST), "utf8"));
282
+ validateLayerManifest(manifest);
283
+ if (expected && (expected.layerId !== manifest.layerId || expected.contentDigest !== manifest.contentDigest)) {
284
+ throw new Error(`dependency layer identity mismatch: ${layerId}`);
285
+ }
286
+ if (manifest.layerId !== layerId)
287
+ throw new Error(`dependency layer identity mismatch: ${layerId}`);
288
+ await readDependencyCertification(dataDir, manifest, options);
289
+ return { ...manifest, layerRoot };
290
+ }
291
+ /** Fully verify a layer when certification is absent or explicit tamper evidence is required. */
292
+ export async function verifyDependencyLayer(dataDir, reference, onOperation) {
293
+ const layersRoot = await realpath(resolve(dataDir, "dependency-layers"));
294
+ const layerRoot = await realpath(resolveWithin(layersRoot, reference.layerId));
295
+ assertDirectChild(layersRoot, layerRoot);
296
+ const manifest = JSON.parse(await readFile(resolve(layerRoot, DEPENDENCY_LAYER_MANIFEST), "utf8"));
297
+ validateLayerManifest(manifest);
298
+ if (manifest.layerId !== reference.layerId || manifest.contentDigest !== reference.contentDigest)
299
+ throw new Error(`dependency layer reference mismatch: ${reference.layerId}`);
300
+ await mapWithConcurrency(manifest.files, LAYER_IO_CONCURRENCY, async (file) => {
301
+ const path = resolveWithin(layerRoot, file.path);
302
+ const metadata = await lstat(path);
303
+ if (!metadata.isFile() || metadata.isSymbolicLink() || metadata.size !== file.bytes)
304
+ throw new Error(`dependency layer file mismatch: ${file.path}`);
305
+ assertImmutableFileMode(metadata, path);
306
+ const bytes = await readFile(path);
307
+ onOperation?.({ operation: "verification-read", path: file.path, bytes: bytes.length });
308
+ const actual = releaseFileIdentity(file.path, bytes, file.executable);
309
+ if (actual.sha256 !== file.sha256)
310
+ throw new Error(`dependency layer file digest mismatch: ${file.path}`);
311
+ });
312
+ if (digestManifestFiles(manifest.files) !== manifest.contentDigest)
313
+ throw new Error(`dependency layer content digest mismatch: ${manifest.layerId}`);
314
+ await writeLayerCertification(dataDir, manifest);
315
+ return { ...manifest, layerRoot };
316
+ }
317
+ export function dependencyReference(layer) {
318
+ return { layerId: layer.layerId, contentDigest: layer.contentDigest, binding: "node_modules" };
319
+ }
320
+ async function reuseDependencyLayer(dataDir, identity) {
321
+ try {
322
+ return await readCertifiedDependencyLayer(dataDir, identity.layerId, identity);
323
+ }
324
+ catch (error) {
325
+ const verified = await verifyDependencyLayer(dataDir, dependencyReference({ ...identity, layerRoot: resolve(dataDir, "dependency-layers", identity.layerId), reused: true }));
326
+ if (verified.layerId !== identity.layerId || verified.contentDigest !== identity.contentDigest)
327
+ throw error;
328
+ return verified;
329
+ }
330
+ }
331
+ function validateLayerManifest(value) {
332
+ if (value.schema !== DEPENDENCY_LAYER_SCHEMA || !/^dependencies-[a-f0-9]{32}$/.test(value.layerId)
333
+ || !/^[a-f0-9]{64}$/.test(value.contentDigest) || !Array.isArray(value.files) || value.files.length === 0
334
+ || value.files.some(file => !file.path.startsWith("node_modules/") || file.path.includes("..") || !/^[a-f0-9]{64}$/.test(file.sha256))) {
335
+ throw new Error("dependency layer manifest is invalid");
336
+ }
337
+ if (digestManifestFiles(value.files) !== value.contentDigest || value.layerId !== `dependencies-${value.contentDigest.slice(0, 32)}`) {
338
+ throw new Error(`dependency layer manifest identity is invalid: ${value.layerId}`);
339
+ }
340
+ }
341
+ async function resolvePublishedSpecifier(packageRoot, importer, specifier, available) {
342
+ if (specifier.startsWith("."))
343
+ return availableModule(relativePath(dirname(importer), specifier), available);
344
+ if (specifier.startsWith("/") || specifier.startsWith("#"))
345
+ return null;
346
+ const parts = specifier.split("/");
347
+ const packageName = parts[0].startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
348
+ const subpath = parts.slice(packageName.startsWith("@") ? 2 : 1).join("/");
349
+ const suffix = `node_modules/${packageName}/package.json`;
350
+ const manifests = [...available].filter(path => path.endsWith(suffix));
351
+ manifests.sort((left, right) => commonPrefixLength(importer, right) - commonPrefixLength(importer, left));
352
+ for (const manifestPath of manifests) {
353
+ try {
354
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, manifestPath), "utf8"));
355
+ const packagePath = manifestPath.slice(0, -"/package.json".length);
356
+ const target = exportedTarget(manifest.exports, subpath) ?? (subpath.length > 0 ? subpath
357
+ : typeof manifest.module === "string" ? manifest.module
358
+ : typeof manifest.main === "string" ? manifest.main
359
+ : "index.js");
360
+ const resolved = availableModule(relativePath(packagePath, target), available);
361
+ if (resolved !== null)
362
+ return resolved;
363
+ }
364
+ catch { }
365
+ }
366
+ return null;
367
+ }
368
+ function exportedTarget(exportsValue, subpath) {
369
+ const select = (value) => {
370
+ if (typeof value === "string")
371
+ return value;
372
+ if (!value || typeof value !== "object" || Array.isArray(value))
373
+ return null;
374
+ const record = value;
375
+ return select(record.import) ?? select(record.node) ?? select(record.default);
376
+ };
377
+ if (typeof exportsValue === "string")
378
+ return subpath.length === 0 ? exportsValue : null;
379
+ if (!exportsValue || typeof exportsValue !== "object" || Array.isArray(exportsValue))
380
+ return null;
381
+ const record = exportsValue;
382
+ return select(record[subpath.length === 0 ? "." : `./${subpath}`]) ?? (subpath.length === 0 ? select(exportsValue) : null);
383
+ }
384
+ function relativePath(root, target) {
385
+ return posix.normalize(posix.join(root.split(sep).join("/"), target));
386
+ }
387
+ function availableModule(path, available) {
388
+ const normalized = path.replace(/^\.\//, "");
389
+ for (const candidate of [normalized, `${normalized}.js`, `${normalized}.mjs`, `${normalized}.cjs`, `${normalized}.json`, `${normalized}/index.js`]) {
390
+ if (available.has(candidate))
391
+ return candidate;
392
+ }
393
+ return null;
394
+ }
395
+ function commonPrefixLength(left, right) {
396
+ const leftParts = left.split("/");
397
+ const rightParts = right.split("/");
398
+ let index = 0;
399
+ while (leftParts[index] === rightParts[index])
400
+ index += 1;
401
+ return index;
402
+ }
403
+ function dependencyPackagePrefix(path) {
404
+ const parts = path.split("/");
405
+ const nodeModules = parts.lastIndexOf("node_modules");
406
+ const packageParts = parts[nodeModules + 1]?.startsWith("@") ? 2 : 1;
407
+ return parts.slice(0, nodeModules + 1 + packageParts).join("/");
408
+ }
409
+ async function dependencyPackageDescriptors(packageRoot, paths) {
410
+ const descriptors = [];
411
+ for (const path of paths.filter(path => path.endsWith("/package.json")).sort()) {
412
+ try {
413
+ const manifest = JSON.parse(await readFile(resolveWithin(packageRoot, path), "utf8"));
414
+ if (typeof manifest.name !== "string" || manifest.name.length === 0 || typeof manifest.version !== "string" || manifest.version.length === 0)
415
+ continue;
416
+ descriptors.push({ root: path.slice(0, -"/package.json".length), name: manifest.name, version: manifest.version });
417
+ }
418
+ catch { }
419
+ }
420
+ return descriptors.sort((left, right) => right.root.length - left.root.length || left.root.localeCompare(right.root));
421
+ }
422
+ function descriptorForPath(path, descriptors) {
423
+ return descriptors.find(descriptor => path.startsWith(`${descriptor.root}/`)) ?? null;
424
+ }
425
+ async function createPublishedClassifications(packageRoot, paths, included, exclusionReasons) {
426
+ const descriptors = await dependencyPackageDescriptors(packageRoot, paths);
427
+ const classifications = new Map();
428
+ for (const path of paths.filter(path => path.startsWith("node_modules/")).sort()) {
429
+ const descriptor = descriptorForPath(path, descriptors);
430
+ if (descriptor === null)
431
+ continue;
432
+ const packagePath = path.slice(descriptor.root.length + 1);
433
+ const classification = included.has(path)
434
+ ? { packageName: descriptor.name, packageVersion: descriptor.version, packagePath, disposition: "include" }
435
+ : { packageName: descriptor.name, packageVersion: descriptor.version, packagePath, disposition: "exclude", reason: exclusionReasons.get(path) ?? "unreachable-development" };
436
+ const key = classificationKey(classification.packageName, classification.packageVersion, classification.packagePath);
437
+ const existing = classifications.get(key);
438
+ if (existing?.disposition === "include")
439
+ continue;
440
+ if (classification.disposition === "include" || existing === undefined)
441
+ classifications.set(key, classification);
442
+ }
443
+ return [...classifications.values()].sort((left, right) => classificationKey(left.packageName, left.packageVersion, left.packagePath)
444
+ .localeCompare(classificationKey(right.packageName, right.packageVersion, right.packagePath)));
445
+ }
446
+ function validPublishedClassification(value) {
447
+ const validReason = value.reason === "type-declaration" || value.reason === "source-map" || value.reason === "unreachable-development";
448
+ return typeof value.packageName === "string" && value.packageName.length > 0
449
+ && typeof value.packageVersion === "string" && value.packageVersion.length > 0
450
+ && typeof value.packagePath === "string" && value.packagePath.length > 0
451
+ && !value.packagePath.startsWith("/") && !value.packagePath.includes("\\")
452
+ && !value.packagePath.split("/").includes("..")
453
+ && (value.disposition === "include" ? value.reason === undefined : value.disposition === "exclude" && validReason);
454
+ }
455
+ function classificationKey(packageName, packageVersion, packagePath) {
456
+ return `${packageName}\0${packageVersion}\0${packagePath}`;
457
+ }
458
+ function isKnownRuntimePath(path) {
459
+ return /\.(?:js|mjs|cjs|json|node|wasm|css|html|png|jpg|jpeg|gif|svg)$/.test(path) || /(?:^|\/)LICENSE(?:\.|$)/i.test(path);
460
+ }
461
+ function isJavaScriptModule(path) { return /\.(?:js|mjs|cjs)$/.test(path); }
462
+ function assertDirectChild(parent, child) {
463
+ const path = relative(parent, child);
464
+ if (path.length === 0 || path === ".." || path.startsWith(`..${sep}`) || path.includes(sep))
465
+ throw new Error(`dependency layer escapes managed storage: ${child}`);
466
+ }
@@ -0,0 +1,24 @@
1
+ import type { OwnershipProbe } from "./cohort-selection.js";
2
+ import type { SupervisorEndpointMetadata } from "./cohort-state.js";
3
+ import type { CohortEndpointPaths, ProductPaths } from "../lifecycle/index.js";
4
+ export interface RecordedEndpoint {
5
+ readonly metadata: SupervisorEndpointMetadata;
6
+ readonly paths: CohortEndpointPaths;
7
+ }
8
+ /**
9
+ * Every endpoint recorded under this runtime directory: one per cohort, plus the single
10
+ * endpoint published by releases that predate cohort-scoped identity. More than one can be
11
+ * live at a time, and each is validated on its own identity rather than by being the only one.
12
+ */
13
+ export declare function listRecordedEndpoints(paths: ProductPaths): Promise<readonly RecordedEndpoint[]>;
14
+ /**
15
+ * Removes the records of cohorts whose processes are gone. A record left by a cohort that
16
+ * exited without cleaning up is not evidence of ownership, and a later launch should not have
17
+ * to reason about it. Returns the release ids whose records were removed.
18
+ */
19
+ export declare function sweepDeadEndpoints(paths: ProductPaths): Promise<readonly string[]>;
20
+ /** The releases that an identity-verified live cohort runs from and that must be retained. */
21
+ export declare function liveReleaseIds(paths: ProductPaths): Promise<readonly string[]>;
22
+ export declare function readEndpointMetadata(path: string): Promise<SupervisorEndpointMetadata | null>;
23
+ export declare function probeOwnership(metadata: SupervisorEndpointMetadata): Promise<OwnershipProbe>;
24
+ export declare function removeEndpointArtifacts(metadataPath: string, endpoint: string): Promise<void>;
@@ -0,0 +1,134 @@
1
+ import { readdir, readFile, rm } from "node:fs/promises";
2
+ import { connect } from "node:net";
3
+ import { platform } from "node:os";
4
+ import { resolve } from "node:path";
5
+ import { PRODUCT_IDENTITY } from "../../product-identity.js";
6
+ import { encodeFrame, LineFrameDecoder } from "../protocol/index.js";
7
+ import { processIsAlive } from "./process-cleanup.js";
8
+ /**
9
+ * Every endpoint recorded under this runtime directory: one per cohort, plus the single
10
+ * endpoint published by releases that predate cohort-scoped identity. More than one can be
11
+ * live at a time, and each is validated on its own identity rather than by being the only one.
12
+ */
13
+ export async function listRecordedEndpoints(paths) {
14
+ const recorded = [];
15
+ const legacy = await readEndpointMetadata(paths.endpointMetadataPath);
16
+ if (legacy) {
17
+ recorded.push({ metadata: legacy, paths: { endpoint: paths.endpoint, endpointMetadataPath: paths.endpointMetadataPath } });
18
+ }
19
+ const names = await readdir(paths.endpointsDir).catch(() => []);
20
+ for (const name of names) {
21
+ if (!name.endsWith(".json"))
22
+ continue;
23
+ const endpointMetadataPath = resolve(paths.endpointsDir, name);
24
+ const metadata = await readEndpointMetadata(endpointMetadataPath);
25
+ if (metadata)
26
+ recorded.push({ metadata, paths: { endpoint: metadata.endpoint, endpointMetadataPath } });
27
+ }
28
+ return recorded;
29
+ }
30
+ /**
31
+ * Removes the records of cohorts whose processes are gone. A record left by a cohort that
32
+ * exited without cleaning up is not evidence of ownership, and a later launch should not have
33
+ * to reason about it. Returns the release ids whose records were removed.
34
+ */
35
+ export async function sweepDeadEndpoints(paths) {
36
+ const swept = [];
37
+ for (const recorded of await listRecordedEndpoints(paths)) {
38
+ if (processIsAlive(recorded.metadata.pid))
39
+ continue;
40
+ await removeEndpointArtifacts(recorded.paths.endpointMetadataPath, recorded.paths.endpoint);
41
+ swept.push(recorded.metadata.releaseId);
42
+ }
43
+ return swept;
44
+ }
45
+ /** The releases that an identity-verified live cohort runs from and that must be retained. */
46
+ export async function liveReleaseIds(paths) {
47
+ const recorded = await listRecordedEndpoints(paths);
48
+ const ownership = await Promise.all(recorded.map(async (endpoint) => ({
49
+ releaseId: endpoint.metadata.releaseId,
50
+ probe: await probeOwnership(endpoint.metadata),
51
+ })));
52
+ return [...new Set(ownership.filter(item => item.probe === "live-verified").map(item => item.releaseId))].sort();
53
+ }
54
+ export async function readEndpointMetadata(path) {
55
+ try {
56
+ const value = JSON.parse(await readFile(path, "utf8"));
57
+ const ownership = value.ownership;
58
+ const liveInstanceIds = Array.isArray(ownership?.liveInstanceIds)
59
+ ? ownership.liveInstanceIds
60
+ : Array.isArray(ownership?.liveGenerationIds) ? ownership.liveGenerationIds : null;
61
+ const nonResumableInstanceIds = Array.isArray(ownership?.nonResumableInstanceIds)
62
+ ? ownership.nonResumableInstanceIds
63
+ : Array.isArray(ownership?.nonResumableGenerationIds) ? ownership.nonResumableGenerationIds : null;
64
+ const uncertainInstanceIds = Array.isArray(ownership?.uncertainInstanceIds) ? ownership.uncertainInstanceIds : [];
65
+ if (!value || value.schema !== PRODUCT_IDENTITY.protocol.supervisorSchema || typeof value.supervisorId !== "string" || typeof value.endpoint !== "string" || !Number.isSafeInteger(value.pid)
66
+ || typeof value.pidStartIdentity !== "string" || typeof value.bootNonce !== "string" || typeof value.releaseId !== "string"
67
+ || typeof value.releaseRoot !== "string" || typeof value.contentDigest !== "string" || !ownership
68
+ || !isStringArray(liveInstanceIds) || !isStringArray(nonResumableInstanceIds) || !isStringArray(uncertainInstanceIds)) {
69
+ return null;
70
+ }
71
+ return {
72
+ ...value,
73
+ ownership: {
74
+ ...ownership,
75
+ liveInstanceIds,
76
+ nonResumableInstanceIds,
77
+ uncertainInstanceIds,
78
+ },
79
+ };
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ export async function probeOwnership(metadata) {
86
+ if (!processIsAlive(metadata.pid))
87
+ return "dead";
88
+ const identity = await requestIdentity(metadata.endpoint, 500);
89
+ if (!identity)
90
+ return "unresponsive";
91
+ return identity.supervisorId === metadata.supervisorId
92
+ && identity.bootNonce === metadata.bootNonce
93
+ && identity.pidStartIdentity === metadata.pidStartIdentity
94
+ && identity.releaseId === metadata.releaseId
95
+ ? "live-verified"
96
+ : "identity-mismatch";
97
+ }
98
+ async function requestIdentity(endpoint, timeoutMs) {
99
+ return await new Promise(resolvePromise => {
100
+ const socket = connect(endpoint);
101
+ const decoder = new LineFrameDecoder();
102
+ let settled = false;
103
+ const finish = (value) => {
104
+ if (settled)
105
+ return;
106
+ settled = true;
107
+ socket.destroy();
108
+ resolvePromise(value);
109
+ };
110
+ socket.once("error", () => finish(null));
111
+ socket.once("connect", () => socket.write(encodeFrame({ type: "identity-probe" })));
112
+ socket.on("data", chunk => {
113
+ try {
114
+ const message = decoder.push(chunk)[0];
115
+ if (message?.type === "identity" && typeof message.supervisorId === "string" && typeof message.bootNonce === "string"
116
+ && typeof message.pidStartIdentity === "string" && typeof message.releaseId === "string") {
117
+ finish({ supervisorId: message.supervisorId, bootNonce: message.bootNonce, pidStartIdentity: message.pidStartIdentity, releaseId: message.releaseId });
118
+ }
119
+ }
120
+ catch {
121
+ finish(null);
122
+ }
123
+ });
124
+ setTimeout(() => finish(null), timeoutMs).unref();
125
+ });
126
+ }
127
+ function isStringArray(value) {
128
+ return Array.isArray(value) && value.every(item => typeof item === "string" && item.length > 0);
129
+ }
130
+ export async function removeEndpointArtifacts(metadataPath, endpoint) {
131
+ await rm(metadataPath, { force: true });
132
+ if (platform() !== "win32")
133
+ await rm(endpoint, { force: true });
134
+ }
@@ -0,0 +1,6 @@
1
+ import type { Stats } from "node:fs";
2
+ export type ImmutablePlatformPolicy = "windows-readonly-content-v1" | "posix-readonly-content-v1";
3
+ /** Name the platform protection established while complete payload verification owns every file. */
4
+ export declare function immutablePlatformPolicy(platform?: NodeJS.Platform): ImmutablePlatformPolicy | null;
5
+ /** Refuse certification when a payload file is writable after immutable materialization. */
6
+ export declare function assertImmutableFileMode(metadata: Pick<Stats, "mode">, path: string): void;
@@ -0,0 +1,13 @@
1
+ /** Name the platform protection established while complete payload verification owns every file. */
2
+ export function immutablePlatformPolicy(platform = process.platform) {
3
+ if (platform === "win32")
4
+ return "windows-readonly-content-v1";
5
+ if (platform === "linux" || platform === "darwin")
6
+ return "posix-readonly-content-v1";
7
+ return null;
8
+ }
9
+ /** Refuse certification when a payload file is writable after immutable materialization. */
10
+ export function assertImmutableFileMode(metadata, path) {
11
+ if ((metadata.mode & 0o222) !== 0)
12
+ throw new Error(`immutable payload file is writable: ${path}`);
13
+ }