@codespar/cli 0.13.0 → 0.14.1

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 +51 -1
  2. package/dist/commands/agent.js +13 -7
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/init.js +91 -23
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/login.js +2 -1
  7. package/dist/commands/login.js.map +1 -1
  8. package/dist/commands/mandate-verify.js +75 -27
  9. package/dist/commands/mandate-verify.js.map +1 -1
  10. package/dist/config.js +17 -1
  11. package/dist/config.js.map +1 -1
  12. package/dist/did.js +262 -41
  13. package/dist/did.js.map +1 -1
  14. package/dist/index.js +23 -8
  15. package/dist/index.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
@@ -105,7 +105,7 @@ codespar init my-agent
105
105
  | `connect start <server>` | Start an OAuth Connect Link flow (add `--open`) |
106
106
  | `connect revoke <server>` | Revoke a connection |
107
107
  | `logs tail` | Stream tool-call logs in real time (SSE) |
108
- | `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 |
109
109
 
110
110
  ## Global flags
111
111
 
@@ -144,12 +144,62 @@ Resolution order (first match wins):
144
144
 
145
145
  ## Templates
146
146
 
147
+ `codespar init --list` prints this table from the package itself, with a
148
+ one-line description per template.
149
+
147
150
  | Slug | Stack |
148
151
  |------|-------|
149
152
  | `pix-agent` | Node + OpenAI — minimal Pix charge + WhatsApp notify |
150
153
  | `ecommerce-checkout` | Node + Claude — full Complete Loop |
151
154
  | `streaming-chat` | Next.js + Vercel AI — token-by-token streaming |
152
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.
153
203
 
154
204
  ## Need more?
155
205
 
@@ -2,11 +2,17 @@
2
2
  * `codespar agent run <dir>` and `codespar eval <dir>`: the CLI as the home
3
3
  * of the agent commands (agent-starter-kits, spec v5.1.1 §14.4–14.5).
4
4
  *
5
- * Neither command re-implements the runtime. An agent directory built on
6
- * `@codespar/agent-core` already carries its own entry (`npm start`) and its
7
- * own gates (`npm run check`, `npm run eval`); the CLI resolves the
8
- * directory's manifest, refuses what is not a `schema: 1` agent, and
9
- * delegates to those scripts with the same arguments. That is what makes
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
10
16
  * `codespar agent run <dir> --input X` and `npm start -- --input X` the same
11
17
  * command: one process, one output.
12
18
  */
@@ -57,7 +63,7 @@ export function resolveAgentDir(input) {
57
63
  const dir = resolve(input);
58
64
  const manifestPath = join(dir, "agent.yaml");
59
65
  if (!existsSync(manifestPath)) {
60
- throw new CliError(`${dir} has no agent.yaml. \`codespar agent run\` and \`codespar eval\` take an agent directory built on @codespar/agent-core (schema: 1).`, { code: "agent_manifest_missing" });
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" });
61
67
  }
62
68
  const fields = topLevelScalars(readFileSync(manifestPath, "utf8"));
63
69
  const schema = fields["schema"];
@@ -93,7 +99,7 @@ export function resolveAgentDir(input) {
93
99
  }
94
100
  function requireScript(agent, script) {
95
101
  if (!agent.scripts[script]) {
96
- throw new CliError(`${agent.dir}/package.json has no \`${script}\` script. An agent directory delegates to \`npm run ${script}\`; add it, or run inside an agent built on @codespar/agent-core.`, { code: "agent_script_missing" });
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" });
97
103
  }
98
104
  }
99
105
  const NPM = process.platform === "win32" ? "npm.cmd" : "npm";
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
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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"}
@@ -1,4 +1,5 @@
1
1
  import { createInterface } from "node:readline/promises";
2
+ import { DEFAULT_BASE_URL } from "../did.js";
2
3
  import { stdin as input, stdout as output } from "node:process";
3
4
  import { loadConfig, saveConfig, CliError } from "../config.js";
4
5
  import { ApiClient } from "../api.js";
