@codespar/cli 0.12.1 → 0.14.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 (248) hide show
  1. package/README.md +54 -1
  2. package/dist/api.js +1 -3
  3. package/dist/api.js.map +1 -1
  4. package/dist/commands/agent.js +260 -0
  5. package/dist/commands/agent.js.map +1 -0
  6. package/dist/commands/init.js +91 -23
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/mandate-revoke.js +30 -0
  9. package/dist/commands/mandate-revoke.js.map +1 -0
  10. package/dist/config.js +8 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/index.js +36 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/surface.js +1 -1
  15. package/dist/surface.js.map +1 -1
  16. package/package.json +3 -1
  17. package/templates/bills-agent/LICENSE +21 -0
  18. package/templates/bills-agent/README.md +21 -0
  19. package/templates/bills-agent/_gitignore +10 -0
  20. package/templates/bills-agent/agents/bills-agent/.env.example +7 -0
  21. package/templates/bills-agent/agents/bills-agent/AGENTS.md +16 -0
  22. package/templates/bills-agent/agents/bills-agent/CLAUDE.md +16 -0
  23. package/templates/bills-agent/agents/bills-agent/README.md +89 -0
  24. package/templates/bills-agent/agents/bills-agent/SYSTEM_PROMPT.md +23 -0
  25. package/templates/bills-agent/agents/bills-agent/agent.yaml +26 -0
  26. package/templates/bills-agent/agents/bills-agent/channels/terminal/index.ts +108 -0
  27. package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap-mandate.json +9 -0
  28. package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap.json +10 -0
  29. package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap.transcript.jsonl +2 -0
  30. package/templates/bills-agent/agents/bills-agent/evals/adversarial/exfiltration.json +13 -0
  31. package/templates/bills-agent/agents/bills-agent/evals/adversarial/exfiltration.transcript.jsonl +3 -0
  32. package/templates/bills-agent/agents/bills-agent/evals/adversarial/false-authority.json +9 -0
  33. package/templates/bills-agent/agents/bills-agent/evals/adversarial/false-authority.transcript.jsonl +3 -0
  34. package/templates/bills-agent/agents/bills-agent/evals/adversarial/fractioning.json +15 -0
  35. package/templates/bills-agent/agents/bills-agent/evals/adversarial/fractioning.transcript.jsonl +6 -0
  36. package/templates/bills-agent/agents/bills-agent/evals/adversarial/model-total.json +10 -0
  37. package/templates/bills-agent/agents/bills-agent/evals/adversarial/model-total.transcript.jsonl +2 -0
  38. package/templates/bills-agent/agents/bills-agent/evals/adversarial/prompt-injection.json +9 -0
  39. package/templates/bills-agent/agents/bills-agent/evals/adversarial/prompt-injection.transcript.jsonl +2 -0
  40. package/templates/bills-agent/agents/bills-agent/evals/adversarial/webhook-replay.json +9 -0
  41. package/templates/bills-agent/agents/bills-agent/evals/eval.yaml +9 -0
  42. package/templates/bills-agent/agents/bills-agent/guardrails.json +15 -0
  43. package/templates/bills-agent/agents/bills-agent/mandate.example.json +46 -0
  44. package/templates/bills-agent/agents/bills-agent/package.json +24 -0
  45. package/templates/bills-agent/agents/bills-agent/runbook.md +19 -0
  46. package/templates/bills-agent/agents/bills-agent/scenarios/beneficiary-not-allowed.json +14 -0
  47. package/templates/bills-agent/agents/bills-agent/scenarios/beneficiary-not-allowed.transcript.jsonl +2 -0
  48. package/templates/bills-agent/agents/bills-agent/scenarios/cap-exceeded.json +12 -0
  49. package/templates/bills-agent/agents/bills-agent/scenarios/cap-exceeded.transcript.jsonl +2 -0
  50. package/templates/bills-agent/agents/bills-agent/scenarios/escalated-above-threshold.json +20 -0
  51. package/templates/bills-agent/agents/bills-agent/scenarios/escalated-above-threshold.transcript.jsonl +7 -0
  52. package/templates/bills-agent/agents/bills-agent/scenarios/happy-path.json +14 -0
  53. package/templates/bills-agent/agents/bills-agent/scenarios/happy-path.transcript.jsonl +3 -0
  54. package/templates/bills-agent/agents/bills-agent/scenarios/mandate-revoked.json +21 -0
  55. package/templates/bills-agent/agents/bills-agent/scenarios/mandate-revoked.transcript.jsonl +9 -0
  56. package/templates/bills-agent/agents/bills-agent/scenarios/prompt-injection.json +12 -0
  57. package/templates/bills-agent/agents/bills-agent/scenarios/prompt-injection.transcript.jsonl +2 -0
  58. package/templates/bills-agent/agents/bills-agent/src/adversarial.ts +177 -0
  59. package/templates/bills-agent/agents/bills-agent/src/bills.ts +28 -0
  60. package/templates/bills-agent/agents/bills-agent/src/commands/approve.ts +9 -0
  61. package/templates/bills-agent/agents/bills-agent/src/commands/check.ts +13 -0
  62. package/templates/bills-agent/agents/bills-agent/src/commands/consent.ts +26 -0
  63. package/templates/bills-agent/agents/bills-agent/src/commands/decide.ts +45 -0
  64. package/templates/bills-agent/agents/bills-agent/src/commands/deny.ts +7 -0
  65. package/templates/bills-agent/agents/bills-agent/src/commands/eval.ts +37 -0
  66. package/templates/bills-agent/agents/bills-agent/src/commands/reconcile.ts +38 -0
  67. package/templates/bills-agent/agents/bills-agent/src/commands/rerun.ts +65 -0
  68. package/templates/bills-agent/agents/bills-agent/src/commands/resume.ts +30 -0
  69. package/templates/bills-agent/agents/bills-agent/src/main.ts +185 -0
  70. package/templates/bills-agent/agents/bills-agent/src/modules/embedded-consent.ts +125 -0
  71. package/templates/bills-agent/agents/bills-agent/src/modules/pix-out.ts +73 -0
  72. package/templates/bills-agent/agents/bills-agent/src/scenarios.ts +196 -0
  73. package/templates/bills-agent/agents/bills-agent/src/setup.ts +207 -0
  74. package/templates/bills-agent/agents/bills-agent/test/adversarial.test.ts +40 -0
  75. package/templates/bills-agent/agents/bills-agent/test/check.test.ts +85 -0
  76. package/templates/bills-agent/agents/bills-agent/test/cli.test.ts +177 -0
  77. package/templates/bills-agent/agents/bills-agent/test/scenarios.test.ts +73 -0
  78. package/templates/bills-agent/agents/bills-agent/tools.json +51 -0
  79. package/templates/bills-agent/agents/bills-agent/tsconfig.json +11 -0
  80. package/templates/bills-agent/package.json +34 -0
  81. package/templates/bills-agent/packages/agent-core/README.md +19 -0
  82. package/templates/bills-agent/packages/agent-core/package.json +24 -0
  83. package/templates/bills-agent/packages/agent-core/src/agent.ts +125 -0
  84. package/templates/bills-agent/packages/agent-core/src/api/charge-rail.ts +154 -0
  85. package/templates/bills-agent/packages/agent-core/src/api/client.ts +53 -0
  86. package/templates/bills-agent/packages/agent-core/src/api/mandate-status.ts +58 -0
  87. package/templates/bills-agent/packages/agent-core/src/api/rail.ts +101 -0
  88. package/templates/bills-agent/packages/agent-core/src/api/sandbox-payer.ts +45 -0
  89. package/templates/bills-agent/packages/agent-core/src/approval.ts +109 -0
  90. package/templates/bills-agent/packages/agent-core/src/bundle.ts +113 -0
  91. package/templates/bills-agent/packages/agent-core/src/check.ts +171 -0
  92. package/templates/bills-agent/packages/agent-core/src/engine.ts +784 -0
  93. package/templates/bills-agent/packages/agent-core/src/escalate.ts +85 -0
  94. package/templates/bills-agent/packages/agent-core/src/events.ts +40 -0
  95. package/templates/bills-agent/packages/agent-core/src/guardrails.ts +45 -0
  96. package/templates/bills-agent/packages/agent-core/src/hash.ts +49 -0
  97. package/templates/bills-agent/packages/agent-core/src/ids.ts +10 -0
  98. package/templates/bills-agent/packages/agent-core/src/index.ts +29 -0
  99. package/templates/bills-agent/packages/agent-core/src/mandate.ts +100 -0
  100. package/templates/bills-agent/packages/agent-core/src/manifest.ts +76 -0
  101. package/templates/bills-agent/packages/agent-core/src/providers/anthropic.ts +76 -0
  102. package/templates/bills-agent/packages/agent-core/src/providers/replay.ts +63 -0
  103. package/templates/bills-agent/packages/agent-core/src/providers/types.ts +39 -0
  104. package/templates/bills-agent/packages/agent-core/src/rail.ts +87 -0
  105. package/templates/bills-agent/packages/agent-core/src/revocation.ts +30 -0
  106. package/templates/bills-agent/packages/agent-core/src/secrets.ts +30 -0
  107. package/templates/bills-agent/packages/agent-core/src/state/store.ts +307 -0
  108. package/templates/bills-agent/packages/agent-core/src/state-machine.ts +146 -0
  109. package/templates/bills-agent/packages/agent-core/src/stubs/charge-rail.ts +193 -0
  110. package/templates/bills-agent/packages/agent-core/src/stubs/mandate-status.ts +57 -0
  111. package/templates/bills-agent/packages/agent-core/src/stubs/rail.ts +124 -0
  112. package/templates/bills-agent/packages/agent-core/src/tools.ts +55 -0
  113. package/templates/bills-agent/packages/agent-core/src/types.ts +106 -0
  114. package/templates/bills-agent/packages/agent-core/test/approval.test.ts +83 -0
  115. package/templates/bills-agent/packages/agent-core/test/engine.test.ts +524 -0
  116. package/templates/bills-agent/packages/agent-core/test/escalate.test.ts +42 -0
  117. package/templates/bills-agent/packages/agent-core/test/helpers.ts +139 -0
  118. package/templates/bills-agent/packages/agent-core/test/mandate-status.test.ts +153 -0
  119. package/templates/bills-agent/packages/agent-core/test/manifest.test.ts +45 -0
  120. package/templates/bills-agent/packages/agent-core/test/receivables.test.ts +265 -0
  121. package/templates/bills-agent/packages/agent-core/test/secrets.test.ts +28 -0
  122. package/templates/bills-agent/packages/agent-core/test/state-machine.test.ts +67 -0
  123. package/templates/bills-agent/packages/agent-core/test/transitions.type-test.ts +59 -0
  124. package/templates/bills-agent/packages/agent-core/tsconfig.json +10 -0
  125. package/templates/bills-agent/tsconfig.base.json +16 -0
  126. package/templates/bills-agent/vitest.config.ts +12 -0
  127. package/templates/collections-agent/LICENSE +21 -0
  128. package/templates/collections-agent/README.md +20 -0
  129. package/templates/collections-agent/_gitignore +10 -0
  130. package/templates/collections-agent/agents/collections-agent/.env.example +4 -0
  131. package/templates/collections-agent/agents/collections-agent/AGENTS.md +19 -0
  132. package/templates/collections-agent/agents/collections-agent/CLAUDE.md +19 -0
  133. package/templates/collections-agent/agents/collections-agent/README.md +94 -0
  134. package/templates/collections-agent/agents/collections-agent/SYSTEM_PROMPT.md +31 -0
  135. package/templates/collections-agent/agents/collections-agent/agent.yaml +28 -0
  136. package/templates/collections-agent/agents/collections-agent/channels/terminal/index.ts +178 -0
  137. package/templates/collections-agent/agents/collections-agent/channels/webhook/index.ts +131 -0
  138. package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap-mandate.json +11 -0
  139. package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap.json +12 -0
  140. package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap.transcript.jsonl +2 -0
  141. package/templates/collections-agent/agents/collections-agent/evals/adversarial/exfiltration.json +19 -0
  142. package/templates/collections-agent/agents/collections-agent/evals/adversarial/exfiltration.transcript.jsonl +3 -0
  143. package/templates/collections-agent/agents/collections-agent/evals/adversarial/false-authority.json +11 -0
  144. package/templates/collections-agent/agents/collections-agent/evals/adversarial/false-authority.transcript.jsonl +2 -0
  145. package/templates/collections-agent/agents/collections-agent/evals/adversarial/fractioning.json +12 -0
  146. package/templates/collections-agent/agents/collections-agent/evals/adversarial/fractioning.transcript.jsonl +4 -0
  147. package/templates/collections-agent/agents/collections-agent/evals/adversarial/model-total.json +13 -0
  148. package/templates/collections-agent/agents/collections-agent/evals/adversarial/model-total.transcript.jsonl +2 -0
  149. package/templates/collections-agent/agents/collections-agent/evals/adversarial/prompt-injection.json +12 -0
  150. package/templates/collections-agent/agents/collections-agent/evals/adversarial/prompt-injection.transcript.jsonl +2 -0
  151. package/templates/collections-agent/agents/collections-agent/evals/adversarial/webhook-replay.json +11 -0
  152. package/templates/collections-agent/agents/collections-agent/evals/eval.yaml +11 -0
  153. package/templates/collections-agent/agents/collections-agent/guardrails.json +20 -0
  154. package/templates/collections-agent/agents/collections-agent/mandate.example.json +40 -0
  155. package/templates/collections-agent/agents/collections-agent/package.json +29 -0
  156. package/templates/collections-agent/agents/collections-agent/runbook.md +27 -0
  157. package/templates/collections-agent/agents/collections-agent/scenarios/beneficiary-not-allowed.json +42 -0
  158. package/templates/collections-agent/agents/collections-agent/scenarios/beneficiary-not-allowed.transcript.jsonl +3 -0
  159. package/templates/collections-agent/agents/collections-agent/scenarios/cap-exceeded.json +27 -0
  160. package/templates/collections-agent/agents/collections-agent/scenarios/cap-exceeded.transcript.jsonl +3 -0
  161. package/templates/collections-agent/agents/collections-agent/scenarios/charge-expired.json +36 -0
  162. package/templates/collections-agent/agents/collections-agent/scenarios/charge-expired.transcript.jsonl +4 -0
  163. package/templates/collections-agent/agents/collections-agent/scenarios/escalated-above-threshold.json +49 -0
  164. package/templates/collections-agent/agents/collections-agent/scenarios/escalated-above-threshold.transcript.jsonl +5 -0
  165. package/templates/collections-agent/agents/collections-agent/scenarios/happy-path.json +60 -0
  166. package/templates/collections-agent/agents/collections-agent/scenarios/happy-path.transcript.jsonl +4 -0
  167. package/templates/collections-agent/agents/collections-agent/scenarios/instalments.json +49 -0
  168. package/templates/collections-agent/agents/collections-agent/scenarios/instalments.transcript.jsonl +4 -0
  169. package/templates/collections-agent/agents/collections-agent/scenarios/mandate-revoked.json +42 -0
  170. package/templates/collections-agent/agents/collections-agent/scenarios/mandate-revoked.transcript.jsonl +6 -0
  171. package/templates/collections-agent/agents/collections-agent/scenarios/prompt-injection.json +27 -0
  172. package/templates/collections-agent/agents/collections-agent/scenarios/prompt-injection.transcript.jsonl +2 -0
  173. package/templates/collections-agent/agents/collections-agent/src/adversarial.ts +190 -0
  174. package/templates/collections-agent/agents/collections-agent/src/agreements.ts +45 -0
  175. package/templates/collections-agent/agents/collections-agent/src/commands/approve.ts +10 -0
  176. package/templates/collections-agent/agents/collections-agent/src/commands/check.ts +13 -0
  177. package/templates/collections-agent/agents/collections-agent/src/commands/decide.ts +48 -0
  178. package/templates/collections-agent/agents/collections-agent/src/commands/deny.ts +7 -0
  179. package/templates/collections-agent/agents/collections-agent/src/commands/eval.ts +39 -0
  180. package/templates/collections-agent/agents/collections-agent/src/commands/poll.ts +35 -0
  181. package/templates/collections-agent/agents/collections-agent/src/commands/reconcile.ts +38 -0
  182. package/templates/collections-agent/agents/collections-agent/src/commands/rerun.ts +55 -0
  183. package/templates/collections-agent/agents/collections-agent/src/commands/resume.ts +30 -0
  184. package/templates/collections-agent/agents/collections-agent/src/commands/webhook.ts +36 -0
  185. package/templates/collections-agent/agents/collections-agent/src/envelope.ts +103 -0
  186. package/templates/collections-agent/agents/collections-agent/src/main.ts +193 -0
  187. package/templates/collections-agent/agents/collections-agent/src/modules/bolepix-receivables.ts +105 -0
  188. package/templates/collections-agent/agents/collections-agent/src/poll.ts +94 -0
  189. package/templates/collections-agent/agents/collections-agent/src/scenarios.ts +252 -0
  190. package/templates/collections-agent/agents/collections-agent/src/setup.ts +250 -0
  191. package/templates/collections-agent/agents/collections-agent/test/adversarial.test.ts +45 -0
  192. package/templates/collections-agent/agents/collections-agent/test/check.test.ts +51 -0
  193. package/templates/collections-agent/agents/collections-agent/test/cli.test.ts +172 -0
  194. package/templates/collections-agent/agents/collections-agent/test/envelope.test.ts +53 -0
  195. package/templates/collections-agent/agents/collections-agent/test/fixtures/accept-1042.transcript.jsonl +2 -0
  196. package/templates/collections-agent/agents/collections-agent/test/fixtures/accept-1103.transcript.jsonl +2 -0
  197. package/templates/collections-agent/agents/collections-agent/test/scenarios.test.ts +95 -0
  198. package/templates/collections-agent/agents/collections-agent/test/webhook.test.ts +100 -0
  199. package/templates/collections-agent/agents/collections-agent/tools.json +40 -0
  200. package/templates/collections-agent/agents/collections-agent/tsconfig.json +11 -0
  201. package/templates/collections-agent/package.json +35 -0
  202. package/templates/collections-agent/packages/agent-core/README.md +19 -0
  203. package/templates/collections-agent/packages/agent-core/package.json +24 -0
  204. package/templates/collections-agent/packages/agent-core/src/agent.ts +125 -0
  205. package/templates/collections-agent/packages/agent-core/src/api/charge-rail.ts +154 -0
  206. package/templates/collections-agent/packages/agent-core/src/api/client.ts +53 -0
  207. package/templates/collections-agent/packages/agent-core/src/api/mandate-status.ts +58 -0
  208. package/templates/collections-agent/packages/agent-core/src/api/rail.ts +101 -0
  209. package/templates/collections-agent/packages/agent-core/src/api/sandbox-payer.ts +45 -0
  210. package/templates/collections-agent/packages/agent-core/src/approval.ts +109 -0
  211. package/templates/collections-agent/packages/agent-core/src/bundle.ts +113 -0
  212. package/templates/collections-agent/packages/agent-core/src/check.ts +171 -0
  213. package/templates/collections-agent/packages/agent-core/src/engine.ts +784 -0
  214. package/templates/collections-agent/packages/agent-core/src/escalate.ts +85 -0
  215. package/templates/collections-agent/packages/agent-core/src/events.ts +40 -0
  216. package/templates/collections-agent/packages/agent-core/src/guardrails.ts +45 -0
  217. package/templates/collections-agent/packages/agent-core/src/hash.ts +49 -0
  218. package/templates/collections-agent/packages/agent-core/src/ids.ts +10 -0
  219. package/templates/collections-agent/packages/agent-core/src/index.ts +29 -0
  220. package/templates/collections-agent/packages/agent-core/src/mandate.ts +100 -0
  221. package/templates/collections-agent/packages/agent-core/src/manifest.ts +76 -0
  222. package/templates/collections-agent/packages/agent-core/src/providers/anthropic.ts +76 -0
  223. package/templates/collections-agent/packages/agent-core/src/providers/replay.ts +63 -0
  224. package/templates/collections-agent/packages/agent-core/src/providers/types.ts +39 -0
  225. package/templates/collections-agent/packages/agent-core/src/rail.ts +87 -0
  226. package/templates/collections-agent/packages/agent-core/src/revocation.ts +30 -0
  227. package/templates/collections-agent/packages/agent-core/src/secrets.ts +30 -0
  228. package/templates/collections-agent/packages/agent-core/src/state/store.ts +307 -0
  229. package/templates/collections-agent/packages/agent-core/src/state-machine.ts +146 -0
  230. package/templates/collections-agent/packages/agent-core/src/stubs/charge-rail.ts +193 -0
  231. package/templates/collections-agent/packages/agent-core/src/stubs/mandate-status.ts +57 -0
  232. package/templates/collections-agent/packages/agent-core/src/stubs/rail.ts +124 -0
  233. package/templates/collections-agent/packages/agent-core/src/tools.ts +55 -0
  234. package/templates/collections-agent/packages/agent-core/src/types.ts +106 -0
  235. package/templates/collections-agent/packages/agent-core/test/approval.test.ts +83 -0
  236. package/templates/collections-agent/packages/agent-core/test/engine.test.ts +524 -0
  237. package/templates/collections-agent/packages/agent-core/test/escalate.test.ts +42 -0
  238. package/templates/collections-agent/packages/agent-core/test/helpers.ts +139 -0
  239. package/templates/collections-agent/packages/agent-core/test/mandate-status.test.ts +153 -0
  240. package/templates/collections-agent/packages/agent-core/test/manifest.test.ts +45 -0
  241. package/templates/collections-agent/packages/agent-core/test/receivables.test.ts +265 -0
  242. package/templates/collections-agent/packages/agent-core/test/secrets.test.ts +28 -0
  243. package/templates/collections-agent/packages/agent-core/test/state-machine.test.ts +67 -0
  244. package/templates/collections-agent/packages/agent-core/test/transitions.type-test.ts +59 -0
  245. package/templates/collections-agent/packages/agent-core/tsconfig.json +10 -0
  246. package/templates/collections-agent/tsconfig.base.json +16 -0
  247. package/templates/collections-agent/vitest.config.ts +12 -0
  248. package/templates/kits.lock.json +41 -0
