@llblab/pi-kit 0.38.4 → 0.39.0

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 (424) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +1 -1
  3. package/node_modules/@llblab/pi-actors/AGENTS.md +108 -20
  4. package/node_modules/@llblab/pi-actors/BACKLOG.md +207 -4
  5. package/node_modules/@llblab/pi-actors/CHANGELOG.md +13 -0
  6. package/node_modules/@llblab/pi-actors/README.md +31 -1
  7. package/node_modules/@llblab/pi-actors/dist/index.js +1 -1
  8. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.d.ts +37 -0
  9. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.js +131 -62
  10. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.d.ts +2 -0
  11. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.js +3 -2
  12. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.d.ts +37 -0
  13. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.js +263 -129
  14. package/node_modules/@llblab/pi-actors/dist/lib/execution-files.d.ts +32 -0
  15. package/node_modules/@llblab/pi-actors/dist/lib/execution-files.js +128 -0
  16. package/node_modules/@llblab/pi-actors/dist/lib/execution-output.js +5 -4
  17. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.d.ts +19 -1
  18. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.js +62 -26
  19. package/node_modules/@llblab/pi-actors/dist/lib/execution.d.ts +4 -1
  20. package/node_modules/@llblab/pi-actors/dist/lib/execution.js +6 -1
  21. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.d.ts +9 -2
  22. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.js +92 -14
  23. package/node_modules/@llblab/pi-actors/dist/lib/file-state.js +21 -2
  24. package/node_modules/@llblab/pi-actors/dist/lib/inspector-command.js +2 -2
  25. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.d.ts +25 -7
  26. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.js +562 -262
  27. package/node_modules/@llblab/pi-actors/dist/lib/inspector.d.ts +20 -10
  28. package/node_modules/@llblab/pi-actors/dist/lib/inspector.js +80 -91
  29. package/node_modules/@llblab/pi-actors/dist/lib/limits.d.ts +1 -0
  30. package/node_modules/@llblab/pi-actors/dist/lib/limits.js +1 -0
  31. package/node_modules/@llblab/pi-actors/dist/lib/observability.d.ts +15 -1
  32. package/node_modules/@llblab/pi-actors/dist/lib/observability.js +216 -99
  33. package/node_modules/@llblab/pi-actors/dist/lib/pi.d.ts +5 -4
  34. package/node_modules/@llblab/pi-actors/dist/lib/pi.js +64 -10
  35. package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.d.ts +18 -0
  36. package/node_modules/@llblab/pi-actors/dist/lib/recipe-projection.js +220 -0
  37. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.d.ts +2 -0
  38. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.js +30 -6
  39. package/node_modules/@llblab/pi-actors/dist/lib/registry.js +270 -36
  40. package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.d.ts +213 -5
  41. package/node_modules/@llblab/pi-actors/dist/lib/run-delivery.js +1909 -40
  42. package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.d.ts +107 -0
  43. package/node_modules/@llblab/pi-actors/dist/lib/run-supervision.js +412 -0
  44. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.d.ts +9 -2
  45. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.js +283 -60
  46. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.d.ts +26 -1
  47. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.js +68 -2
  48. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.d.ts +451 -0
  49. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-exports.js +2315 -0
  50. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.d.ts +97 -0
  51. package/node_modules/@llblab/pi-actors/dist/lib/runs-context-index.js +368 -0
  52. package/node_modules/@llblab/pi-actors/dist/lib/runs-control-delivery.js +46 -7
  53. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.d.ts +78 -2
  54. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.js +334 -2
  55. package/node_modules/@llblab/pi-actors/dist/lib/runs-controls.js +4 -1
  56. package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.d.ts +80 -0
  57. package/node_modules/@llblab/pi-actors/dist/lib/runs-descendant-launches.js +287 -0
  58. package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.d.ts +110 -0
  59. package/node_modules/@llblab/pi-actors/dist/lib/runs-execution-evidence.js +282 -0
  60. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.d.ts +66 -1
  61. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.js +349 -13
  62. package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.d.ts +73 -0
  63. package/node_modules/@llblab/pi-actors/dist/lib/runs-native-launches.js +227 -0
  64. package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.d.ts +141 -0
  65. package/node_modules/@llblab/pi-actors/dist/lib/runs-outcomes.js +292 -0
  66. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.d.ts +10 -1
  67. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.js +36 -4
  68. package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.d.ts +46 -0
  69. package/node_modules/@llblab/pi-actors/dist/lib/runs-process-windows-mi.js +114 -0
  70. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.d.ts +34 -1
  71. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.js +158 -26
  72. package/node_modules/@llblab/pi-actors/dist/lib/runs-results.d.ts +116 -0
  73. package/node_modules/@llblab/pi-actors/dist/lib/runs-results.js +518 -0
  74. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.d.ts +15 -2
  75. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.js +148 -9
  76. package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.d.ts +95 -0
  77. package/node_modules/@llblab/pi-actors/dist/lib/runs-session-exports.js +470 -0
  78. package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.d.ts +58 -0
  79. package/node_modules/@llblab/pi-actors/dist/lib/runs-snapshot.js +92 -0
  80. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.d.ts +2 -0
  81. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.js +44 -3
  82. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.d.ts +15 -1
  83. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.js +337 -13
  84. package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.d.ts +105 -0
  85. package/node_modules/@llblab/pi-actors/dist/lib/runs-supervision.js +501 -0
  86. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.d.ts +1 -0
  87. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.js +14 -3
  88. package/node_modules/@llblab/pi-actors/dist/lib/runtime.js +22 -3
  89. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.d.ts +37 -0
  90. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.js +59 -3
  91. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.d.ts +4 -1
  92. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.js +14 -8
  93. package/node_modules/@llblab/pi-actors/dist/lib/temp.d.ts +2 -4
  94. package/node_modules/@llblab/pi-actors/dist/lib/temp.js +4 -56
  95. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.d.ts +3 -0
  96. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.js +13 -0
  97. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.d.ts +1 -0
  98. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.js +110 -43
  99. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.d.ts +3 -0
  100. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.js +18 -6
  101. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.d.ts +4 -1
  102. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.js +126 -31
  103. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.d.ts +31 -3
  104. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.js +311 -47
  105. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.d.ts +3 -0
  106. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.js +29 -7
  107. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.d.ts +20 -0
  108. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.js +192 -43
  109. package/node_modules/@llblab/pi-actors/dist/scripts/async-runner.mjs +272 -194
  110. package/node_modules/@llblab/pi-actors/dist/scripts/conformance.mjs +14 -2
  111. package/node_modules/@llblab/pi-actors/dist/skills/actors/SKILL.md +46 -2
  112. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/diagnostics.md +40 -0
  113. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/runs.md +55 -1
  114. package/node_modules/@llblab/pi-actors/docs/README.md +9 -1
  115. package/node_modules/@llblab/pi-actors/docs/actor-inspector.md +84 -15
  116. package/node_modules/@llblab/pi-actors/docs/agent-experience.md +216 -0
  117. package/node_modules/@llblab/pi-actors/docs/async-runs.md +18 -2
  118. package/node_modules/@llblab/pi-actors/docs/composition-transport.md +103 -0
  119. package/node_modules/@llblab/pi-actors/docs/coordinator-delivery.md +204 -4
  120. package/node_modules/@llblab/pi-actors/docs/inspection.md +38 -2
  121. package/node_modules/@llblab/pi-actors/docs/output-projection-map.md +130 -0
  122. package/node_modules/@llblab/pi-actors/docs/releasing.md +19 -2
  123. package/node_modules/@llblab/pi-actors/docs/run-supervision.md +1622 -0
  124. package/node_modules/@llblab/pi-actors/docs/template-recipes.md +4 -0
  125. package/node_modules/@llblab/pi-actors/docs/windows-process-observation.md +248 -0
  126. package/node_modules/@llblab/pi-actors/index.ts +1 -1
  127. package/node_modules/@llblab/pi-actors/lib/async-runs.ts +164 -73
  128. package/node_modules/@llblab/pi-actors/lib/automatic-review-runtime.ts +4 -2
  129. package/node_modules/@llblab/pi-actors/lib/command-templates.ts +287 -138
  130. package/node_modules/@llblab/pi-actors/lib/execution-files.ts +118 -0
  131. package/node_modules/@llblab/pi-actors/lib/execution-output.ts +4 -4
  132. package/node_modules/@llblab/pi-actors/lib/execution-sessions.ts +57 -27
  133. package/node_modules/@llblab/pi-actors/lib/execution.ts +8 -0
  134. package/node_modules/@llblab/pi-actors/lib/extension-runtime.ts +102 -12
  135. package/node_modules/@llblab/pi-actors/lib/file-state.ts +16 -2
  136. package/node_modules/@llblab/pi-actors/lib/inspector-command.ts +2 -2
  137. package/node_modules/@llblab/pi-actors/lib/inspector-overlay.ts +524 -261
  138. package/node_modules/@llblab/pi-actors/lib/inspector.ts +101 -130
  139. package/node_modules/@llblab/pi-actors/lib/limits.ts +1 -0
  140. package/node_modules/@llblab/pi-actors/lib/observability.ts +235 -116
  141. package/node_modules/@llblab/pi-actors/lib/pi.ts +59 -11
  142. package/node_modules/@llblab/pi-actors/lib/recipe-projection.ts +232 -0
  143. package/node_modules/@llblab/pi-actors/lib/recipes-context.ts +27 -6
  144. package/node_modules/@llblab/pi-actors/lib/registry.ts +266 -36
  145. package/node_modules/@llblab/pi-actors/lib/run-delivery.ts +1737 -49
  146. package/node_modules/@llblab/pi-actors/lib/run-supervision.ts +411 -0
  147. package/node_modules/@llblab/pi-actors/lib/run-ui-runtime.ts +237 -73
  148. package/node_modules/@llblab/pi-actors/lib/runs-artifacts.ts +73 -1
  149. package/node_modules/@llblab/pi-actors/lib/runs-context-exports.ts +1871 -0
  150. package/node_modules/@llblab/pi-actors/lib/runs-context-index.ts +372 -0
  151. package/node_modules/@llblab/pi-actors/lib/runs-control-delivery.ts +36 -18
  152. package/node_modules/@llblab/pi-actors/lib/runs-control.ts +297 -1
  153. package/node_modules/@llblab/pi-actors/lib/runs-controls.ts +3 -1
  154. package/node_modules/@llblab/pi-actors/lib/runs-descendant-launches.ts +338 -0
  155. package/node_modules/@llblab/pi-actors/lib/runs-execution-evidence.ts +302 -0
  156. package/node_modules/@llblab/pi-actors/lib/runs-index.ts +345 -17
  157. package/node_modules/@llblab/pi-actors/lib/runs-native-launches.ts +270 -0
  158. package/node_modules/@llblab/pi-actors/lib/runs-outcomes.ts +377 -0
  159. package/node_modules/@llblab/pi-actors/lib/runs-ownership.ts +37 -4
  160. package/node_modules/@llblab/pi-actors/lib/runs-process-windows-mi.ts +113 -0
  161. package/node_modules/@llblab/pi-actors/lib/runs-process.ts +210 -34
  162. package/node_modules/@llblab/pi-actors/lib/runs-results.ts +601 -0
  163. package/node_modules/@llblab/pi-actors/lib/runs-retention.ts +134 -10
  164. package/node_modules/@llblab/pi-actors/lib/runs-session-exports.ts +406 -0
  165. package/node_modules/@llblab/pi-actors/lib/runs-snapshot.ts +143 -0
  166. package/node_modules/@llblab/pi-actors/lib/runs-start.ts +44 -2
  167. package/node_modules/@llblab/pi-actors/lib/runs-status.ts +252 -10
  168. package/node_modules/@llblab/pi-actors/lib/runs-supervision.ts +394 -0
  169. package/node_modules/@llblab/pi-actors/lib/runs-trace.ts +14 -3
  170. package/node_modules/@llblab/pi-actors/lib/runtime.ts +22 -3
  171. package/node_modules/@llblab/pi-actors/lib/session-evidence.ts +76 -4
  172. package/node_modules/@llblab/pi-actors/lib/state-readers.ts +16 -7
  173. package/node_modules/@llblab/pi-actors/lib/temp.ts +3 -56
  174. package/node_modules/@llblab/pi-actors/lib/tools-access.ts +13 -0
  175. package/node_modules/@llblab/pi-actors/lib/tools-inspect.ts +110 -51
  176. package/node_modules/@llblab/pi-actors/lib/tools-local.ts +37 -24
  177. package/node_modules/@llblab/pi-actors/lib/tools-message.ts +120 -37
  178. package/node_modules/@llblab/pi-actors/lib/tools-response.ts +273 -50
  179. package/node_modules/@llblab/pi-actors/lib/tools-spawn.ts +31 -10
  180. package/node_modules/@llblab/pi-actors/lib/trace-projection.ts +165 -42
  181. package/node_modules/@llblab/pi-actors/package.json +10 -6
  182. package/node_modules/@llblab/pi-actors/scripts/async-runner.mjs +272 -194
  183. package/node_modules/@llblab/pi-actors/scripts/conformance.mjs +14 -2
  184. package/node_modules/@llblab/pi-actors/skills/actors/SKILL.md +46 -2
  185. package/node_modules/@llblab/pi-actors/skills/actors/references/diagnostics.md +40 -0
  186. package/node_modules/@llblab/pi-actors/skills/actors/references/runs.md +55 -1
  187. package/node_modules/yaml/LICENSE +13 -0
  188. package/node_modules/yaml/README.md +172 -0
  189. package/node_modules/yaml/bin.mjs +11 -0
  190. package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  191. package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  192. package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  193. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  194. package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  195. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  196. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  197. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  198. package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  199. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  200. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  201. package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  202. package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  203. package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  204. package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  205. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  206. package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  207. package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  208. package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  209. package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  210. package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  211. package/node_modules/yaml/browser/dist/errors.js +57 -0
  212. package/node_modules/yaml/browser/dist/index.js +17 -0
  213. package/node_modules/yaml/browser/dist/log.js +11 -0
  214. package/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  215. package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  216. package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  217. package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  218. package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  219. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  220. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  221. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  222. package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  223. package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  224. package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  225. package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  226. package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  227. package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  228. package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  229. package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  230. package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  231. package/node_modules/yaml/browser/dist/public-api.js +102 -0
  232. package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  233. package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  234. package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  235. package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  236. package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  237. package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  238. package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  239. package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  240. package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  241. package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  242. package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  243. package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  244. package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  245. package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  246. package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  247. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  248. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  249. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  250. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  251. package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  252. package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  253. package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  254. package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  255. package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  256. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  257. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  258. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  259. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  260. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  261. package/node_modules/yaml/browser/dist/util.js +11 -0
  262. package/node_modules/yaml/browser/dist/visit.js +233 -0
  263. package/node_modules/yaml/browser/index.js +5 -0
  264. package/node_modules/yaml/browser/package.json +3 -0
  265. package/node_modules/yaml/dist/cli.d.ts +8 -0
  266. package/node_modules/yaml/dist/cli.mjs +201 -0
  267. package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  268. package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  269. package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  270. package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  271. package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  272. package/node_modules/yaml/dist/compose/compose-node.js +112 -0
  273. package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  274. package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  275. package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  276. package/node_modules/yaml/dist/compose/composer.js +224 -0
  277. package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  278. package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  279. package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  280. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  281. package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  282. package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  283. package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  284. package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  285. package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  286. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  287. package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  288. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  289. package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  290. package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  291. package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  292. package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  293. package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  294. package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  295. package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  296. package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  297. package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  298. package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  299. package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  300. package/node_modules/yaml/dist/doc/Document.js +337 -0
  301. package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  302. package/node_modules/yaml/dist/doc/anchors.js +76 -0
  303. package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  304. package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  305. package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  306. package/node_modules/yaml/dist/doc/createNode.js +90 -0
  307. package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  308. package/node_modules/yaml/dist/doc/directives.js +178 -0
  309. package/node_modules/yaml/dist/errors.d.ts +21 -0
  310. package/node_modules/yaml/dist/errors.js +62 -0
  311. package/node_modules/yaml/dist/index.d.ts +25 -0
  312. package/node_modules/yaml/dist/index.js +50 -0
  313. package/node_modules/yaml/dist/log.d.ts +3 -0
  314. package/node_modules/yaml/dist/log.js +19 -0
  315. package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  316. package/node_modules/yaml/dist/nodes/Alias.js +118 -0
  317. package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  318. package/node_modules/yaml/dist/nodes/Collection.js +151 -0
  319. package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  320. package/node_modules/yaml/dist/nodes/Node.js +40 -0
  321. package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  322. package/node_modules/yaml/dist/nodes/Pair.js +39 -0
  323. package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  324. package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  325. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  326. package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  327. package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  328. package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  329. package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  330. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  331. package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  332. package/node_modules/yaml/dist/nodes/identity.js +53 -0
  333. package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  334. package/node_modules/yaml/dist/nodes/toJS.js +39 -0
  335. package/node_modules/yaml/dist/options.d.ts +350 -0
  336. package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  337. package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  338. package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  339. package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  340. package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  341. package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  342. package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  343. package/node_modules/yaml/dist/parse/cst.js +112 -0
  344. package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  345. package/node_modules/yaml/dist/parse/lexer.js +723 -0
  346. package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  347. package/node_modules/yaml/dist/parse/line-counter.js +41 -0
  348. package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  349. package/node_modules/yaml/dist/parse/parser.js +980 -0
  350. package/node_modules/yaml/dist/public-api.d.ts +44 -0
  351. package/node_modules/yaml/dist/public-api.js +107 -0
  352. package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  353. package/node_modules/yaml/dist/schema/Schema.js +39 -0
  354. package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  355. package/node_modules/yaml/dist/schema/common/map.js +19 -0
  356. package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  357. package/node_modules/yaml/dist/schema/common/null.js +17 -0
  358. package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  359. package/node_modules/yaml/dist/schema/common/seq.js +19 -0
  360. package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  361. package/node_modules/yaml/dist/schema/common/string.js +16 -0
  362. package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  363. package/node_modules/yaml/dist/schema/core/bool.js +21 -0
  364. package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  365. package/node_modules/yaml/dist/schema/core/float.js +47 -0
  366. package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  367. package/node_modules/yaml/dist/schema/core/int.js +42 -0
  368. package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  369. package/node_modules/yaml/dist/schema/core/schema.js +25 -0
  370. package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  371. package/node_modules/yaml/dist/schema/json/schema.js +64 -0
  372. package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  373. package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  374. package/node_modules/yaml/dist/schema/tags.js +99 -0
  375. package/node_modules/yaml/dist/schema/types.d.ts +92 -0
  376. package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  377. package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  378. package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  379. package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  380. package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  381. package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  382. package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  383. package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  384. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  385. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  386. package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  387. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  388. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  389. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  390. package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  391. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  392. package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  393. package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  394. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  395. package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  396. package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  397. package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  398. package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  399. package/node_modules/yaml/dist/stringify/stringify.js +132 -0
  400. package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  401. package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  402. package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  403. package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  404. package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  405. package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  406. package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  407. package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  408. package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  409. package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  410. package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  411. package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  412. package/node_modules/yaml/dist/test-events.d.ts +4 -0
  413. package/node_modules/yaml/dist/test-events.js +134 -0
  414. package/node_modules/yaml/dist/util.d.ts +16 -0
  415. package/node_modules/yaml/dist/util.js +28 -0
  416. package/node_modules/yaml/dist/visit.d.ts +102 -0
  417. package/node_modules/yaml/dist/visit.js +236 -0
  418. package/node_modules/yaml/package.json +97 -0
  419. package/node_modules/yaml/util.js +2 -0
  420. package/package.json +2 -2
  421. package/node_modules/@llblab/pi-actors/banner.jpg +0 -0
  422. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.d.ts +0 -16
  423. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.js +0 -57
  424. package/node_modules/@llblab/pi-actors/lib/inspector-actions.ts +0 -79