@@ -61,7 +62,7 @@ export async function loginCommand(opts) {
61
62
  // que `loadConfig()` ja faz. Lendo so a env, o `login` pulava o arquivo que
62
63
  // ELE MESMO grava: depois de `login --base-url <staging>`, um `login` seco
63
64
  // validava a chave contra producao.
64
- const baseUrl = opts.baseUrl ?? (await loadConfig()).baseUrl ?? "https://api.codespar.dev";
65
+ const baseUrl = opts.baseUrl ?? (await loadConfig()).baseUrl ?? DEFAULT_BASE_URL;
65
66
  // Validate before saving so we don't persist a typo.
66
67
  const client = new ApiClient({ apiKey, baseUrl });
67
68
  const me = await client.get("/v1/whoami");
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,37 @@
1
1
  import { CliError } from "../config.js";
2
2
  import { c, info, json, kv, success, warn } from "../output.js";
3
3
  import { agentDidFromKid, decodeToken, parsePubkeyHex, reconstructSigningString, verifyEd25519, } from "../mandate-codec.js";
4
- import { resolveDidKeys } from "../did.js";
5
- /** did:web platform issuer DID derived from an agent DID's host segment. */
4
+ import { DidConfigError, didWebParts, parseBaseUrl, parseIdentityHost, resolveDidKeys, } from "../did.js";
5
+ /** did:web platform issuer DID: the agent DID's validated host segment, alone. */
6
6
  function platformIssuerDid(agentDid) {
7
- if (!agentDid.startsWith("did:web:"))
8
- return null;
9
- const host = agentDid.slice("did:web:".length).split(":")[0];
10
- return host ? `did:web:${host}` : null;
7
+ const parts = didWebParts(agentDid);
8
+ return parts ? `did:web:${parts.hostSegment}` : null;
9
+ }
10
+ /**
11
+ * Say on stderr when a key did not come from the DID's own domain. A resolver
12
+ * is a third party the user opted into; the API route is the deployment's own
13
+ * service answering for its own domain. Either way the user should see that
14
+ * the domain itself did not answer.
15
+ */
16
+ function announceSource(did, resolved) {
17
+ if (resolved.source === "resolver") {
18
+ warn(`${did}: keys came from the resolver at ${resolved.tried[resolved.tried.length - 1]}, ` +
19
+ `not from the domain's did:web document`);
20
+ }
21
+ else if (resolved.source === "fallback") {
22
+ info(`${did}: did:web document unreachable; keys came from the API's DID route`);
23
+ }
24
+ }
25
+ /** Turn a configuration error from the DID layer into a CliError naming the flag. */
26
+ function cliConfig(flag, fn) {
27
+ try {
28
+ return fn();
29
+ }
30
+ catch (err) {
31
+ if (err instanceof DidConfigError)
32
+ throw new CliError(`${flag}: ${err.message}.`);
33
+ throw err;
34
+ }
11
35
  }
12
36
  /** Try a signature against a set of candidate keys; first hit wins. */
13
37
  function verifyAgainst(signingString, sig, keys) {
@@ -25,7 +49,11 @@ function verifyAgainst(signingString, sig, keys) {
25
49
  * Offline mode (any --agent-pubkey / --issuer-pubkey given): verify the named
26
50
  * signatures against the supplied raw Ed25519 keys with zero network calls.
27
51
  * Network mode (no pubkey flags): resolve the agent + issuer public keys from
28
- * their did:web documents (standard route, api.codespar.dev fallback) and verify.
52
+ * their did:web documents and verify. The domain named in the DID is the
53
+ * authority; the configured API's DID route is consulted only for a DID under
54
+ * one of the deployment's identity hosts whose document is unreachable, and
55
+ * `--resolver <url>` opts into a resolver for any DID, announced on stderr
56
+ * when it is the source. The two DIDs resolve in parallel.
29
57
  *
30
58
  * A signature the token carries must verify for an overall pass. In offline mode
31
59
  * a signature with no supplied key is "skipped" (not proven, not failed); at
@@ -50,8 +78,28 @@ export async function mandateVerifyCommand(token, opts) {
50
78
  const offline = Boolean(opts.agentPubkey || opts.issuerPubkey);
51
79
  const agentKid = t.kid ?? m.agent_kid ?? undefined;
52
80
  const agentDid = agentKid ? agentDidFromKid(agentKid) : undefined;
81
+ const issuerDid = opts.issuerDid ?? (agentDid ? platformIssuerDid(agentDid) : null);
82
+ // Validate every URL and host before any request, so a typo is a CliError
83
+ // and never a rejection inside the parallel resolution below.
84
+ const resolverUrl = opts.resolver === undefined
85
+ ? undefined
86
+ : cliConfig("--resolver", () => parseBaseUrl(opts.resolver, "--resolver").toString());
87
+ const didDomains = (opts.didDomains ?? []).map((h) => cliConfig("--did-domain", () => parseIdentityHost(h)));
88
+ if (!offline)
89
+ cliConfig("--base-url", () => parseBaseUrl(opts.baseUrl, "--base-url"));
90
+ // Network mode resolves both DIDs at once: sequentially, two unreachable
91
+ // documents with a resolver and a fallback each are four timeouts in a row.
92
+ const resolveOpts = { baseUrl: opts.baseUrl, resolverUrl, didDomains };
93
+ const [agentResolved, issuerResolved] = offline
94
+ ? [null, null]
95
+ : await Promise.all([
96
+ t.agent_sig && agentDid
97
+ ? resolveDidKeys(agentDid, { ...resolveOpts, preferredKid: agentKid })
98
+ : null,
99
+ t.issuer_sig && issuerDid ? resolveDidKeys(issuerDid, resolveOpts) : null,
100
+ ]);
53
101
  // ── Agent signature ──────────────────────────────────────────────
54
- const agent = { present: Boolean(t.agent_sig), status: "skipped", source: "-" };
102
+ const agent = { present: Boolean(t.agent_sig), status: "skipped", source: null };
55
103
  if (t.agent_sig) {
56
104
  if (offline) {
57
105
  if (opts.agentPubkey) {
@@ -69,22 +117,21 @@ export async function mandateVerifyCommand(token, opts) {
69
117
  }
70
118
  }
71
119
  else {
72
- agent.source = "did:web";
73
- if (!agentDid) {
120
+ if (!agentDid || !agentResolved) {
74
121
  agent.status = "failed";
122
+ agent.source = null;
75
123
  agent.detail = "token carries no agent_kid to resolve";
76
124
  }
77
125
  else {
78
- const keys = await resolveDidKeys(agentDid, {
79
- baseUrl: opts.baseUrl,
80
- preferredKid: agentKid,
81
- });
82
- if (keys.length === 0) {
126
+ const resolved = agentResolved;
127
+ agent.source = resolved.source;
128
+ if (resolved.keys.length === 0) {
83
129
  agent.status = "failed";
84
- agent.detail = `could not resolve ${agentDid}`;
130
+ agent.detail = `could not resolve ${agentDid}: ${resolved.detail}`;
85
131
  }
86
132
  else {
87
- const hit = verifyAgainst(signingString, t.agent_sig, keys);
133
+ announceSource(agentDid, resolved);
134
+ const hit = verifyAgainst(signingString, t.agent_sig, resolved.keys);
88
135
  agent.status = hit ? "verified" : "failed";
89
136
  agent.kid = hit?.kid ?? agentKid;
90
137
  }
@@ -92,7 +139,7 @@ export async function mandateVerifyCommand(token, opts) {
92
139
  }
93
140
  }
94
141
  // ── Issuer signature ─────────────────────────────────────────────
95
- const issuer = { present: Boolean(t.issuer_sig), status: "skipped", source: "-" };
142
+ const issuer = { present: Boolean(t.issuer_sig), status: "skipped", source: null };
96
143
  if (t.issuer_sig) {
97
144
  if (offline) {
98
145
  if (opts.issuerPubkey) {
@@ -109,22 +156,23 @@ export async function mandateVerifyCommand(token, opts) {
109
156
  }
110
157
  }
111
158
  else {
112
- issuer.source = "did:web";
113
- const issuerDid = opts.issuerDid ?? (agentDid ? platformIssuerDid(agentDid) : null);
114
- if (!issuerDid) {
159
+ if (!issuerDid || !issuerResolved) {
115
160
  issuer.status = "failed";
161
+ issuer.source = null;
116
162
  issuer.detail = "no issuer DID (pass --issuer-did)";
117
163
  }
118
164
  else {
119
165
  // The envelope names the agent kid, not the issuer's, so try every
120
166
  // Ed25519 key the issuer document publishes.
121
- const keys = await resolveDidKeys(issuerDid, { baseUrl: opts.baseUrl });
122
- if (keys.length === 0) {
167
+ const resolved = issuerResolved;
168
+ issuer.source = resolved.source;
169
+ if (resolved.keys.length === 0) {
123
170
  issuer.status = "failed";
124
- issuer.detail = `could not resolve ${issuerDid}`;
171
+ issuer.detail = `could not resolve ${issuerDid}: ${resolved.detail}`;
125
172
  }
126
173
  else {
127
- const hit = verifyAgainst(signingString, t.issuer_sig, keys);
174
+ announceSource(issuerDid, resolved);
175
+ const hit = verifyAgainst(signingString, t.issuer_sig, resolved.keys);
128
176
  issuer.status = hit ? "verified" : "failed";
129
177
  issuer.kid = hit?.kid;
130
178
  }
@@ -216,7 +264,7 @@ function sigLine(r) {
216
264
  const bits = [statusMark(r.status)];
217
265
  if (r.kid)
218
266
  bits.push(c.gray(`kid ${r.kid}`));
219
- if (r.source && r.source !== "-")
267
+ if (r.source)
220
268
  bits.push(c.gray(`via ${r.source}`));
221
269
  if (r.detail)
222
270
  bits.push(c.gray(`(${r.detail})`));
@@ -227,7 +275,7 @@ function sigJson(r) {
227
275
  present: r.present,
228
276
  status: r.present ? r.status : "absent",
229
277
  kid: r.kid ?? null,
230
- source: r.source === "-" ? null : r.source,
278
+ source: r.source,
231
279
  detail: r.detail ?? null,
232
280
  };
233
281
  }