@paybond/kit 0.10.0 → 0.11.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 +59 -15
- package/completion-presets/catalog.json +1187 -0
- package/completion-presets/catalog.sha256 +1 -0
- package/dev/trace-ui/dashboard.html +617 -0
- package/dist/agent/adapter.d.ts +51 -0
- package/dist/agent/adapter.js +66 -0
- package/dist/agent/attach-bundle.d.ts +37 -0
- package/dist/agent/attach-bundle.js +118 -0
- package/dist/agent/authorization-cache.d.ts +22 -0
- package/dist/agent/authorization-cache.js +36 -0
- package/dist/agent/deferred-tools.d.ts +11 -0
- package/dist/agent/deferred-tools.js +62 -0
- package/dist/agent/discover.d.ts +41 -0
- package/dist/agent/discover.js +147 -0
- package/dist/agent/evidence.d.ts +9 -0
- package/dist/agent/evidence.js +28 -0
- package/dist/agent/facade.d.ts +48 -0
- package/dist/agent/facade.js +112 -0
- package/dist/agent/gateway-trace-reporter.d.ts +28 -0
- package/dist/agent/gateway-trace-reporter.js +49 -0
- package/dist/agent/generic-runner.d.ts +14 -0
- package/dist/agent/generic-runner.js +49 -0
- package/dist/agent/generic-sandbox-demo.d.ts +36 -0
- package/dist/agent/generic-sandbox-demo.js +82 -0
- package/dist/agent/guarded-agent.d.ts +49 -0
- package/dist/agent/guarded-agent.js +100 -0
- package/dist/agent/index.d.ts +13 -0
- package/dist/agent/index.js +13 -0
- package/dist/agent/instrument.d.ts +156 -0
- package/dist/agent/instrument.js +442 -0
- package/dist/agent/interceptor.d.ts +24 -0
- package/dist/agent/interceptor.js +440 -0
- package/dist/agent/lazy-context-tools.d.ts +15 -0
- package/dist/agent/lazy-context-tools.js +81 -0
- package/dist/agent/registry-file.d.ts +39 -0
- package/dist/agent/registry-file.js +219 -0
- package/dist/agent/registry.d.ts +37 -0
- package/dist/agent/registry.js +128 -0
- package/dist/agent/run.d.ts +124 -0
- package/dist/agent/run.js +301 -0
- package/dist/agent/types.d.ts +318 -0
- package/dist/agent/types.js +42 -0
- package/dist/agent-recognition.d.ts +72 -0
- package/dist/agent-recognition.js +165 -0
- package/dist/bincode-wire.d.ts +18 -0
- package/dist/bincode-wire.js +93 -0
- package/dist/claude-agents/config.d.ts +21 -0
- package/dist/claude-agents/config.js +145 -0
- package/dist/claude-agents/index.d.ts +2 -0
- package/dist/claude-agents/index.js +2 -0
- package/dist/claude-agents/sandbox-demo.d.ts +30 -0
- package/dist/claude-agents/sandbox-demo.js +91 -0
- package/dist/cli/agent/demo-loaders.d.ts +4 -0
- package/dist/cli/agent/demo-loaders.js +66 -0
- package/dist/cli/agent/env-quote.d.ts +1 -0
- package/dist/cli/agent/env-quote.js +6 -0
- package/dist/cli/agent/env-write.d.ts +8 -0
- package/dist/cli/agent/env-write.js +47 -0
- package/dist/cli/agent/paybond.d.ts +16 -0
- package/dist/cli/agent/paybond.js +55 -0
- package/dist/cli/agent/policy-file.d.ts +29 -0
- package/dist/cli/agent/policy-file.js +61 -0
- package/dist/cli/agent/production-evidence.d.ts +24 -0
- package/dist/cli/agent/production-evidence.js +98 -0
- package/dist/cli/agent/run-store.d.ts +30 -0
- package/dist/cli/agent/run-store.js +42 -0
- package/dist/cli/agent/run-trace-store.d.ts +39 -0
- package/dist/cli/agent/run-trace-store.js +143 -0
- package/dist/cli/agent-run-trace-table.d.ts +9 -0
- package/dist/cli/agent-run-trace-table.js +24 -0
- package/dist/cli/agent-sandbox-smoke-checklist.d.ts +9 -0
- package/dist/cli/agent-sandbox-smoke-checklist.js +50 -0
- package/dist/cli/command-spec.d.ts +1 -0
- package/dist/cli/command-spec.js +286 -5
- package/dist/cli/commands/agent.d.ts +16 -0
- package/dist/cli/commands/agent.js +1136 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.js +348 -0
- package/dist/cli/commands/discovery.js +3 -3
- package/dist/cli/commands/policy.d.ts +13 -0
- package/dist/cli/commands/policy.js +769 -0
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.js +124 -8
- package/dist/cli/commands/workflows.js +9 -4
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.js +4 -2
- package/dist/cli/context.js +2 -1
- package/dist/cli/credentials.js +2 -2
- package/dist/cli/doctor-agent-middleware.d.ts +5 -0
- package/dist/cli/doctor-agent-middleware.js +49 -0
- package/dist/cli/globals.d.ts +1 -0
- package/dist/cli/globals.js +11 -1
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.js +35 -3
- package/dist/cli/mcp-install.js +2 -2
- package/dist/cli/mcp-policy.d.ts +3 -0
- package/dist/cli/mcp-policy.js +19 -13
- package/dist/cli/mcp-verify-config.js +9 -11
- package/dist/cli/redact.js +29 -8
- package/dist/cli/router.js +105 -2
- package/dist/cli/smoke-deep-links.d.ts +15 -0
- package/dist/cli/smoke-deep-links.js +63 -0
- package/dist/cli/telemetry.d.ts +17 -0
- package/dist/cli/telemetry.js +94 -0
- package/dist/completion-catalog-digest.d.ts +2 -0
- package/dist/completion-catalog-digest.js +2 -0
- package/dist/completion-catalog-integrity.d.ts +2 -0
- package/dist/completion-catalog-integrity.js +17 -0
- package/dist/completion-catalog.d.ts +49 -0
- package/dist/completion-catalog.js +62 -0
- package/dist/completion-contract-digest.d.ts +37 -0
- package/dist/completion-contract-digest.js +73 -0
- package/dist/completion-forbidden-fields.d.ts +5 -0
- package/dist/completion-forbidden-fields.js +26 -0
- package/dist/completion-init.d.ts +8 -0
- package/dist/completion-init.js +334 -0
- package/dist/completion-resolve.d.ts +21 -0
- package/dist/completion-resolve.js +86 -0
- package/dist/completion-validate-evidence.d.ts +24 -0
- package/dist/completion-validate-evidence.js +145 -0
- package/dist/dev/offline-gateway.d.ts +24 -0
- package/dist/dev/offline-gateway.js +102 -0
- package/dist/dev/trace-buffer.d.ts +61 -0
- package/dist/dev/trace-buffer.js +330 -0
- package/dist/dev/trace-security-headers.d.ts +11 -0
- package/dist/dev/trace-security-headers.js +16 -0
- package/dist/dev/trace-server.d.ts +8 -0
- package/dist/dev/trace-server.js +38 -0
- package/dist/dev/trace-ui.d.ts +4 -0
- package/dist/dev/trace-ui.js +25 -0
- package/dist/dev/wiremock-up.d.ts +15 -0
- package/dist/dev/wiremock-up.js +118 -0
- package/dist/doctor-completion.d.ts +17 -0
- package/dist/doctor-completion.js +428 -0
- package/dist/gateway-url.d.ts +7 -0
- package/dist/gateway-url.js +69 -0
- package/dist/index.d.ts +119 -2
- package/dist/index.js +267 -6
- package/dist/init.js +374 -57
- package/dist/langgraph/awrap-tool-call.d.ts +25 -0
- package/dist/langgraph/awrap-tool-call.js +81 -0
- package/dist/langgraph/config.d.ts +13 -0
- package/dist/langgraph/config.js +11 -0
- package/dist/langgraph/index.d.ts +4 -0
- package/dist/langgraph/index.js +4 -0
- package/dist/langgraph/sandbox-demo.d.ts +40 -0
- package/dist/langgraph/sandbox-demo.js +96 -0
- package/dist/langgraph/tool-node.d.ts +10 -0
- package/dist/langgraph/tool-node.js +38 -0
- package/dist/login.js +7 -0
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/tool-surface.d.ts +25 -0
- package/dist/mcp/tool-surface.js +17 -0
- package/dist/mcp-capability-token-cache.d.ts +24 -0
- package/dist/mcp-capability-token-cache.js +101 -0
- package/dist/mcp-evidence-policy.d.ts +48 -0
- package/dist/mcp-evidence-policy.js +117 -0
- package/dist/mcp-policy-reload.d.ts +79 -0
- package/dist/mcp-policy-reload.js +200 -0
- package/dist/mcp-sep2828-evidence.d.ts +36 -0
- package/dist/mcp-sep2828-evidence.js +65 -0
- package/dist/mcp-server.d.ts +6 -0
- package/dist/mcp-server.js +224 -44
- package/dist/openai-agents/index.d.ts +40 -0
- package/dist/openai-agents/index.js +151 -0
- package/dist/openai-agents/sandbox-demo.d.ts +34 -0
- package/dist/openai-agents/sandbox-demo.js +118 -0
- package/dist/payee-evidence.js +2 -29
- package/dist/policy/catalog.d.ts +31 -0
- package/dist/policy/catalog.js +48 -0
- package/dist/policy/compose-utils.d.ts +3 -0
- package/dist/policy/compose-utils.js +4 -0
- package/dist/policy/compose.d.ts +20 -0
- package/dist/policy/compose.js +240 -0
- package/dist/policy/digest.d.ts +7 -0
- package/dist/policy/digest.js +75 -0
- package/dist/policy/domain.d.ts +15 -0
- package/dist/policy/domain.js +28 -0
- package/dist/policy/guardrail-spec.d.ts +17 -0
- package/dist/policy/guardrail-spec.js +140 -0
- package/dist/policy/guardrails.d.ts +48 -0
- package/dist/policy/guardrails.js +72 -0
- package/dist/policy/index.d.ts +21 -0
- package/dist/policy/index.js +21 -0
- package/dist/policy/init.d.ts +102 -0
- package/dist/policy/init.js +351 -0
- package/dist/policy/intent-spec.d.ts +52 -0
- package/dist/policy/intent-spec.js +176 -0
- package/dist/policy/json-path.d.ts +4 -0
- package/dist/policy/json-path.js +23 -0
- package/dist/policy/layers-io.d.ts +7 -0
- package/dist/policy/layers-io.js +28 -0
- package/dist/policy/load-effective.d.ts +22 -0
- package/dist/policy/load-effective.js +77 -0
- package/dist/policy/load.d.ts +85 -0
- package/dist/policy/load.js +164 -0
- package/dist/policy/merge.d.ts +29 -0
- package/dist/policy/merge.js +297 -0
- package/dist/policy/parse-text.d.ts +2 -0
- package/dist/policy/parse-text.js +126 -0
- package/dist/policy/policy-api.d.ts +45 -0
- package/dist/policy/policy-api.js +61 -0
- package/dist/policy/presets.d.ts +19 -0
- package/dist/policy/presets.js +66 -0
- package/dist/policy/registry.d.ts +7 -0
- package/dist/policy/registry.js +33 -0
- package/dist/policy/reload.d.ts +86 -0
- package/dist/policy/reload.js +233 -0
- package/dist/policy/render-yaml.d.ts +3 -0
- package/dist/policy/render-yaml.js +69 -0
- package/dist/policy/sandbox-bootstrap.d.ts +19 -0
- package/dist/policy/sandbox-bootstrap.js +66 -0
- package/dist/policy/schema.d.ts +204 -0
- package/dist/policy/schema.js +255 -0
- package/dist/policy/snapshot.d.ts +33 -0
- package/dist/policy/snapshot.js +23 -0
- package/dist/policy/validate-remote.d.ts +43 -0
- package/dist/policy/validate-remote.js +104 -0
- package/dist/policy/validate.d.ts +36 -0
- package/dist/policy/validate.js +150 -0
- package/dist/policy/watcher.d.ts +29 -0
- package/dist/policy/watcher.js +112 -0
- package/dist/principal-intent.d.ts +52 -0
- package/dist/principal-intent.js +193 -37
- package/dist/project-init.d.ts +34 -0
- package/dist/project-init.js +898 -0
- package/dist/sep2828-signature.d.ts +10 -0
- package/dist/sep2828-signature.js +134 -0
- package/dist/solutions/api.d.ts +22 -0
- package/dist/solutions/api.js +40 -0
- package/dist/solutions/catalog.d.ts +34 -0
- package/dist/solutions/catalog.js +129 -0
- package/dist/solutions/index.d.ts +2 -0
- package/dist/solutions/index.js +2 -0
- package/dist/template-init.d.ts +54 -0
- package/dist/template-init.js +203 -0
- package/dist/vercel-ai/config.d.ts +15 -0
- package/dist/vercel-ai/config.js +13 -0
- package/dist/vercel-ai/index.d.ts +4 -0
- package/dist/vercel-ai/index.js +4 -0
- package/dist/vercel-ai/sandbox-demo.d.ts +44 -0
- package/dist/vercel-ai/sandbox-demo.js +153 -0
- package/dist/vercel-ai/tool-approval.d.ts +16 -0
- package/dist/vercel-ai/tool-approval.js +41 -0
- package/dist/vercel-ai/wrap-tools.d.ts +9 -0
- package/dist/vercel-ai/wrap-tools.js +40 -0
- package/dist/x402-receipt-evidence.d.ts +29 -0
- package/dist/x402-receipt-evidence.js +97 -0
- package/dist/x402-receipt-signature.d.ts +12 -0
- package/dist/x402-receipt-signature.js +211 -0
- package/package.json +75 -3
- package/solutions/aws.json +17 -0
- package/solutions/saas.json +17 -0
- package/solutions/shopping.json +17 -0
- package/solutions/travel.json +18 -0
- package/templates/manifest.json +169 -0
- package/templates/openai-shopping-agent/.env.example +3 -0
- package/templates/openai-shopping-agent/.github/workflows/smoke.yml +20 -0
- package/templates/openai-shopping-agent/LICENSE +201 -0
- package/templates/openai-shopping-agent/README.md +29 -0
- package/templates/openai-shopping-agent/package-lock.json +1525 -0
- package/templates/openai-shopping-agent/package.json +22 -0
- package/templates/openai-shopping-agent/paybond.policy.yaml +22 -0
- package/templates/openai-shopping-agent/src/index.ts +22 -0
- package/templates/openai-shopping-agent/src/paybond.config.ts +51 -0
- package/templates/openai-shopping-agent/tsconfig.json +13 -0
- package/templates/paybond-aws-operator/.env.example +3 -0
- package/templates/paybond-aws-operator/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-aws-operator/LICENSE +201 -0
- package/templates/paybond-aws-operator/README.md +29 -0
- package/templates/paybond-aws-operator/package-lock.json +151 -0
- package/templates/paybond-aws-operator/package.json +20 -0
- package/templates/paybond-aws-operator/paybond.policy.yaml +22 -0
- package/templates/paybond-aws-operator/src/index.ts +54 -0
- package/templates/paybond-aws-operator/src/paybond.config.ts +51 -0
- package/templates/paybond-aws-operator/tsconfig.json +13 -0
- package/templates/paybond-claude-agents-demo/.env.example +3 -0
- package/templates/paybond-claude-agents-demo/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-claude-agents-demo/LICENSE +201 -0
- package/templates/paybond-claude-agents-demo/README.md +29 -0
- package/templates/paybond-claude-agents-demo/package-lock.json +1489 -0
- package/templates/paybond-claude-agents-demo/package.json +22 -0
- package/templates/paybond-claude-agents-demo/paybond.policy.yaml +22 -0
- package/templates/paybond-claude-agents-demo/src/index.ts +22 -0
- package/templates/paybond-claude-agents-demo/src/paybond.config.ts +51 -0
- package/templates/paybond-claude-agents-demo/tsconfig.json +13 -0
- package/templates/paybond-invoice-agent/.env.example +3 -0
- package/templates/paybond-invoice-agent/.github/workflows/smoke.yml +19 -0
- package/templates/paybond-invoice-agent/LICENSE +201 -0
- package/templates/paybond-invoice-agent/README.md +29 -0
- package/templates/paybond-invoice-agent/app.py +27 -0
- package/templates/paybond-invoice-agent/package.json +6 -0
- package/templates/paybond-invoice-agent/paybond.policy.yaml +22 -0
- package/templates/paybond-invoice-agent/paybond_config.py +45 -0
- package/templates/paybond-invoice-agent/requirements.txt +2 -0
- package/templates/paybond-mcp-coding-agent/.env.example +3 -0
- package/templates/paybond-mcp-coding-agent/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-mcp-coding-agent/LICENSE +201 -0
- package/templates/paybond-mcp-coding-agent/README.md +39 -0
- package/templates/paybond-mcp-coding-agent/package-lock.json +151 -0
- package/templates/paybond-mcp-coding-agent/package.json +20 -0
- package/templates/paybond-mcp-coding-agent/paybond.policy.yaml +25 -0
- package/templates/paybond-mcp-coding-agent/src/index.ts +40 -0
- package/templates/paybond-mcp-coding-agent/src/paybond.config.ts +51 -0
- package/templates/paybond-mcp-coding-agent/tsconfig.json +13 -0
- package/templates/paybond-openai-agents-demo/.env.example +3 -0
- package/templates/paybond-openai-agents-demo/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-openai-agents-demo/LICENSE +201 -0
- package/templates/paybond-openai-agents-demo/README.md +29 -0
- package/templates/paybond-openai-agents-demo/package-lock.json +1525 -0
- package/templates/paybond-openai-agents-demo/package.json +22 -0
- package/templates/paybond-openai-agents-demo/paybond.policy.yaml +22 -0
- package/templates/paybond-openai-agents-demo/src/index.ts +22 -0
- package/templates/paybond-openai-agents-demo/src/paybond.config.ts +51 -0
- package/templates/paybond-openai-agents-demo/tsconfig.json +13 -0
- package/templates/paybond-procurement-agent/.env.example +3 -0
- package/templates/paybond-procurement-agent/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-procurement-agent/LICENSE +201 -0
- package/templates/paybond-procurement-agent/README.md +29 -0
- package/templates/paybond-procurement-agent/package-lock.json +151 -0
- package/templates/paybond-procurement-agent/package.json +20 -0
- package/templates/paybond-procurement-agent/paybond.policy.yaml +25 -0
- package/templates/paybond-procurement-agent/src/index.ts +54 -0
- package/templates/paybond-procurement-agent/src/paybond.config.ts +51 -0
- package/templates/paybond-procurement-agent/tsconfig.json +13 -0
- package/templates/paybond-travel-agent/.env.example +3 -0
- package/templates/paybond-travel-agent/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-travel-agent/LICENSE +201 -0
- package/templates/paybond-travel-agent/README.md +29 -0
- package/templates/paybond-travel-agent/package-lock.json +444 -0
- package/templates/paybond-travel-agent/package.json +23 -0
- package/templates/paybond-travel-agent/paybond.policy.yaml +22 -0
- package/templates/paybond-travel-agent/src/index.ts +22 -0
- package/templates/paybond-travel-agent/src/paybond.config.ts +51 -0
- package/templates/paybond-travel-agent/tsconfig.json +13 -0
- package/templates/paybond-vercel-shopping-agent/.env.example +3 -0
- package/templates/paybond-vercel-shopping-agent/.github/workflows/smoke.yml +20 -0
- package/templates/paybond-vercel-shopping-agent/LICENSE +201 -0
- package/templates/paybond-vercel-shopping-agent/README.md +29 -0
- package/templates/paybond-vercel-shopping-agent/package-lock.json +265 -0
- package/templates/paybond-vercel-shopping-agent/package.json +22 -0
- package/templates/paybond-vercel-shopping-agent/paybond.policy.yaml +22 -0
- package/templates/paybond-vercel-shopping-agent/src/index.ts +22 -0
- package/templates/paybond-vercel-shopping-agent/src/paybond.config.ts +51 -0
- package/templates/paybond-vercel-shopping-agent/tsconfig.json +13 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { mkdir, readFile } from "node:fs/promises";
|
|
3
|
+
import { writeAtomicFile, writeAtomicFileAsync } from "../automation.js";
|
|
4
|
+
import { CliError } from "../types.js";
|
|
5
|
+
import { agentRunFilePath, agentRunsDir } from "./run-store.js";
|
|
6
|
+
export function agentRunTraceFilePath(cwd, runId) {
|
|
7
|
+
return `${agentRunFilePath(cwd, runId).replace(/\.json$/, "")}.trace.json`;
|
|
8
|
+
}
|
|
9
|
+
export function loadAgentRunTraceIfExistsSync(cwd, runId) {
|
|
10
|
+
const path = agentRunTraceFilePath(cwd, runId);
|
|
11
|
+
try {
|
|
12
|
+
const raw = readFileSync(path, "utf8");
|
|
13
|
+
const parsed = JSON.parse(raw);
|
|
14
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
15
|
+
throw new CliError(`invalid run trace at ${path}`, {
|
|
16
|
+
category: "validation",
|
|
17
|
+
code: "cli.agent.invalid_run_trace",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err && typeof err === "object" && "code" in err && err.code === "ENOENT") {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function loadAgentRunTraceIfExists(cwd, runId) {
|
|
30
|
+
const path = agentRunTraceFilePath(cwd, runId);
|
|
31
|
+
let raw;
|
|
32
|
+
try {
|
|
33
|
+
raw = await readFile(path, "utf8");
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (err && typeof err === "object" && "code" in err && err.code === "ENOENT") {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
const parsed = JSON.parse(raw);
|
|
42
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
43
|
+
throw new CliError(`invalid run trace at ${path}`, {
|
|
44
|
+
category: "validation",
|
|
45
|
+
code: "cli.agent.invalid_run_trace",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
export async function loadAgentRunTrace(cwd, runId) {
|
|
51
|
+
const stored = await loadAgentRunTraceIfExists(cwd, runId);
|
|
52
|
+
if (!stored) {
|
|
53
|
+
throw new CliError(`no trace events for run "${runId}"; run paybond agent tool execute first`, {
|
|
54
|
+
category: "validation",
|
|
55
|
+
code: "cli.agent.trace_not_found",
|
|
56
|
+
exitCode: 1,
|
|
57
|
+
details: { run_id: runId, path: agentRunTraceFilePath(cwd, runId) },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return stored;
|
|
61
|
+
}
|
|
62
|
+
export function appendAgentRunTraceEventSync(cwd, runId, event, intentId) {
|
|
63
|
+
const existing = loadAgentRunTraceIfExistsSync(cwd, runId);
|
|
64
|
+
const traceEvents = [...(existing?.trace_events ?? []), event];
|
|
65
|
+
persistAgentRunTraceEventsSync(cwd, runId, traceEvents, intentId ?? existing?.intent_id ?? "");
|
|
66
|
+
}
|
|
67
|
+
export async function appendAgentRunTraceEvent(cwd, runId, event, intentId) {
|
|
68
|
+
const existing = await loadAgentRunTraceIfExists(cwd, runId);
|
|
69
|
+
const traceEvents = [...(existing?.trace_events ?? []), event];
|
|
70
|
+
await persistAgentRunTraceEvents(cwd, runId, traceEvents, intentId ?? existing?.intent_id ?? "");
|
|
71
|
+
}
|
|
72
|
+
export function persistAgentRunTraceEventsSync(cwd, runId, events, intentId = "") {
|
|
73
|
+
const path = agentRunTraceFilePath(cwd, runId);
|
|
74
|
+
mkdirSync(agentRunsDir(cwd), { recursive: true });
|
|
75
|
+
const payload = {
|
|
76
|
+
run_id: runId.trim(),
|
|
77
|
+
intent_id: intentId,
|
|
78
|
+
trace_events: [...events],
|
|
79
|
+
updated_at: new Date().toISOString(),
|
|
80
|
+
};
|
|
81
|
+
writeAtomicFile(path, `${JSON.stringify(payload, null, 2)}\n`, 0o600);
|
|
82
|
+
return path;
|
|
83
|
+
}
|
|
84
|
+
export async function persistAgentRunTraceEvents(cwd, runId, events, intentId = "") {
|
|
85
|
+
const path = agentRunTraceFilePath(cwd, runId);
|
|
86
|
+
await mkdir(agentRunsDir(cwd), { recursive: true });
|
|
87
|
+
const payload = {
|
|
88
|
+
run_id: runId.trim(),
|
|
89
|
+
intent_id: intentId,
|
|
90
|
+
trace_events: [...events],
|
|
91
|
+
updated_at: new Date().toISOString(),
|
|
92
|
+
};
|
|
93
|
+
await writeAtomicFileAsync(path, `${JSON.stringify(payload, null, 2)}\n`, 0o600);
|
|
94
|
+
return path;
|
|
95
|
+
}
|
|
96
|
+
/** Composite sink that persists per-run trace events and optionally forwards to another sink. */
|
|
97
|
+
export function createAgentRunTraceSink(cwd, runId, options) {
|
|
98
|
+
return (event) => {
|
|
99
|
+
appendAgentRunTraceEventSync(cwd, runId, event, options?.intentId);
|
|
100
|
+
options?.forward?.(event);
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Forward middleware trace events to Gateway when a tenant session is available. */
|
|
104
|
+
export function createGatewayAgentRunTraceSink(paybond, runId) {
|
|
105
|
+
const reporter = paybond.harbor.createAgentRunTraceReporter(runId);
|
|
106
|
+
return (event) => {
|
|
107
|
+
reporter.reportEvent(event);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Register run metadata on Gateway after a successful bind. */
|
|
111
|
+
export function registerGatewayAgentRun(paybond, run, options) {
|
|
112
|
+
const meta = {
|
|
113
|
+
intentId: run.intentId,
|
|
114
|
+
operation: run.binding.sandbox?.operation ?? run.allowedTools[0] ?? "",
|
|
115
|
+
sandbox: Boolean(run.binding.sandbox),
|
|
116
|
+
allowedTools: run.allowedTools,
|
|
117
|
+
completionPreset: options?.completionPreset,
|
|
118
|
+
};
|
|
119
|
+
paybond.harbor.createAgentRunTraceReporter(run.runId).registerRun(meta);
|
|
120
|
+
}
|
|
121
|
+
/** Composite sink: local run trace file, optional dev collector, optional Gateway reporter. */
|
|
122
|
+
export function resolveAgentRunTraceSink(cwd, runId, intentId, forward, gateway) {
|
|
123
|
+
const sinks = [];
|
|
124
|
+
if (gateway) {
|
|
125
|
+
sinks.push(gateway);
|
|
126
|
+
}
|
|
127
|
+
if (forward) {
|
|
128
|
+
sinks.push(forward);
|
|
129
|
+
}
|
|
130
|
+
const composed = sinks.length === 0
|
|
131
|
+
? undefined
|
|
132
|
+
: sinks.length === 1
|
|
133
|
+
? sinks[0]
|
|
134
|
+
: (event) => {
|
|
135
|
+
for (const sink of sinks) {
|
|
136
|
+
sink(event);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
return createAgentRunTraceSink(cwd, runId, {
|
|
140
|
+
intentId,
|
|
141
|
+
forward: composed,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DevTraceStep } from "../dev/trace-buffer.js";
|
|
2
|
+
import type { GlobalOptions } from "./types.js";
|
|
3
|
+
/** Build human-readable agent run trace lines for `--format table`. */
|
|
4
|
+
export declare function formatAgentRunTraceTable(options: {
|
|
5
|
+
runId: string;
|
|
6
|
+
intentId: string;
|
|
7
|
+
steps: readonly DevTraceStep[];
|
|
8
|
+
globals: GlobalOptions;
|
|
9
|
+
}): string[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { colorize, shouldUseColor } from "./color.js";
|
|
2
|
+
/** Build human-readable agent run trace lines for `--format table`. */
|
|
3
|
+
export function formatAgentRunTraceTable(options) {
|
|
4
|
+
const useColor = shouldUseColor(options.globals);
|
|
5
|
+
const mark = (line) => {
|
|
6
|
+
if (line.startsWith("✓")) {
|
|
7
|
+
return colorize(line, "green", useColor);
|
|
8
|
+
}
|
|
9
|
+
return line;
|
|
10
|
+
};
|
|
11
|
+
const lines = [
|
|
12
|
+
`run_id: ${options.runId}`,
|
|
13
|
+
`intent_id: ${options.intentId}`,
|
|
14
|
+
"",
|
|
15
|
+
];
|
|
16
|
+
if (options.steps.length === 0) {
|
|
17
|
+
lines.push("No trace events recorded.");
|
|
18
|
+
return lines;
|
|
19
|
+
}
|
|
20
|
+
for (const step of options.steps) {
|
|
21
|
+
lines.push(mark(`✓ ${step.label}`));
|
|
22
|
+
}
|
|
23
|
+
return lines;
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GlobalOptions } from "./types.js";
|
|
2
|
+
/** Build human-readable sandbox smoke checklist lines for `--format table`. */
|
|
3
|
+
export declare function formatAgentSandboxSmokeChecklist(options: {
|
|
4
|
+
presetId?: string;
|
|
5
|
+
bind: Record<string, unknown>;
|
|
6
|
+
execute: Record<string, unknown>;
|
|
7
|
+
resultBody: Record<string, unknown>;
|
|
8
|
+
globals: GlobalOptions;
|
|
9
|
+
}): string[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { colorize, shouldUseColor } from "./color.js";
|
|
3
|
+
function formatUsdFromCents(cents) {
|
|
4
|
+
return `$${(cents / 100).toFixed(2)}`;
|
|
5
|
+
}
|
|
6
|
+
function evidencePresetFromBind(bind) {
|
|
7
|
+
const preset = bind.completion_preset;
|
|
8
|
+
return typeof preset === "string" && preset.trim() ? preset.trim() : undefined;
|
|
9
|
+
}
|
|
10
|
+
/** Build human-readable sandbox smoke checklist lines for `--format table`. */
|
|
11
|
+
export function formatAgentSandboxSmokeChecklist(options) {
|
|
12
|
+
const useColor = shouldUseColor(options.globals);
|
|
13
|
+
const mark = (line) => {
|
|
14
|
+
if (line.startsWith("✓") || line === "Success") {
|
|
15
|
+
return colorize(line, "green", useColor);
|
|
16
|
+
}
|
|
17
|
+
return line;
|
|
18
|
+
};
|
|
19
|
+
const presetLabel = options.presetId?.trim() ||
|
|
20
|
+
(typeof options.bind.policy_file === "string"
|
|
21
|
+
? basename(options.bind.policy_file)
|
|
22
|
+
: "custom");
|
|
23
|
+
const lines = [];
|
|
24
|
+
lines.push(mark(`✓ Policy loaded (${presetLabel})`));
|
|
25
|
+
if (options.bind.intent_id) {
|
|
26
|
+
lines.push(mark("✓ Sandbox intent created"));
|
|
27
|
+
}
|
|
28
|
+
const operation = String(options.bind.operation ?? "").trim();
|
|
29
|
+
if (operation) {
|
|
30
|
+
lines.push(mark(`✓ Tool call: ${operation}`));
|
|
31
|
+
}
|
|
32
|
+
const authorization = options.execute.authorization;
|
|
33
|
+
if (authorization?.allow) {
|
|
34
|
+
const costCents = typeof options.resultBody.cost_cents === "number"
|
|
35
|
+
? options.resultBody.cost_cents
|
|
36
|
+
: typeof options.bind.requested_spend_cents === "number"
|
|
37
|
+
? options.bind.requested_spend_cents
|
|
38
|
+
: undefined;
|
|
39
|
+
const spendLabel = costCents !== undefined ? formatUsdFromCents(costCents) : "approved";
|
|
40
|
+
lines.push(mark(`✓ Spend approved (${spendLabel})`));
|
|
41
|
+
}
|
|
42
|
+
const evidence = options.execute.evidence;
|
|
43
|
+
if (evidence?.submitted) {
|
|
44
|
+
const preset = evidencePresetFromBind(options.bind) ?? "cost_and_completion";
|
|
45
|
+
lines.push(mark(`✓ Evidence validated (${preset})`));
|
|
46
|
+
lines.push(mark("✓ Settlement simulated"));
|
|
47
|
+
}
|
|
48
|
+
lines.push(mark("Success"));
|
|
49
|
+
return lines;
|
|
50
|
+
}
|
|
@@ -2,6 +2,7 @@ export declare const COMMAND_PATHS: string[];
|
|
|
2
2
|
export declare const GLOBAL_FLAG_NAMES: string[];
|
|
3
3
|
export declare const COMMAND_EXAMPLES: Record<string, string[]>;
|
|
4
4
|
export declare const COMPLETIONS: Record<string, string[]>;
|
|
5
|
+
export declare const COMPLETION_PRESET_IDS: string[];
|
|
5
6
|
export declare const WORKFLOWS: Array<{
|
|
6
7
|
title: string;
|
|
7
8
|
description?: string;
|