@@ -1,10 +1,14 @@
1
1
  /**
2
2
  * Async run state index.
3
- * Owns: recursive run-state discovery, index rebuild/read, and status filtering.
3
+ * Owns: directory discovery, locked catalog registration/rebuild, same-session location navigation, and legacy inventory.
4
+ * Excludes: launch wiring, model delivery, work/native authority, and retained-generation storage.
4
5
  */
5
- import { existsSync, mkdirSync, readdirSync } from "node:fs";
6
+ import { closeSync, constants, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readdirSync, lstatSync } from "node:fs";
6
7
  import { join, resolve } from "node:path";
7
- import { writeJsonAtomic } from "./file-state.js";
8
+ import { acquireFileMutationLock, writeTextAtomic } from "./file-state.js";
9
+ import { observeRunContextExportLocation, readRunContextIdentity, runContextExportPath, RUN_CONTEXT_SOURCE_METADATA_MAX_BYTES } from "./runs-context-index.js";
10
+ import { RUN_DELIVERY_MODEL_MAX_BYTES } from "./limits.js";
11
+ import { readJsonFileResilient } from "./state-readers.js";
8
12
  function matchesStatusFilter(status, filter) {
9
13
  if (!filter || filter === "all")
10
14
  return true;
@@ -81,23 +85,352 @@ function indexEntryFromStatus(status) {
81
85
  : new Date(0).toISOString(),
82
86
  };
83
87
  }
