@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,504 @@
1
+ /**
2
+ * Registry mutation use-cases
3
+ * Zones: registry mutations, persistence, runtime activation
4
+ * Owns register/update/delete validation, persistence, runtime side effects, and result payloads
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, unlinkSync } from "node:fs";
7
+ import { dirname, join, relative, resolve } from "node:path";
8
+ import * as CommandTemplates from "./command-templates.js";
9
+ import * as Config from "./config.js";
10
+ import * as ExecutionOutput from "./execution-output.js";
11
+ import { withFileMutationLock, writeJsonAtomic, writeTextAtomic, } from "./file-state.js";
12
+ import * as Identity from "./identity.js";
13
+ import * as Paths from "./paths.js";
14
+ import * as RecipesContext from "./recipes-context.js";
15
+ import * as RecipesDiscovery from "./recipes-discovery.js";
16
+ import * as RecipesReferences from "./recipes-references.js";
17
+ import * as Schema from "./schema.js";
18
+ function textContent(text) {
19
+ return { type: "text", text };
20
+ }
21
+ function listTools(deps) {
22
+ const names = [...deps.getTools().keys()].sort();
23
+ return {
24
+ content: [
25
+ textContent(ExecutionOutput.formatToolText(names.length > 0
26
+ ? `Registered tools:\n${names.map((name) => `- ${name}`).join("\n")}`
27
+ : "No registered tools.")),
28
+ ],
29
+ details: { tool: "register_tool" },
30
+ };
31
+ }
32
+ function getRecipeRoot(deps) {
33
+ return deps.recipeRoot ?? Paths.getRecipeRoot(dirname(deps.configPath));
34
+ }
35
+ function getToolRecipePath(deps, name) {
36
+ return join(getRecipeRoot(deps), `${name}.json`);
37
+ }
38
+ function activationBoundary(activation) {
39
+ if (activation?.callable_now)
40
+ return "current_session";
41
+ if (!activation)
42
+ return "session_activation_unverified";
43
+ if (!activation.host_registered)
44
+ return "host_registration";
45
+ if (!activation.active_tool)
46
+ return "active_tool_set";
47
+ return "callability_verification";
48
+ }
49
+ function recipeDoctorAction(source) {
50
+ return /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(source)
51
+ ? `inspect target=recipes view=doctor identity=${source}`
52
+ : "inspect target=recipes view=doctor";
53
+ }
54
+ function registrationNextActions(tool, source, callableNow) {
55
+ if (callableNow) {
56
+ return [
57
+ `call tool ${tool}`,
58
+ `inspect target=tool:${tool} view=status`,
59
+ ];
60
+ }
61
+ return [
62
+ `inspect target=tool:${tool} view=status`,
63
+ ...(source === "template" || source === "draft"
64
+ ? []
65
+ : [recipeDoctorAction(source)]),
66
+ ];
67
+ }
68
+ function activeSkillSummary(resolutionContext) {
69
+ const names = Object.keys(RecipesReferences.getActiveSkillRecipeNamespaces(resolutionContext.activeSkills))
70
+ .sort()
71
+ .slice(0, 20);
72
+ return names.length > 0 ? names.join(", ") : "<none>";
73
+ }
74
+ function assertDraftPath(deps, draft) {
75
+ const draftRoot = resolve(getRecipeRoot(deps), "drafts");
76
+ const path = resolve(draft);
77
+ const relation = relative(draftRoot, path);
78
+ if (relation === "" ||
79
+ relation.startsWith("..") ||
80
+ resolve(relation) === relation) {
81
+ throw new Error(ExecutionOutput.formatToolText(`Draft must be under ${draftRoot}. Use inspect target=recipes view=summary to list drafts.`));
82
+ }
83
+ if (!existsSync(path)) {
84
+ throw new Error(ExecutionOutput.formatToolText(`Draft not found: ${path}`));
85
+ }
86
+ return path;
87
+ }
88
+ function promoteDraftRecipe(name, input, ctx, deps) {
89
+ const draftPath = assertDraftPath(deps, String(input.draft ?? ""));
90
+ const targetPath = getToolRecipePath(deps, name);
91
+ const tools = deps.getTools();
92
+ const existing = tools.get(name);
93
+ const blocker = deps.getToolNameBlocker(name);
94
+ if (blocker)
95
+ throw new Error(ExecutionOutput.formatToolText(blocker));
96
+ if ((existing || existsSync(targetPath)) && !input.update) {
97
+ throw new Error(ExecutionOutput.formatToolText(`Tool "${name}" already registered. Use update=true to overwrite.`));
98
+ }
99
+ const raw = RecipesReferences.readRawRecipeConfig(draftPath);
100
+ if (!raw) {
101
+ const reason = RecipesReferences.diagnoseRawRecipeConfigFailure(draftPath);
102
+ throw new Error(ExecutionOutput.formatToolText(`Draft recipe is invalid${reason ? `: ${reason}` : "."}`));
103
+ }
104
+ const authoredRecipe = buildAuthoredRecipe({
105
+ ...input,
106
+ description: input.description ??
107
+ (typeof raw.description === "string" ? raw.description : undefined),
108
+ }, existing, raw);
109
+ const resolutionContext = getRegistrationResolutionContext(ctx, deps);
110
+ const candidate = RecipesDiscovery.admitUserRecipe(targetPath, resolutionContext, authoredRecipe);
111
+ if (!candidate.validated || !candidate.tool) {
112
+ throw new Error(ExecutionOutput.formatToolText(`Draft recipe is invalid: ${candidate.diagnostics.join("; ")}`));
113
+ }
114
+ mkdirSync(dirname(targetPath), { recursive: true });
115
+ writeJsonAtomic(targetPath, authoredRecipe);
116
+ const promoted = RecipesDiscovery.admitUserRecipe(targetPath, resolutionContext).tool;
117
+ tools.set(name, promoted);
118
+ const activation = deps.registerRuntimeTool(promoted) ?? undefined;
119
+ const argSummary = RecipesDiscovery.summarizeRegisteredToolArgs(promoted);
120
+ const callableNow = activation?.callable_now ?? false;
121
+ const nextActions = registrationNextActions(name, "draft", callableNow);
122
+ deps.notify(ctx, `Promoted draft recipe: ${name}`, "info");
123
+ return {
124
+ content: [
125
+ textContent(ExecutionOutput.formatToolText(`${existing ? "Updated" : "Registered"} tool "${name}" from draft; callable_now=${callableNow}; next=${nextActions[0]}.`)),
126
+ ],
127
+ details: {
128
+ active_tool: activation?.active_tool ?? false,
129
+ activation: activation?.activation ?? "unverified",
130
+ activation_boundary: activationBoundary(activation),
131
+ args: promoted.args,
132
+ callable_now: callableNow,
133
+ defaults: promoted.defaults,
134
+ host_registered: activation?.host_registered ?? false,
135
+ next_actions: nextActions,
136
+ optional_args: argSummary.optional,
137
+ persisted: true,
138
+ promoted: true,
139
+ registry_active: tools.get(name) === promoted,
140
+ required_args: argSummary.required,
141
+ resolved: true,
142
+ source: "draft",
143
+ tool: name,
144
+ validated: true,
145
+ },
146
+ };
147
+ }
148
+ function persistToolRecipe(deps, name, recipe) {
149
+ const path = getToolRecipePath(deps, name);
150
+ mkdirSync(dirname(path), { recursive: true });
151
+ writeJsonAtomic(path, recipe);
152
+ return path;
153
+ }
154
+ function deleteTool(name, ctx, deps) {
155
+ const tools = deps.getTools();
156
+ if (!tools.has(name)) {
157
+ return {
158
+ content: [
159
+ textContent(ExecutionOutput.formatToolText(`Tool "${name}" not found.`)),
160
+ ],
161
+ details: { tool: name },
162
+ };
163
+ }
164
+ const recipePath = getToolRecipePath(deps, name);
165
+ if (existsSync(recipePath))
166
+ unlinkSync(recipePath);
167
+ tools.delete(name);
168
+ deps.setActiveTools(deps.getActiveTools().filter((toolName) => toolName !== name));
169
+ deps.notify(ctx, `Deleted tool: ${name}`, "info");
170
+ return {
171
+ content: [
172
+ textContent(ExecutionOutput.formatToolText(`Deleted tool "${name}". Reload to remove it from the complete registry.`)),
173
+ ],
174
+ details: { tool: name },
175
+ };
176
+ }
177
+ function readAuthoritativeStoredTool(deps, name) {
178
+ const path = getToolRecipePath(deps, name);
179
+ if (!existsSync(path))
180
+ return { exists: false };
181
+ try {
182
+ const bytes = readFileSync(path, "utf8");
183
+ const recipe = JSON.parse(bytes);
184
+ const normalized = Config.normalizeStoredTool(name, recipe, deps.reservedToolNames);
185
+ if (!normalized.cfg)
186
+ return { bytes, exists: true, recipe };
187
+ return {
188
+ bytes,
189
+ exists: true,
190
+ recipe,
191
+ tool: { ...normalized.cfg, sourcePath: path },
192
+ };
193
+ }
194
+ catch {
195
+ return { exists: true };
196
+ }
197
+ }
198
+ function looksLikeRecipeReference(value) {
199
+ const trimmed = value.trim();
200
+ return (trimmed.endsWith(".json") ||
201
+ trimmed.endsWith(".md") ||
202
+ /^[^/:\\]+\/[^/:\\]+$/.test(trimmed));
203
+ }
204
+ function assertTemplateIsNotNestedRecipe(value) {
205
+ if (!value || typeof value !== "object" || Array.isArray(value))
206
+ return;
207
+ const record = value;
208
+ if (typeof record.template === "string" &&
209
+ looksLikeRecipeReference(record.template) &&
210
+ (Object.keys(record).length === 1 ||
211
+ ["artifacts", "async", "control", "description", "imports", "values"].some((key) => Object.hasOwn(record, key)))) {
212
+ throw new Error(ExecutionOutput.formatToolText("Nested Recipe-shaped templates are not a register_tool source mode. Next: retry with from=<skill>/<recipe> and defaults={...}."));
213
+ }
214
+ }
215
+ function getInputTemplate(value) {
216
+ assertTemplateIsNotNestedRecipe(value);
217
+ if (typeof value === "string")
218
+ return value.trim();
219
+ if (value === null || value === undefined)
220
+ return value;
221
+ if (Array.isArray(value)) {
222
+ const steps = CommandTemplates.expandCommandTemplateConfigs({
223
+ template: value,
224
+ });
225
+ if (steps.length === 0)
226
+ throw new Error(ExecutionOutput.formatToolText("Tool template sequence is empty."));
227
+ return value;
228
+ }
229
+ if (value && typeof value === "object") {
230
+ CommandTemplates.expandCommandTemplateConfigs(value);
231
+ return value;
232
+ }
233
+ throw new Error(ExecutionOutput.formatToolText("Tool template must be a string, object, or sequence."));
234
+ }
235
+ function getRegistrationResolutionContext(ctx, deps) {
236
+ const runtimeContext = deps.getRecipeResolutionContext?.();
237
+ if (runtimeContext)
238
+ return runtimeContext;
239
+ if (ctx && typeof ctx === "object" && "recipeResolutionContext" in ctx) {
240
+ const resolutionContext = ctx.recipeResolutionContext;
241
+ if (resolutionContext)
242
+ return resolutionContext;
243
+ }
244
+ return RecipesContext.createEmptyRecipeResolutionContext("offline-register-tool", getRecipeRoot(deps));
245
+ }
246
+ function normalizeDefaults(value) {
247
+ if (value === undefined)
248
+ return undefined;
249
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
250
+ throw new Error(ExecutionOutput.formatToolText("Tool defaults must be an object."));
251
+ }
252
+ return { ...value };
253
+ }
254
+ function normalizeFromReference(value, resolutionContext) {
255
+ const trimmed = value.trim();
256
+ if (!trimmed) {
257
+ throw new Error(ExecutionOutput.formatToolText("Tool from must be a non-empty Recipe reference. Next: retry register_tool with from=<skill>/<recipe> or an explicit .json/.md path."));
258
+ }
259
+ if (trimmed.startsWith("std:")) {
260
+ throw new Error(ExecutionOutput.formatToolText("std: Recipe references were removed; use <skill>/<recipe> or an explicit .json/.md file path."));
261
+ }
262
+ if (trimmed.startsWith("skill:")) {
263
+ throw new Error(ExecutionOutput.formatToolText(`skill: Recipe references were removed; use ${trimmed.slice("skill:".length)} without a prefix.`));
264
+ }
265
+ if (trimmed.endsWith(".json") || trimmed.endsWith(".md")) {
266
+ return resolve(resolutionContext.cwd, trimmed);
267
+ }
268
+ if (!looksLikeRecipeReference(trimmed)) {
269
+ throw new Error(ExecutionOutput.formatToolText("Tool from must use <skill>/<recipe> or an explicit .json/.md file path."));
270
+ }
271
+ return trimmed;
272
+ }
273
+ function buildAuthoredRecipe(input, existing, existingRecipe) {
274
+ const explicitArgs = input.args === undefined
275
+ ? undefined
276
+ : Schema.parseToolArgDeclarations(input.args);
277
+ if (explicitArgs?.error)
278
+ throw new Error(ExecutionOutput.formatToolText(explicitArgs.error));
279
+ const from = typeof input.from === "string" ? input.from.trim() : "";
280
+ const description = (input.description ?? existing?.description ?? "").trim();
281
+ if (!description && !from) {
282
+ throw new Error(ExecutionOutput.formatToolText("Tool description is required for command-template registration."));
283
+ }
284
+ const inputDefaults = normalizeDefaults(input.defaults);
285
+ if (from) {
286
+ const runtimeOwnedDefault = Object.keys(inputDefaults ?? {}).find((key) => RecipesReferences.isRuntimeOwnedRecipeInput(key));
287
+ if (runtimeOwnedDefault) {
288
+ throw new Error(ExecutionOutput.formatToolText(`Tool defaults cannot set runtime-owned input: ${runtimeOwnedDefault}. Next: remove that default and retry register_tool; the runtime supplies it.`));
289
+ }
290
+ const authored = {
291
+ ...(description ? { description } : {}),
292
+ template: from,
293
+ };
294
+ const retainedDefaults = inputDefaults ??
295
+ (existingRecipe?.defaults && typeof existingRecipe.defaults === "object"
296
+ ? existingRecipe.defaults
297
+ : undefined);
298
+ if (retainedDefaults && Object.keys(retainedDefaults).length > 0)
299
+ authored.defaults = retainedDefaults;
300
+ return authored;
301
+ }
302
+ const template = getInputTemplate(input.template);
303
+ if (template === null) {
304
+ throw new Error(ExecutionOutput.formatToolText("Tool template cannot be null here."));
305
+ }
306
+ const finalTemplate = template === undefined || template === ""
307
+ ? existingRecipe?.template ?? existing?.template
308
+ : template;
309
+ if (!finalTemplate) {
310
+ throw new Error(ExecutionOutput.formatToolText("Tool template is required."));
311
+ }
312
+ const authored = {
313
+ ...(existingRecipe ?? {}),
314
+ description,
315
+ template: finalTemplate,
316
+ };
317
+ if (typeof input.async === "boolean")
318
+ authored.async = input.async;
319
+ if (explicitArgs) {
320
+ authored.args = explicitArgs.declarations;
321
+ const defaults = { ...explicitArgs.defaults, ...(inputDefaults ?? {}) };
322
+ if (Object.keys(defaults).length > 0)
323
+ authored.defaults = defaults;
324
+ else
325
+ delete authored.defaults;
326
+ }
327
+ else if (inputDefaults !== undefined) {
328
+ if (Object.keys(inputDefaults).length > 0)
329
+ authored.defaults = inputDefaults;
330
+ else
331
+ delete authored.defaults;
332
+ }
333
+ return authored;
334
+ }
335
+ function assertRegisterToolInputModes(input) {
336
+ const record = input;
337
+ if (Object.hasOwn(record, "values")) {
338
+ throw new Error(ExecutionOutput.formatToolText("register_tool values was removed. Next: retry register_tool with defaults for caller inputs, or use from=<skill>/<recipe> for maintained composition."));
339
+ }
340
+ const fromProvided = Object.hasOwn(record, "from");
341
+ if (fromProvided &&
342
+ (typeof input.from !== "string" || input.from.trim().length === 0)) {
343
+ throw new Error(ExecutionOutput.formatToolText("Tool from must be a non-empty Recipe reference. Next: retry register_tool with from=<skill>/<recipe> or an explicit .json/.md path."));
344
+ }
345
+ const draftProvided = typeof input.draft === "string" && input.draft.trim().length > 0;
346
+ const templateProvided = Object.hasOwn(record, "template");
347
+ const modeCount = Number(fromProvided) + Number(draftProvided) + Number(templateProvided);
348
+ if (modeCount > 1) {
349
+ throw new Error(ExecutionOutput.formatToolText("Use exactly one register_tool source mode: from, template, or draft. Next: remove the extra source fields and retry register_tool."));
350
+ }
351
+ if (fromProvided &&
352
+ (Object.hasOwn(record, "args") || Object.hasOwn(record, "async"))) {
353
+ throw new Error(ExecutionOutput.formatToolText("register_tool from inherits args and async behavior. Next: retry register_tool with from and optional defaults only; omit args and async."));
354
+ }
355
+ }
356
+ function executeRegisterToolUnlocked(params, ctx, deps) {
357
+ const rawInput = params && typeof params === "object"
358
+ ? params
359
+ : {};
360
+ assertRegisterToolInputModes(rawInput);
361
+ let input = rawInput;
362
+ if (!input.name)
363
+ return listTools(deps);
364
+ const name = Identity.normalizeToolName(input.name);
365
+ if (!name)
366
+ throw new Error(ExecutionOutput.formatToolText("Invalid tool name."));
367
+ if (deps.reservedToolNames.has(name)) {
368
+ throw new Error(ExecutionOutput.formatToolText(`Reserved tool name: ${name}`));
369
+ }
370
+ if (typeof input.draft === "string" && input.draft.trim()) {
371
+ return promoteDraftRecipe(name, input, ctx, deps);
372
+ }
373
+ const resolutionContext = getRegistrationResolutionContext(ctx, deps);
374
+ const requestedSource = typeof rawInput.from === "string" ? rawInput.from.trim() : undefined;
375
+ if (typeof input.from === "string") {
376
+ try {
377
+ input = {
378
+ ...input,
379
+ from: normalizeFromReference(input.from, resolutionContext),
380
+ };
381
+ }
382
+ catch (error) {
383
+ const reason = error instanceof Error ? error.message.trim() : String(error);
384
+ const diagnosticSource = requestedSource?.startsWith("skill:")
385
+ ? requestedSource.slice("skill:".length)
386
+ : requestedSource ?? "";
387
+ throw new Error(ExecutionOutput.formatToolText(`Recipe source "${requestedSource}" is invalid: ${reason}. Active Skills: ${activeSkillSummary(resolutionContext)}. Next: ${recipeDoctorAction(diagnosticSource)}`));
388
+ }
389
+ }
390
+ const templateProvided = Object.hasOwn(input, "template");
391
+ const template = getInputTemplate(input.template);
392
+ if (templateProvided && (template === null || template === ""))
393
+ return deleteTool(name, ctx, deps);
394
+ const tools = deps.getTools();
395
+ const authoritative = readAuthoritativeStoredTool(deps, name);
396
+ const existing = authoritative.tool ?? tools.get(name);
397
+ const blocker = deps.getToolNameBlocker(name);
398
+ if (blocker)
399
+ throw new Error(ExecutionOutput.formatToolText(blocker));
400
+ if ((authoritative.exists || existing) && !input.update) {
401
+ throw new Error(ExecutionOutput.formatToolText(`Tool "${name}" already registered. Use update=true to overwrite.`));
402
+ }
403
+ if (template === undefined && !input.from && !existing) {
404
+ throw new Error(ExecutionOutput.formatToolText("New registration requires exactly one source mode: from, template, or draft. Next: retry register_tool with one source field."));
405
+ }
406
+ const recipePath = getToolRecipePath(deps, name);
407
+ const authoredRecipe = buildAuthoredRecipe(input, existing, authoritative.recipe);
408
+ const candidate = RecipesDiscovery.admitUserRecipe(recipePath, resolutionContext, authoredRecipe);
409
+ if (!candidate.validated || !candidate.tool) {
410
+ const sourceDiagnostic = requestedSource
411
+ ? `Recipe source "${requestedSource}" validation failed: ${candidate.diagnostics.join("; ")}. Active Skills: ${activeSkillSummary(resolutionContext)}. Next: ${recipeDoctorAction(requestedSource)}`
412
+ : `Tool recipe validation failed: ${candidate.diagnostics.join("; ")}`;
413
+ throw new Error(ExecutionOutput.formatToolText(sourceDiagnostic));
414
+ }
415
+ const activeBefore = deps.getActiveTools();
416
+ let persisted = false;
417
+ let activation;
418
+ let cfg;
419
+ let transactionStage = "persist";
420
+ try {
421
+ persistToolRecipe(deps, name, authoredRecipe);
422
+ persisted = true;
423
+ transactionStage = "persisted_admission";
424
+ const admitted = RecipesDiscovery.admitUserRecipe(recipePath, resolutionContext);
425
+ if (!admitted.validated || !admitted.tool) {
426
+ throw new Error(`Persisted tool recipe admission failed: ${admitted.diagnostics.join("; ")}`);
427
+ }
428
+ cfg = admitted.tool;
429
+ tools.set(name, cfg);
430
+ transactionStage = "runtime_activation";
431
+ activation = deps.registerRuntimeTool(cfg) ?? undefined;
432
+ if (activation &&
433
+ (!activation.host_registered ||
434
+ !activation.active_tool ||
435
+ !activation.callable_now)) {
436
+ throw new Error(`Tool "${name}" activation failed at ${activationBoundary(activation)}; host_registered=${activation.host_registered}, active_tool=${activation.active_tool}, callable_now=${activation.callable_now}. Registration was rolled back. Next: inspect target=runtime view=status; do not use spawn as proof of tool invocation.`);
437
+ }
438
+ }
439
+ catch (error) {
440
+ if (persisted) {
441
+ if (authoritative.bytes !== undefined)
442
+ writeTextAtomic(recipePath, authoritative.bytes);
443
+ else if (existsSync(recipePath))
444
+ unlinkSync(recipePath);
445
+ }
446
+ if (existing) {
447
+ tools.set(name, existing);
448
+ deps.registerRuntimeTool(existing);
449
+ }
450
+ else {
451
+ tools.delete(name);
452
+ }
453
+ deps.setActiveTools(activeBefore);
454
+ throw new Error(ExecutionOutput.formatToolText(`Tool registration transaction failed at ${transactionStage} (${resolutionContext.generation}; active Skills: ${activeSkillSummary(resolutionContext)}): ${error instanceof Error ? error.message : String(error)}`));
455
+ }
456
+ deps.notify(ctx, `Tool activated: ${name}`, "info");
457
+ const templateWarnings = CommandTemplates.getCommandTemplateWarnings(typeof cfg.recipe?.template === "object" && !Array.isArray(cfg.recipe.template)
458
+ ? cfg.recipe.template
459
+ : { template: cfg.recipe?.template ?? cfg.template });
460
+ const warningText = templateWarnings.length > 0
461
+ ? `\nWarnings:\n${templateWarnings.map((warning) => `- ${warning}`).join("\n")}`
462
+ : "";
463
+ const callableNow = activation?.callable_now ?? false;
464
+ const source = requestedSource ?? "template";
465
+ const argSummary = RecipesDiscovery.summarizeRegisteredToolArgs(cfg);
466
+ const nextActions = registrationNextActions(name, source, callableNow);
467
+ const outcomeText = callableNow
468
+ ? `${existing ? "Updated" : "Registered"} tool "${name}" from ${source}; callable_now=true`
469
+ : `Persisted tool "${name}" from ${source}; callable_now=false; activation_boundary=${activationBoundary(activation)}`;
470
+ return {
471
+ content: [
472
+ textContent(ExecutionOutput.formatToolText(`${outcomeText}; required=${Schema.formatToolArgs(argSummary.required)}; optional=${Schema.formatToolArgs(argSummary.optional)}; next=${nextActions[0]}.${warningText}`)),
473
+ ],
474
+ details: {
475
+ active_tool: activation?.active_tool ?? false,
476
+ activation: activation?.activation ?? "unverified",
477
+ activation_boundary: activationBoundary(activation),
478
+ args: cfg.args,
479
+ callable_now: callableNow,
480
+ defaults: cfg.defaults,
481
+ host_registered: activation?.host_registered ?? false,
482
+ next_actions: nextActions,
483
+ optional_args: argSummary.optional,
484
+ persisted: true,
485
+ registry_active: tools.get(name) === cfg,
486
+ required_args: argSummary.required,
487
+ resolved: true,
488
+ source,
489
+ ...(cfg.recipe?.async !== undefined ? { async: cfg.recipe.async } : {}),
490
+ ...(templateWarnings.length > 0 ? { templateWarnings } : {}),
491
+ tool: name,
492
+ validated: true,
493
+ },
494
+ };
495
+ }
496
+ export async function executeRegisterTool(params, ctx, deps) {
497
+ const input = params;
498
+ if (!input.name)
499
+ return executeRegisterToolUnlocked(params, ctx, deps);
500
+ const name = Identity.normalizeToolName(input.name);
501
+ if (!name)
502
+ return executeRegisterToolUnlocked(params, ctx, deps);
503
+ return withFileMutationLock(getToolRecipePath(deps, name), () => executeRegisterToolUnlocked(params, ctx, deps));
504
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Automatic recipe-review operator control.
3
+ * Owns: explicit retry/reset transitions over durable draft/tool admission state.
4
+ */
5
+ export type AutomaticReviewScope = "draft" | "tool";
6
+ export type AutomaticReviewControlAction = "review.reset" | "review.retry";
7
+ export interface AutomaticReviewControlOptions {
8
+ draftStatePath?: string;
9
+ scheduleDraft?(): void;
10
+ scheduleTool?(): void;
11
+ toolStatePath?: string;
12
+ }
13
+ export declare function controlAutomaticReview(action: AutomaticReviewControlAction, scope: AutomaticReviewScope, options?: AutomaticReviewControlOptions): Record<string, unknown>;
14
+ export declare function parseAutomaticReviewScope(input: unknown): AutomaticReviewScope;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Automatic recipe-review operator control.
3
+ * Owns: explicit retry/reset transitions over durable draft/tool admission state.
4
+ */
5
+ import { existsSync, readFileSync, rmSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+ import { withFileMutationLock, writeJsonAtomic } from "./file-state.js";
8
+ import * as Paths from "./paths.js";
9
+ function readState(path) {
10
+ try {
11
+ const value = JSON.parse(readFileSync(path, "utf8"));
12
+ return value && typeof value === "object" && !Array.isArray(value)
13
+ ? value
14
+ : undefined;
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ function statePath(scope, options) {
21
+ return scope === "draft"
22
+ ? options.draftStatePath ?? Paths.getDraftSleepStatePath()
23
+ : options.toolStatePath ?? Paths.getToolReviewStatePath();
24
+ }
25
+ function schedule(scope, options) {
26
+ if (scope === "draft")
27
+ options.scheduleDraft?.();
28
+ else
29
+ options.scheduleTool?.();
30
+ }
31
+ export function controlAutomaticReview(action, scope, options = {}) {
32
+ const path = statePath(scope, options);
33
+ const result = withFileMutationLock(path, () => {
34
+ const state = readState(path);
35
+ if (!state) {
36
+ return { action, changed: false, phase: "idle", reason: "review_state_unavailable", scope };
37
+ }
38
+ const phase = String(state.phase ?? "unknown");
39
+ if (action === "review.reset") {
40
+ if (!["completed", "failed", "processing_failed"].includes(phase)) {
41
+ return { action, changed: false, phase, reason: "review_state_not_terminal", scope };
42
+ }
43
+ if (scope === "tool" &&
44
+ (state.approvedPath || state.transactionEvidencePath || state.lineageJournalPath)) {
45
+ return {
46
+ action,
47
+ changed: false,
48
+ phase,
49
+ reason: "review_recovery_evidence_requires_retry",
50
+ scope,
51
+ };
52
+ }
53
+ rmSync(path, { force: true });
54
+ return { action, changed: true, phase: "idle", previous_phase: phase, scope };
55
+ }
56
+ if (!["failed", "processing_failed"].includes(phase)) {
57
+ return { action, changed: false, phase, reason: "review_state_not_retryable", scope };
58
+ }
59
+ const resumeDraftTransaction = scope === "draft" &&
60
+ phase === "processing_failed" &&
61
+ typeof state.inputPath === "string" &&
62
+ typeof state.runId === "string" &&
63
+ existsSync(join(dirname(state.inputPath), "journal.json"));
64
+ const nextPhase = resumeDraftTransaction
65
+ ? "launched"
66
+ : scope === "tool" && state.approvedPath
67
+ ? state.transactionEvidencePath
68
+ ? "lineage_pending"
69
+ : "approved"
70
+ : "captured";
71
+ const next = {
72
+ ...state,
73
+ attempts: 0,
74
+ lastError: undefined,
75
+ nextAction: undefined,
76
+ failedStage: undefined,
77
+ phase: nextPhase,
78
+ processingAttempts: 0,
79
+ runId: resumeDraftTransaction ? state.runId : undefined,
80
+ updatedAt: new Date().toISOString(),
81
+ };
82
+ writeJsonAtomic(path, next);
83
+ return {
84
+ action,
85
+ changed: true,
86
+ phase: nextPhase,
87
+ previous_phase: phase,
88
+ scope,
89
+ };
90
+ });
91
+ if (result.changed === true)
92
+ schedule(scope, options);
93
+ const nextActions = ["inspect target=recipes view=reviews"];
94
+ if (action === "review.retry" &&
95
+ scope === "tool" &&
96
+ (result.phase === "approved" || result.phase === "lineage_pending"))
97
+ nextActions.push("/reload");
98
+ return {
99
+ ...result,
100
+ next_actions: nextActions,
101
+ };
102
+ }
103
+ export function parseAutomaticReviewScope(input) {
104
+ const record = input && typeof input === "object" && !Array.isArray(input)
105
+ ? input
106
+ : {};
107
+ if (record.scope === "draft" || record.scope === "tool")
108
+ return record.scope;
109
+ throw new Error("review Control requires input.scope=draft or input.scope=tool.");
110
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Automatic recipe-review diagnostics.
3
+ * Zones: bounded draft/tool cycle evidence, lineage summaries, revision snapshot inventory
4
+ * Owns read-only diagnostic projection; schedulers and transactions own mutation.
5
+ */
6
+ export interface AutomaticReviewDiagnosticOptions {
7
+ draftStatePath?: string;
8
+ recipeRoot?: string;
9
+ toolStatePath?: string;
10
+ }
11
+ export declare function readAutomaticReviewDiagnostics(options?: AutomaticReviewDiagnosticOptions): Record<string, unknown>;