@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/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Dobby MCP Server
|
|
3
|
+
* Dobby MCP Server — CLI entry point
|
|
4
4
|
*
|
|
5
5
|
* Model Context Protocol server for Dobby AI Platform.
|
|
6
6
|
* Enables access from Claude Desktop, Cursor, Windsurf, and other MCP clients.
|
|
@@ -9,17 +9,18 @@
|
|
|
9
9
|
* npx @dobbyai/mcp-external # STDIO mode (default)
|
|
10
10
|
* npx @dobbyai/mcp-external --transport http # HTTP mode
|
|
11
11
|
* npx @dobbyai/mcp-external --setup # Interactive setup
|
|
12
|
+
*
|
|
13
|
+
* The server factory (handler registration, tier enforcement) lives in
|
|
14
|
+
* server.ts — this file only parses the CLI and starts the transport.
|
|
15
|
+
* Importing THIS module runs main(); tests import server.ts instead.
|
|
12
16
|
*/
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { resourceDefinitions, resourceTemplates, handleResourceRead } from './resources/index.js';
|
|
21
|
-
import { promptDefinitions, handlePromptGet } from './prompts/index.js';
|
|
22
|
-
import { startHttpServer } from './http-server.js';
|
|
17
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
18
|
+
import { Command } from "commander";
|
|
19
|
+
import dotenv from "dotenv";
|
|
20
|
+
import { createDobbyClient } from "./lib/dobby-client.js";
|
|
21
|
+
import { createServer, resolveGatewayKey } from "./server.js";
|
|
22
|
+
import { startHttpServer } from "./http-server.js";
|
|
23
|
+
import { log, useStderrSink } from "./lib/log.js";
|
|
23
24
|
// Load environment variables
|
|
24
25
|
dotenv.config();
|
|
25
26
|
// ============================================
|
|
@@ -27,205 +28,60 @@ dotenv.config();
|
|
|
27
28
|
// ============================================
|
|
28
29
|
const program = new Command();
|
|
29
30
|
program
|
|
30
|
-
.name(
|
|
31
|
-
.description(
|
|
32
|
-
.version(
|
|
33
|
-
.option(
|
|
34
|
-
.option(
|
|
35
|
-
.option(
|
|
36
|
-
.option(
|
|
37
|
-
.option(
|
|
38
|
-
.option(
|
|
39
|
-
.option(
|
|
40
|
-
.option(
|
|
31
|
+
.name("dobby-mcp")
|
|
32
|
+
.description("Dobby MCP Server - Connect to Dobby from any MCP client")
|
|
33
|
+
.version("1.2.0")
|
|
34
|
+
.option("-t, --transport <type>", "Transport type: stdio or http", "stdio")
|
|
35
|
+
.option("-p, --port <number>", "HTTP server port (for http transport)", "8080")
|
|
36
|
+
.option("--api-url <url>", "Dobby API URL", process.env.DOBBY_API_URL)
|
|
37
|
+
.option("--api-key <key>", "Dobby API Key", process.env.DOBBY_API_KEY)
|
|
38
|
+
.option("--tenant-id <id>", "Dobby Tenant ID", process.env.DOBBY_TENANT_ID)
|
|
39
|
+
.option("--gateway-key <key>", "Gateway API Key (gk_* format)", process.env.DOBBY_GATEWAY_KEY)
|
|
40
|
+
.option("--gateway-url <url>", "Gateway API URL (defaults to API URL)", process.env.DOBBY_GATEWAY_URL)
|
|
41
|
+
.option("--setup", "Run interactive setup")
|
|
42
|
+
.option("--doctor", "Run a connection/credential preflight and exit")
|
|
41
43
|
.parse();
|
|
42
44
|
const options = program.opts();
|
|
43
45
|
// ============================================
|
|
44
|
-
// Gateway Key Resolution
|
|
45
|
-
// ============================================
|
|
46
|
-
/**
|
|
47
|
-
* Resolve the gateway key to use for auth + audit logging.
|
|
48
|
-
* Priority: explicit DOBBY_GATEWAY_KEY > auto-detect gk_* in DOBBY_API_KEY > undefined (disabled)
|
|
49
|
-
*/
|
|
50
|
-
function resolveGatewayKey(opts) {
|
|
51
|
-
if (opts.gatewayKey)
|
|
52
|
-
return opts.gatewayKey;
|
|
53
|
-
if (opts.apiKey && opts.apiKey.startsWith('gk_'))
|
|
54
|
-
return opts.apiKey;
|
|
55
|
-
return undefined;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Create an MCP Server with all handlers registered.
|
|
59
|
-
*
|
|
60
|
-
* In STDIO mode: tenant context comes from env vars (DOBBY_TENANT_ID, DOBBY_API_KEY).
|
|
61
|
-
* In HTTP mode: tenant context comes from OAuth token (extra.authInfo.extra.tenant_id).
|
|
62
|
-
* The DobbyClient is created lazily per-request in HTTP mode.
|
|
63
|
-
*/
|
|
64
|
-
async function createServer(opts = { mode: 'stdio' }) {
|
|
65
|
-
const apiUrl = options.apiUrl || process.env.DOBBY_API_URL || 'https://dobby-ai.com';
|
|
66
|
-
// In STDIO mode, create a shared client from env vars
|
|
67
|
-
let stdioClient;
|
|
68
|
-
if (opts.mode === 'stdio') {
|
|
69
|
-
stdioClient = createDobbyClient({
|
|
70
|
-
apiUrl: options.apiUrl,
|
|
71
|
-
apiKey: options.apiKey,
|
|
72
|
-
tenantId: options.tenantId,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// Create MCP server
|
|
76
|
-
const server = new Server({
|
|
77
|
-
name: 'dobby-mcp-server',
|
|
78
|
-
version: '1.1.0',
|
|
79
|
-
}, {
|
|
80
|
-
capabilities: {
|
|
81
|
-
tools: {},
|
|
82
|
-
resources: {},
|
|
83
|
-
prompts: {},
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
// STDIO user context
|
|
87
|
-
const userContext = {
|
|
88
|
-
userId: process.env.DOBBY_USER_ID || 'mcp-user',
|
|
89
|
-
userName: process.env.DOBBY_USER_NAME || 'MCP User',
|
|
90
|
-
};
|
|
91
|
-
// STDIO gateway auth context
|
|
92
|
-
const gatewayKey = resolveGatewayKey({
|
|
93
|
-
gatewayKey: options.gatewayKey,
|
|
94
|
-
apiKey: options.apiKey,
|
|
95
|
-
});
|
|
96
|
-
const gatewayUrl = options.gatewayUrl || apiUrl;
|
|
97
|
-
// ============================================
|
|
98
|
-
// Tools Handler
|
|
99
|
-
// ============================================
|
|
100
|
-
server.setRequestHandler(ListToolsRequestSchema, async (_request, extra) => {
|
|
101
|
-
// In HTTP mode, could filter by tier based on auth scopes
|
|
102
|
-
// For now, return all tools with annotations
|
|
103
|
-
return {
|
|
104
|
-
tools: getToolDefinitions('enterprise'),
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
108
|
-
const { name, arguments: args } = request.params;
|
|
109
|
-
try {
|
|
110
|
-
let client;
|
|
111
|
-
let userId;
|
|
112
|
-
let userName;
|
|
113
|
-
let tenantId;
|
|
114
|
-
let region;
|
|
115
|
-
let gwKey;
|
|
116
|
-
let gwUrl;
|
|
117
|
-
if (opts.mode === 'http' && extra.authInfo) {
|
|
118
|
-
// HTTP mode — resolve context from OAuth token
|
|
119
|
-
const tokenExtra = extra.authInfo.extra;
|
|
120
|
-
const tokenTenantId = tokenExtra?.tenant_id;
|
|
121
|
-
const tokenOrgId = tokenExtra?.org_id;
|
|
122
|
-
const tokenUserId = tokenExtra?.user_id || 'oauth-user';
|
|
123
|
-
if (!tokenTenantId) {
|
|
124
|
-
return {
|
|
125
|
-
content: [{ type: 'text', text: 'Error: OAuth token missing tenant_id' }],
|
|
126
|
-
isError: true,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
// Create per-request client using the OAuth access token as the API key
|
|
130
|
-
client = new DobbyClient({
|
|
131
|
-
apiUrl,
|
|
132
|
-
apiKey: extra.authInfo.token,
|
|
133
|
-
tenantId: tokenTenantId,
|
|
134
|
-
});
|
|
135
|
-
userId = tokenUserId;
|
|
136
|
-
userName = 'OAuth User';
|
|
137
|
-
tenantId = tokenTenantId;
|
|
138
|
-
region = undefined; // resolved by web app from tenant
|
|
139
|
-
gwKey = extra.authInfo.token; // use OAuth token for gateway auth
|
|
140
|
-
gwUrl = apiUrl;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
// STDIO mode — use env vars
|
|
144
|
-
client = stdioClient;
|
|
145
|
-
userId = userContext.userId;
|
|
146
|
-
userName = userContext.userName;
|
|
147
|
-
tenantId = client.tenantId;
|
|
148
|
-
region = process.env.DOBBY_REGION;
|
|
149
|
-
gwKey = gatewayKey;
|
|
150
|
-
gwUrl = gatewayUrl;
|
|
151
|
-
}
|
|
152
|
-
const result = await handleToolCall(name, args || {}, {
|
|
153
|
-
client,
|
|
154
|
-
userId,
|
|
155
|
-
userName,
|
|
156
|
-
gatewayKey: gwKey,
|
|
157
|
-
gatewayUrl: gwUrl,
|
|
158
|
-
tenantId,
|
|
159
|
-
region,
|
|
160
|
-
});
|
|
161
|
-
return result;
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
return {
|
|
165
|
-
content: [
|
|
166
|
-
{
|
|
167
|
-
type: 'text',
|
|
168
|
-
text: `Error: ${error.message}`,
|
|
169
|
-
},
|
|
170
|
-
],
|
|
171
|
-
isError: true,
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
// ============================================
|
|
176
|
-
// Resources Handler
|
|
177
|
-
// ============================================
|
|
178
|
-
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
179
|
-
return {
|
|
180
|
-
resources: resourceDefinitions,
|
|
181
|
-
resourceTemplates: resourceTemplates,
|
|
182
|
-
};
|
|
183
|
-
});
|
|
184
|
-
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
185
|
-
const { uri } = request.params;
|
|
186
|
-
const client = stdioClient || new DobbyClient({ apiUrl, apiKey: '', tenantId: '' });
|
|
187
|
-
try {
|
|
188
|
-
return await handleResourceRead(uri, client);
|
|
189
|
-
}
|
|
190
|
-
catch (error) {
|
|
191
|
-
throw new Error(`Failed to read resource ${uri}: ${error.message}`);
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
// ============================================
|
|
195
|
-
// Prompts Handler
|
|
196
|
-
// ============================================
|
|
197
|
-
server.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
198
|
-
return {
|
|
199
|
-
prompts: promptDefinitions,
|
|
200
|
-
};
|
|
201
|
-
});
|
|
202
|
-
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
203
|
-
const { name, arguments: args } = request.params;
|
|
204
|
-
try {
|
|
205
|
-
return handlePromptGet(name, args || {});
|
|
206
|
-
}
|
|
207
|
-
catch (error) {
|
|
208
|
-
throw new Error(`Failed to get prompt ${name}: ${error.message}`);
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
return server;
|
|
212
|
-
}
|
|
213
|
-
// ============================================
|
|
214
46
|
// Main Entry Point
|
|
215
47
|
// ============================================
|
|
216
48
|
async function main() {
|
|
217
49
|
// Handle setup mode
|
|
218
50
|
if (options.setup) {
|
|
219
|
-
const { runInteractiveSetup } = await import(
|
|
51
|
+
const { runInteractiveSetup } = await import("./connectors/setup.js");
|
|
220
52
|
await runInteractiveSetup();
|
|
221
53
|
return;
|
|
222
54
|
}
|
|
223
|
-
|
|
224
|
-
|
|
55
|
+
// Preflight: validate credentials + transport, print a diagnosis, then exit
|
|
56
|
+
if (options.doctor) {
|
|
57
|
+
const { runDoctor, formatDoctorReport } = await import("./doctor.js");
|
|
58
|
+
const report = await runDoctor({
|
|
59
|
+
apiUrl: options.apiUrl,
|
|
60
|
+
apiKey: options.apiKey,
|
|
61
|
+
tenantId: options.tenantId,
|
|
62
|
+
gatewayKey: options.gatewayKey,
|
|
63
|
+
transport: options.transport,
|
|
64
|
+
});
|
|
65
|
+
console.log(formatDoctorReport(report));
|
|
66
|
+
process.exit(report.blocked ? 1 : 0);
|
|
67
|
+
}
|
|
225
68
|
try {
|
|
226
|
-
if (options.transport ===
|
|
69
|
+
if (options.transport === "stdio") {
|
|
70
|
+
// STDIO: stdout is the JSON-RPC protocol channel — ALL diagnostics stay
|
|
71
|
+
// on stderr (human-readable; MCP clients surface stderr as server logs).
|
|
72
|
+
// Route any shared log.* call there too so it can never corrupt stdout.
|
|
73
|
+
useStderrSink();
|
|
74
|
+
console.error("Starting Dobby MCP Server...");
|
|
75
|
+
console.error("Transport: stdio");
|
|
227
76
|
// STDIO transport (for Claude Desktop, Cursor, etc.)
|
|
228
|
-
const server = await createServer({
|
|
77
|
+
const server = await createServer({
|
|
78
|
+
mode: "stdio",
|
|
79
|
+
apiUrl: options.apiUrl,
|
|
80
|
+
apiKey: options.apiKey,
|
|
81
|
+
tenantId: options.tenantId,
|
|
82
|
+
gatewayKey: options.gatewayKey,
|
|
83
|
+
gatewayUrl: options.gatewayUrl,
|
|
84
|
+
});
|
|
229
85
|
// Verify connection
|
|
230
86
|
const client = createDobbyClient({
|
|
231
87
|
apiUrl: options.apiUrl,
|
|
@@ -234,33 +90,41 @@ async function main() {
|
|
|
234
90
|
});
|
|
235
91
|
const healthy = await client.checkHealth();
|
|
236
92
|
if (!healthy) {
|
|
237
|
-
console.error(
|
|
93
|
+
console.error("Warning: Could not connect to Dobby API");
|
|
238
94
|
}
|
|
239
95
|
else {
|
|
240
|
-
console.error(
|
|
96
|
+
console.error("Connected to Dobby API");
|
|
241
97
|
}
|
|
242
98
|
// Gateway auth status
|
|
243
|
-
const gwKey = resolveGatewayKey({
|
|
99
|
+
const gwKey = resolveGatewayKey({
|
|
100
|
+
gatewayKey: options.gatewayKey,
|
|
101
|
+
apiKey: options.apiKey,
|
|
102
|
+
});
|
|
244
103
|
if (gwKey) {
|
|
245
104
|
console.error(`Gateway auth enabled (key prefix: ${gwKey.slice(0, 12)}...)`);
|
|
246
105
|
}
|
|
247
106
|
else {
|
|
248
|
-
console.error(
|
|
107
|
+
console.error("Gateway auth disabled (no gateway key configured)");
|
|
249
108
|
}
|
|
250
109
|
const transport = new StdioServerTransport();
|
|
251
110
|
await server.connect(transport);
|
|
252
|
-
console.error(
|
|
111
|
+
console.error("Dobby MCP Server running on STDIO");
|
|
253
112
|
}
|
|
254
|
-
else if (options.transport ===
|
|
255
|
-
// HTTP transport (for remote clients via OAuth)
|
|
256
|
-
|
|
113
|
+
else if (options.transport === "http") {
|
|
114
|
+
// HTTP transport (for remote clients via OAuth). Structured JSON on
|
|
115
|
+
// stdout — GKE ingests it at the declared severity (the old stderr
|
|
116
|
+
// banner landed at severity ERROR).
|
|
117
|
+
log.info("Starting Dobby MCP Server", { transport: "http" });
|
|
118
|
+
const issuerUrl = process.env.OAUTH_ISSUER_URL ||
|
|
119
|
+
options.apiUrl ||
|
|
120
|
+
"https://dobby-ai.com";
|
|
257
121
|
const mcpPublicUrl = process.env.MCP_PUBLIC_URL || `http://localhost:${options.port}`;
|
|
258
122
|
const port = parseInt(options.port, 10);
|
|
259
123
|
await startHttpServer({
|
|
260
124
|
port,
|
|
261
125
|
issuerUrl,
|
|
262
126
|
mcpPublicUrl,
|
|
263
|
-
createMcpServer: () => createServer({ mode:
|
|
127
|
+
createMcpServer: () => createServer({ mode: "http", apiUrl: options.apiUrl }),
|
|
264
128
|
});
|
|
265
129
|
}
|
|
266
130
|
else {
|
|
@@ -269,12 +133,12 @@ async function main() {
|
|
|
269
133
|
}
|
|
270
134
|
}
|
|
271
135
|
catch (error) {
|
|
272
|
-
console.error(
|
|
136
|
+
console.error("Failed to start server:", error.message);
|
|
273
137
|
process.exit(1);
|
|
274
138
|
}
|
|
275
139
|
}
|
|
276
140
|
main().catch((error) => {
|
|
277
|
-
console.error(
|
|
141
|
+
console.error("Fatal error:", error);
|
|
278
142
|
process.exit(1);
|
|
279
143
|
});
|
|
280
144
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Dobby MCP external server.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Canonical production API host for the Dobby platform.
|
|
6
|
+
* Single source of truth for the default DOBBY_API_URL used by the client
|
|
7
|
+
* and every connector generator, to prevent host drift.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DEFAULT_API_URL = "https://dobby-ai.com";
|
|
10
|
+
/**
|
|
11
|
+
* Issued-key prefixes, the single source of truth for classifying a
|
|
12
|
+
* DOBBY_API_KEY / bearer token into what it can do. Reused by the `doctor`
|
|
13
|
+
* preflight and the `whoami` tool so both agree on key semantics.
|
|
14
|
+
*/
|
|
15
|
+
export declare const GATEWAY_KEY_PREFIXES: readonly ["gk_user_", "gk_svc_", "gk_tmp_"];
|
|
16
|
+
export declare const TENANT_KEY_PREFIX = "sk_live_";
|
|
17
|
+
export declare const PAT_KEY_PREFIX = "dobby_pat_";
|
|
18
|
+
export type KeyType = "gateway" | "tenant" | "pat" | "unknown" | "none";
|
|
19
|
+
/** Classify an API key / bearer token by prefix into its key family. */
|
|
20
|
+
export declare function classifyKeyType(key: string | undefined | null): KeyType;
|
|
21
|
+
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/lib/consts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,6CAA8C,CAAC;AAChF,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAExE,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAMvE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for the Dobby MCP external server.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Canonical production API host for the Dobby platform.
|
|
6
|
+
* Single source of truth for the default DOBBY_API_URL used by the client
|
|
7
|
+
* and every connector generator, to prevent host drift.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_API_URL = "https://dobby-ai.com";
|
|
10
|
+
/**
|
|
11
|
+
* Issued-key prefixes, the single source of truth for classifying a
|
|
12
|
+
* DOBBY_API_KEY / bearer token into what it can do. Reused by the `doctor`
|
|
13
|
+
* preflight and the `whoami` tool so both agree on key semantics.
|
|
14
|
+
*/
|
|
15
|
+
export const GATEWAY_KEY_PREFIXES = ["gk_user_", "gk_svc_", "gk_tmp_"];
|
|
16
|
+
export const TENANT_KEY_PREFIX = "sk_live_";
|
|
17
|
+
export const PAT_KEY_PREFIX = "dobby_pat_";
|
|
18
|
+
/** Classify an API key / bearer token by prefix into its key family. */
|
|
19
|
+
export function classifyKeyType(key) {
|
|
20
|
+
if (!key)
|
|
21
|
+
return "none";
|
|
22
|
+
if (GATEWAY_KEY_PREFIXES.some((p) => key.startsWith(p)))
|
|
23
|
+
return "gateway";
|
|
24
|
+
if (key.startsWith(TENANT_KEY_PREFIX))
|
|
25
|
+
return "tenant";
|
|
26
|
+
if (key.startsWith(PAT_KEY_PREFIX))
|
|
27
|
+
return "pat";
|
|
28
|
+
return "unknown";
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/lib/consts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAI3C,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,GAA8B;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC;IACxB,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvD,IAAI,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -3,11 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Client for communicating with the Dobby API from the MCP server.
|
|
5
5
|
*/
|
|
6
|
-
import { z } from
|
|
6
|
+
import { z } from "zod";
|
|
7
7
|
export interface DobbyClientConfig {
|
|
8
8
|
apiUrl: string;
|
|
9
9
|
apiKey: string;
|
|
10
10
|
tenantId: string;
|
|
11
|
+
organizationId?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Static gateway key (gk_*) for gateway-scoped endpoints — STDIO mode
|
|
14
|
+
* (DOBBY_GATEWAY_KEY, or auto-detected when the API key is itself gk_*).
|
|
15
|
+
*/
|
|
16
|
+
gatewayKey?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Lazy gateway-key provider — HTTP mode. Resolves a tenant+user-bound
|
|
19
|
+
* gk_tmp_* key server-side from the session token (memoized per session by
|
|
20
|
+
* the caller). Takes precedence over `gatewayKey`.
|
|
21
|
+
*/
|
|
22
|
+
getGatewayKey?: () => Promise<string | undefined>;
|
|
11
23
|
}
|
|
12
24
|
export declare const TaskSchema: z.ZodObject<{
|
|
13
25
|
task_id: z.ZodString;
|
|
@@ -22,24 +34,24 @@ export declare const TaskSchema: z.ZodObject<{
|
|
|
22
34
|
branch_name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
23
35
|
result_summary: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
24
36
|
}, "strip", z.ZodTypeAny, {
|
|
37
|
+
task_id: string;
|
|
25
38
|
tenant_id: string;
|
|
39
|
+
title: string;
|
|
26
40
|
description: string | null;
|
|
41
|
+
status: "pending" | "in_progress" | "completed" | "failed" | "cancelled";
|
|
27
42
|
priority: "high" | "medium" | "low" | null;
|
|
28
|
-
title: string;
|
|
29
|
-
status: "completed" | "failed" | "cancelled" | "pending" | "in_progress";
|
|
30
|
-
task_id: string;
|
|
31
43
|
created_at: string;
|
|
32
44
|
updated_at: string;
|
|
33
45
|
pr_url?: string | null | undefined;
|
|
34
46
|
branch_name?: string | null | undefined;
|
|
35
47
|
result_summary?: string | null | undefined;
|
|
36
48
|
}, {
|
|
49
|
+
task_id: string;
|
|
37
50
|
tenant_id: string;
|
|
51
|
+
title: string;
|
|
38
52
|
description: string | null;
|
|
53
|
+
status: "pending" | "in_progress" | "completed" | "failed" | "cancelled";
|
|
39
54
|
priority: "high" | "medium" | "low" | null;
|
|
40
|
-
title: string;
|
|
41
|
-
status: "completed" | "failed" | "cancelled" | "pending" | "in_progress";
|
|
42
|
-
task_id: string;
|
|
43
55
|
created_at: string;
|
|
44
56
|
updated_at: string;
|
|
45
57
|
pr_url?: string | null | undefined;
|
|
@@ -56,54 +68,54 @@ export declare const MessageSchema: z.ZodObject<{
|
|
|
56
68
|
name: z.ZodString;
|
|
57
69
|
}, "strip", z.ZodTypeAny, {
|
|
58
70
|
type: "user" | "agent" | "system";
|
|
59
|
-
name: string;
|
|
60
71
|
id: string;
|
|
72
|
+
name: string;
|
|
61
73
|
}, {
|
|
62
74
|
type: "user" | "agent" | "system";
|
|
63
|
-
name: string;
|
|
64
75
|
id: string;
|
|
76
|
+
name: string;
|
|
65
77
|
}>;
|
|
66
78
|
message: z.ZodObject<{
|
|
67
79
|
type: z.ZodString;
|
|
68
80
|
content: z.ZodString;
|
|
69
81
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
70
82
|
}, "strip", z.ZodTypeAny, {
|
|
71
|
-
content: string;
|
|
72
83
|
type: string;
|
|
84
|
+
content: string;
|
|
73
85
|
metadata?: Record<string, any> | undefined;
|
|
74
86
|
}, {
|
|
75
|
-
content: string;
|
|
76
87
|
type: string;
|
|
88
|
+
content: string;
|
|
77
89
|
metadata?: Record<string, any> | undefined;
|
|
78
90
|
}>;
|
|
79
91
|
created_at: z.ZodString;
|
|
80
92
|
}, "strip", z.ZodTypeAny, {
|
|
81
|
-
id: string;
|
|
82
93
|
task_id: string;
|
|
83
94
|
message: {
|
|
84
|
-
content: string;
|
|
85
95
|
type: string;
|
|
96
|
+
content: string;
|
|
86
97
|
metadata?: Record<string, any> | undefined;
|
|
87
98
|
};
|
|
88
99
|
created_at: string;
|
|
100
|
+
id: string;
|
|
89
101
|
sender: {
|
|
90
102
|
type: "user" | "agent" | "system";
|
|
91
|
-
name: string;
|
|
92
103
|
id: string;
|
|
104
|
+
name: string;
|
|
93
105
|
};
|
|
94
106
|
}, {
|
|
95
|
-
id: string;
|
|
96
107
|
task_id: string;
|
|
97
108
|
message: {
|
|
98
|
-
content: string;
|
|
99
109
|
type: string;
|
|
110
|
+
content: string;
|
|
100
111
|
metadata?: Record<string, any> | undefined;
|
|
101
112
|
};
|
|
102
113
|
created_at: string;
|
|
114
|
+
id: string;
|
|
103
115
|
sender: {
|
|
104
116
|
type: "user" | "agent" | "system";
|
|
105
|
-
name: string;
|
|
106
117
|
id: string;
|
|
118
|
+
name: string;
|
|
107
119
|
};
|
|
108
120
|
}>;
|
|
109
121
|
export type Message = z.infer<typeof MessageSchema>;
|
|
@@ -117,20 +129,20 @@ export declare const ApprovalSchema: z.ZodObject<{
|
|
|
117
129
|
created_at: z.ZodString;
|
|
118
130
|
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
119
131
|
}, "strip", z.ZodTypeAny, {
|
|
132
|
+
task_id: string;
|
|
120
133
|
description: string;
|
|
121
134
|
status: "pending" | "approved" | "rejected";
|
|
122
|
-
id: string;
|
|
123
|
-
task_id: string;
|
|
124
135
|
created_at: string;
|
|
136
|
+
id: string;
|
|
125
137
|
approval_type: string;
|
|
126
138
|
requested_by: string;
|
|
127
139
|
metadata?: Record<string, any> | undefined;
|
|
128
140
|
}, {
|
|
141
|
+
task_id: string;
|
|
129
142
|
description: string;
|
|
130
143
|
status: "pending" | "approved" | "rejected";
|
|
131
|
-
id: string;
|
|
132
|
-
task_id: string;
|
|
133
144
|
created_at: string;
|
|
145
|
+
id: string;
|
|
134
146
|
approval_type: string;
|
|
135
147
|
requested_by: string;
|
|
136
148
|
metadata?: Record<string, any> | undefined;
|
|
@@ -145,10 +157,25 @@ export declare class DobbyClient {
|
|
|
145
157
|
get apiKey(): string;
|
|
146
158
|
/** Tenant ID for scoped requests */
|
|
147
159
|
get tenantId(): string;
|
|
160
|
+
/** Organization ID for org-scoped requests (e.g. memory stores) */
|
|
161
|
+
get organizationId(): string | undefined;
|
|
162
|
+
/** Static gateway key (gk_*), if configured — STDIO mode */
|
|
163
|
+
get gatewayKey(): string | undefined;
|
|
164
|
+
/**
|
|
165
|
+
* Bearer credential for GATEWAY-scoped endpoints (routes guarded by
|
|
166
|
+
* authenticateGatewayRequest hard-require a gk_* key — the tenant apiKey is
|
|
167
|
+
* NOT one for OAuth/sk_live_ sessions).
|
|
168
|
+
*
|
|
169
|
+
* Precedence: lazy provider (HTTP mode, resolved server-side from the
|
|
170
|
+
* session token) > static gatewayKey (STDIO) > apiKey (legacy fallback —
|
|
171
|
+
* only works when the API key is itself a gk_*).
|
|
172
|
+
*/
|
|
173
|
+
gatewayBearer(): Promise<string>;
|
|
148
174
|
private fetch;
|
|
149
175
|
request<T = any>(endpoint: string, options?: RequestInit): Promise<T>;
|
|
150
176
|
get<T = any>(endpoint: string): Promise<T>;
|
|
151
177
|
post<T = any>(endpoint: string, body?: unknown): Promise<T>;
|
|
178
|
+
delete<T = any>(endpoint: string): Promise<T>;
|
|
152
179
|
listTasks(options?: {
|
|
153
180
|
status?: string;
|
|
154
181
|
priority?: string;
|
|
@@ -159,7 +186,7 @@ export declare class DobbyClient {
|
|
|
159
186
|
createTask(data: {
|
|
160
187
|
title: string;
|
|
161
188
|
description?: string;
|
|
162
|
-
priority?:
|
|
189
|
+
priority?: "high" | "medium" | "low";
|
|
163
190
|
link_to_task_id?: string;
|
|
164
191
|
}): Promise<{
|
|
165
192
|
task_id: string;
|
|
@@ -200,7 +227,7 @@ export declare class DobbyClient {
|
|
|
200
227
|
message?: string;
|
|
201
228
|
}>;
|
|
202
229
|
listServices(options?: {
|
|
203
|
-
category?:
|
|
230
|
+
category?: "all" | "llm" | "mcp_tools" | "mcp_servers" | "managed_services";
|
|
204
231
|
}): Promise<any>;
|
|
205
232
|
createSchedule(data: {
|
|
206
233
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dobby-client.d.ts","sourceRoot":"","sources":["../../src/lib/dobby-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"dobby-client.d.ts","sourceRoot":"","sources":["../../src/lib/dobby-client.ts"],"names":[],"mappings":"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"}
|