package/README.md CHANGED
@@ -84,7 +84,10 @@ codespar init my-agent
84
84
  | `triggers <sub>` | Triggers (webhooks): endpoints, deliveries, DLQ, secret rotation, redelivery |
85
85
  | `execute <tool>` | Run a single tool call in a throwaway session |
86
86
  | `discover <query>` | Search the catalog for tools matching a use case |
87
+ | `agent run <dir>` | Run one turn of an agent directory built on `@codespar/agent-core` (`--input`, `--approve`/`--deny`) through its own `npm start`; same output, same exit code |
88
+ | `eval <dir>` | Run the agent's `npm run check` + `npm run eval` (adversarial suite and scenarios), one line per case; exit 1 on any failure |
87
89
  | `mandate create` | Create a consumer mandate — the agent's allowance. `--slot CURRENCY:METHOD:CAP:PER_TX` (repeatable, e.g. `BRL:pix:50000:1500`) for a unified multi-currency wallet; per-currency caps, no FX |
90
+ | `mandate revoke <id>` | Revoke a consumer mandate (`POST /v1/mandates/{id}/revoke`); active or paused → revoked, terminal. `--reason` goes to the evidence row |
88
91
  | `wallet <consumer>` | Show the consumer's unified wallet, rolled up per currency |
89
92
  | `transfer <consumer>` | Move value between wallet slots (`--from --to --amount [--execute]`); a cross-currency move is a real ramp trade at the real rate, no FX |
