@luckydraw/cumulus 0.27.18 → 0.27.19

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.
Files changed (58) hide show
  1. package/dist/cli/cumulus.js +0 -0
  2. package/dist/gateway/adapters/webchat.d.ts +1 -3
  3. package/dist/gateway/adapters/webchat.d.ts.map +1 -1
  4. package/dist/gateway/adapters/webchat.js +7 -150
  5. package/dist/gateway/adapters/webchat.js.map +1 -1
  6. package/dist/gateway/config.d.ts +7 -0
  7. package/dist/gateway/config.d.ts.map +1 -1
  8. package/dist/gateway/config.js +13 -0
  9. package/dist/gateway/config.js.map +1 -1
  10. package/dist/gateway/daemon.js +26 -8
  11. package/dist/gateway/daemon.js.map +1 -1
  12. package/dist/gateway/gateway-agents-mcp.js +49 -0
  13. package/dist/gateway/gateway-agents-mcp.js.map +1 -1
  14. package/dist/gateway/push.d.ts +66 -0
  15. package/dist/gateway/push.d.ts.map +1 -0
  16. package/dist/gateway/push.js +131 -0
  17. package/dist/gateway/push.js.map +1 -0
  18. package/dist/gateway/server.d.ts +3 -9
  19. package/dist/gateway/server.d.ts.map +1 -1
  20. package/dist/gateway/server.js +112 -243
  21. package/dist/gateway/server.js.map +1 -1
  22. package/dist/gateway/static/sw.js +73 -0
  23. package/dist/gateway/static/widget.js +126 -755
  24. package/dist/index.d.ts +3 -5
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1 -6
  27. package/dist/index.js.map +1 -1
  28. package/dist/lib/config.d.ts +0 -8
  29. package/dist/lib/config.d.ts.map +1 -1
  30. package/dist/lib/config.js +1 -61
  31. package/dist/lib/config.js.map +1 -1
  32. package/dist/lib/content-detector.d.ts.map +1 -1
  33. package/dist/lib/content-detector.js +2 -9
  34. package/dist/lib/content-detector.js.map +1 -1
  35. package/dist/lib/gateway.d.ts +2 -14
  36. package/dist/lib/gateway.d.ts.map +1 -1
  37. package/dist/lib/gateway.js +103 -234
  38. package/dist/lib/gateway.js.map +1 -1
  39. package/dist/lib/summaries.d.ts.map +1 -1
  40. package/dist/lib/summaries.js +2 -9
  41. package/dist/lib/summaries.js.map +1 -1
  42. package/dist/mcp/index.js +0 -0
  43. package/dist/mcp/tool-handler.d.ts.map +1 -1
  44. package/dist/mcp/tool-handler.js +3 -10
  45. package/dist/mcp/tool-handler.js.map +1 -1
  46. package/dist/tui/hooks/useClaudeProcess.d.ts.map +1 -1
  47. package/dist/tui/hooks/useClaudeProcess.js +23 -18
  48. package/dist/tui/hooks/useClaudeProcess.js.map +1 -1
  49. package/package.json +3 -1
  50. package/dist/gateway/device-mcp.d.ts +0 -21
  51. package/dist/gateway/device-mcp.d.ts.map +0 -1
  52. package/dist/gateway/device-mcp.js +0 -165
  53. package/dist/gateway/device-mcp.js.map +0 -1
  54. package/dist/lib/executor.d.ts +0 -168
  55. package/dist/lib/executor.d.ts.map +0 -1
  56. package/dist/lib/executor.js +0 -284
  57. package/dist/lib/executor.js.map +0 -1
  58. package/dist/lib/projects.d.ts.map +0 -1
