@llblab/pi-kit 0.1.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 (523) hide show
  1. package/AGENTS.md +35 -0
  2. package/BACKLOG.md +3 -0
  3. package/CHANGELOG.md +9 -0
  4. package/LICENSE +21 -0
  5. package/README.md +43 -0
  6. package/node_modules/@llblab/pi-actors/AGENTS.md +150 -0
  7. package/node_modules/@llblab/pi-actors/BACKLOG.md +6 -0
  8. package/node_modules/@llblab/pi-actors/CHANGELOG.md +865 -0
  9. package/node_modules/@llblab/pi-actors/README.md +231 -0
  10. package/node_modules/@llblab/pi-actors/banner.jpg +0 -0
  11. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/artifact-manifest.json +9 -0
  12. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/control-endpoint.json +6 -0
  13. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/control-record.json +9 -0
  14. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/recipe-summary.json +8 -0
  15. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/run-state.json +10 -0
  16. package/node_modules/@llblab/pi-actors/dist/fixtures/protocol/trace-event.json +9 -0
  17. package/node_modules/@llblab/pi-actors/dist/index.d.ts +7 -0
  18. package/node_modules/@llblab/pi-actors/dist/index.js +17 -0
  19. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.d.ts +146 -0
  20. package/node_modules/@llblab/pi-actors/dist/lib/async-runs.js +800 -0
  21. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.d.ts +20 -0
  22. package/node_modules/@llblab/pi-actors/dist/lib/automatic-review-runtime.js +103 -0
  23. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.d.ts +85 -0
  24. package/node_modules/@llblab/pi-actors/dist/lib/command-templates.js +804 -0
  25. package/node_modules/@llblab/pi-actors/dist/lib/config.d.ts +34 -0
  26. package/node_modules/@llblab/pi-actors/dist/lib/config.js +216 -0
  27. package/node_modules/@llblab/pi-actors/dist/lib/control-projection.d.ts +20 -0
  28. package/node_modules/@llblab/pi-actors/dist/lib/control-projection.js +66 -0
  29. package/node_modules/@llblab/pi-actors/dist/lib/control.d.ts +15 -0
  30. package/node_modules/@llblab/pi-actors/dist/lib/control.js +97 -0
  31. package/node_modules/@llblab/pi-actors/dist/lib/draft-consolidation-transaction.d.ts +65 -0
  32. package/node_modules/@llblab/pi-actors/dist/lib/draft-consolidation-transaction.js +610 -0
  33. package/node_modules/@llblab/pi-actors/dist/lib/draft-consolidation.d.ts +35 -0
  34. package/node_modules/@llblab/pi-actors/dist/lib/draft-consolidation.js +126 -0
  35. package/node_modules/@llblab/pi-actors/dist/lib/draft-review.d.ts +56 -0
  36. package/node_modules/@llblab/pi-actors/dist/lib/draft-review.js +254 -0
  37. package/node_modules/@llblab/pi-actors/dist/lib/draft-sleep.d.ts +65 -0
  38. package/node_modules/@llblab/pi-actors/dist/lib/draft-sleep.js +467 -0
  39. package/node_modules/@llblab/pi-actors/dist/lib/execution-output.d.ts +25 -0
  40. package/node_modules/@llblab/pi-actors/dist/lib/execution-output.js +88 -0
  41. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.d.ts +17 -0
  42. package/node_modules/@llblab/pi-actors/dist/lib/execution-sessions.js +85 -0
  43. package/node_modules/@llblab/pi-actors/dist/lib/execution.d.ts +99 -0
  44. package/node_modules/@llblab/pi-actors/dist/lib/execution.js +725 -0
  45. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.d.ts +21 -0
  46. package/node_modules/@llblab/pi-actors/dist/lib/extension-runtime.js +141 -0
  47. package/node_modules/@llblab/pi-actors/dist/lib/file-state.d.ts +18 -0
  48. package/node_modules/@llblab/pi-actors/dist/lib/file-state.js +310 -0
  49. package/node_modules/@llblab/pi-actors/dist/lib/identity.d.ts +9 -0
  50. package/node_modules/@llblab/pi-actors/dist/lib/identity.js +27 -0
  51. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.d.ts +16 -0
  52. package/node_modules/@llblab/pi-actors/dist/lib/inspector-actions.js +57 -0
  53. package/node_modules/@llblab/pi-actors/dist/lib/inspector-command.d.ts +7 -0
  54. package/node_modules/@llblab/pi-actors/dist/lib/inspector-command.js +37 -0
  55. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.d.ts +100 -0
  56. package/node_modules/@llblab/pi-actors/dist/lib/inspector-overlay.js +824 -0
  57. package/node_modules/@llblab/pi-actors/dist/lib/inspector.d.ts +20 -0
  58. package/node_modules/@llblab/pi-actors/dist/lib/inspector.js +136 -0
  59. package/node_modules/@llblab/pi-actors/dist/lib/limits.d.ts +28 -0
  60. package/node_modules/@llblab/pi-actors/dist/lib/limits.js +28 -0
  61. package/node_modules/@llblab/pi-actors/dist/lib/model-context.d.ts +56 -0
  62. package/node_modules/@llblab/pi-actors/dist/lib/model-context.js +220 -0
  63. package/node_modules/@llblab/pi-actors/dist/lib/observability.d.ts +186 -0
  64. package/node_modules/@llblab/pi-actors/dist/lib/observability.js +951 -0
  65. package/node_modules/@llblab/pi-actors/dist/lib/paths.d.ts +27 -0
  66. package/node_modules/@llblab/pi-actors/dist/lib/paths.js +72 -0
  67. package/node_modules/@llblab/pi-actors/dist/lib/pi.d.ts +19 -0
  68. package/node_modules/@llblab/pi-actors/dist/lib/pi.js +21 -0
  69. package/node_modules/@llblab/pi-actors/dist/lib/preflight-diagnostics.d.ts +27 -0
  70. package/node_modules/@llblab/pi-actors/dist/lib/preflight-diagnostics.js +86 -0
  71. package/node_modules/@llblab/pi-actors/dist/lib/prompts.d.ts +24 -0
  72. package/node_modules/@llblab/pi-actors/dist/lib/prompts.js +49 -0
  73. package/node_modules/@llblab/pi-actors/dist/lib/recipe-control.d.ts +7 -0
  74. package/node_modules/@llblab/pi-actors/dist/lib/recipe-control.js +43 -0
  75. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.d.ts +36 -0
  76. package/node_modules/@llblab/pi-actors/dist/lib/recipes-context.js +197 -0
  77. package/node_modules/@llblab/pi-actors/dist/lib/recipes-discovery.d.ts +77 -0
  78. package/node_modules/@llblab/pi-actors/dist/lib/recipes-discovery.js +783 -0
  79. package/node_modules/@llblab/pi-actors/dist/lib/recipes-references.d.ts +113 -0
  80. package/node_modules/@llblab/pi-actors/dist/lib/recipes-references.js +1108 -0
  81. package/node_modules/@llblab/pi-actors/dist/lib/recipes-usage.d.ts +21 -0
  82. package/node_modules/@llblab/pi-actors/dist/lib/recipes-usage.js +494 -0
  83. package/node_modules/@llblab/pi-actors/dist/lib/registry.d.ts +67 -0
  84. package/node_modules/@llblab/pi-actors/dist/lib/registry.js +504 -0
  85. package/node_modules/@llblab/pi-actors/dist/lib/review-control.d.ts +14 -0
  86. package/node_modules/@llblab/pi-actors/dist/lib/review-control.js +110 -0
  87. package/node_modules/@llblab/pi-actors/dist/lib/review-diagnostics.d.ts +11 -0
  88. package/node_modules/@llblab/pi-actors/dist/lib/review-diagnostics.js +148 -0
  89. package/node_modules/@llblab/pi-actors/dist/lib/review-projection.d.ts +14 -0
  90. package/node_modules/@llblab/pi-actors/dist/lib/review-projection.js +166 -0
  91. package/node_modules/@llblab/pi-actors/dist/lib/run-evidence-policy.d.ts +95 -0
  92. package/node_modules/@llblab/pi-actors/dist/lib/run-evidence-policy.js +177 -0
  93. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.d.ts +18 -0
  94. package/node_modules/@llblab/pi-actors/dist/lib/run-ui-runtime.js +125 -0
  95. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.d.ts +21 -0
  96. package/node_modules/@llblab/pi-actors/dist/lib/runs-artifacts.js +68 -0
  97. package/node_modules/@llblab/pi-actors/dist/lib/runs-control-delivery.d.ts +28 -0
  98. package/node_modules/@llblab/pi-actors/dist/lib/runs-control-delivery.js +150 -0
  99. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.d.ts +21 -0
  100. package/node_modules/@llblab/pi-actors/dist/lib/runs-control.js +89 -0
  101. package/node_modules/@llblab/pi-actors/dist/lib/runs-controls.d.ts +39 -0
  102. package/node_modules/@llblab/pi-actors/dist/lib/runs-controls.js +283 -0
  103. package/node_modules/@llblab/pi-actors/dist/lib/runs-identity.d.ts +5 -0
  104. package/node_modules/@llblab/pi-actors/dist/lib/runs-identity.js +11 -0
  105. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.d.ts +27 -0
  106. package/node_modules/@llblab/pi-actors/dist/lib/runs-index.js +142 -0
  107. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.d.ts +7 -0
  108. package/node_modules/@llblab/pi-actors/dist/lib/runs-ownership.js +96 -0
  109. package/node_modules/@llblab/pi-actors/dist/lib/runs-parent-teardown.d.ts +51 -0
  110. package/node_modules/@llblab/pi-actors/dist/lib/runs-parent-teardown.js +172 -0
  111. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.d.ts +22 -0
  112. package/node_modules/@llblab/pi-actors/dist/lib/runs-process.js +125 -0
  113. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.d.ts +18 -0
  114. package/node_modules/@llblab/pi-actors/dist/lib/runs-retention.js +108 -0
  115. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.d.ts +12 -0
  116. package/node_modules/@llblab/pi-actors/dist/lib/runs-start.js +68 -0
  117. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.d.ts +10 -0
  118. package/node_modules/@llblab/pi-actors/dist/lib/runs-status.js +68 -0
  119. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.d.ts +48 -0
  120. package/node_modules/@llblab/pi-actors/dist/lib/runs-trace.js +491 -0
  121. package/node_modules/@llblab/pi-actors/dist/lib/runtime-identity.d.ts +7 -0
  122. package/node_modules/@llblab/pi-actors/dist/lib/runtime-identity.js +35 -0
  123. package/node_modules/@llblab/pi-actors/dist/lib/runtime-triage.d.ts +29 -0
  124. package/node_modules/@llblab/pi-actors/dist/lib/runtime-triage.js +60 -0
  125. package/node_modules/@llblab/pi-actors/dist/lib/runtime.d.ts +69 -0
  126. package/node_modules/@llblab/pi-actors/dist/lib/runtime.js +339 -0
  127. package/node_modules/@llblab/pi-actors/dist/lib/schema.d.ts +60 -0
  128. package/node_modules/@llblab/pi-actors/dist/lib/schema.js +428 -0
  129. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.d.ts +45 -0
  130. package/node_modules/@llblab/pi-actors/dist/lib/session-evidence.js +204 -0
  131. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.d.ts +21 -0
  132. package/node_modules/@llblab/pi-actors/dist/lib/state-readers.js +74 -0
  133. package/node_modules/@llblab/pi-actors/dist/lib/temp.d.ts +10 -0
  134. package/node_modules/@llblab/pi-actors/dist/lib/temp.js +90 -0
  135. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-lineage-transaction.d.ts +27 -0
  136. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-lineage-transaction.js +597 -0
  137. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-lineage.d.ts +24 -0
  138. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-lineage.js +98 -0
  139. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-scheduler.d.ts +80 -0
  140. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-scheduler.js +494 -0
  141. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-transaction.d.ts +50 -0
  142. package/node_modules/@llblab/pi-actors/dist/lib/tool-review-transaction.js +362 -0
  143. package/node_modules/@llblab/pi-actors/dist/lib/tool-review.d.ts +56 -0
  144. package/node_modules/@llblab/pi-actors/dist/lib/tool-review.js +197 -0
  145. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.d.ts +19 -0
  146. package/node_modules/@llblab/pi-actors/dist/lib/tools-access.js +44 -0
  147. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.d.ts +15 -0
  148. package/node_modules/@llblab/pi-actors/dist/lib/tools-inspect.js +532 -0
  149. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.d.ts +17 -0
  150. package/node_modules/@llblab/pi-actors/dist/lib/tools-local.js +191 -0
  151. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.d.ts +9 -0
  152. package/node_modules/@llblab/pi-actors/dist/lib/tools-message.js +139 -0
  153. package/node_modules/@llblab/pi-actors/dist/lib/tools-register.d.ts +18 -0
  154. package/node_modules/@llblab/pi-actors/dist/lib/tools-register.js +41 -0
  155. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.d.ts +20 -0
  156. package/node_modules/@llblab/pi-actors/dist/lib/tools-response.js +243 -0
  157. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.d.ts +15 -0
  158. package/node_modules/@llblab/pi-actors/dist/lib/tools-spawn.js +133 -0
  159. package/node_modules/@llblab/pi-actors/dist/lib/tools.d.ts +28 -0
  160. package/node_modules/@llblab/pi-actors/dist/lib/tools.js +49 -0
  161. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.d.ts +22 -0
  162. package/node_modules/@llblab/pi-actors/dist/lib/trace-projection.js +231 -0
  163. package/node_modules/@llblab/pi-actors/dist/pi-actors/index.js +1 -0
  164. package/node_modules/@llblab/pi-actors/dist/scripts/async-runner.mjs +555 -0
  165. package/node_modules/@llblab/pi-actors/dist/scripts/build-dist.mjs +60 -0
  166. package/node_modules/@llblab/pi-actors/dist/scripts/conformance.mjs +63 -0
  167. package/node_modules/@llblab/pi-actors/dist/skills/actors/SKILL.md +126 -0
  168. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/command-validate.json +13 -0
  169. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/jsonl-tail.json +10 -0
  170. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/recipe-validate.json +11 -0
  171. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/resource-locker-snapshot.json +11 -0
  172. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/resource-locker.json +25 -0
  173. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/run-ops-snapshot.json +15 -0
  174. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/run-state-files.json +13 -0
  175. package/node_modules/@llblab/pi-actors/dist/skills/actors/recipes/run-summary.json +9 -0
  176. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/diagnostics.md +44 -0
  177. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/persistent-tools.md +76 -0
  178. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/recipes.md +51 -0
  179. package/node_modules/@llblab/pi-actors/dist/skills/actors/references/runs.md +41 -0
  180. package/node_modules/@llblab/pi-actors/dist/skills/actors/scripts/resource-locker.mjs +425 -0
  181. package/node_modules/@llblab/pi-actors/dist/skills/actors/scripts/run-utils.mjs +164 -0
  182. package/node_modules/@llblab/pi-actors/dist/skills/actors/scripts/validate-recipe.mjs +370 -0
  183. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/SKILL.md +33 -0
  184. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/recipes/bundle.json +77 -0
  185. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/recipes/file-write.json +14 -0
  186. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/recipes/manifest.json +14 -0
  187. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/recipes/report.json +39 -0
  188. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/recipes/write.json +53 -0
  189. package/node_modules/@llblab/pi-actors/dist/skills/artifacts/scripts/artifact-utils.mjs +63 -0
  190. package/node_modules/@llblab/pi-actors/dist/skills/music-player/SKILL.md +57 -0
  191. package/node_modules/@llblab/pi-actors/dist/skills/music-player/genapps/music-player.mjs +360 -0
  192. package/node_modules/@llblab/pi-actors/dist/skills/music-player/recipes/playback.json +29 -0
  193. package/node_modules/@llblab/pi-actors/dist/skills/music-player/scripts/playback-client.mjs +143 -0
  194. package/node_modules/@llblab/pi-actors/dist/skills/music-player/scripts/playback.mjs +1446 -0
  195. package/node_modules/@llblab/pi-actors/dist/skills/project-work/SKILL.md +37 -0
  196. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/changelog-head.json +11 -0
  197. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/changelog-section.json +11 -0
  198. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/docs-maintenance.json +66 -0
  199. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/git-log.json +11 -0
  200. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/git-status.json +9 -0
  201. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/markdown-index.json +14 -0
  202. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/package-summary.json +9 -0
  203. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/release-readiness.json +115 -0
  204. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/release-summary.json +74 -0
  205. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/repo-health.json +75 -0
  206. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/run-ops.json +56 -0
  207. package/node_modules/@llblab/pi-actors/dist/skills/project-work/recipes/skill-summary.json +11 -0
  208. package/node_modules/@llblab/pi-actors/dist/skills/project-work/scripts/project-utils.mjs +89 -0
  209. package/node_modules/@llblab/pi-actors/dist/skills/recipe-memory/SKILL.md +36 -0
  210. package/node_modules/@llblab/pi-actors/dist/skills/recipe-memory/recipes/draft-review.json +14 -0
  211. package/node_modules/@llblab/pi-actors/dist/skills/recipe-memory/recipes/tool-review.json +14 -0
  212. package/node_modules/@llblab/pi-actors/dist/skills/swarm/SKILL.md +84 -0
  213. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/architect.json +82 -0
  214. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/checkpoint-continuation.json +51 -0
  215. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/development-tasking.json +67 -0
  216. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/lens-review.json +63 -0
  217. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/quorum-review.json +65 -0
  218. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/research-synthesis.json +81 -0
  219. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/review-readiness.json +59 -0
  220. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-artifact.json +21 -0
  221. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-checkpoint.json +21 -0
  222. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-conflict-report.json +19 -0
  223. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-contradiction-map.json +20 -0
  224. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-critic.json +22 -0
  225. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-evidence-map.json +20 -0
  226. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-followup.json +21 -0
  227. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-judge.json +22 -0
  228. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-merge.json +24 -0
  229. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-normalize.json +20 -0
  230. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-plan.json +20 -0
  231. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-preflight.json +18 -0
  232. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-prompt.json +16 -0
  233. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-prompts.json +39 -0
  234. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-quorum.json +31 -0
  235. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-review-coordinator.json +170 -0
  236. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-review.json +26 -0
  237. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-task-card.json +22 -0
  238. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-tools.json +15 -0
  239. package/node_modules/@llblab/pi-actors/dist/skills/swarm/recipes/subagent-verify.json +23 -0
  240. package/node_modules/@llblab/pi-actors/dist/skills/swarm/references/development-swarm.md +189 -0
  241. package/node_modules/@llblab/pi-actors/dist/skills/swarm/references/review-swarms.md +115 -0
  242. package/node_modules/@llblab/pi-actors/docs/README.md +20 -0
  243. package/node_modules/@llblab/pi-actors/docs/actor-inspector.md +50 -0
  244. package/node_modules/@llblab/pi-actors/docs/async-runs.md +141 -0
  245. package/node_modules/@llblab/pi-actors/docs/command-templates.md +321 -0
  246. package/node_modules/@llblab/pi-actors/docs/recipe-library.md +89 -0
  247. package/node_modules/@llblab/pi-actors/docs/releasing.md +28 -0
  248. package/node_modules/@llblab/pi-actors/docs/template-recipes.md +175 -0
  249. package/node_modules/@llblab/pi-actors/docs/tool-registry.md +90 -0
  250. package/node_modules/@llblab/pi-actors/fixtures/protocol/artifact-manifest.json +9 -0
  251. package/node_modules/@llblab/pi-actors/fixtures/protocol/control-endpoint.json +6 -0
  252. package/node_modules/@llblab/pi-actors/fixtures/protocol/control-record.json +9 -0
  253. package/node_modules/@llblab/pi-actors/fixtures/protocol/recipe-summary.json +8 -0
  254. package/node_modules/@llblab/pi-actors/fixtures/protocol/run-state.json +10 -0
  255. package/node_modules/@llblab/pi-actors/fixtures/protocol/trace-event.json +9 -0
  256. package/node_modules/@llblab/pi-actors/index.ts +30 -0
  257. package/node_modules/@llblab/pi-actors/lib/async-runs.ts +1245 -0
  258. package/node_modules/@llblab/pi-actors/lib/automatic-review-runtime.ts +148 -0
  259. package/node_modules/@llblab/pi-actors/lib/command-templates.ts +1116 -0
  260. package/node_modules/@llblab/pi-actors/lib/config.ts +261 -0
  261. package/node_modules/@llblab/pi-actors/lib/control-projection.ts +105 -0
  262. package/node_modules/@llblab/pi-actors/lib/control.ts +117 -0
  263. package/node_modules/@llblab/pi-actors/lib/draft-consolidation-transaction.ts +821 -0
  264. package/node_modules/@llblab/pi-actors/lib/draft-consolidation.ts +181 -0
  265. package/node_modules/@llblab/pi-actors/lib/draft-review.ts +325 -0
  266. package/node_modules/@llblab/pi-actors/lib/draft-sleep.ts +575 -0
  267. package/node_modules/@llblab/pi-actors/lib/execution-output.ts +123 -0
  268. package/node_modules/@llblab/pi-actors/lib/execution-sessions.ts +111 -0
  269. package/node_modules/@llblab/pi-actors/lib/execution.ts +1153 -0
  270. package/node_modules/@llblab/pi-actors/lib/extension-runtime.ts +181 -0
  271. package/node_modules/@llblab/pi-actors/lib/file-state.ts +306 -0
  272. package/node_modules/@llblab/pi-actors/lib/identity.ts +29 -0
  273. package/node_modules/@llblab/pi-actors/lib/inspector-actions.ts +79 -0
  274. package/node_modules/@llblab/pi-actors/lib/inspector-command.ts +54 -0
  275. package/node_modules/@llblab/pi-actors/lib/inspector-overlay.ts +901 -0
  276. package/node_modules/@llblab/pi-actors/lib/inspector.ts +204 -0
  277. package/node_modules/@llblab/pi-actors/lib/limits.ts +29 -0
  278. package/node_modules/@llblab/pi-actors/lib/model-context.ts +359 -0
  279. package/node_modules/@llblab/pi-actors/lib/observability.ts +1337 -0
  280. package/node_modules/@llblab/pi-actors/lib/paths.ts +111 -0
  281. package/node_modules/@llblab/pi-actors/lib/pi.ts +47 -0
  282. package/node_modules/@llblab/pi-actors/lib/preflight-diagnostics.ts +132 -0
  283. package/node_modules/@llblab/pi-actors/lib/prompts.ts +69 -0
  284. package/node_modules/@llblab/pi-actors/lib/recipe-control.ts +52 -0
  285. package/node_modules/@llblab/pi-actors/lib/recipes-context.ts +268 -0
  286. package/node_modules/@llblab/pi-actors/lib/recipes-discovery.ts +1060 -0
  287. package/node_modules/@llblab/pi-actors/lib/recipes-references.ts +1598 -0
  288. package/node_modules/@llblab/pi-actors/lib/recipes-usage.ts +638 -0
  289. package/node_modules/@llblab/pi-actors/lib/registry.ts +806 -0
  290. package/node_modules/@llblab/pi-actors/lib/review-control.ts +136 -0
  291. package/node_modules/@llblab/pi-actors/lib/review-diagnostics.ts +164 -0
  292. package/node_modules/@llblab/pi-actors/lib/review-projection.ts +196 -0
  293. package/node_modules/@llblab/pi-actors/lib/run-evidence-policy.ts +242 -0
  294. package/node_modules/@llblab/pi-actors/lib/run-ui-runtime.ts +155 -0
  295. package/node_modules/@llblab/pi-actors/lib/runs-artifacts.ts +96 -0
  296. package/node_modules/@llblab/pi-actors/lib/runs-control-delivery.ts +209 -0
  297. package/node_modules/@llblab/pi-actors/lib/runs-control.ts +148 -0
  298. package/node_modules/@llblab/pi-actors/lib/runs-controls.ts +282 -0
  299. package/node_modules/@llblab/pi-actors/lib/runs-identity.ts +14 -0
  300. package/node_modules/@llblab/pi-actors/lib/runs-index.ts +192 -0
  301. package/node_modules/@llblab/pi-actors/lib/runs-ownership.ts +136 -0
  302. package/node_modules/@llblab/pi-actors/lib/runs-parent-teardown.ts +257 -0
  303. package/node_modules/@llblab/pi-actors/lib/runs-process.ts +174 -0
  304. package/node_modules/@llblab/pi-actors/lib/runs-retention.ts +140 -0
  305. package/node_modules/@llblab/pi-actors/lib/runs-start.ts +113 -0
  306. package/node_modules/@llblab/pi-actors/lib/runs-status.ts +101 -0
  307. package/node_modules/@llblab/pi-actors/lib/runs-trace.ts +611 -0
  308. package/node_modules/@llblab/pi-actors/lib/runtime-identity.ts +39 -0
  309. package/node_modules/@llblab/pi-actors/lib/runtime-triage.ts +106 -0
  310. package/node_modules/@llblab/pi-actors/lib/runtime.ts +430 -0
  311. package/node_modules/@llblab/pi-actors/lib/schema.ts +525 -0
  312. package/node_modules/@llblab/pi-actors/lib/session-evidence.ts +302 -0
  313. package/node_modules/@llblab/pi-actors/lib/state-readers.ts +93 -0
  314. package/node_modules/@llblab/pi-actors/lib/temp.ts +99 -0
  315. package/node_modules/@llblab/pi-actors/lib/tool-review-lineage-transaction.ts +881 -0
  316. package/node_modules/@llblab/pi-actors/lib/tool-review-lineage.ts +145 -0
  317. package/node_modules/@llblab/pi-actors/lib/tool-review-scheduler.ts +635 -0
  318. package/node_modules/@llblab/pi-actors/lib/tool-review-transaction.ts +563 -0
  319. package/node_modules/@llblab/pi-actors/lib/tool-review.ts +270 -0
  320. package/node_modules/@llblab/pi-actors/lib/tools-access.ts +68 -0
  321. package/node_modules/@llblab/pi-actors/lib/tools-inspect.ts +673 -0
  322. package/node_modules/@llblab/pi-actors/lib/tools-local.ts +303 -0
  323. package/node_modules/@llblab/pi-actors/lib/tools-message.ts +176 -0
  324. package/node_modules/@llblab/pi-actors/lib/tools-register.ts +63 -0
  325. package/node_modules/@llblab/pi-actors/lib/tools-response.ts +285 -0
  326. package/node_modules/@llblab/pi-actors/lib/tools-spawn.ts +212 -0
  327. package/node_modules/@llblab/pi-actors/lib/tools.ts +88 -0
  328. package/node_modules/@llblab/pi-actors/lib/trace-projection.ts +306 -0
  329. package/node_modules/@llblab/pi-actors/package.json +76 -0
  330. package/node_modules/@llblab/pi-actors/scripts/async-runner.mjs +555 -0
  331. package/node_modules/@llblab/pi-actors/scripts/build-dist.mjs +60 -0
  332. package/node_modules/@llblab/pi-actors/scripts/conformance.mjs +63 -0
  333. package/node_modules/@llblab/pi-actors/skills/actors/SKILL.md +126 -0
  334. package/node_modules/@llblab/pi-actors/skills/actors/recipes/command-validate.json +13 -0
  335. package/node_modules/@llblab/pi-actors/skills/actors/recipes/jsonl-tail.json +10 -0
  336. package/node_modules/@llblab/pi-actors/skills/actors/recipes/recipe-validate.json +11 -0
  337. package/node_modules/@llblab/pi-actors/skills/actors/recipes/resource-locker-snapshot.json +11 -0
  338. package/node_modules/@llblab/pi-actors/skills/actors/recipes/resource-locker.json +25 -0
  339. package/node_modules/@llblab/pi-actors/skills/actors/recipes/run-ops-snapshot.json +15 -0
  340. package/node_modules/@llblab/pi-actors/skills/actors/recipes/run-state-files.json +13 -0
  341. package/node_modules/@llblab/pi-actors/skills/actors/recipes/run-summary.json +9 -0
  342. package/node_modules/@llblab/pi-actors/skills/actors/references/diagnostics.md +44 -0
  343. package/node_modules/@llblab/pi-actors/skills/actors/references/persistent-tools.md +76 -0
  344. package/node_modules/@llblab/pi-actors/skills/actors/references/recipes.md +51 -0
  345. package/node_modules/@llblab/pi-actors/skills/actors/references/runs.md +41 -0
  346. package/node_modules/@llblab/pi-actors/skills/actors/scripts/resource-locker.mjs +425 -0
  347. package/node_modules/@llblab/pi-actors/skills/actors/scripts/run-utils.mjs +164 -0
  348. package/node_modules/@llblab/pi-actors/skills/actors/scripts/validate-recipe.mjs +370 -0
  349. package/node_modules/@llblab/pi-actors/skills/artifacts/SKILL.md +33 -0
  350. package/node_modules/@llblab/pi-actors/skills/artifacts/recipes/bundle.json +77 -0
  351. package/node_modules/@llblab/pi-actors/skills/artifacts/recipes/file-write.json +14 -0
  352. package/node_modules/@llblab/pi-actors/skills/artifacts/recipes/manifest.json +14 -0
  353. package/node_modules/@llblab/pi-actors/skills/artifacts/recipes/report.json +39 -0
  354. package/node_modules/@llblab/pi-actors/skills/artifacts/recipes/write.json +53 -0
  355. package/node_modules/@llblab/pi-actors/skills/artifacts/scripts/artifact-utils.mjs +63 -0
  356. package/node_modules/@llblab/pi-actors/skills/music-player/SKILL.md +57 -0
  357. package/node_modules/@llblab/pi-actors/skills/music-player/genapps/music-player.mjs +360 -0
  358. package/node_modules/@llblab/pi-actors/skills/music-player/recipes/playback.json +29 -0
  359. package/node_modules/@llblab/pi-actors/skills/music-player/scripts/playback-client.mjs +143 -0
  360. package/node_modules/@llblab/pi-actors/skills/music-player/scripts/playback.mjs +1446 -0
  361. package/node_modules/@llblab/pi-actors/skills/project-work/SKILL.md +37 -0
  362. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/changelog-head.json +11 -0
  363. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/changelog-section.json +11 -0
  364. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/docs-maintenance.json +66 -0
  365. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/git-log.json +11 -0
  366. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/git-status.json +9 -0
  367. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/markdown-index.json +14 -0
  368. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/package-summary.json +9 -0
  369. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/release-readiness.json +115 -0
  370. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/release-summary.json +74 -0
  371. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/repo-health.json +75 -0
  372. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/run-ops.json +56 -0
  373. package/node_modules/@llblab/pi-actors/skills/project-work/recipes/skill-summary.json +11 -0
  374. package/node_modules/@llblab/pi-actors/skills/project-work/scripts/project-utils.mjs +89 -0
  375. package/node_modules/@llblab/pi-actors/skills/recipe-memory/SKILL.md +36 -0
  376. package/node_modules/@llblab/pi-actors/skills/recipe-memory/recipes/draft-review.json +14 -0
  377. package/node_modules/@llblab/pi-actors/skills/recipe-memory/recipes/tool-review.json +14 -0
  378. package/node_modules/@llblab/pi-actors/skills/swarm/SKILL.md +84 -0
  379. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/architect.json +82 -0
  380. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/checkpoint-continuation.json +51 -0
  381. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/development-tasking.json +67 -0
  382. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/lens-review.json +63 -0
  383. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/quorum-review.json +65 -0
  384. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/research-synthesis.json +81 -0
  385. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/review-readiness.json +59 -0
  386. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-artifact.json +21 -0
  387. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-checkpoint.json +21 -0
  388. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-conflict-report.json +19 -0
  389. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-contradiction-map.json +20 -0
  390. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-critic.json +22 -0
  391. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-evidence-map.json +20 -0
  392. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-followup.json +21 -0
  393. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-judge.json +22 -0
  394. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-merge.json +24 -0
  395. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-normalize.json +20 -0
  396. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-plan.json +20 -0
  397. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-preflight.json +18 -0
  398. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-prompt.json +16 -0
  399. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-prompts.json +39 -0
  400. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-quorum.json +31 -0
  401. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-review-coordinator.json +170 -0
  402. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-review.json +26 -0
  403. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-task-card.json +22 -0
  404. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-tools.json +15 -0
  405. package/node_modules/@llblab/pi-actors/skills/swarm/recipes/subagent-verify.json +23 -0
  406. package/node_modules/@llblab/pi-actors/skills/swarm/references/development-swarm.md +189 -0
  407. package/node_modules/@llblab/pi-actors/skills/swarm/references/review-swarms.md +115 -0
  408. package/node_modules/@llblab/pi-codex-usage/AGENTS.md +17 -0
  409. package/node_modules/@llblab/pi-codex-usage/BACKLOG.md +8 -0
  410. package/node_modules/@llblab/pi-codex-usage/CHANGELOG.md +80 -0
  411. package/node_modules/@llblab/pi-codex-usage/LICENSE +22 -0
  412. package/node_modules/@llblab/pi-codex-usage/README.md +113 -0
  413. package/node_modules/@llblab/pi-codex-usage/banner.jpg +0 -0
  414. package/node_modules/@llblab/pi-codex-usage/index.ts +1525 -0
  415. package/node_modules/@llblab/pi-codex-usage/package.json +59 -0
  416. package/node_modules/@llblab/pi-grow-loop/AGENTS.md +56 -0
  417. package/node_modules/@llblab/pi-grow-loop/BACKLOG.md +3 -0
  418. package/node_modules/@llblab/pi-grow-loop/CHANGELOG.md +126 -0
  419. package/node_modules/@llblab/pi-grow-loop/README.md +216 -0
  420. package/node_modules/@llblab/pi-grow-loop/banner.jpg +0 -0
  421. package/node_modules/@llblab/pi-grow-loop/index.ts +219 -0
  422. package/node_modules/@llblab/pi-grow-loop/package.json +64 -0
  423. package/node_modules/@llblab/pi-grow-loop/skills/grow-loop/SKILL.md +131 -0
  424. package/node_modules/@llblab/pi-grow-loop/skills/while-true/SKILL.md +233 -0
  425. package/node_modules/@llblab/pi-telegram/AGENTS.md +157 -0
  426. package/node_modules/@llblab/pi-telegram/BACKLOG.md +15 -0
  427. package/node_modules/@llblab/pi-telegram/CHANGELOG.md +886 -0
  428. package/node_modules/@llblab/pi-telegram/README.md +330 -0
  429. package/node_modules/@llblab/pi-telegram/api/activity.ts +15 -0
  430. package/node_modules/@llblab/pi-telegram/api/commands.ts +11 -0
  431. package/node_modules/@llblab/pi-telegram/api/delivery.ts +21 -0
  432. package/node_modules/@llblab/pi-telegram/api/inbound.ts +14 -0
  433. package/node_modules/@llblab/pi-telegram/api/keyboard.ts +11 -0
  434. package/node_modules/@llblab/pi-telegram/api/outbound.ts +11 -0
  435. package/node_modules/@llblab/pi-telegram/api/sections.ts +17 -0
  436. package/node_modules/@llblab/pi-telegram/api/status.ts +12 -0
  437. package/node_modules/@llblab/pi-telegram/api/updates.ts +16 -0
  438. package/node_modules/@llblab/pi-telegram/api/voice.ts +24 -0
  439. package/node_modules/@llblab/pi-telegram/docs/README.md +25 -0
  440. package/node_modules/@llblab/pi-telegram/docs/activity.md +304 -0
  441. package/node_modules/@llblab/pi-telegram/docs/architecture.md +418 -0
  442. package/node_modules/@llblab/pi-telegram/docs/callback-namespaces.md +48 -0
  443. package/node_modules/@llblab/pi-telegram/docs/command-templates.md +365 -0
  444. package/node_modules/@llblab/pi-telegram/docs/compact-matrix-literal.md +176 -0
  445. package/node_modules/@llblab/pi-telegram/docs/delivery.md +225 -0
  446. package/node_modules/@llblab/pi-telegram/docs/generative-apps.md +310 -0
  447. package/node_modules/@llblab/pi-telegram/docs/inbound.md +136 -0
  448. package/node_modules/@llblab/pi-telegram/docs/multi-instance-bus.md +467 -0
  449. package/node_modules/@llblab/pi-telegram/docs/outbound.md +193 -0
  450. package/node_modules/@llblab/pi-telegram/docs/public-api.md +599 -0
  451. package/node_modules/@llblab/pi-telegram/docs/sections.md +452 -0
  452. package/node_modules/@llblab/pi-telegram/docs/ui-style.md +256 -0
  453. package/node_modules/@llblab/pi-telegram/docs/updates.md +171 -0
  454. package/node_modules/@llblab/pi-telegram/docs/voice.md +217 -0
  455. package/node_modules/@llblab/pi-telegram/index.ts +1336 -0
  456. package/node_modules/@llblab/pi-telegram/lib/activity-verbosity.ts +714 -0
  457. package/node_modules/@llblab/pi-telegram/lib/activity.ts +782 -0
  458. package/node_modules/@llblab/pi-telegram/lib/agent-messages.ts +121 -0
  459. package/node_modules/@llblab/pi-telegram/lib/bindings.ts +1129 -0
  460. package/node_modules/@llblab/pi-telegram/lib/bus-api.ts +379 -0
  461. package/node_modules/@llblab/pi-telegram/lib/bus-follower.ts +1941 -0
  462. package/node_modules/@llblab/pi-telegram/lib/bus-leader.ts +2119 -0
  463. package/node_modules/@llblab/pi-telegram/lib/bus-transport.ts +244 -0
  464. package/node_modules/@llblab/pi-telegram/lib/bus.ts +2645 -0
  465. package/node_modules/@llblab/pi-telegram/lib/command-templates.ts +954 -0
  466. package/node_modules/@llblab/pi-telegram/lib/commands.ts +1854 -0
  467. package/node_modules/@llblab/pi-telegram/lib/config.ts +1143 -0
  468. package/node_modules/@llblab/pi-telegram/lib/delivery.ts +891 -0
  469. package/node_modules/@llblab/pi-telegram/lib/generative-app-worker.mjs +104 -0
  470. package/node_modules/@llblab/pi-telegram/lib/generative-apps.ts +958 -0
  471. package/node_modules/@llblab/pi-telegram/lib/inbound.ts +824 -0
  472. package/node_modules/@llblab/pi-telegram/lib/journal.ts +3140 -0
  473. package/node_modules/@llblab/pi-telegram/lib/keyboard.ts +59 -0
  474. package/node_modules/@llblab/pi-telegram/lib/lifecycle.ts +623 -0
  475. package/node_modules/@llblab/pi-telegram/lib/locks.ts +1422 -0
  476. package/node_modules/@llblab/pi-telegram/lib/logs.ts +393 -0
  477. package/node_modules/@llblab/pi-telegram/lib/media.ts +921 -0
  478. package/node_modules/@llblab/pi-telegram/lib/menu-model.ts +1182 -0
  479. package/node_modules/@llblab/pi-telegram/lib/menu-queue.ts +926 -0
  480. package/node_modules/@llblab/pi-telegram/lib/menu-settings.ts +876 -0
  481. package/node_modules/@llblab/pi-telegram/lib/menu-status.ts +274 -0
  482. package/node_modules/@llblab/pi-telegram/lib/menu-thinking.ts +185 -0
  483. package/node_modules/@llblab/pi-telegram/lib/menu.ts +867 -0
  484. package/node_modules/@llblab/pi-telegram/lib/model.ts +672 -0
  485. package/node_modules/@llblab/pi-telegram/lib/outbound-attachments.ts +981 -0
  486. package/node_modules/@llblab/pi-telegram/lib/outbound-buttons.ts +331 -0
  487. package/node_modules/@llblab/pi-telegram/lib/outbound-markup.ts +515 -0
  488. package/node_modules/@llblab/pi-telegram/lib/outbound-voice.ts +285 -0
  489. package/node_modules/@llblab/pi-telegram/lib/outbound.ts +1007 -0
  490. package/node_modules/@llblab/pi-telegram/lib/ownership.ts +298 -0
  491. package/node_modules/@llblab/pi-telegram/lib/paths.ts +127 -0
  492. package/node_modules/@llblab/pi-telegram/lib/pi.ts +197 -0
  493. package/node_modules/@llblab/pi-telegram/lib/polling.ts +1588 -0
  494. package/node_modules/@llblab/pi-telegram/lib/preview.ts +846 -0
  495. package/node_modules/@llblab/pi-telegram/lib/prompt-templates.ts +158 -0
  496. package/node_modules/@llblab/pi-telegram/lib/prompts.ts +218 -0
  497. package/node_modules/@llblab/pi-telegram/lib/queue.ts +3075 -0
  498. package/node_modules/@llblab/pi-telegram/lib/recovery.ts +464 -0
  499. package/node_modules/@llblab/pi-telegram/lib/rendering.ts +1213 -0
  500. package/node_modules/@llblab/pi-telegram/lib/replies.ts +892 -0
  501. package/node_modules/@llblab/pi-telegram/lib/routing.ts +2889 -0
  502. package/node_modules/@llblab/pi-telegram/lib/runtime.ts +628 -0
  503. package/node_modules/@llblab/pi-telegram/lib/sections.ts +710 -0
  504. package/node_modules/@llblab/pi-telegram/lib/setup.ts +220 -0
  505. package/node_modules/@llblab/pi-telegram/lib/skills.ts +21 -0
  506. package/node_modules/@llblab/pi-telegram/lib/status.ts +1550 -0
  507. package/node_modules/@llblab/pi-telegram/lib/sync.ts +883 -0
  508. package/node_modules/@llblab/pi-telegram/lib/target.ts +49 -0
  509. package/node_modules/@llblab/pi-telegram/lib/telegram-api.ts +1747 -0
  510. package/node_modules/@llblab/pi-telegram/lib/text-groups.ts +487 -0
  511. package/node_modules/@llblab/pi-telegram/lib/thread-reconciler.ts +1002 -0
  512. package/node_modules/@llblab/pi-telegram/lib/threads.ts +3183 -0
  513. package/node_modules/@llblab/pi-telegram/lib/time-injection.ts +78 -0
  514. package/node_modules/@llblab/pi-telegram/lib/turns.ts +753 -0
  515. package/node_modules/@llblab/pi-telegram/lib/updates.ts +4950 -0
  516. package/node_modules/@llblab/pi-telegram/lib/voice.ts +340 -0
  517. package/node_modules/@llblab/pi-telegram/package.json +83 -0
  518. package/node_modules/@llblab/pi-telegram/screenshot.png +0 -0
  519. package/node_modules/@llblab/pi-telegram/scripts/check-downgrade.mjs +435 -0
  520. package/node_modules/@llblab/pi-telegram/skills/generated-control-surface/SKILL.md +241 -0
  521. package/node_modules/@llblab/pi-telegram/skills/generative-apps/SKILL.md +114 -0
  522. package/node_modules/@llblab/pi-telegram/skills/telegram-bridge/SKILL.md +149 -0
  523. package/package.json +67 -0
