@nodetool-ai/websocket 0.8.2 → 0.8.3
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/dist/.nodetool-build-stamp +1 -1
- package/dist/chat-turn-registry.d.ts +2 -1
- package/dist/chat-turn-registry.d.ts.map +1 -1
- package/dist/chat-turn-registry.js +8 -1
- package/dist/chat-turn-registry.js.map +1 -1
- package/dist/collection-api.d.ts.map +1 -1
- package/dist/collection-api.js +3 -5
- package/dist/collection-api.js.map +1 -1
- package/dist/custom-providers.d.ts.map +1 -1
- package/dist/custom-providers.js +6 -1
- package/dist/custom-providers.js.map +1 -1
- package/dist/example-workflows.d.ts.map +1 -1
- package/dist/example-workflows.js +6 -0
- package/dist/example-workflows.js.map +1 -1
- package/dist/fake-runtime.d.ts +41 -6
- package/dist/fake-runtime.d.ts.map +1 -1
- package/dist/fake-runtime.js +207 -13
- package/dist/fake-runtime.js.map +1 -1
- package/dist/file-api.d.ts.map +1 -1
- package/dist/file-api.js +6 -8
- package/dist/file-api.js.map +1 -1
- package/dist/generation-recovery.d.ts.map +1 -1
- package/dist/generation-recovery.js +7 -4
- package/dist/generation-recovery.js.map +1 -1
- package/dist/headless-job-runner.d.ts.map +1 -1
- package/dist/headless-job-runner.js +5 -1
- package/dist/headless-job-runner.js.map +1 -1
- package/dist/http-api.d.ts +3 -1
- package/dist/http-api.d.ts.map +1 -1
- package/dist/http-api.js +51 -9
- package/dist/http-api.js.map +1 -1
- package/dist/http-body-schemas.d.ts +2 -0
- package/dist/http-body-schemas.d.ts.map +1 -1
- package/dist/http-body-schemas.js +8 -1
- package/dist/http-body-schemas.js.map +1 -1
- package/dist/lib/admin.d.ts +7 -0
- package/dist/lib/admin.d.ts.map +1 -0
- package/dist/lib/admin.js +20 -0
- package/dist/lib/admin.js.map +1 -0
- package/dist/lib/app-instances-service.d.ts +35 -0
- package/dist/lib/app-instances-service.d.ts.map +1 -1
- package/dist/lib/app-instances-service.js +3 -4
- package/dist/lib/app-instances-service.js.map +1 -1
- package/dist/lib/app-project-export.d.ts +12 -0
- package/dist/lib/app-project-export.d.ts.map +1 -0
- package/dist/lib/app-project-export.js +42 -0
- package/dist/lib/app-project-export.js.map +1 -0
- package/dist/lib/applications-service.d.ts.map +1 -1
- package/dist/lib/applications-service.js +7 -2
- package/dist/lib/applications-service.js.map +1 -1
- package/dist/lib/asset-export.d.ts +6 -2
- package/dist/lib/asset-export.d.ts.map +1 -1
- package/dist/lib/asset-export.js +15 -7
- package/dist/lib/asset-export.js.map +1 -1
- package/dist/lib/asset-response.d.ts.map +1 -1
- package/dist/lib/asset-response.js +1 -0
- package/dist/lib/asset-response.js.map +1 -1
- package/dist/lib/cloud-profile.d.ts +10 -0
- package/dist/lib/cloud-profile.d.ts.map +1 -0
- package/dist/lib/cloud-profile.js +13 -0
- package/dist/lib/cloud-profile.js.map +1 -0
- package/dist/lib/http-user-id.d.ts +2 -0
- package/dist/lib/http-user-id.d.ts.map +1 -0
- package/dist/lib/http-user-id.js +4 -0
- package/dist/lib/http-user-id.js.map +1 -0
- package/dist/lib/json-body.d.ts +11 -0
- package/dist/lib/json-body.d.ts.map +1 -0
- package/dist/lib/json-body.js +13 -0
- package/dist/lib/json-body.js.map +1 -0
- package/dist/lib/public-routes.d.ts +15 -0
- package/dist/lib/public-routes.d.ts.map +1 -1
- package/dist/lib/public-routes.js +27 -0
- package/dist/lib/public-routes.js.map +1 -1
- package/dist/lib/public-workflow-share.d.ts +12 -1
- package/dist/lib/public-workflow-share.d.ts.map +1 -1
- package/dist/lib/public-workflow-share.js +45 -2
- package/dist/lib/public-workflow-share.js.map +1 -1
- package/dist/lib/python-metadata-roots.d.ts +27 -0
- package/dist/lib/python-metadata-roots.d.ts.map +1 -0
- package/dist/lib/python-metadata-roots.js +92 -0
- package/dist/lib/python-metadata-roots.js.map +1 -0
- package/dist/lib/runtime-detection.d.ts +1 -1
- package/dist/lib/runtime-detection.d.ts.map +1 -1
- package/dist/lib/runtime-detection.js +2 -1
- package/dist/lib/runtime-detection.js.map +1 -1
- package/dist/lib/server-auth-token.d.ts +18 -0
- package/dist/lib/server-auth-token.d.ts.map +1 -0
- package/dist/lib/server-auth-token.js +28 -0
- package/dist/lib/server-auth-token.js.map +1 -0
- package/dist/lib/timeline-bundle.d.ts +11 -0
- package/dist/lib/timeline-bundle.d.ts.map +1 -1
- package/dist/lib/timeline-bundle.js +22 -6
- package/dist/lib/timeline-bundle.js.map +1 -1
- package/dist/lib/timeline-media-export.d.ts +18 -0
- package/dist/lib/timeline-media-export.d.ts.map +1 -0
- package/dist/lib/timeline-media-export.js +66 -0
- package/dist/lib/timeline-media-export.js.map +1 -0
- package/dist/lib/timeline-premiere-import.d.ts +24 -0
- package/dist/lib/timeline-premiere-import.d.ts.map +1 -0
- package/dist/lib/timeline-premiere-import.js +102 -0
- package/dist/lib/timeline-premiere-import.js.map +1 -0
- package/dist/lib/timeline-premiere.d.ts +38 -0
- package/dist/lib/timeline-premiere.d.ts.map +1 -0
- package/dist/lib/timeline-premiere.js +87 -0
- package/dist/lib/timeline-premiere.js.map +1 -0
- package/dist/mcp-agent-tools.d.ts.map +1 -1
- package/dist/mcp-agent-tools.js +2 -0
- package/dist/mcp-agent-tools.js.map +1 -1
- package/dist/mcp-server.d.ts +7 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +163 -16
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-skill-prompts.d.ts +23 -0
- package/dist/mcp-skill-prompts.d.ts.map +1 -0
- package/dist/mcp-skill-prompts.js +91 -0
- package/dist/mcp-skill-prompts.js.map +1 -0
- package/dist/mcp-tool-deps.d.ts.map +1 -1
- package/dist/mcp-tool-deps.js +8 -1
- package/dist/mcp-tool-deps.js.map +1 -1
- package/dist/models-api.d.ts.map +1 -1
- package/dist/models-api.js +6 -2
- package/dist/models-api.js.map +1 -1
- package/dist/oauth-api.d.ts.map +1 -1
- package/dist/oauth-api.js +45 -23
- package/dist/oauth-api.js.map +1 -1
- package/dist/openai-api.d.ts.map +1 -1
- package/dist/openai-api.js +10 -2
- package/dist/openai-api.js.map +1 -1
- package/dist/plugins/websocket.d.ts.map +1 -1
- package/dist/plugins/websocket.js +7 -2
- package/dist/plugins/websocket.js.map +1 -1
- package/dist/routes/applications.d.ts +1 -0
- package/dist/routes/applications.d.ts.map +1 -1
- package/dist/routes/applications.js +24 -0
- package/dist/routes/applications.js.map +1 -1
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/assets.js +31 -41
- package/dist/routes/assets.js.map +1 -1
- package/dist/routes/config.d.ts.map +1 -1
- package/dist/routes/config.js +6 -0
- package/dist/routes/config.js.map +1 -1
- package/dist/routes/documents.d.ts.map +1 -1
- package/dist/routes/documents.js +24 -0
- package/dist/routes/documents.js.map +1 -1
- package/dist/routes/fal-pricing-estimate.d.ts.map +1 -1
- package/dist/routes/fal-pricing-estimate.js +2 -0
- package/dist/routes/fal-pricing-estimate.js.map +1 -1
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +2 -0
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/games.d.ts +38 -0
- package/dist/routes/games.d.ts.map +1 -0
- package/dist/routes/games.js +158 -0
- package/dist/routes/games.js.map +1 -0
- package/dist/routes/integrations.d.ts.map +1 -1
- package/dist/routes/integrations.js +22 -26
- package/dist/routes/integrations.js.map +1 -1
- package/dist/routes/js-scripts.d.ts +1 -1
- package/dist/routes/js-scripts.d.ts.map +1 -1
- package/dist/routes/js-scripts.js +1 -1
- package/dist/routes/js-scripts.js.map +1 -1
- package/dist/routes/nodes.d.ts.map +1 -1
- package/dist/routes/nodes.js +2 -0
- package/dist/routes/nodes.js.map +1 -1
- package/dist/routes/storage.d.ts.map +1 -1
- package/dist/routes/storage.js +2 -0
- package/dist/routes/storage.js.map +1 -1
- package/dist/routes/storyboards.d.ts.map +1 -1
- package/dist/routes/storyboards.js +6 -3
- package/dist/routes/storyboards.js.map +1 -1
- package/dist/routes/timelines.d.ts +8 -4
- package/dist/routes/timelines.d.ts.map +1 -1
- package/dist/routes/timelines.js +209 -16
- package/dist/routes/timelines.js.map +1 -1
- package/dist/screenshot-docs-seed.d.ts +24 -0
- package/dist/screenshot-docs-seed.d.ts.map +1 -0
- package/dist/screenshot-docs-seed.js +414 -0
- package/dist/screenshot-docs-seed.js.map +1 -0
- package/dist/screenshot-projects.d.ts.map +1 -1
- package/dist/screenshot-projects.js +9 -9
- package/dist/screenshot-projects.js.map +1 -1
- package/dist/screenshot-server.js +111 -16
- package/dist/screenshot-server.js.map +1 -1
- package/dist/server.js +87 -90
- package/dist/server.js.map +1 -1
- package/dist/session/chat-turn.d.ts +10 -0
- package/dist/session/chat-turn.d.ts.map +1 -1
- package/dist/session/chat-turn.js +68 -10
- package/dist/session/chat-turn.js.map +1 -1
- package/dist/session/commands.d.ts +14 -0
- package/dist/session/commands.d.ts.map +1 -1
- package/dist/session/commands.js +113 -14
- package/dist/session/commands.js.map +1 -1
- package/dist/session/inference.d.ts +25 -2
- package/dist/session/inference.d.ts.map +1 -1
- package/dist/session/inference.js +86 -8
- package/dist/session/inference.js.map +1 -1
- package/dist/session/job-execution.d.ts +0 -1
- package/dist/session/job-execution.d.ts.map +1 -1
- package/dist/session/job-execution.js +34 -37
- package/dist/session/job-execution.js.map +1 -1
- package/dist/storage-api.d.ts +0 -4
- package/dist/storage-api.d.ts.map +1 -1
- package/dist/storage-api.js +3 -26
- package/dist/storage-api.js.map +1 -1
- package/dist/test-ui-server.d.ts +11 -0
- package/dist/test-ui-server.d.ts.map +1 -1
- package/dist/test-ui-server.js +63 -3
- package/dist/test-ui-server.js.map +1 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +24 -4
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/triggers/file-watch.d.ts.map +1 -1
- package/dist/triggers/file-watch.js +35 -19
- package/dist/triggers/file-watch.js.map +1 -1
- package/dist/triggers/scheduler.d.ts.map +1 -1
- package/dist/triggers/scheduler.js +7 -5
- package/dist/triggers/scheduler.js.map +1 -1
- package/dist/trpc/error-formatter.d.ts.map +1 -1
- package/dist/trpc/error-formatter.js +2 -1
- package/dist/trpc/error-formatter.js.map +1 -1
- package/dist/trpc/routers/app-instances.d.ts +63 -0
- package/dist/trpc/routers/app-instances.d.ts.map +1 -1
- package/dist/trpc/routers/app-runs.d.ts +28 -0
- package/dist/trpc/routers/app-runs.d.ts.map +1 -1
- package/dist/trpc/routers/applications.d.ts +7 -0
- package/dist/trpc/routers/applications.d.ts.map +1 -1
- package/dist/trpc/routers/assets.d.ts +8 -0
- package/dist/trpc/routers/assets.d.ts.map +1 -1
- package/dist/trpc/routers/assets.js +16 -5
- package/dist/trpc/routers/assets.js.map +1 -1
- package/dist/trpc/routers/collections.d.ts.map +1 -1
- package/dist/trpc/routers/collections.js +16 -10
- package/dist/trpc/routers/collections.js.map +1 -1
- package/dist/trpc/routers/credits.d.ts.map +1 -1
- package/dist/trpc/routers/credits.js +11 -1
- package/dist/trpc/routers/credits.js.map +1 -1
- package/dist/trpc/routers/extension.d.ts +1 -1
- package/dist/trpc/routers/extension.d.ts.map +1 -1
- package/dist/trpc/routers/extension.js +8 -4
- package/dist/trpc/routers/extension.js.map +1 -1
- package/dist/trpc/routers/gameDraftHistory.d.ts +1 -2
- package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -1
- package/dist/trpc/routers/gameDraftHistory.js +1 -1
- package/dist/trpc/routers/gameDraftHistory.js.map +1 -1
- package/dist/trpc/routers/games.d.ts +40822 -5154
- package/dist/trpc/routers/games.d.ts.map +1 -1
- package/dist/trpc/routers/games.js +317 -140
- package/dist/trpc/routers/games.js.map +1 -1
- package/dist/trpc/routers/jobs.d.ts +7 -0
- package/dist/trpc/routers/jobs.d.ts.map +1 -1
- package/dist/trpc/routers/jobs.js +5 -3
- package/dist/trpc/routers/jobs.js.map +1 -1
- package/dist/trpc/routers/js-scripts.d.ts.map +1 -1
- package/dist/trpc/routers/js-scripts.js +18 -2
- package/dist/trpc/routers/js-scripts.js.map +1 -1
- package/dist/trpc/routers/messages.d.ts +10 -0
- package/dist/trpc/routers/messages.d.ts.map +1 -1
- package/dist/trpc/routers/messages.js +16 -2
- package/dist/trpc/routers/messages.js.map +1 -1
- package/dist/trpc/routers/models.d.ts.map +1 -1
- package/dist/trpc/routers/models.js +20 -30
- package/dist/trpc/routers/models.js.map +1 -1
- package/dist/trpc/routers/packs.d.ts.map +1 -1
- package/dist/trpc/routers/packs.js +18 -4
- package/dist/trpc/routers/packs.js.map +1 -1
- package/dist/trpc/routers/projects.d.ts +66 -2
- package/dist/trpc/routers/projects.d.ts.map +1 -1
- package/dist/trpc/routers/projects.js +19 -2
- package/dist/trpc/routers/projects.js.map +1 -1
- package/dist/trpc/routers/settings.d.ts.map +1 -1
- package/dist/trpc/routers/settings.js +30 -5
- package/dist/trpc/routers/settings.js.map +1 -1
- package/dist/trpc/routers/sketch.d.ts +30 -0
- package/dist/trpc/routers/sketch.d.ts.map +1 -1
- package/dist/trpc/routers/sketch.js +2 -2
- package/dist/trpc/routers/sketch.js.map +1 -1
- package/dist/trpc/routers/storyboards.d.ts +171 -1
- package/dist/trpc/routers/storyboards.d.ts.map +1 -1
- package/dist/trpc/routers/storyboards.js +8 -5
- package/dist/trpc/routers/storyboards.js.map +1 -1
- package/dist/trpc/routers/threads.d.ts.map +1 -1
- package/dist/trpc/routers/threads.js +8 -2
- package/dist/trpc/routers/threads.js.map +1 -1
- package/dist/trpc/routers/timeline.d.ts +15 -0
- package/dist/trpc/routers/timeline.d.ts.map +1 -1
- package/dist/trpc/routers/timeline.js +15 -2
- package/dist/trpc/routers/timeline.js.map +1 -1
- package/dist/trpc/routers/triggers.d.ts.map +1 -1
- package/dist/trpc/routers/triggers.js +18 -3
- package/dist/trpc/routers/triggers.js.map +1 -1
- package/dist/trpc/routers/users.d.ts +3 -2
- package/dist/trpc/routers/users.d.ts.map +1 -1
- package/dist/trpc/routers/users.js +25 -27
- package/dist/trpc/routers/users.js.map +1 -1
- package/dist/trpc/routers/worker.d.ts.map +1 -1
- package/dist/trpc/routers/worker.js +37 -14
- package/dist/trpc/routers/worker.js.map +1 -1
- package/dist/trpc/routers/workflows.d.ts +146 -0
- package/dist/trpc/routers/workflows.d.ts.map +1 -1
- package/dist/trpc/routers/workflows.js +52 -13
- package/dist/trpc/routers/workflows.js.map +1 -1
- package/dist/trpc/sandbox-coverage.d.ts.map +1 -1
- package/dist/trpc/sandbox-coverage.js +29 -0
- package/dist/trpc/sandbox-coverage.js.map +1 -1
- package/dist/websocket-client-session.d.ts +2 -2
- package/dist/websocket-client-session.d.ts.map +1 -1
- package/dist/websocket-client-session.js +9 -3
- package/dist/websocket-client-session.js.map +1 -1
- package/dist/worker-settings-env.d.ts +23 -0
- package/dist/worker-settings-env.d.ts.map +1 -0
- package/dist/worker-settings-env.js +47 -0
- package/dist/worker-settings-env.js.map +1 -0
- package/dist/workflow-interface-service.d.ts +7 -0
- package/dist/workflow-interface-service.d.ts.map +1 -1
- package/package.json +44 -42
package/dist/mcp-server.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
9
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
10
|
-
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
10
|
+
import { StreamableHTTPClientTransport, StreamableHTTPError } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
11
11
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
12
12
|
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
13
|
+
import { ErrorCode, isInitializedNotification, isInitializeRequest, isJSONRPCRequest, isJSONRPCResultResponse } from "@modelcontextprotocol/sdk/types.js";
|
|
14
|
+
import { Agent as UndiciAgent } from "undici";
|
|
13
15
|
import { MCP_GUEST_CONTRACT } from "@nodetool-ai/agents";
|
|
14
16
|
import { createLogger } from "@nodetool-ai/config";
|
|
15
17
|
import { registerAgentMcpTools } from "./mcp-agent-tools.js";
|
|
@@ -70,33 +72,152 @@ export async function forwardMcpStdioToLocalServer(url = getLocalMcpServerUrl(),
|
|
|
70
72
|
}
|
|
71
73
|
await probe.close();
|
|
72
74
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
// The client's own handshake, kept so a replacement session can replay it.
|
|
76
|
+
let initializeRequest;
|
|
77
|
+
let initializedNotification;
|
|
78
|
+
// While a replacement session replays `initialize`, its response belongs to
|
|
79
|
+
// the forwarder, not to the client, which already received one.
|
|
80
|
+
let replayResponse;
|
|
81
|
+
const openTransport = () => {
|
|
82
|
+
const transport = new StreamableHTTPClientTransport(endpoint, {
|
|
83
|
+
fetch: fetchWithoutTimeouts
|
|
84
|
+
});
|
|
85
|
+
transport.onmessage = (message) => {
|
|
86
|
+
if (isJSONRPCResultResponse(message) && "protocolVersion" in message.result) {
|
|
87
|
+
const version = message.result.protocolVersion;
|
|
88
|
+
if (typeof version === "string")
|
|
89
|
+
transport.setProtocolVersion(version);
|
|
90
|
+
}
|
|
91
|
+
if (replayResponse?.transport === transport &&
|
|
92
|
+
"id" in message &&
|
|
93
|
+
message.id === replayResponse.id) {
|
|
94
|
+
replayResponse.resolve();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
void stdio.send(message);
|
|
98
|
+
};
|
|
99
|
+
transport.onerror = (error) => {
|
|
100
|
+
log.warn("Local MCP HTTP transport failed", { error: error.message });
|
|
101
|
+
};
|
|
102
|
+
return transport;
|
|
103
|
+
};
|
|
104
|
+
const replayHandshake = async (transport) => {
|
|
105
|
+
if (!initializeRequest) {
|
|
106
|
+
throw new Error("The client never initialized the MCP session");
|
|
107
|
+
}
|
|
108
|
+
const request = initializeRequest;
|
|
109
|
+
let timer;
|
|
110
|
+
try {
|
|
111
|
+
await Promise.race([
|
|
112
|
+
new Promise((resolve, reject) => {
|
|
113
|
+
replayResponse = { transport, id: request.id, resolve };
|
|
114
|
+
transport.send(request).catch(reject);
|
|
115
|
+
}),
|
|
116
|
+
new Promise((_, reject) => {
|
|
117
|
+
timer = setTimeout(() => reject(new Error("Replaying the MCP handshake timed out")), MCP_FORWARDER_HANDSHAKE_TIMEOUT_MS);
|
|
118
|
+
})
|
|
119
|
+
]);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
clearTimeout(timer);
|
|
123
|
+
replayResponse = undefined;
|
|
124
|
+
}
|
|
125
|
+
if (initializedNotification) {
|
|
126
|
+
await transport.send(initializedNotification);
|
|
79
127
|
}
|
|
80
|
-
void stdio.send(message);
|
|
81
128
|
};
|
|
82
|
-
http
|
|
83
|
-
|
|
129
|
+
let http = openTransport();
|
|
130
|
+
let reconnection;
|
|
131
|
+
// One replacement session for every request that failed on the same one.
|
|
132
|
+
// A restarting server refuses connections for a few seconds, so retry those.
|
|
133
|
+
const reconnect = (failed) => {
|
|
134
|
+
if (http !== failed)
|
|
135
|
+
return reconnection ?? Promise.resolve();
|
|
136
|
+
reconnection ??= (async () => {
|
|
137
|
+
void failed.close().catch(() => undefined);
|
|
138
|
+
const deadline = Date.now() + MCP_FORWARDER_RECONNECT_WINDOW_MS;
|
|
139
|
+
for (;;) {
|
|
140
|
+
const next = openTransport();
|
|
141
|
+
try {
|
|
142
|
+
await next.start();
|
|
143
|
+
await replayHandshake(next);
|
|
144
|
+
http = next;
|
|
145
|
+
log.info("Reopened the local MCP session");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
await next.close().catch(() => undefined);
|
|
150
|
+
if (classifyForwardFailure(error) !== "unreachable" ||
|
|
151
|
+
Date.now() >= deadline) {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
await new Promise((resolve) => setTimeout(resolve, MCP_FORWARDER_RECONNECT_DELAY_MS));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
})().finally(() => {
|
|
158
|
+
reconnection = undefined;
|
|
159
|
+
});
|
|
160
|
+
return reconnection;
|
|
161
|
+
};
|
|
162
|
+
// A request is resent only when the server provably never ran it: its
|
|
163
|
+
// session was gone (404) or nothing accepted the connection. A connection
|
|
164
|
+
// that drops mid-call may have run the tool already, so that request fails.
|
|
165
|
+
const forward = async (message) => {
|
|
166
|
+
await reconnection?.catch(() => undefined);
|
|
167
|
+
const transport = http;
|
|
168
|
+
try {
|
|
169
|
+
await transport.send(message);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
if (!initializeRequest ||
|
|
173
|
+
isInitializeRequest(message) ||
|
|
174
|
+
classifyForwardFailure(error) === "other") {
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
log.info("Local MCP session lost; reconnecting", {
|
|
178
|
+
error: error instanceof Error ? error.message : String(error)
|
|
179
|
+
});
|
|
180
|
+
await reconnect(transport);
|
|
181
|
+
await http.send(message);
|
|
182
|
+
}
|
|
84
183
|
};
|
|
85
184
|
let initialization = Promise.resolve();
|
|
86
185
|
stdio.onmessage = (message) => {
|
|
87
|
-
|
|
88
|
-
|
|
186
|
+
if (isInitializeRequest(message)) {
|
|
187
|
+
initializeRequest = message;
|
|
188
|
+
}
|
|
189
|
+
else if (isInitializedNotification(message)) {
|
|
190
|
+
initializedNotification = message;
|
|
191
|
+
}
|
|
192
|
+
const send = initialization.then(() => forward(message));
|
|
193
|
+
if (isInitializeRequest(message)) {
|
|
89
194
|
initialization = send;
|
|
90
195
|
}
|
|
91
196
|
void send.catch((error) => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
197
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
198
|
+
log.warn("Forwarding MCP request failed", { error: reason });
|
|
199
|
+
// Without a session there is nothing to keep open.
|
|
200
|
+
if (isInitializeRequest(message)) {
|
|
201
|
+
void stdio.close();
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Fail this one request and keep stdio open: the next request
|
|
205
|
+
// reconnects once the local server is back.
|
|
206
|
+
if (isJSONRPCRequest(message)) {
|
|
207
|
+
void stdio.send({
|
|
208
|
+
jsonrpc: "2.0",
|
|
209
|
+
id: message.id,
|
|
210
|
+
error: {
|
|
211
|
+
code: ErrorCode.ConnectionClosed,
|
|
212
|
+
message: `NodeTool server request failed: ${reason}`
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
96
216
|
});
|
|
97
217
|
};
|
|
98
218
|
stdio.onclose = () => {
|
|
99
219
|
void (async () => {
|
|
220
|
+
await reconnection?.catch(() => undefined);
|
|
100
221
|
if (http.sessionId) {
|
|
101
222
|
await http.terminateSession().catch(() => undefined);
|
|
102
223
|
}
|
|
@@ -107,6 +228,32 @@ export async function forwardMcpStdioToLocalServer(url = getLocalMcpServerUrl(),
|
|
|
107
228
|
await stdio.start();
|
|
108
229
|
return true;
|
|
109
230
|
}
|
|
231
|
+
/** Time a restarted local server gets to accept connections again. */
|
|
232
|
+
export const MCP_FORWARDER_RECONNECT_WINDOW_MS = 30_000;
|
|
233
|
+
const MCP_FORWARDER_RECONNECT_DELAY_MS = 500;
|
|
234
|
+
const MCP_FORWARDER_HANDSHAKE_TIMEOUT_MS = 10_000;
|
|
235
|
+
/**
|
|
236
|
+
* The mount answers with JSON (`enableJsonResponse`), so response headers
|
|
237
|
+
* arrive only when the tool finishes. undici's default 300 s headers timeout
|
|
238
|
+
* would fail every call longer than five minutes.
|
|
239
|
+
*/
|
|
240
|
+
const noTimeoutDispatcher = new UndiciAgent({ headersTimeout: 0, bodyTimeout: 0 });
|
|
241
|
+
const fetchWithoutTimeouts = (url, init) => fetch(url, { ...init, dispatcher: noTimeoutDispatcher });
|
|
242
|
+
/**
|
|
243
|
+
* "session-lost" and "unreachable" mean the server never ran the request;
|
|
244
|
+
* "other" covers everything else, including a connection dropped mid-call.
|
|
245
|
+
*/
|
|
246
|
+
export function classifyForwardFailure(error) {
|
|
247
|
+
if (error instanceof StreamableHTTPError && error.code === 404) {
|
|
248
|
+
return "session-lost";
|
|
249
|
+
}
|
|
250
|
+
for (let current = error; current instanceof Error; current = current.cause) {
|
|
251
|
+
if (current.code === "ECONNREFUSED") {
|
|
252
|
+
return "unreachable";
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return "other";
|
|
256
|
+
}
|
|
110
257
|
/**
|
|
111
258
|
* How long an HTTP session may sit idle before it is closed. Every session
|
|
112
259
|
* holds a transport, an `McpServer`, and that session's whole tool registry,
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every skill the session's user can load, published as an MCP prompt.
|
|
3
|
+
*
|
|
4
|
+
* MCP has no system prompt, so the skill catalog the chat turn carries never
|
|
5
|
+
* reaches an MCP client, and a skill was only discoverable by writing an
|
|
6
|
+
* `execute_code` action that imports `list_skills`. A prompt is the MCP shape
|
|
7
|
+
* for "saved instructions the user picks": clients list them, and Claude Code
|
|
8
|
+
* offers each one as a slash command.
|
|
9
|
+
*
|
|
10
|
+
* Shipped skills are registered synchronously, so they are there before the
|
|
11
|
+
* client's first `prompts/list`. The user's own rows need the database, so they
|
|
12
|
+
* arrive a moment later and the SDK announces them with `list_changed`. A body
|
|
13
|
+
* is read when the prompt is requested, never cached, so an edited skill is
|
|
14
|
+
* served as it is now. Resolution matches `load_skill`: the user's row first,
|
|
15
|
+
* then the shipped skill.
|
|
16
|
+
*/
|
|
17
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
18
|
+
/**
|
|
19
|
+
* Register one prompt per skill. Returns when the user's rows are registered;
|
|
20
|
+
* the shipped skills are registered before it returns its promise.
|
|
21
|
+
*/
|
|
22
|
+
export declare function registerSkillPrompts(server: McpServer, userId: string, reservedNames: ReadonlySet<string>): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=mcp-skill-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-skill-prompts.d.ts","sourceRoot":"","sources":["../src/mcp-skill-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAwCjD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every skill the session's user can load, published as an MCP prompt.
|
|
3
|
+
*
|
|
4
|
+
* MCP has no system prompt, so the skill catalog the chat turn carries never
|
|
5
|
+
* reaches an MCP client, and a skill was only discoverable by writing an
|
|
6
|
+
* `execute_code` action that imports `list_skills`. A prompt is the MCP shape
|
|
7
|
+
* for "saved instructions the user picks": clients list them, and Claude Code
|
|
8
|
+
* offers each one as a slash command.
|
|
9
|
+
*
|
|
10
|
+
* Shipped skills are registered synchronously, so they are there before the
|
|
11
|
+
* client's first `prompts/list`. The user's own rows need the database, so they
|
|
12
|
+
* arrive a moment later and the SDK announces them with `list_changed`. A body
|
|
13
|
+
* is read when the prompt is requested, never cached, so an edited skill is
|
|
14
|
+
* served as it is now. Resolution matches `load_skill`: the user's row first,
|
|
15
|
+
* then the shipped skill.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { findSystemSkill, loadSystemSkills } from "@nodetool-ai/agents";
|
|
19
|
+
import { Skill } from "@nodetool-ai/models";
|
|
20
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
21
|
+
const log = createLogger("nodetool.websocket.mcp-skill-prompts");
|
|
22
|
+
const argsSchema = {
|
|
23
|
+
request: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("What to do with this skill. Optional.")
|
|
27
|
+
};
|
|
28
|
+
async function resolveSkill(userId, name) {
|
|
29
|
+
const row = await Skill.findByName(userId, name);
|
|
30
|
+
if (row)
|
|
31
|
+
return { name: row.name, content: row.content };
|
|
32
|
+
const shipped = findSystemSkill(name);
|
|
33
|
+
return shipped ? { name: shipped.name, content: shipped.content } : null;
|
|
34
|
+
}
|
|
35
|
+
function skillPromptText(name, content, request) {
|
|
36
|
+
const lines = [
|
|
37
|
+
`Follow the NodeTool skill "${name}" below. Act through the NodeTool MCP tools.`
|
|
38
|
+
];
|
|
39
|
+
const task = request?.trim();
|
|
40
|
+
if (task)
|
|
41
|
+
lines.push("", `Request: ${task}`);
|
|
42
|
+
lines.push("", content.trim());
|
|
43
|
+
return lines.join("\n");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register one prompt per skill. Returns when the user's rows are registered;
|
|
47
|
+
* the shipped skills are registered before it returns its promise.
|
|
48
|
+
*/
|
|
49
|
+
export function registerSkillPrompts(server, userId, reservedNames) {
|
|
50
|
+
const registered = new Map();
|
|
51
|
+
const register = (name, description) => {
|
|
52
|
+
if (reservedNames.has(name) || registered.has(name))
|
|
53
|
+
return;
|
|
54
|
+
const prompt = server.registerPrompt(name, { description, argsSchema }, async ({ request }) => {
|
|
55
|
+
const skill = await resolveSkill(userId, name);
|
|
56
|
+
if (!skill)
|
|
57
|
+
throw new Error(`No skill named "${name}".`);
|
|
58
|
+
return {
|
|
59
|
+
messages: [
|
|
60
|
+
{
|
|
61
|
+
role: "user",
|
|
62
|
+
content: {
|
|
63
|
+
type: "text",
|
|
64
|
+
text: skillPromptText(skill.name, skill.content, request)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
registered.set(name, prompt);
|
|
71
|
+
};
|
|
72
|
+
for (const skill of loadSystemSkills()) {
|
|
73
|
+
register(skill.name, skill.description);
|
|
74
|
+
}
|
|
75
|
+
return Skill.listByUser(userId).then((rows) => {
|
|
76
|
+
for (const row of rows) {
|
|
77
|
+
// A user row that holds a shipped name wins, as in `list_skills`.
|
|
78
|
+
const shadowed = registered.get(row.name);
|
|
79
|
+
if (shadowed)
|
|
80
|
+
shadowed.update({ description: row.description });
|
|
81
|
+
else
|
|
82
|
+
register(row.name, row.description);
|
|
83
|
+
}
|
|
84
|
+
}, (error) => {
|
|
85
|
+
log.warn("Could not list the user's skills for MCP prompts", {
|
|
86
|
+
userId,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error)
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=mcp-skill-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-skill-prompts.js","sourceRoot":"","sources":["../src/mcp-skill-prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-deps.d.ts","sourceRoot":"","sources":["../src/mcp-tool-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAiBvB,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,cAAmB,GAC3B,sBAAsB,
|
|
1
|
+
{"version":3,"file":"mcp-tool-deps.d.ts","sourceRoot":"","sources":["../src/mcp-tool-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAiBvB,wBAAgB,4BAA4B,CAC1C,OAAO,GAAE,cAAmB,GAC3B,sBAAsB,CAwBxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,GAAE,cAAmB,GAC3B,IAAI,CACL,qBAAqB,EACnB,UAAU,GACV,WAAW,GACX,mBAAmB,GACnB,eAAe,GACf,qBAAqB,GACrB,oBAAoB,CACvB,CAoBA"}
|
package/dist/mcp-tool-deps.js
CHANGED
|
@@ -35,7 +35,14 @@ export function createExampleWorkflowCatalog(options = {}) {
|
|
|
35
35
|
: all;
|
|
36
36
|
return limit === undefined ? filtered : filtered.slice(0, limit);
|
|
37
37
|
},
|
|
38
|
-
|
|
38
|
+
// The name is agent input, and `loadExampleGraph` joins it onto the
|
|
39
|
+
// examples directory as a path, so a separator would let `../` read any
|
|
40
|
+
// JSON file this process can reach. No shipped example is named that way.
|
|
41
|
+
get: async (packageName, exampleName) => {
|
|
42
|
+
if (/[\\/]/.test(exampleName))
|
|
43
|
+
return null;
|
|
44
|
+
return (loadExampleGraph(packageName || defaultExamplePackageName(options) || "nodetool-base", exampleName, options) ?? null);
|
|
45
|
+
}
|
|
39
46
|
};
|
|
40
47
|
}
|
|
41
48
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-deps.js","sourceRoot":"","sources":["../src/mcp-tool-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAKhE,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAE9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,2EAA2E;AAC3E,SAAS,YAAY,CAAC,QAAiB,EAAE,KAAa;IACpD,MAAM,EAAE,GAAG,QAAmC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,IAAI,GAAI,EAAE,CAAC,MAAM,CAA0B,IAAI,EAAE,CAAC;IACxD,OAAO,CACL,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAO,GAAmB,EAAE;IAE5B,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;YAC/B,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM;gBACrB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC1D,CAAC,CAAC,GAAG,CAAC;YACR,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-tool-deps.js","sourceRoot":"","sources":["../src/mcp-tool-deps.ts"],"names":[],"mappings":"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"}
|
package/dist/models-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-api.d.ts","sourceRoot":"","sources":["../src/models-api.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"models-api.d.ts","sourceRoot":"","sources":["../src/models-api.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCnB;AAkBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,YAAY,EAAE,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,qBAAqC,GAC9C,YAAY,EAAE,CA+BhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,qBAAqC,GAC9C,MAAM,EAAE,CAeV;AAMD,uFAAuF;AACvF,UAAU,cAAc;IACtB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,GAAG,EAAE,oBAAoB,EACzB,SAAS,GAAE,MAEY,EACvB,MAAM,GAAE,MAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAwGf"}
|
package/dist/models-api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getSecret as getStoredSecret } from "@nodetool-ai/models";
|
|
2
2
|
import { listRegisteredProviderIds, PythonProvider, registerProvider } from "@nodetool-ai/runtime";
|
|
3
|
-
import { resolveWorkerHfToken } from "@nodetool-ai/huggingface";
|
|
3
|
+
import { ALWAYS_IGNORE_PATTERNS, resolveWorkerHfToken } from "@nodetool-ai/huggingface";
|
|
4
4
|
import { modelRankings, rankedForTask } from "@nodetool-ai/model-pricing";
|
|
5
5
|
/**
|
|
6
6
|
* Register Python-only providers (HuggingFace Local, MLX) discovered
|
|
@@ -207,7 +207,11 @@ export async function relayWorkerDownload(socket, bridge, workerManager, msg, re
|
|
|
207
207
|
repo_id: repoId,
|
|
208
208
|
path: msg.path ?? null,
|
|
209
209
|
allow_patterns: msg.allow_patterns ?? null,
|
|
210
|
-
|
|
210
|
+
// A whole-repo worker download skips the framework exports a
|
|
211
|
+
// server-side download skips, so both fetch the same files.
|
|
212
|
+
ignore_patterns: msg.path
|
|
213
|
+
? (msg.ignore_patterns ?? null)
|
|
214
|
+
: [...(msg.ignore_patterns ?? []), ...ALWAYS_IGNORE_PATTERNS],
|
|
211
215
|
model_type: msg.model_type ?? null,
|
|
212
216
|
token
|
|
213
217
|
}, onProgress, requestId);
|
package/dist/models-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-api.js","sourceRoot":"","sources":["../src/models-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,
|
|
1
|
+
{"version":3,"file":"models-api.js","sourceRoot":"","sources":["../src/models-api.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-api.d.ts","sourceRoot":"","sources":["../src/oauth-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"oauth-api.d.ts","sourceRoot":"","sources":["../src/oauth-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoEH,wBAAgB,gBAAgB;;;EAM/B;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAID,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,6BAAoC,CAAC;AAoxBjE,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB;YAEnB,MAAM;kBAAgB,MAAM;eAAa,MAAM;EACxD,CAAC;AAWJ;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAwBA;AAgBD,0EAA0E;AAC1E,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpE;AA2RD,kEAAkE;AAClE,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5D;AAkQD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,MAAM,GACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyD1B"}
|
package/dist/oauth-api.js
CHANGED
|
@@ -10,6 +10,7 @@ import { createLogger, isAuthEnforced, isGoogleWorkspaceEnabled } from "@nodetoo
|
|
|
10
10
|
import { OAuthCredential, storeGoogleCredential, deleteGoogleCredentials, GOOGLE_CREDENTIAL_PROVIDER } from "@nodetool-ai/models";
|
|
11
11
|
import { OAuthClient, LocalCallbackServer, ClaudeCodeLogin, extractChatGptAccountId, CODEX_OAUTH_CLIENT_ID, CODEX_CALLBACK_PORT, CODEX_CALLBACK_PATH, DEFAULT_CODEX_OAUTH_CONFIG } from "@nodetool-ai/runtime/oauth";
|
|
12
12
|
import { clearProviderCache } from "@nodetool-ai/runtime";
|
|
13
|
+
import { isAdmin } from "./lib/admin.js";
|
|
13
14
|
import { isFiniteNumber, isNonEmptyString, isString } from "./lib/wire-values.js";
|
|
14
15
|
const logger = createLogger("nodetool.websocket.oauth");
|
|
15
16
|
// ── Constants ────────────────────────────────────────────────────────
|
|
@@ -941,6 +942,15 @@ async function handleOpenAIDisconnect(request, getUserId) {
|
|
|
941
942
|
// shared server (`isAuthEnforced()`) or when asked with `?manual=true`.
|
|
942
943
|
//
|
|
943
944
|
// The UI reflects success by polling `/api/oauth/claude/tokens`.
|
|
945
|
+
// The login is process-wide: every user's Claude Agent SDK traffic runs on it.
|
|
946
|
+
// So only an admin may start, finish or remove it, or read its plan details.
|
|
947
|
+
// Other users see only whether the server is connected.
|
|
948
|
+
/** Answers 403 unless the caller is an admin. */
|
|
949
|
+
async function refuseUnlessAdmin(getUserId) {
|
|
950
|
+
if (await isAdmin(getUserId()))
|
|
951
|
+
return null;
|
|
952
|
+
return errorResponse(403, "Only an admin can change this server's Claude login.");
|
|
953
|
+
}
|
|
944
954
|
/** The single in-flight login, so a re-click supersedes a stale listener. */
|
|
945
955
|
let activeClaudeLogin = null;
|
|
946
956
|
/** Abort and tear down any in-flight Claude login. Idempotent. */
|
|
@@ -952,9 +962,12 @@ export async function closeActiveClaudeLogin() {
|
|
|
952
962
|
active.abort.abort();
|
|
953
963
|
await active.pending.cancel().catch(() => { });
|
|
954
964
|
}
|
|
955
|
-
async function handleClaudeStart(request) {
|
|
965
|
+
async function handleClaudeStart(request, getUserId) {
|
|
956
966
|
if (request.method !== "GET")
|
|
957
967
|
return errorResponse(405, "Method not allowed");
|
|
968
|
+
const refused = await refuseUnlessAdmin(getUserId);
|
|
969
|
+
if (refused)
|
|
970
|
+
return refused;
|
|
958
971
|
const url = new URL(request.url);
|
|
959
972
|
const loginMethod = url.searchParams.get("login_method") === "console" ? "console" : "claude-ai";
|
|
960
973
|
// A shared server's users browse from their own machines, where the loopback
|
|
@@ -997,9 +1010,12 @@ async function handleClaudeStart(request) {
|
|
|
997
1010
|
});
|
|
998
1011
|
}
|
|
999
1012
|
/** Complete a started login from the `code#state` the console displayed. */
|
|
1000
|
-
async function handleClaudeComplete(request) {
|
|
1013
|
+
async function handleClaudeComplete(request, getUserId) {
|
|
1001
1014
|
if (request.method !== "POST")
|
|
1002
1015
|
return errorResponse(405, "Method not allowed");
|
|
1016
|
+
const refused = await refuseUnlessAdmin(getUserId);
|
|
1017
|
+
if (refused)
|
|
1018
|
+
return refused;
|
|
1003
1019
|
const active = activeClaudeLogin;
|
|
1004
1020
|
if (!active) {
|
|
1005
1021
|
return errorResponse(400, "No Claude login in progress. Start one and try again.");
|
|
@@ -1032,29 +1048,35 @@ async function handleClaudeComplete(request) {
|
|
|
1032
1048
|
* Connection status, shaped like the other providers' `tokens` responses so the
|
|
1033
1049
|
* shared `useOAuthConnection` hook works unchanged. There is at most one login.
|
|
1034
1050
|
*/
|
|
1035
|
-
async function handleClaudeTokens() {
|
|
1051
|
+
async function handleClaudeTokens(getUserId) {
|
|
1036
1052
|
const status = await new ClaudeCodeLogin().status();
|
|
1053
|
+
if (!status.connected)
|
|
1054
|
+
return jsonResponse({ tokens: [] });
|
|
1055
|
+
const token = {
|
|
1056
|
+
provider: "claude",
|
|
1057
|
+
scope: status.scopes.join(" "),
|
|
1058
|
+
expires_at: status.expiresAt != null ? new Date(status.expiresAt).toISOString() : null,
|
|
1059
|
+
expired: status.expired
|
|
1060
|
+
};
|
|
1061
|
+
if (!(await isAdmin(getUserId())))
|
|
1062
|
+
return jsonResponse({ tokens: [token] });
|
|
1037
1063
|
return jsonResponse({
|
|
1038
|
-
tokens:
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
expired: status.expired,
|
|
1047
|
-
subscription_type: status.subscriptionType,
|
|
1048
|
-
rate_limit_tier: status.rateLimitTier,
|
|
1049
|
-
credentials_path: status.credentialsPath
|
|
1050
|
-
}
|
|
1051
|
-
]
|
|
1052
|
-
: []
|
|
1064
|
+
tokens: [
|
|
1065
|
+
{
|
|
1066
|
+
...token,
|
|
1067
|
+
subscription_type: status.subscriptionType,
|
|
1068
|
+
rate_limit_tier: status.rateLimitTier,
|
|
1069
|
+
credentials_path: status.credentialsPath
|
|
1070
|
+
}
|
|
1071
|
+
]
|
|
1053
1072
|
});
|
|
1054
1073
|
}
|
|
1055
|
-
async function handleClaudeDisconnect(request) {
|
|
1074
|
+
async function handleClaudeDisconnect(request, getUserId) {
|
|
1056
1075
|
if (request.method !== "POST")
|
|
1057
1076
|
return errorResponse(405, "Method not allowed");
|
|
1077
|
+
const refused = await refuseUnlessAdmin(getUserId);
|
|
1078
|
+
if (refused)
|
|
1079
|
+
return refused;
|
|
1058
1080
|
await closeActiveClaudeLogin();
|
|
1059
1081
|
const removed = await new ClaudeCodeLogin().logout();
|
|
1060
1082
|
return jsonResponse({ success: true, removed: removed ? 1 : 0 });
|
|
@@ -1179,13 +1201,13 @@ export async function handleOAuthRequest(request, pathname, getUserId) {
|
|
|
1179
1201
|
return handleOpenAIDisconnect(request, getUserId);
|
|
1180
1202
|
// Claude subscription (Claude Agent SDK credentials)
|
|
1181
1203
|
case "/api/oauth/claude/start":
|
|
1182
|
-
return handleClaudeStart(request);
|
|
1204
|
+
return handleClaudeStart(request, getUserId);
|
|
1183
1205
|
case "/api/oauth/claude/complete":
|
|
1184
|
-
return handleClaudeComplete(request);
|
|
1206
|
+
return handleClaudeComplete(request, getUserId);
|
|
1185
1207
|
case "/api/oauth/claude/tokens":
|
|
1186
|
-
return handleClaudeTokens();
|
|
1208
|
+
return handleClaudeTokens(getUserId);
|
|
1187
1209
|
case "/api/oauth/claude/disconnect":
|
|
1188
|
-
return handleClaudeDisconnect(request);
|
|
1210
|
+
return handleClaudeDisconnect(request, getUserId);
|
|
1189
1211
|
// Google Workspace (token comes from the Supabase Google login)
|
|
1190
1212
|
case "/api/oauth/google/session":
|
|
1191
1213
|
return handleGoogleSession(request, getUserId);
|