@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
@@ -4,6 +4,14 @@
4
4
  * Owns read-only normalization of session JSONL into inspector-ready turns.
5
5
  */
6
6
  import { type StateReadDiagnostic } from "./state-readers.ts";
7
+ interface SessionEntry {
8
+ id?: unknown;
9
+ message?: unknown;
10
+ parentId?: unknown;
11
+ timestamp?: unknown;
12
+ type?: unknown;
13
+ [key: string]: unknown;
14
+ }
7
15
  export interface SessionEvidenceToolCall {
8
16
  arguments?: unknown;
9
17
  id: string;
@@ -11,7 +19,16 @@ export interface SessionEvidenceToolCall {
11
19
  result?: unknown;
12
20
  resultError?: boolean;
13
21
  }
22
+ export declare const SESSION_TURN_IDENTITY: unique symbol;
23
+ interface SessionTurnIdentity {
24
+ basis: "entry" | "record";
25
+ entryId?: string;
26
+ sessionId?: string;
27
+ role: "assistant" | "user";
28
+ ordinal?: number;
29
+ }
14
30
  export interface SessionEvidenceTurn {
31
+ [SESSION_TURN_IDENTITY]?: Readonly<SessionTurnIdentity>;
15
32
  assistantEntryId?: string;
16
33
  assistantText?: string;
17
34
  error?: string;
@@ -27,7 +44,24 @@ export interface SessionEvidenceTurn {
27
44
  userEntryId?: string;
28
45
  userText?: string;
29
46
  }
47
+ export declare const SESSION_EVIDENCE_CHRONOLOGY: unique symbol;
48
+ export interface SessionChronologyEntry {
49
+ ordinal: number;
50
+ timestamp: string;
51
+ identity: Readonly<SessionTurnIdentity>;
52
+ }
53
+ export type SessionChronologyReason = "source_unavailable" | "identity_unavailable" | "timestamp_unavailable" | "metadata_too_large";
54
+ export type SessionChronology = Readonly<{
55
+ basis: "recorded_branch_metadata";
56
+ entries: readonly Readonly<SessionChronologyEntry>[];
57
+ } & ({
58
+ state: "available";
59
+ } | {
60
+ state: "unavailable";
61
+ reason: SessionChronologyReason;
62
+ })>;
30
63
  export interface SessionEvidence {
64
+ [SESSION_EVIDENCE_CHRONOLOGY]?: SessionChronology;
31
65
  activeLeafId?: string;
32
66
  diagnostics: StateReadDiagnostic[];
33
67
  path: string;
@@ -59,4 +93,7 @@ export interface ActiveSessionEntryEvidenceInput {
59
93
  /** Walk only the active parent chain under exact entry and byte ceilings. */
60
94
  export declare function inspectBoundedActiveSessionEntries(input: ActiveSessionEntryEvidenceInput): ActiveSessionEntryEvidence;
61
95
  export declare function redactSessionEvidenceValue(value: unknown, maxTextChars?: number, seen?: WeakSet<object>): unknown;
96
+ /** Physical last-leaf ancestry, not current model context or a claim about a live SessionManager leaf. */
97
+ export declare function selectLastRecordedSessionBranch(entries: SessionEntry[], path: string, diagnostics: StateReadDiagnostic[]): SessionEntry[];
62
98
  export declare function readSessionEvidence(path: string, options?: SessionEvidenceReadOptions): SessionEvidence;
99
+ export {};
@@ -5,6 +5,9 @@
5
5
  */
6
6
  import * as Limits from "./limits.js";
7
7
  import { readJsonlFileResilient, } from "./state-readers.js";
8
+ // Non-JSON provenance data. The enumerable Symbol survives turn copies; it grants no source/lifecycle authority.
9
+ export const SESSION_TURN_IDENTITY = Symbol("session-turn-identity");
10
+ export const SESSION_EVIDENCE_CHRONOLOGY = Symbol("session-evidence-chronology");
8
11
  const SENSITIVE_KEY = /(?:^|[_-])(?:api[-_]?key|authorization|cookie|credential|password|private[-_]?key|secret|secret[-_]?access[-_]?key|token)$|^(?:access|refresh|auth|api)Token$|^(?:clientSecret|privateKey|secretAccessKey)$/i;
9
12
  function boundedJsonStringBytes(value) {
10
13
  let bytes = Buffer.byteLength(value, "utf8") + 2;
@@ -206,7 +209,8 @@ function contentText(message, type, maxChars) {
206
209
  .join("\n");
207
210
  return boundedText(text, maxChars);
208
211
  }
209
- function activeBranch(entries, path, diagnostics) {
212
+ /** Physical last-leaf ancestry, not current model context or a claim about a live SessionManager leaf. */
213
+ export function selectLastRecordedSessionBranch(entries, path, diagnostics) {
210
214
  const treeEntries = entries.filter((entry) => entry.type !== "session" && typeof entry.id === "string");
211
215
  const leaf = treeEntries.at(-1);
212
216
  if (!leaf || typeof leaf.id !== "string")
@@ -247,6 +251,31 @@ function toolCalls(message, maxTextChars, maxToolCalls) {
247
251
  name: String(block.name),
248
252
  }));
249
253
  }
254
+ function sessionChronology(turns, sourceAvailable) {
255
+ const basis = "recorded_branch_metadata";
256
+ const unavailable = (reason) => Object.freeze({
257
+ state: "unavailable", basis, reason, entries: Object.freeze([]),
258
+ });
259
+ if (!sourceAvailable)
260
+ return unavailable("source_unavailable");
261
+ const entries = [];
262
+ let bytes = Buffer.byteLength(JSON.stringify({ state: "available", basis, entries: [] }));
263
+ for (const turn of turns) {
264
+ const identity = turn[SESSION_TURN_IDENTITY];
265
+ if (identity?.basis !== "entry")
266
+ return unavailable("identity_unavailable");
267
+ const timestamp = turn.timestamp;
268
+ if (typeof timestamp !== "string" || timestamp.length !== 24 || !Number.isFinite(Date.parse(timestamp)) ||
269
+ new Date(timestamp).toISOString() !== timestamp || redactSessionEvidenceValue(timestamp) !== timestamp)
270
+ return unavailable("timestamp_unavailable");
271
+ const entry = Object.freeze({ ordinal: turn.index, timestamp, identity });
272
+ bytes += Buffer.byteLength(JSON.stringify(entry)) + Number(entries.length > 0);
273
+ if (bytes > Limits.SESSION_EVIDENCE_MAX_BYTES)
274
+ return unavailable("metadata_too_large");
275
+ entries.push(entry);
276
+ }
277
+ return Object.freeze({ state: "available", basis, entries: Object.freeze(entries) });
278
+ }
250
279
  export function readSessionEvidence(path, options = {}) {
251
280
  const maxBytes = Math.max(1, options.maxBytes ?? Limits.SESSION_EVIDENCE_MAX_BYTES);
252
281
  const maxTextChars = Math.max(1, options.maxTextChars ?? Limits.SESSION_EVIDENCE_TEXT_CHARS);
@@ -255,7 +284,27 @@ export function readSessionEvidence(path, options = {}) {
255
284
  const read = readJsonlFileResilient(path, { maxBytes });
256
285
  const diagnostics = [...read.diagnostics];
257
286
  const header = read.records.find((entry) => entry.type === "session");
258
- const branch = activeBranch(read.records, path, diagnostics);
287
+ const branch = selectLastRecordedSessionBranch(read.records, path, diagnostics);
288
+ const ordinals = new Map(branch.map(entry => [entry, 0]));
289
+ const idCounts = new Map(branch.map(entry => [String(entry.id), 0]));
290
+ let sessionHeaders = 0;
291
+ for (const [index, entry] of read.records.entries()) {
292
+ if (entry.type === "session")
293
+ sessionHeaders++;
294
+ if (ordinals.has(entry))
295
+ ordinals.set(entry, index + 1);
296
+ if (entry.type !== "session" && typeof entry.id === "string" && idCounts.has(entry.id)) {
297
+ idCounts.set(entry.id, idCounts.get(entry.id) + 1);
298
+ }
299
+ }
300
+ const sessionId = sessionHeaders === 1 && typeof header?.id === "string" && header.id &&
301
+ redactSessionEvidenceValue(header.id, maxTextChars) === header.id ? header.id : undefined;
302
+ const identity = (entry, role) => {
303
+ const entryId = typeof entry.id === "string" ? entry.id : "";
304
+ const basis = sessionId && entryId && idCounts.get(entryId) === 1 && diagnostics.length === 0 &&
305
+ redactSessionEvidenceValue(entryId, maxTextChars) === entryId ? "entry" : "record";
306
+ return Object.freeze({ basis, role, ...(basis === "entry" ? { sessionId, entryId } : { ordinal: ordinals.get(entry) }) });
307
+ };
259
308
  const turns = [];
260
309
  let pendingUser;
261
310
  let currentTurn;
@@ -267,6 +316,7 @@ export function readSessionEvidence(path, options = {}) {
267
316
  if (role === "user") {
268
317
  pendingUser = {
269
318
  id: String(entry.id),
319
+ identity: identity(entry, "user"),
270
320
  text: contentText(message, "text", maxTextChars),
271
321
  };
272
322
  currentTurn = undefined;
@@ -274,6 +324,7 @@ export function readSessionEvidence(path, options = {}) {
274
324
  }
275
325
  if (role === "assistant") {
276
326
  currentTurn = {
327
+ [SESSION_TURN_IDENTITY]: identity(entry, "assistant"),
277
328
  ...(typeof entry.id === "string" ? { assistantEntryId: entry.id } : {}),
278
329
  ...(contentText(message, "text", maxTextChars)
279
330
  ? { assistantText: contentText(message, "text", maxTextChars) }
@@ -328,6 +379,7 @@ export function readSessionEvidence(path, options = {}) {
328
379
  toolCalls: [],
329
380
  unmatchedToolResults: 0,
330
381
  userEntryId: pendingUser.id,
382
+ [SESSION_TURN_IDENTITY]: pendingUser.identity,
331
383
  ...(pendingUser.text ? { userText: pendingUser.text } : {}),
332
384
  });
333
385
  }
@@ -336,7 +388,7 @@ export function readSessionEvidence(path, options = {}) {
336
388
  ...turn,
337
389
  index: firstVisibleIndex + index + 1,
338
390
  }));
339
- return {
391
+ const evidence = {
340
392
  ...(branch.at(-1)?.id ? { activeLeafId: String(branch.at(-1)?.id) } : {}),
341
393
  diagnostics,
342
394
  path,
@@ -345,4 +397,8 @@ export function readSessionEvidence(path, options = {}) {
345
397
  truncated: read.truncated === true || turns.length > visibleTurns.length,
346
398
  turns: visibleTurns,
347
399
  };
400
+ Object.defineProperty(evidence, SESSION_EVIDENCE_CHRONOLOGY, {
401
+ value: sessionChronology(turns, sessionId !== undefined && read.truncated !== true && diagnostics.length === 0),
402
+ });
403
+ return evidence;
348
404
  }
@@ -20,6 +20,9 @@ export interface JsonlReadResult<T> {
20
20
  export interface JsonlReadOptions {
21
21
  maxBytes?: number;
22
22
  }
23
- export declare function readJsonFileResilient<T>(path: string, fallback: T): JsonReadResult<T>;
23
+ export declare function readJsonFileResilient<T>(path: string, fallback: T, options?: {
24
+ maxBytes?: number;
25
+ strictUtf8?: boolean;
26
+ }): JsonReadResult<T>;
24
27
  export declare function readJsonlFileResilient<T>(path: string, options?: JsonlReadOptions): JsonlReadResult<T>;
25
28
  export declare function formatStateReadDiagnostics(diagnostics: StateReadDiagnostic[], limit?: number): string[];
@@ -3,20 +3,23 @@
3
3
  * Zones: file-backed actor state, JSON/JSONL diagnostics, inspect safety
4
4
  * Owns best-effort JSON and JSONL parsing helpers for operator-facing state reads.
5
5
  */
6
- import { closeSync, fstatSync, openSync, readFileSync, readSync, } from "node:fs";
6
+ import { closeSync, constants, fstatSync, openSync, readFileSync, readSync, } from "node:fs";
7
7
  function isEnoent(error) {
8
8
  return error.code === "ENOENT";
9
9
  }
10
10
  function diagnosticMessage(error) {
11
11
  return error instanceof Error ? error.message : String(error);
12
12
  }
13
- function readTextFileCapped(path, maxBytes) {
13
+ function readTextFileCapped(path, maxBytes, strictUtf8 = false) {
14
14
  if (maxBytes === undefined)
15
- return readFileSync(path, "utf8");
15
+ return strictUtf8 ? new TextDecoder("utf-8", { fatal: true }).decode(readFileSync(path)) : readFileSync(path, "utf8");
16
16
  const limit = Math.max(0, Math.floor(maxBytes));
17
- const fd = openSync(path, "r");
17
+ const fd = openSync(path, strictUtf8 ? constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0) | (constants.O_NONBLOCK ?? 0) : "r");
18
18
  try {
19
- const size = fstatSync(fd).size;
19
+ const opened = fstatSync(fd);
20
+ if (strictUtf8 && !opened.isFile())
21
+ throw new Error("bounded strict read requires a regular file");
22
+ const size = opened.size;
20
23
  if (size > limit) {
21
24
  throw Object.assign(new Error(`file exceeds bounded read limit (${size} > ${limit} bytes)`), { code: "EFBIG" });
22
25
  }
@@ -28,17 +31,20 @@ function readTextFileCapped(path, maxBytes) {
28
31
  break;
29
32
  offset += bytesRead;
30
33
  }
31
- return content.subarray(0, offset).toString("utf8");
34
+ if (strictUtf8 && offset !== size)
35
+ throw new Error("file ended before its bounded strict read completed");
36
+ const observed = content.subarray(0, offset);
37
+ return strictUtf8 ? new TextDecoder("utf-8", { fatal: true }).decode(observed) : observed.toString("utf8");
32
38
  }
33
39
  finally {
34
40
  closeSync(fd);
35
41
  }
36
42
  }
37
- export function readJsonFileResilient(path, fallback) {
43
+ export function readJsonFileResilient(path, fallback, options = {}) {
38
44
  try {
39
45
  return {
40
46
  diagnostics: [],
41
- value: JSON.parse(readFileSync(path, "utf8")),
47
+ value: JSON.parse(readTextFileCapped(path, options.maxBytes, options.strictUtf8)),
42
48
  };
43
49
  }
44
50
  catch (error) {
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * Extension temp-directory helpers
3
3
  * Zones: temp directory, cleanup, runtime files
4
- * Owns pi-agent tmp directory preparation and stale-entry cleanup
4
+ * Owns ordinary pi-agent tmp directory preparation and stale-entry cleanup; Run retirement is separate.
5
5
  */
6
6
  export declare const DEFAULT_TEMP_MAX_AGE_MS: number;
7
- export declare const DEFAULT_RUN_MAX_AGE_MS: number;
8
7
  export declare function cleanupStaleTempEntries(tempDir: string, maxAgeMs?: number, now?: number, preservedEntries?: Set<string>): Promise<number>;
9
- export declare function cleanupStaleRunEntries(runsDir: string, maxAgeMs?: number, now?: number): Promise<number>;
10
- export declare function prepareExtensionTempDir(tempDir: string, maxAgeMs?: number, runMaxAgeMs?: number): Promise<number>;
8
+ export declare function prepareExtensionTempDir(tempDir: string, maxAgeMs?: number): Promise<number>;
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * Extension temp-directory helpers
3
3
  * Zones: temp directory, cleanup, runtime files
4
- * Owns pi-agent tmp directory preparation and stale-entry cleanup
4
+ * Owns ordinary pi-agent tmp directory preparation and stale-entry cleanup; Run retirement is separate.
5
5
  */
6
- import { mkdir, readdir, readFile, rm, stat } from "node:fs/promises";
6
+ import { mkdir, readdir, rm, stat } from "node:fs/promises";
7
7
  import { join } from "node:path";
8
8
  export const DEFAULT_TEMP_MAX_AGE_MS = 24 * 60 * 60 * 1000;
9
- export const DEFAULT_RUN_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
10
9
  export async function cleanupStaleTempEntries(tempDir, maxAgeMs = DEFAULT_TEMP_MAX_AGE_MS, now = Date.now(), preservedEntries = new Set(["runs", "delivery"])) {
11
10
  let entries;
12
11
  let removed = 0;
@@ -33,58 +32,7 @@ export async function cleanupStaleTempEntries(tempDir, maxAgeMs = DEFAULT_TEMP_M
33
32
  }
34
33
  return removed;
35
34
  }
36
- function isPidAlive(pid) {
37
- try {
38
- process.kill(pid, 0);
39
- return true;
40
- }
41
- catch {
42
- return false;
43
- }
44
- }
45
- async function isRunEntryAlive(path) {
46
- try {
47
- const raw = await readFile(join(path, "run.json"), "utf8");
48
- const meta = JSON.parse(raw);
49
- const pid = Number(meta.pid || 0);
50
- return pid > 0 && isPidAlive(pid);
51
- }
52
- catch {
53
- return false;
54
- }
55
- }
56
- export async function cleanupStaleRunEntries(runsDir, maxAgeMs = DEFAULT_RUN_MAX_AGE_MS, now = Date.now()) {
57
- let entries;
58
- let removed = 0;
59
- try {
60
- entries = await readdir(runsDir, { withFileTypes: true });
61
- }
62
- catch {
63
- return 0;
64
- }
65
- for (const entry of entries) {
66
- if (!entry.isDirectory())
67
- continue;
68
- const path = join(runsDir, entry.name);
69
- try {
70
- const info = await stat(path);
71
- const timestamp = Math.min(info.birthtimeMs || info.mtimeMs, info.mtimeMs);
72
- if (now - timestamp <= maxAgeMs)
73
- continue;
74
- if (await isRunEntryAlive(path))
75
- continue;
76
- await rm(path, { force: true, recursive: true });
77
- removed += 1;
78
- }
79
- catch {
80
- // Ignore temp cleanup races.
81
- }
82
- }
83
- return removed;
84
- }
85
- export async function prepareExtensionTempDir(tempDir, maxAgeMs = DEFAULT_TEMP_MAX_AGE_MS, runMaxAgeMs = DEFAULT_RUN_MAX_AGE_MS) {
35
+ export async function prepareExtensionTempDir(tempDir, maxAgeMs = DEFAULT_TEMP_MAX_AGE_MS) {
86
36
  await mkdir(tempDir, { recursive: true });
87
- const removedTemp = await cleanupStaleTempEntries(tempDir, maxAgeMs);
88
- const removedRuns = await cleanupStaleRunEntries(join(tempDir, "runs"), runMaxAgeMs);
89
- return removedTemp + removedRuns;
37
+ return cleanupStaleTempEntries(tempDir, maxAgeMs);
90
38
  }
@@ -3,12 +3,15 @@
3
3
  * Zones: session ownership, run visibility guards, tool authorization errors
4
4
  * Owns consistent session-mismatch diagnostics for public tool execution paths
5
5
  */
6
+ import * as RunIndex from "./runs-index.ts";
6
7
  export interface SessionContext {
7
8
  sessionManager?: {
8
9
  getSessionId?: () => string;
9
10
  };
10
11
  }
11
12
  export declare function getContextSessionId(ctx: unknown): string | undefined;
13
+ /** Optional post-launch navigation never fails or rolls back work already admitted by the launch owner. */
14
+ export declare function readRunFileNavigationForContext(status: object, ctx: unknown): Readonly<RunIndex.RunDirectoryNavigation>;
12
15
  export declare function requireContextSessionId(ctx: unknown, actor: string): string;
13
16
  export declare function sessionMismatchError(input: {
14
17
  currentSession?: string;
@@ -4,9 +4,22 @@
4
4
  * Owns consistent session-mismatch diagnostics for public tool execution paths
5
5
  */
6
6
  import * as AsyncRuns from "./async-runs.js";
7
+ import * as RunIndex from "./runs-index.js";
7
8
  export function getContextSessionId(ctx) {
8
9
  return ctx?.sessionManager?.getSessionId?.();
9
10
  }
11
+ /** Optional post-launch navigation never fails or rolls back work already admitted by the launch owner. */
12
+ export function readRunFileNavigationForContext(status, ctx) {
13
+ try {
14
+ const sessionId = getContextSessionId(ctx);
15
+ const directory = Object.getOwnPropertyDescriptor(status, "state_dir");
16
+ const navigation = RunIndex.readRunDirectoryNavigation(typeof directory?.value === "string" ? directory.value : "", status, sessionId);
17
+ return getContextSessionId(ctx) === sessionId ? navigation : Object.freeze({ state: "unavailable", reason: "session_changed" });
18
+ }
19
+ catch {
20
+ return Object.freeze({ state: "unavailable", reason: "navigation_unavailable" });
21
+ }
22
+ }
10
23
  export function requireContextSessionId(ctx, actor) {
11
24
  const sessionId = getContextSessionId(ctx);
12
25
  if (!sessionId) {
@@ -10,6 +10,7 @@ export interface InspectToolDeps<TContext = unknown> {
10
10
  getToolStatus?: (name: string) => Record<string, unknown> | undefined;
11
11
  listRuns?: () => Array<Record<string, any>>;
12
12
  recipeRoot?: string;
13
+ runStateRoot?: string;
13
14
  registryStatus?: () => Runtime.RecipeRegistryStatus;
14
15
  }
15
16
  export declare function createInspectToolDefinition<TContext = unknown>(deps?: InspectToolDeps<TContext>): any;