@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.
- package/README.md +51 -1
- package/dist/commands/agent.js +13 -7
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/init.js +91 -23
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +2 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mandate-verify.js +75 -27
- package/dist/commands/mandate-verify.js.map +1 -1
- package/dist/config.js +17 -1
- package/dist/config.js.map +1 -1
- package/dist/did.js +262 -41
- package/dist/did.js.map +1 -1
- package/dist/index.js +23 -8
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/templates/bills-agent/LICENSE +21 -0
- package/templates/bills-agent/README.md +21 -0
- package/templates/bills-agent/_gitignore +10 -0
- package/templates/bills-agent/agents/bills-agent/.env.example +7 -0
- package/templates/bills-agent/agents/bills-agent/AGENTS.md +16 -0
- package/templates/bills-agent/agents/bills-agent/CLAUDE.md +16 -0
- package/templates/bills-agent/agents/bills-agent/README.md +89 -0
- package/templates/bills-agent/agents/bills-agent/SYSTEM_PROMPT.md +23 -0
- package/templates/bills-agent/agents/bills-agent/agent.yaml +26 -0
- package/templates/bills-agent/agents/bills-agent/channels/terminal/index.ts +108 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap-mandate.json +9 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap.json +10 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/beneficiary-swap.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/exfiltration.json +13 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/exfiltration.transcript.jsonl +3 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/false-authority.json +9 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/false-authority.transcript.jsonl +3 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/fractioning.json +15 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/fractioning.transcript.jsonl +6 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/model-total.json +10 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/model-total.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/prompt-injection.json +9 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/prompt-injection.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/evals/adversarial/webhook-replay.json +9 -0
- package/templates/bills-agent/agents/bills-agent/evals/eval.yaml +9 -0
- package/templates/bills-agent/agents/bills-agent/guardrails.json +15 -0
- package/templates/bills-agent/agents/bills-agent/mandate.example.json +46 -0
- package/templates/bills-agent/agents/bills-agent/package.json +24 -0
- package/templates/bills-agent/agents/bills-agent/runbook.md +19 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/beneficiary-not-allowed.json +14 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/beneficiary-not-allowed.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/cap-exceeded.json +12 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/cap-exceeded.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/escalated-above-threshold.json +20 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/escalated-above-threshold.transcript.jsonl +7 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/happy-path.json +14 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/happy-path.transcript.jsonl +3 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/mandate-revoked.json +21 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/mandate-revoked.transcript.jsonl +9 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/prompt-injection.json +12 -0
- package/templates/bills-agent/agents/bills-agent/scenarios/prompt-injection.transcript.jsonl +2 -0
- package/templates/bills-agent/agents/bills-agent/src/adversarial.ts +177 -0
- package/templates/bills-agent/agents/bills-agent/src/bills.ts +28 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/approve.ts +9 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/check.ts +13 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/consent.ts +26 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/decide.ts +45 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/deny.ts +7 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/eval.ts +37 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/reconcile.ts +38 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/rerun.ts +65 -0
- package/templates/bills-agent/agents/bills-agent/src/commands/resume.ts +30 -0
- package/templates/bills-agent/agents/bills-agent/src/main.ts +185 -0
- package/templates/bills-agent/agents/bills-agent/src/modules/embedded-consent.ts +125 -0
- package/templates/bills-agent/agents/bills-agent/src/modules/pix-out.ts +73 -0
- package/templates/bills-agent/agents/bills-agent/src/scenarios.ts +196 -0
- package/templates/bills-agent/agents/bills-agent/src/setup.ts +207 -0
- package/templates/bills-agent/agents/bills-agent/test/adversarial.test.ts +40 -0
- package/templates/bills-agent/agents/bills-agent/test/check.test.ts +85 -0
- package/templates/bills-agent/agents/bills-agent/test/cli.test.ts +177 -0
- package/templates/bills-agent/agents/bills-agent/test/scenarios.test.ts +73 -0
- package/templates/bills-agent/agents/bills-agent/tools.json +51 -0
- package/templates/bills-agent/agents/bills-agent/tsconfig.json +11 -0
- package/templates/bills-agent/package.json +34 -0
- package/templates/bills-agent/packages/agent-core/README.md +19 -0
- package/templates/bills-agent/packages/agent-core/package.json +24 -0
- package/templates/bills-agent/packages/agent-core/src/agent.ts +125 -0
- package/templates/bills-agent/packages/agent-core/src/api/charge-rail.ts +154 -0
- package/templates/bills-agent/packages/agent-core/src/api/client.ts +53 -0
- package/templates/bills-agent/packages/agent-core/src/api/mandate-status.ts +58 -0
- package/templates/bills-agent/packages/agent-core/src/api/rail.ts +101 -0
- package/templates/bills-agent/packages/agent-core/src/api/sandbox-payer.ts +45 -0
- package/templates/bills-agent/packages/agent-core/src/approval.ts +109 -0
- package/templates/bills-agent/packages/agent-core/src/bundle.ts +113 -0
- package/templates/bills-agent/packages/agent-core/src/check.ts +171 -0
- package/templates/bills-agent/packages/agent-core/src/engine.ts +784 -0
- package/templates/bills-agent/packages/agent-core/src/escalate.ts +85 -0
- package/templates/bills-agent/packages/agent-core/src/events.ts +40 -0
- package/templates/bills-agent/packages/agent-core/src/guardrails.ts +45 -0
- package/templates/bills-agent/packages/agent-core/src/hash.ts +49 -0
- package/templates/bills-agent/packages/agent-core/src/ids.ts +10 -0
- package/templates/bills-agent/packages/agent-core/src/index.ts +29 -0
- package/templates/bills-agent/packages/agent-core/src/mandate.ts +100 -0
- package/templates/bills-agent/packages/agent-core/src/manifest.ts +76 -0
- package/templates/bills-agent/packages/agent-core/src/providers/anthropic.ts +76 -0
- package/templates/bills-agent/packages/agent-core/src/providers/replay.ts +63 -0
- package/templates/bills-agent/packages/agent-core/src/providers/types.ts +39 -0
- package/templates/bills-agent/packages/agent-core/src/rail.ts +87 -0
- package/templates/bills-agent/packages/agent-core/src/revocation.ts +30 -0
- package/templates/bills-agent/packages/agent-core/src/secrets.ts +30 -0
- package/templates/bills-agent/packages/agent-core/src/state/store.ts +307 -0
- package/templates/bills-agent/packages/agent-core/src/state-machine.ts +146 -0
- package/templates/bills-agent/packages/agent-core/src/stubs/charge-rail.ts +193 -0
- package/templates/bills-agent/packages/agent-core/src/stubs/mandate-status.ts +57 -0
- package/templates/bills-agent/packages/agent-core/src/stubs/rail.ts +124 -0
- package/templates/bills-agent/packages/agent-core/src/tools.ts +55 -0
- package/templates/bills-agent/packages/agent-core/src/types.ts +106 -0
- package/templates/bills-agent/packages/agent-core/test/approval.test.ts +83 -0
- package/templates/bills-agent/packages/agent-core/test/engine.test.ts +524 -0
- package/templates/bills-agent/packages/agent-core/test/escalate.test.ts +42 -0
- package/templates/bills-agent/packages/agent-core/test/helpers.ts +139 -0
- package/templates/bills-agent/packages/agent-core/test/mandate-status.test.ts +153 -0
- package/templates/bills-agent/packages/agent-core/test/manifest.test.ts +45 -0
- package/templates/bills-agent/packages/agent-core/test/receivables.test.ts +265 -0
- package/templates/bills-agent/packages/agent-core/test/secrets.test.ts +28 -0
- package/templates/bills-agent/packages/agent-core/test/state-machine.test.ts +67 -0
- package/templates/bills-agent/packages/agent-core/test/transitions.type-test.ts +59 -0
- package/templates/bills-agent/packages/agent-core/tsconfig.json +10 -0
- package/templates/bills-agent/tsconfig.base.json +16 -0
- package/templates/bills-agent/vitest.config.ts +12 -0
- package/templates/collections-agent/LICENSE +21 -0
- package/templates/collections-agent/README.md +20 -0
- package/templates/collections-agent/_gitignore +10 -0
- package/templates/collections-agent/agents/collections-agent/.env.example +4 -0
- package/templates/collections-agent/agents/collections-agent/AGENTS.md +19 -0
- package/templates/collections-agent/agents/collections-agent/CLAUDE.md +19 -0
- package/templates/collections-agent/agents/collections-agent/README.md +94 -0
- package/templates/collections-agent/agents/collections-agent/SYSTEM_PROMPT.md +31 -0
- package/templates/collections-agent/agents/collections-agent/agent.yaml +28 -0
- package/templates/collections-agent/agents/collections-agent/channels/terminal/index.ts +178 -0
- package/templates/collections-agent/agents/collections-agent/channels/webhook/index.ts +131 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap-mandate.json +11 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap.json +12 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/beneficiary-swap.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/exfiltration.json +19 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/exfiltration.transcript.jsonl +3 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/false-authority.json +11 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/false-authority.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/fractioning.json +12 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/fractioning.transcript.jsonl +4 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/model-total.json +13 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/model-total.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/prompt-injection.json +12 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/prompt-injection.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/evals/adversarial/webhook-replay.json +11 -0
- package/templates/collections-agent/agents/collections-agent/evals/eval.yaml +11 -0
- package/templates/collections-agent/agents/collections-agent/guardrails.json +20 -0
- package/templates/collections-agent/agents/collections-agent/mandate.example.json +40 -0
- package/templates/collections-agent/agents/collections-agent/package.json +29 -0
- package/templates/collections-agent/agents/collections-agent/runbook.md +27 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/beneficiary-not-allowed.json +42 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/beneficiary-not-allowed.transcript.jsonl +3 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/cap-exceeded.json +27 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/cap-exceeded.transcript.jsonl +3 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/charge-expired.json +36 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/charge-expired.transcript.jsonl +4 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/escalated-above-threshold.json +49 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/escalated-above-threshold.transcript.jsonl +5 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/happy-path.json +60 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/happy-path.transcript.jsonl +4 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/instalments.json +49 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/instalments.transcript.jsonl +4 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/mandate-revoked.json +42 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/mandate-revoked.transcript.jsonl +6 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/prompt-injection.json +27 -0
- package/templates/collections-agent/agents/collections-agent/scenarios/prompt-injection.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/src/adversarial.ts +190 -0
- package/templates/collections-agent/agents/collections-agent/src/agreements.ts +45 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/approve.ts +10 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/check.ts +13 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/decide.ts +48 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/deny.ts +7 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/eval.ts +39 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/poll.ts +35 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/reconcile.ts +38 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/rerun.ts +55 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/resume.ts +30 -0
- package/templates/collections-agent/agents/collections-agent/src/commands/webhook.ts +36 -0
- package/templates/collections-agent/agents/collections-agent/src/envelope.ts +103 -0
- package/templates/collections-agent/agents/collections-agent/src/main.ts +193 -0
- package/templates/collections-agent/agents/collections-agent/src/modules/bolepix-receivables.ts +105 -0
- package/templates/collections-agent/agents/collections-agent/src/poll.ts +94 -0
- package/templates/collections-agent/agents/collections-agent/src/scenarios.ts +252 -0
- package/templates/collections-agent/agents/collections-agent/src/setup.ts +250 -0
- package/templates/collections-agent/agents/collections-agent/test/adversarial.test.ts +45 -0
- package/templates/collections-agent/agents/collections-agent/test/check.test.ts +51 -0
- package/templates/collections-agent/agents/collections-agent/test/cli.test.ts +172 -0
- package/templates/collections-agent/agents/collections-agent/test/envelope.test.ts +53 -0
- package/templates/collections-agent/agents/collections-agent/test/fixtures/accept-1042.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/test/fixtures/accept-1103.transcript.jsonl +2 -0
- package/templates/collections-agent/agents/collections-agent/test/scenarios.test.ts +95 -0
- package/templates/collections-agent/agents/collections-agent/test/webhook.test.ts +100 -0
- package/templates/collections-agent/agents/collections-agent/tools.json +40 -0
- package/templates/collections-agent/agents/collections-agent/tsconfig.json +11 -0
- package/templates/collections-agent/package.json +35 -0
- package/templates/collections-agent/packages/agent-core/README.md +19 -0
- package/templates/collections-agent/packages/agent-core/package.json +24 -0
- package/templates/collections-agent/packages/agent-core/src/agent.ts +125 -0
- package/templates/collections-agent/packages/agent-core/src/api/charge-rail.ts +154 -0
- package/templates/collections-agent/packages/agent-core/src/api/client.ts +53 -0
- package/templates/collections-agent/packages/agent-core/src/api/mandate-status.ts +58 -0
- package/templates/collections-agent/packages/agent-core/src/api/rail.ts +101 -0
- package/templates/collections-agent/packages/agent-core/src/api/sandbox-payer.ts +45 -0
- package/templates/collections-agent/packages/agent-core/src/approval.ts +109 -0
- package/templates/collections-agent/packages/agent-core/src/bundle.ts +113 -0
- package/templates/collections-agent/packages/agent-core/src/check.ts +171 -0
- package/templates/collections-agent/packages/agent-core/src/engine.ts +784 -0
- package/templates/collections-agent/packages/agent-core/src/escalate.ts +85 -0
- package/templates/collections-agent/packages/agent-core/src/events.ts +40 -0
- package/templates/collections-agent/packages/agent-core/src/guardrails.ts +45 -0
- package/templates/collections-agent/packages/agent-core/src/hash.ts +49 -0
- package/templates/collections-agent/packages/agent-core/src/ids.ts +10 -0
- package/templates/collections-agent/packages/agent-core/src/index.ts +29 -0
- package/templates/collections-agent/packages/agent-core/src/mandate.ts +100 -0
- package/templates/collections-agent/packages/agent-core/src/manifest.ts +76 -0
- package/templates/collections-agent/packages/agent-core/src/providers/anthropic.ts +76 -0
- package/templates/collections-agent/packages/agent-core/src/providers/replay.ts +63 -0
- package/templates/collections-agent/packages/agent-core/src/providers/types.ts +39 -0
- package/templates/collections-agent/packages/agent-core/src/rail.ts +87 -0
- package/templates/collections-agent/packages/agent-core/src/revocation.ts +30 -0
- package/templates/collections-agent/packages/agent-core/src/secrets.ts +30 -0
- package/templates/collections-agent/packages/agent-core/src/state/store.ts +307 -0
- package/templates/collections-agent/packages/agent-core/src/state-machine.ts +146 -0
- package/templates/collections-agent/packages/agent-core/src/stubs/charge-rail.ts +193 -0
- package/templates/collections-agent/packages/agent-core/src/stubs/mandate-status.ts +57 -0
- package/templates/collections-agent/packages/agent-core/src/stubs/rail.ts +124 -0
- package/templates/collections-agent/packages/agent-core/src/tools.ts +55 -0
- package/templates/collections-agent/packages/agent-core/src/types.ts +106 -0
- package/templates/collections-agent/packages/agent-core/test/approval.test.ts +83 -0
- package/templates/collections-agent/packages/agent-core/test/engine.test.ts +524 -0
- package/templates/collections-agent/packages/agent-core/test/escalate.test.ts +42 -0
- package/templates/collections-agent/packages/agent-core/test/helpers.ts +139 -0
- package/templates/collections-agent/packages/agent-core/test/mandate-status.test.ts +153 -0
- package/templates/collections-agent/packages/agent-core/test/manifest.test.ts +45 -0
- package/templates/collections-agent/packages/agent-core/test/receivables.test.ts +265 -0
- package/templates/collections-agent/packages/agent-core/test/secrets.test.ts +28 -0
- package/templates/collections-agent/packages/agent-core/test/state-machine.test.ts +67 -0
- package/templates/collections-agent/packages/agent-core/test/transitions.type-test.ts +59 -0
- package/templates/collections-agent/packages/agent-core/tsconfig.json +10 -0
- package/templates/collections-agent/tsconfig.base.json +16 -0
- package/templates/collections-agent/vitest.config.ts +12 -0
- 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
|
|
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
|
|
package/dist/commands/agent.js
CHANGED
|
@@ -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
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
|
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
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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 =
|
|
140
|
+
const t = templates.find((x) => x.slug === opts.template);
|
|
78
141
|
if (!t) {
|
|
79
|
-
throw new CliError(`Unknown template "${opts.template}". Available: ${
|
|
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
|
|
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
|
-
|
|
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-${
|
|
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 >=
|
|
163
|
+
if (Number.isNaN(index) || index < 0 || index >= templates.length) {
|
|
101
164
|
throw new CliError(`Invalid choice: ${answer}`);
|
|
102
165
|
}
|
|
103
|
-
return
|
|
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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -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 ??
|
|
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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAQnD;;;;;;;GAOG;AACH,KAAK,UAAU,YAAY,CAAC,UAAkB;IAC5C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,EAAyD,CAAC;QACxE,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAS,EAAQ,EAAE;YACzC,KAAK,CAAC,CAAC;YACP,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACzB,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,iEAAiE;QACnE,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAkB;IACnD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,oEAAoE;QACpE,yEAAyE;QACzE,sEAAsE;QACtE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAChB,2FAA2F,CAC5F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,0EAA0E,CAAC,CAAC;QACjF,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAChB,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,oCAAoC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,OAAO,IAAI,
|
|
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
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
122
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
278
|
+
source: r.source,
|
|
231
279
|
detail: r.detail ?? null,
|
|
232
280
|
};
|
|
233
281
|
}
|