@miriad-systems/backend 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Agent Manager
3
+ *
4
+ * Manages multiple Claude SDK agent instances within a single runtime process.
5
+ * Handles agent lifecycle: activation, message routing, suspension.
6
+ *
7
+ * Key feature: Streaming input support - messages can be pushed to Claude
8
+ * during execution using the SDK's AsyncIterable prompt feature.
9
+ */
10
+ import type { AgentState, ActivateAgentMessage, DeliverMessageMessage, SuspendAgentMessage, AgentFrameMessage } from './types.js';
11
+ export interface AgentManagerConfig {
12
+ /** Base path for agent workspaces */
13
+ workspaceBasePath: string;
14
+ /** Callback when agent sends a frame */
15
+ onFrame: (message: AgentFrameMessage) => void;
16
+ /** Callback when agent checks in (SDK ready) */
17
+ onCheckin: (agentId: string) => void;
18
+ /** Callback on agent error */
19
+ onError?: (agentId: string, error: Error) => void;
20
+ }
21
+ export declare function parseAgentId(agentId: string): {
22
+ spaceId: string;
23
+ channelId: string;
24
+ callsign: string;
25
+ };
26
+ export declare class AgentManager {
27
+ private readonly config;
28
+ private readonly agents;
29
+ constructor(config: AgentManagerConfig);
30
+ /**
31
+ * Get all agents.
32
+ */
33
+ getAgents(): AgentState[];
34
+ /**
35
+ * Get a specific agent's state.
36
+ */
37
+ getAgent(agentId: string): AgentState | null;
38
+ /**
39
+ * Activate an agent (spawn Claude SDK).
40
+ */
41
+ activate(message: ActivateAgentMessage): Promise<void>;
42
+ /**
43
+ * Format a message with sender header.
44
+ */
45
+ private formatMessage;
46
+ /**
47
+ * Deliver a message to an agent.
48
+ * Auto-activates the agent if it doesn't exist (local runtime is always-on).
49
+ */
50
+ deliverMessage(message: DeliverMessageMessage): Promise<void>;
51
+ /**
52
+ * Suspend an agent (tear down SDK).
53
+ */
54
+ suspend(message: SuspendAgentMessage): Promise<void>;
55
+ /**
56
+ * Suspend all agents (for shutdown).
57
+ */
58
+ suspendAll(): Promise<void>;
59
+ private ensureWorkspace;
60
+ private getClaudeConfigDir;
61
+ private hasExistingSession;
62
+ private processMessage;
63
+ /**
64
+ * Process the message queue for an agent.
65
+ * Batches all queued messages into a single message to match sandbox behavior.
66
+ */
67
+ private processQueue;
68
+ }
69
+ //# sourceMappingURL=agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EACV,UAAU,EAEV,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AA6HpB,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,gDAAgD;IAChD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACnD;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAUA;AAMD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE/C,MAAM,EAAE,kBAAkB;IAItC;;OAEG;IACH,SAAS,IAAI,UAAU,EAAE;IAIzB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAI5C;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8D5D;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DnE;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B1D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;YAIZ,cAAc;IAyH5B;;;OAGG;YACW,YAAY;CAmB3B"}
@@ -0,0 +1,424 @@
1
+ /**
2
+ * Agent Manager
3
+ *
4
+ * Manages multiple Claude SDK agent instances within a single runtime process.
5
+ * Handles agent lifecycle: activation, message routing, suspension.
6
+ *
7
+ * Key feature: Streaming input support - messages can be pushed to Claude
8
+ * during execution using the SDK's AsyncIterable prompt feature.
9
+ */
10
+ import { existsSync, mkdirSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { randomUUID } from 'node:crypto';
13
+ import { query } from '@anthropic-ai/claude-agent-sdk';
14
+ import { TymbalBridge } from './tymbal-bridge.js';
15
+ // =============================================================================
16
+ // Message Stream Factory
17
+ // =============================================================================
18
+ /**
19
+ * Create a message stream that can push messages to Claude during execution.
20
+ *
21
+ * The stream works as follows:
22
+ * 1. First call to next() yields the initial message immediately
23
+ * 2. Subsequent calls wait for push() to add messages to the queue
24
+ * 3. When Claude asks for next input, we batch all queued messages and yield
25
+ * 4. close() signals no more messages (ends the stream)
26
+ */
27
+ function createMessageStream(initialContent) {
28
+ const sessionId = randomUUID();
29
+ const queue = [];
30
+ let closed = false;
31
+ let resolveWaiting = null;
32
+ // Helper to create SDKUserMessage from content
33
+ function makeMessage(content) {
34
+ return {
35
+ type: 'user',
36
+ message: {
37
+ role: 'user',
38
+ content,
39
+ },
40
+ parent_tool_use_id: null,
41
+ session_id: sessionId,
42
+ };
43
+ }
44
+ const stream = {
45
+ sessionId,
46
+ push(content) {
47
+ if (closed) {
48
+ console.warn('[MessageStream] Cannot push to closed stream');
49
+ return;
50
+ }
51
+ queue.push(content);
52
+ // If Claude is waiting for input, resolve immediately with batched messages
53
+ if (resolveWaiting && queue.length > 0) {
54
+ const batched = queue.splice(0).join('\n\n');
55
+ resolveWaiting({ value: makeMessage(batched), done: false });
56
+ resolveWaiting = null;
57
+ }
58
+ },
59
+ close() {
60
+ closed = true;
61
+ // If Claude is waiting, signal end of stream
62
+ if (resolveWaiting) {
63
+ resolveWaiting({ value: undefined, done: true });
64
+ resolveWaiting = null;
65
+ }
66
+ },
67
+ iterable: {
68
+ [Symbol.asyncIterator]() {
69
+ let yieldedInitial = false;
70
+ return {
71
+ async next() {
72
+ // First call: yield initial message immediately
73
+ if (!yieldedInitial) {
74
+ yieldedInitial = true;
75
+ return { value: makeMessage(initialContent), done: false };
76
+ }
77
+ // If stream is closed and queue is empty, we're done
78
+ if (closed && queue.length === 0) {
79
+ return { value: undefined, done: true };
80
+ }
81
+ // If there are queued messages, batch and yield them
82
+ if (queue.length > 0) {
83
+ const batched = queue.splice(0).join('\n\n');
84
+ return { value: makeMessage(batched), done: false };
85
+ }
86
+ // Wait for push() or close()
87
+ return new Promise((resolve) => {
88
+ resolveWaiting = resolve;
89
+ });
90
+ },
91
+ };
92
+ },
93
+ },
94
+ };
95
+ return stream;
96
+ }
97
+ // =============================================================================
98
+ // Agent ID Parsing
99
+ // =============================================================================
100
+ export function parseAgentId(agentId) {
101
+ const parts = agentId.split(':');
102
+ if (parts.length !== 3) {
103
+ throw new Error(`Invalid agentId format: ${agentId}. Expected spaceId:channelId:callsign`);
104
+ }
105
+ return {
106
+ spaceId: parts[0],
107
+ channelId: parts[1],
108
+ callsign: parts[2],
109
+ };
110
+ }
111
+ // =============================================================================
112
+ // Agent Manager
113
+ // =============================================================================
114
+ export class AgentManager {
115
+ config;
116
+ agents = new Map();
117
+ constructor(config) {
118
+ this.config = config;
119
+ }
120
+ /**
121
+ * Get all agents.
122
+ */
123
+ getAgents() {
124
+ return Array.from(this.agents.values()).map((instance) => instance.state);
125
+ }
126
+ /**
127
+ * Get a specific agent's state.
128
+ */
129
+ getAgent(agentId) {
130
+ return this.agents.get(agentId)?.state ?? null;
131
+ }
132
+ /**
133
+ * Activate an agent (spawn Claude SDK).
134
+ */
135
+ async activate(message) {
136
+ const { agentId, systemPrompt, mcpServers, workspacePath } = message;
137
+ const { callsign } = parseAgentId(agentId);
138
+ console.log(`[AgentManager] Activating ${agentId}`);
139
+ console.log(`[AgentManager] mcpServers from message:`, JSON.stringify(mcpServers));
140
+ // Check if already active
141
+ const existing = this.agents.get(agentId);
142
+ if (existing && existing.state.status !== 'offline') {
143
+ console.log(`[AgentManager] Agent ${agentId} already active (${existing.state.status})`);
144
+ return;
145
+ }
146
+ console.log(`[AgentManager] @${callsign} state: offline → activating`);
147
+ // Always use local config basePath + agentId structure for security
148
+ // (ignore workspacePath from backend to prevent arbitrary path access)
149
+ const resolvedPath = join(this.config.workspaceBasePath, agentId.replace(/:/g, '/'));
150
+ console.log(`[AgentManager] @${callsign} workspace config:`);
151
+ console.log(`[AgentManager] basePath: ${this.config.workspaceBasePath}`);
152
+ console.log(`[AgentManager] backend workspacePath (ignored): ${workspacePath || '(none)'}`);
153
+ console.log(`[AgentManager] resolved: ${resolvedPath}`);
154
+ this.ensureWorkspace(resolvedPath);
155
+ // Create bridge
156
+ const bridge = new TymbalBridge({
157
+ agentId,
158
+ callsign,
159
+ onFrame: this.config.onFrame,
160
+ });
161
+ // Create agent instance
162
+ const instance = {
163
+ state: {
164
+ agentId,
165
+ status: 'activating',
166
+ workspacePath: resolvedPath,
167
+ systemPrompt,
168
+ mcpServers,
169
+ activatedAt: new Date().toISOString(),
170
+ lastActivity: new Date().toISOString(),
171
+ },
172
+ bridge,
173
+ messageQueue: [],
174
+ isProcessing: false,
175
+ messageStream: null,
176
+ };
177
+ console.log(`[AgentManager] Stored mcpServers in state:`, JSON.stringify(instance.state.mcpServers));
178
+ this.agents.set(agentId, instance);
179
+ // Signal checkin (SDK ready)
180
+ // In a real implementation, we'd wait for SDK initialization
181
+ // For now, we mark as online immediately after activation setup
182
+ instance.state.status = 'online';
183
+ instance.state.lastActivity = new Date().toISOString();
184
+ this.config.onCheckin(agentId);
185
+ console.log(`[AgentManager] @${callsign} state: activating → online`);
186
+ }
187
+ /**
188
+ * Format a message with sender header.
189
+ */
190
+ formatMessage(message) {
191
+ return `--- @${message.sender} says:\n${message.content}`;
192
+ }
193
+ /**
194
+ * Deliver a message to an agent.
195
+ * Auto-activates the agent if it doesn't exist (local runtime is always-on).
196
+ */
197
+ async deliverMessage(message) {
198
+ const { agentId, systemPrompt, mcpServers } = message;
199
+ let instance = this.agents.get(agentId);
200
+ const { callsign } = parseAgentId(agentId);
201
+ // Auto-activate agent if not found or offline (local runtime is always-on)
202
+ if (!instance || instance.state.status === 'offline') {
203
+ console.log(`[AgentManager] @${callsign} not active, auto-activating for message delivery`);
204
+ if (mcpServers) {
205
+ console.log(`[AgentManager] Auto-activation WITH mcpServers (count: ${mcpServers.length})`);
206
+ }
207
+ else {
208
+ console.warn(`[AgentManager] WARNING: Auto-activation WITHOUT mcpServers!`);
209
+ }
210
+ await this.activate({
211
+ type: 'activate',
212
+ agentId,
213
+ systemPrompt: systemPrompt || '',
214
+ workspacePath: '', // Will be ignored, uses local config
215
+ mcpServers, // Now passed from message
216
+ });
217
+ instance = this.agents.get(agentId);
218
+ if (!instance) {
219
+ console.error(`[AgentManager] Failed to auto-activate agent ${agentId}`);
220
+ return;
221
+ }
222
+ console.log(`[AgentManager] @${callsign} auto-activated, proceeding with message`);
223
+ }
224
+ // Update mcpServers if provided in message (keeps config fresh even for online agents)
225
+ if (mcpServers && instance) {
226
+ console.log(`[AgentManager] Updating mcpServers for online agent @${callsign} (count: ${mcpServers.length})`);
227
+ instance.state.mcpServers = mcpServers;
228
+ }
229
+ // Format message with sender header
230
+ const formattedContent = this.formatMessage(message);
231
+ // If agent is processing and has an active stream, push to it (mid-execution delivery!)
232
+ if (instance.isProcessing && instance.messageStream) {
233
+ console.log(`[AgentManager] @${callsign} busy with active stream, pushing message mid-execution`);
234
+ instance.messageStream.push(formattedContent);
235
+ return;
236
+ }
237
+ // Legacy fallback: queue message if processing but no stream (shouldn't happen with new code)
238
+ if (instance.isProcessing) {
239
+ console.log(`[AgentManager] @${callsign} busy (no stream), queueing message`);
240
+ instance.messageQueue.push(message);
241
+ return;
242
+ }
243
+ // Process message (will transition to busy)
244
+ console.log(`[AgentManager] @${callsign} calling processMessage with content length: ${formattedContent.length}`);
245
+ await this.processMessage(instance, formattedContent, systemPrompt);
246
+ console.log(`[AgentManager] @${callsign} processMessage returned`);
247
+ }
248
+ /**
249
+ * Suspend an agent (tear down SDK).
250
+ */
251
+ async suspend(message) {
252
+ const { agentId, reason } = message;
253
+ const instance = this.agents.get(agentId);
254
+ if (!instance) {
255
+ console.log(`[AgentManager] Agent ${agentId} not found for suspension`);
256
+ return;
257
+ }
258
+ const { callsign } = parseAgentId(agentId);
259
+ const oldStatus = instance.state.status;
260
+ console.log(`[AgentManager] @${callsign} state: ${oldStatus} → offline (${reason ?? 'no reason'})`);
261
+ // Update state
262
+ instance.state.status = 'offline';
263
+ instance.state.lastActivity = new Date().toISOString();
264
+ // Close any active message stream
265
+ if (instance.messageStream) {
266
+ instance.messageStream.close();
267
+ instance.messageStream = null;
268
+ }
269
+ // Clear message queue
270
+ instance.messageQueue = [];
271
+ instance.isProcessing = false;
272
+ // Optionally remove from map (or keep for restart)
273
+ // this.agents.delete(agentId);
274
+ }
275
+ /**
276
+ * Suspend all agents (for shutdown).
277
+ */
278
+ async suspendAll() {
279
+ const agentIds = Array.from(this.agents.keys());
280
+ for (const agentId of agentIds) {
281
+ await this.suspend({ type: 'suspend', agentId, reason: 'runtime shutdown' });
282
+ }
283
+ }
284
+ // ===========================================================================
285
+ // Private Methods
286
+ // ===========================================================================
287
+ ensureWorkspace(workspace) {
288
+ if (!existsSync(workspace)) {
289
+ console.log(`[AgentManager] Creating workspace: ${workspace}`);
290
+ mkdirSync(workspace, { recursive: true });
291
+ }
292
+ }
293
+ getClaudeConfigDir(workspace) {
294
+ return join(workspace, '.claude');
295
+ }
296
+ hasExistingSession(workspace) {
297
+ return existsSync(this.getClaudeConfigDir(workspace));
298
+ }
299
+ async processMessage(instance, content, systemPrompt) {
300
+ const { state, bridge } = instance;
301
+ const { callsign } = parseAgentId(state.agentId);
302
+ const oldStatus = instance.state.status;
303
+ instance.isProcessing = true;
304
+ instance.state.status = 'busy';
305
+ instance.state.lastActivity = new Date().toISOString();
306
+ console.log(`[AgentManager] @${callsign} state: ${oldStatus} → busy`);
307
+ const workspace = state.workspacePath;
308
+ const shouldContinue = this.hasExistingSession(workspace);
309
+ const claudeConfigDir = this.getClaudeConfigDir(workspace);
310
+ // Use updated system prompt if provided
311
+ const prompt = systemPrompt ?? state.systemPrompt;
312
+ console.log(`[AgentManager] Processing message for ${state.agentId}`);
313
+ console.log(`[AgentManager] Working directory: ${workspace}`);
314
+ console.log(`[AgentManager] Continue session: ${shouldContinue}`);
315
+ const options = {
316
+ model: 'claude-opus-4-5-20251101',
317
+ systemPrompt: prompt
318
+ ? {
319
+ type: 'preset',
320
+ preset: 'claude_code',
321
+ append: prompt,
322
+ }
323
+ : {
324
+ type: 'preset',
325
+ preset: 'claude_code',
326
+ },
327
+ permissionMode: 'bypassPermissions',
328
+ allowDangerouslySkipPermissions: true,
329
+ includePartialMessages: true,
330
+ continue: shouldContinue,
331
+ cwd: workspace,
332
+ env: {
333
+ // Filter out PWD/OLDPWD to prevent parent's cwd from leaking into subprocess
334
+ ...Object.fromEntries(Object.entries(process.env).filter(([key]) => !['PWD', 'OLDPWD'].includes(key))),
335
+ CLAUDE_CONFIG_DIR: claudeConfigDir,
336
+ },
337
+ };
338
+ // Add MCP servers if configured (SDK expects Record<string, McpServerConfig>)
339
+ if (state.mcpServers && state.mcpServers.length > 0) {
340
+ console.log(`[AgentManager] Building MCP config from state.mcpServers (count: ${state.mcpServers.length})`);
341
+ console.log(`[AgentManager] state.mcpServers:`, JSON.stringify(state.mcpServers));
342
+ // Build MCP servers config - use type assertion since SDK uses discriminated unions
343
+ const mcpServers = {};
344
+ for (const server of state.mcpServers) {
345
+ if (server.transport === 'stdio') {
346
+ mcpServers[server.name] = {
347
+ type: 'stdio',
348
+ command: server.command,
349
+ args: server.args,
350
+ env: server.env,
351
+ cwd: server.cwd,
352
+ };
353
+ }
354
+ else if (server.transport === 'sse' || server.transport === 'http') {
355
+ mcpServers[server.name] = {
356
+ type: server.transport,
357
+ url: server.url,
358
+ headers: server.headers,
359
+ };
360
+ }
361
+ }
362
+ if (Object.keys(mcpServers).length > 0) {
363
+ console.log(`[AgentManager] Built SDK mcpServers:`, JSON.stringify(mcpServers));
364
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
365
+ options.mcpServers = mcpServers;
366
+ }
367
+ }
368
+ else {
369
+ console.warn(`[AgentManager] No MCP servers configured for ${state.agentId} (state.mcpServers: ${state.mcpServers})`);
370
+ }
371
+ // Create message stream for this conversation
372
+ // This allows new messages to be pushed to Claude mid-execution
373
+ const messageStream = createMessageStream(content);
374
+ instance.messageStream = messageStream;
375
+ console.log(`[AgentManager] @${callsign} created message stream (sessionId: ${messageStream.sessionId})`);
376
+ try {
377
+ const q = query({
378
+ prompt: messageStream.iterable, // Use stream instead of static string!
379
+ options,
380
+ });
381
+ for await (const message of q) {
382
+ await bridge.processSDKMessage(message);
383
+ }
384
+ await bridge.finalize();
385
+ console.log(`[AgentManager] Query completed for ${state.agentId}`);
386
+ }
387
+ catch (error) {
388
+ console.error(`[AgentManager] Query error for ${state.agentId}:`, error);
389
+ this.config.onError?.(state.agentId, error);
390
+ }
391
+ finally {
392
+ // Clean up stream
393
+ if (instance.messageStream) {
394
+ instance.messageStream.close();
395
+ instance.messageStream = null;
396
+ }
397
+ instance.isProcessing = false;
398
+ instance.state.status = 'online';
399
+ instance.state.lastActivity = new Date().toISOString();
400
+ console.log(`[AgentManager] @${callsign} state: busy → online`);
401
+ // Process any queued messages that came in via legacy path
402
+ await this.processQueue(instance);
403
+ }
404
+ }
405
+ /**
406
+ * Process the message queue for an agent.
407
+ * Batches all queued messages into a single message to match sandbox behavior.
408
+ */
409
+ async processQueue(instance) {
410
+ if (instance.messageQueue.length === 0) {
411
+ return;
412
+ }
413
+ const { callsign } = parseAgentId(instance.state.agentId);
414
+ // Batch all queued messages together
415
+ const queuedMessages = [...instance.messageQueue];
416
+ instance.messageQueue = []; // Clear the queue
417
+ console.log(`[AgentManager] @${callsign} processing ${queuedMessages.length} queued messages as a batch`);
418
+ // Format and combine all message contents with separator
419
+ const combinedContent = queuedMessages.map(msg => this.formatMessage(msg)).join('\n\n');
420
+ // Process as a single message (use first message's metadata)
421
+ await this.processMessage(instance, combinedContent, queuedMessages[0].systemPrompt);
422
+ }
423
+ }
424
+ //# sourceMappingURL=agent-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Local Runtime CLI
4
+ *
5
+ * Run CAST agents on your local machine.
6
+ *
7
+ * Commands:
8
+ * auth <connection-string> - Authenticate with CAST
9
+ * start [--name <name>] - Start the runtime
10
+ * status - Show runtime status
11
+ * agents - List active agents
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}