@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
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* dynamic agent mapping, workload monitoring, and assignment rules.
|
|
6
6
|
*/
|
|
7
7
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
8
|
+
import { createRegistry, toMcpResult } from '@dobbyai/capability-core';
|
|
8
9
|
// Mock DobbyClient with request method and tenantId
|
|
9
10
|
const mockClient = {
|
|
10
11
|
apiUrl: 'http://localhost:3000',
|
|
@@ -15,6 +16,10 @@ const mockClient = {
|
|
|
15
16
|
// Mock global fetch
|
|
16
17
|
const mockFetch = vi.fn();
|
|
17
18
|
vi.stubGlobal('fetch', mockFetch);
|
|
19
|
+
// ADR-019: the legacy handle* functions are gone — dispatch goes through the
|
|
20
|
+
// capability registry (handlers are verbatim copies; MCP output byte-identical).
|
|
21
|
+
const registry = createRegistry();
|
|
22
|
+
const callCap = async (id, client, args) => toMcpResult(await registry.get(id).handler({ client: client }, args));
|
|
18
23
|
// ============================================
|
|
19
24
|
// Task Classification (Dynamic Agent Map)
|
|
20
25
|
// ============================================
|
|
@@ -25,8 +30,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
25
30
|
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
26
31
|
});
|
|
27
32
|
it('classifies backend tasks correctly with markdown response', async () => {
|
|
28
|
-
const
|
|
29
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
33
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
30
34
|
title: 'Add new API endpoint for user management',
|
|
31
35
|
description: 'Create FastAPI route with pydantic validation',
|
|
32
36
|
});
|
|
@@ -38,8 +42,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
38
42
|
expect(text).toContain('workflow_auto_assign');
|
|
39
43
|
});
|
|
40
44
|
it('classifies frontend tasks correctly', async () => {
|
|
41
|
-
const
|
|
42
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
45
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
43
46
|
title: 'Fix React component layout issue',
|
|
44
47
|
description: 'Update CSS with Tailwind for mobile responsiveness',
|
|
45
48
|
});
|
|
@@ -48,8 +51,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
48
51
|
expect(text).toContain('**Worker:** dobby-frontend-agent');
|
|
49
52
|
});
|
|
50
53
|
it('classifies security tasks correctly', async () => {
|
|
51
|
-
const
|
|
52
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
54
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
53
55
|
title: 'Fix authentication vulnerability in OAuth flow',
|
|
54
56
|
});
|
|
55
57
|
const text = result.content[0].text;
|
|
@@ -57,8 +59,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
57
59
|
expect(text).toContain('**Worker:** dobby-security-agent');
|
|
58
60
|
});
|
|
59
61
|
it('classifies database tasks correctly', async () => {
|
|
60
|
-
const
|
|
61
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
62
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
62
63
|
title: 'Create BigQuery migration for new table',
|
|
63
64
|
description: 'Add schema with partition by created_at',
|
|
64
65
|
});
|
|
@@ -67,8 +68,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
67
68
|
expect(text).toContain('**Worker:** dobby-database-agent');
|
|
68
69
|
});
|
|
69
70
|
it('classifies testing tasks to QA lead coordinator', async () => {
|
|
70
|
-
const
|
|
71
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
71
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
72
72
|
title: 'Add pytest coverage for auth module',
|
|
73
73
|
description: 'Write vitest mock fixtures and e2e spec',
|
|
74
74
|
});
|
|
@@ -78,8 +78,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
78
78
|
expect(text).toContain('**Worker:** dobby-test-writer-agent');
|
|
79
79
|
});
|
|
80
80
|
it('defaults to backend for unrecognized tasks', async () => {
|
|
81
|
-
const
|
|
82
|
-
const result = await handleWorkflowClassifyTask(mockClient, {
|
|
81
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
83
82
|
title: 'Do something very generic',
|
|
84
83
|
description: 'This has no specific keywords at all',
|
|
85
84
|
});
|
|
@@ -88,7 +87,6 @@ describe('Workflow: Task Classification', () => {
|
|
|
88
87
|
expect(text).toContain('**Confidence:** 30%');
|
|
89
88
|
});
|
|
90
89
|
it('uses dynamic agent map from API when available', async () => {
|
|
91
|
-
const { handleWorkflowClassifyTask } = await import('../tools/workflow.js');
|
|
92
90
|
mockClient.request.mockResolvedValueOnce({
|
|
93
91
|
data: {
|
|
94
92
|
agents: [
|
|
@@ -97,7 +95,7 @@ describe('Workflow: Task Classification', () => {
|
|
|
97
95
|
],
|
|
98
96
|
},
|
|
99
97
|
});
|
|
100
|
-
const result = await
|
|
98
|
+
const result = await callCap('workflow_classify_task', mockClient, {
|
|
101
99
|
title: 'Add new API endpoint for user management',
|
|
102
100
|
});
|
|
103
101
|
const text = result.content[0].text;
|
|
@@ -115,7 +113,6 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
115
113
|
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
116
114
|
});
|
|
117
115
|
it('calls API and returns markdown assignment result', async () => {
|
|
118
|
-
const { handleWorkflowAutoAssign } = await import('../tools/workflow.js');
|
|
119
116
|
// Health check call + auto-assign API call — both succeed
|
|
120
117
|
mockFetch
|
|
121
118
|
.mockResolvedValueOnce({
|
|
@@ -130,7 +127,7 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
130
127
|
assigned_worker: 'dobby-backend-agent',
|
|
131
128
|
}),
|
|
132
129
|
});
|
|
133
|
-
const result = await
|
|
130
|
+
const result = await callCap('workflow_auto_assign', mockClient, {
|
|
134
131
|
task_id: 'task_abc123',
|
|
135
132
|
title: 'Add API endpoint',
|
|
136
133
|
});
|
|
@@ -139,10 +136,9 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
139
136
|
expect(text).toContain('**Status:** assigned');
|
|
140
137
|
});
|
|
141
138
|
it('returns local classification as fallback when API unavailable', async () => {
|
|
142
|
-
const { handleWorkflowAutoAssign } = await import('../tools/workflow.js');
|
|
143
139
|
// All fetch calls fail (health check + auto-assign API)
|
|
144
140
|
mockFetch.mockRejectedValue(new Error('Connection refused'));
|
|
145
|
-
const result = await
|
|
141
|
+
const result = await callCap('workflow_auto_assign', mockClient, {
|
|
146
142
|
task_id: 'task_abc123',
|
|
147
143
|
title: 'Fix security vulnerability in authentication',
|
|
148
144
|
});
|
|
@@ -153,7 +149,6 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
153
149
|
expect(text).toContain('**Worker:** dobby-security-agent');
|
|
154
150
|
});
|
|
155
151
|
it('shows health warning when agent is paused', async () => {
|
|
156
|
-
const { handleWorkflowAutoAssign } = await import('../tools/workflow.js');
|
|
157
152
|
// Health check returns paused status
|
|
158
153
|
mockFetch
|
|
159
154
|
.mockResolvedValueOnce({
|
|
@@ -165,7 +160,7 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
165
160
|
ok: true,
|
|
166
161
|
json: () => Promise.resolve({ task_id: 'task_abc123', assigned: true }),
|
|
167
162
|
});
|
|
168
|
-
const result = await
|
|
163
|
+
const result = await callCap('workflow_auto_assign', mockClient, {
|
|
169
164
|
task_id: 'task_abc123',
|
|
170
165
|
title: 'Add API endpoint for backend',
|
|
171
166
|
});
|
|
@@ -174,7 +169,6 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
174
169
|
expect(text).toContain('paused');
|
|
175
170
|
});
|
|
176
171
|
it('returns error when API returns non-ok response', async () => {
|
|
177
|
-
const { handleWorkflowAutoAssign } = await import('../tools/workflow.js');
|
|
178
172
|
// Health check fails (no problem)
|
|
179
173
|
mockFetch
|
|
180
174
|
.mockRejectedValueOnce(new Error('Health unavailable'))
|
|
@@ -184,7 +178,7 @@ describe('Workflow: Auto-Assign', () => {
|
|
|
184
178
|
status: 404,
|
|
185
179
|
text: () => Promise.resolve('Task not found'),
|
|
186
180
|
});
|
|
187
|
-
const result = await
|
|
181
|
+
const result = await callCap('workflow_auto_assign', mockClient, {
|
|
188
182
|
task_id: 'task_nonexistent',
|
|
189
183
|
title: 'Some task',
|
|
190
184
|
});
|
|
@@ -203,7 +197,6 @@ describe('Workflow: Agent Workload', () => {
|
|
|
203
197
|
mockClient.request.mockRejectedValue(new Error('Connection refused'));
|
|
204
198
|
});
|
|
205
199
|
it('returns workload data from API', async () => {
|
|
206
|
-
const { handleWorkflowAgentWorkload } = await import('../tools/workflow.js');
|
|
207
200
|
mockFetch.mockResolvedValueOnce({
|
|
208
201
|
ok: true,
|
|
209
202
|
json: () => Promise.resolve({
|
|
@@ -213,14 +206,13 @@ describe('Workflow: Agent Workload', () => {
|
|
|
213
206
|
],
|
|
214
207
|
}),
|
|
215
208
|
});
|
|
216
|
-
const result = await
|
|
209
|
+
const result = await callCap('workflow_agent_workload', mockClient, {});
|
|
217
210
|
const data = JSON.parse(result.content[0].text);
|
|
218
211
|
expect(data.agents).toHaveLength(2);
|
|
219
212
|
});
|
|
220
213
|
it('returns dynamic agent hierarchy as fallback when API unavailable', async () => {
|
|
221
|
-
const { handleWorkflowAgentWorkload } = await import('../tools/workflow.js');
|
|
222
214
|
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
223
|
-
const result = await
|
|
215
|
+
const result = await callCap('workflow_agent_workload', mockClient, {});
|
|
224
216
|
const data = JSON.parse(result.content[0].text);
|
|
225
217
|
expect(data.note).toContain('Could not reach Dobby API');
|
|
226
218
|
expect(data.agents).toBeDefined();
|
|
@@ -236,7 +228,8 @@ describe('Workflow: Input Validation', () => {
|
|
|
236
228
|
it('auto_assign task_id has pattern validation', async () => {
|
|
237
229
|
const { workflowTools } = await import('../tools/workflow.js');
|
|
238
230
|
const autoAssignSchema = workflowTools.workflow_auto_assign.inputSchema;
|
|
239
|
-
|
|
231
|
+
// Accepts every id the platform issues (task-…, task_…, bare uuid), not just task_…
|
|
232
|
+
expect(autoAssignSchema.properties.task_id.pattern).toBe('^[a-zA-Z0-9][a-zA-Z0-9_-]*$');
|
|
240
233
|
});
|
|
241
234
|
});
|
|
242
235
|
// ============================================
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/workflow-tools.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/workflow-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workload tools — list_workloads / create_workload.
|
|
3
|
+
*
|
|
4
|
+
* Dispatch goes through the capability registry (ADR-019); these exercise the
|
|
5
|
+
* handlers with a mocked client, asserting the /api/v1/workloads contract
|
|
6
|
+
* (X-API-Key path via client.get/post) and the rendered output.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=workloads.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workloads.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/workloads.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workload tools — list_workloads / create_workload.
|
|
3
|
+
*
|
|
4
|
+
* Dispatch goes through the capability registry (ADR-019); these exercise the
|
|
5
|
+
* handlers with a mocked client, asserting the /api/v1/workloads contract
|
|
6
|
+
* (X-API-Key path via client.get/post) and the rendered output.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
9
|
+
import { createRegistry, toMcpResult } from '@dobbyai/capability-core';
|
|
10
|
+
import { workloadTools } from '../tools/workloads.js';
|
|
11
|
+
const mockClient = {
|
|
12
|
+
apiUrl: 'http://localhost:3000',
|
|
13
|
+
apiKey: 'sk_live_test',
|
|
14
|
+
tenantId: 'tenant_test',
|
|
15
|
+
get: vi.fn(),
|
|
16
|
+
post: vi.fn(),
|
|
17
|
+
};
|
|
18
|
+
const registry = createRegistry();
|
|
19
|
+
const callCap = async (id, client, args) => toMcpResult(await registry.get(id).handler({ client: client }, args));
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
vi.resetAllMocks();
|
|
22
|
+
});
|
|
23
|
+
describe('workloadTools — definitions', () => {
|
|
24
|
+
it('exposes list_workloads (read-only) and create_workload (write)', () => {
|
|
25
|
+
expect(workloadTools.list_workloads.annotations.readOnlyHint).toBe(true);
|
|
26
|
+
expect(workloadTools.create_workload.annotations.readOnlyHint).toBe(false);
|
|
27
|
+
expect(workloadTools.create_workload.inputSchema.required).toContain('display_name');
|
|
28
|
+
});
|
|
29
|
+
it('exposes try_sample_workload (write, no inputs)', () => {
|
|
30
|
+
expect(workloadTools.try_sample_workload.annotations.readOnlyHint).toBe(false);
|
|
31
|
+
expect(workloadTools.try_sample_workload.inputSchema.properties).toEqual({});
|
|
32
|
+
});
|
|
33
|
+
it('are registered as dispatchable capabilities', () => {
|
|
34
|
+
expect(registry.get('list_workloads')).toBeTruthy();
|
|
35
|
+
expect(registry.get('create_workload')).toBeTruthy();
|
|
36
|
+
expect(registry.get('try_sample_workload')).toBeTruthy();
|
|
37
|
+
});
|
|
38
|
+
it('try_sample_workload is admin-gated and matches the listing def', () => {
|
|
39
|
+
const cap = registry.get('try_sample_workload');
|
|
40
|
+
expect(cap.minRole).toBe('tenant_admin');
|
|
41
|
+
expect(cap.tier).toBe('mvp');
|
|
42
|
+
expect(cap.readOnly).toBe(false);
|
|
43
|
+
// The listing def (mcp/external) must stay byte-identical to the capability.
|
|
44
|
+
expect(cap.description).toBe(workloadTools.try_sample_workload.description);
|
|
45
|
+
expect(cap.annotations).toEqual(workloadTools.try_sample_workload.annotations);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('try_sample_workload', () => {
|
|
49
|
+
it('POSTs to the tenant try-sample route and renders the seeded verdicts', async () => {
|
|
50
|
+
mockClient.request = vi.fn().mockResolvedValue({
|
|
51
|
+
connector_id: 'wc_sample123',
|
|
52
|
+
reused: false,
|
|
53
|
+
runs_created: 3,
|
|
54
|
+
total_violations: 1,
|
|
55
|
+
scans: [
|
|
56
|
+
{ run_id: 'wr_sample_le123_compliant', status: 'completed', overall_status: 'compliant', violations: 0 },
|
|
57
|
+
{ run_id: 'wr_sample_le123_violated', status: 'completed', overall_status: 'violated', violations: 1 },
|
|
58
|
+
{ run_id: 'wr_sample_le123_unverifiable', status: 'completed', overall_status: 'unverifiable', violations: 0 },
|
|
59
|
+
],
|
|
60
|
+
next_url: '/tenant_test/dashboard/compliance',
|
|
61
|
+
});
|
|
62
|
+
const r = await callCap('try_sample_workload', mockClient, {});
|
|
63
|
+
expect(mockClient.request).toHaveBeenCalledWith('/api/v1/tenants/tenant_test/workloads/try-sample', { method: 'POST' });
|
|
64
|
+
const text = r.content[0].text;
|
|
65
|
+
expect(text).toContain('Sample workload seeded');
|
|
66
|
+
expect(text).toContain('compliant');
|
|
67
|
+
expect(text).toContain('violated');
|
|
68
|
+
expect(text).toContain('unverifiable');
|
|
69
|
+
expect(text).toContain('1 violation');
|
|
70
|
+
expect(text).toContain('wc_sample123');
|
|
71
|
+
expect(text).toContain('get_setup_status');
|
|
72
|
+
});
|
|
73
|
+
it('notes when the sample connector was reused (idempotent re-run)', async () => {
|
|
74
|
+
mockClient.request = vi.fn().mockResolvedValue({
|
|
75
|
+
connector_id: 'wc_sample123',
|
|
76
|
+
reused: true,
|
|
77
|
+
runs_created: 3,
|
|
78
|
+
total_violations: 1,
|
|
79
|
+
scans: [],
|
|
80
|
+
});
|
|
81
|
+
const r = await callCap('try_sample_workload', mockClient, {});
|
|
82
|
+
expect(r.content[0].text).toContain('reused');
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('list_workloads', () => {
|
|
86
|
+
it('renders workloads + the stats rollup and hits GET /api/v1/workloads', async () => {
|
|
87
|
+
mockClient.get.mockResolvedValue({
|
|
88
|
+
workloads: [
|
|
89
|
+
{
|
|
90
|
+
workload_key: 'wc_1::w1',
|
|
91
|
+
connector_id: 'wc_1',
|
|
92
|
+
workload_name: 'INTC Forecaster',
|
|
93
|
+
platform: 'crewai_cloud',
|
|
94
|
+
connector_display_name: 'CrewAI Cloud',
|
|
95
|
+
total_runs: 5,
|
|
96
|
+
runs_24h: 2,
|
|
97
|
+
last_run_status: 'completed',
|
|
98
|
+
last_scan_status: 'compliant',
|
|
99
|
+
last_scan_violations: 0,
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
stats: {
|
|
103
|
+
total_workloads: 1,
|
|
104
|
+
compliant: 1,
|
|
105
|
+
with_open_violations: 0,
|
|
106
|
+
unverifiable: 0,
|
|
107
|
+
unscanned: 0,
|
|
108
|
+
},
|
|
109
|
+
count: 1,
|
|
110
|
+
});
|
|
111
|
+
const r = await callCap('list_workloads', mockClient, {});
|
|
112
|
+
expect(mockClient.get).toHaveBeenCalledWith('/api/v1/workloads');
|
|
113
|
+
const text = r.content[0].text;
|
|
114
|
+
expect(text).toContain('INTC Forecaster');
|
|
115
|
+
expect(text).toContain('crewai_cloud');
|
|
116
|
+
expect(text).toContain('compliant');
|
|
117
|
+
expect(text).toContain('workload_key: wc_1::w1');
|
|
118
|
+
});
|
|
119
|
+
it('empty tenant → a helpful message pointing at create_workload', async () => {
|
|
120
|
+
mockClient.get.mockResolvedValue({ workloads: [], stats: {}, count: 0 });
|
|
121
|
+
const r = await callCap('list_workloads', mockClient, {});
|
|
122
|
+
expect(r.content[0].text).toContain('No workloads found');
|
|
123
|
+
expect(r.content[0].text).toContain('create_workload');
|
|
124
|
+
});
|
|
125
|
+
it('forwards the limit as a query param', async () => {
|
|
126
|
+
mockClient.get.mockResolvedValue({ workloads: [], stats: {} });
|
|
127
|
+
await callCap('list_workloads', mockClient, { limit: 10 });
|
|
128
|
+
expect(mockClient.get).toHaveBeenCalledWith('/api/v1/workloads?limit=10');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe('create_workload', () => {
|
|
132
|
+
it('POSTs display_name and surfaces the minted collector token ONCE', async () => {
|
|
133
|
+
mockClient.post.mockResolvedValue({
|
|
134
|
+
success: true,
|
|
135
|
+
workload: {
|
|
136
|
+
id: 'wc_abc123',
|
|
137
|
+
display_name: 'INTC Forecaster',
|
|
138
|
+
platform: 'dobby_sdk',
|
|
139
|
+
status: 'pending_setup',
|
|
140
|
+
},
|
|
141
|
+
bearer_token: 'dsdk_deadbeefcafe',
|
|
142
|
+
message: 'Workload created.',
|
|
143
|
+
});
|
|
144
|
+
const r = await callCap('create_workload', mockClient, {
|
|
145
|
+
display_name: 'INTC Forecaster',
|
|
146
|
+
});
|
|
147
|
+
expect(mockClient.post).toHaveBeenCalledWith('/api/v1/workloads', {
|
|
148
|
+
display_name: 'INTC Forecaster',
|
|
149
|
+
});
|
|
150
|
+
const text = r.content[0].text;
|
|
151
|
+
expect(text).toContain('wc_abc123');
|
|
152
|
+
expect(text).toContain('dsdk_deadbeefcafe');
|
|
153
|
+
expect(text).toContain('ONCE');
|
|
154
|
+
});
|
|
155
|
+
it('forwards platform + bearer_token for a non-dobby_sdk source', async () => {
|
|
156
|
+
mockClient.post.mockResolvedValue({ workload: { id: 'wc_x' } });
|
|
157
|
+
await callCap('create_workload', mockClient, {
|
|
158
|
+
display_name: 'X',
|
|
159
|
+
platform: 'crewai_cloud',
|
|
160
|
+
bearer_token: 'upstream_tok',
|
|
161
|
+
});
|
|
162
|
+
expect(mockClient.post).toHaveBeenCalledWith('/api/v1/workloads', {
|
|
163
|
+
display_name: 'X',
|
|
164
|
+
platform: 'crewai_cloud',
|
|
165
|
+
bearer_token: 'upstream_tok',
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=workloads.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workloads.test.js","sourceRoot":"","sources":["../../src/__tests__/workloads.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Token Verifier
|
|
3
3
|
*
|
|
4
|
-
* Validates OAuth access tokens
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Validates Bearer tokens (OAuth access tokens dobby_at_* and gateway keys
|
|
5
|
+
* gk_*) by calling the web app's introspection endpoint
|
|
6
|
+
* (POST {issuer}/oauth/token/introspect, RFC 7662). Results are cached
|
|
7
|
+
* locally with 60s TTL to avoid per-request latency.
|
|
7
8
|
*/
|
|
8
|
-
import { AuthInfo } from
|
|
9
|
+
import { AuthInfo } from "@modelcontextprotocol/sdk/server/auth/types.js";
|
|
9
10
|
export interface TokenInfo {
|
|
10
11
|
user_id: string;
|
|
11
|
-
org_id: string;
|
|
12
|
-
tenant_id: string;
|
|
12
|
+
org_id: string | null;
|
|
13
|
+
tenant_id: string | null;
|
|
13
14
|
scope: string;
|
|
14
15
|
client_id: string;
|
|
15
16
|
expires_at?: number;
|
|
17
|
+
tenant_role?: string;
|
|
18
|
+
org_role?: string;
|
|
19
|
+
is_super_admin?: boolean;
|
|
20
|
+
user_scoped?: boolean;
|
|
16
21
|
}
|
|
17
22
|
export declare class TokenVerifier {
|
|
18
23
|
private cache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-verifier.d.ts","sourceRoot":"","sources":["../../src/auth/token-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"token-verifier.d.ts","sourceRoot":"","sources":["../../src/auth/token-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAU1E,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IAIzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyDD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAK7B;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyCzD;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIlD;;OAEG;YACW,cAAc;IAoE5B,0CAA0C;IAC1C,UAAU,IAAI,IAAI;IAIlB,sCAAsC;IACtC,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Token Verifier
|
|
3
3
|
*
|
|
4
|
-
* Validates OAuth access tokens
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Validates Bearer tokens (OAuth access tokens dobby_at_* and gateway keys
|
|
5
|
+
* gk_*) by calling the web app's introspection endpoint
|
|
6
|
+
* (POST {issuer}/oauth/token/introspect, RFC 7662). Results are cached
|
|
7
|
+
* locally with 60s TTL to avoid per-request latency.
|
|
7
8
|
*/
|
|
9
|
+
import { InvalidTokenError, ServerError, } from "@modelcontextprotocol/sdk/server/auth/errors.js";
|
|
8
10
|
// ============================================
|
|
9
11
|
// LRU Cache
|
|
10
12
|
// ============================================
|
|
@@ -50,7 +52,7 @@ export class TokenVerifier {
|
|
|
50
52
|
issuerUrl;
|
|
51
53
|
constructor(issuerUrl) {
|
|
52
54
|
// Remove trailing slash
|
|
53
|
-
this.issuerUrl = issuerUrl.replace(/\/$/,
|
|
55
|
+
this.issuerUrl = issuerUrl.replace(/\/$/, "");
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
58
|
* Verify an access token and return AuthInfo for the MCP SDK.
|
|
@@ -67,12 +69,21 @@ export class TokenVerifier {
|
|
|
67
69
|
const authInfo = {
|
|
68
70
|
token,
|
|
69
71
|
clientId: tokenInfo.client_id,
|
|
70
|
-
scopes: tokenInfo.scope ? tokenInfo.scope.split(
|
|
72
|
+
scopes: tokenInfo.scope ? tokenInfo.scope.split(" ") : [],
|
|
71
73
|
expiresAt: tokenInfo.expires_at,
|
|
72
74
|
extra: {
|
|
73
75
|
user_id: tokenInfo.user_id,
|
|
74
76
|
org_id: tokenInfo.org_id,
|
|
75
77
|
tenant_id: tokenInfo.tenant_id,
|
|
78
|
+
// RBAC role signal (ADR-019 Phase 2) — read by ListTools/CallTool
|
|
79
|
+
// enforcement for plan-tier ∩ role-cap. For a user-scoped PAT these are
|
|
80
|
+
// the AGGREGATE role (ADR-020), so aggregate ListTools flows through the
|
|
81
|
+
// SAME plumbing with no ListTools change.
|
|
82
|
+
tenant_role: tokenInfo.tenant_role,
|
|
83
|
+
org_role: tokenInfo.org_role,
|
|
84
|
+
is_super_admin: tokenInfo.is_super_admin,
|
|
85
|
+
// ADR-020 — CallTool reads this to switch to per-call tenant resolution.
|
|
86
|
+
user_scoped: tokenInfo.user_scoped,
|
|
76
87
|
},
|
|
77
88
|
};
|
|
78
89
|
// Cache the result
|
|
@@ -96,34 +107,45 @@ export class TokenVerifier {
|
|
|
96
107
|
async validateRemote(token) {
|
|
97
108
|
const url = `${this.issuerUrl}/oauth/token/introspect`;
|
|
98
109
|
const response = await fetch(url, {
|
|
99
|
-
method:
|
|
110
|
+
method: "POST",
|
|
100
111
|
headers: {
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
"Content-Type": "application/json",
|
|
113
|
+
Authorization: `Bearer ${token}`,
|
|
103
114
|
},
|
|
104
115
|
body: JSON.stringify({ token }),
|
|
105
116
|
});
|
|
117
|
+
// Error classes matter: requireBearerAuth maps InvalidTokenError → 401
|
|
118
|
+
// (clients re-authenticate) and ServerError → 500. Plain Errors also
|
|
119
|
+
// surface as 500, which breaks the OAuth refresh flow for merely
|
|
120
|
+
// expired tokens.
|
|
106
121
|
if (!response.ok) {
|
|
107
122
|
const status = response.status;
|
|
108
123
|
if (status === 401 || status === 403) {
|
|
109
|
-
throw new
|
|
124
|
+
throw new InvalidTokenError("Invalid or expired access token");
|
|
110
125
|
}
|
|
111
|
-
throw new
|
|
126
|
+
throw new ServerError(`Token validation failed (${status})`);
|
|
112
127
|
}
|
|
113
|
-
const data = await response.json();
|
|
128
|
+
const data = (await response.json());
|
|
114
129
|
if (!data.active) {
|
|
115
|
-
throw new
|
|
130
|
+
throw new InvalidTokenError("Invalid or expired access token");
|
|
116
131
|
}
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
// A user-scoped PAT (ADR-020) legitimately carries NO tenant/org pin — the
|
|
133
|
+
// role fields are its AGGREGATE RBAC and the tenant is resolved per call.
|
|
134
|
+
// Every other family MUST be tenant-bound (the historical remote-MCP rule).
|
|
135
|
+
if (!data.user_scoped && (!data.org_id || !data.tenant_id)) {
|
|
136
|
+
throw new InvalidTokenError("Token is not bound to a tenant — remote MCP requires a tenant-scoped token or gateway key");
|
|
119
137
|
}
|
|
120
138
|
return {
|
|
121
|
-
user_id: data.user_id ||
|
|
122
|
-
org_id: data.org_id,
|
|
123
|
-
tenant_id: data.tenant_id,
|
|
124
|
-
scope: data.scope ||
|
|
125
|
-
client_id: data.client_id ||
|
|
139
|
+
user_id: data.user_id || "",
|
|
140
|
+
org_id: data.org_id ?? null,
|
|
141
|
+
tenant_id: data.tenant_id ?? null,
|
|
142
|
+
scope: data.scope || "",
|
|
143
|
+
client_id: data.client_id || "",
|
|
126
144
|
expires_at: data.exp,
|
|
145
|
+
tenant_role: data.tenant_role,
|
|
146
|
+
org_role: data.org_role,
|
|
147
|
+
is_super_admin: data.is_super_admin ?? false,
|
|
148
|
+
user_scoped: data.user_scoped ?? false,
|
|
127
149
|
};
|
|
128
150
|
}
|
|
129
151
|
/** Clear the token cache (for testing) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-verifier.js","sourceRoot":"","sources":["../../src/auth/token-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"token-verifier.js","sourceRoot":"","sources":["../../src/auth/token-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/connectors/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/connectors/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,GAAG,EAAE;gBACH,aAAa,EAAE,MAAM,CAAC;gBACtB,aAAa,EAAE,MAAM,CAAC;gBACtB,eAAe,EAAE,MAAM,CAAC;aACzB,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,mBAAmB,CActB;AAMD,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAkClB;AAMD,wBAAgB,uBAAuB,IAAI,GAAG,GAAG,IAAI,CAYpD"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Generates and installs configuration for Claude Desktop.
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'fs';
|
|
7
|
+
import { DEFAULT_API_URL } from '../lib/consts.js';
|
|
7
8
|
import * as path from 'path';
|
|
8
9
|
import * as os from 'os';
|
|
9
10
|
// ============================================
|
|
@@ -95,7 +96,7 @@ const isMain = process.argv[1]?.includes('claude-desktop');
|
|
|
95
96
|
if (isMain) {
|
|
96
97
|
const args = process.argv.slice(2);
|
|
97
98
|
if (args.includes('--setup')) {
|
|
98
|
-
const apiUrl = process.env.DOBBY_API_URL ||
|
|
99
|
+
const apiUrl = process.env.DOBBY_API_URL || DEFAULT_API_URL;
|
|
99
100
|
const apiKey = process.env.DOBBY_API_KEY;
|
|
100
101
|
const tenantId = process.env.DOBBY_TENANT_ID;
|
|
101
102
|
if (!apiKey || !tenantId) {
|
|
@@ -116,7 +117,7 @@ if (isMain) {
|
|
|
116
117
|
}
|
|
117
118
|
else if (args.includes('--show')) {
|
|
118
119
|
const config = generateClaudeDesktopConfig({
|
|
119
|
-
apiUrl: process.env.DOBBY_API_URL ||
|
|
120
|
+
apiUrl: process.env.DOBBY_API_URL || DEFAULT_API_URL,
|
|
120
121
|
apiKey: process.env.DOBBY_API_KEY || '<YOUR_API_KEY>',
|
|
121
122
|
tenantId: process.env.DOBBY_TENANT_ID || '<YOUR_TENANT_ID>',
|
|
122
123
|
});
|