@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/workflow.js
CHANGED
|
@@ -1,132 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workflow Automation MCP Tools
|
|
3
|
-
*
|
|
4
|
-
* Phase 2: Intelligent task routing and auto-assignment.
|
|
5
|
-
* Provides tools for task classification, agent workload monitoring,
|
|
6
|
-
* and automated/manual assignment through the Dobby platform.
|
|
7
|
-
*/
|
|
8
|
-
// ============================================
|
|
9
|
-
// Task Category Definitions (mirrors Python)
|
|
10
|
-
// ============================================
|
|
11
|
-
const CATEGORY_KEYWORDS = {
|
|
12
|
-
backend: [
|
|
13
|
-
'api', 'endpoint', 'route', 'fastapi', 'server', 'backend',
|
|
14
|
-
'middleware', 'handler', 'service', 'controller', 'python',
|
|
15
|
-
'async', 'uvicorn', 'pydantic',
|
|
16
|
-
],
|
|
17
|
-
frontend: [
|
|
18
|
-
'ui', 'frontend', 'react', 'component', 'page', 'layout',
|
|
19
|
-
'css', 'tailwind', 'next.js', 'nextjs', 'html', 'form',
|
|
20
|
-
'modal', 'dialog', 'button', 'sidebar', 'dashboard',
|
|
21
|
-
],
|
|
22
|
-
api: [
|
|
23
|
-
'rest', 'graphql', 'webhook', 'cors', 'openapi', 'swagger',
|
|
24
|
-
'rate limit', 'throttle', 'api route', 'api key',
|
|
25
|
-
],
|
|
26
|
-
database: [
|
|
27
|
-
'bigquery', 'sql', 'query', 'migration', 'schema', 'table',
|
|
28
|
-
'column', 'index', 'partition', 'cluster', 'database',
|
|
29
|
-
],
|
|
30
|
-
security: [
|
|
31
|
-
'auth', 'authentication', 'authorization', 'sso', 'saml',
|
|
32
|
-
'oidc', 'oauth', 'token', 'permission', 'rbac', 'encrypt',
|
|
33
|
-
'vulnerability', 'security', 'xss', 'csrf', 'injection',
|
|
34
|
-
],
|
|
35
|
-
testing: [
|
|
36
|
-
'test', 'vitest', 'pytest', 'e2e', 'playwright', 'coverage',
|
|
37
|
-
'mock', 'fixture', 'assertion', 'spec', 'unit test',
|
|
38
|
-
],
|
|
39
|
-
devops: [
|
|
40
|
-
'deploy', 'ci/cd', 'docker', 'kubernetes', 'helm', 'github actions',
|
|
41
|
-
'pipeline', 'build', 'release', 'monitoring', 'logging',
|
|
42
|
-
],
|
|
43
|
-
docs: [
|
|
44
|
-
'documentation', 'readme', 'docs', 'comment', 'jsdoc',
|
|
45
|
-
'docstring', 'guide', 'tutorial', 'changelog',
|
|
46
|
-
],
|
|
47
|
-
planning: [
|
|
48
|
-
'plan', 'design', 'architecture', 'roadmap', 'requirement',
|
|
49
|
-
'spec', 'rfc', 'adr', 'decision',
|
|
50
|
-
],
|
|
51
|
-
refactor: [
|
|
52
|
-
'refactor', 'cleanup', 'technical debt', 'optimize',
|
|
53
|
-
'performance', 'simplify', 'restructure', 'modernize',
|
|
54
|
-
],
|
|
55
|
-
};
|
|
56
|
-
let categoryAgentMapCache = null;
|
|
57
|
-
let categoryAgentMapCacheTime = 0;
|
|
58
|
-
const CATEGORY_MAP_CACHE_TTL = 5 * 60 * 1000; // 5 minutes
|
|
59
|
-
function getDefaultCategoryAgentMap() {
|
|
60
|
-
return {
|
|
61
|
-
backend: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-backend-agent' },
|
|
62
|
-
frontend: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-frontend-agent' },
|
|
63
|
-
api: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-api-agent' },
|
|
64
|
-
database: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-database-agent' },
|
|
65
|
-
security: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-security-agent' },
|
|
66
|
-
testing: { coordinator: 'dobby-qa-lead-agent', worker: 'dobby-test-writer-agent' },
|
|
67
|
-
devops: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-devops-agent' },
|
|
68
|
-
docs: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-docs-agent' },
|
|
69
|
-
planning: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-planning-agent' },
|
|
70
|
-
refactor: { coordinator: 'dobby-dev-coordinator-agent', worker: 'dobby-refactor-agent' },
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
const AGENT_NAME_TO_CATEGORY = {
|
|
74
|
-
'backend': ['backend'],
|
|
75
|
-
'frontend': ['frontend'],
|
|
76
|
-
'api': ['api'],
|
|
77
|
-
'database': ['database'],
|
|
78
|
-
'security': ['security'],
|
|
79
|
-
'test-writer': ['testing'],
|
|
80
|
-
'devops': ['devops'],
|
|
81
|
-
'docs': ['docs'],
|
|
82
|
-
'planning': ['planning'],
|
|
83
|
-
'refactor': ['refactor'],
|
|
84
|
-
};
|
|
85
|
-
async function getCategoryAgentMap(client) {
|
|
86
|
-
const now = Date.now();
|
|
87
|
-
if (categoryAgentMapCache && (now - categoryAgentMapCacheTime) < CATEGORY_MAP_CACHE_TTL) {
|
|
88
|
-
return categoryAgentMapCache;
|
|
89
|
-
}
|
|
90
|
-
try {
|
|
91
|
-
const data = await client.request(`/api/v1/tenants/${client.tenantId}/unified-agents`);
|
|
92
|
-
const agents = data?.data?.agents || data?.agents || [];
|
|
93
|
-
const map = { ...getDefaultCategoryAgentMap() };
|
|
94
|
-
for (const agent of agents) {
|
|
95
|
-
const agentId = agent.agent_id || agent.unified_id || '';
|
|
96
|
-
const layer = agent.agent_layer || '';
|
|
97
|
-
const group = agent.group || '';
|
|
98
|
-
// Map coordinators by group
|
|
99
|
-
if (layer === 'coordinator') {
|
|
100
|
-
for (const [category, agentMap] of Object.entries(map)) {
|
|
101
|
-
if (group === 'qa' && category === 'testing') {
|
|
102
|
-
agentMap.coordinator = agentId;
|
|
103
|
-
}
|
|
104
|
-
else if (group === 'dev' && category !== 'testing') {
|
|
105
|
-
agentMap.coordinator = agentId;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// Map workers by name matching
|
|
110
|
-
if (layer === 'worker') {
|
|
111
|
-
for (const [nameFragment, categories] of Object.entries(AGENT_NAME_TO_CATEGORY)) {
|
|
112
|
-
if (agentId.includes(nameFragment)) {
|
|
113
|
-
for (const cat of categories) {
|
|
114
|
-
if (map[cat]) {
|
|
115
|
-
map[cat].worker = agentId;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
categoryAgentMapCache = map;
|
|
123
|
-
categoryAgentMapCacheTime = now;
|
|
124
|
-
return map;
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return getDefaultCategoryAgentMap();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
1
|
// ============================================
|
|
131
2
|
// Tool Definitions
|
|
132
3
|
// ============================================
|
|
@@ -174,8 +45,8 @@ export const workflowTools = {
|
|
|
174
45
|
properties: {
|
|
175
46
|
task_id: {
|
|
176
47
|
type: 'string',
|
|
177
|
-
description: 'Task ID to assign (
|
|
178
|
-
pattern: '^
|
|
48
|
+
description: 'Task ID to assign (as returned by create_task or list_tasks, e.g. task-1784122598603-abc123)',
|
|
49
|
+
pattern: '^[a-zA-Z0-9][a-zA-Z0-9_-]*$',
|
|
179
50
|
},
|
|
180
51
|
title: {
|
|
181
52
|
type: 'string',
|
|
@@ -234,285 +105,7 @@ export const workflowTools = {
|
|
|
234
105
|
},
|
|
235
106
|
},
|
|
236
107
|
};
|
|
237
|
-
async function classifyTask(client, title, description = '', _priority = 'medium') {
|
|
238
|
-
const text = `${title} ${description}`.toLowerCase();
|
|
239
|
-
const agentMap = await getCategoryAgentMap(client);
|
|
240
|
-
const scores = {};
|
|
241
|
-
for (const [category, keywords] of Object.entries(CATEGORY_KEYWORDS)) {
|
|
242
|
-
const matched = [];
|
|
243
|
-
for (const kw of keywords) {
|
|
244
|
-
const pattern = new RegExp(`\\b${kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'i');
|
|
245
|
-
if (pattern.test(text)) {
|
|
246
|
-
matched.push(kw);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (matched.length > 0) {
|
|
250
|
-
let score = matched.length / keywords.length;
|
|
251
|
-
// Boost for title matches
|
|
252
|
-
const titleLower = title.toLowerCase();
|
|
253
|
-
const titleMatches = matched.filter(kw => {
|
|
254
|
-
const pat = new RegExp(`\\b${kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'i');
|
|
255
|
-
return pat.test(titleLower);
|
|
256
|
-
}).length;
|
|
257
|
-
if (titleMatches > 0) {
|
|
258
|
-
score += titleMatches * 0.15;
|
|
259
|
-
}
|
|
260
|
-
scores[category] = { score: Math.min(score, 1.0), matched };
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
const defaultMap = agentMap['backend'] || getDefaultCategoryAgentMap()['backend'];
|
|
264
|
-
if (Object.keys(scores).length === 0) {
|
|
265
|
-
return {
|
|
266
|
-
category: 'backend',
|
|
267
|
-
subcategory: null,
|
|
268
|
-
confidence: 0.3,
|
|
269
|
-
matched_keywords: [],
|
|
270
|
-
suggested_coordinator: defaultMap.coordinator,
|
|
271
|
-
suggested_worker: defaultMap.worker,
|
|
272
|
-
reasoning: 'No keywords matched — defaulting to backend development agent.',
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
const bestCategory = Object.entries(scores).reduce((best, [cat, data]) => data.score > best[1].score ? [cat, data] : best)[0];
|
|
276
|
-
const { score: confidence, matched } = scores[bestCategory];
|
|
277
|
-
const categoryMapping = agentMap[bestCategory] || defaultMap;
|
|
278
|
-
return {
|
|
279
|
-
category: bestCategory,
|
|
280
|
-
subcategory: matched[0] || null,
|
|
281
|
-
confidence,
|
|
282
|
-
matched_keywords: matched.slice(0, 10),
|
|
283
|
-
suggested_coordinator: categoryMapping.coordinator,
|
|
284
|
-
suggested_worker: categoryMapping.worker,
|
|
285
|
-
reasoning: `Task classified as '${bestCategory}' (confidence: ${(confidence * 100).toFixed(0)}%). Matched keywords: ${matched.slice(0, 5).join(', ')}. Suggested: ${categoryMapping.worker} under ${categoryMapping.coordinator}.`,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
108
|
// ============================================
|
|
289
109
|
// Tool Handlers
|
|
290
110
|
// ============================================
|
|
291
|
-
export async function handleWorkflowClassifyTask(client, args) {
|
|
292
|
-
const classification = await classifyTask(client, args.title, args.description || '', args.priority || 'medium');
|
|
293
|
-
let text = '## Task Classification\n\n';
|
|
294
|
-
text += `**Category:** ${classification.category}\n`;
|
|
295
|
-
text += `**Confidence:** ${(classification.confidence * 100).toFixed(0)}%\n`;
|
|
296
|
-
text += `**Coordinator:** ${classification.suggested_coordinator}\n`;
|
|
297
|
-
text += `**Worker:** ${classification.suggested_worker}\n`;
|
|
298
|
-
if (classification.matched_keywords.length > 0) {
|
|
299
|
-
text += `\n### Matched Keywords\n- ${classification.matched_keywords.join(', ')}\n`;
|
|
300
|
-
}
|
|
301
|
-
text += `\n### Next Steps\n1. Use \`workflow_auto_assign\` to execute this assignment\n`;
|
|
302
|
-
return {
|
|
303
|
-
content: [{
|
|
304
|
-
type: 'text',
|
|
305
|
-
text,
|
|
306
|
-
}],
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Helper to call Dobby API using the client's config.
|
|
311
|
-
* Uses global fetch (not client.fetch which is private).
|
|
312
|
-
*/
|
|
313
|
-
async function dobbyApiFetch(client, endpoint, options = {}) {
|
|
314
|
-
return fetch(`${client.apiUrl}${endpoint}`, {
|
|
315
|
-
...options,
|
|
316
|
-
headers: {
|
|
317
|
-
'Content-Type': 'application/json',
|
|
318
|
-
'X-API-Key': client.apiKey,
|
|
319
|
-
...options.headers,
|
|
320
|
-
},
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
export async function handleWorkflowAutoAssign(client, args) {
|
|
324
|
-
// First classify with dynamic agent map
|
|
325
|
-
const classification = await classifyTask(client, args.title, args.description || '', args.priority || 'medium');
|
|
326
|
-
// Check agent health before assignment (Task 3.5)
|
|
327
|
-
let healthWarning = null;
|
|
328
|
-
try {
|
|
329
|
-
const healthResponse = await dobbyApiFetch(client, `/api/v1/tenants/${client.tenantId}/unified-agents/${classification.suggested_worker}/health`);
|
|
330
|
-
if (healthResponse.ok) {
|
|
331
|
-
const health = await healthResponse.json();
|
|
332
|
-
const agentStatus = health.agent_status || health.status;
|
|
333
|
-
if (agentStatus === 'paused' || agentStatus === 'blocked') {
|
|
334
|
-
healthWarning = `${classification.suggested_worker} is ${agentStatus}.`;
|
|
335
|
-
// Try to find a healthy alternative in same category
|
|
336
|
-
const agentMap = await getCategoryAgentMap(client);
|
|
337
|
-
for (const [, mapping] of Object.entries(agentMap)) {
|
|
338
|
-
if (mapping.worker !== classification.suggested_worker) {
|
|
339
|
-
classification.suggested_worker = mapping.worker;
|
|
340
|
-
healthWarning += ` Routing to ${mapping.worker} instead.`;
|
|
341
|
-
break;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
catch {
|
|
348
|
-
// Health check failed — proceed with suggestion anyway
|
|
349
|
-
}
|
|
350
|
-
// Call Dobby API to execute assignment
|
|
351
|
-
try {
|
|
352
|
-
const response = await dobbyApiFetch(client, `/api/v1/tasks/${args.task_id}/auto-assign`, {
|
|
353
|
-
method: 'POST',
|
|
354
|
-
body: JSON.stringify({
|
|
355
|
-
title: args.title,
|
|
356
|
-
description: args.description || '',
|
|
357
|
-
priority: args.priority || 'medium',
|
|
358
|
-
suggested_coordinator: classification.suggested_coordinator,
|
|
359
|
-
suggested_worker: classification.suggested_worker,
|
|
360
|
-
classification,
|
|
361
|
-
}),
|
|
362
|
-
});
|
|
363
|
-
if (!response.ok) {
|
|
364
|
-
const errorText = await response.text();
|
|
365
|
-
return {
|
|
366
|
-
content: [{
|
|
367
|
-
type: 'text',
|
|
368
|
-
text: formatAutoAssignResult({
|
|
369
|
-
status: 'error',
|
|
370
|
-
error: `API error (${response.status}): ${errorText.slice(0, 200)}`,
|
|
371
|
-
classification,
|
|
372
|
-
health_warning: healthWarning,
|
|
373
|
-
}),
|
|
374
|
-
}],
|
|
375
|
-
isError: true,
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
const result = await response.json();
|
|
379
|
-
return {
|
|
380
|
-
content: [{
|
|
381
|
-
type: 'text',
|
|
382
|
-
text: formatAutoAssignResult({
|
|
383
|
-
status: 'assigned',
|
|
384
|
-
...result,
|
|
385
|
-
classification,
|
|
386
|
-
health_warning: healthWarning,
|
|
387
|
-
}),
|
|
388
|
-
}],
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
catch (error) {
|
|
392
|
-
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
393
|
-
return {
|
|
394
|
-
content: [{
|
|
395
|
-
type: 'text',
|
|
396
|
-
text: formatAutoAssignResult({
|
|
397
|
-
status: 'suggestion_only',
|
|
398
|
-
note: `Could not reach Dobby API (${errMsg}). Returning local classification.`,
|
|
399
|
-
classification,
|
|
400
|
-
health_warning: healthWarning,
|
|
401
|
-
}),
|
|
402
|
-
}],
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
function formatAutoAssignResult(data) {
|
|
407
|
-
const classification = data.classification;
|
|
408
|
-
const status = data.status;
|
|
409
|
-
const healthWarning = data.health_warning;
|
|
410
|
-
let text = '## Auto-Assignment Result\n\n';
|
|
411
|
-
text += `**Status:** ${status}\n`;
|
|
412
|
-
if (healthWarning) {
|
|
413
|
-
text += `**Health Warning:** ${healthWarning}\n`;
|
|
414
|
-
}
|
|
415
|
-
if (classification) {
|
|
416
|
-
text += `**Category:** ${classification.category}\n`;
|
|
417
|
-
text += `**Coordinator:** ${classification.suggested_coordinator}\n`;
|
|
418
|
-
text += `**Worker:** ${classification.suggested_worker}\n`;
|
|
419
|
-
text += `**Confidence:** ${(classification.confidence * 100).toFixed(0)}%\n`;
|
|
420
|
-
}
|
|
421
|
-
if (data.error) {
|
|
422
|
-
text += `\n### Error\n${data.error}\n`;
|
|
423
|
-
}
|
|
424
|
-
if (data.note) {
|
|
425
|
-
text += `\n### Note\n${data.note}\n`;
|
|
426
|
-
}
|
|
427
|
-
if (classification?.matched_keywords && classification.matched_keywords.length > 0) {
|
|
428
|
-
text += `\n### Matched Keywords\n- ${classification.matched_keywords.join(', ')}\n`;
|
|
429
|
-
}
|
|
430
|
-
return text;
|
|
431
|
-
}
|
|
432
|
-
export async function handleWorkflowAgentWorkload(client, args) {
|
|
433
|
-
try {
|
|
434
|
-
const layer = args.agent_layer || 'all';
|
|
435
|
-
const response = await dobbyApiFetch(client, `/api/v1/agents/workload?layer=${layer}`);
|
|
436
|
-
if (!response.ok) {
|
|
437
|
-
const errorText = await response.text();
|
|
438
|
-
return {
|
|
439
|
-
content: [{
|
|
440
|
-
type: 'text',
|
|
441
|
-
text: JSON.stringify({
|
|
442
|
-
error: `API error (${response.status}): ${errorText.slice(0, 200)}`,
|
|
443
|
-
}, null, 2),
|
|
444
|
-
}],
|
|
445
|
-
isError: true,
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
const data = await response.json();
|
|
449
|
-
return {
|
|
450
|
-
content: [{
|
|
451
|
-
type: 'text',
|
|
452
|
-
text: JSON.stringify(data, null, 2),
|
|
453
|
-
}],
|
|
454
|
-
};
|
|
455
|
-
}
|
|
456
|
-
catch (error) {
|
|
457
|
-
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
458
|
-
const agentMap = await getCategoryAgentMap(client);
|
|
459
|
-
return {
|
|
460
|
-
content: [{
|
|
461
|
-
type: 'text',
|
|
462
|
-
text: JSON.stringify({
|
|
463
|
-
note: `Could not reach Dobby API (${errMsg}). Showing agent hierarchy.`,
|
|
464
|
-
agents: Object.entries(agentMap).map(([category, agents]) => ({
|
|
465
|
-
category,
|
|
466
|
-
coordinator: agents.coordinator,
|
|
467
|
-
worker: agents.worker,
|
|
468
|
-
})),
|
|
469
|
-
}, null, 2),
|
|
470
|
-
}],
|
|
471
|
-
};
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
export async function handleWorkflowAssignmentRules(client, args) {
|
|
475
|
-
try {
|
|
476
|
-
const activeOnly = args.active_only !== false;
|
|
477
|
-
const response = await dobbyApiFetch(client, `/api/v1/workflow/assignment-rules?active_only=${activeOnly}`);
|
|
478
|
-
if (!response.ok) {
|
|
479
|
-
const errorText = await response.text();
|
|
480
|
-
return {
|
|
481
|
-
content: [{
|
|
482
|
-
type: 'text',
|
|
483
|
-
text: JSON.stringify({
|
|
484
|
-
error: `API error (${response.status}): ${errorText.slice(0, 200)}`,
|
|
485
|
-
}, null, 2),
|
|
486
|
-
}],
|
|
487
|
-
isError: true,
|
|
488
|
-
};
|
|
489
|
-
}
|
|
490
|
-
const data = await response.json();
|
|
491
|
-
return {
|
|
492
|
-
content: [{
|
|
493
|
-
type: 'text',
|
|
494
|
-
text: JSON.stringify(data, null, 2),
|
|
495
|
-
}],
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
catch (error) {
|
|
499
|
-
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
500
|
-
const agentMap = await getCategoryAgentMap(client);
|
|
501
|
-
return {
|
|
502
|
-
content: [{
|
|
503
|
-
type: 'text',
|
|
504
|
-
text: JSON.stringify({
|
|
505
|
-
note: `Could not reach Dobby API (${errMsg}). No rules available offline.`,
|
|
506
|
-
rules: [],
|
|
507
|
-
default_routing: Object.entries(agentMap).map(([category, agents]) => ({
|
|
508
|
-
category,
|
|
509
|
-
coordinator: agents.coordinator,
|
|
510
|
-
worker: agents.worker,
|
|
511
|
-
type: 'default',
|
|
512
|
-
})),
|
|
513
|
-
}, null, 2),
|
|
514
|
-
}],
|
|
515
|
-
};
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
111
|
//# sourceMappingURL=workflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/tools/workflow.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/tools/workflow.ts"],"names":[],"mappings":"AAKA,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,sBAAsB,EAAE;QACtB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE;YACX,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,8LAA8L;QAC3M,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sDAAsD;iBACpE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EAAE,iCAAiC;iBAC/C;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IAED,oBAAoB,EAAE;QACpB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE;YACX,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,2HAA2H;QACxI,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8FAA8F;oBAC3G,OAAO,EAAE,6BAA6B;iBACvC;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gEAAgE;iBAC9E;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4BAA4B;iBAC1C;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EAAE,iCAAiC;iBAC/C;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;SAC/B;KACF;IAED,uBAAuB,EAAE;QACvB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE;YACX,KAAK,EAAE,gBAAgB;YACvB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,mGAAmG;QAChH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC;oBACtC,WAAW,EAAE,sCAAsC;iBACpD;aACF;SACF;KACF;IAED,yBAAyB,EAAE;QACzB,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE;YACX,KAAK,EAAE,kBAAkB;YACzB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EAAE,wGAAwG;QACrH,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,WAAW,EAAE;oBACX,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,wCAAwC;iBACtD;aACF;SACF;KACF;CACF,CAAC;AAIF,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workload Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool definitions for the tenant's workloads (connected agent sources,
|
|
5
|
+
* backed by workload_connectors). Execution dispatches through the capability
|
|
6
|
+
* registry (@dobbyai/capability-core, ADR-019) — these defs are the LISTING
|
|
7
|
+
* shape; the handlers live in packages/capability-core/src/capabilities/workloads.ts.
|
|
8
|
+
* The description/inputSchema/annotations here MUST stay in sync with that file.
|
|
9
|
+
*/
|
|
10
|
+
export declare const workloadTools: {
|
|
11
|
+
list_workloads: {
|
|
12
|
+
name: string;
|
|
13
|
+
annotations: {
|
|
14
|
+
title: string;
|
|
15
|
+
readOnlyHint: boolean;
|
|
16
|
+
destructiveHint: boolean;
|
|
17
|
+
openWorldHint: boolean;
|
|
18
|
+
};
|
|
19
|
+
description: string;
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: "object";
|
|
22
|
+
properties: {
|
|
23
|
+
limit: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
create_workload: {
|
|
31
|
+
name: string;
|
|
32
|
+
annotations: {
|
|
33
|
+
title: string;
|
|
34
|
+
readOnlyHint: boolean;
|
|
35
|
+
destructiveHint: boolean;
|
|
36
|
+
openWorldHint: boolean;
|
|
37
|
+
};
|
|
38
|
+
description: string;
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: "object";
|
|
41
|
+
properties: {
|
|
42
|
+
display_name: {
|
|
43
|
+
type: string;
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
platform: {
|
|
47
|
+
type: string;
|
|
48
|
+
description: string;
|
|
49
|
+
};
|
|
50
|
+
bearer_token: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
supports_webhook: {
|
|
55
|
+
type: string;
|
|
56
|
+
description: string;
|
|
57
|
+
};
|
|
58
|
+
poll_interval_seconds: {
|
|
59
|
+
type: string;
|
|
60
|
+
description: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
required: string[];
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
try_sample_workload: {
|
|
67
|
+
name: string;
|
|
68
|
+
annotations: {
|
|
69
|
+
title: string;
|
|
70
|
+
readOnlyHint: boolean;
|
|
71
|
+
destructiveHint: boolean;
|
|
72
|
+
openWorldHint: boolean;
|
|
73
|
+
};
|
|
74
|
+
description: string;
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: "object";
|
|
77
|
+
properties: {};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=workloads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workloads.d.ts","sourceRoot":"","sources":["../../src/tools/workloads.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EzB,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workload Tools
|
|
3
|
+
*
|
|
4
|
+
* MCP tool definitions for the tenant's workloads (connected agent sources,
|
|
5
|
+
* backed by workload_connectors). Execution dispatches through the capability
|
|
6
|
+
* registry (@dobbyai/capability-core, ADR-019) — these defs are the LISTING
|
|
7
|
+
* shape; the handlers live in packages/capability-core/src/capabilities/workloads.ts.
|
|
8
|
+
* The description/inputSchema/annotations here MUST stay in sync with that file.
|
|
9
|
+
*/
|
|
10
|
+
export const workloadTools = {
|
|
11
|
+
list_workloads: {
|
|
12
|
+
name: "list_workloads",
|
|
13
|
+
annotations: {
|
|
14
|
+
title: "List Workloads",
|
|
15
|
+
readOnlyHint: true,
|
|
16
|
+
destructiveHint: false,
|
|
17
|
+
openWorldHint: false,
|
|
18
|
+
},
|
|
19
|
+
description: "List the tenant's workloads (connected agent sources), each with its run counts and the compliance verdict of its most recent scan. A workload is the entity backed by a connector; use create_workload to add one.",
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: "object",
|
|
22
|
+
properties: {
|
|
23
|
+
limit: {
|
|
24
|
+
type: "number",
|
|
25
|
+
description: "Maximum workloads to return (1-500, default 100).",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
create_workload: {
|
|
31
|
+
name: "create_workload",
|
|
32
|
+
annotations: {
|
|
33
|
+
title: "Create Workload",
|
|
34
|
+
readOnlyHint: false,
|
|
35
|
+
destructiveHint: false,
|
|
36
|
+
openWorldHint: false,
|
|
37
|
+
},
|
|
38
|
+
description: "Register a new workload (a connected agent source) for this tenant. For platform 'dobby_sdk' (the default) a collector bearer token is auto-minted and returned EXACTLY ONCE — save it to configure your collector/SDK, it cannot be recovered later. For any other platform you MUST pass bearer_token (the upstream platform's token). Requires the agents:write scope.",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: "object",
|
|
41
|
+
properties: {
|
|
42
|
+
display_name: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "Human-friendly name for the workload (required).",
|
|
45
|
+
},
|
|
46
|
+
platform: {
|
|
47
|
+
type: "string",
|
|
48
|
+
description: "Source platform (default 'dobby_sdk'). Use dobby_sdk to auto-mint a collector token; any other platform requires bearer_token.",
|
|
49
|
+
},
|
|
50
|
+
bearer_token: {
|
|
51
|
+
type: "string",
|
|
52
|
+
description: "The upstream platform's token. Required for any platform other than dobby_sdk.",
|
|
53
|
+
},
|
|
54
|
+
supports_webhook: {
|
|
55
|
+
type: "boolean",
|
|
56
|
+
description: "Whether the source pushes events via webhook (optional).",
|
|
57
|
+
},
|
|
58
|
+
poll_interval_seconds: {
|
|
59
|
+
type: "number",
|
|
60
|
+
description: "Poll interval in seconds, 15-3600 (optional).",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
required: ["display_name"],
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
try_sample_workload: {
|
|
67
|
+
name: "try_sample_workload",
|
|
68
|
+
annotations: {
|
|
69
|
+
title: "Try Sample Workload",
|
|
70
|
+
readOnlyHint: false,
|
|
71
|
+
destructiveHint: false,
|
|
72
|
+
openWorldHint: false,
|
|
73
|
+
},
|
|
74
|
+
description: "Seed a sample CredFlowAI (synthetic fintech credit-decisioning) workload for this tenant with three runs — compliant, violated, and unverifiable — pushed through the REAL pipeline, and fire a real compliance scan on each. Use this to give a brand-new or demo tenant instant monitored runs + audit evidence WITHOUT wiring a real agent, so the compliance dashboard and Evidence Pack have data within seconds. Idempotent: re-running reuses the same sample connector and re-scans. Admin-only. After it succeeds, call get_setup_status to confirm the first-run and first-scan milestones flipped.",
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: {},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=workloads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workloads.js","sourceRoot":"","sources":["../../src/tools/workloads.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE;YACX,KAAK,EAAE,gBAAgB;YACvB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EACT,qNAAqN;QACvN,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mDAAmD;iBACjE;aACF;SACF;KACF;IAED,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;YACX,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EACT,2WAA2W;QAC7W,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kDAAkD;iBAChE;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gIAAgI;iBACnI;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gFAAgF;iBACnF;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,0DAA0D;iBAC7D;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+CAA+C;iBAC7D;aACF;YACD,QAAQ,EAAE,CAAC,cAAc,CAAC;SAC3B;KACF;IAED,mBAAmB,EAAE;QACnB,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE;YACX,KAAK,EAAE,qBAAqB;YAC5B,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB;QACD,WAAW,EACT,+kBAA+kB;QACjlB,WAAW,EAAE;YACX,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE,EAAE;SACf;KACF;CACF,CAAC"}
|