90
93
  | `spend` | Execute an agentic spend against a mandate (x402 / USDC / Pix, routed by payee) |
@@ -102,7 +105,7 @@ codespar init my-agent
102
105
  | `connect start <server>` | Start an OAuth Connect Link flow (add `--open`) |
103
106
  | `connect revoke <server>` | Revoke a connection |
104
107
  | `logs tail` | Stream tool-call logs in real time (SSE) |
105
- | `init <name>` | Scaffold a new commerce agent from a template |
108
+ | `init <name> [--template <slug>]` | Scaffold a new commerce agent from a template; `init --list` shows them |
106
109
 
107
110
  ## Global flags
108
111
 
@@ -141,12 +144,62 @@ Resolution order (first match wins):
141
144
 
142
145
  ## Templates
143
146
 
147
+ `codespar init --list` prints this table from the package itself, with a
148
+ one-line description per template.
149
+
144
150
  | Slug | Stack |
145
151
  |------|-------|
146
152
  | `pix-agent` | Node + OpenAI — minimal Pix charge + WhatsApp notify |
147
153
  | `ecommerce-checkout` | Node + Claude — full Complete Loop |
148
154
  | `streaming-chat` | Next.js + Vercel AI — token-by-token streaming |
149
155
  | `multi-tenant` | Next.js + OpenAI — one API key, N tenants |