@@ -0,0 +1,800 @@
1
+ /**
2
+ * Command-template async run lifecycle facade.
3
+ * Owns: launch, state observation, listing, message/control facade methods, and retention while runs-* subdomains own narrower run internals.
4
+ */
5
+ import { spawn } from "node:child_process";
6
+ import { randomUUID } from "node:crypto";
7
+ import { closeSync, existsSync, mkdirSync, openSync, readdirSync, statSync, } from "node:fs";
8
+ import { basename, dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { isDeepStrictEqual } from "node:util";
11
+ import { writeJsonAtomic } from "./file-state.js";
12
+ import { CURRENT_MODEL_VALUE_KEY, CURRENT_THINKING_VALUE_KEY, describeCurrentPolicyProvenance, } from "./model-context.js";
13
+ import * as Paths from "./paths.js";
14
+ import * as RecipesReferences from "./recipes-references.js";
15
+ import * as RecipesUsage from "./recipes-usage.js";
16
+ import * as Schema from "./schema.js";
17
+ import { resolveArtifactPaths, } from "./runs-artifacts.js";
18
+ import { safeRunId } from "./runs-identity.js";
19
+ import { buildTerminalProgress, markTerminalHandled, signalOwnedRunProcess, } from "./runs-control.js";
20
+ import { claimRunStateDirectory } from "./runs-ownership.js";
21
+ import { appendRunRetentionEvidence, archiveTerminalRun, pruneTerminalRun, } from "./runs-retention.js";
22
+ import { captureRunProcessIdentity, verifyRunProcessIdentity, } from "./runs-process.js";
23
+ import * as RuntimeIdentity from "./runtime-identity.js";
24
+ import * as RunsStart from "./runs-start.js";
25
+ import { appendRunTraceEvent } from "./runs-trace.js";
26
+ import * as RunsIndex from "./runs-index.js";
27
+ import * as RunsParentTeardown from "./runs-parent-teardown.js";
28
+ import { deliverRunControl, } from "./runs-control-delivery.js";
29
+ import { buildRunStatus, tailFile, } from "./runs-status.js";
30
+ import { readJsonFileResilient } from "./state-readers.js";
31
+ const RUNNER_IDENTITY_GRACE_MS = 5000;
32
+ export function normalizeRunTransportContext(value) {
33
+ if (!value || typeof value !== "object" || Array.isArray(value))
34
+ return undefined;
35
+ const normalized = {};
36
+ for (const [key, item] of Object.entries(value).slice(0, 16)) {
37
+ const safeKey = key.trim().slice(0, 64);
38
+ if (!safeKey)
39
+ continue;
40
+ if (typeof item === "string") {
41
+ normalized[safeKey] = item.trim().slice(0, 256);
42
+ continue;
43
+ }
44
+ if (typeof item === "number" && Number.isFinite(item)) {
45
+ normalized[safeKey] = item;
46
+ continue;
47
+ }
48
+ if (typeof item === "boolean")
49
+ normalized[safeKey] = item;
50
+ }
51
+ return Object.keys(normalized).length ? normalized : undefined;
52
+ }
53
+ const DEFAULT_STATE_ROOT = Paths.getRunStateRoot();
54
+ const DEFAULT_RECIPE_ROOT = Paths.getRecipeRoot();
55
+ function packageRoot() {
56
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
57
+ if (basename(moduleDir) === "lib" &&
58
+ basename(dirname(moduleDir)) === "dist") {
59
+ return dirname(dirname(moduleDir));
60
+ }
61
+ return dirname(moduleDir);
62
+ }
63
+ const PACKAGE_ROOT = packageRoot();
64
+ const RUNNER_PATH = join(PACKAGE_ROOT, "scripts", "async-runner.mjs");
65
+ function asyncRunnerArgv(stateDir) {
66
+ return existsSync(join(PACKAGE_ROOT, "dist", "lib", "execution.js"))
67
+ ? [RUNNER_PATH, stateDir]
68
+ : ["--experimental-strip-types", RUNNER_PATH, stateDir];
69
+ }
70
+ export { safeRunId } from "./runs-identity.js";
71
+ export { resolveArtifactManifest } from "./runs-artifacts.js";
72
+ function resolveRunTemplate(params) {
73
+ if (!params.template)
74
+ throw new Error("spawn requires file or template.");
75
+ const envelope = {};
76
+ for (const key of [
77
+ "args",
78
+ "defaults",
79
+ "parallel",
80
+ "concurrency",
81
+ "min_successful",
82
+ "label",
83
+ "when",
84
+ "timeout",
85
+ "delay",
86
+ "accept_output",
87
+ "output",
88
+ "retry",
89
+ "failure",
90
+ "recover",
91
+ "repeat",
92
+ ]) {
93
+ if (params[key] !== undefined)
94
+ envelope[key] = params[key];
95
+ }
96
+ if (Object.keys(envelope).length === 0)
97
+ return { template: params.template };
98
+ if (typeof params.template === "object" && !Array.isArray(params.template)) {
99
+ return { template: { ...envelope, ...params.template } };
100
+ }
101
+ return { template: { ...envelope, template: params.template } };
102
+ }
103
+ function resolveStateDir(params, run) {
104
+ return resolve(params.state_dir || join(DEFAULT_STATE_ROOT, run));
105
+ }
106
+ function assertNoActiveRunState(stateDir) {
107
+ RunsStart.assertNoActiveRunState(stateDir, readJson, RUNNER_PATH);
108
+ }
109
+ function reuseCompatibleSingletonRun(stateDir, startParams, singletonValues) {
110
+ const existing = RunsStart.readActiveOwnedRunState(stateDir, readJson, RUNNER_PATH);
111
+ if (!existing)
112
+ return undefined;
113
+ const compatible = existing.singleton === true &&
114
+ existing.singleton_recipe_id === startParams.singleton_recipe_id &&
115
+ existing.ownerId === startParams.ownerId &&
116
+ isDeepStrictEqual(existing.singleton_values ?? {}, singletonValues) &&
117
+ isDeepStrictEqual(existing.control ?? [], startParams.control ?? []);
118
+ if (!compatible) {
119
+ throw new Error(`Active singleton Run ${String(existing.run ?? stateDir)} has incompatible Recipe identity, owner, startup values, or Control contract. Stop it before changing singleton configuration.`);
120
+ }
121
+ return {
122
+ ...existing,
123
+ ...(startParams.launch_source
124
+ ? {
125
+ launch_kind: startParams.launch_source,
126
+ launch_source: startParams.launch_source,
127
+ }
128
+ : {}),
129
+ ...(startParams.launch_correlation
130
+ ? { launch_correlation: startParams.launch_correlation }
131
+ : {}),
132
+ reused: true,
133
+ };
134
+ }
135
+ function resolveRecipeFile(file, cwd, options) {
136
+ const path = RecipesReferences.resolveRecipeReferencePath(file, cwd, options.skillContext);
137
+ if (path)
138
+ return path;
139
+ throw new Error(`Recipe reference not found. Use <skill>/<recipe> or an explicit .json/.md file path: ${file}`);
140
+ }
141
+ function isMutableUsageRecipeFile(file) {
142
+ const userRoot = resolve(DEFAULT_RECIPE_ROOT);
143
+ const resolved = resolve(file);
144
+ const relation = relative(userRoot, resolved);
145
+ return relation !== "" && !relation.startsWith("..") && !isAbsolute(relation);
146
+ }
147
+ function readRecipeFile(file, cwd, options) {
148
+ const path = resolveRecipeFile(file, cwd, options);
149
+ const raw = RecipesReferences.readRawRecipeConfig(path);
150
+ const includeActorRecipeContext = raw?.actor_context !== false && raw?.actor_context !== "off";
151
+ const config = RecipesReferences.readResolvedRecipeConfig(path, [], {
152
+ includeActorRecipeContext,
153
+ skillContext: options.skillContext,
154
+ });
155
+ if (!config) {
156
+ throw new Error(`Template recipe must define template: ${path}`);
157
+ }
158
+ if (config.disabled === true) {
159
+ throw new Error(`Template recipe is disabled: ${path}`);
160
+ }
161
+ return {
162
+ ...config,
163
+ file: path,
164
+ ...(includeActorRecipeContext ? {} : { actor_context: false }),
165
+ };
166
+ }
167
+ function getRunIdFromFile(file) {
168
+ if (!file)
169
+ return undefined;
170
+ const name = basename(file, extname(file));
171
+ return name || undefined;
172
+ }
173
+ function resolveStartParams(params, cwd, options) {
174
+ if (!params.file)
175
+ return params;
176
+ const fileParams = readRecipeFile(params.file, cwd, options);
177
+ const singleton = fileParams.singleton === true;
178
+ if (singleton && fileParams.async !== true) {
179
+ throw new Error("singleton Recipes must declare async: true");
180
+ }
181
+ if (singleton && (!fileParams.singleton_run_id || !fileParams.singleton_recipe_id)) {
182
+ throw new Error("singleton Recipes must resolve one active Skill-owned singleton identity");
183
+ }
184
+ const singletonRun = singleton ? fileParams.singleton_run_id : undefined;
185
+ if (singletonRun && params.run_id && params.run_id !== singletonRun) {
186
+ throw new Error(`singleton Recipe run identity is run:${singletonRun}; received run:${params.run_id}`);
187
+ }
188
+ return {
189
+ ...fileParams,
190
+ ...params,
191
+ ...(singleton ? { singleton: true } : {}),
192
+ run_id: singletonRun ||
193
+ params.run_id ||
194
+ fileParams.run_id ||
195
+ fileParams.name ||
196
+ getRunIdFromFile(fileParams.file),
197
+ values: {
198
+ ...(fileParams.values ?? {}),
199
+ ...(params.values ?? {}),
200
+ ...(fileParams.recipe_dir
201
+ ? { recipe_dir: fileParams.recipe_dir }
202
+ : {}),
203
+ ...(fileParams.skill_dir ? { skill_dir: fileParams.skill_dir } : {}),
204
+ },
205
+ };
206
+ }
207
+ function readJson(path) {
208
+ return readJsonFileResilient(path, undefined).value;
209
+ }
210
+ function isRecord(value) {
211
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
212
+ }
213
+ function isFalsyValue(value) {
214
+ if (value === undefined || value === null || value === false)
215
+ return true;
216
+ const normalized = String(value).trim().toLowerCase();
217
+ return (normalized === "" ||
218
+ normalized === "0" ||
219
+ normalized === "false" ||
220
+ normalized === "no");
221
+ }
222
+ function stringReferencesPlaceholder(value, placeholder) {
223
+ return new RegExp(`\\{\\s*${placeholder}\\s*\\}`).test(value);
224
+ }
225
+ function collectUnresolvedCurrentPlaceholderReferences(value, values, placeholder, valueKey, path = "template", refs = []) {
226
+ if (typeof value === "string") {
227
+ if (stringReferencesPlaceholder(value, placeholder) &&
228
+ isFalsyValue(values[valueKey])) {
229
+ refs.push(path);
230
+ }
231
+ return refs;
232
+ }
233
+ if (Array.isArray(value)) {
234
+ value.forEach((item, index) => collectUnresolvedCurrentPlaceholderReferences(item, values, placeholder, valueKey, `${path}[${index}]`, refs));
235
+ return refs;
236
+ }
237
+ if (!isRecord(value))
238
+ return refs;
239
+ for (const [key, child] of Object.entries(value)) {
240
+ if (key === "defaults" && isRecord(child)) {
241
+ for (const [defaultKey, defaultValue] of Object.entries(child)) {
242
+ if (typeof defaultValue === "string" &&
243
+ stringReferencesPlaceholder(defaultValue, placeholder) &&
244
+ isFalsyValue(values[defaultKey]) &&
245
+ isFalsyValue(values[valueKey])) {
246
+ refs.push(`${path}.defaults.${defaultKey}`);
247
+ }
248
+ }
249
+ continue;
250
+ }
251
+ collectUnresolvedCurrentPlaceholderReferences(child, values, placeholder, valueKey, `${path}.${key}`, refs);
252
+ }
253
+ return refs;
254
+ }
255
+ function assertCurrentPlaceholderReferencesResolved(template, defaults, values, modelPolicy) {
256
+ const checks = [
257
+ {
258
+ label: "model",
259
+ placeholder: "current_model",
260
+ valueKey: CURRENT_MODEL_VALUE_KEY,
261
+ },
262
+ {
263
+ label: "thinking level",
264
+ placeholder: "current_thinking",
265
+ valueKey: CURRENT_THINKING_VALUE_KEY,
266
+ },
267
+ ];
268
+ for (const check of checks) {
269
+ const refs = collectUnresolvedCurrentPlaceholderReferences(template, values, check.placeholder, check.valueKey);
270
+ if (defaults) {
271
+ collectUnresolvedCurrentPlaceholderReferences({ defaults }, values, check.placeholder, check.valueKey, "recipe", refs);
272
+ }
273
+ if (refs.length === 0)
274
+ continue;
275
+ throw Object.assign(new Error(`Template recipe requires the current Pi ${check.label} for inheritance, but no current ${check.label} was available. Pass explicit values or launch from a Pi session with a selected ${check.label}. unresolved=${refs.slice(0, 4).join(",")}`), { model_policy: modelPolicy });
276
+ }
277
+ }
278
+ function acquireStateStartLock(stateDir, options = {}) {
279
+ return RunsStart.acquireStateStartLock(stateDir, options);
280
+ }
281
+ function prepareStateDirForStart(stateDir) {
282
+ RunsStart.prepareStateDirForStart(stateDir, readJson, RUNNER_PATH);
283
+ }
284
+ export function startRun(params, cwd, options = {}) {
285
+ const startParams = resolveStartParams(params, cwd, options);
286
+ const resolved = resolveRunTemplate(startParams);
287
+ const run = safeRunId(startParams.run_id);
288
+ const stateDir = resolveStateDir(startParams, run);
289
+ const recipeFile = startParams.file
290
+ ? resolveRecipeFile(startParams.file, cwd, options)
291
+ : undefined;
292
+ const argSpec = Schema.parseToolArgDeclarationList(startParams.args ?? []);
293
+ if (argSpec.error)
294
+ throw new Error(argSpec.error);
295
+ const declaredArgs = new Set(argSpec.args);
296
+ for (const key of Object.keys(startParams.defaults ?? {})) {
297
+ if (declaredArgs.size > 0 && !declaredArgs.has(key))
298
+ throw new Error(`Unknown Recipe default argument: ${key}`);
299
+ }
300
+ const values = Schema.normalizeRuntimeValues({
301
+ ...argSpec.defaults,
302
+ ...(startParams.defaults || {}),
303
+ ...(startParams.values || {}),
304
+ run_id: run,
305
+ state_dir: stateDir,
306
+ trace_file: join(stateDir, "trace.jsonl"),
307
+ }, argSpec.argTypes);
308
+ const runtimeTemplate = resolved.template &&
309
+ typeof resolved.template === "object" &&
310
+ !Array.isArray(resolved.template)
311
+ ? {
312
+ ...resolved.template,
313
+ defaults: {
314
+ ...(resolved.template.defaults ?? {}),
315
+ ...values,
316
+ },
317
+ }
318
+ : resolved.template;
319
+ const modelPolicy = describeCurrentPolicyProvenance({
320
+ defaults: startParams.defaults,
321
+ template: resolved.template,
322
+ values: startParams.policy_values ?? startParams.values ?? {},
323
+ });
324
+ assertCurrentPlaceholderReferencesResolved(resolved.template, startParams.defaults, values, modelPolicy);
325
+ const singletonValues = Object.fromEntries([...declaredArgs].map((key) => [key, values[key]]));
326
+ if (startParams.singleton !== true)
327
+ assertNoActiveRunState(stateDir);
328
+ mkdirSync(stateDir, { recursive: true });
329
+ const releaseStartLock = acquireStateStartLock(stateDir, {
330
+ onContention: startParams.lifecycleHooks?.onLockContention,
331
+ });
332
+ try {
333
+ claimRunStateDirectory(stateDir, run);
334
+ if (recipeFile &&
335
+ isMutableUsageRecipeFile(recipeFile) &&
336
+ !RecipesUsage.recordRecipeLaunch(recipeFile, new Date(), startParams.launch_source === "tool" ? "tool" : "spawn")) {
337
+ throw new Error(`Recipe launch rejected because its source changed during activation: ${recipeFile}. Reload recipe tools and retry.`);
338
+ }
339
+ if (startParams.singleton === true) {
340
+ const existing = reuseCompatibleSingletonRun(stateDir, startParams, singletonValues);
341
+ if (existing)
342
+ return existing;
343
+ }
344
+ else
345
+ assertNoActiveRunState(stateDir);
346
+ prepareStateDirForStart(stateDir);
347
+ const stdout = join(stateDir, "stdout.log");
348
+ const stderr = join(stateDir, "stderr.log");
349
+ const recipe = startParams.name || getRunIdFromFile(recipeFile);
350
+ const includeActorRecipeContext = startParams.actor_context !== false &&
351
+ startParams.actor_context !== "off";
352
+ const recipeContextRecords = recipeFile && includeActorRecipeContext
353
+ ? RecipesReferences.buildRecipeContextRecords(recipeFile, options.skillContext).map((record, index) => index === 0 &&
354
+ startParams.launch_source === "tool" &&
355
+ record.source_kind === "explicit_file_recipe"
356
+ ? {
357
+ ...record,
358
+ logical_reference: record.name,
359
+ source_kind: "user_registry_capability",
360
+ }
361
+ : record)
362
+ : undefined;
363
+ const outFd = openSync(stdout, "a");
364
+ const errFd = openSync(stderr, "a");
365
+ const argv = asyncRunnerArgv(stateDir);
366
+ const outputValues = {
367
+ ...(startParams.defaults || {}),
368
+ ...values,
369
+ };
370
+ const transportContext = normalizeRunTransportContext(startParams.transport_context);
371
+ const artifacts = resolveArtifactPaths(startParams.artifacts, outputValues);
372
+ const meta = {
373
+ argv: [process.execPath, ...argv],
374
+ createdAt: new Date().toISOString(),
375
+ cwd,
376
+ ...(startParams.launch_source
377
+ ? {
378
+ launch_kind: startParams.launch_source,
379
+ launch_source: startParams.launch_source,
380
+ }
381
+ : {}),
382
+ ...(startParams.launch_correlation
383
+ ? { launch_correlation: startParams.launch_correlation } : {}),
384
+ ...(startParams.ownerId ? { ownerId: startParams.ownerId } : {}),
385
+ pid: 0,
386
+ ...(recipe ? { recipe } : {}),
387
+ ...(recipeFile ? { recipe_file: recipeFile } : {}),
388
+ run,
389
+ run_instance_id: randomUUID(),
390
+ state_dir: stateDir,
391
+ state_schema: RuntimeIdentity.RUN_STATE_SCHEMA,
392
+ status: "running",
393
+ ...(startParams.tool ? { tool: startParams.tool } : {}),
394
+ template: runtimeTemplate,
395
+ values,
396
+ model_policy: modelPolicy,
397
+ ...(artifacts ? { artifacts } : {}),
398
+ ...(startParams.control ? { control: startParams.control } : {}),
399
+ ...(startParams.control_endpoint
400
+ ? { control_endpoint: startParams.control_endpoint }
401
+ : {}),
402
+ ...(startParams.notification_policy === "silent"
403
+ ? { notification_policy: "silent" }
404
+ : {}),
405
+ ...(recipeContextRecords && recipeContextRecords.length > 0
406
+ ? { recipe_context_records: recipeContextRecords }
407
+ : {}),
408
+ ...(startParams.retire_when === "children_terminal"
409
+ ? { retire_when: "children_terminal" }
410
+ : {}),
411
+ ...(startParams.singleton === true
412
+ ? {
413
+ singleton: true,
414
+ singleton_recipe_id: startParams.singleton_recipe_id,
415
+ singleton_values: singletonValues,
416
+ }
417
+ : {}),
418
+ ...(transportContext
419
+ ? { transport_context: transportContext } : {}),
420
+ };
421
+ writeJsonAtomic(join(stateDir, "run.json"), meta);
422
+ writeJsonAtomic(join(stateDir, "progress.json"), {
423
+ completed: 0,
424
+ failures: [],
425
+ model_policy: modelPolicy,
426
+ phase: "starting",
427
+ updatedAt: new Date().toISOString(),
428
+ });
429
+ const child = spawn(process.execPath, argv, {
430
+ cwd,
431
+ detached: true,
432
+ stdio: ["ignore", outFd, errFd],
433
+ });
434
+ closeSync(outFd);
435
+ closeSync(errFd);
436
+ meta.pid = child.pid ?? 0;
437
+ const processIdentity = captureRunProcessIdentity(meta.pid, cwd, stateDir, RUNNER_PATH);
438
+ if (processIdentity)
439
+ meta.process_identity = processIdentity;
440
+ writeJsonAtomic(join(stateDir, "run.json"), meta);
441
+ appendRunTraceEvent(stateDir, {
442
+ kind: "run.start",
443
+ summary: `Run ${run} started`,
444
+ data: {
445
+ pid: meta.pid,
446
+ run_instance_id: meta.run_instance_id,
447
+ },
448
+ });
449
+ child.unref();
450
+ return meta;
451
+ }
452
+ finally {
453
+ releaseStartLock();
454
+ }
455
+ }
456
+ function resolveRunStateDir(runOrDir) {
457
+ return resolve(/[\\/]/u.test(runOrDir)
458
+ ? runOrDir
459
+ : join(DEFAULT_STATE_ROOT, safeRunId(runOrDir)));
460
+ }
461
+ export function getRunStatus(runOrDir) {
462
+ const stateDir = resolveRunStateDir(runOrDir);
463
+ const meta = readJson(join(stateDir, "run.json"));
464
+ if (!meta)
465
+ throw new Error(`Run not found: ${runOrDir}`);
466
+ return buildRunStatus(stateDir, runOrDir, meta, readJson, RUNNER_PATH, RUNNER_IDENTITY_GRACE_MS);
467
+ }
468
+ export function listRunStateDirs(stateRoot = DEFAULT_STATE_ROOT) {
469
+ return RunsIndex.listRunStateDirs(stateRoot);
470
+ }
471
+ export function rebuildRunStateIndex(stateRoot = DEFAULT_STATE_ROOT) {
472
+ return RunsIndex.rebuildRunStateIndex(stateRoot, getRunStatus);
473
+ }
474
+ export function readRunStateIndex(stateRoot = DEFAULT_STATE_ROOT) {
475
+ return RunsIndex.readRunStateIndex(stateRoot, readJson);
476
+ }
477
+ export function listRuns(stateRoot = DEFAULT_STATE_ROOT, statusFilter) {
478
+ return RunsIndex.listRuns(stateRoot, getRunStatus, readJson, statusFilter);
479
+ }
480
+ export function teardownRunsOwnedByParent(ownerId, stateRoot = DEFAULT_STATE_ROOT, options = {}) {
481
+ const result = RunsParentTeardown.teardownParentRuns(ownerId, {
482
+ getRunStatus,
483
+ killRun,
484
+ listRunStatuses: () => {
485
+ const discovered = RunsIndex.discoverRunStateDirs(stateRoot, Number.POSITIVE_INFINITY);
486
+ const failures = discovered.issues.map((issue) => ({
487
+ path: issue.path,
488
+ reason: issue.reason.replaceAll("_", " "),
489
+ }));
490
+ const statuses = discovered.stateDirs.flatMap((stateDir) => {
491
+ try {
492
+ return [getRunStatus(stateDir)];
493
+ }
494
+ catch (error) {
495
+ failures.push({
496
+ path: stateDir,
497
+ reason: error instanceof Error ? error.message : String(error),
498
+ });
499
+ return [];
500
+ }
501
+ });
502
+ return { failures, statuses };
503
+ },
504
+ recordAttempt: (attempt) => {
505
+ const current = getRunStatus(attempt.stateDir);
506
+ if (!attempt.runInstanceId ||
507
+ current.run_instance_id !== attempt.runInstanceId) {
508
+ throw new Error("run generation changed before teardown evidence");
509
+ }
510
+ appendRunTraceEvent(attempt.stateDir, {
511
+ kind: "run.parent_teardown",
512
+ summary: `Parent teardown ${attempt.outcome}`,
513
+ data: {
514
+ outcome: attempt.outcome,
515
+ owner_id: attempt.ownerId,
516
+ reason: attempt.reason,
517
+ run: attempt.run,
518
+ run_instance_id: attempt.runInstanceId,
519
+ trigger: options.trigger ?? "parent_shutdown",
520
+ },
521
+ ...(attempt.outcome === "failed" ? { level: "error" } : {}),
522
+ });
523
+ },
524
+ });
525
+ const summaryPath = join(stateRoot, "teardown", `${Date.now()}-${randomUUID()}.json`);
526
+ try {
527
+ writeJsonAtomic(summaryPath, RunsParentTeardown.buildBoundedParentTeardownSummary(result, ownerId ?? "unknown", options.trigger ?? "parent_shutdown", new Date().toISOString()));
528
+ return { ...result, summaryPath };
529
+ }
530
+ catch (error) {
531
+ const failure = {
532
+ path: summaryPath,
533
+ reason: `summary: ${error instanceof Error ? error.message : String(error)}`,
534
+ };
535
+ return {
536
+ ...result,
537
+ discoveryFailed: result.discoveryFailed + 1,
538
+ discoveryFailures: [...result.discoveryFailures, failure],
539
+ failed: result.failed + 1,
540
+ };
541
+ }
542
+ }
543
+ export function tailRun(runOrDir, lines = 40) {
544
+ const status = getRunStatus(runOrDir);
545
+ const stateDir = String(status.state_dir);
546
+ const trace = tailFile(join(stateDir, "trace.jsonl"), lines);
547
+ if (trace)
548
+ return trace;
549
+ return (tailFile(join(stateDir, "stdout.log"), lines) ||
550
+ tailFile(join(stateDir, "stderr.log"), lines));
551
+ }
552
+ export async function sendRunControl(runOrDir, request, options = {}) {
553
+ const stateDir = resolveRunStateDir(runOrDir);
554
+ const releaseControlLock = RunsStart.acquireStateStartLock(stateDir);
555
+ try {
556
+ const status = getRunStatus(stateDir);
557
+ const run = String(status.run ?? runOrDir);
558
+ if (options.ownerId !== undefined && status.ownerId !== options.ownerId) {
559
+ throw Object.assign(new Error(`Run ownership changed: ${run}`), {
560
+ reason: "owner_mismatch",
561
+ });
562
+ }
563
+ if (status.run_instance_id !== request.run_instance_id) {
564
+ throw Object.assign(new Error(`Run generation changed: ${run}`), {
565
+ reason: "generation_mismatch",
566
+ });
567
+ }
568
+ if (status.status !== "running") {
569
+ throw Object.assign(new Error(`Run is not running: ${run}`), {
570
+ reason: "terminal_state",
571
+ });
572
+ }
573
+ const pid = Number(status.pid || 0);
574
+ const identity = verifyRunProcessIdentity(pid, status.process_identity);
575
+ if (!identity.valid) {
576
+ throw Object.assign(new Error(`Run process identity ${identity.status}: ${run}`), { reason: `process_identity_${identity.status}` });
577
+ }
578
+ return await deliverRunControl(run, stateDir, request, options);
579
+ }
580
+ finally {
581
+ releaseControlLock();
582
+ }
583
+ }
584
+ export { getRunProcessSignalPlan } from "./runs-control.js";
585
+ function markTerminalProgress(stateDir, phase) {
586
+ const existing = readJson(join(stateDir, "progress.json"));
587
+ const progress = existing && typeof existing === "object" && !Array.isArray(existing)
588
+ ? existing
589
+ : undefined;
590
+ writeJsonAtomic(join(stateDir, "progress.json"), buildTerminalProgress(progress, phase));
591
+ }
592
+ function finalizeInterruptedExecution(stateDir, phase, signal) {
593
+ const executionPath = join(stateDir, "execution.json");
594
+ const manifest = readJson(executionPath);
595
+ if (!manifest || typeof manifest !== "object" || Array.isArray(manifest))
596
+ return;
597
+ const record = manifest;
598
+ if (!Array.isArray(record.commands))
599
+ return;
600
+ const completedAt = new Date().toISOString();
601
+ const effectiveExitCode = signal === "SIGKILL" ? 137 : 143;
602
+ const commands = record.commands.map((command) => {
603
+ if (!command || typeof command !== "object" || Array.isArray(command)) {
604
+ return command;
605
+ }
606
+ const entry = command;
607
+ if (entry.status !== "running" || typeof entry.id !== "string")
608
+ return entry;
609
+ const captureDir = join(stateDir, "captures", entry.id);
610
+ const attempts = existsSync(captureDir)
611
+ ? readdirSync(captureDir)
612
+ .filter((name) => /^attempt-\d+$/.test(name))
613
+ .sort()
614
+ .map((name, index) => {
615
+ const attemptDir = join(captureDir, name);
616
+ const stdoutFile = join(attemptDir, "stdout.log");
617
+ const stderrFile = join(attemptDir, "stderr.log");
618
+ return {
619
+ attempt: index + 1,
620
+ stdout: {
621
+ path: relative(stateDir, stdoutFile).replaceAll("\\", "/"),
622
+ bytes: existsSync(stdoutFile) ? statSync(stdoutFile).size : 0,
623
+ },
624
+ stderr: {
625
+ path: relative(stateDir, stderrFile).replaceAll("\\", "/"),
626
+ bytes: existsSync(stderrFile) ? statSync(stderrFile).size : 0,
627
+ },
628
+ };
629
+ })
630
+ : [];
631
+ return {
632
+ ...entry,
633
+ status: phase,
634
+ completed_at: completedAt,
635
+ attempts,
636
+ effective_exit_code: effectiveExitCode,
637
+ killed: true,
638
+ ...(entry.semantic_acceptance === "pending"
639
+ ? { semantic_acceptance: "interrupted" }
640
+ : {}),
641
+ };
642
+ });
643
+ writeJsonAtomic(executionPath, {
644
+ ...record,
645
+ status: phase,
646
+ commands,
647
+ updated_at: completedAt,
648
+ });
649
+ }
650
+ function stopRun(runOrDir, signal, event, expected = {}) {
651
+ const stateDir = resolveRunStateDir(runOrDir);
652
+ const releaseControlLock = RunsStart.acquireStateStartLock(stateDir);
653
+ try {
654
+ expected.onLocked?.();
655
+ const status = getRunStatus(stateDir);
656
+ if (expected.ownerId !== undefined &&
657
+ status.ownerId !== expected.ownerId) {
658
+ return { stopped: false, reason: "ownership changed", status };
659
+ }
660
+ if (expected.runInstanceId !== undefined &&
661
+ status.run_instance_id !== expected.runInstanceId) {
662
+ return { stopped: false, reason: "run generation changed", status };
663
+ }
664
+ const pid = Number(status.pid || 0);
665
+ if (status.status !== "running" && status.status !== "exited") {
666
+ return { stopped: false, reason: "not running", status };
667
+ }
668
+ const identity = verifyRunProcessIdentity(pid, status.process_identity);
669
+ if (status.status === "exited") {
670
+ if (identity.status === "owner_mismatch" ||
671
+ identity.status === "unsupported_proof") {
672
+ return {
673
+ stopped: false,
674
+ reason: identity.status.replaceAll("_", " "),
675
+ process_identity_status: identity.status,
676
+ status,
677
+ };
678
+ }
679
+ return { stopped: false, reason: "not running", status };
680
+ }
681
+ if (!identity.valid) {
682
+ return {
683
+ stopped: false,
684
+ reason: identity.status.replaceAll("_", " "),
685
+ process_identity_status: identity.status,
686
+ status,
687
+ };
688
+ }
689
+ let signalResult;
690
+ try {
691
+ signalResult = signalOwnedRunProcess(pid, signal, status.process_identity);
692
+ }
693
+ catch (error) {
694
+ throw error;
695
+ }
696
+ appendRunTraceEvent(stateDir, {
697
+ kind: event,
698
+ summary: `${event === "run.kill" ? "Killed" : "Cancelled"} Run process`,
699
+ data: { pid, signal, ...signalResult },
700
+ });
701
+ markTerminalHandled(stateDir, { event, signal });
702
+ if (event === "run.kill") {
703
+ finalizeInterruptedExecution(stateDir, "killed", signal);
704
+ markTerminalProgress(stateDir, "killed");
705
+ }
706
+ if (event === "run.cancel") {
707
+ finalizeInterruptedExecution(stateDir, "cancelled", signal);
708
+ markTerminalProgress(stateDir, "cancelled");
709
+ }
710
+ return {
711
+ stopped: true,
712
+ pid,
713
+ signal,
714
+ ...signalResult,
715
+ state_dir: stateDir,
716
+ };
717
+ }
718
+ finally {
719
+ releaseControlLock();
720
+ }
721
+ }
722
+ export function markRunTerminalNotificationHandled(stateDir, status) {
723
+ markTerminalHandled(stateDir, {
724
+ event: "run.notification",
725
+ status,
726
+ });
727
+ }
728
+ export function recordRunTerminalDeliveryFailure(stateDir, status, error) {
729
+ const path = join(stateDir, "terminal-delivery-failure.json");
730
+ const previous = readJson(path);
731
+ const message = (error instanceof Error ? error.message : String(error))
732
+ .replaceAll(/\s+/g, " ")
733
+ .trim()
734
+ .slice(0, 500);
735
+ writeJsonAtomic(path, {
736
+ attempts: Math.max(0, Number(previous?.attempts ?? 0)) + 1,
737
+ error: message || "unknown delivery failure",
738
+ status,
739
+ ts: new Date().toISOString(),
740
+ });
741
+ }
742
+ export function cancelRun(runOrDir, expected = {}) {
743
+ const result = stopRun(runOrDir, "SIGTERM", "run.cancel", expected);
744
+ return Object.hasOwn(result, "stopped")
745
+ ? { cancelled: result.stopped, ...result }
746
+ : result;
747
+ }
748
+ function retainRun(runOrDir, action, expected, options = {}) {
749
+ const stateDir = resolveRunStateDir(runOrDir);
750
+ const releaseControlLock = RunsStart.acquireStateStartLock(stateDir);
751
+ let status;
752
+ let evidenceId;
753
+ try {
754
+ expected.onLocked?.();
755
+ status = getRunStatus(stateDir);
756
+ if (expected.ownerId !== undefined && status.ownerId !== expected.ownerId) {
757
+ return { [`${action}d`]: false, reason: "ownership changed", status };
758
+ }
759
+ if (expected.runInstanceId !== undefined &&
760
+ status.run_instance_id !== expected.runInstanceId) {
761
+ return { [`${action}d`]: false, reason: "run generation changed", status };
762
+ }
763
+ if (status.status === "running") {
764
+ throw new Error("Only terminal runs can be archived or pruned.");
765
+ }
766
+ evidenceId = appendRunRetentionEvidence(status, action, "queued");
767
+ const result = action === "archive"
768
+ ? archiveTerminalRun(status)
769
+ : pruneTerminalRun(status, options);
770
+ appendRunRetentionEvidence(status, action, "handled", {
771
+ id: evidenceId,
772
+ result,
773
+ });
774
+ return { ...result, retention_id: evidenceId };
775
+ }
776
+ catch (error) {
777
+ if (status && evidenceId) {
778
+ appendRunRetentionEvidence(status, action, "failed", {
779
+ error: error instanceof Error ? error.message : String(error),
780
+ id: evidenceId,
781
+ });
782
+ }
783
+ throw error;
784
+ }
785
+ finally {
786
+ releaseControlLock();
787
+ }
788
+ }
789
+ export function archiveRun(runOrDir, expected = {}) {
790
+ return retainRun(runOrDir, "archive", expected);
791
+ }
792
+ export function pruneRun(runOrDir, options = {}, expected = {}) {
793
+ return retainRun(runOrDir, "prune", expected, options);
794
+ }
795
+ export function killRun(runOrDir, expected = {}) {
796
+ const result = stopRun(runOrDir, "SIGKILL", "run.kill", expected);
797
+ return Object.hasOwn(result, "stopped")
798
+ ? { killed: result.stopped, ...result }
799
+ : result;
800
+ }