@dobbyai/mcp-external 1.1.0 → 1.2.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 +44 -14
- package/dist/__tests__/agent-mail-tools.test.js +19 -26
- package/dist/__tests__/agent-mail-tools.test.js.map +1 -1
- package/dist/__tests__/auth.test.js +50 -5
- package/dist/__tests__/auth.test.js.map +1 -1
- package/dist/__tests__/doctor.test.d.ts +16 -0
- package/dist/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/__tests__/doctor.test.js +258 -0
- package/dist/__tests__/doctor.test.js.map +1 -0
- package/dist/__tests__/external-agents-tools.test.d.ts +11 -0
- package/dist/__tests__/external-agents-tools.test.d.ts.map +1 -0
- package/dist/__tests__/external-agents-tools.test.js +619 -0
- package/dist/__tests__/external-agents-tools.test.js.map +1 -0
- package/dist/__tests__/gateway-bearer.test.d.ts +12 -0
- package/dist/__tests__/gateway-bearer.test.d.ts.map +1 -0
- package/dist/__tests__/gateway-bearer.test.js +112 -0
- package/dist/__tests__/gateway-bearer.test.js.map +1 -0
- package/dist/__tests__/gateway-key-resolver.test.d.ts +10 -0
- package/dist/__tests__/gateway-key-resolver.test.d.ts.map +1 -0
- package/dist/__tests__/gateway-key-resolver.test.js +125 -0
- package/dist/__tests__/gateway-key-resolver.test.js.map +1 -0
- package/dist/__tests__/http-concurrency.test.d.ts +20 -0
- package/dist/__tests__/http-concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/http-concurrency.test.js +254 -0
- package/dist/__tests__/http-concurrency.test.js.map +1 -0
- package/dist/__tests__/integration/protocol.test.js +14 -8
- package/dist/__tests__/integration/protocol.test.js.map +1 -1
- package/dist/__tests__/mcp-integrations.test.js +20 -30
- package/dist/__tests__/mcp-integrations.test.js.map +1 -1
- package/dist/__tests__/memory-graph-tools.test.js +27 -38
- package/dist/__tests__/memory-graph-tools.test.js.map +1 -1
- package/dist/__tests__/registry-dispatch.test.d.ts +11 -0
- package/dist/__tests__/registry-dispatch.test.d.ts.map +1 -0
- package/dist/__tests__/registry-dispatch.test.js +30 -0
- package/dist/__tests__/registry-dispatch.test.js.map +1 -0
- package/dist/__tests__/registry-listing-parity.test.d.ts +2 -0
- package/dist/__tests__/registry-listing-parity.test.d.ts.map +1 -0
- package/dist/__tests__/registry-listing-parity.test.js +89 -0
- package/dist/__tests__/registry-listing-parity.test.js.map +1 -0
- package/dist/__tests__/role-cap.test.d.ts +2 -0
- package/dist/__tests__/role-cap.test.d.ts.map +1 -0
- package/dist/__tests__/role-cap.test.js +113 -0
- package/dist/__tests__/role-cap.test.js.map +1 -0
- package/dist/__tests__/schedule-tools.test.js +15 -20
- package/dist/__tests__/schedule-tools.test.js.map +1 -1
- package/dist/__tests__/server-gateway-key.test.d.ts +18 -0
- package/dist/__tests__/server-gateway-key.test.d.ts.map +1 -0
- package/dist/__tests__/server-gateway-key.test.js +148 -0
- package/dist/__tests__/server-gateway-key.test.js.map +1 -0
- package/dist/__tests__/server-user-scoped.test.d.ts +34 -0
- package/dist/__tests__/server-user-scoped.test.d.ts.map +1 -0
- package/dist/__tests__/server-user-scoped.test.js +577 -0
- package/dist/__tests__/server-user-scoped.test.js.map +1 -0
- package/dist/__tests__/task-id-pattern.test.d.ts +12 -0
- package/dist/__tests__/task-id-pattern.test.d.ts.map +1 -0
- package/dist/__tests__/task-id-pattern.test.js +43 -0
- package/dist/__tests__/task-id-pattern.test.js.map +1 -0
- package/dist/__tests__/tiers.test.js +152 -56
- package/dist/__tests__/tiers.test.js.map +1 -1
- package/dist/__tests__/tools/hosted-agents.test.d.ts +9 -0
- package/dist/__tests__/tools/hosted-agents.test.d.ts.map +1 -0
- package/dist/__tests__/tools/hosted-agents.test.js +301 -0
- package/dist/__tests__/tools/hosted-agents.test.js.map +1 -0
- package/dist/__tests__/tools/llm-providers.test.d.ts +10 -0
- package/dist/__tests__/tools/llm-providers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/llm-providers.test.js +105 -0
- package/dist/__tests__/tools/llm-providers.test.js.map +1 -0
- package/dist/__tests__/tools/services.test.js +139 -98
- package/dist/__tests__/tools/services.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +24 -15
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/__tests__/transport.test.js +365 -23
- package/dist/__tests__/transport.test.js.map +1 -1
- package/dist/__tests__/validate-credentials.test.d.ts +9 -0
- package/dist/__tests__/validate-credentials.test.d.ts.map +1 -0
- package/dist/__tests__/validate-credentials.test.js +172 -0
- package/dist/__tests__/validate-credentials.test.js.map +1 -0
- package/dist/__tests__/web-eval-tools.test.js +21 -32
- package/dist/__tests__/web-eval-tools.test.js.map +1 -1
- package/dist/__tests__/whoami.test.d.ts +11 -0
- package/dist/__tests__/whoami.test.d.ts.map +1 -0
- package/dist/__tests__/whoami.test.js +194 -0
- package/dist/__tests__/whoami.test.js.map +1 -0
- package/dist/__tests__/workflow-tools.test.js +20 -27
- package/dist/__tests__/workflow-tools.test.js.map +1 -1
- package/dist/__tests__/workloads.test.d.ts +9 -0
- package/dist/__tests__/workloads.test.d.ts.map +1 -0
- package/dist/__tests__/workloads.test.js +169 -0
- package/dist/__tests__/workloads.test.js.map +1 -0
- package/dist/auth/token-verifier.d.ts +11 -6
- package/dist/auth/token-verifier.d.ts.map +1 -1
- package/dist/auth/token-verifier.js +41 -19
- package/dist/auth/token-verifier.js.map +1 -1
- package/dist/connectors/claude-desktop.d.ts.map +1 -1
- package/dist/connectors/claude-desktop.js +3 -2
- package/dist/connectors/claude-desktop.js.map +1 -1
- package/dist/connectors/cursor.d.ts.map +1 -1
- package/dist/connectors/cursor.js +3 -2
- package/dist/connectors/cursor.js.map +1 -1
- package/dist/connectors/setup.d.ts.map +1 -1
- package/dist/connectors/setup.js +2 -1
- package/dist/connectors/setup.js.map +1 -1
- package/dist/connectors/vscode.d.ts.map +1 -1
- package/dist/connectors/vscode.js +3 -2
- package/dist/connectors/vscode.js.map +1 -1
- package/dist/connectors/windsurf.d.ts.map +1 -1
- package/dist/connectors/windsurf.js +3 -2
- package/dist/connectors/windsurf.js.map +1 -1
- package/dist/doctor.d.ts +34 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +134 -0
- package/dist/doctor.js.map +1 -0
- package/dist/http-server.d.ts +24 -3
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +342 -62
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +72 -208
- package/dist/index.js.map +1 -1
- package/dist/lib/consts.d.ts +21 -0
- package/dist/lib/consts.d.ts.map +1 -0
- package/dist/lib/consts.js +30 -0
- package/dist/lib/consts.js.map +1 -0
- package/dist/lib/dobby-client.d.ts +50 -23
- package/dist/lib/dobby-client.d.ts.map +1 -1
- package/dist/lib/dobby-client.js +105 -54
- package/dist/lib/dobby-client.js.map +1 -1
- package/dist/lib/gateway-key-resolver.d.ts +38 -0
- package/dist/lib/gateway-key-resolver.d.ts.map +1 -0
- package/dist/lib/gateway-key-resolver.js +59 -0
- package/dist/lib/gateway-key-resolver.js.map +1 -0
- package/dist/lib/log.d.ts +25 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +36 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/server.d.ts +175 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1017 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/agent-mail.d.ts +0 -41
- package/dist/tools/agent-mail.d.ts.map +1 -1
- package/dist/tools/agent-mail.js +0 -222
- package/dist/tools/agent-mail.js.map +1 -1
- package/dist/tools/agent-versions.d.ts +93 -0
- package/dist/tools/agent-versions.d.ts.map +1 -0
- package/dist/tools/agent-versions.js +99 -0
- package/dist/tools/agent-versions.js.map +1 -0
- package/dist/tools/approvals.d.ts +0 -34
- package/dist/tools/approvals.d.ts.map +1 -1
- package/dist/tools/approvals.js +0 -81
- package/dist/tools/approvals.js.map +1 -1
- package/dist/tools/claude-code-sync.d.ts +40 -0
- package/dist/tools/claude-code-sync.d.ts.map +1 -0
- package/dist/tools/claude-code-sync.js +52 -0
- package/dist/tools/claude-code-sync.js.map +1 -0
- package/dist/tools/control-plane.d.ts +118 -0
- package/dist/tools/control-plane.d.ts.map +1 -0
- package/dist/tools/control-plane.js +135 -0
- package/dist/tools/control-plane.js.map +1 -0
- package/dist/tools/crew-builder.d.ts +0 -66
- package/dist/tools/crew-builder.d.ts.map +1 -1
- package/dist/tools/crew-builder.js +0 -185
- package/dist/tools/crew-builder.js.map +1 -1
- package/dist/tools/crewai.d.ts +0 -63
- package/dist/tools/crewai.d.ts.map +1 -1
- package/dist/tools/crewai.js +0 -145
- package/dist/tools/crewai.js.map +1 -1
- package/dist/tools/exa.d.ts +0 -35
- package/dist/tools/exa.d.ts.map +1 -1
- package/dist/tools/exa.js +0 -103
- package/dist/tools/exa.js.map +1 -1
- package/dist/tools/external-agents.d.ts +440 -0
- package/dist/tools/external-agents.d.ts.map +1 -0
- package/dist/tools/external-agents.js +386 -0
- package/dist/tools/external-agents.js.map +1 -0
- package/dist/tools/github-mcp.d.ts +0 -75
- package/dist/tools/github-mcp.d.ts.map +1 -1
- package/dist/tools/github-mcp.js +0 -162
- package/dist/tools/github-mcp.js.map +1 -1
- package/dist/tools/governance.d.ts +162 -18
- package/dist/tools/governance.d.ts.map +1 -1
- package/dist/tools/governance.js +208 -93
- package/dist/tools/governance.js.map +1 -1
- package/dist/tools/hosted-agents.d.ts +216 -0
- package/dist/tools/hosted-agents.d.ts.map +1 -0
- package/dist/tools/hosted-agents.js +214 -0
- package/dist/tools/hosted-agents.js.map +1 -0
- package/dist/tools/index.d.ts +3933 -1219
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +412 -393
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jira.d.ts +0 -176
- package/dist/tools/jira.d.ts.map +1 -1
- package/dist/tools/jira.js +0 -365
- package/dist/tools/jira.js.map +1 -1
- package/dist/tools/llm-providers.d.ts +50 -0
- package/dist/tools/llm-providers.d.ts.map +1 -0
- package/dist/tools/llm-providers.js +41 -0
- package/dist/tools/llm-providers.js.map +1 -0
- package/dist/tools/mcp-metrics.d.ts +0 -15
- package/dist/tools/mcp-metrics.d.ts.map +1 -1
- package/dist/tools/mcp-metrics.js +0 -217
- package/dist/tools/mcp-metrics.js.map +1 -1
- package/dist/tools/mcp-tools.d.ts +0 -29
- package/dist/tools/mcp-tools.d.ts.map +1 -1
- package/dist/tools/mcp-tools.js +0 -131
- package/dist/tools/mcp-tools.js.map +1 -1
- package/dist/tools/mem0.d.ts +0 -41
- package/dist/tools/mem0.d.ts.map +1 -1
- package/dist/tools/mem0.js +65 -165
- package/dist/tools/mem0.js.map +1 -1
- package/dist/tools/memory-graph.d.ts +0 -46
- package/dist/tools/memory-graph.d.ts.map +1 -1
- package/dist/tools/memory-graph.js +0 -386
- package/dist/tools/memory-graph.js.map +1 -1
- package/dist/tools/memory-stores.d.ts +141 -0
- package/dist/tools/memory-stores.d.ts.map +1 -0
- package/dist/tools/memory-stores.js +147 -0
- package/dist/tools/memory-stores.js.map +1 -0
- package/dist/tools/messages.d.ts +0 -20
- package/dist/tools/messages.d.ts.map +1 -1
- package/dist/tools/messages.js +0 -49
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/moltbook.d.ts +0 -236
- package/dist/tools/moltbook.d.ts.map +1 -1
- package/dist/tools/moltbook.js +0 -458
- package/dist/tools/moltbook.js.map +1 -1
- package/dist/tools/monitoring-attribution.d.ts +71 -0
- package/dist/tools/monitoring-attribution.d.ts.map +1 -0
- package/dist/tools/monitoring-attribution.js +74 -0
- package/dist/tools/monitoring-attribution.js.map +1 -0
- package/dist/tools/ops.d.ts +0 -80
- package/dist/tools/ops.d.ts.map +1 -1
- package/dist/tools/ops.js +0 -209
- package/dist/tools/ops.js.map +1 -1
- package/dist/tools/orchestrations.d.ts +109 -0
- package/dist/tools/orchestrations.d.ts.map +1 -0
- package/dist/tools/orchestrations.js +115 -0
- package/dist/tools/orchestrations.js.map +1 -0
- package/dist/tools/outcomes.d.ts +138 -0
- package/dist/tools/outcomes.d.ts.map +1 -0
- package/dist/tools/outcomes.js +136 -0
- package/dist/tools/outcomes.js.map +1 -0
- package/dist/tools/schedules.d.ts +0 -47
- package/dist/tools/schedules.d.ts.map +1 -1
- package/dist/tools/schedules.js +0 -109
- package/dist/tools/schedules.js.map +1 -1
- package/dist/tools/services.d.ts +0 -16
- package/dist/tools/services.d.ts.map +1 -1
- package/dist/tools/services.js +0 -135
- package/dist/tools/services.js.map +1 -1
- package/dist/tools/sessions.d.ts +124 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +130 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/setup-status.d.ts +29 -0
- package/dist/tools/setup-status.d.ts.map +1 -0
- package/dist/tools/setup-status.js +35 -0
- package/dist/tools/setup-status.js.map +1 -0
- package/dist/tools/tasks.d.ts +0 -57
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +8 -217
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/tiers.d.ts +23 -7
- package/dist/tools/tiers.d.ts.map +1 -1
- package/dist/tools/tiers.js +180 -79
- package/dist/tools/tiers.js.map +1 -1
- package/dist/tools/unified-agents.d.ts +0 -19
- package/dist/tools/unified-agents.d.ts.map +1 -1
- package/dist/tools/unified-agents.js +2 -103
- package/dist/tools/unified-agents.js.map +1 -1
- package/dist/tools/web-eval.d.ts +0 -43
- package/dist/tools/web-eval.d.ts.map +1 -1
- package/dist/tools/web-eval.js +0 -211
- package/dist/tools/web-eval.js.map +1 -1
- package/dist/tools/workflow.d.ts +0 -66
- package/dist/tools/workflow.d.ts.map +1 -1
- package/dist/tools/workflow.js +2 -409
- package/dist/tools/workflow.js.map +1 -1
- package/dist/tools/workloads.d.ts +81 -0
- package/dist/tools/workloads.d.ts.map +1 -0
- package/dist/tools/workloads.js +81 -0
- package/dist/tools/workloads.js.map +1 -0
- package/package.json +7 -6
- package/dist/tools/knowledge-base.d.ts +0 -144
- package/dist/tools/knowledge-base.d.ts.map +0 -1
- package/dist/tools/knowledge-base.js +0 -179
- package/dist/tools/knowledge-base.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression: the task-id input pattern must accept every id the platform
|
|
3
|
+
* actually issues, not just the `task_` shape.
|
|
4
|
+
*
|
|
5
|
+
* The MCP create_task tool posts to /api/dobby/tasks, which generates ids like
|
|
6
|
+
* `task-1784122598603-vjtbfh` (a HYPHEN after "task"). The old input pattern
|
|
7
|
+
* `^task_[a-zA-Z0-9_-]+$` required an UNDERSCORE, so an id returned by
|
|
8
|
+
* create_task failed schema validation on cancel_task / get_task / update_task /
|
|
9
|
+
* get_task_timeline — a task created via MCP could not be acted on via MCP.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=task-id-pattern.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-id-pattern.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/task-id-pattern.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression: the task-id input pattern must accept every id the platform
|
|
3
|
+
* actually issues, not just the `task_` shape.
|
|
4
|
+
*
|
|
5
|
+
* The MCP create_task tool posts to /api/dobby/tasks, which generates ids like
|
|
6
|
+
* `task-1784122598603-vjtbfh` (a HYPHEN after "task"). The old input pattern
|
|
7
|
+
* `^task_[a-zA-Z0-9_-]+$` required an UNDERSCORE, so an id returned by
|
|
8
|
+
* create_task failed schema validation on cancel_task / get_task / update_task /
|
|
9
|
+
* get_task_timeline — a task created via MCP could not be acted on via MCP.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect } from 'vitest';
|
|
12
|
+
import { taskTools } from '../tools/tasks.js';
|
|
13
|
+
const ID_TOOLS = [
|
|
14
|
+
'get_task',
|
|
15
|
+
'update_task',
|
|
16
|
+
'get_task_timeline',
|
|
17
|
+
'cancel_task',
|
|
18
|
+
];
|
|
19
|
+
/** Real ids the platform issues across its several creation paths. */
|
|
20
|
+
const REAL_IDS = [
|
|
21
|
+
'task-1784122598603-vjtbfh', // /api/dobby/tasks (create_task via MCP)
|
|
22
|
+
'task_58296fd3-ac', // legacy underscore form
|
|
23
|
+
'a1b2c3d4-e5f6-7890-abcd-ef1234567890', // bare uuid (/api/v1/tasks)
|
|
24
|
+
];
|
|
25
|
+
const GARBAGE = ['', '../etc/passwd', 'task id', 'a b', '-leading-hyphen'];
|
|
26
|
+
describe('task-id input pattern accepts every issued id format', () => {
|
|
27
|
+
for (const toolName of ID_TOOLS) {
|
|
28
|
+
const pattern = taskTools[toolName].inputSchema.properties.task_id
|
|
29
|
+
.pattern;
|
|
30
|
+
const re = new RegExp(pattern);
|
|
31
|
+
it(`${toolName}: accepts real ids from every creation path`, () => {
|
|
32
|
+
for (const id of REAL_IDS) {
|
|
33
|
+
expect(re.test(id), `${toolName} should accept "${id}"`).toBe(true);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
it(`${toolName}: still rejects garbage / injection-shaped input`, () => {
|
|
37
|
+
for (const bad of GARBAGE) {
|
|
38
|
+
expect(re.test(bad), `${toolName} should reject "${bad}"`).toBe(false);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=task-id-pattern.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-id-pattern.test.js","sourceRoot":"","sources":["../../src/__tests__/task-id-pattern.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,QAAQ,GAAG;IACf,UAAU;IACV,aAAa;IACb,mBAAmB;IACnB,aAAa;CACL,CAAC;AAEX,sEAAsE;AACtE,MAAM,QAAQ,GAAG;IACf,2BAA2B,EAAE,yCAAyC;IACtE,kBAAkB,EAAE,yBAAyB;IAC7C,sCAAsC,EAAE,4BAA4B;CACrE,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AAE3E,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,OAAO,GAAI,SAAiB,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO;aACxE,OAAiB,CAAC;QACrB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/B,EAAE,CAAC,GAAG,QAAQ,6CAA6C,EAAE,GAAG,EAAE;YAChE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,mBAAmB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,GAAG,QAAQ,kDAAkD,EAAE,GAAG,EAAE;YACrE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,QAAQ,mBAAmB,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -3,93 +3,98 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Verifies tier definitions and filtering logic.
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect } from
|
|
7
|
-
import { MVP_TOOLS, PRO_TOOLS, TIER_COUNTS, resolveToolTier, filterToolsByTier, } from
|
|
8
|
-
import { allTools } from
|
|
9
|
-
describe(
|
|
6
|
+
import { describe, it, expect } from "vitest";
|
|
7
|
+
import { MVP_TOOLS, PRO_TOOLS, TIER_COUNTS, resolveToolTier, filterToolsByTier, isReadOnlyScopes, } from "../tools/tiers.js";
|
|
8
|
+
import { allTools, getToolDefinitions, getToolAccessDenial, } from "../tools/index.js";
|
|
9
|
+
describe("Tool Tiers", () => {
|
|
10
10
|
const allToolNames = Object.keys(allTools);
|
|
11
|
-
describe(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
expect(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
describe("tier sizes", () => {
|
|
12
|
+
// Single deliberate tier-review gate: these are the ONLY hardcoded tier
|
|
13
|
+
// counts in the test suite. Adding a tool to MVP_TOOLS/PRO_ADDITIONAL is
|
|
14
|
+
// a conscious tier decision — bump these numbers in the same commit, and
|
|
15
|
+
// sweep docs for the old counts (mcp/CLAUDE.md, web/app/docs/mcp,
|
|
16
|
+
// docs/mcp/*, docs/gateway/*).
|
|
17
|
+
it("MVP tier has 58 tools", () => {
|
|
18
|
+
expect(MVP_TOOLS.length).toBe(58);
|
|
19
|
+
expect(TIER_COUNTS.mvp).toBe(58);
|
|
20
|
+
});
|
|
21
|
+
it("Pro tier has 106 tools", () => {
|
|
22
|
+
expect(PRO_TOOLS.length).toBe(106);
|
|
23
|
+
expect(TIER_COUNTS.pro).toBe(106);
|
|
24
|
+
});
|
|
25
|
+
it("Enterprise tier includes all tools", () => {
|
|
26
|
+
const filtered = filterToolsByTier(allToolNames, "enterprise");
|
|
22
27
|
expect(filtered.length).toBe(allToolNames.length);
|
|
23
28
|
});
|
|
24
29
|
});
|
|
25
|
-
describe(
|
|
26
|
-
it(
|
|
30
|
+
describe("tier hierarchy", () => {
|
|
31
|
+
it("MVP tools are a subset of Pro tools", () => {
|
|
27
32
|
const proSet = new Set(PRO_TOOLS);
|
|
28
33
|
for (const tool of MVP_TOOLS) {
|
|
29
34
|
expect(proSet.has(tool), `MVP tool "${tool}" not in Pro tier`).toBe(true);
|
|
30
35
|
}
|
|
31
36
|
});
|
|
32
|
-
it(
|
|
37
|
+
it("Pro tools are a subset of all tools", () => {
|
|
33
38
|
const allSet = new Set(allToolNames);
|
|
34
39
|
for (const tool of PRO_TOOLS) {
|
|
35
40
|
expect(allSet.has(tool), `Pro tool "${tool}" not in allTools`).toBe(true);
|
|
36
41
|
}
|
|
37
42
|
});
|
|
38
|
-
it(
|
|
43
|
+
it("all MVP tool names exist in allTools", () => {
|
|
39
44
|
const allSet = new Set(allToolNames);
|
|
40
45
|
for (const tool of MVP_TOOLS) {
|
|
41
46
|
expect(allSet.has(tool), `MVP tool "${tool}" not in allTools`).toBe(true);
|
|
42
47
|
}
|
|
43
48
|
});
|
|
44
49
|
});
|
|
45
|
-
describe(
|
|
46
|
-
it(
|
|
50
|
+
describe("no duplicates", () => {
|
|
51
|
+
it("MVP has no duplicate tool names", () => {
|
|
47
52
|
expect(new Set(MVP_TOOLS).size).toBe(MVP_TOOLS.length);
|
|
48
53
|
});
|
|
49
|
-
it(
|
|
54
|
+
it("Pro has no duplicate tool names", () => {
|
|
50
55
|
expect(new Set(PRO_TOOLS).size).toBe(PRO_TOOLS.length);
|
|
51
56
|
});
|
|
52
57
|
});
|
|
53
|
-
describe(
|
|
54
|
-
it(
|
|
55
|
-
expect(resolveToolTier()).toBe(
|
|
56
|
-
expect(resolveToolTier(undefined)).toBe(
|
|
57
|
-
});
|
|
58
|
-
it(
|
|
59
|
-
expect(resolveToolTier({ plan:
|
|
60
|
-
expect(resolveToolTier({ plan:
|
|
61
|
-
expect(resolveToolTier({ plan:
|
|
62
|
-
});
|
|
63
|
-
it(
|
|
64
|
-
expect(resolveToolTier({ scope:
|
|
65
|
-
expect(resolveToolTier({ scope:
|
|
66
|
-
expect(resolveToolTier({ scope:
|
|
67
|
-
expect(resolveToolTier({ scope:
|
|
68
|
-
});
|
|
69
|
-
it(
|
|
70
|
-
expect(resolveToolTier({ scopes: [
|
|
71
|
-
expect(resolveToolTier({ scopes: [
|
|
72
|
-
expect(resolveToolTier({ scopes: [
|
|
73
|
-
});
|
|
74
|
-
it(
|
|
75
|
-
expect(resolveToolTier({ plan:
|
|
58
|
+
describe("resolveToolTier", () => {
|
|
59
|
+
it("returns mvp with no context", () => {
|
|
60
|
+
expect(resolveToolTier()).toBe("mvp");
|
|
61
|
+
expect(resolveToolTier(undefined)).toBe("mvp");
|
|
62
|
+
});
|
|
63
|
+
it("resolves from plan field", () => {
|
|
64
|
+
expect(resolveToolTier({ plan: "enterprise" })).toBe("enterprise");
|
|
65
|
+
expect(resolveToolTier({ plan: "pro" })).toBe("pro");
|
|
66
|
+
expect(resolveToolTier({ plan: "free" })).toBe("mvp");
|
|
67
|
+
});
|
|
68
|
+
it("resolves from scope string", () => {
|
|
69
|
+
expect(resolveToolTier({ scope: "mcp:*" })).toBe("enterprise");
|
|
70
|
+
expect(resolveToolTier({ scope: "mcp:pro" })).toBe("pro");
|
|
71
|
+
expect(resolveToolTier({ scope: "mcp:read" })).toBe("mvp");
|
|
72
|
+
expect(resolveToolTier({ scope: "mcp:execute" })).toBe("mvp");
|
|
73
|
+
});
|
|
74
|
+
it("resolves from scopes array", () => {
|
|
75
|
+
expect(resolveToolTier({ scopes: ["mcp:*", "other"] })).toBe("enterprise");
|
|
76
|
+
expect(resolveToolTier({ scopes: ["mcp:pro"] })).toBe("pro");
|
|
77
|
+
expect(resolveToolTier({ scopes: ["mcp:read"] })).toBe("mvp");
|
|
78
|
+
});
|
|
79
|
+
it("plan takes precedence over scopes", () => {
|
|
80
|
+
expect(resolveToolTier({ plan: "enterprise", scope: "mcp:read" })).toBe("enterprise");
|
|
76
81
|
});
|
|
77
82
|
});
|
|
78
|
-
describe(
|
|
79
|
-
it(
|
|
80
|
-
const result = filterToolsByTier(allToolNames,
|
|
81
|
-
expect(result.length).toBe(
|
|
83
|
+
describe("filterToolsByTier", () => {
|
|
84
|
+
it("mvp returns exactly the MVP allowlist", () => {
|
|
85
|
+
const result = filterToolsByTier(allToolNames, "mvp");
|
|
86
|
+
expect(result.length).toBe(MVP_TOOLS.length);
|
|
82
87
|
});
|
|
83
|
-
it(
|
|
84
|
-
const result = filterToolsByTier(allToolNames,
|
|
85
|
-
expect(result.length).toBe(
|
|
88
|
+
it("pro returns exactly the Pro allowlist", () => {
|
|
89
|
+
const result = filterToolsByTier(allToolNames, "pro");
|
|
90
|
+
expect(result.length).toBe(PRO_TOOLS.length);
|
|
86
91
|
});
|
|
87
|
-
it(
|
|
88
|
-
const result = filterToolsByTier(allToolNames,
|
|
92
|
+
it("enterprise returns all tools", () => {
|
|
93
|
+
const result = filterToolsByTier(allToolNames, "enterprise");
|
|
89
94
|
expect(result.length).toBe(allToolNames.length);
|
|
90
95
|
});
|
|
91
|
-
it(
|
|
92
|
-
const result = filterToolsByTier(allToolNames,
|
|
96
|
+
it("preserves order from input", () => {
|
|
97
|
+
const result = filterToolsByTier(allToolNames, "mvp");
|
|
93
98
|
// All returned tools should be in the same relative order as allToolNames
|
|
94
99
|
let lastIdx = -1;
|
|
95
100
|
for (const name of result) {
|
|
@@ -99,5 +104,96 @@ describe('Tool Tiers', () => {
|
|
|
99
104
|
}
|
|
100
105
|
});
|
|
101
106
|
});
|
|
107
|
+
describe("isReadOnlyScopes", () => {
|
|
108
|
+
// The introspection endpoint emits mcp:read (instead of mcp:execute) for
|
|
109
|
+
// tokens whose every scope ends in :read, alongside the plan tier scope.
|
|
110
|
+
it("mcp:read alone is read-only", () => {
|
|
111
|
+
expect(isReadOnlyScopes(["mcp:read"])).toBe(true);
|
|
112
|
+
});
|
|
113
|
+
it("mcp:read with a tier scope stays read-only (enterprise read-only key)", () => {
|
|
114
|
+
expect(isReadOnlyScopes(["mcp:read", "mcp:*"])).toBe(true);
|
|
115
|
+
expect(isReadOnlyScopes(["mcp:read", "mcp:pro"])).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
it("mcp:execute is not read-only", () => {
|
|
118
|
+
expect(isReadOnlyScopes(["mcp:execute"])).toBe(false);
|
|
119
|
+
expect(isReadOnlyScopes(["mcp:execute", "mcp:*"])).toBe(false);
|
|
120
|
+
});
|
|
121
|
+
it("mcp:read + mcp:execute together is not read-only (legacy OAuth default grant)", () => {
|
|
122
|
+
expect(isReadOnlyScopes(["mcp:read", "mcp:execute"])).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
it("no mcp scopes at all is not read-only (pre-enforcement introspection responses)", () => {
|
|
125
|
+
expect(isReadOnlyScopes([])).toBe(false);
|
|
126
|
+
expect(isReadOnlyScopes(["tasks:read"])).toBe(false);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("getToolDefinitions read-only filtering", () => {
|
|
130
|
+
it("readOnly returns only readOnlyHint-annotated tools", () => {
|
|
131
|
+
const defs = getToolDefinitions("enterprise", { readOnly: true });
|
|
132
|
+
expect(defs.length).toBeGreaterThan(0);
|
|
133
|
+
for (const def of defs) {
|
|
134
|
+
expect(def.annotations?.readOnlyHint, `tool "${def.name}" served to a read-only token without readOnlyHint`).toBe(true);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
it("readOnly composes with tier filtering (subset of the tier list)", () => {
|
|
138
|
+
const mvpNames = new Set(getToolDefinitions("mvp").map((d) => d.name));
|
|
139
|
+
const readOnlyMvp = getToolDefinitions("mvp", { readOnly: true });
|
|
140
|
+
expect(readOnlyMvp.length).toBeGreaterThan(0);
|
|
141
|
+
expect(readOnlyMvp.length).toBeLessThan(mvpNames.size);
|
|
142
|
+
for (const def of readOnlyMvp) {
|
|
143
|
+
expect(mvpNames.has(def.name)).toBe(true);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
it("without readOnly returns the full tier list unchanged", () => {
|
|
147
|
+
expect(getToolDefinitions("mvp").length).toBe(MVP_TOOLS.length);
|
|
148
|
+
// The FULL enterprise catalog is reachable by a superadmin (all tools).
|
|
149
|
+
// A non-superadmin's enterprise set is smaller by the 5 superAdminOnly
|
|
150
|
+
// ops tools (capability-core 0.1.2) — asserted in the sibling test below.
|
|
151
|
+
expect(getToolDefinitions("enterprise", { isSuperAdmin: true }).length).toBe(allToolNames.length);
|
|
152
|
+
});
|
|
153
|
+
it("a normal enterprise principal is missing exactly the 5 superAdminOnly ops tools", () => {
|
|
154
|
+
// capability-core 0.1.2 marks the 5 internal ops tools superAdminOnly, so
|
|
155
|
+
// visibleTo() hides them from every non-superadmin regardless of tier/role.
|
|
156
|
+
const OPS_SUPERADMIN_ONLY = 5;
|
|
157
|
+
expect(getToolDefinitions("enterprise").length).toBe(allToolNames.length - OPS_SUPERADMIN_ONLY);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
describe("getToolAccessDenial (CallTool enforcement)", () => {
|
|
161
|
+
const proOnlyTool = PRO_TOOLS.find((t) => !MVP_TOOLS.includes(t));
|
|
162
|
+
const enterpriseOnlyTool = allToolNames.find((t) => !PRO_TOOLS.includes(t));
|
|
163
|
+
const readOnlyMvpTool = MVP_TOOLS.find((t) => allTools[t]?.annotations?.readOnlyHint === true);
|
|
164
|
+
const writeMvpTool = MVP_TOOLS.find((t) => allTools[t]?.annotations?.readOnlyHint !== true);
|
|
165
|
+
it("allows an in-tier tool", () => {
|
|
166
|
+
expect(getToolAccessDenial(readOnlyMvpTool, { scopes: ["mcp:execute"] })).toBeNull();
|
|
167
|
+
expect(getToolAccessDenial(proOnlyTool, {
|
|
168
|
+
scopes: ["mcp:execute", "mcp:pro"],
|
|
169
|
+
})).toBeNull();
|
|
170
|
+
expect(getToolAccessDenial(enterpriseOnlyTool, {
|
|
171
|
+
scopes: ["mcp:execute", "mcp:*"],
|
|
172
|
+
})).toBeNull();
|
|
173
|
+
});
|
|
174
|
+
it("denies an out-of-tier tool with the required tier named", () => {
|
|
175
|
+
const denial = getToolAccessDenial(proOnlyTool, {
|
|
176
|
+
scopes: ["mcp:execute"],
|
|
177
|
+
});
|
|
178
|
+
expect(denial).toContain(proOnlyTool);
|
|
179
|
+
expect(denial).toContain("pro");
|
|
180
|
+
const entDenial = getToolAccessDenial(enterpriseOnlyTool, {
|
|
181
|
+
scopes: ["mcp:execute", "mcp:pro"],
|
|
182
|
+
});
|
|
183
|
+
expect(entDenial).toContain("enterprise");
|
|
184
|
+
});
|
|
185
|
+
it("denies a write tool for a read-only token — at any tier", () => {
|
|
186
|
+
const denial = getToolAccessDenial(writeMvpTool, {
|
|
187
|
+
scopes: ["mcp:read", "mcp:*"],
|
|
188
|
+
});
|
|
189
|
+
expect(denial).toContain("read-only");
|
|
190
|
+
});
|
|
191
|
+
it("allows a read tool for a read-only token", () => {
|
|
192
|
+
expect(getToolAccessDenial(readOnlyMvpTool, { scopes: ["mcp:read"] })).toBeNull();
|
|
193
|
+
});
|
|
194
|
+
it("returns null for unknown tools (router keeps the canonical Unknown-tool error)", () => {
|
|
195
|
+
expect(getToolAccessDenial("no_such_tool", { scopes: ["mcp:read"] })).toBeNull();
|
|
196
|
+
});
|
|
197
|
+
});
|
|
102
198
|
});
|
|
103
199
|
//# sourceMappingURL=tiers.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiers.test.js","sourceRoot":"","sources":["../../src/__tests__/tiers.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,SAAS,EACT,SAAS,EAET,WAAW,EACX,eAAe,EACf,iBAAiB,
|
|
1
|
+
{"version":3,"file":"tiers.test.js","sourceRoot":"","sources":["../../src/__tests__/tiers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Managed Agents tools — write tools (P0a, one-prompt hosted-agent flow).
|
|
3
|
+
*
|
|
4
|
+
* Dispatch goes through the capability registry (ADR-019); these exercise each
|
|
5
|
+
* handler with a mocked client, asserting the underlying REST call + rendered
|
|
6
|
+
* output + tier/role-cap parity with the mcp/external tool definitions.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=hosted-agents.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hosted-agents.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/tools/hosted-agents.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|