156
+ | `bills-agent` | Starter kit — the titular's agent pays the month's bills under a signed mandate (`@codespar/agent-core`) |
157
+ | `collections-agent` | Starter kit — the merchant's agent collects: bolepix per instalment, closes on paid/expired (`@codespar/agent-core`) |
158
+
159
+ ### Starter-kit templates
160
+
161
+ `bills-agent` and `collections-agent` are the agents of
162
+ [codespar/agent-starter-kits](https://github.com/codespar/agent-starter-kits),
163
+ copied into this package at release time. `init` never fetches them: what it
164
+ scaffolds is what the published tarball carries, so it works offline and two
165
+ installs of the same CLI version scaffold the same bytes.
166
+
167
+ ```
168
+ codespar init my-bills --template bills-agent
169
+ cd my-bills
170
+ cp agents/bills-agent/.env.example agents/bills-agent/.env # then fill in your keys
171
+ npm install
172
+ npm run consent -- --yes
173
+ npm start
174
+ ```
175
+
176
+ The scaffold mirrors the kits repository: `agents/<name>/` and
177
+ `packages/agent-core/` are the kits' own files, byte for byte, under a
178
+ generated root `package.json` that links them as an npm workspace.
179
+ `@codespar/agent-core` is not published on npm yet, so it travels vendored,
180
+ and the agent's own `"@codespar/agent-core": "0.1.0"` pin resolves to that
181
+ copy exactly as it does in the kits repository. Nothing inside the kit is
182
+ rewritten: `agent.yaml` keeps the kits' `cli:` and `mcp:` pins, and every
183
+ relative path (`../../tsconfig.base.json`, the `.env` the agent reads from
184
+ its own directory, the paths its README names) keeps resolving.
185
+
186
+ `templates/kits.lock.json` records which kits ref was synced (tag or commit),
187
+ the commit it resolved to, and a content hash per template. The release gate
188
+ (`npm run check:kit-templates`, run in CI and in the publish workflow)
189
+ fetches that ref again, rebuilds the templates and fails if the packaged
190
+ trees differ from the lock by a byte — a hand-edited template or a lock
191
+ bumped without a sync does not ship.
192
+
193
+ **To bump the kits** to a new tag or commit, from `packages/cli`:
194
+
195
+ ```
196
+ npm run sync:kit-templates -- --ref <tag-or-sha> # rewrites templates/<kit>/ and the lock
197
+ git add templates && git commit
198
+ ```
199
+
200
+ then bump this package's version (new template content is at least a minor).
201
+ Without `--ref` the sync re-runs at the locked ref, which is the way to
202
+ regenerate the trees after a change to the sync script itself.
150
203
 
151
204
  ## Need more?
152
205
 
package/dist/api.js CHANGED
@@ -16,13 +16,11 @@ import { VERSION } from "./version.js";
16
16
  */
17
17
  export class HttpError extends CliError {
18
18
  status;
19
- code;
20
19
  body;
21
20
  constructor(message, opts) {
22
- super(message);
21
+ super(message, { code: opts.code });
23
22
  this.name = "HttpError";
24
23
  this.status = opts.status;
25
- this.code = opts.code;
26
24
  this.body = opts.body;
27
25
  }
28
26
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,SAAU,SAAQ,QAAQ;IAC5B,MAAM,CAAS;IACf,IAAI,CAAW;IAExB,YAAY,OAAe,EAAE,IAAuD;QAClF,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AA2BD;;;;GAIG;AACH,SAAS,UAAU,CAAC,QAAgB,EAAE,MAA2C;IAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAChB,GAAG,QAAQ,2BAA2B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC7F,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IAGS;IAFZ,SAAS,CAAS;IAEnC,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAClD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,GAAG,CACD,IAAO,EACP,GAAG,IAAyC;QAE5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAY,CAElD,CAAC;IACJ,CAAC;IAED,IAAI,CACF,IAAO,EACP,GAAG,IAA0C;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAY,CAEnD,CAAC;IACJ,CAAC;IAED,KAAK,CACH,IAAO,EACP,GAAG,IAA2C;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAY,CAEpD,CAAC;IACJ,CAAC;IAED,MAAM,CACJ,IAAO,EACP,GAAG,IAA4C;QAE/C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAY,CAErD,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAI,MAA2C,EAAE,IAAY,EAAE,IAAc;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAe,CAAC;IACtF,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,QAAgB,EAAE,UAAmB,EAAE;QAC3E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;oBAAE,SAAS;gBAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC7C,YAAY,EAAE,gBAAgB,OAAO,EAAE;SACxC,CAAC;QACF,mCAAmC;QACnC,EAAE;QACF,2EAA2E;QAC3E,0EAA0E;QAC1E,2BAA2B;QAC3B,EAAE;QACF,oCAAoC;QACpC,mEAAmE;QACnE,gDAAgD;QAChD,EAAE;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,qEAAqE;QACrE,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBACrB,MAAM;gBACN,OAAO;gBACP,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3E,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAAa,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACzC,MAAM,IAAI,QAAQ,CAChB,cAAc,MAAM,IAAI,GAAG,CAAC,QAAQ,oBAAoB,SAAS,KAAK,CACvE,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,QAAQ,CAChB,yBAAyB,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAC7E,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,wEAAwE;YACxE,sEAAsE;YACtE,mEAAmE;YACnE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,MAAM,GAAG,GAAG,CAAC;YACjB,IAAI,IAAI,GAAY,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,IAAI,IAAwB,CAAC;YAC7B,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,oEAAoE;gBACpE,gEAAgE;gBAChE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAI7B,CAAC;gBACF,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC3C,IAAI,GAAG,OAAO,CAAC;oBACf,MAAM,MAAM,GACV,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC5E,IAAI;wBACF,OAAO,CAAC,IAAI;4BACZ,MAAM,EAAE,IAAI;4BACZ,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAClE,MAAM;wBACJ,OAAO,CAAC,OAAO;4BACf,MAAM,EAAE,OAAO;4BACf,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;4BACxD,EAAE,CAAC;gBACP,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;gBAC5D,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * `codespar agent run <dir>` and `codespar eval <dir>`: the CLI as the home
3
+ * of the agent commands (agent-starter-kits, spec v5.1.1 §14.4–14.5).
4
+ *
5
+ * Neither command re-implements the runtime. An agent directory carries its
6
+ * own entry (`npm start`) and its own gates (`npm run check`, `npm run
7
+ * eval`); the CLI resolves the directory's manifest, refuses what is not a
8
+ * `schema: 1` agent, and delegates to those scripts with the same arguments.
9
+ *
10
+ * NAO cite `@codespar/agent-core` no texto que o usuario le. O pacote nao
11
+ * esta publicado no npm: ele mora em `packages/agent-core` do repo
12
+ * `codespar/agent-starter-kits`, e `init --template` o VENDORIZA dentro do
13
+ * projeto gerado (#173). Mandar instalar um pacote que responde 404 e
14
+ * exatamente a falha que estas mensagens existem para evitar. O contrato e
15
+ * o `agent.yaml` mais o `npm start`, e e isso que elas dizem. That is what makes
16
+ * `codespar agent run <dir> --input X` and `npm start -- --input X` the same
17
+ * command: one process, one output.
18
+ */
19
+ import { spawn } from "node:child_process";
20
+ import { existsSync, readFileSync } from "node:fs";
21
+ import { join, resolve } from "node:path";
22
+ import { CliError } from "../config.js";
23
+ import { c, info, json } from "../output.js";
24
+ /** `agent.yaml` schema this CLI knows how to run. */
25
+ export const SUPPORTED_MANIFEST_SCHEMA = 1;
26
+ /**
27
+ * The top-level scalar fields of a YAML document: `key: value` lines at
28
+ * column zero, comments and quotes stripped.
29
+ *
30
+ * Deliberately not a YAML parser. The CLI needs three fields to decide
31
+ * whether a directory is an agent it can run — `schema`, `name`,
32
+ * `version` — and all three are top-level scalars by the manifest schema
33
+ * (`packages/agent-core/src/manifest.ts` in agent-starter-kits). Full
34
+ * validation of the manifest is `npm run check`'s job, which `codespar
35
+ * eval` runs; pulling a YAML dependency into the CLI to read three lines
36
+ * would be a runtime dependency for nothing.
37
+ */
38
+ export function topLevelScalars(text) {
39
+ const out = {};
40
+ for (const line of text.split(/\r?\n/)) {
41
+ const m = /^([A-Za-z_][A-Za-z0-9_-]*):[ \t]*(.*)$/.exec(line);
42
+ if (!m)
43
+ continue;
44
+ let value = m[2];
45
+ // Strip a trailing comment. A `#` inside quotes is part of the value.
46
+ const quoted = /^(["'])(.*?)\1/.exec(value);
47
+ if (quoted)
48
+ value = quoted[2];
49
+ else
50
+ value = value.replace(/\s+#.*$/, "").replace(/^#.*$/, "").trim();
51
+ if (value !== "")
52
+ out[m[1]] = value;
53
+ }
54
+ return out;
55
+ }
56
+ /**
57
+ * Resolve an agent directory: it exists, it carries an `agent.yaml` that
58
+ * declares `schema: 1`, and it has a package.json with scripts to delegate
59
+ * to. Each refusal has a stable `code` so a script can tell "not an agent
60
+ * directory" from "an agent of a schema this CLI does not know".
61
+ */
62
+ export function resolveAgentDir(input) {
63
+ const dir = resolve(input);
64
+ const manifestPath = join(dir, "agent.yaml");
65
+ if (!existsSync(manifestPath)) {
66
+ throw new CliError(`${dir} has no agent.yaml. \`codespar agent run\` and \`codespar eval\` take a directory that has an agent.yaml (schema: 1) and an \`npm start\`. \`codespar init --template bills-agent\` scaffolds one; the kits live in codespar/agent-starter-kits.`, { code: "agent_manifest_missing" });
67
+ }
68
+ const fields = topLevelScalars(readFileSync(manifestPath, "utf8"));
69
+ const schema = fields["schema"];
70
+ if (schema === undefined) {
71
+ throw new CliError(`${manifestPath} declares no \`schema\`; this CLI runs schema ${SUPPORTED_MANIFEST_SCHEMA}.`, {
72
+ code: "agent_manifest_schema_missing",
73
+ });
74
+ }
75
+ if (Number(schema) !== SUPPORTED_MANIFEST_SCHEMA) {
76
+ throw new CliError(`${manifestPath} declares schema ${schema}; this CLI runs schema ${SUPPORTED_MANIFEST_SCHEMA}. Upgrade @codespar/cli, or pin the one agent.yaml names.`, { code: "agent_manifest_unsupported_schema" });
77
+ }
78
+ const packagePath = join(dir, "package.json");
79
+ if (!existsSync(packagePath)) {
80
+ throw new CliError(`${dir} has no package.json; the agent's entry is its \`npm start\`.`, {
81
+ code: "agent_package_missing",
82
+ });
83
+ }
84
+ let scripts = {};
85
+ try {
86
+ const parsed = JSON.parse(readFileSync(packagePath, "utf8"));
87
+ scripts = parsed.scripts ?? {};
88
+ }
89
+ catch {
90
+ throw new CliError(`${packagePath} is not valid JSON.`, { code: "agent_package_invalid" });
91
+ }
92
+ return {
93
+ dir,
94
+ manifestPath,
95
+ name: fields["name"] ?? null,
96
+ version: fields["version"] ?? null,
97
+ scripts,
98
+ };
99
+ }
100
+ function requireScript(agent, script) {
101
+ if (!agent.scripts[script]) {
102
+ throw new CliError(`${agent.dir}/package.json has no \`${script}\` script. An agent directory delegates to \`npm run ${script}\`; add the script, or point the command at a directory that has one (the kits in codespar/agent-starter-kits do).`, { code: "agent_script_missing" });
103
+ }
104
+ }
105
+ const NPM = process.platform === "win32" ? "npm.cmd" : "npm";
106
+ /**
107
+ * `npm run <script> --silent -- <args>` in the agent directory.
108
+ *
109
+ * `--silent` matters for `--json`: without it npm prints its
110
+ * `> name@version start` banner on STDOUT, ahead of the agent's document,
111
+ * and the contract is valid JSON and nothing else there.
112
+ */
113
+ function npmArgs(script, args) {
114
+ return ["run", script, "--silent", "--", ...args];
115
+ }
116
+ function spawnScript(agent, script, args, stdout) {
117
+ return new Promise((done, fail) => {
118
+ const child = spawn(NPM, npmArgs(script, args), {
119
+ cwd: agent.dir,
120
+ stdio: ["inherit", stdout, "inherit"],
121
+ shell: process.platform === "win32",
122
+ });
123
+ let captured = "";
124
+ child.stdout?.on("data", (chunk) => (captured += String(chunk)));
125
+ child.on("error", fail);
126
+ child.on("close", (status, signal) => done({ status, signal, stdout: captured }));
127
+ });
128
+ }
129
+ /**
130
+ * The argument list handed to the agent's entry: the CLI's flags in the
131
+ * spelling `src/main.ts` of a kit agent parses. Pure, so the mapping is
132
+ * testable without a process.
133
+ */
134
+ export function agentRunArgs(opts) {
135
+ if (opts.approve && opts.deny) {
136
+ throw new CliError("--approve and --deny are mutually exclusive.", { code: "agent_decision_conflict" });
137
+ }
138
+ const args = [];
139
+ if (opts.input !== undefined)
140
+ args.push("--input", opts.input);
141
+ if (opts.approve)
142
+ args.push("--approve");
143
+ if (opts.deny)
144
+ args.push("--deny");
145
+ if (opts.json)
146
+ args.push("--json");
147
+ return args;
148
+ }
149
+ /**
150
+ * Run one turn (or the interactive terminal, without `--input`) of the
151
+ * agent in `dir`, through its own `npm start`. stdout and stderr are the
152
+ * child's, untouched: with `--json` the document on stdout is the agent's
153
+ * own, and the exit code is the agent's own (a kit agent answers 3 when an
154
+ * execution is still in flight).
155
+ */
156
+ export async function agentRunCommand(dir, opts) {
157
+ const agent = resolveAgentDir(dir);
158
+ requireScript(agent, "start");
159
+ const args = agentRunArgs(opts);
160
+ if (!opts.json) {
161
+ info(`${agent.name ?? "agent"}${agent.version ? `@${agent.version}` : ""} — npm start${args.length ? ` -- ${args.join(" ")}` : ""}`);
162
+ }
163
+ const result = await spawnScript(agent, "start", args, "inherit");
164
+ if (result.status === null) {
165
+ throw new CliError(`the agent's \`npm start\` was terminated by ${result.signal ?? "a signal"}.`, {
166
+ code: "agent_terminated",
167
+ });
168
+ }
169
+ return result.status;
170
+ }
171
+ function parseDocument(script, stdout) {
172
+ const text = stdout.trim();
173
+ if (text === "") {
174
+ throw new CliError(`\`npm run ${script} -- --json\` wrote nothing on stdout; expected one JSON document.`, {
175
+ code: "agent_eval_unreadable",
176
+ });
177
+ }
178
+ // The document is the LAST line: a script that also prints its human lines
179
+ // on stdout still ends with the machine one.
180
+ const last = text.split("\n").filter((line) => line.trim() !== "").at(-1);
181
+ try {
182
+ return JSON.parse(last);
183
+ }
184
+ catch {
185
+ throw new CliError(`\`npm run ${script} -- --json\` did not end with a JSON document on stdout.`, {
186
+ code: "agent_eval_unreadable",
187
+ });
188
+ }
189
+ }
190
+ /**
191
+ * Flatten the two documents into one case list. Pure: the process-free
192
+ * half of `codespar eval`, and the one the unit tests pin.
193
+ *
194
+ * The manifest check is ONE case, `check/<agent>`, whose failures are its
195
+ * error findings; warnings never fail it, matching `checkAgent`. A
196
+ * scenario runs once per mode it declares, and each run is its own case.
197
+ */
198
+ export function summariseEval(check, evaluation) {
199
+ const checkDoc = (check ?? {});
200
+ const evalDoc = (evaluation ?? {});
201
+ const agent = checkDoc.agent ?? null;
202
+ const cases = [];
203
+ const errors = (checkDoc.findings ?? []).filter((f) => f.level === "error");
204
+ cases.push({
205
+ suite: "check",
206
+ name: agent ?? "agent.yaml",
207
+ ok: checkDoc.ok === true,
208
+ failures: errors.map((f) => `${f.code ?? "error"}: ${f.message ?? ""}`.trim()),
209
+ });
210
+ for (const r of evalDoc.adversarial ?? []) {
211
+ cases.push({ suite: "adversarial", name: r.name ?? "?", ok: r.ok === true, failures: r.failures ?? [] });
212
+ }
213
+ for (const r of evalDoc.scenarios ?? []) {
214
+ cases.push({
215
+ suite: "scenario",
216
+ name: r.name ?? "?",
217
+ ...(r.mode === undefined ? {} : { mode: r.mode }),
218
+ ok: r.ok === true,
219
+ failures: r.failures ?? [],
220
+ });
221
+ }
222
+ // `ok` is the AND of the cases AND of the documents' own verdicts: a
223
+ // document that says `ok: false` with no listed failure is still a failure.
224
+ const ok = cases.every((k) => k.ok) && checkDoc.ok === true && evalDoc.ok === true;
225
+ return { ok, agent, cases, check, eval: evaluation };
226
+ }
227
+ function caseLabel(k) {
228
+ return `${k.suite}/${k.name}${k.mode ? ` [${k.mode}]` : ""}`;
229
+ }
230
+ /**
231
+ * Run the agent's manifest check and its eval suite (adversarial cases plus
232
+ * every scenario in every mode it declares), and report per case. Both
233
+ * scripts run even when the first fails, so one invocation shows the whole
234
+ * picture. Exit 1 on any failing case.
235
+ */
236
+ export async function evalCommand(dir, opts) {
237
+ const agent = resolveAgentDir(dir);
238
+ requireScript(agent, "check");
239
+ requireScript(agent, "eval");
240
+ if (!opts.json)
241
+ info(`${agent.name ?? "agent"}${agent.version ? `@${agent.version}` : ""} — npm run check, npm run eval`);
242
+ const checkRun = await spawnScript(agent, "check", ["--json"], "pipe");
243
+ const evalRun = await spawnScript(agent, "eval", ["--json"], "pipe");
244
+ const report = summariseEval(parseDocument("check", checkRun.stdout), parseDocument("eval", evalRun.stdout));
245
+ if (opts.json) {
246
+ json(report);
247
+ }
248
+ else {
249
+ for (const k of report.cases) {
250
+ const mark = k.ok ? c.green("ok ") : c.red("FAIL");
251
+ process.stdout.write(`${mark} ${caseLabel(k)}${k.failures.length ? ` — ${k.failures.join("; ")}` : ""}\n`);
252
+ }
253
+ const failed = report.cases.filter((k) => !k.ok).length;
254
+ process.stdout.write(report.ok
255
+ ? `${c.green("✓")} ${report.cases.length} case(s) passed\n`
256
+ : `${c.red("✗")} ${failed} of ${report.cases.length} case(s) failed\n`);
257
+ }
258
+ return report.ok ? 0 : 1;
259
+ }
260
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,96 @@
1
1
  import { createInterface } from "node:readline/promises";
2
2
  import { stdin, stdout } from "node:process";
3
3
  import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
4
+ import { readFileSync } from "node:fs";
4
5
  import { dirname, join, resolve } from "node:path";
5
6
  import { fileURLToPath } from "node:url";
6
7
  import { CliError } from "../config.js";
7
8
  import { c, info, json, success } from "../output.js";
8
- const TEMPLATES = [
9
+ const FRAMEWORK_NEXT_STEPS = ["cp .env.example .env # then fill in your keys", "npm install", "npm run dev"];
10
+ const FRAMEWORK_TEMPLATES = [
9
11
  {
10
12
  slug: "pix-agent",
11
13
  label: "Pix Payment Agent",
12
14
  description: "Minimal Pix charge + WhatsApp notification via OpenAI",
13
15
  framework: "OpenAI",
16
+ kind: "framework",
17
+ nextSteps: FRAMEWORK_NEXT_STEPS,
14
18
  },
15
19
  {
16
20
  slug: "ecommerce-checkout",
17
21
  label: "E-Commerce Checkout",
18
22
  description: "Full Complete Loop: checkout → invoice → ship → notify (Claude)",
19
23
  framework: "Claude",
24
+ kind: "framework",
25
+ nextSteps: FRAMEWORK_NEXT_STEPS,
20
26
  },
21
27
  {
22
28
  slug: "streaming-chat",
23
29
  label: "Streaming Chat",
24
30
  description: "Next.js 15 + Vercel AI SDK with token-by-token streaming",
25
31
  framework: "Next.js + Vercel AI",
32
+ kind: "framework",
33
+ nextSteps: FRAMEWORK_NEXT_STEPS,
26
34
  },
27
35
  {
28
36
  slug: "multi-tenant",
29
37
  label: "Multi-Tenant Agent",
30
38
  description: "SaaS pattern — one API key, N tenants, per-tenant billing",
31
39
  framework: "Next.js + OpenAI",
40
+ kind: "framework",
41
+ nextSteps: FRAMEWORK_NEXT_STEPS,
32
42
  },
33
43
  ];
44
+ export const KITS_LOCK_BASENAME = "kits.lock.json";
45
+ /**
46
+ * The kit templates the packaged lock describes. A package without the lock
47
+ * simply has no kit templates: the framework ones must keep working from a
48
+ * tarball that predates the lock, and the release gate is what guarantees a
49
+ * tarball that has it also has every tree it names.
50
+ */
51
+ export function loadKitTemplates(templatesRoot = resolveTemplatesDir()) {
52
+ let raw;
53
+ try {
54
+ raw = readFileSync(join(templatesRoot, KITS_LOCK_BASENAME), "utf8");
55
+ }
56
+ catch (err) {
57
+ if (err.code === "ENOENT")
58
+ return [];
59
+ throw err;
60
+ }
61
+ const lock = JSON.parse(raw);
62
+ if (lock.format !== 1) {
63
+ throw new CliError(`${KITS_LOCK_BASENAME} has format ${lock.format}; this CLI reads format 1. Is the package installation corrupted?`);
64
+ }
65
+ const shortCommit = lock.commit.slice(0, 7);
66
+ return Object.entries(lock.templates)
67
+ .sort(([a], [b]) => a.localeCompare(b))
68
+ .map(([slug, entry]) => ({
69
+ slug,
70
+ label: `${slug} ${entry.version}`,
71
+ description: entry.description,
72
+ framework: `agent-starter-kits @ ${shortCommit}, agent-core vendored`,
73
+ kind: "kit",
74
+ nextSteps: entry.next_steps,
75
+ }));
76
+ }
77
+ export function listTemplates(templatesRoot = resolveTemplatesDir()) {
78
+ const kits = loadKitTemplates(templatesRoot);
79
+ const taken = new Set(FRAMEWORK_TEMPLATES.map((t) => t.slug));
80
+ for (const kit of kits) {
81
+ if (taken.has(kit.slug)) {
82
+ throw new CliError(`Template slug "${kit.slug}" is both a framework template and a kit template. Is the package installation corrupted?`);
83
+ }
84
+ }
85
+ return [...FRAMEWORK_TEMPLATES, ...kits];
86
+ }
34
87
  export async function initCommand(name, opts) {
88
+ if (opts.list) {
89
+ printTemplateList(listTemplates(), Boolean(opts.json));
90
+ return;
91
+ }
35
92
  if (!name)
36
- throw new CliError("Project name is required. Example: `codespar init my-agent`");
93
+ throw new CliError("Project name is required. Example: `codespar init my-agent` (or `codespar init --list`)");
37
94
  if (!/^[a-z0-9][a-z0-9-_]*$/i.test(name)) {
38
95
  throw new CliError("Project name must start with a letter/number and contain only letters, digits, dashes, and underscores.");
39
96
  }
@@ -49,7 +106,8 @@ export async function initCommand(name, opts) {
49
106
  if (err.code !== "ENOENT")
50
107
  throw err;
51
108
  }
52
- const template = await pickTemplate(opts);
109
+ const templates = listTemplates();
110
+ const template = await pickTemplate(templates, opts);
53
111
  info(`Creating ${c.bold(name)} using the ${c.bold(template.label)} template...`);
54
112
  const templatesRoot = resolveTemplatesDir();
55
113
  const source = join(templatesRoot, template.slug);
@@ -59,29 +117,34 @@ export async function initCommand(name, opts) {
59
117
  // Sem isto, `codespar init x --json` escrevia um roteiro de proximos passos
60
118
  // no stdout, que e justamente onde quem automatiza espera um documento.
61
119
  if (opts.json) {
62
- json({ created: name, template: template.slug, path: target });
120
+ json({ created: name, template: template.slug, kind: template.kind, path: target, next_steps: template.nextSteps });
63
121
  return;
64
122
  }
65
- process.stdout.write([
66
- "",
67
- "Next steps:",
68
- ` cd ${name}`,
69
- " cp .env.example .env # then fill in your keys",
70
- " npm install",
71
- " npm run dev",
72
- "",
73
- ].join("\n"));
123
+ process.stdout.write(["", "Next steps:", ` cd ${name}`, ...template.nextSteps.map((s) => ` ${s}`), ""].join("\n"));
124
+ }
125
+ function printTemplateList(templates, asJson) {
126
+ if (asJson) {
127
+ json({ templates: templates.map(({ slug, label, description, framework, kind }) => ({ slug, label, description, framework, kind })) });
128
+ return;
129
+ }
130
+ const width = Math.max(...templates.map((t) => t.slug.length));
131
+ process.stdout.write(c.bold("Templates:\n\n"));
132
+ for (const t of templates) {
133
+ process.stdout.write(` ${c.bold(t.slug.padEnd(width))} ${t.label} ${c.dim(`(${t.framework})`)}\n`);
134
+ process.stdout.write(` ${"".padEnd(width)} ${c.dim(t.description)}\n\n`);
135
+ }
136
+ process.stdout.write(c.dim("codespar init <name> --template <slug>\n"));
74
137
  }
75
- async function pickTemplate(opts) {
138
+ async function pickTemplate(templates, opts) {
76
139
  if (opts.template) {
77
- const t = TEMPLATES.find((x) => x.slug === opts.template);
140
+ const t = templates.find((x) => x.slug === opts.template);
78
141
  if (!t) {
79
- throw new CliError(`Unknown template "${opts.template}". Available: ${TEMPLATES.map((x) => x.slug).join(", ")}`);
142
+ throw new CliError(`Unknown template "${opts.template}". Available: ${templates.map((x) => x.slug).join(", ")} (see \`codespar init --list\`)`);
80
143
  }
81
144
  return t;
82
145
  }
83
146
  if (opts.yes)
84
- return TEMPLATES[0];
147
+ return templates[0];
85
148
  // Mesma armadilha do `login`: sem TTY o menu e impresso, a pergunta nunca
86
149
  // volta e o processo sai 0 sem escrever um arquivo.
87
150
  if (!stdin.isTTY) {
@@ -89,29 +152,34 @@ async function pickTemplate(opts) {
89
152
  }
90
153
  // Interactive pick
91
154
  process.stdout.write(c.bold("Choose a template:\n\n"));
92
- TEMPLATES.forEach((t, i) => {
155
+ templates.forEach((t, i) => {
93
156
  process.stdout.write(` ${c.blue(`${i + 1}.`)} ${c.bold(t.label)} ${c.dim(`(${t.framework})`)}\n`);
94
157
  process.stdout.write(` ${c.dim(t.description)}\n\n`);
95
158
  });
96
159
  const rl = createInterface({ input: stdin, output: stdout });
97
160
  try {
98
- const answer = (await rl.question(`Pick a number [1-${TEMPLATES.length}] (default 1): `)).trim();
161
+ const answer = (await rl.question(`Pick a number [1-${templates.length}] (default 1): `)).trim();
99
162
  const index = answer === "" ? 0 : Number.parseInt(answer, 10) - 1;
100
- if (Number.isNaN(index) || index < 0 || index >= TEMPLATES.length) {
163
+ if (Number.isNaN(index) || index < 0 || index >= templates.length) {
101
164
  throw new CliError(`Invalid choice: ${answer}`);
102
165
  }
103
- return TEMPLATES[index];
166
+ return templates[index];
104
167
  }
105
168
  finally {
106
169
  rl.close();
107
170
  }
108
171
  }
109
- function resolveTemplatesDir() {
172
+ export function resolveTemplatesDir() {
110
173
  // When running from dist/, __dirname is packages/cli/dist/commands.
111
174
  // Templates live at packages/cli/templates, so go up two levels.
112
175
  const here = dirname(fileURLToPath(import.meta.url));
113
176
  return resolve(here, "..", "..", "templates");
114
177
  }
178
+ /**
179
+ * npm drops every `.gitignore` from a tarball, in any directory, so a
180
+ * template ships it as `_gitignore` and it is renamed back on the way out.
181
+ */
182
+ const RENAME_ON_COPY = { _gitignore: ".gitignore" };
115
183
  async function copyTemplate(source, target, vars) {
116
184
  const stats = await stat(source).catch(() => null);
117
185
  if (!stats)
@@ -121,7 +189,7 @@ async function copyTemplate(source, target, vars) {
121
189
  for (const entry of entries) {
122
190
  const srcPath = join(source, entry.name);
123
191
  // Substitute placeholders in file names too (rare but cheap)
124
- const outName = substituteAll(entry.name, vars);
192
+ const outName = substituteAll(RENAME_ON_COPY[entry.name] ?? entry.name, vars);
125
193
  const dstPath = join(target, outName);
126
194
  if (entry.isDirectory()) {
127
195
  await copyTemplate(srcPath, dstPath, vars);
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}