@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
package/dist/tools/tasks.js
CHANGED
|
@@ -90,8 +90,8 @@ export const taskTools = {
|
|
|
90
90
|
properties: {
|
|
91
91
|
task_id: {
|
|
92
92
|
type: 'string',
|
|
93
|
-
description: 'The task ID to retrieve (
|
|
94
|
-
pattern: '^
|
|
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_-]*$',
|
|
95
95
|
},
|
|
96
96
|
},
|
|
97
97
|
required: ['task_id'],
|
|
@@ -112,8 +112,8 @@ export const taskTools = {
|
|
|
112
112
|
properties: {
|
|
113
113
|
task_id: {
|
|
114
114
|
type: 'string',
|
|
115
|
-
description: 'The task ID to update (
|
|
116
|
-
pattern: '^
|
|
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_-]*$',
|
|
117
117
|
},
|
|
118
118
|
status: {
|
|
119
119
|
type: 'string',
|
|
@@ -144,8 +144,8 @@ export const taskTools = {
|
|
|
144
144
|
properties: {
|
|
145
145
|
task_id: {
|
|
146
146
|
type: 'string',
|
|
147
|
-
description: 'The task ID to get timeline for (
|
|
148
|
-
pattern: '^
|
|
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_-]*$',
|
|
149
149
|
},
|
|
150
150
|
},
|
|
151
151
|
required: ['task_id'],
|
|
@@ -166,8 +166,8 @@ export const taskTools = {
|
|
|
166
166
|
properties: {
|
|
167
167
|
task_id: {
|
|
168
168
|
type: 'string',
|
|
169
|
-
description: 'The task ID to cancel (
|
|
170
|
-
pattern: '^
|
|
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_-]*$',
|
|
171
171
|
},
|
|
172
172
|
},
|
|
173
173
|
required: ['task_id'],
|
|
@@ -177,213 +177,4 @@ export const taskTools = {
|
|
|
177
177
|
// ============================================
|
|
178
178
|
// Tool Handlers
|
|
179
179
|
// ============================================
|
|
180
|
-
export async function handleCreateTask(client, args) {
|
|
181
|
-
const result = await client.createTask({
|
|
182
|
-
title: args.title,
|
|
183
|
-
description: args.description,
|
|
184
|
-
priority: args.priority || 'medium',
|
|
185
|
-
link_to_task_id: args.link_to_task_id,
|
|
186
|
-
});
|
|
187
|
-
return {
|
|
188
|
-
content: [
|
|
189
|
-
{
|
|
190
|
-
type: 'text',
|
|
191
|
-
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.`,
|
|
192
|
-
},
|
|
193
|
-
],
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
export async function handleListTasks(client, args) {
|
|
197
|
-
const tasks = await client.listTasks({
|
|
198
|
-
status: args.status === 'all' ? undefined : args.status,
|
|
199
|
-
priority: args.priority,
|
|
200
|
-
assigned_to: args.assigned_to,
|
|
201
|
-
limit: args.limit || 20,
|
|
202
|
-
});
|
|
203
|
-
if (tasks.length === 0) {
|
|
204
|
-
return {
|
|
205
|
-
content: [
|
|
206
|
-
{
|
|
207
|
-
type: 'text',
|
|
208
|
-
text: 'No tasks found matching the criteria.',
|
|
209
|
-
},
|
|
210
|
-
],
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
const taskList = tasks
|
|
214
|
-
.map((task, i) => {
|
|
215
|
-
const statusEmoji = {
|
|
216
|
-
pending: '⏳',
|
|
217
|
-
in_progress: '🔄',
|
|
218
|
-
completed: '✅',
|
|
219
|
-
failed: '❌',
|
|
220
|
-
cancelled: '🚫',
|
|
221
|
-
}[task.status] || '❓';
|
|
222
|
-
const priorityEmoji = {
|
|
223
|
-
high: '🔴',
|
|
224
|
-
medium: '🟡',
|
|
225
|
-
low: '🟢',
|
|
226
|
-
}[task.priority || 'medium'] || '';
|
|
227
|
-
return `${i + 1}. ${statusEmoji} ${priorityEmoji} **${task.title}**\n ID: \`${task.task_id}\`\n Status: ${task.status}${task.pr_url ? `\n PR: ${task.pr_url}` : ''}`;
|
|
228
|
-
})
|
|
229
|
-
.join('\n\n');
|
|
230
|
-
return {
|
|
231
|
-
content: [
|
|
232
|
-
{
|
|
233
|
-
type: 'text',
|
|
234
|
-
text: `Found ${tasks.length} task(s):\n\n${taskList}`,
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
export async function handleGetTask(client, args) {
|
|
240
|
-
const task = await client.getTask(args.task_id);
|
|
241
|
-
if (!task) {
|
|
242
|
-
return {
|
|
243
|
-
content: [
|
|
244
|
-
{
|
|
245
|
-
type: 'text',
|
|
246
|
-
text: `❌ Task not found: ${args.task_id}`,
|
|
247
|
-
},
|
|
248
|
-
],
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
const statusEmoji = {
|
|
252
|
-
pending: '⏳',
|
|
253
|
-
in_progress: '🔄',
|
|
254
|
-
completed: '✅',
|
|
255
|
-
failed: '❌',
|
|
256
|
-
cancelled: '🚫',
|
|
257
|
-
}[task.status] || '❓';
|
|
258
|
-
let details = `# ${statusEmoji} ${task.title}\n\n`;
|
|
259
|
-
details += `**Task ID:** \`${task.task_id}\`\n`;
|
|
260
|
-
details += `**Status:** ${task.status}\n`;
|
|
261
|
-
details += `**Priority:** ${task.priority || 'medium'}\n`;
|
|
262
|
-
details += `**Created:** ${task.created_at}\n`;
|
|
263
|
-
details += `**Updated:** ${task.updated_at}\n`;
|
|
264
|
-
if (task.description) {
|
|
265
|
-
details += `\n## Description\n${task.description}\n`;
|
|
266
|
-
}
|
|
267
|
-
if (task.pr_url) {
|
|
268
|
-
details += `\n## Pull Request\n${task.pr_url}\n`;
|
|
269
|
-
}
|
|
270
|
-
if (task.branch_name) {
|
|
271
|
-
details += `**Branch:** ${task.branch_name}\n`;
|
|
272
|
-
}
|
|
273
|
-
if (task.result_summary) {
|
|
274
|
-
details += `\n## Result Summary\n${task.result_summary}\n`;
|
|
275
|
-
}
|
|
276
|
-
return {
|
|
277
|
-
content: [
|
|
278
|
-
{
|
|
279
|
-
type: 'text',
|
|
280
|
-
text: details,
|
|
281
|
-
},
|
|
282
|
-
],
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
export async function handleUpdateTask(client, args) {
|
|
286
|
-
await client.updateTask(args.task_id, {
|
|
287
|
-
status: args.status,
|
|
288
|
-
priority: args.priority,
|
|
289
|
-
});
|
|
290
|
-
const updates = [];
|
|
291
|
-
if (args.status)
|
|
292
|
-
updates.push(`Status → ${args.status}`);
|
|
293
|
-
if (args.priority)
|
|
294
|
-
updates.push(`Priority → ${args.priority}`);
|
|
295
|
-
return {
|
|
296
|
-
content: [
|
|
297
|
-
{
|
|
298
|
-
type: 'text',
|
|
299
|
-
text: `✅ Task ${args.task_id} updated:\n${updates.join('\n')}`,
|
|
300
|
-
},
|
|
301
|
-
],
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
export async function handleGetTaskTimeline(client, args) {
|
|
305
|
-
const timeline = await client.getTaskTimeline(args.task_id);
|
|
306
|
-
if (timeline.length === 0) {
|
|
307
|
-
return {
|
|
308
|
-
content: [
|
|
309
|
-
{
|
|
310
|
-
type: 'text',
|
|
311
|
-
text: `No timeline events found for task ${args.task_id}`,
|
|
312
|
-
},
|
|
313
|
-
],
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
const eventEmojis = {
|
|
317
|
-
'task_created': '🆕',
|
|
318
|
-
'status_changed': '🔄',
|
|
319
|
-
'plan_created': '📋',
|
|
320
|
-
'subtask_started': '▶️',
|
|
321
|
-
'subtask_completed': '✅',
|
|
322
|
-
'code_generated': '💻',
|
|
323
|
-
'frontend_code_generated': '🎨',
|
|
324
|
-
'tests_run': '🧪',
|
|
325
|
-
'pr_created': '📝',
|
|
326
|
-
'pr_merged': '🔀',
|
|
327
|
-
'approval_requested': '⏳',
|
|
328
|
-
'approval_approved': '✅',
|
|
329
|
-
'approval_rejected': '❌',
|
|
330
|
-
'agent_continuation_triggered': '🚀',
|
|
331
|
-
'continuation_after_approval_completed': '🎉',
|
|
332
|
-
'agent_retry_triggered': '🔁',
|
|
333
|
-
'retry_after_rejection_completed': '✨',
|
|
334
|
-
'execution_cancelled': '🛑',
|
|
335
|
-
};
|
|
336
|
-
const timelineText = timeline
|
|
337
|
-
.slice(0, 20) // Limit to last 20 events
|
|
338
|
-
.map((event) => {
|
|
339
|
-
const emoji = eventEmojis[event.event_type] || '📌';
|
|
340
|
-
const time = new Date(event.created_at).toLocaleString();
|
|
341
|
-
const agent = event.agent_name ? ` (${event.agent_name})` : '';
|
|
342
|
-
let details = '';
|
|
343
|
-
if (event.details && typeof event.details === 'object') {
|
|
344
|
-
const d = event.details;
|
|
345
|
-
if (d.new_status)
|
|
346
|
-
details = ` → ${d.new_status}`;
|
|
347
|
-
if (d.pr_number)
|
|
348
|
-
details = ` PR #${d.pr_number}`;
|
|
349
|
-
if (d.error)
|
|
350
|
-
details = ` Error: ${d.error}`;
|
|
351
|
-
if (d.feedback)
|
|
352
|
-
details = ` Feedback: "${d.feedback.slice(0, 50)}..."`;
|
|
353
|
-
}
|
|
354
|
-
return `${emoji} **${event.event_type.replace(/_/g, ' ')}**${agent}${details}\n ${time}`;
|
|
355
|
-
})
|
|
356
|
-
.join('\n\n');
|
|
357
|
-
return {
|
|
358
|
-
content: [
|
|
359
|
-
{
|
|
360
|
-
type: 'text',
|
|
361
|
-
text: `# 📊 Timeline for Task ${args.task_id}\n\n${timelineText}`,
|
|
362
|
-
},
|
|
363
|
-
],
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
export async function handleCancelTask(client, args) {
|
|
367
|
-
const result = await client.cancelTaskExecution(args.task_id);
|
|
368
|
-
if (result.success) {
|
|
369
|
-
return {
|
|
370
|
-
content: [
|
|
371
|
-
{
|
|
372
|
-
type: 'text',
|
|
373
|
-
text: `🛑 Task ${args.task_id} execution cancelled successfully.\n\nThe task status has been reverted to pending.`,
|
|
374
|
-
},
|
|
375
|
-
],
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
return {
|
|
380
|
-
content: [
|
|
381
|
-
{
|
|
382
|
-
type: 'text',
|
|
383
|
-
text: `⚠️ Could not cancel task ${args.task_id}.\n\n${result.message || 'Task may not be running or was already completed.'}`,
|
|
384
|
-
},
|
|
385
|
-
],
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
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":"AAAA;;;;GAIG;AAGH,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,oBAAoB;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE;YACX,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;oBAC/B,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;iBAChD;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IAED,aAAa;IACb,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;YACX,KAAK,EAAE,YAAY;YACnB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;oBAC9D,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;oBAC/B,WAAW,EAAE,oBAAoB;iBAClC;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mEAAmE;iBACjF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iDAAiD;iBAC/D;aACF;SACF;KACF;IAED,kBAAkB;IAClB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;YACX,KAAK,EAAE,UAAU;YACjB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oGAAoG;oBACjH,OAAO,EAAE,6BAA6B;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,cAAc;IACd,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE;YACX,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kGAAkG;oBAC/G,OAAO,EAAE,6BAA6B;iBACvC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;oBACpE,WAAW,EAAE,YAAY;iBAC1B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;oBAC/B,WAAW,EAAE,cAAc;iBAC5B;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,oCAAoC;IACpC,iBAAiB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE;YACX,KAAK,EAAE,mBAAmB;YAC1B,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4GAA4G;oBACzH,OAAO,EAAE,6BAA6B;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,wBAAwB;IACxB,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE;YACX,KAAK,EAAE,aAAa;YACpB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kGAAkG;oBAC/G,OAAO,EAAE,6BAA6B;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;CACF,CAAC;AAEF,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C"}
|
package/dist/tools/tiers.d.ts
CHANGED
|
@@ -2,19 +2,28 @@
|
|
|
2
2
|
* Tool Tier Filtering System
|
|
3
3
|
*
|
|
4
4
|
* Defines which tools are available at each subscription tier.
|
|
5
|
-
* MVP
|
|
6
|
-
* Pro
|
|
7
|
-
* Enterprise
|
|
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
8
|
*
|
|
9
|
-
* Tier ↔ Plan mapping:
|
|
10
|
-
* Free / Trial → mvp (
|
|
11
|
-
* Pro
|
|
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
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.
|
|
13
22
|
*/
|
|
14
23
|
/** MVP tier: core platform tools that work without extra integration setup */
|
|
15
24
|
export declare const MVP_TOOLS: readonly string[];
|
|
16
25
|
export declare const PRO_TOOLS: readonly string[];
|
|
17
|
-
export type ToolTier =
|
|
26
|
+
export type ToolTier = "mvp" | "pro" | "enterprise";
|
|
18
27
|
export declare const TOOL_TIERS: Record<ToolTier, readonly string[]>;
|
|
19
28
|
/**
|
|
20
29
|
* Resolve the tool tier from an auth context.
|
|
@@ -26,6 +35,13 @@ export declare function resolveToolTier(authContext?: {
|
|
|
26
35
|
scopes?: string[];
|
|
27
36
|
plan?: string;
|
|
28
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;
|
|
29
45
|
/**
|
|
30
46
|
* Filter tools by tier. Enterprise tier returns all tools.
|
|
31
47
|
* For mvp/pro, returns only tools in that tier's allowlist.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/tools/tiers.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|
package/dist/tools/tiers.js
CHANGED
|
@@ -2,14 +2,23 @@
|
|
|
2
2
|
* Tool Tier Filtering System
|
|
3
3
|
*
|
|
4
4
|
* Defines which tools are available at each subscription tier.
|
|
5
|
-
* MVP
|
|
6
|
-
* Pro
|
|
7
|
-
* Enterprise
|
|
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
8
|
*
|
|
9
|
-
* Tier ↔ Plan mapping:
|
|
10
|
-
* Free / Trial → mvp (
|
|
11
|
-
* Pro
|
|
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
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.
|
|
13
22
|
*/
|
|
14
23
|
// ============================================
|
|
15
24
|
// Tier Definitions
|
|
@@ -17,69 +26,152 @@
|
|
|
17
26
|
/** MVP tier: core platform tools that work without extra integration setup */
|
|
18
27
|
export const MVP_TOOLS = [
|
|
19
28
|
// Tasks (6)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
"create_task",
|
|
30
|
+
"list_tasks",
|
|
31
|
+
"get_task",
|
|
32
|
+
"update_task",
|
|
33
|
+
"get_task_timeline",
|
|
34
|
+
"cancel_task",
|
|
26
35
|
// Messages (2)
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
"get_messages",
|
|
37
|
+
"send_message",
|
|
29
38
|
// Approvals — HITL (4)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
39
|
+
"get_pending_approvals",
|
|
40
|
+
"approve_task",
|
|
41
|
+
"reject_task",
|
|
42
|
+
"request_changes",
|
|
34
43
|
// Agent Ops (4)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
"list_all_agents",
|
|
45
|
+
"workflow_classify_task",
|
|
46
|
+
"workflow_auto_assign",
|
|
47
|
+
"workflow_agent_workload",
|
|
39
48
|
// Schedules (4)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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",
|
|
44
58
|
// Discovery (2)
|
|
45
|
-
|
|
46
|
-
|
|
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",
|
|
47
111
|
];
|
|
48
|
-
/** Pro tier
|
|
112
|
+
/** Pro tier additions: Jira + GitHub + CrewAI + Knowledge + Memory write + Versioning + Orchestration + Outcomes + External Agents */
|
|
49
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",
|
|
50
118
|
// Jira (10)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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",
|
|
61
129
|
// GitHub (7)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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",
|
|
69
137
|
// CrewAI Platform (4)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
138
|
+
"crewai_health",
|
|
139
|
+
"crewai_inputs",
|
|
140
|
+
"crewai_kickoff",
|
|
141
|
+
"crewai_status",
|
|
74
142
|
// CrewAI Builder (4)
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
143
|
+
"crew_validate",
|
|
144
|
+
"crew_kickoff",
|
|
145
|
+
"crew_status",
|
|
146
|
+
"crew_list",
|
|
79
147
|
// Knowledge Base (3)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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",
|
|
83
175
|
];
|
|
84
176
|
export const PRO_TOOLS = [...MVP_TOOLS, ...PRO_ADDITIONAL];
|
|
85
177
|
export const TOOL_TIERS = {
|
|
@@ -91,10 +183,10 @@ export const TOOL_TIERS = {
|
|
|
91
183
|
// Scope → Tier Mapping
|
|
92
184
|
// ============================================
|
|
93
185
|
const SCOPE_TO_TIER = {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
186
|
+
"mcp:read": "mvp",
|
|
187
|
+
"mcp:execute": "mvp",
|
|
188
|
+
"mcp:pro": "pro",
|
|
189
|
+
"mcp:*": "enterprise",
|
|
98
190
|
};
|
|
99
191
|
/**
|
|
100
192
|
* Resolve the tool tier from an auth context.
|
|
@@ -103,36 +195,45 @@ const SCOPE_TO_TIER = {
|
|
|
103
195
|
*/
|
|
104
196
|
export function resolveToolTier(authContext) {
|
|
105
197
|
if (!authContext)
|
|
106
|
-
return
|
|
198
|
+
return "mvp";
|
|
107
199
|
// Check plan directly
|
|
108
|
-
if (authContext.plan ===
|
|
109
|
-
return
|
|
110
|
-
if (authContext.plan ===
|
|
111
|
-
return
|
|
200
|
+
if (authContext.plan === "enterprise")
|
|
201
|
+
return "enterprise";
|
|
202
|
+
if (authContext.plan === "pro")
|
|
203
|
+
return "pro";
|
|
112
204
|
// Check scopes
|
|
113
|
-
const scopes = authContext.scopes
|
|
114
|
-
|
|
115
|
-
if (scopes.includes(
|
|
116
|
-
return
|
|
117
|
-
if (scopes.includes(
|
|
118
|
-
return
|
|
119
|
-
if (scopes.includes(
|
|
120
|
-
return
|
|
121
|
-
return
|
|
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");
|
|
122
223
|
}
|
|
123
224
|
/**
|
|
124
225
|
* Filter tools by tier. Enterprise tier returns all tools.
|
|
125
226
|
* For mvp/pro, returns only tools in that tier's allowlist.
|
|
126
227
|
*/
|
|
127
228
|
export function filterToolsByTier(allToolNames, tier) {
|
|
128
|
-
if (tier ===
|
|
229
|
+
if (tier === "enterprise")
|
|
129
230
|
return allToolNames;
|
|
130
231
|
const allowed = new Set(TOOL_TIERS[tier]);
|
|
131
|
-
return allToolNames.filter(name => allowed.has(name));
|
|
232
|
+
return allToolNames.filter((name) => allowed.has(name));
|
|
132
233
|
}
|
|
133
234
|
/** Tier counts for verification */
|
|
134
235
|
export const TIER_COUNTS = {
|
|
135
|
-
mvp: MVP_TOOLS.length,
|
|
136
|
-
pro: PRO_TOOLS.length,
|
|
236
|
+
mvp: MVP_TOOLS.length,
|
|
237
|
+
pro: PRO_TOOLS.length,
|
|
137
238
|
};
|
|
138
239
|
//# sourceMappingURL=tiers.js.map
|