@miriad-systems/backend 0.1.1 → 0.1.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/README.md +0 -3
- package/dist/agent-manager.d.ts +19 -5
- package/dist/agent-manager.d.ts.map +1 -1
- package/dist/agent-manager.js +153 -16
- package/dist/agent-manager.js.map +1 -1
- package/dist/cli.js +21 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +35 -8
- package/dist/config.js.map +1 -1
- package/dist/engines/claude-engine.d.ts +12 -0
- package/dist/engines/claude-engine.d.ts.map +1 -0
- package/dist/engines/claude-engine.js +208 -0
- package/dist/engines/claude-engine.js.map +1 -0
- package/dist/engines/claude-sdk-engine.d.ts +19 -0
- package/dist/engines/claude-sdk-engine.d.ts.map +1 -0
- package/dist/engines/claude-sdk-engine.js +288 -0
- package/dist/engines/claude-sdk-engine.js.map +1 -0
- package/dist/engines/engine-manager.d.ts +31 -0
- package/dist/engines/engine-manager.d.ts.map +1 -0
- package/dist/engines/engine-manager.js +60 -0
- package/dist/engines/engine-manager.js.map +1 -0
- package/dist/engines/index.d.ts +15 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +23 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/letta-engine.d.ts +32 -0
- package/dist/engines/letta-engine.d.ts.map +1 -0
- package/dist/engines/letta-engine.js +249 -0
- package/dist/engines/letta-engine.js.map +1 -0
- package/dist/engines/nuum-engine.d.ts +14 -0
- package/dist/engines/nuum-engine.d.ts.map +1 -0
- package/dist/engines/nuum-engine.js +270 -0
- package/dist/engines/nuum-engine.js.map +1 -0
- package/dist/engines/types.d.ts +72 -0
- package/dist/engines/types.d.ts.map +1 -0
- package/dist/engines/types.js +13 -0
- package/dist/engines/types.js.map +1 -0
- package/dist/runtime-client.d.ts +29 -0
- package/dist/runtime-client.d.ts.map +1 -1
- package/dist/runtime-client.js +71 -0
- package/dist/runtime-client.js.map +1 -1
- package/dist/tymbal-bridge.js +10 -10
- package/dist/tymbal-bridge.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-engine.d.ts","sourceRoot":"","sources":["../../src/engines/claude-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAyJpB,qBAAa,YAAa,YAAW,WAAW;IAC9C,QAAQ,CAAC,IAAI,YAAY;IAEnB,OAAO,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,gBAAgB,CAAC;CAwF7B"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Engine
|
|
3
|
+
*
|
|
4
|
+
* Implementation of AgentEngine using the Anthropic Claude SDK.
|
|
5
|
+
* Handles Claude Code-style interactions with streaming support.
|
|
6
|
+
*/
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { randomUUID } from 'node:crypto';
|
|
9
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
import { TymbalBridge } from '../tymbal-bridge.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// URL Rewriting for Docker
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Check if we're running inside a Docker container.
|
|
16
|
+
*/
|
|
17
|
+
function isRunningInDocker() {
|
|
18
|
+
const config = process.env.MIRIAD_CONFIG;
|
|
19
|
+
if (!config)
|
|
20
|
+
return false;
|
|
21
|
+
return config.includes('host.docker.internal');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rewrite localhost URLs to host.docker.internal when running in Docker.
|
|
25
|
+
*/
|
|
26
|
+
function rewriteUrlForDocker(url) {
|
|
27
|
+
if (!isRunningInDocker())
|
|
28
|
+
return url;
|
|
29
|
+
return url.replace(/localhost/g, 'host.docker.internal');
|
|
30
|
+
}
|
|
31
|
+
function createMessageStream(initialContent) {
|
|
32
|
+
const sessionId = randomUUID();
|
|
33
|
+
const queue = [];
|
|
34
|
+
let closed = false;
|
|
35
|
+
let resolveWaiting = null;
|
|
36
|
+
function makeMessage(content) {
|
|
37
|
+
return {
|
|
38
|
+
type: 'user',
|
|
39
|
+
message: {
|
|
40
|
+
role: 'user',
|
|
41
|
+
content,
|
|
42
|
+
},
|
|
43
|
+
parent_tool_use_id: null,
|
|
44
|
+
session_id: sessionId,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const stream = {
|
|
48
|
+
sessionId,
|
|
49
|
+
push(content) {
|
|
50
|
+
if (closed) {
|
|
51
|
+
console.warn('[ClaudeEngine] Cannot push to closed stream');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
queue.push(content);
|
|
55
|
+
if (resolveWaiting && queue.length > 0) {
|
|
56
|
+
const batched = queue.splice(0).join('\n\n');
|
|
57
|
+
resolveWaiting({ value: makeMessage(batched), done: false });
|
|
58
|
+
resolveWaiting = null;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
close() {
|
|
62
|
+
closed = true;
|
|
63
|
+
if (resolveWaiting) {
|
|
64
|
+
resolveWaiting({ value: undefined, done: true });
|
|
65
|
+
resolveWaiting = null;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
iterable: {
|
|
69
|
+
[Symbol.asyncIterator]() {
|
|
70
|
+
let yieldedInitial = false;
|
|
71
|
+
return {
|
|
72
|
+
async next() {
|
|
73
|
+
if (!yieldedInitial) {
|
|
74
|
+
yieldedInitial = true;
|
|
75
|
+
return { value: makeMessage(initialContent), done: false };
|
|
76
|
+
}
|
|
77
|
+
if (closed && queue.length === 0) {
|
|
78
|
+
return { value: undefined, done: true };
|
|
79
|
+
}
|
|
80
|
+
if (queue.length > 0) {
|
|
81
|
+
const batched = queue.splice(0).join('\n\n');
|
|
82
|
+
return { value: makeMessage(batched), done: false };
|
|
83
|
+
}
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
resolveWaiting = resolve;
|
|
86
|
+
});
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
return stream;
|
|
93
|
+
}
|
|
94
|
+
// =============================================================================
|
|
95
|
+
// MCP Config Builder
|
|
96
|
+
// =============================================================================
|
|
97
|
+
function buildMcpServersConfig(servers) {
|
|
98
|
+
const mcpServers = {};
|
|
99
|
+
for (const server of servers) {
|
|
100
|
+
if (server.transport === 'stdio') {
|
|
101
|
+
const rewrittenEnv = server.env
|
|
102
|
+
? Object.fromEntries(Object.entries(server.env).map(([key, value]) => [
|
|
103
|
+
key,
|
|
104
|
+
typeof value === 'string' ? rewriteUrlForDocker(value) : value,
|
|
105
|
+
]))
|
|
106
|
+
: undefined;
|
|
107
|
+
mcpServers[server.name] = {
|
|
108
|
+
type: 'stdio',
|
|
109
|
+
command: server.command,
|
|
110
|
+
args: server.args,
|
|
111
|
+
env: rewrittenEnv,
|
|
112
|
+
cwd: server.cwd,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
else if ((server.transport === 'sse' || server.transport === 'http') && server.url) {
|
|
116
|
+
mcpServers[server.name] = {
|
|
117
|
+
type: server.transport,
|
|
118
|
+
url: rewriteUrlForDocker(server.url),
|
|
119
|
+
headers: server.headers,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return mcpServers;
|
|
124
|
+
}
|
|
125
|
+
// =============================================================================
|
|
126
|
+
// Claude Engine
|
|
127
|
+
// =============================================================================
|
|
128
|
+
export class ClaudeEngine {
|
|
129
|
+
name = 'claude';
|
|
130
|
+
async process(content, config, callbacks) {
|
|
131
|
+
const { agentId, workspacePath, systemPrompt, mcpServers, environment, continueSession } = config;
|
|
132
|
+
const callsign = agentId.split(':')[2] ?? agentId;
|
|
133
|
+
console.log(`[ClaudeEngine] Processing message for ${agentId}`);
|
|
134
|
+
console.log(`[ClaudeEngine] Working directory: ${workspacePath}`);
|
|
135
|
+
console.log(`[ClaudeEngine] Continue session: ${continueSession}`);
|
|
136
|
+
// Create bridge for Tymbal frame conversion
|
|
137
|
+
const bridge = new TymbalBridge({
|
|
138
|
+
agentId,
|
|
139
|
+
callsign,
|
|
140
|
+
onFrame: (msg) => callbacks.onFrame(msg.frame),
|
|
141
|
+
});
|
|
142
|
+
const claudeConfigDir = join(workspacePath, '.claude');
|
|
143
|
+
// Build Claude SDK options
|
|
144
|
+
const options = {
|
|
145
|
+
model: 'claude-opus-4-5-20251101',
|
|
146
|
+
systemPrompt: systemPrompt
|
|
147
|
+
? {
|
|
148
|
+
type: 'preset',
|
|
149
|
+
preset: 'claude_code',
|
|
150
|
+
append: systemPrompt,
|
|
151
|
+
}
|
|
152
|
+
: {
|
|
153
|
+
type: 'preset',
|
|
154
|
+
preset: 'claude_code',
|
|
155
|
+
},
|
|
156
|
+
permissionMode: 'bypassPermissions',
|
|
157
|
+
allowDangerouslySkipPermissions: true,
|
|
158
|
+
includePartialMessages: true,
|
|
159
|
+
continue: continueSession,
|
|
160
|
+
cwd: workspacePath,
|
|
161
|
+
settingSources: [],
|
|
162
|
+
env: {
|
|
163
|
+
...environment,
|
|
164
|
+
...Object.fromEntries(Object.entries(process.env).filter(([key]) => !['PWD', 'OLDPWD'].includes(key))),
|
|
165
|
+
CLAUDE_CONFIG_DIR: claudeConfigDir,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
// Add MCP servers
|
|
169
|
+
if (mcpServers.length > 0) {
|
|
170
|
+
const mcpConfig = buildMcpServersConfig(mcpServers);
|
|
171
|
+
if (Object.keys(mcpConfig).length > 0) {
|
|
172
|
+
console.log(`[ClaudeEngine] MCP servers:`, JSON.stringify(mcpConfig));
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
174
|
+
options.mcpServers = mcpConfig;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Create message stream for streaming input
|
|
178
|
+
const messageStream = createMessageStream(content);
|
|
179
|
+
console.log(`[ClaudeEngine] Created message stream (sessionId: ${messageStream.sessionId})`);
|
|
180
|
+
// Create controller for mid-execution operations
|
|
181
|
+
const controller = {
|
|
182
|
+
pushMessage: (msg) => messageStream.push(msg),
|
|
183
|
+
close: () => messageStream.close(),
|
|
184
|
+
};
|
|
185
|
+
// Run query and await completion
|
|
186
|
+
try {
|
|
187
|
+
const q = query({
|
|
188
|
+
prompt: messageStream.iterable,
|
|
189
|
+
options,
|
|
190
|
+
});
|
|
191
|
+
for await (const message of q) {
|
|
192
|
+
await bridge.processSDKMessage(message);
|
|
193
|
+
}
|
|
194
|
+
await bridge.finalize();
|
|
195
|
+
console.log(`[ClaudeEngine] Query completed for ${agentId}`);
|
|
196
|
+
callbacks.onComplete();
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error(`[ClaudeEngine] Query error for ${agentId}:`, error);
|
|
200
|
+
callbacks.onError(error);
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
messageStream.close();
|
|
204
|
+
}
|
|
205
|
+
return controller;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=claude-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-engine.js","sourceRoot":"","sources":["../../src/engines/claude-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude SDK Engine
|
|
3
|
+
*
|
|
4
|
+
* In-process engine using the Claude Code SDK. This is the default engine
|
|
5
|
+
* and wraps the existing SDK query() function to emit SDKMessages.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentEngine, EngineConfig, EngineProcess } from './types.js';
|
|
8
|
+
export declare class ClaudeSDKEngine implements AgentEngine {
|
|
9
|
+
readonly engineId = "claude-sdk";
|
|
10
|
+
readonly displayName = "Claude Code SDK";
|
|
11
|
+
isAvailable(): Promise<boolean>;
|
|
12
|
+
spawn(config: EngineConfig): Promise<EngineProcess>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Start processing a message on a ClaudeSDKProcess.
|
|
16
|
+
* This is called by AgentManager after spawning.
|
|
17
|
+
*/
|
|
18
|
+
export declare function startClaudeSDKProcess(process: EngineProcess, content: string, sender?: string): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=claude-sdk-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sdk-engine.d.ts","sourceRoot":"","sources":["../../src/engines/claude-sdk-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EAGd,MAAM,YAAY,CAAC;AA4SpB,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,QAAQ,gBAAgB;IACjC,QAAQ,CAAC,WAAW,qBAAqB;IAEnC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAM1D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude SDK Engine
|
|
3
|
+
*
|
|
4
|
+
* In-process engine using the Claude Code SDK. This is the default engine
|
|
5
|
+
* and wraps the existing SDK query() function to emit SDKMessages.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// URL Rewriting for Docker
|
|
13
|
+
// =============================================================================
|
|
14
|
+
function isRunningInDocker() {
|
|
15
|
+
const config = process.env.MIRIAD_CONFIG;
|
|
16
|
+
if (!config)
|
|
17
|
+
return false;
|
|
18
|
+
return config.includes('host.docker.internal');
|
|
19
|
+
}
|
|
20
|
+
function rewriteUrlForDocker(url) {
|
|
21
|
+
if (!isRunningInDocker())
|
|
22
|
+
return url;
|
|
23
|
+
return url.replace(/localhost/g, 'host.docker.internal');
|
|
24
|
+
}
|
|
25
|
+
function createMessageStream(initialContent, initialSender) {
|
|
26
|
+
const sessionId = randomUUID();
|
|
27
|
+
const queue = [];
|
|
28
|
+
let closed = false;
|
|
29
|
+
let resolveWaiting = null;
|
|
30
|
+
function makeMessage(content, sender) {
|
|
31
|
+
const formatted = sender ? `--- @${sender} says:\n${content}` : content;
|
|
32
|
+
return {
|
|
33
|
+
type: 'user',
|
|
34
|
+
message: { role: 'user', content: formatted },
|
|
35
|
+
parent_tool_use_id: null,
|
|
36
|
+
session_id: sessionId,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
sessionId,
|
|
41
|
+
push(content, sender) {
|
|
42
|
+
if (closed) {
|
|
43
|
+
console.warn('[MessageStream] Cannot push to closed stream');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
queue.push({ content, sender });
|
|
47
|
+
if (resolveWaiting && queue.length > 0) {
|
|
48
|
+
const items = queue.splice(0);
|
|
49
|
+
const batched = items.map(i => i.sender ? `--- @${i.sender} says:\n${i.content}` : i.content).join('\n\n');
|
|
50
|
+
resolveWaiting({ value: makeMessage(batched), done: false });
|
|
51
|
+
resolveWaiting = null;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
close() {
|
|
55
|
+
closed = true;
|
|
56
|
+
if (resolveWaiting) {
|
|
57
|
+
resolveWaiting({ value: undefined, done: true });
|
|
58
|
+
resolveWaiting = null;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
iterable: {
|
|
62
|
+
[Symbol.asyncIterator]() {
|
|
63
|
+
let yieldedInitial = false;
|
|
64
|
+
return {
|
|
65
|
+
async next() {
|
|
66
|
+
if (!yieldedInitial) {
|
|
67
|
+
yieldedInitial = true;
|
|
68
|
+
return { value: makeMessage(initialContent, initialSender), done: false };
|
|
69
|
+
}
|
|
70
|
+
if (closed && queue.length === 0) {
|
|
71
|
+
return { value: undefined, done: true };
|
|
72
|
+
}
|
|
73
|
+
if (queue.length > 0) {
|
|
74
|
+
const items = queue.splice(0);
|
|
75
|
+
const batched = items.map(i => i.sender ? `--- @${i.sender} says:\n${i.content}` : i.content).join('\n\n');
|
|
76
|
+
return { value: makeMessage(batched), done: false };
|
|
77
|
+
}
|
|
78
|
+
return new Promise((resolve) => {
|
|
79
|
+
resolveWaiting = resolve;
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// =============================================================================
|
|
88
|
+
// Claude SDK Engine Process
|
|
89
|
+
// =============================================================================
|
|
90
|
+
class ClaudeSDKProcess {
|
|
91
|
+
config;
|
|
92
|
+
onError;
|
|
93
|
+
pid = null; // In-process, no separate PID
|
|
94
|
+
_state = 'starting';
|
|
95
|
+
messageStream = null;
|
|
96
|
+
exitHandlers = [];
|
|
97
|
+
outputQueue = [];
|
|
98
|
+
outputResolve = null;
|
|
99
|
+
outputDone = false;
|
|
100
|
+
constructor(config, onError) {
|
|
101
|
+
this.config = config;
|
|
102
|
+
this.onError = onError;
|
|
103
|
+
}
|
|
104
|
+
get state() {
|
|
105
|
+
return this._state;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Start processing a message. Called by the engine after spawn.
|
|
109
|
+
*/
|
|
110
|
+
async start(content, sender) {
|
|
111
|
+
this._state = 'busy';
|
|
112
|
+
const workspace = this.config.workspacePath;
|
|
113
|
+
const claudeConfigDir = join(workspace, '.claude');
|
|
114
|
+
const shouldContinue = existsSync(claudeConfigDir);
|
|
115
|
+
console.log(`[ClaudeSDKProcess] Starting for ${this.config.agentId}`);
|
|
116
|
+
console.log(`[ClaudeSDKProcess] Working directory: ${workspace}`);
|
|
117
|
+
console.log(`[ClaudeSDKProcess] Continue session: ${shouldContinue}`);
|
|
118
|
+
const options = {
|
|
119
|
+
model: 'claude-opus-4-5-20251101',
|
|
120
|
+
systemPrompt: this.config.systemPrompt
|
|
121
|
+
? {
|
|
122
|
+
type: 'preset',
|
|
123
|
+
preset: 'claude_code',
|
|
124
|
+
append: this.config.systemPrompt,
|
|
125
|
+
}
|
|
126
|
+
: {
|
|
127
|
+
type: 'preset',
|
|
128
|
+
preset: 'claude_code',
|
|
129
|
+
},
|
|
130
|
+
permissionMode: 'bypassPermissions',
|
|
131
|
+
allowDangerouslySkipPermissions: true,
|
|
132
|
+
includePartialMessages: true,
|
|
133
|
+
continue: shouldContinue,
|
|
134
|
+
cwd: workspace,
|
|
135
|
+
settingSources: [],
|
|
136
|
+
env: {
|
|
137
|
+
...this.config.environment,
|
|
138
|
+
...Object.fromEntries(Object.entries(process.env).filter(([key]) => !['PWD', 'OLDPWD'].includes(key))),
|
|
139
|
+
CLAUDE_CONFIG_DIR: claudeConfigDir,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
// Add MCP servers if configured
|
|
143
|
+
if (this.config.mcpServers && this.config.mcpServers.length > 0) {
|
|
144
|
+
const mcpServers = this.buildMcpConfig(this.config.mcpServers);
|
|
145
|
+
if (Object.keys(mcpServers).length > 0) {
|
|
146
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
147
|
+
options.mcpServers = mcpServers;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Create message stream for mid-turn injection
|
|
151
|
+
this.messageStream = createMessageStream(content, sender);
|
|
152
|
+
try {
|
|
153
|
+
const q = query({
|
|
154
|
+
prompt: this.messageStream.iterable,
|
|
155
|
+
options,
|
|
156
|
+
});
|
|
157
|
+
for await (const message of q) {
|
|
158
|
+
this.emitOutput(message);
|
|
159
|
+
}
|
|
160
|
+
console.log(`[ClaudeSDKProcess] Query completed for ${this.config.agentId}`);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error(`[ClaudeSDKProcess] Query error for ${this.config.agentId}:`, error);
|
|
164
|
+
this.onError?.(error);
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
this.messageStream?.close();
|
|
168
|
+
this.messageStream = null;
|
|
169
|
+
this._state = 'ready';
|
|
170
|
+
this.finishOutput();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
buildMcpConfig(servers) {
|
|
174
|
+
const mcpServers = {};
|
|
175
|
+
for (const server of servers) {
|
|
176
|
+
if (server.transport === 'stdio') {
|
|
177
|
+
const rewrittenEnv = server.env
|
|
178
|
+
? Object.fromEntries(Object.entries(server.env).map(([key, value]) => [
|
|
179
|
+
key,
|
|
180
|
+
typeof value === 'string' ? rewriteUrlForDocker(value) : value,
|
|
181
|
+
]))
|
|
182
|
+
: undefined;
|
|
183
|
+
mcpServers[server.name] = {
|
|
184
|
+
type: 'stdio',
|
|
185
|
+
command: server.command,
|
|
186
|
+
args: server.args,
|
|
187
|
+
env: rewrittenEnv,
|
|
188
|
+
cwd: server.cwd,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
else if ((server.transport === 'sse' || server.transport === 'http') && server.url) {
|
|
192
|
+
mcpServers[server.name] = {
|
|
193
|
+
type: server.transport,
|
|
194
|
+
url: rewriteUrlForDocker(server.url),
|
|
195
|
+
headers: server.headers,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return mcpServers;
|
|
200
|
+
}
|
|
201
|
+
emitOutput(message) {
|
|
202
|
+
if (this.outputResolve) {
|
|
203
|
+
this.outputResolve({ value: message, done: false });
|
|
204
|
+
this.outputResolve = null;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.outputQueue.push(message);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
finishOutput() {
|
|
211
|
+
this.outputDone = true;
|
|
212
|
+
if (this.outputResolve) {
|
|
213
|
+
this.outputResolve({ value: undefined, done: true });
|
|
214
|
+
this.outputResolve = null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
send(message) {
|
|
218
|
+
if (message.type === 'user' && message.content && this.messageStream) {
|
|
219
|
+
// Mid-turn message injection
|
|
220
|
+
this.messageStream.push(message.content, message.sender);
|
|
221
|
+
}
|
|
222
|
+
else if (message.type === 'control' && message.action === 'heartbeat') {
|
|
223
|
+
// Heartbeat - SDK doesn't need explicit handling, just acknowledge
|
|
224
|
+
// The TymbalBridge will handle emitting heartbeat_ack
|
|
225
|
+
}
|
|
226
|
+
// Note: interrupt not supported for in-process SDK
|
|
227
|
+
}
|
|
228
|
+
get output() {
|
|
229
|
+
const self = this;
|
|
230
|
+
return {
|
|
231
|
+
[Symbol.asyncIterator]() {
|
|
232
|
+
return {
|
|
233
|
+
async next() {
|
|
234
|
+
if (self.outputQueue.length > 0) {
|
|
235
|
+
return { value: self.outputQueue.shift(), done: false };
|
|
236
|
+
}
|
|
237
|
+
if (self.outputDone) {
|
|
238
|
+
return { value: undefined, done: true };
|
|
239
|
+
}
|
|
240
|
+
return new Promise((resolve) => {
|
|
241
|
+
self.outputResolve = resolve;
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
};
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
async terminate(reason) {
|
|
249
|
+
console.log(`[ClaudeSDKProcess] Terminating: ${reason ?? 'no reason'}`);
|
|
250
|
+
this.messageStream?.close();
|
|
251
|
+
this._state = 'terminated';
|
|
252
|
+
this.finishOutput();
|
|
253
|
+
for (const handler of this.exitHandlers) {
|
|
254
|
+
handler(0);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
onExit(handler) {
|
|
258
|
+
this.exitHandlers.push(handler);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// =============================================================================
|
|
262
|
+
// Claude SDK Engine
|
|
263
|
+
// =============================================================================
|
|
264
|
+
export class ClaudeSDKEngine {
|
|
265
|
+
engineId = 'claude-sdk';
|
|
266
|
+
displayName = 'Claude Code SDK';
|
|
267
|
+
async isAvailable() {
|
|
268
|
+
// Always available - it's in-process
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
async spawn(config) {
|
|
272
|
+
const process = new ClaudeSDKProcess(config);
|
|
273
|
+
// Note: The process is created but not started yet.
|
|
274
|
+
// The AgentManager will call methods to start processing.
|
|
275
|
+
return process;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Start processing a message on a ClaudeSDKProcess.
|
|
280
|
+
* This is called by AgentManager after spawning.
|
|
281
|
+
*/
|
|
282
|
+
export function startClaudeSDKProcess(process, content, sender) {
|
|
283
|
+
if (process instanceof ClaudeSDKProcess) {
|
|
284
|
+
return process.start(content, sender);
|
|
285
|
+
}
|
|
286
|
+
throw new Error('Not a ClaudeSDKProcess');
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=claude-sdk-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sdk-engine.js","sourceRoot":"","sources":["../../src/engines/claude-sdk-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine Manager
|
|
3
|
+
*
|
|
4
|
+
* Registry for agent engines. Handles engine selection based on agent
|
|
5
|
+
* configuration and provides access to registered engines.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentEngine } from './types.js';
|
|
8
|
+
export declare class EngineManager {
|
|
9
|
+
private readonly engines;
|
|
10
|
+
/**
|
|
11
|
+
* Register an engine implementation.
|
|
12
|
+
*/
|
|
13
|
+
register(engine: AgentEngine): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get engine by ID.
|
|
16
|
+
*/
|
|
17
|
+
getEngine(engineId: string): AgentEngine | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Select engine based on engine ID, with fallback to default.
|
|
20
|
+
*/
|
|
21
|
+
selectEngine(engineId?: string): AgentEngine;
|
|
22
|
+
/**
|
|
23
|
+
* List all registered engines.
|
|
24
|
+
*/
|
|
25
|
+
listEngines(): AgentEngine[];
|
|
26
|
+
/**
|
|
27
|
+
* Check which engines are available (async availability check).
|
|
28
|
+
*/
|
|
29
|
+
getAvailableEngines(): Promise<AgentEngine[]>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=engine-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-manager.d.ts","sourceRoot":"","sources":["../../src/engines/engine-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,YAAY,CAAC;AAGxD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAE1D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAQnC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIpD;;OAEG;IACH,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;IAiB5C;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAI5B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CASpD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine Manager
|
|
3
|
+
*
|
|
4
|
+
* Registry for agent engines. Handles engine selection based on agent
|
|
5
|
+
* configuration and provides access to registered engines.
|
|
6
|
+
*/
|
|
7
|
+
import { DEFAULT_ENGINE_ID } from './types.js';
|
|
8
|
+
export class EngineManager {
|
|
9
|
+
engines = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Register an engine implementation.
|
|
12
|
+
*/
|
|
13
|
+
register(engine) {
|
|
14
|
+
if (this.engines.has(engine.engineId)) {
|
|
15
|
+
console.warn(`[EngineManager] Overwriting existing engine: ${engine.engineId}`);
|
|
16
|
+
}
|
|
17
|
+
this.engines.set(engine.engineId, engine);
|
|
18
|
+
console.log(`[EngineManager] Registered engine: ${engine.engineId} (${engine.displayName})`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get engine by ID.
|
|
22
|
+
*/
|
|
23
|
+
getEngine(engineId) {
|
|
24
|
+
return this.engines.get(engineId);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Select engine based on engine ID, with fallback to default.
|
|
28
|
+
*/
|
|
29
|
+
selectEngine(engineId) {
|
|
30
|
+
const id = engineId ?? DEFAULT_ENGINE_ID;
|
|
31
|
+
const engine = this.engines.get(id);
|
|
32
|
+
if (!engine) {
|
|
33
|
+
// Fall back to default engine if requested engine not found
|
|
34
|
+
const defaultEngine = this.engines.get(DEFAULT_ENGINE_ID);
|
|
35
|
+
if (!defaultEngine) {
|
|
36
|
+
throw new Error(`No engines registered. Cannot select engine: ${id}`);
|
|
37
|
+
}
|
|
38
|
+
console.warn(`[EngineManager] Engine '${id}' not found, falling back to '${DEFAULT_ENGINE_ID}'`);
|
|
39
|
+
return defaultEngine;
|
|
40
|
+
}
|
|
41
|
+
return engine;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* List all registered engines.
|
|
45
|
+
*/
|
|
46
|
+
listEngines() {
|
|
47
|
+
return Array.from(this.engines.values());
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Check which engines are available (async availability check).
|
|
51
|
+
*/
|
|
52
|
+
async getAvailableEngines() {
|
|
53
|
+
const results = await Promise.all(Array.from(this.engines.values()).map(async (engine) => {
|
|
54
|
+
const available = await engine.isAvailable();
|
|
55
|
+
return available ? engine : null;
|
|
56
|
+
}));
|
|
57
|
+
return results.filter((e) => e !== null);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=engine-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-manager.js","sourceRoot":"","sources":["../../src/engines/engine-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,MAAmB;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,gDAAgD,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,sCAAsC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAiB;QAC5B,MAAM,EAAE,GAAG,QAAQ,IAAI,iBAAiB,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,4DAA4D;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,iCAAiC,iBAAiB,GAAG,CAAC,CAAC;YACjG,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Engines
|
|
3
|
+
*
|
|
4
|
+
* Pluggable engine system for running different agent implementations.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { EngineManager } from './engine-manager.js';
|
|
8
|
+
export { ClaudeSDKEngine, startClaudeSDKProcess } from './claude-sdk-engine.js';
|
|
9
|
+
export { NuumEngine } from './nuum-engine.js';
|
|
10
|
+
import { EngineManager } from './engine-manager.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create and configure the default engine manager with all available engines.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createEngineManager(): EngineManager;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|