settld 0.1.1 → 0.1.5
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 +61 -3
- package/SETTLD_VERSION +1 -1
- package/bin/settld-mcp +2 -0
- package/bin/settld.js +13 -0
- package/conformance/kernel-v0/README.md +7 -0
- package/conformance/kernel-v0/run.mjs +292 -4
- package/docs/ACCESS.md +57 -0
- package/docs/ADOPTION_CHECKLIST.md +44 -0
- package/docs/ALERTS.md +198 -0
- package/docs/ARCHITECTURE.md +69 -0
- package/docs/ARCHITECTURE_FOUNDER_GUIDE.md +284 -0
- package/docs/ARTIFACTS.md +60 -0
- package/docs/CERTIFICATION_CHECKLIST.md +33 -0
- package/docs/CIRCLE_SANDBOX_E2E.md +140 -0
- package/docs/CONFIG.md +297 -0
- package/docs/CONTRACTS_APIS.md +23 -0
- package/docs/DEPRECATION.md +31 -0
- package/docs/DOMAIN_MODEL.md +92 -0
- package/docs/EVENT_ENVELOPE.md +53 -0
- package/docs/FINANCE_PACK_FORMAT.md +53 -0
- package/docs/INCIDENT_TAXONOMY.md +30 -0
- package/docs/JOB_STATE_MACHINE.md +66 -0
- package/docs/KERNEL_COMPATIBLE.md +60 -0
- package/docs/KERNEL_V0.md +40 -0
- package/docs/KEY_ROTATION.md +80 -0
- package/docs/LEDGER.md +82 -0
- package/docs/LIVENESS.md +76 -0
- package/docs/MVP_BUILD_ORDER.md +36 -0
- package/docs/ONCALL_PLAYBOOK.md +39 -0
- package/docs/OPERATIONS_SIGNING.md +20 -0
- package/docs/OVERVIEW.md +190 -0
- package/docs/PERF_BASELINE.md +85 -0
- package/docs/PRD.md +77 -0
- package/docs/QUICKSTART_KERNEL_V0.md +96 -0
- package/docs/QUICKSTART_MCP.md +337 -0
- package/docs/QUICKSTART_MCP_HOSTS.md +143 -0
- package/docs/QUICKSTART_PRODUCE.md +61 -0
- package/docs/QUICKSTART_RELEASE_VERIFY.md +39 -0
- package/docs/QUICKSTART_SDK.md +125 -0
- package/docs/QUICKSTART_SDK_PYTHON.md +111 -0
- package/docs/QUICKSTART_VERIFY.md +54 -0
- package/docs/QUICKSTART_X402_GATEWAY.md +317 -0
- package/docs/README.md +15 -0
- package/docs/RELEASE_CHECKLIST.md +156 -0
- package/docs/RELEASING.md +81 -0
- package/docs/REPO_SETTINGS.md +37 -0
- package/docs/RUNBOOK.md +86 -0
- package/docs/SKILLS.md +42 -0
- package/docs/SKILL_BUNDLE_FORMAT.md +48 -0
- package/docs/SLO.md +70 -0
- package/docs/SUMMARY.md +16 -0
- package/docs/SUPPORT.md +31 -0
- package/docs/THREAT_MODEL.md +36 -0
- package/docs/TRUST.md +59 -0
- package/docs/WORKFLOW.md +35 -0
- package/docs/X402_BATCH_SETTLEMENT.md +126 -0
- package/docs/blog/2026-02-14-your-ai-agent-just-spent-500-where-is-the-receipt.md +73 -0
- package/docs/examples/x402-provider-payout-registry.example.json +14 -0
- package/docs/gitbook/README.md +52 -0
- package/docs/gitbook/SETUP.md +25 -0
- package/docs/gitbook/SUMMARY.md +15 -0
- package/docs/gitbook/api-reference.md +73 -0
- package/docs/gitbook/closepacks.md +55 -0
- package/docs/gitbook/conformance.md +59 -0
- package/docs/gitbook/core-primitives.md +85 -0
- package/docs/gitbook/dispute-lifecycle.md +33 -0
- package/docs/gitbook/faq.md +21 -0
- package/docs/gitbook/guides.md +49 -0
- package/docs/gitbook/operations-runbook.md +36 -0
- package/docs/gitbook/quickstart.md +104 -0
- package/docs/gitbook/replay-and-audit.md +30 -0
- package/docs/gitbook/sdk-reference.md +35 -0
- package/docs/gitbook/security-model.md +58 -0
- package/docs/integrations/README.md +14 -0
- package/docs/integrations/github-actions-verify.yml +31 -0
- package/docs/integrations/github-actions.md +34 -0
- package/docs/integrations/openclaw/CLAWHUB_PUBLISH_CHECKLIST.md +65 -0
- package/docs/integrations/openclaw/settld-mcp-skill/SKILL.md +69 -0
- package/docs/integrations/openclaw/settld-mcp-skill/mcp-server.example.json +12 -0
- package/docs/kernel-compatible/capabilities.json +36 -0
- package/docs/marketing/agent-commerce-substrate.md +78 -0
- package/docs/marketing/hn-repost-2026-02-17.md +102 -0
- package/docs/marketing/show-hn-post.md +45 -0
- package/docs/ops/ARTIFACT_VERIFICATION_STATUS.md +43 -0
- package/docs/ops/BILLING_WEBHOOK_REPLAY.md +105 -0
- package/docs/ops/CI_FLAKE_BUDGET.md +31 -0
- package/docs/ops/GO_LIVE_GATE_S13.md +27 -0
- package/docs/ops/HOSTED_BASELINE_R2.md +129 -0
- package/docs/ops/KERNEL_V0_SHIP_GATE.md +67 -0
- package/docs/ops/LIGHTHOUSE_PRODUCTION_CLOSE.md +51 -0
- package/docs/ops/MCP_COMPATIBILITY_MATRIX.md +28 -0
- package/docs/ops/MINIMUM_PRODUCTION_TOPOLOGY.md +89 -0
- package/docs/ops/P0_BACKEND_PROGRESS.md +150 -0
- package/docs/ops/PAYMENTS_ALPHA_R5.md +105 -0
- package/docs/ops/PILOT_ONBOARDING_RUNBOOK.md +112 -0
- package/docs/ops/PRODUCTION_DEPLOYMENT_CHECKLIST.md +103 -0
- package/docs/ops/R1_SLOS.md +66 -0
- package/docs/ops/RELEASE_SIGNING_INCIDENT.md +58 -0
- package/docs/ops/SELF_SERVE_LAUNCH_AUTOMATION.md +89 -0
- package/docs/ops/THROUGHPUT_DRILL_10X.md +48 -0
- package/docs/ops/TRUST_CONFIG_WIZARD.md +47 -0
- package/docs/ops/X402_PILOT_WEEKLY_METRICS.md +76 -0
- package/docs/ops/tool-call-disputes-holdback.md +52 -0
- package/docs/pilot-kit/PILOT_PACKAGE_SCORECARD_X402.md +46 -0
- package/docs/pilot-kit/README.md +29 -0
- package/docs/pilot-kit/architecture-one-pager.md +48 -0
- package/docs/pilot-kit/buyer-email.txt +19 -0
- package/docs/pilot-kit/buyer-one-pager.md +31 -0
- package/docs/pilot-kit/gtm-pilot-playbook.md +182 -0
- package/docs/pilot-kit/offline-verify.md +33 -0
- package/docs/pilot-kit/procurement-one-pager.md +50 -0
- package/docs/pilot-kit/rfp-clause.md +46 -0
- package/docs/pilot-kit/roi-calculator-template.csv +2 -0
- package/docs/pilot-kit/security-qa.md +153 -0
- package/docs/pilot-kit/security-summary.md +35 -0
- package/docs/plans/2026-02-13-mcp-spike-design.md +113 -0
- package/docs/spec/AcceptanceCriteria.v1.md +17 -0
- package/docs/spec/AcceptanceEvaluation.v1.md +10 -0
- package/docs/spec/AgentEvent.v1.md +47 -0
- package/docs/spec/AgentIdentity.v1.md +62 -0
- package/docs/spec/AgentPassport.v1.md +95 -0
- package/docs/spec/AgentReputation.v1.md +59 -0
- package/docs/spec/AgentReputation.v2.md +52 -0
- package/docs/spec/AgentRun.v1.md +47 -0
- package/docs/spec/AgentRunSettlement.v1.md +52 -0
- package/docs/spec/AgentWallet.v1.md +43 -0
- package/docs/spec/AgreementDelegation.v1.md +109 -0
- package/docs/spec/ArbitrationCase.v1.md +67 -0
- package/docs/spec/ArbitrationVerdict.v1.md +60 -0
- package/docs/spec/BundleHeadAttestation.v1.md +32 -0
- package/docs/spec/CANONICAL_JSON.md +31 -0
- package/docs/spec/CRYPTOGRAPHY.md +61 -0
- package/docs/spec/ClosePack.v1.md +49 -0
- package/docs/spec/ClosePackManifest.v1.md +24 -0
- package/docs/spec/DelegationGrant.v1.md +90 -0
- package/docs/spec/DisputeOpenEnvelope.v1.md +43 -0
- package/docs/spec/ERRORS.md +76 -0
- package/docs/spec/ESCROW_NETTING_INVARIANTS.md +71 -0
- package/docs/spec/EvidenceIndex.v1.md +20 -0
- package/docs/spec/ExecutionIntent.v1.md +90 -0
- package/docs/spec/FinancePackBundleManifest.v1.md +24 -0
- package/docs/spec/FundingHold.v1.md +60 -0
- package/docs/spec/GovernancePolicy.v1.md +34 -0
- package/docs/spec/GovernancePolicy.v2.md +30 -0
- package/docs/spec/INVARIANTS.md +389 -0
- package/docs/spec/InteractionDirectionMatrix.v1.md +30 -0
- package/docs/spec/InvoiceBundleManifest.v1.md +24 -0
- package/docs/spec/InvoiceClaim.v1.md +11 -0
- package/docs/spec/MONEY_RAIL_STATE_MACHINE.md +58 -0
- package/docs/spec/MarketplaceAcceptance.v2.md +46 -0
- package/docs/spec/MarketplaceOffer.v2.md +54 -0
- package/docs/spec/MeteringReport.v1.md +18 -0
- package/docs/spec/PRODUCER_ERRORS.md +42 -0
- package/docs/spec/PricingMatrix.v1.md +20 -0
- package/docs/spec/PricingMatrixSignatures.v1.md +30 -0
- package/docs/spec/PricingMatrixSignatures.v2.md +29 -0
- package/docs/spec/ProduceCliOutput.v1.md +46 -0
- package/docs/spec/ProofBundleManifest.v1.md +24 -0
- package/docs/spec/README.md +104 -0
- package/docs/spec/REFERENCE_IMPLEMENTATIONS.md +29 -0
- package/docs/spec/REFERENCE_VERIFIER_BEHAVIOR.md +68 -0
- package/docs/spec/REMOTE_SIGNER.md +66 -0
- package/docs/spec/ReleaseIndex.v1.md +32 -0
- package/docs/spec/ReleaseIndexSignatures.v1.md +17 -0
- package/docs/spec/ReleaseTrust.v1.md +13 -0
- package/docs/spec/ReleaseTrust.v2.md +26 -0
- package/docs/spec/RemoteSignerRequest.v1.md +21 -0
- package/docs/spec/RemoteSignerResponse.v1.md +16 -0
- package/docs/spec/ReputationEvent.v1.md +63 -0
- package/docs/spec/RevocationList.v1.md +28 -0
- package/docs/spec/SIGNER_PROVIDER_PLUGIN.md +32 -0
- package/docs/spec/STRICTNESS.md +68 -0
- package/docs/spec/SUPPLY_CHAIN.md +33 -0
- package/docs/spec/SettlementAdjustment.v1.md +45 -0
- package/docs/spec/SettlementDecisionRecord.v1.md +48 -0
- package/docs/spec/SettlementDecisionRecord.v2.md +51 -0
- package/docs/spec/SettlementDecisionReport.v1.md +44 -0
- package/docs/spec/SettlementKernel.v1.md +59 -0
- package/docs/spec/SettlementReceipt.v1.md +63 -0
- package/docs/spec/SlaDefinition.v1.md +24 -0
- package/docs/spec/SlaEvaluation.v1.md +12 -0
- package/docs/spec/THREAT_MODEL.md +113 -0
- package/docs/spec/TOOL_PROVENANCE.md +30 -0
- package/docs/spec/TRUST_ANCHORS.md +84 -0
- package/docs/spec/TenantSettings.v1.md +90 -0
- package/docs/spec/TenantSettings.v2.md +99 -0
- package/docs/spec/TimestampProof.v1.md +25 -0
- package/docs/spec/ToolCallAgreement.v1.md +34 -0
- package/docs/spec/ToolCallEvidence.v1.md +47 -0
- package/docs/spec/ToolManifest.v1.md +47 -0
- package/docs/spec/VERIFIER_ENVIRONMENT.md +38 -0
- package/docs/spec/VERSIONING.md +107 -0
- package/docs/spec/VerificationReport.v1.md +50 -0
- package/docs/spec/VerifyAboutOutput.v1.md +10 -0
- package/docs/spec/VerifyCliOutput.v1.md +28 -0
- package/docs/spec/WARNINGS.md +83 -0
- package/docs/spec/error-codes.v1.txt +285 -0
- package/docs/spec/examples/agreement_delegation_v1.example.json +21 -0
- package/docs/spec/examples/arbitration_case_v1.example.json +26 -0
- package/docs/spec/examples/arbitration_verdict_v1.example.json +32 -0
- package/docs/spec/examples/dispute_open_envelope_v1.example.json +18 -0
- package/docs/spec/examples/produce_cli_output_v1.example.json +32 -0
- package/docs/spec/examples/release_index_signature_v1.example.json +9 -0
- package/docs/spec/examples/release_index_signatures_v1.example.json +14 -0
- package/docs/spec/examples/release_index_v1.example.json +15 -0
- package/docs/spec/examples/release_trust_v1.example.json +7 -0
- package/docs/spec/examples/release_trust_v2.example.json +22 -0
- package/docs/spec/examples/remote_signer_request_v1.example.json +18 -0
- package/docs/spec/examples/remote_signer_response_v1.example.json +8 -0
- package/docs/spec/examples/reputation_event_v1.example.json +29 -0
- package/docs/spec/examples/verification_report_v1.example.json +24 -0
- package/docs/spec/examples/verify_about_output_v1.example.json +29 -0
- package/docs/spec/examples/verify_cli_output_v1.example.json +13 -0
- package/docs/spec/legacy/MarketplaceAcceptance.v1.md +48 -0
- package/docs/spec/legacy/MarketplaceOffer.v1.md +56 -0
- package/docs/spec/legacy/schemas/MarketplaceAcceptance.v1.schema.json +53 -0
- package/docs/spec/legacy/schemas/MarketplaceOffer.v1.schema.json +61 -0
- package/docs/spec/producer-error-codes.v1.txt +14 -0
- package/docs/spec/schemas/AcceptanceCriteria.v1.schema.json +24 -0
- package/docs/spec/schemas/AcceptanceEvaluation.v1.schema.json +26 -0
- package/docs/spec/schemas/AgentEvent.v1.schema.json +49 -0
- package/docs/spec/schemas/AgentIdentity.v1.schema.json +129 -0
- package/docs/spec/schemas/AgentPassport.v1.schema.json +112 -0
- package/docs/spec/schemas/AgentReputation.v1.schema.json +151 -0
- package/docs/spec/schemas/AgentReputation.v2.schema.json +120 -0
- package/docs/spec/schemas/AgentRun.v1.schema.json +71 -0
- package/docs/spec/schemas/AgentRunSettlement.v1.schema.json +75 -0
- package/docs/spec/schemas/AgentWallet.v1.schema.json +54 -0
- package/docs/spec/schemas/AgreementDelegation.v1.schema.json +50 -0
- package/docs/spec/schemas/ArbitrationCase.v1.schema.json +133 -0
- package/docs/spec/schemas/ArbitrationVerdict.v1.schema.json +149 -0
- package/docs/spec/schemas/BundleHeadAttestation.v1.schema.json +21 -0
- package/docs/spec/schemas/ClosePackManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/DelegationGrant.v1.schema.json +102 -0
- package/docs/spec/schemas/DisputeOpenEnvelope.v1.schema.json +78 -0
- package/docs/spec/schemas/EvidenceIndex.v1.schema.json +41 -0
- package/docs/spec/schemas/ExecutionIntent.v1.schema.json +85 -0
- package/docs/spec/schemas/FinancePackBundleManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/FundingHold.v1.schema.json +46 -0
- package/docs/spec/schemas/GovernancePolicy.v1.schema.json +45 -0
- package/docs/spec/schemas/GovernancePolicy.v2.schema.json +70 -0
- package/docs/spec/schemas/InteractionDirectionMatrix.v1.schema.json +43 -0
- package/docs/spec/schemas/InvoiceBundleManifest.v1.schema.json +38 -0
- package/docs/spec/schemas/InvoiceClaim.v1.schema.json +39 -0
- package/docs/spec/schemas/MarketplaceAcceptance.v2.schema.json +53 -0
- package/docs/spec/schemas/MarketplaceOffer.v2.schema.json +61 -0
- package/docs/spec/schemas/MeteringReport.v1.schema.json +45 -0
- package/docs/spec/schemas/PricingMatrix.v1.schema.json +24 -0
- package/docs/spec/schemas/PricingMatrixSignatures.v1.schema.json +24 -0
- package/docs/spec/schemas/PricingMatrixSignatures.v2.schema.json +24 -0
- package/docs/spec/schemas/ProduceCliOutput.v1.schema.json +107 -0
- package/docs/spec/schemas/ProofBundleManifest.v1.schema.json +37 -0
- package/docs/spec/schemas/PublicKeys.v1.schema.json +33 -0
- package/docs/spec/schemas/ReleaseIndex.v1.schema.json +45 -0
- package/docs/spec/schemas/ReleaseIndexSignature.v1.schema.json +16 -0
- package/docs/spec/schemas/ReleaseIndexSignatures.v1.schema.json +16 -0
- package/docs/spec/schemas/ReleaseTrust.v1.schema.json +15 -0
- package/docs/spec/schemas/ReleaseTrust.v2.schema.json +37 -0
- package/docs/spec/schemas/RemoteSignerPublicKeyResponse.v1.schema.json +14 -0
- package/docs/spec/schemas/RemoteSignerRequest.v1.schema.json +24 -0
- package/docs/spec/schemas/RemoteSignerResponse.v1.schema.json +10 -0
- package/docs/spec/schemas/RemoteSignerSignRequest.v1.schema.json +27 -0
- package/docs/spec/schemas/RemoteSignerSignResponse.v1.schema.json +16 -0
- package/docs/spec/schemas/ReputationEvent.v1.schema.json +164 -0
- package/docs/spec/schemas/RevocationList.v1.schema.json +51 -0
- package/docs/spec/schemas/SettlementAdjustment.v1.schema.json +44 -0
- package/docs/spec/schemas/SettlementDecisionRecord.v1.schema.json +66 -0
- package/docs/spec/schemas/SettlementDecisionRecord.v2.schema.json +148 -0
- package/docs/spec/schemas/SettlementDecisionReport.v1.schema.json +61 -0
- package/docs/spec/schemas/SettlementReceipt.v1.schema.json +135 -0
- package/docs/spec/schemas/SlaDefinition.v1.schema.json +33 -0
- package/docs/spec/schemas/SlaEvaluation.v1.schema.json +26 -0
- package/docs/spec/schemas/TenantSettings.v1.schema.json +90 -0
- package/docs/spec/schemas/TenantSettings.v2.schema.json +161 -0
- package/docs/spec/schemas/TimestampProof.v1.schema.json +17 -0
- package/docs/spec/schemas/ToolCallAgreement.v1.schema.json +34 -0
- package/docs/spec/schemas/ToolCallEvidence.v1.schema.json +45 -0
- package/docs/spec/schemas/ToolManifest.v1.schema.json +54 -0
- package/docs/spec/schemas/VerificationReport.v1.schema.json +83 -0
- package/docs/spec/schemas/VerifyAboutOutput.v1.schema.json +54 -0
- package/docs/spec/schemas/VerifyCliOutput.v1.schema.json +75 -0
- package/docs/spec/schemas/VerifyReleaseOutput.v1.schema.json +47 -0
- package/docs/spec/x402-error-codes.v1.txt +21 -0
- package/docs/templates/buyer-email.txt +18 -0
- package/docs/templates/buyer-one-pager.md +24 -0
- package/package.json +40 -6
- package/scripts/acceptance/full-stack.mjs +734 -0
- package/scripts/acceptance/full-stack.sh +99 -0
- package/scripts/audit/build-audit-packet.mjs +242 -0
- package/scripts/backup-pg.sh +45 -0
- package/scripts/backup-restore/README.md +18 -0
- package/scripts/backup-restore/capture-state.mjs +130 -0
- package/scripts/backup-restore/client.mjs +97 -0
- package/scripts/backup-restore/seed-workload.mjs +235 -0
- package/scripts/backup-restore/verify-state.mjs +139 -0
- package/scripts/backup-restore-test.sh +217 -0
- package/scripts/chaos.js +221 -0
- package/scripts/ci/build-launch-cutover-packet.mjs +148 -0
- package/scripts/ci/build-self-serve-benchmark-report.mjs +122 -0
- package/scripts/ci/changelog-guard.mjs +145 -0
- package/scripts/ci/check-kernel-v0-launch-gate.mjs +233 -0
- package/scripts/ci/check-secret-hygiene.mjs +78 -0
- package/scripts/ci/check-version-consistency.mjs +42 -0
- package/scripts/ci/cli-pack-smoke.mjs +160 -0
- package/scripts/ci/flake-budget-guard.mjs +68 -0
- package/scripts/ci/generate-error-codes.mjs +54 -0
- package/scripts/ci/lib/lighthouse-tracker.mjs +90 -0
- package/scripts/ci/lib/self-serve-launch-gate.mjs +89 -0
- package/scripts/ci/npm-pack-smoke.mjs +454 -0
- package/scripts/ci/run-10x-throughput-drill.mjs +246 -0
- package/scripts/ci/run-10x-throughput-incident-rehearsal.mjs +325 -0
- package/scripts/ci/run-arbitration-workspace-browser-e2e.sh +22 -0
- package/scripts/ci/run-circle-sandbox-smoke.mjs +237 -0
- package/scripts/ci/run-go-live-gate.mjs +150 -0
- package/scripts/ci/run-kernel-v0-ship-gate.mjs +97 -0
- package/scripts/ci/run-mcp-host-smoke.mjs +275 -0
- package/scripts/ci/run-self-serve-launch-gate.mjs +56 -0
- package/scripts/ci/runtime-import-smoke.mjs +58 -0
- package/scripts/ci/update-lighthouse-tracker.mjs +112 -0
- package/scripts/closepack/lib.mjs +286 -0
- package/scripts/collect-debug.sh +263 -0
- package/scripts/demo/compositional-settlement-3hop.mjs +237 -0
- package/scripts/demo/delivery-robot/export-ui-fixture.mjs +188 -0
- package/scripts/demo/delivery-robot/generate.mjs +377 -0
- package/scripts/demo/kernel-agent-goes-shopping.mjs +202 -0
- package/scripts/demo/magic-link-first-green.mjs +118 -0
- package/scripts/demo/magic-link-kind-smoke.mjs +577 -0
- package/scripts/demo/mcp-paid-exa.mjs +1110 -0
- package/scripts/dev/billing-doctor.sh +145 -0
- package/scripts/dev/billing-smoke-prod.sh +219 -0
- package/scripts/dev/billing-webhook-replay.sh +161 -0
- package/scripts/dev/env.dev.example +29 -0
- package/scripts/dev/env.sh +37 -0
- package/scripts/dev/new-sdk-key.sh +81 -0
- package/scripts/dev/sdk-first-run.sh +21 -0
- package/scripts/dev/smoke-x402-gateway.sh +115 -0
- package/scripts/dev/start-api.sh +24 -0
- package/scripts/examples/produce-and-verify-jobproof.mjs +191 -0
- package/scripts/examples/sdk-first-paid-rfq.py +105 -0
- package/scripts/examples/sdk-first-verified-run.mjs +85 -0
- package/scripts/examples/sdk-first-verified-run.py +99 -0
- package/scripts/examples/sdk-tenant-analytics.mjs +103 -0
- package/scripts/examples/sdk-tenant-analytics.py +118 -0
- package/scripts/finance-pack/bundle.mjs +284 -0
- package/scripts/fixtures/generate-bundle-fixtures.mjs +877 -0
- package/scripts/governance/export.mjs +169 -0
- package/scripts/load/delivery-stress.k6.js +183 -0
- package/scripts/load/ingest-burst.k6.js +236 -0
- package/scripts/load/run-delivery-load.js +66 -0
- package/scripts/load/webhook-receiver.js +131 -0
- package/scripts/magic-link/migrate-run-records-to-db.mjs +35 -0
- package/scripts/mcp/probe.mjs +238 -0
- package/scripts/mcp/settld-mcp-http-gateway.mjs +178 -0
- package/scripts/mcp/settld-mcp-server.mjs +1201 -0
- package/scripts/openapi/write.mjs +13 -0
- package/scripts/ops/bootstrap-tenant-conformance.mjs +185 -0
- package/scripts/ops/build-x402-pilot-reliability-report.mjs +489 -0
- package/scripts/ops/check-x402-receipt-sample.mjs +181 -0
- package/scripts/ops/design-partner-run-packet.mjs +466 -0
- package/scripts/ops/hosted-baseline-evidence.mjs +681 -0
- package/scripts/ops/money-rails-chargeback-evidence.mjs +509 -0
- package/scripts/ops/money-rails-reconcile-evidence.mjs +180 -0
- package/scripts/ops/p0-seed-money-rail-operation.mjs +432 -0
- package/scripts/pilot/finance-pack.mjs +495 -0
- package/scripts/pilot/fixtures/robot-keypair.json +4 -0
- package/scripts/pilot/fixtures/server-signer.json +4 -0
- package/scripts/proof-bundle/job.mjs +109 -0
- package/scripts/proof-bundle/lib.mjs +92 -0
- package/scripts/proof-bundle/month.mjs +103 -0
- package/scripts/provider/conformance-run.mjs +159 -0
- package/scripts/provider/keys-generate.mjs +135 -0
- package/scripts/provider/publish.mjs +420 -0
- package/scripts/quickstart/x402.mjs +334 -0
- package/scripts/release/build-artifacts.mjs +181 -0
- package/scripts/release/generate-release-index.mjs +112 -0
- package/scripts/release/release-index-lib.mjs +232 -0
- package/scripts/release/sign-release-index.mjs +85 -0
- package/scripts/release/validate-release-assets.mjs +170 -0
- package/scripts/release/verify-release.mjs +261 -0
- package/scripts/restore-pg.sh +34 -0
- package/scripts/scaffold/create-settld-paid-tool.mjs +19 -0
- package/scripts/sdk/smoke-python.py +30 -0
- package/scripts/sdk/smoke.mjs +16 -0
- package/scripts/settlement/x402-batch-worker.mjs +1091 -0
- package/scripts/slo/check.mjs +178 -0
- package/scripts/smoke/k8s-smoke.mjs +214 -0
- package/scripts/spec/generate-protocol-vectors.mjs +931 -0
- package/scripts/test/check-no-generated-artifacts.sh +12 -0
- package/scripts/test/run.sh +45 -0
- package/scripts/trust/validate-trust-file.mjs +57 -0
- package/scripts/trust-config/rotate-settld-pay.mjs +277 -0
- package/scripts/trust-config/wizard.mjs +161 -0
- package/scripts/vendor-contract-test-lib.mjs +182 -0
- package/scripts/vendor-contract-test.mjs +55 -0
- package/scripts/vercel/build-mkdocs.sh +9 -0
- package/scripts/vercel/ignore-mkdocs.sh +25 -0
- package/scripts/vercel/install-mkdocs.sh +6 -0
- package/scripts/verify-pg.js +217 -0
- package/scripts/x402/receipt-verify.mjs +289 -0
- package/services/finance-sink/src/dedupe-store.js +29 -6
- package/services/receiver/src/dedupe-store.js +29 -5
- package/services/x402-gateway/Dockerfile +13 -0
- package/services/x402-gateway/README.md +58 -0
- package/services/x402-gateway/examples/upstream-mock.js +337 -0
- package/services/x402-gateway/src/server.js +947 -0
- package/src/api/app.js +32517 -16877
- package/src/api/maintenance.js +70 -0
- package/src/api/openapi.js +1130 -17
- package/src/api/persistence.js +272 -0
- package/src/api/server.js +81 -5
- package/src/api/store.js +1248 -6
- package/src/api/workers/deliveries.js +99 -4
- package/src/api/workers/insolvency-sweep.js +159 -0
- package/src/core/agent-card.js +69 -0
- package/src/core/agent-wallets.js +97 -0
- package/src/core/agreement-delegation.js +549 -0
- package/src/core/billing-plans.js +40 -6
- package/src/core/circle-reserve-adapter.js +845 -0
- package/src/core/maintenance-locks.js +1 -0
- package/src/core/paid-tool-manifest.js +318 -0
- package/src/core/provider-publish-conformance.js +525 -0
- package/src/core/provider-publish-proof.js +396 -0
- package/src/core/provider-quote-signature.js +170 -0
- package/src/core/settld-keys.js +112 -0
- package/src/core/settld-pay-token.js +344 -0
- package/src/core/settlement-kernel.js +213 -2
- package/src/core/settlement-verifier.js +335 -0
- package/src/core/tool-call-agreement.js +112 -0
- package/src/core/tool-call-evidence.js +144 -0
- package/src/core/tool-provider-signature.js +98 -0
- package/src/core/x402-escalation-override.js +258 -0
- package/src/core/x402-gate.js +118 -0
- package/src/core/x402-provider-refund-decision.js +220 -0
- package/src/core/x402-receipt-verifier.js +708 -0
- package/src/core/x402-reversal-command.js +251 -0
- package/src/core/x402-wallet-issuer-decision.js +252 -0
- package/src/core/zk-verifier.js +300 -0
- package/src/db/migrations/029_reputation_event_index.sql +54 -0
- package/src/db/migrations/030_artifacts_source_event_unique_job_only.sql +15 -0
- package/src/db/pg.js +18 -7
- package/src/db/store-pg.js +838 -72
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# Quickstart: MCP (Stdio Spike)
|
|
2
|
+
|
|
3
|
+
This quickstart connects an MCP-compatible agent/client to Settld using the Sprint 23 `stdio` MCP spike server.
|
|
4
|
+
|
|
5
|
+
For host-specific setup (Claude, Cursor, Codex, OpenClaw), see `docs/QUICKSTART_MCP_HOSTS.md`.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js 20+
|
|
10
|
+
- A Settld API key with appropriate scopes (`keyId.secret` format)
|
|
11
|
+
- Settld API reachable (local `npm run dev:api` or hosted)
|
|
12
|
+
|
|
13
|
+
## One-Command Local Demo (Paid MCP Exa Flow)
|
|
14
|
+
|
|
15
|
+
Boots local API + provider wrapper + x402 gateway, runs MCP `settld.exa_search_paid`, verifies signatures/tokens, and writes an artifact bundle.
|
|
16
|
+
|
|
17
|
+
To scaffold your own paid tool server quickly:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx create-settld-paid-tool my-paid-tool
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Run provider conformance/publish with machine-readable artifacts:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run provider:conformance -- \
|
|
27
|
+
--manifest ./paid-tool-manifest.json \
|
|
28
|
+
--base-url http://127.0.0.1:9402 \
|
|
29
|
+
--api-url http://127.0.0.1:3000 \
|
|
30
|
+
--api-key "$SETTLD_API_KEY" \
|
|
31
|
+
--json-out artifacts/provider-conformance.json
|
|
32
|
+
|
|
33
|
+
npm run provider:publish -- \
|
|
34
|
+
--manifest ./paid-tool-manifest.json \
|
|
35
|
+
--base-url http://127.0.0.1:9402 \
|
|
36
|
+
--api-url http://127.0.0.1:3000 \
|
|
37
|
+
--api-key "$SETTLD_API_KEY" \
|
|
38
|
+
--json-out artifacts/provider-publication.json \
|
|
39
|
+
--conformance-json-out artifacts/provider-conformance-from-publish.json
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Notes:
|
|
43
|
+
|
|
44
|
+
- `provider:conformance` exits non-zero when verdict is not `ok` (use `--allow-fail` to keep exit code `0`).
|
|
45
|
+
- `provider:publish` exits non-zero when `runConformance` is enabled and publication is not `certified` (use `--allow-fail` to keep exit code `0`).
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm run demo:mcp-paid-exa
|
|
49
|
+
npm run demo:mcp-paid-weather
|
|
50
|
+
npm run demo:mcp-paid-llm
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Circle sandbox mode (real reserve path):
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
SETTLD_DEMO_CIRCLE_MODE=sandbox \
|
|
57
|
+
X402_REQUIRE_EXTERNAL_RESERVE=1 \
|
|
58
|
+
npm run demo:mcp-paid-exa -- --circle=sandbox
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Circle sandbox mode with batch settlement execution:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
SETTLD_DEMO_CIRCLE_MODE=sandbox \
|
|
65
|
+
SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1 \
|
|
66
|
+
SETTLD_DEMO_BATCH_PROVIDER_WALLET_ID="$CIRCLE_WALLET_ID_ESCROW" \
|
|
67
|
+
X402_REQUIRE_EXTERNAL_RESERVE=1 \
|
|
68
|
+
npm run demo:mcp-paid-exa -- --circle=sandbox
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Success output:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
PASS artifactDir=artifacts/mcp-paid-exa/...
|
|
75
|
+
gateId=...
|
|
76
|
+
decisionId=...
|
|
77
|
+
settlementReceiptId=...
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Artifact bundle includes:
|
|
81
|
+
|
|
82
|
+
- `summary.json`
|
|
83
|
+
- `mcp-call.raw.json`
|
|
84
|
+
- `mcp-call.parsed.json`
|
|
85
|
+
- `response-body.json`
|
|
86
|
+
- `gate-state.json`
|
|
87
|
+
- `reserve-state.json`
|
|
88
|
+
- `provider-signature-verification.json`
|
|
89
|
+
- `settld-pay-token-verification.json`
|
|
90
|
+
- `batch-payout-registry.json` (when `SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1`)
|
|
91
|
+
- `batch-worker-state.json` (when `SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1`)
|
|
92
|
+
- `batch-settlement.json` (when `SETTLD_DEMO_RUN_BATCH_SETTLEMENT=1`)
|
|
93
|
+
|
|
94
|
+
## Authority + Pinning Notes
|
|
95
|
+
|
|
96
|
+
- Authority enforcement in this flow is API key scope + tenant-bound policy checks at Settld API/gateway surfaces.
|
|
97
|
+
- Replay-critical settlement policy pinning is captured in `SettlementDecisionRecord.v2` (`policyHashUsed`, `verificationMethodHashUsed`), so decisions remain auditable and deterministic.
|
|
98
|
+
- Receipts and exports bind the paid call to decision + settlement artifacts:
|
|
99
|
+
- `decisionId` (printed by demo and present in receipt data)
|
|
100
|
+
- `settlementReceiptId` (printed by demo and present in receipt data)
|
|
101
|
+
|
|
102
|
+
Reference specs:
|
|
103
|
+
|
|
104
|
+
- `docs/spec/SettlementDecisionRecord.v2.md`
|
|
105
|
+
- `docs/spec/SettlementReceipt.v1.md`
|
|
106
|
+
- `docs/spec/SettlementKernel.v1.md`
|
|
107
|
+
|
|
108
|
+
## Run The MCP Server
|
|
109
|
+
|
|
110
|
+
Set environment variables:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
export SETTLD_BASE_URL='https://api.settld.work' # or http://127.0.0.1:3000
|
|
114
|
+
export SETTLD_TENANT_ID='tenant_default'
|
|
115
|
+
export SETTLD_API_KEY='sk_live_xxx.yyy' # keyId.secret (do not commit)
|
|
116
|
+
export SETTLD_PROTOCOL='1.0' # optional; server will try to auto-discover
|
|
117
|
+
export SETTLD_PAID_TOOLS_BASE_URL='http://127.0.0.1:8402' # optional; paid x402 tools
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Start the server:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm run mcp:server
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The server speaks JSON-RPC 2.0 over `stdio` and exposes curated tools.
|
|
127
|
+
If you run it in a normal terminal, it will just sit waiting for JSON-RPC input (this is expected). Use `mcp:probe` below to validate it end-to-end.
|
|
128
|
+
|
|
129
|
+
## Optional: HTTP Gateway (HTTP -> MCP stdio)
|
|
130
|
+
|
|
131
|
+
This is useful if you can do HTTP calls but cannot spawn a local MCP process.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
export MCP_HTTP_PORT=8787
|
|
135
|
+
npm run mcp:http
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Then send JSON-RPC requests:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
curl -sS http://127.0.0.1:8787/rpc \
|
|
142
|
+
-H 'content-type: application/json' \
|
|
143
|
+
-d '{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"curl","version":"0"},"capabilities":{}}}' | jq .
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Sanity Check (No Manual JSON Copy/Paste)
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
npm run mcp:probe
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
This spawns the MCP server, runs `initialize` and `tools/list`, prints the responses, and exits.
|
|
153
|
+
|
|
154
|
+
## x402 Gate Smoke (create -> verify -> get)
|
|
155
|
+
|
|
156
|
+
Run an end-to-end x402 gate flow over MCP with explicit idempotency keys:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
npm run -s mcp:probe -- --x402-smoke
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
This performs:
|
|
163
|
+
|
|
164
|
+
1. `settld.x402_gate_create`
|
|
165
|
+
2. `settld.x402_gate_verify` (auto-authorize enabled by default)
|
|
166
|
+
3. `settld.x402_gate_get`
|
|
167
|
+
|
|
168
|
+
You can override payloads from a JSON file:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
cat > /tmp/settld-mcp-x402-smoke.json <<'JSON'
|
|
172
|
+
{
|
|
173
|
+
"create": {
|
|
174
|
+
"amountCents": 250,
|
|
175
|
+
"idempotencyKey": "mcp_probe_create_custom_1"
|
|
176
|
+
},
|
|
177
|
+
"verify": {
|
|
178
|
+
"idempotencyKey": "mcp_probe_verify_custom_1",
|
|
179
|
+
"authorizeIdempotencyKey": "mcp_probe_auth_custom_1"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
JSON
|
|
183
|
+
|
|
184
|
+
npm run -s mcp:probe -- --x402-smoke --x402-smoke-file /tmp/settld-mcp-x402-smoke.json
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Agreement Delegation Tools (create/list)
|
|
188
|
+
|
|
189
|
+
Create a delegation edge and list it via MCP:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
cat > /tmp/settld-mcp-delegation-create.json <<'JSON'
|
|
193
|
+
{
|
|
194
|
+
"parentAgreementHash": "1111111111111111111111111111111111111111111111111111111111111111",
|
|
195
|
+
"childAgreementHash": "2222222222222222222222222222222222222222222222222222222222222222",
|
|
196
|
+
"delegatorAgentId": "agt_parent",
|
|
197
|
+
"delegateeAgentId": "agt_child",
|
|
198
|
+
"budgetCapCents": 500,
|
|
199
|
+
"idempotencyKey": "mcp_probe_delegation_create_1"
|
|
200
|
+
}
|
|
201
|
+
JSON
|
|
202
|
+
|
|
203
|
+
npm run -s mcp:probe -- --call-file settld.agreement_delegation_create /tmp/settld-mcp-delegation-create.json
|
|
204
|
+
npm run -s mcp:probe -- --call settld.agreement_delegation_list '{"agreementHash":"1111111111111111111111111111111111111111111111111111111111111111","status":"active","limit":20,"offset":0}'
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
`settld.agreement_delegation_create` responses include `delegation.delegationHash` for deterministic orchestration and audit bindings.
|
|
208
|
+
|
|
209
|
+
## Live Call Without Shell-JSON Footguns
|
|
210
|
+
|
|
211
|
+
If your terminal copy/paste keeps inserting line breaks, pass tool arguments via a JSON file:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
cat > /tmp/settld-mcp-create-agreement.json <<'JSON'
|
|
215
|
+
{"amountCents":500,"currency":"USD","title":"MCP live probe","capability":"agent-task:demo","disputeWindowDays":7}
|
|
216
|
+
JSON
|
|
217
|
+
|
|
218
|
+
npm run -s mcp:probe -- --call-file settld.create_agreement /tmp/settld-mcp-create-agreement.json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Alternative that avoids paste issues entirely:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
jq -n '{amountCents:500,currency:"USD",title:"MCP live probe",capability:"agent-task:demo",disputeWindowDays:7}' \
|
|
225
|
+
> /tmp/settld-mcp-create-agreement.json
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Tool Flow (Typical)
|
|
229
|
+
|
|
230
|
+
1. Create an agreement (marketplace-backed) and a run:
|
|
231
|
+
|
|
232
|
+
Method: `tools/call`
|
|
233
|
+
|
|
234
|
+
Tool: `settld.create_agreement`
|
|
235
|
+
|
|
236
|
+
Arguments example:
|
|
237
|
+
|
|
238
|
+
```json
|
|
239
|
+
{
|
|
240
|
+
"amountCents": 500,
|
|
241
|
+
"currency": "USD",
|
|
242
|
+
"title": "MCP spike agreement",
|
|
243
|
+
"capability": "agent-task:demo",
|
|
244
|
+
"disputeWindowDays": 7
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
2. Submit evidence for the run:
|
|
249
|
+
|
|
250
|
+
Tool: `settld.submit_evidence`
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"agentId": "<payeeAgentId from create_agreement>",
|
|
255
|
+
"runId": "<runId from create_agreement>",
|
|
256
|
+
"evidenceRef": "evidence://demo/step-1"
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
3. Settle the run:
|
|
261
|
+
|
|
262
|
+
Tool: `settld.settle_run`
|
|
263
|
+
|
|
264
|
+
```json
|
|
265
|
+
{
|
|
266
|
+
"agentId": "<payeeAgentId>",
|
|
267
|
+
"runId": "<runId>",
|
|
268
|
+
"outcome": "completed",
|
|
269
|
+
"outputRef": "evidence://demo/output"
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
4. Resolve the settlement (so it is no longer `locked`):
|
|
274
|
+
|
|
275
|
+
Tool: `settld.resolve_settlement`
|
|
276
|
+
|
|
277
|
+
```json
|
|
278
|
+
{
|
|
279
|
+
"runId": "<runId>",
|
|
280
|
+
"status": "released",
|
|
281
|
+
"reason": "demo settlement resolution"
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
5. Open a dispute (only valid within the dispute window):
|
|
286
|
+
|
|
287
|
+
Tool: `settld.open_dispute`
|
|
288
|
+
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"runId": "<runId>",
|
|
292
|
+
"reason": "Disputing for demo purposes",
|
|
293
|
+
"evidenceRefs": ["evidence://demo/dispute/1"],
|
|
294
|
+
"waitMs": 5000
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Paid Tool Flows (`settld.exa_search_paid`, `settld.weather_current_paid`)
|
|
299
|
+
|
|
300
|
+
Both paid tools exercise the same x402 path from MCP:
|
|
301
|
+
|
|
302
|
+
1. First call returns `402` from the paid endpoint.
|
|
303
|
+
2. MCP wrapper retries with `x-settld-gate-id`.
|
|
304
|
+
3. Gateway returns `200` and `x-settld-*` verification/settlement headers.
|
|
305
|
+
|
|
306
|
+
Run the local paid upstream + gateway from `docs/QUICKSTART_X402_GATEWAY.md`, then invoke:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
cat > /tmp/settld-mcp-exa-search.json <<'JSON'
|
|
310
|
+
{"query":"dentist near me chicago","numResults":3}
|
|
311
|
+
JSON
|
|
312
|
+
|
|
313
|
+
SETTLD_PAID_TOOLS_BASE_URL='http://127.0.0.1:8402' \
|
|
314
|
+
npm run -s mcp:probe -- --call-file settld.exa_search_paid /tmp/settld-mcp-exa-search.json
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
Exa call result includes:
|
|
318
|
+
|
|
319
|
+
- `response`: Exa-style search body.
|
|
320
|
+
- `headers`: captured `x-settld-*` verification/settlement headers.
|
|
321
|
+
|
|
322
|
+
Weather call example:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
cat > /tmp/settld-mcp-weather.json <<'JSON'
|
|
326
|
+
{"city":"Chicago","unit":"f"}
|
|
327
|
+
JSON
|
|
328
|
+
|
|
329
|
+
SETTLD_PAID_TOOLS_BASE_URL='http://127.0.0.1:8402' \
|
|
330
|
+
npm run -s mcp:probe -- --call-file settld.weather_current_paid /tmp/settld-mcp-weather.json
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
## Notes
|
|
334
|
+
|
|
335
|
+
- Writes require `x-settld-protocol`. The MCP server sets this automatically for write calls.
|
|
336
|
+
- Run event appends require `x-proxy-expected-prev-chain-hash`. The MCP server fetches the current head and supplies it.
|
|
337
|
+
- This is a spike (Sprint 23). Production hardening (SSE transport, rate limiting, etc.) is planned for Sprint 25.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Quickstart: MCP Host Integrations (Claude, Cursor, Codex, OpenClaw)
|
|
2
|
+
|
|
3
|
+
Use this when you want to connect a real agent host to Settld MCP in under 5 minutes.
|
|
4
|
+
|
|
5
|
+
For core MCP flow details and paid-tool artifacts, see `docs/QUICKSTART_MCP.md`.
|
|
6
|
+
|
|
7
|
+
## 0) Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js 20+
|
|
10
|
+
- Settld API reachable (`http://127.0.0.1:3000` for local or your hosted API)
|
|
11
|
+
- A tenant-scoped Settld API key (`keyId.secret` format)
|
|
12
|
+
|
|
13
|
+
Export env once in your shell:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
export SETTLD_BASE_URL='http://127.0.0.1:3000'
|
|
17
|
+
export SETTLD_TENANT_ID='tenant_default'
|
|
18
|
+
export SETTLD_API_KEY='sk_live_xxx.yyy'
|
|
19
|
+
export SETTLD_PAID_TOOLS_BASE_URL='http://127.0.0.1:8402'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Sanity check the server before wiring any host:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm run mcp:probe
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 1) Canonical MCP Server Definition
|
|
29
|
+
|
|
30
|
+
Most hosts that support MCP stdio need a command, args, and env.
|
|
31
|
+
Use this as your default server config:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"name": "settld",
|
|
36
|
+
"command": "npx",
|
|
37
|
+
"args": ["-y", "settld-mcp"],
|
|
38
|
+
"env": {
|
|
39
|
+
"SETTLD_BASE_URL": "http://127.0.0.1:3000",
|
|
40
|
+
"SETTLD_TENANT_ID": "tenant_default",
|
|
41
|
+
"SETTLD_API_KEY": "sk_live_xxx.yyy",
|
|
42
|
+
"SETTLD_PAID_TOOLS_BASE_URL": "http://127.0.0.1:8402"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If your host cannot spawn stdio commands, use HTTP bridge:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
MCP_HTTP_PORT=8787 npm run mcp:http
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Then point the host at:
|
|
54
|
+
|
|
55
|
+
- MCP endpoint: `http://127.0.0.1:8787/rpc`
|
|
56
|
+
- Health endpoint: `http://127.0.0.1:8787/healthz`
|
|
57
|
+
|
|
58
|
+
## 2) Claude
|
|
59
|
+
|
|
60
|
+
1. Open Claude MCP settings.
|
|
61
|
+
2. Add a new MCP server using the canonical config above.
|
|
62
|
+
3. Save and reconnect.
|
|
63
|
+
4. Ask Claude to call:
|
|
64
|
+
- `settld.about`
|
|
65
|
+
- `settld.exa_search_paid` with `{"query":"dentist near me chicago","numResults":3}`
|
|
66
|
+
|
|
67
|
+
Expected behavior:
|
|
68
|
+
|
|
69
|
+
- First paid call triggers x402 challenge/authorize/retry automatically in the MCP wrapper.
|
|
70
|
+
- Tool result includes Settld verification/settlement headers.
|
|
71
|
+
|
|
72
|
+
## 3) Cursor
|
|
73
|
+
|
|
74
|
+
1. Open Cursor MCP settings.
|
|
75
|
+
2. Add an MCP server using the same canonical stdio definition.
|
|
76
|
+
3. Reconnect tools.
|
|
77
|
+
4. Run:
|
|
78
|
+
- `settld.about`
|
|
79
|
+
- `settld.weather_current_paid` with `{"city":"Chicago","unit":"f"}`
|
|
80
|
+
|
|
81
|
+
Expected behavior:
|
|
82
|
+
|
|
83
|
+
- Paid tool returns response body plus `x-settld-*` headers captured by the tool bridge.
|
|
84
|
+
|
|
85
|
+
## 4) Codex
|
|
86
|
+
|
|
87
|
+
1. Open Codex MCP/tooling configuration.
|
|
88
|
+
2. Register Settld with the canonical stdio definition.
|
|
89
|
+
3. Reload tool discovery.
|
|
90
|
+
4. Run:
|
|
91
|
+
- `settld.about`
|
|
92
|
+
- `settld.exa_search_paid`
|
|
93
|
+
|
|
94
|
+
Expected behavior:
|
|
95
|
+
|
|
96
|
+
- Paid call resolves through the same x402 autopay flow.
|
|
97
|
+
|
|
98
|
+
## 5) OpenClaw
|
|
99
|
+
|
|
100
|
+
For OpenClaw, package Settld as a skill that declares MCP setup instructions.
|
|
101
|
+
Reference skill payload:
|
|
102
|
+
|
|
103
|
+
- `docs/integrations/openclaw/settld-mcp-skill/SKILL.md`
|
|
104
|
+
- `docs/integrations/openclaw/settld-mcp-skill/mcp-server.example.json`
|
|
105
|
+
- `docs/integrations/openclaw/CLAWHUB_PUBLISH_CHECKLIST.md`
|
|
106
|
+
|
|
107
|
+
Minimum skill payload should include:
|
|
108
|
+
|
|
109
|
+
- Name/description
|
|
110
|
+
- MCP server command (`npx -y settld-mcp`)
|
|
111
|
+
- Required env vars (`SETTLD_BASE_URL`, `SETTLD_TENANT_ID`, `SETTLD_API_KEY`, optional `SETTLD_PAID_TOOLS_BASE_URL`)
|
|
112
|
+
- A smoke prompt using `settld.about`
|
|
113
|
+
|
|
114
|
+
You can test locally first with:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npm run mcp:probe -- --call settld.about '{}'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 6) 5-Minute Validation Checklist
|
|
121
|
+
|
|
122
|
+
0. (CI/local gate) run hosted-style smoke once:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npm run test:ci:mcp-host-smoke
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
1. `npm run mcp:probe` passes locally.
|
|
129
|
+
2. Host discovers Settld tools (`tools/list` includes `settld.*`).
|
|
130
|
+
3. `settld.about` succeeds.
|
|
131
|
+
4. One paid tool call succeeds (`settld.exa_search_paid` or `settld.weather_current_paid`).
|
|
132
|
+
5. You can see a resulting artifact bundle from paid demo runs:
|
|
133
|
+
- `artifacts/mcp-paid-exa/.../summary.json`
|
|
134
|
+
- `artifacts/mcp-paid-weather/.../summary.json`
|
|
135
|
+
|
|
136
|
+
## 7) Troubleshooting
|
|
137
|
+
|
|
138
|
+
- `SETTLD_API_KEY must be a non-empty string`
|
|
139
|
+
- API key not injected into MCP server env.
|
|
140
|
+
- Host cannot run `npx`
|
|
141
|
+
- Install Node 20+ and ensure `npx` is on PATH, or run HTTP bridge mode.
|
|
142
|
+
- Paid tool returns gateway/connectivity errors
|
|
143
|
+
- Confirm `SETTLD_PAID_TOOLS_BASE_URL` points to a running gateway.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Quickstart: Produce + verify a bundle (bootstrap)
|
|
2
|
+
|
|
3
|
+
This quickstart is for design partners who want an end-to-end “from zero” flow:
|
|
4
|
+
|
|
5
|
+
1) initialize trust + keys
|
|
6
|
+
2) produce a bundle
|
|
7
|
+
3) verify it strictly and archive the JSON output
|
|
8
|
+
|
|
9
|
+
## 0) Install (from this repo)
|
|
10
|
+
|
|
11
|
+
From a checkout:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm ci
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 1) Initialize trust
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
node packages/artifact-produce/bin/settld-trust.js init --out out/trust --format json --force
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This writes:
|
|
24
|
+
|
|
25
|
+
- `out/trust/trust.json` (public trust anchors; safe to commit)
|
|
26
|
+
- `out/trust/keypairs.json` (private keys; **do not commit**)
|
|
27
|
+
|
|
28
|
+
For production deployments, use remote signing so no private keys touch disk:
|
|
29
|
+
|
|
30
|
+
- RemoteSigner contract: `docs/spec/REMOTE_SIGNER.md`
|
|
31
|
+
- Operator notes: `docs/OPERATIONS_SIGNING.md`
|
|
32
|
+
|
|
33
|
+
## 2) Produce a JobProof bundle
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
node packages/artifact-produce/bin/settld-produce.js jobproof \
|
|
37
|
+
--out out/jobproof \
|
|
38
|
+
--keys out/trust/keypairs.json \
|
|
39
|
+
--format json \
|
|
40
|
+
--deterministic \
|
|
41
|
+
--force
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The output JSON is `ProduceCliOutput.v1` (see `docs/spec/ProduceCliOutput.v1.md`).
|
|
45
|
+
|
|
46
|
+
## 3) Verify strictly
|
|
47
|
+
|
|
48
|
+
Export trust anchors from `trust.json`:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
export SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON="$(node -e \"const fs=require('fs'); const t=JSON.parse(fs.readFileSync('out/trust/trust.json','utf8')); process.stdout.write(JSON.stringify(t.governanceRoots||{}))\")"
|
|
52
|
+
export SETTLD_TRUSTED_TIME_AUTHORITY_KEYS_JSON="$(node -e \"const fs=require('fs'); const t=JSON.parse(fs.readFileSync('out/trust/trust.json','utf8')); process.stdout.write(JSON.stringify(t.timeAuthorities||{}))\")"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Then verify and archive machine output:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
node packages/artifact-verify/bin/settld-verify.js --format json --strict --job-proof out/jobproof > out/verify.json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`out/verify.json` is `VerifyCliOutput.v1` and is intended to be archived as audit evidence.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Quickstart: Verify a Settld Release (Authenticity)
|
|
2
|
+
|
|
3
|
+
This verifies Settld **distribution artifacts** (npm tarballs, conformance pack, audit packet) using a signed `ReleaseIndex.v1` rooted in a release trust file.
|
|
4
|
+
|
|
5
|
+
## Offline verification (recommended)
|
|
6
|
+
|
|
7
|
+
1) Download a release’s assets into a directory (example: `./release/`), including:
|
|
8
|
+
|
|
9
|
+
- `release_index_v1.json`
|
|
10
|
+
- `release_index_v1.sig`
|
|
11
|
+
- every artifact listed in `release_index_v1.json.artifacts[]`
|
|
12
|
+
|
|
13
|
+
2) Verify using the pinned release trust roots:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
settld-release verify --dir ./release --trust-file trust/release-trust.json --format json --explain
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- Exit code `0` means verified.
|
|
20
|
+
- `--format json` prints `VerifyReleaseOutput.v1` to stdout (pipe-safe, deterministic).
|
|
21
|
+
- `--explain` prints deterministic diagnostics to stderr.
|
|
22
|
+
|
|
23
|
+
## Mirror/HTTP verification (base URL)
|
|
24
|
+
|
|
25
|
+
If your org mirrors release assets under a single base URL:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
settld-release verify --base-url https://example.com/settld/releases/v1.0.0-rc.1/ --trust-file trust/release-trust.json --format json --explain
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This downloads `release_index_v1.json`, `release_index_v1.sig`, then downloads every artifact referenced by the index (relative to the base URL) into a temp directory before verifying.
|
|
32
|
+
|
|
33
|
+
## Trust domains (important)
|
|
34
|
+
|
|
35
|
+
Release authenticity trust roots are **separate** from bundle verification trust roots.
|
|
36
|
+
|
|
37
|
+
- Release trust: `trust/release-trust.json`
|
|
38
|
+
- Bundle verification trust: `SETTLD_TRUSTED_GOVERNANCE_ROOT_KEYS_JSON` / `trust.json` (see `docs/spec/TRUST_ANCHORS.md`)
|
|
39
|
+
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Quickstart: First verified agent run with the SDK
|
|
2
|
+
|
|
3
|
+
Goal: run one end-to-end agent transaction (register identities, append run events, verify `green`, release settlement) using `SettldClient.firstVerifiedRun(...)`.
|
|
4
|
+
|
|
5
|
+
## 0) Install deps
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm ci
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Fast Path (recommended)
|
|
12
|
+
|
|
13
|
+
Use the helper scripts to avoid manual export churn across shells:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npm run dev:env:init
|
|
17
|
+
# edit .env.dev with your DATABASE_URL once
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Start API:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm run dev:start
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
In another shell:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
source scripts/dev/env.sh
|
|
30
|
+
npm run dev:sdk:first-run
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Run the full billing + dispute + arbitration doctor flow:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
source scripts/dev/env.sh
|
|
37
|
+
npm run dev:billing:doctor
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Optional: make `sdk:first-run` create a disputable settlement window:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
SETTLD_SDK_DISPUTE_WINDOW_DAYS=3 npm run sdk:first-run
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 1) Start the API with a local ops token
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
export PROXY_OPS_TOKEN=dev_ops_token
|
|
50
|
+
npm run dev:api
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 2) Create an API key for SDK calls
|
|
54
|
+
|
|
55
|
+
In a second shell:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
export SETTLD_BASE_URL=http://127.0.0.1:3000
|
|
59
|
+
export SETTLD_TENANT_ID=tenant_default
|
|
60
|
+
export SETTLD_API_KEY="$(
|
|
61
|
+
curl -sS -X POST "$SETTLD_BASE_URL/ops/api-keys" \
|
|
62
|
+
-H "authorization: Bearer $PROXY_OPS_TOKEN" \
|
|
63
|
+
-H "x-proxy-tenant-id: $SETTLD_TENANT_ID" \
|
|
64
|
+
-H "content-type: application/json" \
|
|
65
|
+
-d '{"scopes":["ops_read","ops_write","finance_read","finance_write","audit_read"],"description":"sdk quickstart"}' \
|
|
66
|
+
| jq -r '.keyId + "." + .secret'
|
|
67
|
+
)"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 3) Run the SDK example
|
|
71
|
+
|
|
72
|
+
```sh
|
|
73
|
+
node scripts/examples/sdk-first-verified-run.mjs
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Expected output:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"runId": "run_sdk_...",
|
|
81
|
+
"payeeAgentId": "agt_payee_...",
|
|
82
|
+
"payerAgentId": "agt_payer_...",
|
|
83
|
+
"runStatus": "completed",
|
|
84
|
+
"verificationStatus": "green",
|
|
85
|
+
"settlementStatus": "released"
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 4) Use the helper directly in code
|
|
90
|
+
|
|
91
|
+
```js
|
|
92
|
+
import { SettldClient } from "./packages/api-sdk/src/index.js";
|
|
93
|
+
|
|
94
|
+
const client = new SettldClient({
|
|
95
|
+
baseUrl: process.env.SETTLD_BASE_URL,
|
|
96
|
+
tenantId: process.env.SETTLD_TENANT_ID,
|
|
97
|
+
apiKey: process.env.SETTLD_API_KEY,
|
|
98
|
+
xApiKey: process.env.SETTLD_X_API_KEY // optional for Magic Link deployments that enforce x-api-key
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const result = await client.firstVerifiedRun({
|
|
102
|
+
payeeAgent: { publicKeyPem: "...", owner: { ownerType: "service", ownerId: "svc_a" } },
|
|
103
|
+
payerAgent: { publicKeyPem: "...", owner: { ownerType: "service", ownerId: "svc_b" } },
|
|
104
|
+
payerCredit: { amountCents: 5000 },
|
|
105
|
+
settlement: { amountCents: 1200 },
|
|
106
|
+
run: { taskType: "translation" }
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 5) Pull tenant analytics + trust graph (Magic Link)
|
|
111
|
+
|
|
112
|
+
```js
|
|
113
|
+
const analytics = await client.getTenantAnalytics("tenant_default", { month: "2026-02", bucket: "day", limit: 20 });
|
|
114
|
+
const graph = await client.getTenantTrustGraph("tenant_default", { month: "2026-02", minRuns: 1, maxEdges: 200 });
|
|
115
|
+
const diff = await client.diffTenantTrustGraph("tenant_default", { baseMonth: "2026-01", compareMonth: "2026-02", limit: 50 });
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Or run the prebuilt script:
|
|
119
|
+
|
|
120
|
+
```sh
|
|
121
|
+
SETTLD_BASE_URL=http://127.0.0.1:8787 \
|
|
122
|
+
SETTLD_TENANT_ID=tenant_default \
|
|
123
|
+
SETTLD_X_API_KEY=test_key \
|
|
124
|
+
npm run sdk:analytics
|
|
125
|
+
```
|