84
- export function rebuildRunStateIndex(stateRoot, getRunStatus) {
88
+ function prepareDirectoryRegistration(stateDir, status) {
89
+ if (!status || typeof status !== "object" || typeof status.run !== "string" || !status.run ||
90
+ typeof status.run_instance_id !== "string" || !status.run_instance_id ||
91
+ typeof status.state_dir !== "string" || typeof status.status !== "string" || !status.status ||
92
+ (Object.hasOwn(status, "ownerId") && (typeof status.ownerId !== "string" || !status.ownerId))) {
93
+ throw new Error("Run state directory registration identity is invalid.");
94
+ }
95
+ const reading = readRunContextIdentity(resolve(stateDir), { run: status.run, run_instance_id: status.run_instance_id,
96
+ ...(Object.hasOwn(status, "ownerId") ? { ownerId: status.ownerId } : {}) });
97
+ if (reading.state !== "available" || status.state_dir !== reading.local_path) {
98
+ throw new Error("Run state directory registration identity is unavailable.");
99
+ }
100
+ const progress = status.progress && typeof status.progress === "object" ? status.progress : undefined;
101
+ const entry = { run: reading.identity.run, run_instance_id: reading.identity.run_instance_id,
102
+ state_dir: reading.local_path, status: status.status,
103
+ ...(reading.identity.ownerId === undefined ? {} : { ownerId: reading.identity.ownerId }),
104
+ ...(typeof status.recipe === "string" ? { recipe: status.recipe } : {}),
105
+ ...(typeof status.tool === "string" ? { tool: status.tool } : {}),
106
+ ...(typeof progress?.updatedAt === "string" ? { updated_at: progress.updatedAt }
107
+ : typeof status.createdAt === "string" ? { updated_at: status.createdAt } : {}) };
108
+ return { entry, unchanged: reading.unchanged };
109
+ }
110
+ function readCatalog(path) {
111
+ let fd;
112
+ try {
113
+ fd = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0));
114
+ }
115
+ catch (error) {
116
+ if (error.code === "ENOENT")
117
+ return undefined;
118
+ throw error;
119
+ }
120
+ let bytes;
121
+ let failed = false;
122
+ let failure;
123
+ try {
124
+ if (!fstatSync(fd).isFile())
125
+ throw new Error("Run state catalog requires a regular file.");
126
+ bytes = readFileSync(fd);
127
+ }
128
+ catch (error) {
129
+ failed = true;
130
+ failure = error;
131
+ throw error;
132
+ }
133
+ finally {
134
+ try {
135
+ closeSync(fd);
136
+ }
137
+ catch (error) {
138
+ throw failed ? new AggregateError([failure, error], "Run state catalog read and close failed.") : error;
139
+ }
140
+ }
141
+ const value = JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes));
142
+ if (!value || typeof value !== "object" || Array.isArray(value) || !Array.isArray(value.entries)) {
143
+ throw new Error("Run state catalog is invalid.");
144
+ }
145
+ const catalog = value;
146
+ for (const row of catalog.entries) {
147
+ if (!row || typeof row !== "object" || Array.isArray(row) || typeof row.run !== "string" ||
148
+ typeof row.state_dir !== "string" || typeof row.status !== "string" ||
149
+ (Object.hasOwn(row, "ownerId") && typeof row.ownerId !== "string") ||
150
+ (Object.hasOwn(row, "run_instance_id") && typeof row.run_instance_id !== "string")) {
151
+ throw new Error("Run state catalog entry is invalid.");
152
+ }
153
+ }
154
+ return catalog;
155
+ }
156
+ function publishDirectoryRegistrations(stateRoot, registrations, explicit) {
85
157
  mkdirSync(stateRoot, { recursive: true });
86
- const entries = listRunStateDirs(stateRoot)
87
- .flatMap((stateDir) => {
158
+ const path = runIndexPath(stateRoot);
159
+ const release = acquireFileMutationLock(path);
160
+ let failed = false;
161
+ let failure;
162
+ try {
163
+ const catalog = readCatalog(path) ?? { entries: [] };
164
+ let entries = [...catalog.entries];
165
+ const assertCurrent = () => {
166
+ if (registrations.some(registration => !registration.unchanged())) {
167
+ throw new Error("Run state directory registration observation changed.");
168
+ }
169
+ };
170
+ assertCurrent();
171
+ for (const { entry } of registrations) {
172
+ const position = entries.findIndex(row => row.state_dir === entry.state_dir);
173
+ const previous = entries[position];
174
+ const sameGeneration = previous && previous.run === entry.run && previous.ownerId === entry.ownerId &&
175
+ previous.run_instance_id === entry.run_instance_id;
176
+ const merged = sameGeneration ? { ...previous, ...entry } : { ...entry };
177
+ for (const optional of ["ownerId", "recipe", "tool", "updated_at"]) {
178
+ if (!Object.hasOwn(entry, optional))
179
+ delete merged[optional];
180
+ }
181
+ const remaining = entries.filter(row => row.state_dir !== entry.state_dir);
182
+ if (!explicit && sameGeneration)
183
+ remaining.splice(position, 0, merged);
184
+ else
185
+ remaining.unshift(merged);
186
+ entries = remaining;
187
+ }
188
+ writeTextAtomic(path, `${JSON.stringify({ ...catalog, entries, rebuilt_at: new Date().toISOString() }, null, 2)}\n`, { onBeforeReplace: assertCurrent });
189
+ return entries;
190
+ }
191
+ catch (error) {
192
+ failed = true;
193
+ failure = error;
194
+ throw error;
195
+ }
196
+ finally {
197
+ try {
198
+ release();
199
+ }
200
+ catch (error) {
201
+ throw failed ? new AggregateError([failure, error], "Run state catalog publication and release failed.") : error;
202
+ }
203
+ }
204
+ }
205
+ /** Kernel metadata registration only; never a producer, work or visibility capability. */
206
+ export function registerRunStateDirectory(stateRoot, stateDir, status) {
207
+ publishDirectoryRegistrations(stateRoot, [prepareDirectoryRegistration(stateDir, status)], true);
208
+ }
209
+ export function rebuildRunStateIndex(stateRoot, getRunStatus) {
210
+ const registrations = listRunStateDirs(stateRoot).flatMap(stateDir => {
211
+ try {
212
+ return [prepareDirectoryRegistration(stateDir, getRunStatus(stateDir))];
213
+ }
214
+ catch {
215
+ return [];
216
+ }
217
+ });
218
+ return publishDirectoryRegistrations(stateRoot, registrations, false);
219
+ }
220
+ function observeRunInventory(stateDirs, getRunStatus) {
221
+ return stateDirs.flatMap(stateDir => {
88
222
  try {
89
223
  return [indexEntryFromStatus(getRunStatus(stateDir))];
90
224
  }
91
225
  catch {
92
226
  return [];
93
227
  }
94
- })
95
- .sort((a, b) => (b.updated_at ?? "").localeCompare(a.updated_at ?? ""));
96
- writeJsonAtomic(runIndexPath(stateRoot), {
97
- entries,
98
- rebuilt_at: new Date().toISOString(),
99
228
  });
100
- return entries;
229
+ }
230
+ const NAVIGATION_FILES = [
231
+ ["context_index", "context-index.json", "json"], ["result", "result.json", "json"], ["metadata", "run.json", "json"],
232
+ ["execution", "execution.json", "json"], ["trace", "trace.jsonl", "jsonl"], ["control", "controls.jsonl", "jsonl"],
233
+ ["stdout", "stdout.log", "text"], ["stderr", "stderr.log", "text"],
234
+ ];
235
+ function navigationFiles(directory, expected) {
236
+ const files = NAVIGATION_FILES.map(([role, leaf, format_hint]) => {
237
+ const path = join(directory, leaf);
238
+ try {
239
+ const observed = lstatSync(path);
240
+ if (!observed.isFile() || !Number.isSafeInteger(observed.size) || observed.size < 0) {
241
+ return Object.freeze({ role, format_hint, state: "unavailable", path: null, mutable: true });
242
+ }
243
+ return Object.freeze({ role, format_hint, state: "present", path, bytes_total: observed.size, mutable: true });
244
+ }
245
+ catch (error) {
246
+ return Object.freeze({ role, format_hint, state: error.code === "ENOENT" ? "missing" : "unavailable",
247
+ path: null, mutable: true });
248
+ }
249
+ });
250
+ const sessions = observeRunContextExportLocation(directory, expected, "sessions");
251
+ files.splice(4, 0, Object.freeze({ role: "published_sessions", format_hint: "json", mutable: true,
252
+ state: sessions.state === "available" ? "present" : sessions.reason === "export_missing" ? "missing" : "unavailable",
253
+ path: sessions.state === "available" ? sessions.local_path : null,
254
+ ...(sessions.state === "available" ? { bytes_total: sessions.bytes_total } : {}) }));
255
+ return { files: Object.freeze(files), unchanged: sessions.state === "available" ? sessions.unchanged : () => true };
256
+ }
257
+ /** Pure data decoder for frozen location packets; schema validity never grants read/publication/work authority. */
258
+ export function decodeRunDirectoryNavigation(value) {
259
+ const invalid = () => { throw new Error("Run file navigation data is invalid"); };
260
+ const record = (value, fields) => {
261
+ if (!value || typeof value !== "object" || Array.isArray(value))
262
+ return invalid();
263
+ const descriptors = Object.getOwnPropertyDescriptors(value), result = {};
264
+ for (const key of Object.keys(descriptors)) {
265
+ if (!fields.includes(key) || !Object.hasOwn(descriptors[key], "value"))
266
+ return invalid();
267
+ result[key] = descriptors[key].value;
268
+ }
269
+ return result;
270
+ };
271
+ const string = (value) => typeof value === "string" && value.length > 0 && value.length <= 4096 && Buffer.from(value).toString("utf8") === value;
272
+ const base = record(value, ["state", "reason", "run", "run_instance_id", "directory", "content_scope", "file_inventory_scope", "files"]);
273
+ if (base.state === "unavailable") {
274
+ const reasons = ["session_unavailable", "session_mismatch", "session_changed", "identity_unavailable", "identity_mismatch", "observation_changed", "navigation_unavailable", "response_too_large"];
275
+ if (Object.keys(base).length !== 2 || !reasons.includes(base.reason))
276
+ return invalid();
277
+ return Object.freeze({ state: "unavailable", reason: base.reason });
278
+ }
279
+ if (base.state !== "available" || Object.keys(base).length !== 7 || !string(base.run) || !string(base.run_instance_id) || !string(base.directory) ||
280
+ base.directory !== resolve(base.directory) || base.content_scope !== "file_locations_only" ||
281
+ base.file_inventory_scope !== "canonical_starting_locations" || !Array.isArray(base.files))
282
+ return invalid();
283
+ const slots = [...NAVIGATION_FILES.slice(0, 4),
284
+ ["published_sessions", runContextExportPath("sessions"), "json"], ...NAVIGATION_FILES.slice(4)];
285
+ if (base.files.length !== slots.length || Object.keys(base.files).length !== slots.length)
286
+ return invalid();
287
+ const directory = base.directory, sourceFiles = base.files;
288
+ const files = slots.map(([role, leaf, format], index) => {
289
+ const descriptor = Object.getOwnPropertyDescriptor(sourceFiles, String(index));
290
+ if (!descriptor || !Object.hasOwn(descriptor, "value"))
291
+ return invalid();
292
+ const file = record(descriptor.value, ["role", "format_hint", "state", "path", "bytes_total", "mutable"]);
293
+ if (file.role !== role || file.format_hint !== format || file.mutable !== true)
294
+ return invalid();
295
+ if (file.state === "present") {
296
+ if (file.path !== join(directory, leaf) || typeof file.bytes_total !== "number" || !Number.isSafeInteger(file.bytes_total) || file.bytes_total < 0)
297
+ return invalid();
298
+ return Object.freeze({ role, format_hint: format, state: "present", path: file.path, bytes_total: file.bytes_total, mutable: true });
299
+ }
300
+ if ((file.state !== "missing" && file.state !== "unavailable") || file.path !== null || file.bytes_total !== undefined)
301
+ return invalid();
302
+ return Object.freeze({ role, format_hint: format, state: file.state, path: null, mutable: true });
303
+ });
304
+ const answer = Object.freeze({ state: "available", content_scope: "file_locations_only",
305
+ file_inventory_scope: "canonical_starting_locations", run: base.run, run_instance_id: base.run_instance_id,
306
+ directory, files: Object.freeze(files) });
307
+ return Buffer.byteLength(JSON.stringify(answer), "utf8") <= RUN_DELIVERY_MODEL_MAX_BYTES ? answer : invalid();
308
+ }
309
+ /** One exact current-session Run's physical starting locations; no catalog/body reads or authority recovery. */
310
+ export function readRunDirectoryNavigation(stateDir, expected, sessionId) {
311
+ const unavailable = (reason) => Object.freeze({ state: "unavailable", reason });
312
+ if (typeof sessionId !== "string" || !sessionId)
313
+ return unavailable("session_unavailable");
314
+ const owner = expected && typeof expected === "object" ? Object.getOwnPropertyDescriptor(expected, "ownerId") : undefined;
315
+ if (!owner || !Object.hasOwn(owner, "value") || owner.value !== sessionId)
316
+ return unavailable("session_mismatch");
317
+ const identity = readRunContextIdentity(stateDir, expected);
318
+ if (identity.state !== "available")
319
+ return unavailable(identity.reason);
320
+ const observed = navigationFiles(identity.local_path, identity.identity);
321
+ const value = Object.freeze({ state: "available", content_scope: "file_locations_only",
322
+ file_inventory_scope: "canonical_starting_locations", run: identity.identity.run,
323
+ run_instance_id: identity.identity.run_instance_id, directory: identity.local_path, files: observed.files });
324
+ if (!identity.unchanged() || !observed.unchanged())
325
+ return unavailable("observation_changed");
326
+ return Buffer.byteLength(JSON.stringify(value), "utf8") <= RUN_DELIVERY_MODEL_MAX_BYTES ? value : unavailable("response_too_large");
327
+ }
328
+ /** Current Kernel session selection only; no body reads, scans, producer key or old manager retention. */
329
+ export function readRunSessionNavigation(stateRoot, sessionId, priority) {
330
+ const unavailable = (reason) => Object.freeze({ state: "unavailable", reason });
331
+ if (typeof sessionId !== "string" || !sessionId)
332
+ return unavailable("session_unavailable");
333
+ let catalog;
334
+ try {
335
+ catalog = readCatalog(runIndexPath(stateRoot));
336
+ }
337
+ catch {
338
+ return unavailable("catalog_unavailable");
339
+ }
340
+ if (!catalog)
341
+ return unavailable("catalog_unavailable");
342
+ const selected = catalog.entries.filter(row => row.ownerId === sessionId);
343
+ if (new Set(selected.map(row => row.state_dir)).size !== selected.length)
344
+ return unavailable("catalog_unavailable");
345
+ const key = (row) => JSON.stringify([row.run, row.run_instance_id, row.state_dir]);
346
+ const nodes = selected.map(row => {
347
+ const invalid = (reason) => Object.freeze({ run: row.run,
348
+ run_instance_id: typeof row.run_instance_id === "string" ? row.run_instance_id : null,
349
+ state: "unavailable", directory: null, depth: 0, files: Object.freeze([]), reason });
350
+ if (typeof row.run_instance_id !== "string" || !row.run_instance_id)
351
+ return { key: key(row), item: invalid("generation_unavailable"), parent: undefined, unchanged: () => true };
352
+ const identity = readRunContextIdentity(row.state_dir, { run: row.run, run_instance_id: row.run_instance_id, ownerId: sessionId });
353
+ if (identity.state !== "available")
354
+ return { key: key(row), item: invalid(identity.reason), parent: undefined, unchanged: () => true };
355
+ const read = readJsonFileResilient(join(identity.local_path, "run.json"), undefined, { maxBytes: RUN_CONTEXT_SOURCE_METADATA_MAX_BYTES, strictUtf8: true });
356
+ if (read.diagnostics.length || !read.value || !identity.unchanged()) {
357
+ return { key: key(row), item: invalid("observation_changed"), parent: undefined, unchanged: () => true };
358
+ }
359
+ const parent = read.value.delivery_parent;
360
+ const p = parent && typeof parent === "object" && !Array.isArray(parent) ? parent : undefined;
361
+ const parentKey = p && typeof p.run === "string" && typeof p.run_instance_id === "string" && typeof p.state_dir === "string"
362
+ ? key({ run: p.run, run_instance_id: p.run_instance_id, state_dir: p.state_dir }) : undefined;
363
+ const files = navigationFiles(identity.local_path, identity.identity);
364
+ const item = Object.freeze({ run: row.run, run_instance_id: row.run_instance_id,
365
+ state: "available", directory: identity.local_path, depth: 0, files: files.files });
366
+ return { key: key(row), item, parent: parentKey, unchanged: () => identity.unchanged() && files.unchanged() };
367
+ });
368
+ const byKey = new Map(nodes.map(node => [node.key, node]));
369
+ const children = new Map();
370
+ const roots = [];
371
+ for (const node of nodes) {
372
+ if (node.parent && byKey.has(node.parent)) {
373
+ const siblings = children.get(node.parent) ?? [];
374
+ siblings.push(node);
375
+ children.set(node.parent, siblings);
376
+ }
377
+ else
378
+ roots.push(node);
379
+ }
380
+ const failedSubtrees = new Set();
381
+ for (const failure of priority?.failed ?? []) {
382
+ if (failure.ownerId !== sessionId)
383
+ continue;
384
+ const observedKey = key(failure), node = byKey.get(observedKey);
385
+ if (node?.item.state === "available")
386
+ failedSubtrees.add(observedKey);
387
+ }
388
+ const pending = [...failedSubtrees];
389
+ while (pending.length) {
390
+ const parent = byKey.get(pending.pop())?.parent;
391
+ if (parent && byKey.get(parent)?.item.state === "available" && !failedSubtrees.has(parent)) {
392
+ failedSubtrees.add(parent);
393
+ pending.push(parent);
394
+ }
395
+ }
396
+ // Stable partition preserves catalog recency among peers; a failed descendant never precedes its own ancestors.
397
+ const preferFailed = (peers) => [
398
+ ...peers.filter(node => failedSubtrees.has(node.key)), ...peers.filter(node => !failedSubtrees.has(node.key)),
399
+ ];
400
+ const ordered = [];
401
+ const seen = new Set();
402
+ const orderedRoots = priority?.root_order === "failed_subtrees_first" ? preferFailed(roots) : roots;
403
+ const stack = orderedRoots.slice().reverse().map(node => ({ node, depth: 0 }));
404
+ while (stack.length) {
405
+ const { node, depth } = stack.pop();
406
+ if (seen.has(node.key))
407
+ continue;
408
+ seen.add(node.key);
409
+ ordered.push(Object.freeze({ ...node.item, depth }));
410
+ for (const child of preferFailed(children.get(node.key) ?? []).reverse())
411
+ stack.push({ node: child, depth: depth + 1 });
412
+ }
413
+ for (const node of nodes)
414
+ if (!seen.has(node.key))
415
+ ordered.push(Object.freeze({ ...node.item,
416
+ state: "unavailable", reason: "lineage_cycle", directory: null, files: Object.freeze([]) }));
417
+ const items = [];
418
+ const result = () => Object.freeze({ state: "available", session_id: sessionId,
419
+ content_scope: "file_locations_only", lineage_scope: "direct_session_owned_rows",
420
+ file_inventory_scope: "canonical_starting_locations",
421
+ ...(priority ? { priority: Object.freeze({ root_order: priority.root_order, basis: "observed_failed_rows" }) } : {}),
422
+ items: Object.freeze(items.slice()), shown: items.length, omitted: ordered.length - items.length, total: ordered.length });
423
+ if (Buffer.byteLength(JSON.stringify(result())) > RUN_DELIVERY_MODEL_MAX_BYTES)
424
+ return unavailable("response_too_large");
425
+ for (const item of ordered) {
426
+ items.push(item);
427
+ if (Buffer.byteLength(JSON.stringify(result())) > RUN_DELIVERY_MODEL_MAX_BYTES) {
428
+ items.pop();
429
+ break;
430
+ }
431
+ }
432
+ const answer = result();
433
+ return nodes.some(node => !node.unchanged()) ? unavailable("catalog_unavailable") : answer;
101
434
  }
102
435
  export function readRunStateIndex(stateRoot, readJson) {
103
436
  const index = readJson(runIndexPath(stateRoot));
@@ -135,7 +468,10 @@ export function listRuns(stateRoot, getRunStatus, readJson, statusFilter) {
135
468
  if (!existsSync(stateRoot))
136
469
  return [];
137
470
  const indexed = readRunStateIndex(stateRoot, readJson);
138
- const entries = indexed ?? rebuildRunStateIndex(stateRoot, getRunStatus);
471
+ // The catalog locates directories; registration-time status cannot decide current inventory or filters.
472
+ const entries = observeRunInventory(indexed ? indexed.map(entry => entry.state_dir) : listRunStateDirs(stateRoot), getRunStatus);
473
+ if (!indexed)
474
+ entries.sort((a, b) => (b.updated_at ?? "").localeCompare(a.updated_at ?? ""));
139
475
  return entries
140
476
  .filter((entry) => matchesStatusFilter(entry.status, statusFilter))
141
477
  .map(compactIndexEntry);
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Native launch evidence persistence.
3
+ * Owns: generation-bound intent/birth/settlement records and unresolved-scope mutation fences.
4
+ * Excludes: runtime-local admission/acquisition, complete membership, termination, and restart execution.
5
+ */
6
+ import { type RunProcessIdentity } from "./runs-process.ts";
7
+ export declare const RUN_NATIVE_LAUNCH_FILE = "native-launches.json";
8
+ declare const SCHEMA = "run-native-launches-v1";
9
+ export interface RunNativeLaunchOwner {
10
+ readonly run: string;
11
+ readonly runInstanceId: string;
12
+ readonly ownerId?: string;
13
+ readonly pid: number;
14
+ readonly processIdentityDigest?: string;
15
+ }
16
+ export interface RunNativeLaunchRequest {
17
+ readonly commandId: string;
18
+ readonly attempt: number;
19
+ }
20
+ export interface RunNativeLaunchBirth {
21
+ readonly pid: number;
22
+ readonly observed_at: string;
23
+ readonly process_identity: Readonly<RunProcessIdentity>;
24
+ }
25
+ export interface RunNativeLaunchCloseSettlement {
26
+ readonly basis?: never;
27
+ readonly observed_at: string;
28
+ readonly native_exit_code: number | null;
29
+ readonly native_signal: NodeJS.Signals | null;
30
+ }
31
+ export interface RunNativeLaunchAbsenceSettlement {
32
+ readonly basis: "verified_absence";
33
+ readonly observed_at: string;
34
+ }
35
+ export type RunNativeLaunchSettlement = RunNativeLaunchCloseSettlement | RunNativeLaunchAbsenceSettlement;
36
+ export interface RunNativeLaunchIntent {
37
+ readonly intent_id: string;
38
+ readonly command_id: string;
39
+ readonly attempt: number;
40
+ readonly admitted_at: string;
41
+ readonly birth?: RunNativeLaunchBirth;
42
+ readonly settlement?: RunNativeLaunchSettlement;
43
+ }
44
+ export interface RunNativeLaunchLedger {
45
+ readonly schema: typeof SCHEMA;
46
+ readonly run: string;
47
+ readonly run_instance_id: string;
48
+ readonly ownerId?: string;
49
+ readonly runner_pid: number;
50
+ readonly runner_identity_digest: string | null;
51
+ readonly intents: readonly RunNativeLaunchIntent[];
52
+ }
53
+ export type RunNativeLaunchReading = {
54
+ state: "absent" | "invalid";
55
+ } | {
56
+ state: "available";
57
+ ledger: RunNativeLaunchLedger;
58
+ };
59
+ /** Even every recorded member's settlement is not complete-scope closure or mutation authority. */
60
+ export declare function assertNoRetainedNativeLaunchScope(stateDir: string): void;
61
+ /** Absence or an available admission list never proves no child was born or complete scope membership. */
62
+ export declare function readRunNativeLaunchLedger(stateDir: string, owner: RunNativeLaunchOwner): RunNativeLaunchReading;
63
+ /** Storage only: caller must hold lifecycle admission and supply a kernel-acquired birth, never replayed runtime authority. */
64
+ export declare function recordRunNativeLaunchBirthUnderLock(stateDir: string, owner: RunNativeLaunchOwner, intent: Readonly<RunNativeLaunchIntent>, birth: RunNativeLaunchBirth): Readonly<RunNativeLaunchBirth>;
65
+ /** Storage only: exact retained birth plus admitted native-close or verified-absence evidence, never work authority. */
66
+ export declare function recordRunNativeLaunchSettlementUnderLock<T extends RunNativeLaunchSettlement>(stateDir: string, owner: RunNativeLaunchOwner, update: {
67
+ intent: Readonly<RunNativeLaunchIntent>;
68
+ birth: RunNativeLaunchBirth;
69
+ settlement: T;
70
+ }): Readonly<T>;
71
+ /** Kernel storage only: caller must hold lifecycle/work admission. No reset or rollback of existing intents. */
72
+ export declare function recordRunNativeLaunchIntentUnderLock(stateDir: string, owner: RunNativeLaunchOwner, request: RunNativeLaunchRequest): Readonly<RunNativeLaunchIntent>;
73
+ export {};