@raytio/mcp-server 3.0.0 → 3.4.0
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 +6 -5
- package/dist/authorization.d.ts +27 -2
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +67 -4
- package/dist/authorization.js.map +1 -1
- package/dist/capabilities/effective-capabilities.d.ts +248 -0
- package/dist/capabilities/effective-capabilities.d.ts.map +1 -0
- package/dist/capabilities/effective-capabilities.js +259 -0
- package/dist/capabilities/effective-capabilities.js.map +1 -0
- package/dist/capabilities/tool-capability.d.ts +52 -0
- package/dist/capabilities/tool-capability.d.ts.map +1 -0
- package/dist/capabilities/tool-capability.js +238 -0
- package/dist/capabilities/tool-capability.js.map +1 -0
- package/dist/generated-reads/catalogue.d.ts +80 -0
- package/dist/generated-reads/catalogue.d.ts.map +1 -0
- package/dist/generated-reads/catalogue.js +127 -0
- package/dist/generated-reads/catalogue.js.map +1 -0
- package/dist/generated-reads/guardrails.d.ts +147 -0
- package/dist/generated-reads/guardrails.d.ts.map +1 -0
- package/dist/generated-reads/guardrails.js +190 -0
- package/dist/generated-reads/guardrails.js.map +1 -0
- package/dist/generated-reads/index.d.ts +9 -0
- package/dist/generated-reads/index.d.ts.map +1 -0
- package/dist/generated-reads/index.js +5 -0
- package/dist/generated-reads/index.js.map +1 -0
- package/dist/generated-reads/query-builder.d.ts +99 -0
- package/dist/generated-reads/query-builder.d.ts.map +1 -0
- package/dist/generated-reads/query-builder.js +240 -0
- package/dist/generated-reads/query-builder.js.map +1 -0
- package/dist/generated-reads/resource-tools.d.ts +110 -0
- package/dist/generated-reads/resource-tools.d.ts.map +1 -0
- package/dist/generated-reads/resource-tools.js +280 -0
- package/dist/generated-reads/resource-tools.js.map +1 -0
- package/dist/index.js +20 -8
- package/dist/index.js.map +1 -1
- package/dist/tools/dispatch.d.ts +8 -1
- package/dist/tools/dispatch.d.ts.map +1 -1
- package/dist/tools/dispatch.js +16 -1
- package/dist/tools/dispatch.js.map +1 -1
- package/dist/tools/dsm/index.d.ts.map +1 -1
- package/dist/tools/dsm/index.js +18 -0
- package/dist/tools/dsm/index.js.map +1 -1
- package/dist/tools/ppm/activity-create.d.ts.map +1 -1
- package/dist/tools/ppm/activity-create.js +4 -0
- package/dist/tools/ppm/activity-create.js.map +1 -1
- package/dist/tools/ppm/activity-update.d.ts.map +1 -1
- package/dist/tools/ppm/activity-update.js +4 -0
- package/dist/tools/ppm/activity-update.js.map +1 -1
- package/dist/tools/ppm/external-system-list.d.ts.map +1 -1
- package/dist/tools/ppm/external-system-list.js +4 -0
- package/dist/tools/ppm/external-system-list.js.map +1 -1
- package/dist/tools/ppm/template-create.d.ts.map +1 -1
- package/dist/tools/ppm/template-create.js +4 -0
- package/dist/tools/ppm/template-create.js.map +1 -1
- package/dist/tools/ppm/template-get.d.ts.map +1 -1
- package/dist/tools/ppm/template-get.js +5 -0
- package/dist/tools/ppm/template-get.js.map +1 -1
- package/dist/tools/ppm/template-instantiate.d.ts.map +1 -1
- package/dist/tools/ppm/template-instantiate.js +4 -0
- package/dist/tools/ppm/template-instantiate.js.map +1 -1
- package/dist/tools/ppm/template-list.d.ts.map +1 -1
- package/dist/tools/ppm/template-list.js +4 -0
- package/dist/tools/ppm/template-list.js.map +1 -1
- package/dist/tools/ppm/template-slot-create.d.ts.map +1 -1
- package/dist/tools/ppm/template-slot-create.js +4 -0
- package/dist/tools/ppm/template-slot-create.js.map +1 -1
- package/dist/tools/ppm/template-slot-list.d.ts.map +1 -1
- package/dist/tools/ppm/template-slot-list.js +4 -0
- package/dist/tools/ppm/template-slot-list.js.map +1 -1
- package/dist/tools/ppm/work-item-activities.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-activities.js +4 -0
- package/dist/tools/ppm/work-item-activities.js.map +1 -1
- package/dist/tools/ppm/work-item-block.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-block.js +5 -0
- package/dist/tools/ppm/work-item-block.js.map +1 -1
- package/dist/tools/ppm/work-item-cancel.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-cancel.js +14 -2
- package/dist/tools/ppm/work-item-cancel.js.map +1 -1
- package/dist/tools/ppm/work-item-comment.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-comment.js +4 -0
- package/dist/tools/ppm/work-item-comment.js.map +1 -1
- package/dist/tools/ppm/work-item-complete.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-complete.js +5 -0
- package/dist/tools/ppm/work-item-complete.js.map +1 -1
- package/dist/tools/ppm/work-item-create.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-create.js +4 -0
- package/dist/tools/ppm/work-item-create.js.map +1 -1
- package/dist/tools/ppm/work-item-dependency-create.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-dependency-create.js +4 -0
- package/dist/tools/ppm/work-item-dependency-create.js.map +1 -1
- package/dist/tools/ppm/work-item-dependency-list.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-dependency-list.js +4 -0
- package/dist/tools/ppm/work-item-dependency-list.js.map +1 -1
- package/dist/tools/ppm/work-item-get.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-get.js +4 -0
- package/dist/tools/ppm/work-item-get.js.map +1 -1
- package/dist/tools/ppm/work-item-link-create.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-link-create.js +4 -0
- package/dist/tools/ppm/work-item-link-create.js.map +1 -1
- package/dist/tools/ppm/work-item-link-list.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-link-list.js +4 -0
- package/dist/tools/ppm/work-item-link-list.js.map +1 -1
- package/dist/tools/ppm/work-item-list.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-list.js +4 -0
- package/dist/tools/ppm/work-item-list.js.map +1 -1
- package/dist/tools/ppm/work-item-ready.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-ready.js +5 -0
- package/dist/tools/ppm/work-item-ready.js.map +1 -1
- package/dist/tools/ppm/work-item-start.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-start.js +5 -0
- package/dist/tools/ppm/work-item-start.js.map +1 -1
- package/dist/tools/ppm/work-item-tree.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-tree.js +4 -0
- package/dist/tools/ppm/work-item-tree.js.map +1 -1
- package/dist/tools/ppm/work-item-unblock.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-unblock.js +5 -0
- package/dist/tools/ppm/work-item-unblock.js.map +1 -1
- package/dist/tools/ppm/work-item-update-progress.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-update-progress.js +5 -0
- package/dist/tools/ppm/work-item-update-progress.js.map +1 -1
- package/dist/tools/ppm/work-item-update.d.ts.map +1 -1
- package/dist/tools/ppm/work-item-update.js +4 -0
- package/dist/tools/ppm/work-item-update.js.map +1 -1
- package/dist/tools/prm/prm-party-create.d.ts.map +1 -1
- package/dist/tools/prm/prm-party-create.js +4 -0
- package/dist/tools/prm/prm-party-create.js.map +1 -1
- package/dist/tools/prm/prm-party-list.d.ts.map +1 -1
- package/dist/tools/prm/prm-party-list.js +4 -0
- package/dist/tools/prm/prm-party-list.js.map +1 -1
- package/dist/tools/registry.d.ts +81 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-create.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-artifact-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-get.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-artifact-get.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-artifact-list.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-artifact-list.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-cost-summary.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-cost-summary.js +6 -0
- package/dist/tools/wrm/wrm-agent-run-cost-summary.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-create.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-create.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-eval-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-list.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-eval-list.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-summary.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-eval-summary.js +8 -0
- package/dist/tools/wrm/wrm-agent-run-eval-summary.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-get.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-get.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-guardrail-result-list.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-summary.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js +5 -0
- package/dist/tools/wrm/wrm-agent-run-guardrail-summary.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-list.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-list.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-create.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-step-create.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-list.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-step-list.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-step-update.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-step-update.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-summary.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-summary.js +7 -0
- package/dist/tools/wrm/wrm-agent-run-summary.js.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-agent-run-update.js +4 -0
- package/dist/tools/wrm/wrm-agent-run-update.js.map +1 -1
- package/dist/tools/wrm/wrm-credential-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-credential-list.js +4 -0
- package/dist/tools/wrm/wrm-credential-list.js.map +1 -1
- package/dist/tools/wrm/wrm-credential-request-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-credential-request-create.js +14 -0
- package/dist/tools/wrm/wrm-credential-request-create.js.map +1 -1
- package/dist/tools/wrm/wrm-credential-request-status.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-credential-request-status.js +5 -0
- package/dist/tools/wrm/wrm-credential-request-status.js.map +1 -1
- package/dist/tools/wrm/wrm-credential-retrieve.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-credential-retrieve.js +4 -0
- package/dist/tools/wrm/wrm-credential-retrieve.js.map +1 -1
- package/dist/tools/wrm/wrm-credential-revoke.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-credential-revoke.js +7 -0
- package/dist/tools/wrm/wrm-credential-revoke.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-create.js +4 -0
- package/dist/tools/wrm/wrm-domain-create.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-get.js +4 -0
- package/dist/tools/wrm/wrm-domain-get.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-list.js +4 -0
- package/dist/tools/wrm/wrm-domain-list.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-create.js +4 -0
- package/dist/tools/wrm/wrm-domain-repository-create.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-get.js +4 -0
- package/dist/tools/wrm/wrm-domain-repository-get.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-list.js +4 -0
- package/dist/tools/wrm/wrm-domain-repository-list.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-repository-update.js +4 -0
- package/dist/tools/wrm/wrm-domain-repository-update.js.map +1 -1
- package/dist/tools/wrm/wrm-domain-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-domain-update.js +4 -0
- package/dist/tools/wrm/wrm-domain-update.js.map +1 -1
- package/dist/tools/wrm/wrm-effective-mcp-servers.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-effective-mcp-servers.js +4 -0
- package/dist/tools/wrm/wrm-effective-mcp-servers.js.map +1 -1
- package/dist/tools/wrm/wrm-effective-mcp-tools.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-effective-mcp-tools.js +4 -0
- package/dist/tools/wrm/wrm-effective-mcp-tools.js.map +1 -1
- package/dist/tools/wrm/wrm-effective-model-prefs.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-effective-model-prefs.js +4 -0
- package/dist/tools/wrm/wrm-effective-model-prefs.js.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-create.js +4 -0
- package/dist/tools/wrm/wrm-eval-scorer-create.js.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-get.js +4 -0
- package/dist/tools/wrm/wrm-eval-scorer-get.js.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-list.js +4 -0
- package/dist/tools/wrm/wrm-eval-scorer-list.js.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-eval-scorer-update.js +4 -0
- package/dist/tools/wrm/wrm-eval-scorer-update.js.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-create.js +4 -0
- package/dist/tools/wrm/wrm-guardrail-create.js.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-get.js +4 -0
- package/dist/tools/wrm/wrm-guardrail-get.js.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-list.js +4 -0
- package/dist/tools/wrm/wrm-guardrail-list.js.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-guardrail-update.js +4 -0
- package/dist/tools/wrm/wrm-guardrail-update.js.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-chunk-search.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-chunk-search.js +4 -0
- package/dist/tools/wrm/wrm-knowledge-chunk-search.js.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-create.js +4 -0
- package/dist/tools/wrm/wrm-knowledge-source-create.js.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-get.js +4 -0
- package/dist/tools/wrm/wrm-knowledge-source-get.js.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-list.js +4 -0
- package/dist/tools/wrm/wrm-knowledge-source-list.js.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-knowledge-source-update.js +4 -0
- package/dist/tools/wrm/wrm-knowledge-source-update.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-create.js +4 -0
- package/dist/tools/wrm/wrm-mcp-server-create.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-get.js +4 -0
- package/dist/tools/wrm/wrm-mcp-server-get.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-list.js +4 -0
- package/dist/tools/wrm/wrm-mcp-server-list.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-server-update.js +4 -0
- package/dist/tools/wrm/wrm-mcp-server-update.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-create.js +4 -0
- package/dist/tools/wrm/wrm-mcp-tool-create.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-get.js +4 -0
- package/dist/tools/wrm/wrm-mcp-tool-get.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-list.js +4 -0
- package/dist/tools/wrm/wrm-mcp-tool-list.js.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-mcp-tool-update.js +4 -0
- package/dist/tools/wrm/wrm-mcp-tool-update.js.map +1 -1
- package/dist/tools/wrm/wrm-memory-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-memory-create.js +6 -0
- package/dist/tools/wrm/wrm-memory-create.js.map +1 -1
- package/dist/tools/wrm/wrm-memory-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-memory-get.js +4 -0
- package/dist/tools/wrm/wrm-memory-get.js.map +1 -1
- package/dist/tools/wrm/wrm-memory-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-memory-list.js +4 -0
- package/dist/tools/wrm/wrm-memory-list.js.map +1 -1
- package/dist/tools/wrm/wrm-memory-search.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-memory-search.js +4 -0
- package/dist/tools/wrm/wrm-memory-search.js.map +1 -1
- package/dist/tools/wrm/wrm-memory-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-memory-update.js +5 -0
- package/dist/tools/wrm/wrm-memory-update.js.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-create.js +4 -0
- package/dist/tools/wrm/wrm-model-availability-create.js.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-get.js +4 -0
- package/dist/tools/wrm/wrm-model-availability-get.js.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-list.js +4 -0
- package/dist/tools/wrm/wrm-model-availability-list.js.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-availability-update.js +4 -0
- package/dist/tools/wrm/wrm-model-availability-update.js.map +1 -1
- package/dist/tools/wrm/wrm-model-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-create.js +4 -0
- package/dist/tools/wrm/wrm-model-create.js.map +1 -1
- package/dist/tools/wrm/wrm-model-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-get.js +4 -0
- package/dist/tools/wrm/wrm-model-get.js.map +1 -1
- package/dist/tools/wrm/wrm-model-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-list.js +4 -0
- package/dist/tools/wrm/wrm-model-list.js.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-create.js +4 -0
- package/dist/tools/wrm/wrm-model-parameter-create.js.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-get.js +4 -0
- package/dist/tools/wrm/wrm-model-parameter-get.js.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-list.js +4 -0
- package/dist/tools/wrm/wrm-model-parameter-list.js.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-parameter-update.js +4 -0
- package/dist/tools/wrm/wrm-model-parameter-update.js.map +1 -1
- package/dist/tools/wrm/wrm-model-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-model-update.js +4 -0
- package/dist/tools/wrm/wrm-model-update.js.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-create.js +4 -0
- package/dist/tools/wrm/wrm-platform-label-map-create.js.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-get.js +4 -0
- package/dist/tools/wrm/wrm-platform-label-map-get.js.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-list.js +4 -0
- package/dist/tools/wrm/wrm-platform-label-map-list.js.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-resolve.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-resolve.js +4 -0
- package/dist/tools/wrm/wrm-platform-label-map-resolve.js.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-platform-label-map-update.js +4 -0
- package/dist/tools/wrm/wrm-platform-label-map-update.js.map +1 -1
- package/dist/tools/wrm/wrm-provider-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-provider-create.js +4 -0
- package/dist/tools/wrm/wrm-provider-create.js.map +1 -1
- package/dist/tools/wrm/wrm-provider-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-provider-get.js +4 -0
- package/dist/tools/wrm/wrm-provider-get.js.map +1 -1
- package/dist/tools/wrm/wrm-provider-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-provider-list.js +4 -0
- package/dist/tools/wrm/wrm-provider-list.js.map +1 -1
- package/dist/tools/wrm/wrm-provider-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-provider-update.js +4 -0
- package/dist/tools/wrm/wrm-provider-update.js.map +1 -1
- package/dist/tools/wrm/wrm-role-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-create.js +4 -0
- package/dist/tools/wrm/wrm-role-create.js.map +1 -1
- package/dist/tools/wrm/wrm-role-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-get.js +4 -0
- package/dist/tools/wrm/wrm-role-get.js.map +1 -1
- package/dist/tools/wrm/wrm-role-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-list.js +4 -0
- package/dist/tools/wrm/wrm-role-list.js.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-create.js +4 -0
- package/dist/tools/wrm/wrm-role-memory-create.js.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-get.js +4 -0
- package/dist/tools/wrm/wrm-role-memory-get.js.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-list.js +4 -0
- package/dist/tools/wrm/wrm-role-memory-list.js.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-search.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-search.js +5 -0
- package/dist/tools/wrm/wrm-role-memory-search.js.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-memory-update.js +4 -0
- package/dist/tools/wrm/wrm-role-memory-update.js.map +1 -1
- package/dist/tools/wrm/wrm-role-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-role-update.js +4 -0
- package/dist/tools/wrm/wrm-role-update.js.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-create.js +4 -0
- package/dist/tools/wrm/wrm-sandbox-provider-create.js.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-get.js +4 -0
- package/dist/tools/wrm/wrm-sandbox-provider-get.js.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-list.js +4 -0
- package/dist/tools/wrm/wrm-sandbox-provider-list.js.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-sandbox-provider-update.js +4 -0
- package/dist/tools/wrm/wrm-sandbox-provider-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-server-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-server-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-server-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-mcp-tool-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-model-pref-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-model-pref-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-def-model-pref-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-def-model-pref-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-definition-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-get.js +4 -0
- package/dist/tools/wrm/wrm-worker-definition-get.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-definition-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-definition-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-definition-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-find-for-role.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-find-for-role.js +5 -0
- package/dist/tools/wrm/wrm-worker-find-for-role.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-get.js +4 -0
- package/dist/tools/wrm/wrm-worker-get.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-server-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-server-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-server-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-server-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-tool-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-tool-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-mcp-tool-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-mcp-tool-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-model-pref-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-model-pref-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-model-pref-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-model-pref-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-resolve-config.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-resolve-config.js +13 -0
- package/dist/tools/wrm/wrm-worker-resolve-config.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-create.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-create.js +4 -0
- package/dist/tools/wrm/wrm-worker-role-assignment-create.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-get.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-get.js +4 -0
- package/dist/tools/wrm/wrm-worker-role-assignment-get.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-list.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-list.js +4 -0
- package/dist/tools/wrm/wrm-worker-role-assignment-list.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-role-assignment-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-role-assignment-update.js.map +1 -1
- package/dist/tools/wrm/wrm-worker-update.d.ts.map +1 -1
- package/dist/tools/wrm/wrm-worker-update.js +4 -0
- package/dist/tools/wrm/wrm-worker-update.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -145,13 +145,14 @@ Restart Codex CLI after editing the config. Inside a session, `/mcp` lists loade
|
|
|
145
145
|
|
|
146
146
|
### Tool domain selection
|
|
147
147
|
|
|
148
|
-
The server decides which tools to expose
|
|
148
|
+
The server decides which tools to expose in two layers:
|
|
149
149
|
|
|
150
|
-
1.
|
|
151
|
-
2. **
|
|
152
|
-
3. **All domains** (fallback) — if the role query fails or returns no recognised roles, every domain is exposed (matching pre-v1.4.0 behaviour).
|
|
150
|
+
1. **Role-domain filter** (coarse) — at startup the server queries the authenticated user's roles via `fnd_authz_user_groups()` and maps them to tool domains. The `RAYTIO_TOOL_DOMAINS` env var can further restrict this set but never expand it.
|
|
151
|
+
2. **Effective-capability filter** (fine) — the server then calls the Persist RPC `fnd_get_effective_capabilities()` and drops any tool whose declared `(resource_group, resource_name, operation, scope)` requirement is not satisfied. `OWN_RECORDS` grants NEVER silently satisfy `ALL_RECORDS` requirements.
|
|
153
152
|
|
|
154
|
-
|
|
153
|
+
Both layers **fail closed**: if the role query or capability RPC fails, or returns no recognised roles / no capabilities for a gated tool, that tool is not exposed. Dispatch re-checks capabilities at call time, so a stale `ListTools` result cannot bypass the check.
|
|
154
|
+
|
|
155
|
+
The server logs which path was taken and how many tools were hidden at startup (to stderr).
|
|
155
156
|
|
|
156
157
|
#### How dynamic resolution works
|
|
157
158
|
|
package/dist/authorization.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { EffectiveCapabilityIndex } from './capabilities/effective-capabilities.js';
|
|
1
2
|
import { RaytioApiClient } from './raytio/api-client.js';
|
|
3
|
+
import { Tool } from './tools/registry.js';
|
|
2
4
|
/**
|
|
3
5
|
* Result of resolving the effective tool domain set for the authenticated
|
|
4
6
|
* user. When `authorized` is `false`, the caller MUST expose no tools.
|
|
@@ -10,20 +12,43 @@ export interface AuthorizationResult {
|
|
|
10
12
|
reason: string;
|
|
11
13
|
/** `true` when the caller should expose tools. `false` means fail closed — expose nothing. */
|
|
12
14
|
authorized: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Immutable index over the caller's effective Persist capabilities.
|
|
17
|
+
* Present only when the effective-capabilities RPC was fetched and
|
|
18
|
+
* validated successfully. Consumers use this both to filter the
|
|
19
|
+
* advertised tool list and to gate `CallTool` dispatch.
|
|
20
|
+
*/
|
|
21
|
+
capabilities?: EffectiveCapabilityIndex;
|
|
13
22
|
}
|
|
14
23
|
type StderrLogger = Pick<Console, 'error'>;
|
|
15
24
|
/**
|
|
16
25
|
* Resolve the tool domain surface for the authenticated user.
|
|
17
26
|
*
|
|
18
27
|
* Behaviour:
|
|
19
|
-
* - Always queries the backend for the user's resolved roles
|
|
20
|
-
*
|
|
28
|
+
* - Always queries the backend for the user's resolved roles AND
|
|
29
|
+
* effective Persist capabilities. On any failure of either query,
|
|
30
|
+
* fails closed and exposes no tools.
|
|
21
31
|
* - The static `RAYTIO_TOOL_DOMAINS` override may only *restrict* the
|
|
22
32
|
* user's resolved domain set. It never grants access to domains the
|
|
23
33
|
* user does not have.
|
|
24
34
|
* - If the intersection is empty (or the user has no recognised roles),
|
|
25
35
|
* fails closed.
|
|
36
|
+
* - The returned `capabilities` index is used downstream by
|
|
37
|
+
* {@link filterToolsByCapabilities} and by the dispatch layer to
|
|
38
|
+
* enforce per-tool authorisation at both advertisement and call time.
|
|
26
39
|
*/
|
|
27
40
|
export declare function resolveToolDomains(apiClient: RaytioApiClient, envSpec: string | undefined, logger?: StderrLogger): Promise<AuthorizationResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Drop any tool whose declared `capabilities` are not satisfied by the
|
|
43
|
+
* caller's effective capability set. Tools that have no `capabilities`
|
|
44
|
+
* declaration pass through unchanged — they are gated only by the
|
|
45
|
+
* coarser role-domain filter until they are migrated onto the pinned
|
|
46
|
+
* Persist resource contract (see WI-0003500 onward).
|
|
47
|
+
*
|
|
48
|
+
* A tool with an empty `capabilities` array is treated as declaring
|
|
49
|
+
* "requires no permission" and passes through — the empty list is an
|
|
50
|
+
* explicit affirmation, not a fallthrough.
|
|
51
|
+
*/
|
|
52
|
+
export declare function filterToolsByCapabilities(tools: readonly Tool[], capabilities: EffectiveCapabilityIndex, logger?: StderrLogger): Tool[];
|
|
28
53
|
export {};
|
|
29
54
|
//# sourceMappingURL=authorization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"authorization.d.ts","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EAEzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG3C;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,mHAAmH;IACnH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yFAAyF;IACzF,MAAM,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAgD3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,GAAE,YAAsB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,YAAY,EAAE,wBAAwB,EACtC,MAAM,GAAE,YAAsB,GAC7B,IAAI,EAAE,CA8BR"}
|
package/dist/authorization.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EffectiveCapabilityError, fetchEffectiveCapabilities, } from './capabilities/effective-capabilities.js';
|
|
1
2
|
import { resolveUserDomains } from './tools/role-mapping.js';
|
|
2
3
|
/**
|
|
3
4
|
* Domains that a static override may resolve to when the user only holds
|
|
@@ -44,13 +45,17 @@ function restrictToUserDomains(staticDomains, userDomains) {
|
|
|
44
45
|
* Resolve the tool domain surface for the authenticated user.
|
|
45
46
|
*
|
|
46
47
|
* Behaviour:
|
|
47
|
-
* - Always queries the backend for the user's resolved roles
|
|
48
|
-
*
|
|
48
|
+
* - Always queries the backend for the user's resolved roles AND
|
|
49
|
+
* effective Persist capabilities. On any failure of either query,
|
|
50
|
+
* fails closed and exposes no tools.
|
|
49
51
|
* - The static `RAYTIO_TOOL_DOMAINS` override may only *restrict* the
|
|
50
52
|
* user's resolved domain set. It never grants access to domains the
|
|
51
53
|
* user does not have.
|
|
52
54
|
* - If the intersection is empty (or the user has no recognised roles),
|
|
53
55
|
* fails closed.
|
|
56
|
+
* - The returned `capabilities` index is used downstream by
|
|
57
|
+
* {@link filterToolsByCapabilities} and by the dispatch layer to
|
|
58
|
+
* enforce per-tool authorisation at both advertisement and call time.
|
|
54
59
|
*/
|
|
55
60
|
export async function resolveToolDomains(apiClient, envSpec, logger = console) {
|
|
56
61
|
const staticDomains = parseSpec(envSpec);
|
|
@@ -69,10 +74,28 @@ export async function resolveToolDomains(apiClient, envSpec, logger = console) {
|
|
|
69
74
|
logger.error(`Raytio MCP: ${reason} — exposing no tools (fail closed)`);
|
|
70
75
|
return { domainSpec: undefined, reason, authorized: false };
|
|
71
76
|
}
|
|
77
|
+
let capabilities;
|
|
78
|
+
try {
|
|
79
|
+
capabilities = await fetchEffectiveCapabilities(apiClient);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const detail = err instanceof EffectiveCapabilityError
|
|
83
|
+
? err.message
|
|
84
|
+
: `unexpected error: ${err.message}`;
|
|
85
|
+
const reason = `effective capabilities discovery failed: ${detail}`;
|
|
86
|
+
logger.error(`Raytio MCP: ${reason} — exposing no tools (fail closed)`);
|
|
87
|
+
return { domainSpec: undefined, reason, authorized: false };
|
|
88
|
+
}
|
|
89
|
+
logger.error(`Raytio MCP: fetched ${capabilities.size} effective capability rows for authenticated user`);
|
|
72
90
|
if (staticDomains.length === 0) {
|
|
73
91
|
const spec = userDomains.join(',');
|
|
74
92
|
logger.error(`Raytio MCP: resolved domains from user roles: ${spec}`);
|
|
75
|
-
return {
|
|
93
|
+
return {
|
|
94
|
+
domainSpec: spec,
|
|
95
|
+
reason: 'resolved from user roles',
|
|
96
|
+
authorized: true,
|
|
97
|
+
capabilities,
|
|
98
|
+
};
|
|
76
99
|
}
|
|
77
100
|
const allowed = restrictToUserDomains(staticDomains, userDomains);
|
|
78
101
|
if (allowed.length === 0) {
|
|
@@ -82,6 +105,46 @@ export async function resolveToolDomains(apiClient, envSpec, logger = console) {
|
|
|
82
105
|
}
|
|
83
106
|
const spec = allowed.join(',');
|
|
84
107
|
logger.error(`Raytio MCP: static RAYTIO_TOOL_DOMAINS restricted user roles (${userDomains.join(',')}) to ${spec}`);
|
|
85
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
domainSpec: spec,
|
|
110
|
+
reason: 'restricted by static override',
|
|
111
|
+
authorized: true,
|
|
112
|
+
capabilities,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Drop any tool whose declared `capabilities` are not satisfied by the
|
|
117
|
+
* caller's effective capability set. Tools that have no `capabilities`
|
|
118
|
+
* declaration pass through unchanged — they are gated only by the
|
|
119
|
+
* coarser role-domain filter until they are migrated onto the pinned
|
|
120
|
+
* Persist resource contract (see WI-0003500 onward).
|
|
121
|
+
*
|
|
122
|
+
* A tool with an empty `capabilities` array is treated as declaring
|
|
123
|
+
* "requires no permission" and passes through — the empty list is an
|
|
124
|
+
* explicit affirmation, not a fallthrough.
|
|
125
|
+
*/
|
|
126
|
+
export function filterToolsByCapabilities(tools, capabilities, logger = console) {
|
|
127
|
+
const allowed = [];
|
|
128
|
+
let hidden = 0;
|
|
129
|
+
for (const tool of tools) {
|
|
130
|
+
if (!tool.capabilities || tool.capabilities.length === 0) {
|
|
131
|
+
allowed.push(tool);
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const missing = tool.capabilities.filter((req) => !capabilities.satisfies(req));
|
|
135
|
+
if (missing.length === 0) {
|
|
136
|
+
allowed.push(tool);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
hidden += 1;
|
|
140
|
+
const detail = missing
|
|
141
|
+
.map((r) => `${r.resourceGroup}.${r.resourceName}#${r.operation}@${r.scope ?? 'OWN_RECORDS'}`)
|
|
142
|
+
.join(', ');
|
|
143
|
+
logger.error(`Raytio MCP: hiding tool "${tool.name}" — missing capability: ${detail}`);
|
|
144
|
+
}
|
|
145
|
+
if (hidden > 0) {
|
|
146
|
+
logger.error(`Raytio MCP: capability filter hid ${hidden}/${tools.length} tools`);
|
|
147
|
+
}
|
|
148
|
+
return allowed;
|
|
86
149
|
}
|
|
87
150
|
//# sourceMappingURL=authorization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authorization.js","sourceRoot":"","sources":["../src/authorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RaytioApiClient } from '../raytio/api-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Client and index for the supported Persist "effective capabilities" RPC
|
|
5
|
+
* (`public.fnd_get_effective_capabilities()`), owned by WI-0003499.
|
|
6
|
+
*
|
|
7
|
+
* The RPC returns one row per (resource_group, resource_name, operation)
|
|
8
|
+
* tuple that the authenticated user may exercise. MCP uses that set to
|
|
9
|
+
* authorise both tool advertisement (`ListTools`) and tool dispatch
|
|
10
|
+
* (`CallTool`).
|
|
11
|
+
*
|
|
12
|
+
* Row semantics — see `docs/mcp-effective-capabilities.md` in the Persist
|
|
13
|
+
* repository:
|
|
14
|
+
*
|
|
15
|
+
* - `resource_group` — 3-letter module code (e.g. `HRM`, `DSM`, `FAR`).
|
|
16
|
+
* Matches `resources[*].permission.resource_group` in the pinned MCP
|
|
17
|
+
* resource contract.
|
|
18
|
+
* - `resource_name` — resource-scoped code (e.g. `ACCESS_APPLICATIONS`),
|
|
19
|
+
* or `null` for a domain-level permission that applies to every
|
|
20
|
+
* resource in the group. Persist suppresses domain rows when
|
|
21
|
+
* table-specific entries exist for the same (group, operation) —
|
|
22
|
+
* MCP relies on that shadowing and does not re-check it here.
|
|
23
|
+
* - `operation` — one of `SELECT`, `INSERT`, `UPDATE`, `DELETE`, or a
|
|
24
|
+
* semantic operation seeded into the `HRM_PERMISSIONS_OPERATION`
|
|
25
|
+
* lookup.
|
|
26
|
+
* - `scope` — exactly one of `ALL_RECORDS` or `ROW_BOUNDED` on the wire.
|
|
27
|
+
* `ALL_RECORDS` means "verified unbounded HRM access". `ROW_BOUNDED`
|
|
28
|
+
* means "the HRM grant exists at OWN_RECORDS scope but real access is
|
|
29
|
+
* via ownership / ReBAC / row filters — treat as informational". A
|
|
30
|
+
* `NULL` scope is coerced to `ROW_BOUNDED` inside the RPC, never to
|
|
31
|
+
* unbounded. MCP normalises `ROW_BOUNDED` to the pre-existing internal
|
|
32
|
+
* alias `OWN_RECORDS` on ingress (see {@link CAPABILITY_SCOPES}); both
|
|
33
|
+
* names refer to the same "not verified unbounded" semantic, so the
|
|
34
|
+
* rest of the MCP code path — CapabilityRequirement, satisfies(),
|
|
35
|
+
* dispatch — is unchanged. Reconciled in WI-0003661.
|
|
36
|
+
* - `advisory` — `TRUE` iff `scope = ROW_BOUNDED`; `FALSE` for
|
|
37
|
+
* `ALL_RECORDS`. Redundant with `scope` today; accepted (optional) on
|
|
38
|
+
* the wire so a producer-side addition remains non-breaking.
|
|
39
|
+
*
|
|
40
|
+
* When the caller reaches the same capability at both `ALL_RECORDS` and
|
|
41
|
+
* `ROW_BOUNDED`, the RPC collapses the row to `ALL_RECORDS`. MCP relies
|
|
42
|
+
* on that guarantee — the client does not attempt its own scope merge.
|
|
43
|
+
*
|
|
44
|
+
* MCP fails closed on any of:
|
|
45
|
+
* - HTTP transport failure,
|
|
46
|
+
* - JSON that does not parse or does not match the schema below,
|
|
47
|
+
* - unknown values in `operation` or `scope`,
|
|
48
|
+
* - a required tool capability that is not present in the returned set.
|
|
49
|
+
*
|
|
50
|
+
* `OWN_RECORDS` MUST NEVER silently become `ALL_RECORDS` — the tool
|
|
51
|
+
* declaration carries the scope its handler is safe with, and a broader
|
|
52
|
+
* effective capability satisfies it; a narrower one does not.
|
|
53
|
+
*
|
|
54
|
+
* ---
|
|
55
|
+
*
|
|
56
|
+
* Deliberate deviation from Persist's interpretation invariant
|
|
57
|
+
* (WI-0003661):
|
|
58
|
+
*
|
|
59
|
+
* Persist's contract states that "absence means unknown — ask the
|
|
60
|
+
* database" and that `ROW_BOUNDED` rows are informational, not a
|
|
61
|
+
* deny-side authorisation gate. MCP intentionally departs from that on
|
|
62
|
+
* the tool-advertisement path:
|
|
63
|
+
*
|
|
64
|
+
* - {@link filterToolsByCapabilities} HIDES any tool whose declared
|
|
65
|
+
* capabilities are missing from the caller's returned set.
|
|
66
|
+
* - {@link EffectiveCapabilityIndex.satisfies} returns `false` when the
|
|
67
|
+
* caller holds no matching row.
|
|
68
|
+
*
|
|
69
|
+
* The rationale is fail-closed advertisement: exposing a tool a caller
|
|
70
|
+
* cannot execute is a poor UX and leaks the shape of the denied surface.
|
|
71
|
+
* The database still enforces at call time — HRM permissions, ownership,
|
|
72
|
+
* and ReBAC all continue to gate the underlying query — so any tool
|
|
73
|
+
* whose actual access path is via ownership or ReBAC (never surfaced by
|
|
74
|
+
* this RPC) will be hidden until an explicit capability is granted or
|
|
75
|
+
* the tool's declaration is loosened. This is a design choice, not an
|
|
76
|
+
* oversight; revisit if MCP ever needs to advertise
|
|
77
|
+
* ownership/ReBAC-only tools.
|
|
78
|
+
*/
|
|
79
|
+
/**
|
|
80
|
+
* Wire-side scope vocabulary the RPC emits (per Persist's
|
|
81
|
+
* `docs/mcp-effective-capabilities.md`, WI-0003499):
|
|
82
|
+
*
|
|
83
|
+
* - `ALL_RECORDS` — verified unbounded HRM access.
|
|
84
|
+
* - `ROW_BOUNDED` — advisory HRM row; actual access via
|
|
85
|
+
* ownership / ReBAC / row filters.
|
|
86
|
+
*
|
|
87
|
+
* The legacy `OWN_RECORDS` label — the pre-rename name for `ROW_BOUNDED`
|
|
88
|
+
* — is still accepted for transitional deployments of Persist; both
|
|
89
|
+
* legacy and current values are normalised to the internal
|
|
90
|
+
* `OWN_RECORDS` alias.
|
|
91
|
+
*/
|
|
92
|
+
export declare const WIRE_CAPABILITY_SCOPES: readonly ["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"];
|
|
93
|
+
export type WireCapabilityScope = (typeof WIRE_CAPABILITY_SCOPES)[number];
|
|
94
|
+
/**
|
|
95
|
+
* MCP-internal scope vocabulary used by {@link CapabilityRequirement}
|
|
96
|
+
* declarations and by the scope stored inside
|
|
97
|
+
* {@link EffectiveCapabilityIndex}. Persist's `ROW_BOUNDED` is
|
|
98
|
+
* normalised to `OWN_RECORDS` on ingress — the two names encode the
|
|
99
|
+
* same semantic ("not a verified unbounded HRM grant — enforcement of
|
|
100
|
+
* access is via ownership / ReBAC / row filters at call time").
|
|
101
|
+
*
|
|
102
|
+
* Vocabulary decision (WI-0003678): the internal alias is permanent.
|
|
103
|
+
* WI-0003661 deferred the internal `OWN_RECORDS → ROW_BOUNDED` rename
|
|
104
|
+
* on the grounds that no tool declared a scope yet. WI-0003678 changed
|
|
105
|
+
* that — every tool in {@link Tool.capabilities} now declares
|
|
106
|
+
* requirements through the contract-derived {@link cap} helper, and
|
|
107
|
+
* OWN_RECORDS is the default scope that helper produces. Renaming at
|
|
108
|
+
* this point would touch every capability declaration for no wire-side
|
|
109
|
+
* benefit (the wire vocabulary is already `ROW_BOUNDED` in Persist and
|
|
110
|
+
* the transform on ingress hides that from the rest of the code path).
|
|
111
|
+
* Keep {@link CAPABILITY_SCOPES} as-is; do not add a `ROW_BOUNDED`
|
|
112
|
+
* alias inside MCP.
|
|
113
|
+
*/
|
|
114
|
+
export declare const CAPABILITY_SCOPES: readonly ["ALL_RECORDS", "OWN_RECORDS"];
|
|
115
|
+
export type CapabilityScope = (typeof CAPABILITY_SCOPES)[number];
|
|
116
|
+
/**
|
|
117
|
+
* Zod schema for one row returned by `fnd_get_effective_capabilities()`.
|
|
118
|
+
* The RPC guarantees a `NOT NULL` `resource_group`, `operation`, and
|
|
119
|
+
* `scope`; `resource_name` may be `NULL` for a domain-level permission.
|
|
120
|
+
*
|
|
121
|
+
* Any structural drift here is a hard error — MCP MUST NOT accept an
|
|
122
|
+
* unknown scope value, empty operation, or malformed resource_group.
|
|
123
|
+
*/
|
|
124
|
+
export declare const effectiveCapabilityRowSchema: z.ZodObject<{
|
|
125
|
+
resource_group: z.ZodString;
|
|
126
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
127
|
+
operation: z.ZodString;
|
|
128
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
129
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
130
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
131
|
+
resource_group: z.ZodString;
|
|
132
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
133
|
+
operation: z.ZodString;
|
|
134
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
135
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
136
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
137
|
+
resource_group: z.ZodString;
|
|
138
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
139
|
+
operation: z.ZodString;
|
|
140
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
141
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
142
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
143
|
+
export type EffectiveCapabilityRow = z.infer<typeof effectiveCapabilityRowSchema>;
|
|
144
|
+
export declare const effectiveCapabilityResponseSchema: z.ZodArray<z.ZodObject<{
|
|
145
|
+
resource_group: z.ZodString;
|
|
146
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
147
|
+
operation: z.ZodString;
|
|
148
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
149
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
150
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
151
|
+
resource_group: z.ZodString;
|
|
152
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
153
|
+
operation: z.ZodString;
|
|
154
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
155
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
156
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
157
|
+
resource_group: z.ZodString;
|
|
158
|
+
resource_name: z.ZodNullable<z.ZodString>;
|
|
159
|
+
operation: z.ZodString;
|
|
160
|
+
scope: z.ZodEffects<z.ZodEnum<["ALL_RECORDS", "ROW_BOUNDED", "OWN_RECORDS"]>, "ALL_RECORDS" | "OWN_RECORDS", "ALL_RECORDS" | "ROW_BOUNDED" | "OWN_RECORDS">;
|
|
161
|
+
advisory: z.ZodOptional<z.ZodBoolean>;
|
|
162
|
+
}, z.ZodTypeAny, "passthrough">>, "many">;
|
|
163
|
+
/**
|
|
164
|
+
* The declared capability requirement for a tool. A tool is authorised iff
|
|
165
|
+
* every requirement in its list is satisfied by the caller's effective
|
|
166
|
+
* capability set.
|
|
167
|
+
*
|
|
168
|
+
* The requirement is intentionally narrow — no wildcards, no "any op". A
|
|
169
|
+
* tool that reads and writes must declare both requirements. This keeps
|
|
170
|
+
* the authorisation graph auditable and cheap to reason about.
|
|
171
|
+
*/
|
|
172
|
+
export interface CapabilityRequirement {
|
|
173
|
+
/**
|
|
174
|
+
* Persist resource group (e.g. `WRM`). Compared case-insensitively
|
|
175
|
+
* against the RPC's `resource_group`.
|
|
176
|
+
*/
|
|
177
|
+
resourceGroup: string;
|
|
178
|
+
/**
|
|
179
|
+
* Persist resource name (e.g. `ROLES`). Compared case-insensitively
|
|
180
|
+
* against the RPC's `resource_name`. A domain-level row
|
|
181
|
+
* (`resource_name: null`) satisfies any resource in the same group.
|
|
182
|
+
*/
|
|
183
|
+
resourceName: string;
|
|
184
|
+
/** Operation code (e.g. `SELECT`). Compared case-insensitively. */
|
|
185
|
+
operation: string;
|
|
186
|
+
/**
|
|
187
|
+
* The minimum scope the tool's handler is safe with. `OWN_RECORDS`
|
|
188
|
+
* (the default) is satisfied by either `OWN_RECORDS` or `ALL_RECORDS`
|
|
189
|
+
* capabilities. `ALL_RECORDS` requires an `ALL_RECORDS` capability —
|
|
190
|
+
* an `OWN_RECORDS` capability is NOT sufficient, so an own-record
|
|
191
|
+
* grant can never silently become an all-record grant.
|
|
192
|
+
*/
|
|
193
|
+
scope?: CapabilityScope;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Immutable index over the caller's effective capability set. Answers
|
|
197
|
+
* "does the user hold capability X at scope Y?" in O(1). Domain-level
|
|
198
|
+
* rows (`resource_name: null`) are pre-expanded so table-specific lookups
|
|
199
|
+
* still hit the map.
|
|
200
|
+
*/
|
|
201
|
+
export declare class EffectiveCapabilityIndex {
|
|
202
|
+
/**
|
|
203
|
+
* Map keys are `${GROUP}|${NAME|*}|${OPERATION}` (uppercase). The value
|
|
204
|
+
* is the strongest scope observed for that tuple.
|
|
205
|
+
*
|
|
206
|
+
* Domain-level rows are stored with `resource_name = "*"` — table-level
|
|
207
|
+
* lookups probe both the specific name and the wildcard.
|
|
208
|
+
*/
|
|
209
|
+
private readonly index;
|
|
210
|
+
constructor(rows: EffectiveCapabilityRow[]);
|
|
211
|
+
/** Total number of effective (group, name, operation) rows held. */
|
|
212
|
+
get size(): number;
|
|
213
|
+
/**
|
|
214
|
+
* Return the strongest scope the caller holds for the (group, name,
|
|
215
|
+
* operation) tuple, or `undefined` if they hold no matching capability.
|
|
216
|
+
*
|
|
217
|
+
* A domain-level grant (`resource_name = null`) satisfies any resource
|
|
218
|
+
* in the same group.
|
|
219
|
+
*/
|
|
220
|
+
lookup(resourceGroup: string, resourceName: string, operation: string): CapabilityScope | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* `true` iff the caller holds a capability that satisfies the
|
|
223
|
+
* requirement. `OWN_RECORDS` requirements are satisfied by any grant.
|
|
224
|
+
* `ALL_RECORDS` requirements are satisfied only by an `ALL_RECORDS`
|
|
225
|
+
* grant — an `OWN_RECORDS` grant does NOT silently upgrade.
|
|
226
|
+
*/
|
|
227
|
+
satisfies(requirement: CapabilityRequirement): boolean;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Error thrown when the RPC cannot be fetched, decoded, or validated.
|
|
231
|
+
* Callers MUST fail closed (expose no tools) on this error.
|
|
232
|
+
*/
|
|
233
|
+
export declare class EffectiveCapabilityError extends Error {
|
|
234
|
+
readonly cause?: unknown | undefined;
|
|
235
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
236
|
+
}
|
|
237
|
+
/** PostgREST path to the Persist RPC. */
|
|
238
|
+
export declare const EFFECTIVE_CAPABILITIES_RPC_PATH = "/db/v1/rpc/fnd_get_effective_capabilities";
|
|
239
|
+
/**
|
|
240
|
+
* Fetch the caller's effective capabilities from Persist, validate the
|
|
241
|
+
* response shape, and return an index ready for constant-time lookup.
|
|
242
|
+
*
|
|
243
|
+
* Throws {@link EffectiveCapabilityError} on any transport, decode, or
|
|
244
|
+
* validation failure. Callers MUST fail closed on that error — never fall
|
|
245
|
+
* back to a permissive default.
|
|
246
|
+
*/
|
|
247
|
+
export declare function fetchEffectiveCapabilities(apiClient: RaytioApiClient): Promise<EffectiveCapabilityIndex>;
|
|
248
|
+
//# sourceMappingURL=effective-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-capabilities.d.ts","sourceRoot":"","sources":["../../src/capabilities/effective-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,wDAIzB,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB,yCAA0C,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAQjE;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;gCAuBzB,CAAC;AAEjB,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;yCAAwC,CAAC;AAEvF;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,wBAAwB;IACnC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;gBAEzC,IAAI,EAAE,sBAAsB,EAAE;IAgB1C,oEAAoE;IACpE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;OAMG;IACH,MAAM,CACJ,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,SAAS;IAW9B;;;;;OAKG;IACH,SAAS,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO;CAWvD;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAAzC,OAAO,EAAE,MAAM,EAAW,KAAK,CAAC,EAAE,OAAO,YAAA;CAItD;AAED,yCAAyC;AACzC,eAAO,MAAM,+BAA+B,8CACC,CAAC;AAE9C;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAmBnC"}
|