@@ -1,168 +0,0 @@
1
- /**
2
- * Executor registry and dispatch — manages remote machines that can run Claude.
3
- *
4
- * The gateway always owns conversation state (history, RAG, prompt assembly).
5
- * Executors are registered machines (thundercat, mac-karl, etc.) that run Claude
6
- * subprocesses. The gateway dispatches assembled prompts to executors and
7
- * streams tokens back.
8
- */
9
- import type { WebSocket } from 'ws';
10
- /** Payload sent from gateway to executor to run Claude */
11
- export interface ExecutePayload {
12
- type: 'execute';
13
- requestId: string;
14
- threadName: string;
15
- /** Fully assembled system prompt (identity + RAG + always-include + recent context) */
16
- systemPrompt: string;
17
- /** User message with FILE_READ_REMINDER prepended */
18
- userMessage: string;
19
- /** Base64-encoded images */
20
- imageBlocks?: Array<{
21
- type: string;
22
- source: {
23
- type: string;
24
- media_type: string;
25
- data: string;
26
- };
27
- }>;
28
- /** MCP server configs — gateway-proxy entries are resolved locally by executor */
29
- mcpServers: Record<string, McpServerDispatchConfig>;
30
- /** Working directory on the executor machine */
31
- cwd: string;
32
- /** Claude CLI args (--print, --verbose, etc.) */
33
- claudeArgs: string[];
34
- }
35
- /** MCP server config in dispatch payload */
36
- export type McpServerDispatchConfig = {
37
- /** Run locally on the executor — command + args provided */
38
- type: 'local';
39
- command: string;
40
- args: string[];
41
- env: Record<string, string>;
42
- } | {
43
- /** Proxy back to gateway's shared MCP server */
44
- type: 'gateway-proxy';
45
- sharedUrl: string;
46
- threadName: string;
47
- } | {
48
- /** Proxy back to gateway's agents MCP */
49
- type: 'gateway-agents-proxy';
50
- apiUrl: string;
51
- apiKey: string;
52
- agentName: string;
53
- };
54
- /** Abort message sent from gateway to executor */
55
- export interface ExecuteAbortPayload {
56
- type: 'execute_abort';
57
- requestId: string;
58
- }
59
- /** Token streamed from executor to gateway */
60
- export interface ExecuteTokenMessage {
61
- type: 'execute_token';
62
- requestId: string;
63
- /** Raw stream-json line from Claude stdout */
64
- line: string;
65
- }
66
- /** Execution completed */
67
- export interface ExecuteDoneMessage {
68
- type: 'execute_done';
69
- requestId: string;
70
- exitCode: number;
71
- }
72
- /** Execution error */
73
- export interface ExecuteErrorMessage {
74
- type: 'execute_error';
75
- requestId: string;
76
- error: string;
77
- }
78
- /** Device MCP tool call routed to a remote device */
79
- export interface DeviceToolCallMessage {
80
- type: 'device_tool_call';
81
- callId: string;
82
- executorId: string;
83
- tool: string;
84
- args: Record<string, unknown>;
85
- }
86
- /** Device MCP tool result */
87
- export interface DeviceToolResultMessage {
88
- type: 'device_tool_result';
89
- callId: string;
90
- result: unknown;
91
- isError?: boolean;
92
- }
93
- /** Registration message from executor to gateway */
94
- export interface ExecutorRegisterMessage {
95
- type: 'executor_register';
96
- executorId: string;
97
- hostname: string;
98
- projectRoot: string;
99
- }
100
- /** Registration confirmation from gateway to executor */
101
- export interface ExecutorRegisteredMessage {
102
- type: 'executor_registered';
103
- executorId: string;
104
- }
105
- /** All messages that can be sent over the executor WebSocket */
106
- export type ExecutorMessage = ExecutorRegisterMessage | ExecutorRegisteredMessage | ExecutePayload | ExecuteAbortPayload | ExecuteTokenMessage | ExecuteDoneMessage | ExecuteErrorMessage | DeviceToolCallMessage | DeviceToolResultMessage | {
107
- type: 'ping';
108
- } | {
109
- type: 'pong';
110
- };
111
- export interface ExecutionResult {
112
- requestId: string;
113
- exitCode: number;
114
- lines: string[];
115
- }
116
- export declare class ExecutorRegistry {
117
- private executors;
118
- private pendingExecutions;
119
- private pendingDeviceCalls;
120
- private pingIntervals;
121
- private deviceCallCounter;
122
- /** Register a new executor from an incoming WebSocket connection */
123
- register(msg: ExecutorRegisterMessage, ws: WebSocket): void;
124
- /** Unregister an executor */
125
- unregister(executorId: string): void;
126
- /** Check if an executor is online */
127
- isOnline(executorId: string): boolean;
128
- /** Get executor info */
129
- getExecutor(executorId: string): {
130
- hostname: string;
131
- projectRoot: string;
132
- } | null;
133
- /** List all registered executors with online status */
134
- listExecutors(): Array<{
135
- executorId: string;
136
- hostname: string;
137
- projectRoot: string;
138
- online: boolean;
139
- connectedAt: number;
140
- activeRequests: number;
141
- }>;
142
- /**
143
- * Dispatch an execution request to a remote executor.
144
- * Returns a promise that resolves when the executor completes.
145
- */
146
- dispatch(executorId: string, payload: ExecutePayload, callbacks?: {
147
- onLine?: (line: string) => void;
148
- onError?: (error: string) => void;
149
- }): Promise<ExecutionResult>;
150
- /** Abort an in-flight execution */
151
- abort(requestId: string): void;
152
- /**
153
- * Route a device tool call to a remote executor.
154
- * Returns a promise that resolves with the tool result.
155
- * Timeout: 60s (for long-running commands like builds).
156
- */
157
- deviceToolCall(executorId: string, tool: string, args: Record<string, unknown>): Promise<{
158
- result: unknown;
159
- isError?: boolean;
160
- }>;
161
- /** Shut down all connections */
162
- shutdown(): void;
163
- private handleExecutorMessage;
164
- private handleDisconnect;
165
- private cleanupExecutor;
166
- private send;
167
- }
168
- //# sourceMappingURL=executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/lib/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAIpC,0DAA0D;AAC1D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5D,CAAC,CAAC;IACH,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACpD,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,4CAA4C;AAC5C,MAAM,MAAM,uBAAuB,GAC/B;IACE,4DAA4D;IAC5D,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,GACD;IACE,gDAAgD;IAChD,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,yCAAyC;IACzC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEN,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0BAA0B;AAC1B,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sBAAsB;AACtB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,6BAA6B;AAC7B,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yDAAyD;AACzD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,MAAM,eAAe,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,cAAc,GACd,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,uBAAuB,GACvB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA4BrB,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAUD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,iBAAiB,CAAuC;IAChE,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,aAAa,CAAqD;IAC1E,OAAO,CAAC,iBAAiB,CAAK;IAE9B,oEAAoE;IACpE,QAAQ,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI;IAmD3D,6BAA6B;IAC7B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAYpC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAMrC,wBAAwB;IACxB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMjF,uDAAuD;IACvD,aAAa,IAAI,KAAK,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAkCF;;;OAGG;IACH,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KACnC,GACA,OAAO,CAAC,eAAe,CAAC;IA2B3B,mCAAmC;IACnC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;OAIG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAyClD,gCAAgC;IAChC,QAAQ,IAAI,IAAI;IAYhB,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,IAAI;CAKb"}
@@ -1,284 +0,0 @@
1
- /**
2
- * Executor registry and dispatch — manages remote machines that can run Claude.
3
- *
4
- * The gateway always owns conversation state (history, RAG, prompt assembly).
5
- * Executors are registered machines (thundercat, mac-karl, etc.) that run Claude
6
- * subprocesses. The gateway dispatches assembled prompts to executors and
7
- * streams tokens back.
8
- */
9
- export class ExecutorRegistry {
10
- executors = new Map();
11
- pendingExecutions = new Map();
12
- pendingDeviceCalls = new Map();
13
- pingIntervals = new Map();
14
- deviceCallCounter = 0;
15
- /** Register a new executor from an incoming WebSocket connection */
16
- register(msg, ws) {
17
- const existing = this.executors.get(msg.executorId);
18
- if (existing) {
19
- // Close old connection if still open
20
- try {
21
- existing.ws.close();
22
- }
23
- catch {
24
- // ignore
25
- }
26
- this.cleanupExecutor(msg.executorId);
27
- }
28
- const executor = {
29
- executorId: msg.executorId,
30
- hostname: msg.hostname,
31
- projectRoot: msg.projectRoot,
32
- ws,
33
- connectedAt: Date.now(),
34
- activeRequests: new Set(),
35
- };
36
- this.executors.set(msg.executorId, executor);
37
- // Set up ping/pong keepalive
38
- const interval = setInterval(() => {
39
- if (ws.readyState === ws.OPEN) {
40
- this.send(ws, { type: 'ping' });
41
- }
42
- }, 30_000);
43
- this.pingIntervals.set(msg.executorId, interval);
44
- // Handle disconnect
45
- ws.on('close', () => this.handleDisconnect(msg.executorId));
46
- ws.on('error', () => this.handleDisconnect(msg.executorId));
47
- // Handle incoming messages from executor
48
- ws.on('message', (raw) => {
49
- try {
50
- const data = JSON.parse(raw.toString());
51
- this.handleExecutorMessage(msg.executorId, data);
52
- }
53
- catch {
54
- // ignore malformed messages
55
- }
56
- });
57
- // Confirm registration
58
- this.send(ws, { type: 'executor_registered', executorId: msg.executorId });
59
- console.log(`[ExecutorRegistry] Registered executor "${msg.executorId}" (${msg.hostname}), projectRoot: ${msg.projectRoot}`);
60
- }
61
- /** Unregister an executor */
62
- unregister(executorId) {
63
- const executor = this.executors.get(executorId);
64
- if (executor) {
65
- try {
66
- executor.ws.close();
67
- }
68
- catch {
69
- // ignore
70
- }
71
- }
72
- this.cleanupExecutor(executorId);
73
- }
74
- /** Check if an executor is online */
75
- isOnline(executorId) {
76
- if (executorId === 'thundercat')
77
- return true; // local executor is always online
78
- const executor = this.executors.get(executorId);
79
- return !!executor && executor.ws.readyState === executor.ws.OPEN;
80
- }
81
- /** Get executor info */
82
- getExecutor(executorId) {
83
- const executor = this.executors.get(executorId);
84
- if (!executor)
85
- return null;
86
- return { hostname: executor.hostname, projectRoot: executor.projectRoot };
87
- }
88
- /** List all registered executors with online status */
89
- listExecutors() {
90
- const result = [];
91
- // Always include thundercat as local
92
- result.push({
93
- executorId: 'thundercat',
94
- hostname: 'thundercat',
95
- projectRoot: '', // resolved at runtime
96
- online: true,
97
- connectedAt: 0,
98
- activeRequests: 0,
99
- });
100
- for (const [, executor] of this.executors) {
101
- result.push({
102
- executorId: executor.executorId,
103
- hostname: executor.hostname,
104
- projectRoot: executor.projectRoot,
105
- online: executor.ws.readyState === executor.ws.OPEN,
106
- connectedAt: executor.connectedAt,
107
- activeRequests: executor.activeRequests.size,
108
- });
109
- }
110
- return result;
111
- }
112
- /**
113
- * Dispatch an execution request to a remote executor.
114
- * Returns a promise that resolves when the executor completes.
115
- */
116
- dispatch(executorId, payload, callbacks) {
117
- const executor = this.executors.get(executorId);
118
- if (!executor) {
119
- return Promise.reject(new Error(`Executor "${executorId}" is not registered`));
120
- }
121
- if (executor.ws.readyState !== executor.ws.OPEN) {
122
- return Promise.reject(new Error(`Executor "${executorId}" is offline`));
123
- }
124
- return new Promise((resolve, reject) => {
125
- const pending = {
126
- requestId: payload.requestId,
127
- threadName: payload.threadName,
128
- executorId,
129
- resolve,
130
- reject,
131
- lines: [],
132
- onLine: callbacks?.onLine,
133
- onError: callbacks?.onError,
134
- };
135
- this.pendingExecutions.set(payload.requestId, pending);
136
- executor.activeRequests.add(payload.requestId);
137
- this.send(executor.ws, payload);
138
- });
139
- }
140
- /** Abort an in-flight execution */
141
- abort(requestId) {
142
- const pending = this.pendingExecutions.get(requestId);
143
- if (!pending)
144
- return;
145
- const executor = this.executors.get(pending.executorId);
146
- if (executor && executor.ws.readyState === executor.ws.OPEN) {
147
- this.send(executor.ws, { type: 'execute_abort', requestId });
148
- }
149
- }
150
- /**
151
- * Route a device tool call to a remote executor.
152
- * Returns a promise that resolves with the tool result.
153
- * Timeout: 60s (for long-running commands like builds).
154
- */
155
- deviceToolCall(executorId, tool, args) {
156
- const executor = this.executors.get(executorId);
157
- if (!executor) {
158
- return Promise.reject(new Error(`Device "${executorId}" is not registered`));
159
- }
160
- if (executor.ws.readyState !== executor.ws.OPEN) {
161
- return Promise.reject(new Error(`Device "${executorId}" is offline`));
162
- }
163
- const callId = `dtc-${++this.deviceCallCounter}-${Date.now()}`;
164
- return new Promise((resolve, reject) => {
165
- const timeout = setTimeout(() => {
166
- this.pendingDeviceCalls.delete(callId);
167
- reject(new Error(`Device tool call timed out after 60s: ${tool}`));
168
- }, 60_000);
169
- const pending = {
170
- callId,
171
- executorId,
172
- resolve: result => {
173
- clearTimeout(timeout);
174
- resolve(result);
175
- },
176
- reject: err => {
177
- clearTimeout(timeout);
178
- reject(err);
179
- },
180
- };
181
- this.pendingDeviceCalls.set(callId, pending);
182
- this.send(executor.ws, {
183
- type: 'device_tool_call',
184
- callId,
185
- executorId,
186
- tool,
187
- args,
188
- });
189
- });
190
- }
191
- /** Shut down all connections */
192
- shutdown() {
193
- for (const [id] of this.executors) {
194
- this.unregister(id);
195
- }
196
- for (const [, interval] of this.pingIntervals) {
197
- clearInterval(interval);
198
- }
199
- this.pingIntervals.clear();
200
- }
201
- // ─── Internal ──────────────────────────────────────────────────────────────
202
- handleExecutorMessage(executorId, msg) {
203
- switch (msg.type) {
204
- case 'execute_token': {
205
- const pending = this.pendingExecutions.get(msg.requestId);
206
- if (pending) {
207
- pending.lines.push(msg.line);
208
- pending.onLine?.(msg.line);
209
- }
210
- break;
211
- }
212
- case 'execute_done': {
213
- const pending = this.pendingExecutions.get(msg.requestId);
214
- if (pending) {
215
- this.pendingExecutions.delete(msg.requestId);
216
- const executor = this.executors.get(executorId);
217
- executor?.activeRequests.delete(msg.requestId);
218
- pending.resolve({
219
- requestId: msg.requestId,
220
- exitCode: msg.exitCode,
221
- lines: pending.lines,
222
- });
223
- }
224
- break;
225
- }
226
- case 'execute_error': {
227
- const pending = this.pendingExecutions.get(msg.requestId);
228
- if (pending) {
229
- this.pendingExecutions.delete(msg.requestId);
230
- const executor = this.executors.get(executorId);
231
- executor?.activeRequests.delete(msg.requestId);
232
- pending.onError?.(msg.error);
233
- pending.reject(new Error(msg.error));
234
- }
235
- break;
236
- }
237
- case 'pong':
238
- // keepalive response, nothing to do
239
- break;
240
- case 'device_tool_result': {
241
- const pendingCall = this.pendingDeviceCalls.get(msg.callId);
242
- if (pendingCall) {
243
- this.pendingDeviceCalls.delete(msg.callId);
244
- pendingCall.resolve({ result: msg.result, isError: msg.isError });
245
- }
246
- break;
247
- }
248
- default:
249
- break;
250
- }
251
- }
252
- handleDisconnect(executorId) {
253
- console.log(`[ExecutorRegistry] Executor "${executorId}" disconnected`);
254
- // Fail all pending executions for this executor
255
- for (const [requestId, pending] of this.pendingExecutions) {
256
- if (pending.executorId === executorId) {
257
- this.pendingExecutions.delete(requestId);
258
- pending.reject(new Error(`Executor "${executorId}" disconnected during execution`));
259
- }
260
- }
261
- // Fail all pending device tool calls for this executor
262
- for (const [callId, pending] of this.pendingDeviceCalls) {
263
- if (pending.executorId === executorId) {
264
- this.pendingDeviceCalls.delete(callId);
265
- pending.reject(new Error(`Device "${executorId}" disconnected during tool call`));
266
- }
267
- }
268
- this.cleanupExecutor(executorId);
269
- }
270
- cleanupExecutor(executorId) {
271
- this.executors.delete(executorId);
272
- const interval = this.pingIntervals.get(executorId);
273
- if (interval) {
274
- clearInterval(interval);
275
- this.pingIntervals.delete(executorId);
276
- }
277
- }
278
- send(ws, msg) {
279
- if (ws.readyState === ws.OPEN) {
280
- ws.send(JSON.stringify(msg));
281
- }
282
- }
283
- }
284
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/lib/executor.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/lib/projects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AA4BD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkE3F;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA4BlF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAUjC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,CAAC,CAAC,EAClF,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,YAAY,UAAQ,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB"}