@dobbyai/mcp-external 1.0.4 → 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.d.ts +8 -0
- package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
- package/dist/__tests__/agent-mail-tools.test.js +255 -0
- package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
- package/dist/__tests__/annotations.test.d.ts +8 -0
- package/dist/__tests__/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/annotations.test.js +108 -0
- package/dist/__tests__/annotations.test.js.map +1 -0
- package/dist/__tests__/auth.test.d.ts +7 -0
- package/dist/__tests__/auth.test.d.ts.map +1 -0
- package/dist/__tests__/auth.test.js +161 -0
- package/dist/__tests__/auth.test.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
- package/dist/__tests__/integration/protocol.test.js +110 -0
- package/dist/__tests__/integration/protocol.test.js.map +1 -0
- package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
- package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-integrations.test.js +365 -0
- package/dist/__tests__/mcp-integrations.test.js.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
- package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
- package/dist/__tests__/memory-graph-tools.test.js +254 -0
- package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
- package/dist/__tests__/schedule-tools.test.js +285 -0
- package/dist/__tests__/schedule-tools.test.js.map +1 -0
- 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.d.ts +7 -0
- package/dist/__tests__/tiers.test.d.ts.map +1 -0
- package/dist/__tests__/tiers.test.js +199 -0
- package/dist/__tests__/tiers.test.js.map +1 -0
- 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.d.ts +7 -0
- package/dist/__tests__/tools.test.d.ts.map +1 -0
- package/dist/__tests__/tools.test.js +152 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/__tests__/transport.test.d.ts +7 -0
- package/dist/__tests__/transport.test.d.ts.map +1 -0
- package/dist/__tests__/transport.test.js +397 -0
- package/dist/__tests__/transport.test.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
- package/dist/__tests__/web-eval-tools.test.js +241 -0
- package/dist/__tests__/web-eval-tools.test.js.map +1 -0
- 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.d.ts +8 -0
- package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
- package/dist/__tests__/workflow-tools.test.js +261 -0
- package/dist/__tests__/workflow-tools.test.js.map +1 -0
- 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/oauth-provider.d.ts +34 -0
- package/dist/auth/oauth-provider.d.ts.map +1 -0
- package/dist/auth/oauth-provider.js +75 -0
- package/dist/auth/oauth-provider.js.map +1 -0
- package/dist/auth/token-verifier.d.ts +45 -0
- package/dist/auth/token-verifier.d.ts.map +1 -0
- package/dist/auth/token-verifier.js +160 -0
- package/dist/auth/token-verifier.js.map +1 -0
- 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 +56 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +455 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +96 -171
- 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 +60 -3
- package/dist/lib/dobby-client.d.ts.map +1 -1
- package/dist/lib/dobby-client.js +145 -44
- 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 +112 -0
- package/dist/tools/agent-mail.d.ts.map +1 -0
- package/dist/tools/agent-mail.js +118 -0
- package/dist/tools/agent-mail.js.map +1 -0
- 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 +24 -34
- package/dist/tools/approvals.d.ts.map +1 -1
- package/dist/tools/approvals.js +24 -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 +24 -66
- package/dist/tools/crew-builder.d.ts.map +1 -1
- package/dist/tools/crew-builder.js +24 -185
- package/dist/tools/crew-builder.js.map +1 -1
- package/dist/tools/crewai.d.ts +24 -63
- package/dist/tools/crewai.d.ts.map +1 -1
- package/dist/tools/crewai.js +24 -145
- package/dist/tools/crewai.js.map +1 -1
- package/dist/tools/exa.d.ts +126 -0
- package/dist/tools/exa.d.ts.map +1 -0
- package/dist/tools/exa.js +125 -0
- package/dist/tools/exa.js.map +1 -0
- 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 +228 -0
- package/dist/tools/github-mcp.d.ts.map +1 -0
- package/dist/tools/github-mcp.js +235 -0
- package/dist/tools/github-mcp.js.map +1 -0
- package/dist/tools/governance.d.ts +273 -0
- package/dist/tools/governance.d.ts.map +1 -0
- package/dist/tools/governance.js +286 -0
- package/dist/tools/governance.js.map +1 -0
- 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 +6335 -191
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +441 -172
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/jira.d.ts +60 -176
- package/dist/tools/jira.d.ts.map +1 -1
- package/dist/tools/jira.js +60 -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 +47 -0
- package/dist/tools/mcp-metrics.d.ts.map +1 -0
- package/dist/tools/mcp-metrics.js +53 -0
- package/dist/tools/mcp-metrics.js.map +1 -0
- package/dist/tools/mcp-tools.d.ts +12 -29
- package/dist/tools/mcp-tools.d.ts.map +1 -1
- package/dist/tools/mcp-tools.js +12 -131
- package/dist/tools/mcp-tools.js.map +1 -1
- package/dist/tools/mem0.d.ts +127 -0
- package/dist/tools/mem0.d.ts.map +1 -0
- package/dist/tools/mem0.js +155 -0
- package/dist/tools/mem0.js.map +1 -0
- package/dist/tools/memory-graph.d.ts +151 -0
- package/dist/tools/memory-graph.d.ts.map +1 -0
- package/dist/tools/memory-graph.js +159 -0
- package/dist/tools/memory-graph.js.map +1 -0
- 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 +12 -20
- package/dist/tools/messages.d.ts.map +1 -1
- package/dist/tools/messages.js +12 -49
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/moltbook.d.ts +328 -0
- package/dist/tools/moltbook.d.ts.map +1 -0
- package/dist/tools/moltbook.js +334 -0
- package/dist/tools/moltbook.js.map +1 -0
- 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 +139 -0
- package/dist/tools/ops.d.ts.map +1 -0
- package/dist/tools/ops.js +151 -0
- package/dist/tools/ops.js.map +1 -0
- 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 +149 -0
- package/dist/tools/schedules.d.ts.map +1 -0
- package/dist/tools/schedules.js +155 -0
- package/dist/tools/schedules.js.map +1 -0
- package/dist/tools/services.d.ts +6 -16
- package/dist/tools/services.d.ts.map +1 -1
- package/dist/tools/services.js +6 -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 +44 -56
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +48 -212
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/tiers.d.ts +55 -0
- package/dist/tools/tiers.d.ts.map +1 -0
- package/dist/tools/tiers.js +239 -0
- package/dist/tools/tiers.js.map +1 -0
- package/dist/tools/unified-agents.d.ts +43 -0
- package/dist/tools/unified-agents.d.ts.map +1 -0
- package/dist/tools/unified-agents.js +46 -0
- package/dist/tools/unified-agents.js.map +1 -0
- package/dist/tools/web-eval.d.ts +129 -0
- package/dist/tools/web-eval.d.ts.map +1 -0
- package/dist/tools/web-eval.js +136 -0
- package/dist/tools/web-eval.js.map +1 -0
- package/dist/tools/workflow.d.ts +105 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +111 -0
- package/dist/tools/workflow.js.map +1 -0
- 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 +13 -7
package/dist/tools/tasks.js
CHANGED
|
@@ -10,6 +10,12 @@ export const taskTools = {
|
|
|
10
10
|
// Create a new task
|
|
11
11
|
create_task: {
|
|
12
12
|
name: 'create_task',
|
|
13
|
+
annotations: {
|
|
14
|
+
title: 'Create Task',
|
|
15
|
+
readOnlyHint: false,
|
|
16
|
+
destructiveHint: true,
|
|
17
|
+
openWorldHint: false,
|
|
18
|
+
},
|
|
13
19
|
description: 'Create a new task in Dobby for the AI agents to work on',
|
|
14
20
|
inputSchema: {
|
|
15
21
|
type: 'object',
|
|
@@ -38,6 +44,12 @@ export const taskTools = {
|
|
|
38
44
|
// List tasks
|
|
39
45
|
list_tasks: {
|
|
40
46
|
name: 'list_tasks',
|
|
47
|
+
annotations: {
|
|
48
|
+
title: 'List Tasks',
|
|
49
|
+
readOnlyHint: true,
|
|
50
|
+
destructiveHint: false,
|
|
51
|
+
openWorldHint: false,
|
|
52
|
+
},
|
|
41
53
|
description: 'List tasks from Dobby with optional filters',
|
|
42
54
|
inputSchema: {
|
|
43
55
|
type: 'object',
|
|
@@ -52,6 +64,10 @@ export const taskTools = {
|
|
|
52
64
|
enum: ['high', 'medium', 'low'],
|
|
53
65
|
description: 'Filter by priority',
|
|
54
66
|
},
|
|
67
|
+
assigned_to: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
description: 'Filter tasks by assigned agent name (e.g., "dobby-backend-agent")',
|
|
70
|
+
},
|
|
55
71
|
limit: {
|
|
56
72
|
type: 'number',
|
|
57
73
|
description: 'Maximum number of tasks to return (default: 20)',
|
|
@@ -62,13 +78,20 @@ export const taskTools = {
|
|
|
62
78
|
// Get single task
|
|
63
79
|
get_task: {
|
|
64
80
|
name: 'get_task',
|
|
81
|
+
annotations: {
|
|
82
|
+
title: 'Get Task',
|
|
83
|
+
readOnlyHint: true,
|
|
84
|
+
destructiveHint: false,
|
|
85
|
+
openWorldHint: false,
|
|
86
|
+
},
|
|
65
87
|
description: 'Get detailed information about a specific task',
|
|
66
88
|
inputSchema: {
|
|
67
89
|
type: 'object',
|
|
68
90
|
properties: {
|
|
69
91
|
task_id: {
|
|
70
92
|
type: 'string',
|
|
71
|
-
description: 'The task ID to retrieve',
|
|
93
|
+
description: 'The task ID to retrieve (as returned by create_task or list_tasks, e.g. task-1784122598603-abc123)',
|
|
94
|
+
pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]*$',
|
|
72
95
|
},
|
|
73
96
|
},
|
|
74
97
|
required: ['task_id'],
|
|
@@ -77,13 +100,20 @@ export const taskTools = {
|
|
|
77
100
|
// Update task
|
|
78
101
|
update_task: {
|
|
79
102
|
name: 'update_task',
|
|
103
|
+
annotations: {
|
|
104
|
+
title: 'Update Task',
|
|
105
|
+
readOnlyHint: false,
|
|
106
|
+
destructiveHint: true,
|
|
107
|
+
openWorldHint: false,
|
|
108
|
+
},
|
|
80
109
|
description: 'Update a task status or priority',
|
|
81
110
|
inputSchema: {
|
|
82
111
|
type: 'object',
|
|
83
112
|
properties: {
|
|
84
113
|
task_id: {
|
|
85
114
|
type: 'string',
|
|
86
|
-
description: 'The task ID to update',
|
|
115
|
+
description: 'The task ID to update (as returned by create_task or list_tasks, e.g. task-1784122598603-abc123)',
|
|
116
|
+
pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]*$',
|
|
87
117
|
},
|
|
88
118
|
status: {
|
|
89
119
|
type: 'string',
|
|
@@ -102,13 +132,20 @@ export const taskTools = {
|
|
|
102
132
|
// Get task timeline (activity feed)
|
|
103
133
|
get_task_timeline: {
|
|
104
134
|
name: 'get_task_timeline',
|
|
135
|
+
annotations: {
|
|
136
|
+
title: 'Get Task Timeline',
|
|
137
|
+
readOnlyHint: true,
|
|
138
|
+
destructiveHint: false,
|
|
139
|
+
openWorldHint: false,
|
|
140
|
+
},
|
|
105
141
|
description: 'Get the activity timeline for a task (agent events, status changes, approvals)',
|
|
106
142
|
inputSchema: {
|
|
107
143
|
type: 'object',
|
|
108
144
|
properties: {
|
|
109
145
|
task_id: {
|
|
110
146
|
type: 'string',
|
|
111
|
-
description: 'The task ID to get timeline for',
|
|
147
|
+
description: 'The task ID to get timeline for (as returned by create_task or list_tasks, e.g. task-1784122598603-abc123)',
|
|
148
|
+
pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]*$',
|
|
112
149
|
},
|
|
113
150
|
},
|
|
114
151
|
required: ['task_id'],
|
|
@@ -117,13 +154,20 @@ export const taskTools = {
|
|
|
117
154
|
// Cancel task execution
|
|
118
155
|
cancel_task: {
|
|
119
156
|
name: 'cancel_task',
|
|
157
|
+
annotations: {
|
|
158
|
+
title: 'Cancel Task',
|
|
159
|
+
readOnlyHint: false,
|
|
160
|
+
destructiveHint: true,
|
|
161
|
+
openWorldHint: false,
|
|
162
|
+
},
|
|
120
163
|
description: 'Cancel a running task execution',
|
|
121
164
|
inputSchema: {
|
|
122
165
|
type: 'object',
|
|
123
166
|
properties: {
|
|
124
167
|
task_id: {
|
|
125
168
|
type: 'string',
|
|
126
|
-
description: 'The task ID to cancel',
|
|
169
|
+
description: 'The task ID to cancel (as returned by create_task or list_tasks, e.g. task-1784122598603-abc123)',
|
|
170
|
+
pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]*$',
|
|
127
171
|
},
|
|
128
172
|
},
|
|
129
173
|
required: ['task_id'],
|
|
@@ -133,212 +177,4 @@ export const taskTools = {
|
|
|
133
177
|
// ============================================
|
|
134
178
|
// Tool Handlers
|
|
135
179
|
// ============================================
|
|
136
|
-
export async function handleCreateTask(client, args) {
|
|
137
|
-
const result = await client.createTask({
|
|
138
|
-
title: args.title,
|
|
139
|
-
description: args.description,
|
|
140
|
-
priority: args.priority || 'medium',
|
|
141
|
-
link_to_task_id: args.link_to_task_id,
|
|
142
|
-
});
|
|
143
|
-
return {
|
|
144
|
-
content: [
|
|
145
|
-
{
|
|
146
|
-
type: 'text',
|
|
147
|
-
text: `✅ Task created successfully!\n\nTask ID: ${result.task_id}\nTitle: ${args.title}\nPriority: ${args.priority || 'medium'}\n\nThe task has been added to the queue. AI agents will start working on it soon.`,
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
export async function handleListTasks(client, args) {
|
|
153
|
-
const tasks = await client.listTasks({
|
|
154
|
-
status: args.status === 'all' ? undefined : args.status,
|
|
155
|
-
priority: args.priority,
|
|
156
|
-
limit: args.limit || 20,
|
|
157
|
-
});
|
|
158
|
-
if (tasks.length === 0) {
|
|
159
|
-
return {
|
|
160
|
-
content: [
|
|
161
|
-
{
|
|
162
|
-
type: 'text',
|
|
163
|
-
text: 'No tasks found matching the criteria.',
|
|
164
|
-
},
|
|
165
|
-
],
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
const taskList = tasks
|
|
169
|
-
.map((task, i) => {
|
|
170
|
-
const statusEmoji = {
|
|
171
|
-
pending: '⏳',
|
|
172
|
-
in_progress: '🔄',
|
|
173
|
-
completed: '✅',
|
|
174
|
-
failed: '❌',
|
|
175
|
-
cancelled: '🚫',
|
|
176
|
-
}[task.status] || '❓';
|
|
177
|
-
const priorityEmoji = {
|
|
178
|
-
high: '🔴',
|
|
179
|
-
medium: '🟡',
|
|
180
|
-
low: '🟢',
|
|
181
|
-
}[task.priority || 'medium'] || '';
|
|
182
|
-
return `${i + 1}. ${statusEmoji} ${priorityEmoji} **${task.title}**\n ID: \`${task.task_id}\`\n Status: ${task.status}${task.pr_url ? `\n PR: ${task.pr_url}` : ''}`;
|
|
183
|
-
})
|
|
184
|
-
.join('\n\n');
|
|
185
|
-
return {
|
|
186
|
-
content: [
|
|
187
|
-
{
|
|
188
|
-
type: 'text',
|
|
189
|
-
text: `Found ${tasks.length} task(s):\n\n${taskList}`,
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
export async function handleGetTask(client, args) {
|
|
195
|
-
const task = await client.getTask(args.task_id);
|
|
196
|
-
if (!task) {
|
|
197
|
-
return {
|
|
198
|
-
content: [
|
|
199
|
-
{
|
|
200
|
-
type: 'text',
|
|
201
|
-
text: `❌ Task not found: ${args.task_id}`,
|
|
202
|
-
},
|
|
203
|
-
],
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
const statusEmoji = {
|
|
207
|
-
pending: '⏳',
|
|
208
|
-
in_progress: '🔄',
|
|
209
|
-
completed: '✅',
|
|
210
|
-
failed: '❌',
|
|
211
|
-
cancelled: '🚫',
|
|
212
|
-
}[task.status] || '❓';
|
|
213
|
-
let details = `# ${statusEmoji} ${task.title}\n\n`;
|
|
214
|
-
details += `**Task ID:** \`${task.task_id}\`\n`;
|
|
215
|
-
details += `**Status:** ${task.status}\n`;
|
|
216
|
-
details += `**Priority:** ${task.priority || 'medium'}\n`;
|
|
217
|
-
details += `**Created:** ${task.created_at}\n`;
|
|
218
|
-
details += `**Updated:** ${task.updated_at}\n`;
|
|
219
|
-
if (task.description) {
|
|
220
|
-
details += `\n## Description\n${task.description}\n`;
|
|
221
|
-
}
|
|
222
|
-
if (task.pr_url) {
|
|
223
|
-
details += `\n## Pull Request\n${task.pr_url}\n`;
|
|
224
|
-
}
|
|
225
|
-
if (task.branch_name) {
|
|
226
|
-
details += `**Branch:** ${task.branch_name}\n`;
|
|
227
|
-
}
|
|
228
|
-
if (task.result_summary) {
|
|
229
|
-
details += `\n## Result Summary\n${task.result_summary}\n`;
|
|
230
|
-
}
|
|
231
|
-
return {
|
|
232
|
-
content: [
|
|
233
|
-
{
|
|
234
|
-
type: 'text',
|
|
235
|
-
text: details,
|
|
236
|
-
},
|
|
237
|
-
],
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
export async function handleUpdateTask(client, args) {
|
|
241
|
-
await client.updateTask(args.task_id, {
|
|
242
|
-
status: args.status,
|
|
243
|
-
priority: args.priority,
|
|
244
|
-
});
|
|
245
|
-
const updates = [];
|
|
246
|
-
if (args.status)
|
|
247
|
-
updates.push(`Status → ${args.status}`);
|
|
248
|
-
if (args.priority)
|
|
249
|
-
updates.push(`Priority → ${args.priority}`);
|
|
250
|
-
return {
|
|
251
|
-
content: [
|
|
252
|
-
{
|
|
253
|
-
type: 'text',
|
|
254
|
-
text: `✅ Task ${args.task_id} updated:\n${updates.join('\n')}`,
|
|
255
|
-
},
|
|
256
|
-
],
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
export async function handleGetTaskTimeline(client, args) {
|
|
260
|
-
const timeline = await client.getTaskTimeline(args.task_id);
|
|
261
|
-
if (timeline.length === 0) {
|
|
262
|
-
return {
|
|
263
|
-
content: [
|
|
264
|
-
{
|
|
265
|
-
type: 'text',
|
|
266
|
-
text: `No timeline events found for task ${args.task_id}`,
|
|
267
|
-
},
|
|
268
|
-
],
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
const eventEmojis = {
|
|
272
|
-
'task_created': '🆕',
|
|
273
|
-
'status_changed': '🔄',
|
|
274
|
-
'plan_created': '📋',
|
|
275
|
-
'subtask_started': '▶️',
|
|
276
|
-
'subtask_completed': '✅',
|
|
277
|
-
'code_generated': '💻',
|
|
278
|
-
'frontend_code_generated': '🎨',
|
|
279
|
-
'tests_run': '🧪',
|
|
280
|
-
'pr_created': '📝',
|
|
281
|
-
'pr_merged': '🔀',
|
|
282
|
-
'approval_requested': '⏳',
|
|
283
|
-
'approval_approved': '✅',
|
|
284
|
-
'approval_rejected': '❌',
|
|
285
|
-
'agent_continuation_triggered': '🚀',
|
|
286
|
-
'continuation_after_approval_completed': '🎉',
|
|
287
|
-
'agent_retry_triggered': '🔁',
|
|
288
|
-
'retry_after_rejection_completed': '✨',
|
|
289
|
-
'execution_cancelled': '🛑',
|
|
290
|
-
};
|
|
291
|
-
const timelineText = timeline
|
|
292
|
-
.slice(0, 20) // Limit to last 20 events
|
|
293
|
-
.map((event) => {
|
|
294
|
-
const emoji = eventEmojis[event.event_type] || '📌';
|
|
295
|
-
const time = new Date(event.created_at).toLocaleString();
|
|
296
|
-
const agent = event.agent_name ? ` (${event.agent_name})` : '';
|
|
297
|
-
let details = '';
|
|
298
|
-
if (event.details && typeof event.details === 'object') {
|
|
299
|
-
const d = event.details;
|
|
300
|
-
if (d.new_status)
|
|
301
|
-
details = ` → ${d.new_status}`;
|
|
302
|
-
if (d.pr_number)
|
|
303
|
-
details = ` PR #${d.pr_number}`;
|
|
304
|
-
if (d.error)
|
|
305
|
-
details = ` Error: ${d.error}`;
|
|
306
|
-
if (d.feedback)
|
|
307
|
-
details = ` Feedback: "${d.feedback.slice(0, 50)}..."`;
|
|
308
|
-
}
|
|
309
|
-
return `${emoji} **${event.event_type.replace(/_/g, ' ')}**${agent}${details}\n ${time}`;
|
|
310
|
-
})
|
|
311
|
-
.join('\n\n');
|
|
312
|
-
return {
|
|
313
|
-
content: [
|
|
314
|
-
{
|
|
315
|
-
type: 'text',
|
|
316
|
-
text: `# 📊 Timeline for Task ${args.task_id}\n\n${timelineText}`,
|
|
317
|
-
},
|
|
318
|
-
],
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
export async function handleCancelTask(client, args) {
|
|
322
|
-
const result = await client.cancelTaskExecution(args.task_id);
|
|
323
|
-
if (result.success) {
|
|
324
|
-
return {
|
|
325
|
-
content: [
|
|
326
|
-
{
|
|
327
|
-
type: 'text',
|
|
328
|
-
text: `🛑 Task ${args.task_id} execution cancelled successfully.\n\nThe task status has been reverted to pending.`,
|
|
329
|
-
},
|
|
330
|
-
],
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
else {
|
|
334
|
-
return {
|
|
335
|
-
content: [
|
|
336
|
-
{
|
|
337
|
-
type: 'text',
|
|
338
|
-
text: `⚠️ Could not cancel task ${args.task_id}.\n\n${result.message || 'Task may not be running or was already completed.'}`,
|
|
339
|
-
},
|
|
340
|
-
],
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
180
|
//# sourceMappingURL=tasks.js.map
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Tier Filtering System
|
|
3
|
+
*
|
|
4
|
+
* Defines which tools are available at each subscription tier.
|
|
5
|
+
* MVP — works immediately after OAuth, no extra setup.
|
|
6
|
+
* Pro — adds integrations requiring customer API keys.
|
|
7
|
+
* Enterprise — everything, including tools absent from both allowlists below.
|
|
8
|
+
*
|
|
9
|
+
* Tier ↔ Plan mapping (Gil, 2026-07-12 — enforced end-to-end):
|
|
10
|
+
* Free / Trial → mvp (scope: mcp:read or mcp:execute)
|
|
11
|
+
* Pro / Team → pro (scope: mcp:pro)
|
|
12
|
+
* Enterprise → enterprise (all tools, scope: mcp:*)
|
|
13
|
+
*
|
|
14
|
+
* The org's PLAN determines the tier for every token family; the token's own
|
|
15
|
+
* scopes only decide read vs execute. The web introspection endpoint
|
|
16
|
+
* (web/app/oauth/token/introspect) derives the effective scope; this module
|
|
17
|
+
* resolves it back to a tier + read-only flag for ListTools/CallTool
|
|
18
|
+
* enforcement in HTTP mode.
|
|
19
|
+
*
|
|
20
|
+
* Exact tier counts are pinned in ONE place — src/__tests__/tiers.test.ts
|
|
21
|
+
* ("tier sizes") — so adding a tool here is a deliberate, test-gated decision.
|
|
22
|
+
*/
|
|
23
|
+
/** MVP tier: core platform tools that work without extra integration setup */
|
|
24
|
+
export declare const MVP_TOOLS: readonly string[];
|
|
25
|
+
export declare const PRO_TOOLS: readonly string[];
|
|
26
|
+
export type ToolTier = "mvp" | "pro" | "enterprise";
|
|
27
|
+
export declare const TOOL_TIERS: Record<ToolTier, readonly string[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the tool tier from an auth context.
|
|
30
|
+
* Checks scopes in order of precedence (enterprise > pro > mvp).
|
|
31
|
+
* Defaults to 'mvp' if no matching scope found.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveToolTier(authContext?: {
|
|
34
|
+
scope?: string;
|
|
35
|
+
scopes?: string[];
|
|
36
|
+
plan?: string;
|
|
37
|
+
}): ToolTier;
|
|
38
|
+
/**
|
|
39
|
+
* Read-only access: the introspection endpoint emits `mcp:read` (instead of
|
|
40
|
+
* `mcp:execute`) for tokens whose every scope ends in `:read`, alongside the
|
|
41
|
+
* plan tier scope (`mcp:pro` / `mcp:*`). Read-only tokens are limited to
|
|
42
|
+
* tools annotated readOnlyHint — on ListTools AND CallTool.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isReadOnlyScopes(scopes: string[]): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Filter tools by tier. Enterprise tier returns all tools.
|
|
47
|
+
* For mvp/pro, returns only tools in that tier's allowlist.
|
|
48
|
+
*/
|
|
49
|
+
export declare function filterToolsByTier(allToolNames: string[], tier: ToolTier): string[];
|
|
50
|
+
/** Tier counts for verification */
|
|
51
|
+
export declare const TIER_COUNTS: {
|
|
52
|
+
readonly mvp: number;
|
|
53
|
+
readonly pro: number;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=tiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/tools/tiers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,8EAA8E;AAC9E,eAAO,MAAM,SAAS,EAAE,SAAS,MAAM,EAoF7B,CAAC;AAmEX,eAAO,MAAM,SAAS,EAAE,SAAS,MAAM,EAAsC,CAAC;AAM9E,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC;AAEpD,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAI1D,CAAC;AAaF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,QAAQ,CAkBX;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,EAAE,QAAQ,GACb,MAAM,EAAE,CAIV;AAED,mCAAmC;AACnC,eAAO,MAAM,WAAW;;;CAGd,CAAC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Tier Filtering System
|
|
3
|
+
*
|
|
4
|
+
* Defines which tools are available at each subscription tier.
|
|
5
|
+
* MVP — works immediately after OAuth, no extra setup.
|
|
6
|
+
* Pro — adds integrations requiring customer API keys.
|
|
7
|
+
* Enterprise — everything, including tools absent from both allowlists below.
|
|
8
|
+
*
|
|
9
|
+
* Tier ↔ Plan mapping (Gil, 2026-07-12 — enforced end-to-end):
|
|
10
|
+
* Free / Trial → mvp (scope: mcp:read or mcp:execute)
|
|
11
|
+
* Pro / Team → pro (scope: mcp:pro)
|
|
12
|
+
* Enterprise → enterprise (all tools, scope: mcp:*)
|
|
13
|
+
*
|
|
14
|
+
* The org's PLAN determines the tier for every token family; the token's own
|
|
15
|
+
* scopes only decide read vs execute. The web introspection endpoint
|
|
16
|
+
* (web/app/oauth/token/introspect) derives the effective scope; this module
|
|
17
|
+
* resolves it back to a tier + read-only flag for ListTools/CallTool
|
|
18
|
+
* enforcement in HTTP mode.
|
|
19
|
+
*
|
|
20
|
+
* Exact tier counts are pinned in ONE place — src/__tests__/tiers.test.ts
|
|
21
|
+
* ("tier sizes") — so adding a tool here is a deliberate, test-gated decision.
|
|
22
|
+
*/
|
|
23
|
+
// ============================================
|
|
24
|
+
// Tier Definitions
|
|
25
|
+
// ============================================
|
|
26
|
+
/** MVP tier: core platform tools that work without extra integration setup */
|
|
27
|
+
export const MVP_TOOLS = [
|
|
28
|
+
// Tasks (6)
|
|
29
|
+
"create_task",
|
|
30
|
+
"list_tasks",
|
|
31
|
+
"get_task",
|
|
32
|
+
"update_task",
|
|
33
|
+
"get_task_timeline",
|
|
34
|
+
"cancel_task",
|
|
35
|
+
// Messages (2)
|
|
36
|
+
"get_messages",
|
|
37
|
+
"send_message",
|
|
38
|
+
// Approvals — HITL (4)
|
|
39
|
+
"get_pending_approvals",
|
|
40
|
+
"approve_task",
|
|
41
|
+
"reject_task",
|
|
42
|
+
"request_changes",
|
|
43
|
+
// Agent Ops (4)
|
|
44
|
+
"list_all_agents",
|
|
45
|
+
"workflow_classify_task",
|
|
46
|
+
"workflow_auto_assign",
|
|
47
|
+
"workflow_agent_workload",
|
|
48
|
+
// Schedules (4)
|
|
49
|
+
"create_schedule",
|
|
50
|
+
"list_schedules",
|
|
51
|
+
"pause_schedule",
|
|
52
|
+
"delete_schedule",
|
|
53
|
+
// Sessions (4)
|
|
54
|
+
"session_list",
|
|
55
|
+
"session_detail",
|
|
56
|
+
"session_create",
|
|
57
|
+
"session_events",
|
|
58
|
+
// Discovery (2)
|
|
59
|
+
"list_services",
|
|
60
|
+
"mcp_connection_info",
|
|
61
|
+
// Workloads (3)
|
|
62
|
+
"list_workloads",
|
|
63
|
+
"create_workload",
|
|
64
|
+
"try_sample_workload",
|
|
65
|
+
// Control Plane (3)
|
|
66
|
+
"list_cp_reports",
|
|
67
|
+
"run_cp_scan",
|
|
68
|
+
"get_cp_config",
|
|
69
|
+
// Monitoring Attribution (2)
|
|
70
|
+
"get_run_attribution",
|
|
71
|
+
"get_monitoring_coverage",
|
|
72
|
+
// Setup Status (1)
|
|
73
|
+
"get_setup_status",
|
|
74
|
+
// Claude Code Sync (1)
|
|
75
|
+
"sync_claude_code_agents",
|
|
76
|
+
// Memory Stores — read (2)
|
|
77
|
+
"memory_store_list",
|
|
78
|
+
"memory_store_search",
|
|
79
|
+
// Agent Versioning — read (2)
|
|
80
|
+
"agent_version_list",
|
|
81
|
+
"agent_version_diff",
|
|
82
|
+
// Orchestration — read (2)
|
|
83
|
+
"orchestration_config_list",
|
|
84
|
+
"orchestration_threads",
|
|
85
|
+
// Outcomes — read (2)
|
|
86
|
+
"rubric_list",
|
|
87
|
+
"outcome_status",
|
|
88
|
+
// External Agents — read (3)
|
|
89
|
+
"list_external_agents",
|
|
90
|
+
"get_external_agent",
|
|
91
|
+
"get_agent_costs",
|
|
92
|
+
// Managed Agents — one-prompt hosted-agent flow write tools (6, Gil-decided
|
|
93
|
+
// mvp tier 2026-07-16: visibility for entitled design partners on free/pro
|
|
94
|
+
// plans — the hosted_agents allowlist stays the real gate, honest 403 +
|
|
95
|
+
// telemetry fallback for tenants not entitled)
|
|
96
|
+
"host_sample_agent",
|
|
97
|
+
"create_hosted_agent",
|
|
98
|
+
"deploy_hosted_agent",
|
|
99
|
+
"run_hosted_agent",
|
|
100
|
+
"get_agent_results",
|
|
101
|
+
"delete_hosted_agent",
|
|
102
|
+
// Governance — single-policy CRUD + dry-run (5, 2026-07-21: mvp tier, not
|
|
103
|
+
// enterprise like their import/export/apply_guardrail siblings — the
|
|
104
|
+
// underlying routes have no plan gate, so this mirrors the dashboard's
|
|
105
|
+
// un-gated behavior)
|
|
106
|
+
"create_policy",
|
|
107
|
+
"list_policies",
|
|
108
|
+
"update_policy",
|
|
109
|
+
"delete_policy",
|
|
110
|
+
"test_policy",
|
|
111
|
+
];
|
|
112
|
+
/** Pro tier additions: Jira + GitHub + CrewAI + Knowledge + Memory write + Versioning + Orchestration + Outcomes + External Agents */
|
|
113
|
+
const PRO_ADDITIONAL = [
|
|
114
|
+
// Audit integrity (1) — tamper-evident seal verification (design §10.4)
|
|
115
|
+
"verify_audit_seal",
|
|
116
|
+
// Data handling (1) — per-tenant PII storage mode posture (design §6.2, P7)
|
|
117
|
+
"get_data_handling",
|
|
118
|
+
// Jira (10)
|
|
119
|
+
"jira_search_issues",
|
|
120
|
+
"jira_get_issue",
|
|
121
|
+
"jira_create_issue",
|
|
122
|
+
"jira_update_issue",
|
|
123
|
+
"jira_add_comment",
|
|
124
|
+
"jira_get_comments",
|
|
125
|
+
"jira_get_transitions",
|
|
126
|
+
"jira_transition_issue",
|
|
127
|
+
"jira_list_projects",
|
|
128
|
+
"jira_assign_issue",
|
|
129
|
+
// GitHub (7)
|
|
130
|
+
"github_search_code",
|
|
131
|
+
"github_get_file",
|
|
132
|
+
"github_create_pr",
|
|
133
|
+
"github_list_prs",
|
|
134
|
+
"github_list_issues",
|
|
135
|
+
"github_create_issue",
|
|
136
|
+
"github_get_workflow_runs",
|
|
137
|
+
// CrewAI Platform (4)
|
|
138
|
+
"crewai_health",
|
|
139
|
+
"crewai_inputs",
|
|
140
|
+
"crewai_kickoff",
|
|
141
|
+
"crewai_status",
|
|
142
|
+
// CrewAI Builder (4)
|
|
143
|
+
"crew_validate",
|
|
144
|
+
"crew_kickoff",
|
|
145
|
+
"crew_status",
|
|
146
|
+
"crew_list",
|
|
147
|
+
// Knowledge Base (3)
|
|
148
|
+
"mem0_search",
|
|
149
|
+
"mem0_list",
|
|
150
|
+
"exa_web_search",
|
|
151
|
+
// Memory Stores — write (3)
|
|
152
|
+
"memory_store_read",
|
|
153
|
+
"memory_store_write",
|
|
154
|
+
"memory_store_delete",
|
|
155
|
+
// Agent Versioning — write (1)
|
|
156
|
+
"agent_version_rollback",
|
|
157
|
+
// Orchestration — write (2)
|
|
158
|
+
"orchestration_start",
|
|
159
|
+
"orchestration_thread_message",
|
|
160
|
+
// Outcomes — write (2)
|
|
161
|
+
"rubric_create",
|
|
162
|
+
"outcome_define",
|
|
163
|
+
// External Agents — manage + trigger (9)
|
|
164
|
+
"register_external_agent",
|
|
165
|
+
"update_external_agent",
|
|
166
|
+
"deregister_external_agent",
|
|
167
|
+
"trigger_external_agent",
|
|
168
|
+
"retry_external_agent_trigger",
|
|
169
|
+
"get_agent_triggers",
|
|
170
|
+
"create_agent_schedule",
|
|
171
|
+
"update_agent_schedule",
|
|
172
|
+
"delete_agent_schedule",
|
|
173
|
+
// LLM Providers — connect (1)
|
|
174
|
+
"connect_llm_provider",
|
|
175
|
+
];
|
|
176
|
+
export const PRO_TOOLS = [...MVP_TOOLS, ...PRO_ADDITIONAL];
|
|
177
|
+
export const TOOL_TIERS = {
|
|
178
|
+
mvp: MVP_TOOLS,
|
|
179
|
+
pro: PRO_TOOLS,
|
|
180
|
+
enterprise: [], // populated dynamically from allTools keys
|
|
181
|
+
};
|
|
182
|
+
// ============================================
|
|
183
|
+
// Scope → Tier Mapping
|
|
184
|
+
// ============================================
|
|
185
|
+
const SCOPE_TO_TIER = {
|
|
186
|
+
"mcp:read": "mvp",
|
|
187
|
+
"mcp:execute": "mvp",
|
|
188
|
+
"mcp:pro": "pro",
|
|
189
|
+
"mcp:*": "enterprise",
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Resolve the tool tier from an auth context.
|
|
193
|
+
* Checks scopes in order of precedence (enterprise > pro > mvp).
|
|
194
|
+
* Defaults to 'mvp' if no matching scope found.
|
|
195
|
+
*/
|
|
196
|
+
export function resolveToolTier(authContext) {
|
|
197
|
+
if (!authContext)
|
|
198
|
+
return "mvp";
|
|
199
|
+
// Check plan directly
|
|
200
|
+
if (authContext.plan === "enterprise")
|
|
201
|
+
return "enterprise";
|
|
202
|
+
if (authContext.plan === "pro")
|
|
203
|
+
return "pro";
|
|
204
|
+
// Check scopes
|
|
205
|
+
const scopes = authContext.scopes ||
|
|
206
|
+
(authContext.scope ? authContext.scope.split(" ") : []);
|
|
207
|
+
if (scopes.includes("mcp:*"))
|
|
208
|
+
return "enterprise";
|
|
209
|
+
if (scopes.includes("mcp:pro"))
|
|
210
|
+
return "pro";
|
|
211
|
+
if (scopes.includes("mcp:execute") || scopes.includes("mcp:read"))
|
|
212
|
+
return "mvp";
|
|
213
|
+
return "mvp";
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Read-only access: the introspection endpoint emits `mcp:read` (instead of
|
|
217
|
+
* `mcp:execute`) for tokens whose every scope ends in `:read`, alongside the
|
|
218
|
+
* plan tier scope (`mcp:pro` / `mcp:*`). Read-only tokens are limited to
|
|
219
|
+
* tools annotated readOnlyHint — on ListTools AND CallTool.
|
|
220
|
+
*/
|
|
221
|
+
export function isReadOnlyScopes(scopes) {
|
|
222
|
+
return scopes.includes("mcp:read") && !scopes.includes("mcp:execute");
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Filter tools by tier. Enterprise tier returns all tools.
|
|
226
|
+
* For mvp/pro, returns only tools in that tier's allowlist.
|
|
227
|
+
*/
|
|
228
|
+
export function filterToolsByTier(allToolNames, tier) {
|
|
229
|
+
if (tier === "enterprise")
|
|
230
|
+
return allToolNames;
|
|
231
|
+
const allowed = new Set(TOOL_TIERS[tier]);
|
|
232
|
+
return allToolNames.filter((name) => allowed.has(name));
|
|
233
|
+
}
|
|
234
|
+
/** Tier counts for verification */
|
|
235
|
+
export const TIER_COUNTS = {
|
|
236
|
+
mvp: MVP_TOOLS.length,
|
|
237
|
+
pro: PRO_TOOLS.length,
|
|
238
|
+
};
|
|
239
|
+
//# sourceMappingURL=tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/tools/tiers.ts"],"names":[],"mappings":"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"}
|