@oobe-protocol-labs/sap-mcp-server 0.9.15 → 0.9.20
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/.env.example +8 -7
- package/CHANGELOG.md +227 -0
- package/README.md +3 -3
- package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
- package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
- package/USER_DOCS/05_SKILLS_AND_TOOLS.md +16 -8
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
- package/config.example.json +5 -4
- package/config.schema.json +7 -2
- package/config.secure-example.json +5 -4
- package/dist/adapters/index.d.ts +7 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mcp/errors.d.ts +13 -1
- package/dist/adapters/mcp/errors.d.ts.map +1 -1
- package/dist/adapters/mcp/errors.js +13 -1
- package/dist/adapters/mcp/errors.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +7 -1
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +7 -1
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/prompt-response.d.ts +13 -1
- package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
- package/dist/adapters/mcp/prompt-response.js +13 -1
- package/dist/adapters/mcp/prompt-response.js.map +1 -1
- package/dist/adapters/mcp/resource-response.d.ts +14 -1
- package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
- package/dist/adapters/mcp/resource-response.js +14 -1
- package/dist/adapters/mcp/resource-response.js.map +1 -1
- package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
- package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
- package/dist/adapters/mcp/sdk-compat.js +213 -24
- package/dist/adapters/mcp/sdk-compat.js.map +1 -1
- package/dist/adapters/mcp/tool-response.d.ts +39 -4
- package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
- package/dist/adapters/mcp/tool-response.js +39 -4
- package/dist/adapters/mcp/tool-response.js.map +1 -1
- package/dist/adapters/solana/commitment.d.ts +14 -2
- package/dist/adapters/solana/commitment.d.ts.map +1 -1
- package/dist/adapters/solana/commitment.js +14 -2
- package/dist/adapters/solana/commitment.js.map +1 -1
- package/dist/adapters/solana/connection.d.ts +11 -2
- package/dist/adapters/solana/connection.d.ts.map +1 -1
- package/dist/adapters/solana/connection.js +11 -2
- package/dist/adapters/solana/connection.js.map +1 -1
- package/dist/adapters/solana/index.d.ts +7 -1
- package/dist/adapters/solana/index.d.ts.map +1 -1
- package/dist/adapters/solana/index.js +7 -1
- package/dist/adapters/solana/index.js.map +1 -1
- package/dist/adapters/solana/public-key.d.ts +11 -2
- package/dist/adapters/solana/public-key.d.ts.map +1 -1
- package/dist/adapters/solana/public-key.js +11 -2
- package/dist/adapters/solana/public-key.js.map +1 -1
- package/dist/config/defaults.d.ts +5 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/env.d.ts +4 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +11 -6
- package/dist/config/env.js.map +1 -1
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-client-injection.d.ts.map +1 -1
- package/dist/config/mcp-client-injection.js +97 -1
- package/dist/config/mcp-client-injection.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +5 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +3 -10
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js +5 -0
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/schema.d.ts +5 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/secure-config.d.ts +5 -0
- package/dist/config/secure-config.d.ts.map +1 -1
- package/dist/config/secure-config.js +5 -0
- package/dist/config/secure-config.js.map +1 -1
- package/dist/config/setup.d.ts +5 -0
- package/dist/config/setup.d.ts.map +1 -1
- package/dist/config/setup.js +5 -0
- package/dist/config/setup.js.map +1 -1
- package/dist/config-cli.d.ts +3 -13
- package/dist/config-cli.d.ts.map +1 -1
- package/dist/config-cli.js +5 -0
- package/dist/config-cli.js.map +1 -1
- package/dist/core/constants.d.ts +25 -6
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +27 -8
- package/dist/core/constants.js.map +1 -1
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +5 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/guards.d.ts +5 -0
- package/dist/core/guards.d.ts.map +1 -1
- package/dist/core/guards.js +3 -1
- package/dist/core/guards.js.map +1 -1
- package/dist/core/index.d.ts +7 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/logger.js +1 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/result.d.ts +77 -9
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +68 -9
- package/dist/core/result.js.map +1 -1
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +3 -4
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
- package/dist/payments/facilitator-rpc-fallback.js +95 -0
- package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
- package/dist/payments/hosted-tool-eligibility.d.ts +1 -0
- package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -1
- package/dist/payments/hosted-tool-eligibility.js +1 -0
- package/dist/payments/hosted-tool-eligibility.js.map +1 -1
- package/dist/payments/mcp-session-cache.d.ts +35 -0
- package/dist/payments/mcp-session-cache.d.ts.map +1 -0
- package/dist/payments/mcp-session-cache.js +83 -0
- package/dist/payments/mcp-session-cache.js.map +1 -0
- package/dist/payments/monetization-gate.d.ts +5 -0
- package/dist/payments/monetization-gate.d.ts.map +1 -1
- package/dist/payments/monetization-gate.js +24 -1
- package/dist/payments/monetization-gate.js.map +1 -1
- package/dist/payments/pricing.d.ts +2 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +126 -10
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/usage-ledger.d.ts +36 -2
- package/dist/payments/usage-ledger.d.ts.map +1 -1
- package/dist/payments/usage-ledger.js +121 -4
- package/dist/payments/usage-ledger.js.map +1 -1
- package/dist/payments/x402-paid-call.d.ts +50 -0
- package/dist/payments/x402-paid-call.d.ts.map +1 -1
- package/dist/payments/x402-paid-call.js +171 -0
- package/dist/payments/x402-paid-call.js.map +1 -1
- package/dist/policy/default-policies.d.ts +18 -2
- package/dist/policy/default-policies.d.ts.map +1 -1
- package/dist/policy/default-policies.js +18 -2
- package/dist/policy/default-policies.js.map +1 -1
- package/dist/policy/index.d.ts +6 -3
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +6 -3
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/local-policy-engine.d.ts +71 -13
- package/dist/policy/local-policy-engine.d.ts.map +1 -1
- package/dist/policy/local-policy-engine.js +33 -11
- package/dist/policy/local-policy-engine.js.map +1 -1
- package/dist/policy/permission-checks.d.ts +29 -3
- package/dist/policy/permission-checks.d.ts.map +1 -1
- package/dist/policy/permission-checks.js +29 -3
- package/dist/policy/permission-checks.js.map +1 -1
- package/dist/policy/policy-engine.d.ts +22 -2
- package/dist/policy/policy-engine.d.ts.map +1 -1
- package/dist/policy/policy-engine.js +22 -2
- package/dist/policy/policy-engine.js.map +1 -1
- package/dist/policy/policy-types.d.ts +55 -5
- package/dist/policy/policy-types.d.ts.map +1 -1
- package/dist/policy/policy-types.js +8 -1
- package/dist/policy/policy-types.js.map +1 -1
- package/dist/policy/risk-level.d.ts +32 -3
- package/dist/policy/risk-level.d.ts.map +1 -1
- package/dist/policy/risk-level.js +32 -3
- package/dist/policy/risk-level.js.map +1 -1
- package/dist/policy/spending-limits.d.ts +29 -3
- package/dist/policy/spending-limits.d.ts.map +1 -1
- package/dist/policy/spending-limits.js +29 -3
- package/dist/policy/spending-limits.js.map +1 -1
- package/dist/premium/activation-manager.d.ts +43 -0
- package/dist/premium/activation-manager.d.ts.map +1 -0
- package/dist/premium/activation-manager.js +131 -0
- package/dist/premium/activation-manager.js.map +1 -0
- package/dist/premium/builtin-plugins.d.ts +143 -0
- package/dist/premium/builtin-plugins.d.ts.map +1 -0
- package/dist/premium/builtin-plugins.js +394 -0
- package/dist/premium/builtin-plugins.js.map +1 -0
- package/dist/premium/event-store.d.ts +61 -0
- package/dist/premium/event-store.d.ts.map +1 -0
- package/dist/premium/event-store.js +130 -0
- package/dist/premium/event-store.js.map +1 -0
- package/dist/premium/index.d.ts +54 -0
- package/dist/premium/index.d.ts.map +1 -0
- package/dist/premium/index.js +54 -0
- package/dist/premium/index.js.map +1 -0
- package/dist/premium/manifest-builder.d.ts +65 -0
- package/dist/premium/manifest-builder.d.ts.map +1 -0
- package/dist/premium/manifest-builder.js +182 -0
- package/dist/premium/manifest-builder.js.map +1 -0
- package/dist/premium/meme-radar-capabilities.d.ts +38 -0
- package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
- package/dist/premium/meme-radar-capabilities.js +306 -0
- package/dist/premium/meme-radar-capabilities.js.map +1 -0
- package/dist/premium/metrics.d.ts +27 -0
- package/dist/premium/metrics.d.ts.map +1 -0
- package/dist/premium/metrics.js +65 -0
- package/dist/premium/metrics.js.map +1 -0
- package/dist/premium/plugin-validator.d.ts +39 -0
- package/dist/premium/plugin-validator.d.ts.map +1 -0
- package/dist/premium/plugin-validator.js +325 -0
- package/dist/premium/plugin-validator.js.map +1 -0
- package/dist/premium/private-manifest-loader.d.ts +111 -0
- package/dist/premium/private-manifest-loader.d.ts.map +1 -0
- package/dist/premium/private-manifest-loader.js +285 -0
- package/dist/premium/private-manifest-loader.js.map +1 -0
- package/dist/premium/provider-bridge.d.ts +109 -0
- package/dist/premium/provider-bridge.d.ts.map +1 -0
- package/dist/premium/provider-bridge.js +239 -0
- package/dist/premium/provider-bridge.js.map +1 -0
- package/dist/premium/session-manager.d.ts +125 -0
- package/dist/premium/session-manager.d.ts.map +1 -0
- package/dist/premium/session-manager.js +337 -0
- package/dist/premium/session-manager.js.map +1 -0
- package/dist/premium/stream-broker.d.ts +98 -0
- package/dist/premium/stream-broker.d.ts.map +1 -0
- package/dist/premium/stream-broker.js +199 -0
- package/dist/premium/stream-broker.js.map +1 -0
- package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
- package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
- package/dist/premium/tech-fundamentals-capabilities.js +283 -0
- package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
- package/dist/premium/trading-capabilities.d.ts +36 -0
- package/dist/premium/trading-capabilities.d.ts.map +1 -0
- package/dist/premium/trading-capabilities.js +205 -0
- package/dist/premium/trading-capabilities.js.map +1 -0
- package/dist/premium/types.d.ts +518 -0
- package/dist/premium/types.d.ts.map +1 -0
- package/dist/premium/types.js +23 -0
- package/dist/premium/types.js.map +1 -0
- package/dist/premium/webhook-engine.d.ts +102 -0
- package/dist/premium/webhook-engine.d.ts.map +1 -0
- package/dist/premium/webhook-engine.js +382 -0
- package/dist/premium/webhook-engine.js.map +1 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
- package/dist/prompts/context/sap-agent-context.prompt.js +2 -8
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
- package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
- package/dist/prompts/context/sap-agent-start.prompt.js +1 -0
- package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
- package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
- package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
- package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
- package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
- package/dist/prompts/developer/index.d.ts +4 -1
- package/dist/prompts/developer/index.d.ts.map +1 -1
- package/dist/prompts/developer/index.js +4 -1
- package/dist/prompts/developer/index.js.map +1 -1
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
- package/dist/prompts/execution-proof/index.d.ts +4 -1
- package/dist/prompts/execution-proof/index.d.ts.map +1 -1
- package/dist/prompts/execution-proof/index.js +4 -1
- package/dist/prompts/execution-proof/index.js.map +1 -1
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
- package/dist/prompts/index.d.ts +4 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +4 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
- package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
- package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
- package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
- package/dist/prompts/payments/explain-x402-settlement.prompt.js +3 -4
- package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
- package/dist/prompts/payments/index.d.ts +4 -1
- package/dist/prompts/payments/index.d.ts.map +1 -1
- package/dist/prompts/payments/index.js +4 -1
- package/dist/prompts/payments/index.js.map +1 -1
- package/dist/prompts/register-prompts.d.ts +18 -2
- package/dist/prompts/register-prompts.d.ts.map +1 -1
- package/dist/prompts/register-prompts.js +21 -3
- package/dist/prompts/register-prompts.js.map +1 -1
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
- package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
- package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
- package/dist/prompts/registry/index.d.ts +4 -1
- package/dist/prompts/registry/index.d.ts.map +1 -1
- package/dist/prompts/registry/index.js +4 -1
- package/dist/prompts/registry/index.js.map +1 -1
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
- package/dist/prompts/registry/register-sap-agent.prompt.js +3 -4
- package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
- package/dist/remote/premium-memory.d.ts +90 -0
- package/dist/remote/premium-memory.d.ts.map +1 -0
- package/dist/remote/premium-memory.js +161 -0
- package/dist/remote/premium-memory.js.map +1 -0
- package/dist/remote/premium-routes.d.ts +99 -0
- package/dist/remote/premium-routes.d.ts.map +1 -0
- package/dist/remote/premium-routes.js +346 -0
- package/dist/remote/premium-routes.js.map +1 -0
- package/dist/remote/public-home/sections.d.ts.map +1 -1
- package/dist/remote/public-home/sections.js +7 -1
- package/dist/remote/public-home/sections.js.map +1 -1
- package/dist/remote/public-home/types.d.ts +6 -0
- package/dist/remote/public-home/types.d.ts.map +1 -1
- package/dist/remote/server.d.ts +18 -0
- package/dist/remote/server.d.ts.map +1 -1
- package/dist/remote/server.js +298 -116
- package/dist/remote/server.js.map +1 -1
- package/dist/remote/tx-relay.d.ts +42 -0
- package/dist/remote/tx-relay.d.ts.map +1 -0
- package/dist/remote/tx-relay.js +118 -0
- package/dist/remote/tx-relay.js.map +1 -0
- package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
- package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
- package/dist/resources/current/sap-current-config.resource.js +2 -5
- package/dist/resources/current/sap-current-config.resource.js.map +1 -1
- package/dist/resources/execution-proof/index.d.ts +5 -0
- package/dist/resources/execution-proof/index.d.ts.map +1 -1
- package/dist/resources/execution-proof/index.js +5 -0
- package/dist/resources/execution-proof/index.js.map +1 -1
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
- package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
- package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/memory/index.d.ts +5 -0
- package/dist/resources/memory/index.d.ts.map +1 -1
- package/dist/resources/memory/index.js +5 -0
- package/dist/resources/memory/index.js.map +1 -1
- package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
- package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
- package/dist/resources/memory/sap-memory.resource.js +3 -4
- package/dist/resources/memory/sap-memory.resource.js.map +1 -1
- package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
- package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
- package/dist/resources/profile/sap-active-profile.resource.js +2 -5
- package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
- package/dist/resources/register-resources.d.ts +5 -0
- package/dist/resources/register-resources.d.ts.map +1 -1
- package/dist/resources/register-resources.js +3 -1
- package/dist/resources/register-resources.js.map +1 -1
- package/dist/resources/registry/index.d.ts +5 -0
- package/dist/resources/registry/index.d.ts.map +1 -1
- package/dist/resources/registry/index.js +5 -0
- package/dist/resources/registry/index.js.map +1 -1
- package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
- package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
- package/dist/resources/registry/sap-agent.resource.js +3 -4
- package/dist/resources/registry/sap-agent.resource.js.map +1 -1
- package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
- package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
- package/dist/resources/registry/sap-global-registry.resource.js +18 -4
- package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
- package/dist/resources/reputation/index.d.ts +4 -1
- package/dist/resources/reputation/index.d.ts.map +1 -1
- package/dist/resources/reputation/index.js +4 -1
- package/dist/resources/reputation/index.js.map +1 -1
- package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
- package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
- package/dist/resources/reputation/sap-reputation.resource.js +18 -4
- package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
- package/dist/resources/tool-schema/index.d.ts +4 -1
- package/dist/resources/tool-schema/index.d.ts.map +1 -1
- package/dist/resources/tool-schema/index.js +4 -1
- package/dist/resources/tool-schema/index.js.map +1 -1
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
- package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
- package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
- package/dist/sap/index.d.ts +7 -1
- package/dist/sap/index.d.ts.map +1 -1
- package/dist/sap/index.js +7 -1
- package/dist/sap/index.js.map +1 -1
- package/dist/sap/sap-client-manager.d.ts +80 -13
- package/dist/sap/sap-client-manager.d.ts.map +1 -1
- package/dist/sap/sap-client-manager.js +80 -13
- package/dist/sap/sap-client-manager.js.map +1 -1
- package/dist/sap/sap-errors.d.ts +22 -3
- package/dist/sap/sap-errors.d.ts.map +1 -1
- package/dist/sap/sap-errors.js +22 -3
- package/dist/sap/sap-errors.js.map +1 -1
- package/dist/sap/sap-types.d.ts +75 -6
- package/dist/sap/sap-types.d.ts.map +1 -1
- package/dist/sap/sap-types.js +11 -1
- package/dist/sap/sap-types.js.map +1 -1
- package/dist/schemas/common.schema.d.ts +45 -8
- package/dist/schemas/common.schema.d.ts.map +1 -1
- package/dist/schemas/common.schema.js +45 -8
- package/dist/schemas/common.schema.js.map +1 -1
- package/dist/schemas/developer.schema.d.ts +22 -3
- package/dist/schemas/developer.schema.d.ts.map +1 -1
- package/dist/schemas/developer.schema.js +22 -3
- package/dist/schemas/developer.schema.js.map +1 -1
- package/dist/schemas/execution-proof.schema.d.ts +29 -4
- package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
- package/dist/schemas/execution-proof.schema.js +29 -4
- package/dist/schemas/execution-proof.schema.js.map +1 -1
- package/dist/schemas/identity.schema.d.ts +23 -3
- package/dist/schemas/identity.schema.d.ts.map +1 -1
- package/dist/schemas/identity.schema.js +23 -3
- package/dist/schemas/identity.schema.js.map +1 -1
- package/dist/schemas/index.d.ts +11 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +11 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/memory.schema.d.ts +23 -3
- package/dist/schemas/memory.schema.d.ts.map +1 -1
- package/dist/schemas/memory.schema.js +23 -3
- package/dist/schemas/memory.schema.js.map +1 -1
- package/dist/schemas/payments.schema.d.ts +24 -3
- package/dist/schemas/payments.schema.d.ts.map +1 -1
- package/dist/schemas/payments.schema.js +24 -3
- package/dist/schemas/payments.schema.js.map +1 -1
- package/dist/schemas/registry.schema.d.ts +36 -4
- package/dist/schemas/registry.schema.d.ts.map +1 -1
- package/dist/schemas/registry.schema.js +36 -4
- package/dist/schemas/registry.schema.js.map +1 -1
- package/dist/schemas/reputation.schema.d.ts +22 -3
- package/dist/schemas/reputation.schema.d.ts.map +1 -1
- package/dist/schemas/reputation.schema.js +22 -3
- package/dist/schemas/reputation.schema.js.map +1 -1
- package/dist/schemas/settlement.schema.d.ts +31 -4
- package/dist/schemas/settlement.schema.d.ts.map +1 -1
- package/dist/schemas/settlement.schema.js +31 -4
- package/dist/schemas/settlement.schema.js.map +1 -1
- package/dist/schemas/tool-schema.schema.d.ts +29 -3
- package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
- package/dist/schemas/tool-schema.schema.js +29 -3
- package/dist/schemas/tool-schema.schema.js.map +1 -1
- package/dist/schemas/transaction.schema.d.ts +23 -3
- package/dist/schemas/transaction.schema.d.ts.map +1 -1
- package/dist/schemas/transaction.schema.js +23 -3
- package/dist/schemas/transaction.schema.js.map +1 -1
- package/dist/security/approval-required.d.ts +19 -2
- package/dist/security/approval-required.d.ts.map +1 -1
- package/dist/security/approval-required.js +19 -2
- package/dist/security/approval-required.js.map +1 -1
- package/dist/security/index.d.ts +7 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +7 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/private-key-guard.d.ts +18 -2
- package/dist/security/private-key-guard.d.ts.map +1 -1
- package/dist/security/private-key-guard.js +19 -2
- package/dist/security/private-key-guard.js.map +1 -1
- package/dist/security/prompt-injection-notes.d.ts +10 -1
- package/dist/security/prompt-injection-notes.d.ts.map +1 -1
- package/dist/security/prompt-injection-notes.js +10 -1
- package/dist/security/prompt-injection-notes.js.map +1 -1
- package/dist/security/unsafe-action-guard.d.ts +36 -10
- package/dist/security/unsafe-action-guard.d.ts.map +1 -1
- package/dist/security/unsafe-action-guard.js +67 -15
- package/dist/security/unsafe-action-guard.js.map +1 -1
- package/dist/server/create-server.d.ts +18 -3
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +18 -3
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/index.d.ts +6 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +6 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/register-capabilities.d.ts +17 -2
- package/dist/server/register-capabilities.d.ts.map +1 -1
- package/dist/server/register-capabilities.js +17 -2
- package/dist/server/register-capabilities.js.map +1 -1
- package/dist/server/server-metadata.d.ts +34 -1
- package/dist/server/server-metadata.d.ts.map +1 -1
- package/dist/server/server-metadata.js +35 -2
- package/dist/server/server-metadata.js.map +1 -1
- package/dist/session/agent-session.d.ts +35 -4
- package/dist/session/agent-session.d.ts.map +1 -1
- package/dist/session/agent-session.js +35 -4
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/delegated-session.d.ts +31 -3
- package/dist/session/delegated-session.d.ts.map +1 -1
- package/dist/session/delegated-session.js +31 -3
- package/dist/session/delegated-session.js.map +1 -1
- package/dist/session/index.d.ts +7 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +7 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/redis-session-store.d.ts +94 -21
- package/dist/session/redis-session-store.d.ts.map +1 -1
- package/dist/session/redis-session-store.js +87 -20
- package/dist/session/redis-session-store.js.map +1 -1
- package/dist/session/session-limits.d.ts +34 -4
- package/dist/session/session-limits.d.ts.map +1 -1
- package/dist/session/session-limits.js +34 -4
- package/dist/session/session-limits.js.map +1 -1
- package/dist/session/session-permissions.d.ts +57 -7
- package/dist/session/session-permissions.d.ts.map +1 -1
- package/dist/session/session-permissions.js +57 -7
- package/dist/session/session-permissions.js.map +1 -1
- package/dist/session/session-store.d.ts +9 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +18 -3
- package/dist/session/session-store.js.map +1 -1
- package/dist/session/session-types.d.ts +33 -4
- package/dist/session/session-types.d.ts.map +1 -1
- package/dist/session/session-types.js +9 -1
- package/dist/session/session-types.js.map +1 -1
- package/dist/signer/index.d.ts +7 -1
- package/dist/signer/index.d.ts.map +1 -1
- package/dist/signer/index.js +7 -1
- package/dist/signer/index.js.map +1 -1
- package/dist/signer/load-keypair.d.ts +25 -4
- package/dist/signer/load-keypair.d.ts.map +1 -1
- package/dist/signer/load-keypair.js +25 -4
- package/dist/signer/load-keypair.js.map +1 -1
- package/dist/signer/local-keypair-signer.d.ts +16 -2
- package/dist/signer/local-keypair-signer.d.ts.map +1 -1
- package/dist/signer/local-keypair-signer.js +16 -2
- package/dist/signer/local-keypair-signer.js.map +1 -1
- package/dist/signer/signer-resolver.d.ts +19 -2
- package/dist/signer/signer-resolver.d.ts.map +1 -1
- package/dist/signer/signer-resolver.js +26 -3
- package/dist/signer/signer-resolver.js.map +1 -1
- package/dist/signer/signer-types.d.ts +47 -5
- package/dist/signer/signer-types.d.ts.map +1 -1
- package/dist/signer/signer-types.js +13 -1
- package/dist/signer/signer-types.js.map +1 -1
- package/dist/tools/agent-start-tool.d.ts.map +1 -1
- package/dist/tools/agent-start-tool.js +210 -2
- package/dist/tools/agent-start-tool.js.map +1 -1
- package/dist/tools/client-sdk-tools.d.ts.map +1 -1
- package/dist/tools/client-sdk-tools.js +27 -2
- package/dist/tools/client-sdk-tools.js.map +1 -1
- package/dist/tools/estimate-tool-cost.d.ts +13 -0
- package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
- package/dist/tools/estimate-tool-cost.js +139 -0
- package/dist/tools/estimate-tool-cost.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/magicblock-tools.d.ts +25 -0
- package/dist/tools/magicblock-tools.d.ts.map +1 -1
- package/dist/tools/magicblock-tools.js +116 -8
- package/dist/tools/magicblock-tools.js.map +1 -1
- package/dist/tools/perp-tools.d.ts +39 -0
- package/dist/tools/perp-tools.d.ts.map +1 -0
- package/dist/tools/perp-tools.js +1110 -0
- package/dist/tools/perp-tools.js.map +1 -0
- package/dist/tools/premium-tools.d.ts +8 -0
- package/dist/tools/premium-tools.d.ts.map +1 -0
- package/dist/tools/premium-tools.js +732 -0
- package/dist/tools/premium-tools.js.map +1 -0
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +9 -0
- package/dist/tools/register-tools.js.map +1 -1
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
- package/dist/tools/sap-sdk-tools.js +191 -13
- package/dist/tools/sap-sdk-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +2 -2
- package/dist/tools/x402-paid-call-tool.js.map +1 -1
- package/dist/transports/index.d.ts +6 -1
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +6 -1
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/stdio.d.ts +17 -5
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +17 -5
- package/dist/transports/stdio.js.map +1 -1
- package/dist/tui/wizard-save.d.ts +88 -8
- package/dist/tui/wizard-save.d.ts.map +1 -1
- package/dist/tui/wizard-save.js +77 -8
- package/dist/tui/wizard-save.js.map +1 -1
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +20 -4
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
- package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +16 -5
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
- package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +6 -0
- package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
- package/docs/README.md +12 -0
- package/package.json +8 -6
- package/server.json +3 -3
- package/skills/README.md +10 -2
- package/skills/sap-agent-registry/SKILL.md +27 -6
- package/skills/sap-discovery-indexing/SKILL.md +11 -0
- package/skills/sap-mcp/SKILL.md +49 -16
- package/skills/sap-mcp/TOOL_REFERENCE.md +20 -7
- package/skills/sap-operations/SKILL.md +11 -0
- package/skills/sap-payments-x402/SKILL.md +30 -8
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/webhook-engine
|
|
3
|
+
* @description Signed webhook delivery engine for premium event callbacks.
|
|
4
|
+
*
|
|
5
|
+
* After a session is activated, the webhook engine registers a buyer-owned
|
|
6
|
+
* HTTPS endpoint, subscribes to the provider for matching events, signs each
|
|
7
|
+
* delivery with HMAC-SHA256, and dispatches it via HTTP POST.
|
|
8
|
+
*
|
|
9
|
+
* The engine enforces:
|
|
10
|
+
* - Event filtering: only delivers event ids listed in the subscription.
|
|
11
|
+
* - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
|
|
12
|
+
* - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
|
|
13
|
+
* the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
|
|
14
|
+
* - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
|
|
15
|
+
* - Unit quota: decrements after each successful delivery.
|
|
16
|
+
* - Idempotency: deduplicates via `eventId` in the event store.
|
|
17
|
+
*
|
|
18
|
+
* @flow
|
|
19
|
+
* 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
|
|
20
|
+
* 2. → `registerWebhook()` validates URL, creates subscription.
|
|
21
|
+
* 3. Engine subscribes to provider, receives events matching the subscription.
|
|
22
|
+
* 4. For each matching event: sign, POST to targetUrl, record delivery.
|
|
23
|
+
* 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
|
|
24
|
+
*
|
|
25
|
+
* @module premium/webhook-engine
|
|
26
|
+
*/
|
|
27
|
+
import { createHmac, randomUUID } from 'node:crypto';
|
|
28
|
+
import { request } from 'node:https';
|
|
29
|
+
import { request as httpRequest } from 'node:http';
|
|
30
|
+
import { URL } from 'node:url';
|
|
31
|
+
import { getPremiumSession, decrementSessionQuota, closeSession } from './session-manager.js';
|
|
32
|
+
import { subscribeToProvider } from './provider-bridge.js';
|
|
33
|
+
import { appendEvent } from './event-store.js';
|
|
34
|
+
/**
|
|
35
|
+
* @description Registry of active webhook subscriptions keyed by subscription id.
|
|
36
|
+
*/
|
|
37
|
+
const webhookSubscriptions = new Map();
|
|
38
|
+
/**
|
|
39
|
+
* @description Delivery attempt records keyed by delivery id.
|
|
40
|
+
*/
|
|
41
|
+
const deliveryRecords = new Map();
|
|
42
|
+
/**
|
|
43
|
+
* @description Hard cap on stored delivery records.
|
|
44
|
+
*
|
|
45
|
+
* Default: 100_000 (tuned for a 312GB RAM production server).
|
|
46
|
+
* Each record is ~512B, so 100K records ≈ 50MB.
|
|
47
|
+
* Override via `SAP_MCP_PREMIUM_MAX_DELIVERIES` env var.
|
|
48
|
+
*/
|
|
49
|
+
const MAX_DELIVERY_RECORDS = (() => {
|
|
50
|
+
const raw = process.env.SAP_MCP_PREMIUM_MAX_DELIVERIES;
|
|
51
|
+
const parsed = Number(raw);
|
|
52
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 100_000;
|
|
53
|
+
})();
|
|
54
|
+
/**
|
|
55
|
+
* @description Maximum retry attempts per delivery.
|
|
56
|
+
*/
|
|
57
|
+
const MAX_RETRIES = 3;
|
|
58
|
+
/**
|
|
59
|
+
* @description Base delay for exponential backoff in milliseconds.
|
|
60
|
+
*/
|
|
61
|
+
const RETRY_BASE_DELAY_MS = 500;
|
|
62
|
+
/**
|
|
63
|
+
* @name validateWebhookUrl
|
|
64
|
+
* @description Validate that a webhook target URL is safe for delivery.
|
|
65
|
+
*
|
|
66
|
+
* Rejects:
|
|
67
|
+
* - Non-HTTPS URLs in production (allow HTTP for localhost testing).
|
|
68
|
+
* - localhost, 127.0.0.1, 0.0.0.0, private network ranges (10.x, 172.16-31.x, 192.168.x).
|
|
69
|
+
*
|
|
70
|
+
* @param targetUrl - The URL to validate.
|
|
71
|
+
* @returns True if the URL is safe for webhook delivery.
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
function validateWebhookUrl(targetUrl) {
|
|
76
|
+
let parsed;
|
|
77
|
+
try {
|
|
78
|
+
parsed = new URL(targetUrl);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
// Must be HTTPS in production. Allow HTTP only for localhost testing.
|
|
84
|
+
const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
85
|
+
if (parsed.protocol !== 'https:' && !isLocalhost)
|
|
86
|
+
return false;
|
|
87
|
+
// Block private network ranges (SSRF prevention).
|
|
88
|
+
const host = parsed.hostname;
|
|
89
|
+
if (host.startsWith('10.') ||
|
|
90
|
+
host.startsWith('172.16.') || host.startsWith('172.17.') || host.startsWith('172.18.') ||
|
|
91
|
+
host.startsWith('172.19.') || host.startsWith('172.20.') || host.startsWith('172.21.') ||
|
|
92
|
+
host.startsWith('172.22.') || host.startsWith('172.23.') || host.startsWith('172.24.') ||
|
|
93
|
+
host.startsWith('172.25.') || host.startsWith('172.26.') || host.startsWith('172.27.') ||
|
|
94
|
+
host.startsWith('172.28.') || host.startsWith('172.29.') || host.startsWith('172.30.') ||
|
|
95
|
+
host.startsWith('172.31.') ||
|
|
96
|
+
host.startsWith('192.168.') ||
|
|
97
|
+
host === '0.0.0.0' ||
|
|
98
|
+
host === '::1' ||
|
|
99
|
+
host.startsWith('fe80:')) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* @name signDelivery
|
|
106
|
+
* @description Sign a webhook delivery payload with HMAC-SHA256.
|
|
107
|
+
*
|
|
108
|
+
* The signature is computed over the string `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`
|
|
109
|
+
* using the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var as the key.
|
|
110
|
+
*
|
|
111
|
+
* @param deliveryId - The unique delivery id.
|
|
112
|
+
* @param deliveredAt - ISO timestamp of the delivery.
|
|
113
|
+
* @param payload - The event payload to sign.
|
|
114
|
+
* @returns Hex-encoded HMAC-SHA256 signature.
|
|
115
|
+
*
|
|
116
|
+
* @internal
|
|
117
|
+
*/
|
|
118
|
+
function signDelivery(deliveryId, deliveredAt, payload) {
|
|
119
|
+
const key = process.env.SAP_MCP_PREMIUM_WEBHOOK_SIGNER;
|
|
120
|
+
if (!key) {
|
|
121
|
+
throw new Error('SAP_MCP_PREMIUM_WEBHOOK_SIGNER is not set — webhook delivery requires a configured signing key');
|
|
122
|
+
}
|
|
123
|
+
const message = `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`;
|
|
124
|
+
return createHmac('sha256', key).update(message).digest('hex');
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @name deliverWebhook
|
|
128
|
+
* @description Deliver a single event to a webhook target URL with retries.
|
|
129
|
+
*
|
|
130
|
+
* @param subscription - The webhook subscription.
|
|
131
|
+
* @param event - The provider event to deliver.
|
|
132
|
+
* @returns The `PremiumWebhookDelivery` record for this attempt.
|
|
133
|
+
*
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
async function deliverWebhook(subscription, event) {
|
|
137
|
+
const deliveryId = `wh-delivery-${randomUUID()}`;
|
|
138
|
+
const deliveredAt = new Date().toISOString();
|
|
139
|
+
const signature = signDelivery(deliveryId, deliveredAt, event.payload);
|
|
140
|
+
const body = JSON.stringify({
|
|
141
|
+
deliveryId,
|
|
142
|
+
eventType: event.eventType,
|
|
143
|
+
deliveredAt,
|
|
144
|
+
signature,
|
|
145
|
+
payload: event.payload,
|
|
146
|
+
});
|
|
147
|
+
let httpStatus = null;
|
|
148
|
+
let success = false;
|
|
149
|
+
let responseBody;
|
|
150
|
+
let retryCount = 0;
|
|
151
|
+
const parsedUrl = new URL(subscription.targetUrl);
|
|
152
|
+
const isHttps = parsedUrl.protocol === 'https:';
|
|
153
|
+
const reqFn = isHttps ? request : httpRequest;
|
|
154
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
155
|
+
retryCount = attempt;
|
|
156
|
+
try {
|
|
157
|
+
const response = await new Promise((resolve, reject) => {
|
|
158
|
+
const req = reqFn({
|
|
159
|
+
hostname: parsedUrl.hostname,
|
|
160
|
+
port: parsedUrl.port || (isHttps ? 443 : 80),
|
|
161
|
+
path: `${parsedUrl.pathname}${parsedUrl.search}`,
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers: {
|
|
164
|
+
'Content-Type': 'application/json',
|
|
165
|
+
'Content-Length': Buffer.byteLength(body),
|
|
166
|
+
'X-SAP-Premium-Delivery-Id': deliveryId,
|
|
167
|
+
'X-SAP-Premium-Signature': signature,
|
|
168
|
+
},
|
|
169
|
+
timeout: 10_000,
|
|
170
|
+
}, (res) => {
|
|
171
|
+
let data = '';
|
|
172
|
+
res.on('data', (chunk) => { data += chunk.toString(); });
|
|
173
|
+
res.on('end', () => resolve({ status: res.statusCode ?? 0, body: data }));
|
|
174
|
+
});
|
|
175
|
+
req.on('error', reject);
|
|
176
|
+
req.on('timeout', () => { req.destroy(); reject(new Error('Webhook delivery timeout.')); });
|
|
177
|
+
req.write(body);
|
|
178
|
+
req.end();
|
|
179
|
+
});
|
|
180
|
+
httpStatus = response.status;
|
|
181
|
+
responseBody = response.body.slice(0, 512);
|
|
182
|
+
success = response.status >= 200 && response.status < 300;
|
|
183
|
+
if (success)
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
responseBody = error instanceof Error ? error.message : 'Unknown delivery error.';
|
|
188
|
+
}
|
|
189
|
+
if (attempt < MAX_RETRIES) {
|
|
190
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_BASE_DELAY_MS * 2 ** attempt));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const delivery = {
|
|
194
|
+
deliveryId,
|
|
195
|
+
subscriptionId: subscription.subscriptionId,
|
|
196
|
+
eventId: event.eventId,
|
|
197
|
+
eventType: event.eventType,
|
|
198
|
+
deliveredAt,
|
|
199
|
+
signature,
|
|
200
|
+
httpStatus,
|
|
201
|
+
success,
|
|
202
|
+
responseBody,
|
|
203
|
+
retryCount,
|
|
204
|
+
};
|
|
205
|
+
// Store delivery record with cap.
|
|
206
|
+
deliveryRecords.set(deliveryId, delivery);
|
|
207
|
+
if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
|
|
208
|
+
const oldestKey = deliveryRecords.keys().next().value;
|
|
209
|
+
if (oldestKey)
|
|
210
|
+
deliveryRecords.delete(oldestKey);
|
|
211
|
+
}
|
|
212
|
+
// Update subscription stats.
|
|
213
|
+
subscription.deliveriesAttempted++;
|
|
214
|
+
if (success)
|
|
215
|
+
subscription.deliveriesSucceeded++;
|
|
216
|
+
subscription.lastDeliveryAt = deliveredAt;
|
|
217
|
+
subscription.lastDeliveryStatus = httpStatus;
|
|
218
|
+
return delivery;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* @name registerWebhook
|
|
222
|
+
* @description Register a webhook subscription for an active premium session.
|
|
223
|
+
*
|
|
224
|
+
* @param sessionId - The activated premium session id.
|
|
225
|
+
* @param targetUrl - HTTPS endpoint owned by the buyer.
|
|
226
|
+
* @param events - Exact event ids to deliver.
|
|
227
|
+
* @param signingPublicKey - Optional buyer public key for signature verification.
|
|
228
|
+
* @returns The `PremiumWebhookSubscription`, or `null` if the session is not
|
|
229
|
+
* active or the URL is invalid.
|
|
230
|
+
*
|
|
231
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
|
|
232
|
+
* `remote/server.ts` → `POST /premium/webhook/register`
|
|
233
|
+
*/
|
|
234
|
+
export async function registerWebhook(sessionId, targetUrl, events, signingPublicKey) {
|
|
235
|
+
const session = getPremiumSession(sessionId);
|
|
236
|
+
if (!session || session.status !== 'active')
|
|
237
|
+
return null;
|
|
238
|
+
if (!validateWebhookUrl(targetUrl))
|
|
239
|
+
return null;
|
|
240
|
+
if (events.length === 0)
|
|
241
|
+
return null;
|
|
242
|
+
const subscription = {
|
|
243
|
+
subscriptionId: `wh-sub-${randomUUID()}`,
|
|
244
|
+
sessionId,
|
|
245
|
+
pluginId: session.pluginId,
|
|
246
|
+
capabilityId: session.capabilityId,
|
|
247
|
+
targetUrl,
|
|
248
|
+
events,
|
|
249
|
+
signingPublicKey,
|
|
250
|
+
createdAt: new Date().toISOString(),
|
|
251
|
+
deliveriesAttempted: 0,
|
|
252
|
+
deliveriesSucceeded: 0,
|
|
253
|
+
lastDeliveryAt: null,
|
|
254
|
+
lastDeliveryStatus: null,
|
|
255
|
+
active: true,
|
|
256
|
+
};
|
|
257
|
+
webhookSubscriptions.set(subscription.subscriptionId, subscription);
|
|
258
|
+
return subscription;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* @name startWebhookDelivery
|
|
262
|
+
* @description Start the webhook delivery loop for a subscription.
|
|
263
|
+
*
|
|
264
|
+
* Subscribes to the provider, receives events, filters by the subscription's
|
|
265
|
+
* event list, signs and delivers each matching event, and decrements the
|
|
266
|
+
* session quota. Stops when the quota reaches zero or the subscription is
|
|
267
|
+
* deactivated.
|
|
268
|
+
*
|
|
269
|
+
* @param subscription - The webhook subscription to deliver for.
|
|
270
|
+
*
|
|
271
|
+
* @usedBy `remote/server.ts` → webhook delivery worker
|
|
272
|
+
*/
|
|
273
|
+
export async function startWebhookDelivery(subscription) {
|
|
274
|
+
const iterable = await subscribeToProvider(subscription.pluginId, subscription.capabilityId, {});
|
|
275
|
+
if (!iterable)
|
|
276
|
+
return;
|
|
277
|
+
for await (const event of iterable) {
|
|
278
|
+
if (!subscription.active)
|
|
279
|
+
break;
|
|
280
|
+
// Filter: only deliver events listed in the subscription.
|
|
281
|
+
if (!subscription.events.includes(event.eventType))
|
|
282
|
+
continue;
|
|
283
|
+
// Store the event for replay/idempotency.
|
|
284
|
+
appendEvent({
|
|
285
|
+
eventId: event.eventId,
|
|
286
|
+
sessionId: subscription.sessionId,
|
|
287
|
+
pluginId: subscription.pluginId,
|
|
288
|
+
capabilityId: subscription.capabilityId,
|
|
289
|
+
eventType: event.eventType,
|
|
290
|
+
observedAt: event.observedAt,
|
|
291
|
+
payload: event.payload,
|
|
292
|
+
deliveredAt: new Date().toISOString(),
|
|
293
|
+
});
|
|
294
|
+
// Deliver via HTTP POST with retries.
|
|
295
|
+
await deliverWebhook(subscription, event);
|
|
296
|
+
// Decrement quota and auto-close at zero.
|
|
297
|
+
const remaining = decrementSessionQuota(subscription.sessionId);
|
|
298
|
+
if (remaining <= 0) {
|
|
299
|
+
subscription.active = false;
|
|
300
|
+
closeSession(subscription.sessionId, 'Webhook unit quota exhausted.');
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* @name unregisterWebhook
|
|
307
|
+
* @description Deactivate and remove a webhook subscription.
|
|
308
|
+
*
|
|
309
|
+
* @param subscriptionId - The webhook subscription id.
|
|
310
|
+
* @returns True if the subscription was found and removed.
|
|
311
|
+
*
|
|
312
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
|
|
313
|
+
*/
|
|
314
|
+
export function unregisterWebhook(subscriptionId) {
|
|
315
|
+
const subscription = webhookSubscriptions.get(subscriptionId);
|
|
316
|
+
if (!subscription)
|
|
317
|
+
return false;
|
|
318
|
+
subscription.active = false;
|
|
319
|
+
webhookSubscriptions.delete(subscriptionId);
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* @name getWebhookSubscription
|
|
324
|
+
* @description Retrieve a webhook subscription by id.
|
|
325
|
+
*
|
|
326
|
+
* @param subscriptionId - The webhook subscription id.
|
|
327
|
+
* @returns The subscription, or `null` if not found.
|
|
328
|
+
*
|
|
329
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
330
|
+
*/
|
|
331
|
+
export function getWebhookSubscription(subscriptionId) {
|
|
332
|
+
const sub = webhookSubscriptions.get(subscriptionId);
|
|
333
|
+
return sub ? { ...sub } : null;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* @name getWebhookDeliveries
|
|
337
|
+
* @description Retrieve delivery records for a subscription.
|
|
338
|
+
*
|
|
339
|
+
* @param subscriptionId - The webhook subscription id.
|
|
340
|
+
* @param limit - Maximum records to return (default 50).
|
|
341
|
+
* @returns Array of `PremiumWebhookDelivery` records.
|
|
342
|
+
*
|
|
343
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
344
|
+
*/
|
|
345
|
+
export function getWebhookDeliveries(subscriptionId, limit = 50) {
|
|
346
|
+
const results = [];
|
|
347
|
+
for (const delivery of deliveryRecords.values()) {
|
|
348
|
+
if (delivery.subscriptionId === subscriptionId) {
|
|
349
|
+
results.push(delivery);
|
|
350
|
+
if (results.length >= limit)
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
return results;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* @name getActiveWebhookCount
|
|
358
|
+
* @description Return the number of currently active webhook subscriptions.
|
|
359
|
+
*
|
|
360
|
+
* @usedBy `metrics.ts`
|
|
361
|
+
*/
|
|
362
|
+
export function getActiveWebhookCount() {
|
|
363
|
+
let count = 0;
|
|
364
|
+
for (const sub of webhookSubscriptions.values()) {
|
|
365
|
+
if (sub.active)
|
|
366
|
+
count++;
|
|
367
|
+
}
|
|
368
|
+
return count;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* @name stopAllWebhooks
|
|
372
|
+
* @description Deactivate all webhook subscriptions. Called during graceful shutdown.
|
|
373
|
+
*
|
|
374
|
+
* @usedBy `remote/server.ts` shutdown handler
|
|
375
|
+
*/
|
|
376
|
+
export function stopAllWebhooks() {
|
|
377
|
+
for (const sub of webhookSubscriptions.values()) {
|
|
378
|
+
sub.active = false;
|
|
379
|
+
}
|
|
380
|
+
webhookSubscriptions.clear();
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=webhook-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-engine.js","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sap-agent-context.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAoGnF"}
|
|
1
|
+
{"version":3,"file":"sap-agent-context.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAwBzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAoGnF"}
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Provides complete context about the current SAP MCP configuration,
|
|
5
|
-
* active profile, wallet, and available capabilities.
|
|
6
|
-
*
|
|
7
|
-
* Agents should call this prompt before executing any SAP-related operations
|
|
8
|
-
* to understand their operating context and constraints.
|
|
9
|
-
*
|
|
2
|
+
* @name prompts/context/sap-agent-context
|
|
3
|
+
* @description Prompt providing complete SAP MCP agent context, configuration, and capabilities
|
|
10
4
|
* @module prompts/context/sap-agent-context
|
|
11
5
|
*/
|
|
12
6
|
import { registerPrompt } from '../../adapters/mcp/sdk-compat.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sap-agent-context.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sap-agent-context.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-context.prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAP MCP Agent Intent Router Prompt
|
|
3
|
+
*
|
|
4
|
+
* Gives agent runtimes a compact decision tree for choosing hosted reads,
|
|
5
|
+
* paid hosted calls, local user signing, unsigned builders, or repair flows.
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import type { SapMcpContext } from '../../core/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* @name sapAgentIntentRouterPrompt
|
|
11
|
+
* @description Registers the compact SAP MCP intent routing prompt.
|
|
12
|
+
*/
|
|
13
|
+
export declare function sapAgentIntentRouterPrompt(server: Server, context: SapMcpContext): void;
|
|
14
|
+
//# sourceMappingURL=sap-agent-intent-router.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sap-agent-intent-router.prompt.d.ts","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-intent-router.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAqDvF"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAP MCP Agent Intent Router Prompt
|
|
3
|
+
*
|
|
4
|
+
* Gives agent runtimes a compact decision tree for choosing hosted reads,
|
|
5
|
+
* paid hosted calls, local user signing, unsigned builders, or repair flows.
|
|
6
|
+
*/
|
|
7
|
+
import { registerPrompt } from '../../adapters/mcp/sdk-compat.js';
|
|
8
|
+
import { logger } from '../../core/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* @name sapAgentIntentRouterPrompt
|
|
11
|
+
* @description Registers the compact SAP MCP intent routing prompt.
|
|
12
|
+
*/
|
|
13
|
+
export function sapAgentIntentRouterPrompt(server, context) {
|
|
14
|
+
registerPrompt(server, 'sap-agent-intent-router', {}, {
|
|
15
|
+
description: 'Route a user SAP MCP request to the correct hosted/read, paid-call, local-signing, unsigned-builder, or repair flow. Use before paid/write operations and after routing errors.',
|
|
16
|
+
arguments: [
|
|
17
|
+
{
|
|
18
|
+
name: 'userIntent',
|
|
19
|
+
description: 'Plain-language user goal, e.g. "check balance", "register my agent", "update metadata image", "swap SOL to USDC", "create escrow", or "is SAP connected?".',
|
|
20
|
+
required: false,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'targetTool',
|
|
24
|
+
description: 'Optional exact MCP tool name being considered. Use exact names from tools/list; do not rewrite hyphenated names.',
|
|
25
|
+
required: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'lastError',
|
|
29
|
+
description: 'Optional last error string or JSON-RPC error data. The router maps common SAP/x402/MCP errors to the next safe tool.',
|
|
30
|
+
required: false,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
}, async (args) => {
|
|
34
|
+
const parsed = parseIntentRouterArgs(args);
|
|
35
|
+
logger.debug('SAP agent intent router prompt generated', {
|
|
36
|
+
mode: context.config.mode,
|
|
37
|
+
userIntent: parsed.userIntent,
|
|
38
|
+
targetTool: parsed.targetTool,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
description: 'SAP MCP intent routing instructions',
|
|
42
|
+
messages: [
|
|
43
|
+
{
|
|
44
|
+
role: 'user',
|
|
45
|
+
content: {
|
|
46
|
+
type: 'text',
|
|
47
|
+
text: buildIntentRouterPrompt(context, parsed),
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
logger.debug('SAP agent intent router prompt registered');
|
|
54
|
+
}
|
|
55
|
+
function parseIntentRouterArgs(args) {
|
|
56
|
+
const record = (args ?? {});
|
|
57
|
+
return {
|
|
58
|
+
userIntent: typeof record.userIntent === 'string' ? record.userIntent : undefined,
|
|
59
|
+
targetTool: typeof record.targetTool === 'string' ? record.targetTool : undefined,
|
|
60
|
+
lastError: typeof record.lastError === 'string' ? record.lastError : undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function buildIntentRouterPrompt(context, args) {
|
|
64
|
+
return `# SAP MCP Intent Router
|
|
65
|
+
|
|
66
|
+
Use this router to choose the next SAP MCP action with the least friction and no unsafe shortcuts.
|
|
67
|
+
|
|
68
|
+
## Current Request
|
|
69
|
+
- User intent: ${args.userIntent ? `\`${args.userIntent}\`` : 'not supplied'}
|
|
70
|
+
- Target tool: ${args.targetTool ? `\`${args.targetTool}\`` : 'not supplied'}
|
|
71
|
+
- Last error: ${args.lastError ? `\`${args.lastError}\`` : 'none'}
|
|
72
|
+
- Server mode visible to this prompt: \`${context.config.mode}\`
|
|
73
|
+
|
|
74
|
+
## Decision Tree
|
|
75
|
+
|
|
76
|
+
### 1. Connection/status only
|
|
77
|
+
If the user asks "are you connected?", "is SAP ready?", or similar:
|
|
78
|
+
1. Call \`sap_agent_start\`.
|
|
79
|
+
2. Call \`sap_agent_runtime_status\` with \`{"intent":"connection"}\`.
|
|
80
|
+
3. Answer briefly: endpoint, mode, hosted non-custodial status, local \`sap_payments\` readiness only if checked, and one next action.
|
|
81
|
+
Do not dump the full tool catalog.
|
|
82
|
+
|
|
83
|
+
### 2. Exact/base reads
|
|
84
|
+
For exact agent, wallet, balance, global-state, or compact directory orientation:
|
|
85
|
+
- Prefer free exact/base tools first:
|
|
86
|
+
\`sap_agent_context\`, \`sap_get_agent\`, \`sap_get_agent_profile\`,
|
|
87
|
+
\`sap_get_agent_stats\`, \`sap_get_global_state\`, \`sap_is_agent_active\`,
|
|
88
|
+
\`sap_list_agents\` with \`limit <= 20\` and \`view: "compact"\`,
|
|
89
|
+
\`sol_get_balance\`, \`spl-token_getBalance\`, \`spl-token_getTokenAccounts\`,
|
|
90
|
+
or \`magicblock_balance\`.
|
|
91
|
+
- Use broad/enriched paid discovery only when the user asked for search, ranking,
|
|
92
|
+
enrichment, analytics, or larger pages.
|
|
93
|
+
|
|
94
|
+
### 3. Paid hosted tools
|
|
95
|
+
Before a paid hosted read/builder/value tool:
|
|
96
|
+
1. Call \`sap_estimate_tool_cost\` for the target tool.
|
|
97
|
+
2. Verify the local payer has SOL for fees and USDC for x402 when balance tools are available.
|
|
98
|
+
3. Use \`sap_payments_call_paid_tool\` when the runtime cannot replay x402 natively.
|
|
99
|
+
4. Treat x402/pay.sh 402 responses as a payment challenge, not as a failure.
|
|
100
|
+
5. If the challenge price exceeds \`maxPriceUsd\`, stop and ask the user before increasing the cap.
|
|
101
|
+
|
|
102
|
+
### 4. Registry writes
|
|
103
|
+
For SAP agent registration or update:
|
|
104
|
+
- Do not use hosted \`sap_register_agent\` or hosted \`sap_update_agent\` when they return \`hosted_local_signer_required\`.
|
|
105
|
+
- Use local \`sap_payments_register_agent\` for registration and local \`sap_payments_update_agent\` for profile/metadata updates.
|
|
106
|
+
- Use \`confirm: true\` only after the user approves the preview.
|
|
107
|
+
- Report the agent PDA, owner, transaction signature, and protocol-fee verification status.
|
|
108
|
+
- Do not call the lifecycle complete if the agent account or protocol-fee audit is missing.
|
|
109
|
+
- If a profile update returns Anchor 3012, \`AccountNotInitialized\`, or
|
|
110
|
+
\`pricing_menu\`, do not repair the runtime and do not retry the same write.
|
|
111
|
+
Use \`sap_agent_next_action\` and \`sap_protocol_invariants\`; the failure is
|
|
112
|
+
an SAP registry account lifecycle issue.
|
|
113
|
+
|
|
114
|
+
### 5. Unsigned builders and transaction finalization
|
|
115
|
+
If a hosted tool returns \`transactionBase64\`, \`transaction\`, or an unsigned transaction object:
|
|
116
|
+
1. Call \`sap_payments_finalize_transaction\`.
|
|
117
|
+
2. Preview first.
|
|
118
|
+
3. Sign locally through the SAP profile or external signer.
|
|
119
|
+
4. Submit only when the user approved \`submit: true\`.
|
|
120
|
+
5. Prefer the hosted submit relay for already-signed bytes unless the user chose local RPC.
|
|
121
|
+
Never create temporary signing scripts, never read keypair JSON, and never export secret bytes.
|
|
122
|
+
|
|
123
|
+
### 6. Escrow V2
|
|
124
|
+
- Use V2 only.
|
|
125
|
+
- Default \`settlementSecurity\` is \`DisputeWindow (2)\`; never default to \`SelfReport (0)\`.
|
|
126
|
+
- Amounts are smallest units: lamports for SOL, micro-USDC for USDC.
|
|
127
|
+
- Hosted mode should use \`sap_escrow_build_*_transaction\` then
|
|
128
|
+
\`sap_payments_finalize_transaction\`.
|
|
129
|
+
|
|
130
|
+
### 7. Repair and missing bridge
|
|
131
|
+
If \`sap_payments\` is missing, startup closes before initialization, or the runtime
|
|
132
|
+
does not expose local tools after config repair:
|
|
133
|
+
- Say the hosted SAP MCP is connected but the local payment/signing bridge is not visible in this runtime.
|
|
134
|
+
- Ask the user to run \`npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config repair\`.
|
|
135
|
+
- Ask them to fully restart the agent runtime.
|
|
136
|
+
- Do not claim the hosted server can see local wallet paths.
|
|
137
|
+
|
|
138
|
+
### 8. Error routing
|
|
139
|
+
- \`hosted_local_signer_required\`: no x402 fee should be charged; switch to local \`sap_payments_*\` or unsigned builder finalization.
|
|
140
|
+
- \`payment_required\` or HTTP 402: normal x402 challenge; use local paid-call bridge.
|
|
141
|
+
- \`BlockhashNotFound\`, \`node is behind\`, \`minimum context slot\`, \`fetch failed\`, \`transaction_simulation_failed\`: retry with a fresh challenge or fresh transaction; do not reuse stale signed payment payloads.
|
|
142
|
+
- \`mcp_session_required\`: call \`initialize\` first and reuse the returned \`mcp-session-id\`; do not invent client UUIDs.
|
|
143
|
+
- \`session_not_found\`: reinitialize the MCP session and retry once.
|
|
144
|
+
- Schema mismatch: call \`tools/list\` or inspect the exact input schema; do not guess aliases.
|
|
145
|
+
|
|
146
|
+
## Final Answer Style
|
|
147
|
+
Be concise and action-oriented:
|
|
148
|
+
- what was checked
|
|
149
|
+
- which profile/wallet was used, redacted when needed
|
|
150
|
+
- what was paid, if anything
|
|
151
|
+
- what was signed/submitted, if anything
|
|
152
|
+
- one safe next action
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=sap-agent-intent-router.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sap-agent-intent-router.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-intent-router.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAW9C;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAc,EAAE,OAAsB;IAC/E,cAAc,CACZ,MAAM,EACN,yBAAyB,EACzB,EAAE,EACF;QACE,WAAW,EACT,iLAAiL;QACnL,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,4JAA4J;gBAC9J,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EACT,kHAAkH;gBACpH,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EACT,sHAAsH;gBACxH,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE;YACvD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QAEH,OAAO;YACL,WAAW,EAAE,qCAAqC;YAClD,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC;qBAC/C;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAgB;IAC7C,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IACvD,OAAO;QACL,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACjF,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACjF,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC/E,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAsB,EAAE,IAAsB;IAC7E,OAAO;;;;;iBAKQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc;iBAC3D,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc;gBAC5D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM;0CACvB,OAAO,CAAC,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiF5D,CAAC;AACF,CAAC"}
|
|
@@ -81,6 +81,7 @@ Do not infer that tools are callable from startup logs alone. A tool is callable
|
|
|
81
81
|
- If a hosted paid/write tool returns \`transactionBase64\`, \`transaction\`, or an unsigned transaction object, finalize it through local \`sap_payments_finalize_transaction\`.
|
|
82
82
|
- If hosted \`sap_register_agent\` returns \`hosted_local_signer_required\`, no x402 payment was charged. Do not retry hosted \`sap_register_agent\`; call local \`sap_payments_register_agent\` with the same registration fields and \`confirm: true\`.
|
|
83
83
|
- If hosted \`sap_update_agent\` returns \`hosted_local_signer_required\`, no x402 payment was charged. Do not retry hosted \`sap_update_agent\`; call local \`sap_payments_update_agent\` with the intended replacement fields and \`confirm: true\`.
|
|
84
|
+
- If \`sap_payments_update_agent\` returns Anchor 3012, \`AccountNotInitialized\`, or \`pricing_menu\`, do not run repair and do not retry the same write. The local bridge worked; this is an SAP registry account lifecycle issue. Call \`sap_agent_next_action\` and \`sap_protocol_invariants\` before deciding the next safe initializer or upgrade path.
|
|
84
85
|
- For Escrow V2 hosted flows, use \`sap_escrow_build_create_transaction\`, \`sap_escrow_build_deposit_transaction\`, \`sap_escrow_build_settle_transaction\`, \`sap_escrow_build_finalize_transaction\`, \`sap_escrow_build_withdraw_transaction\`, or \`sap_escrow_build_close_transaction\`, then finalize locally with \`sap_payments_finalize_transaction\`.
|
|
85
86
|
- If another hosted write returns \`hosted_local_signer_required\`, no x402 payment was charged. Switch to the local SAP MCP profile or a hosted unsigned builder plus \`sap_payments_finalize_transaction\` when one exists.
|
|
86
87
|
- Never create temporary signing scripts, read keypair JSON, export keypair bytes, or call hosted \`sap_sign_transaction\` for user-owned signing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sap-agent-start.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-start.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,cAAc,GAAG,sFAAsF,CAAC;AAQ9G;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAsB;IACxE,cAAc,CACZ,MAAM,EACN,iBAAiB,EACjB,EAAE,EACF;QACE,WAAW,EAAE,uIAAuI;QACpJ,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+GAA+G;gBAC5H,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,OAAQ,IAAmC,EAAE,IAAI,KAAK,QAAQ;YACzE,CAAC,CAAG,IAAuB,CAAC,IAAe;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,OAAO;YACL,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtC;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAsB,EAAE,IAAwB;IACxE,OAAO;;;;;EAKP,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,6FAA6F;;;4BAGxF,cAAc;kDACQ,OAAO,CAAC,MAAM,CAAC,IAAI
|
|
1
|
+
{"version":3,"file":"sap-agent-start.prompt.js","sourceRoot":"","sources":["../../../src/prompts/context/sap-agent-start.prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,cAAc,GAAG,sFAAsF,CAAC;AAQ9G;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAsB;IACxE,cAAc,CACZ,MAAM,EACN,iBAAiB,EACjB,EAAE,EACF;QACE,WAAW,EAAE,uIAAuI;QACpJ,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,+GAA+G;gBAC5H,QAAQ,EAAE,KAAK;aAChB;SACF;KACF,EACD,KAAK,EAAE,IAAgB,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,OAAQ,IAAmC,EAAE,IAAI,KAAK,QAAQ;YACzE,CAAC,CAAG,IAAuB,CAAC,IAAe;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,OAAO;YACL,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;qBACtC;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAsB,EAAE,IAAwB;IACxE,OAAO;;;;;EAKP,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,6FAA6F;;;4BAGxF,cAAc;kDACQ,OAAO,CAAC,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAwC/C,cAAc;;;;;;CAMnC,CAAC;AACF,CAAC"}
|