@bytespell/amux 0.0.11 → 0.0.12
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/.claude/settings.local.json +11 -0
- package/CLAUDE.md +104 -0
- package/LICENSE +21 -0
- package/README.md +204 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +118 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +68 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +135 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/{lib/mentions.d.ts → message-parser.d.ts} +3 -5
- package/dist/message-parser.d.ts.map +1 -0
- package/dist/message-parser.js +45 -0
- package/dist/message-parser.js.map +1 -0
- package/dist/server.d.ts +24 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +356 -0
- package/dist/server.js.map +1 -0
- package/dist/session-updates.d.ts +26 -0
- package/dist/session-updates.d.ts.map +1 -0
- package/dist/session-updates.js +68 -0
- package/dist/session-updates.js.map +1 -0
- package/dist/session.d.ts +207 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +563 -0
- package/dist/session.js.map +1 -0
- package/dist/state.d.ts +74 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +250 -0
- package/dist/state.js.map +1 -0
- package/dist/terminal.d.ts +47 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +137 -0
- package/dist/terminal.js.map +1 -0
- package/dist/types.d.ts +64 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -31
- package/dist/types.js.map +1 -1
- package/dist/ws-adapter.d.ts +39 -0
- package/dist/ws-adapter.d.ts.map +1 -0
- package/dist/ws-adapter.js +198 -0
- package/dist/ws-adapter.js.map +1 -0
- package/package.json +47 -24
- package/src/client.ts +162 -0
- package/src/index.ts +66 -0
- package/src/message-parser.ts +54 -0
- package/src/session-updates.ts +87 -0
- package/src/session.ts +719 -0
- package/src/state.ts +287 -0
- package/src/terminal.ts +164 -0
- package/src/types.ts +88 -0
- package/src/ws-adapter.ts +245 -0
- package/tsconfig.json +22 -0
- package/dist/chunk-5IPYOXBE.js +0 -32
- package/dist/chunk-5IPYOXBE.js.map +0 -1
- package/dist/chunk-C73RKCTS.js +0 -36
- package/dist/chunk-C73RKCTS.js.map +0 -1
- package/dist/chunk-VVXT4HQM.js +0 -779
- package/dist/chunk-VVXT4HQM.js.map +0 -1
- package/dist/lib/logger.d.ts +0 -24
- package/dist/lib/logger.js +0 -17
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/mentions.js +0 -7
- package/dist/lib/mentions.js.map +0 -1
- package/dist/streams/backends/index.d.ts +0 -88
- package/dist/streams/backends/index.js +0 -13
- package/dist/streams/backends/index.js.map +0 -1
- package/dist/streams/manager.d.ts +0 -55
- package/dist/streams/manager.js +0 -248
- package/dist/streams/manager.js.map +0 -1
- package/dist/types-DCRtrjjj.d.ts +0 -192
- package/scripts/fix-pty.cjs +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* amux - Agent Multiplexer
|
|
3
|
+
*
|
|
4
|
+
* A library for managing ACP agent sessions with an EventEmitter interface.
|
|
5
|
+
* Transport-agnostic - wire up to WebSocket, HTTP, IPC, or anything else.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { AgentSession, createWsAdapter } from '@bytespell/amux';
|
|
10
|
+
* import { WebSocketServer } from 'ws';
|
|
11
|
+
*
|
|
12
|
+
* const session = new AgentSession({
|
|
13
|
+
* instanceId: 'my-instance',
|
|
14
|
+
* basePath: __dirname,
|
|
15
|
+
* systemContext: 'You are a helpful assistant...',
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Option 1: Use the WebSocket adapter
|
|
19
|
+
* const wss = new WebSocketServer({ port: 3000 });
|
|
20
|
+
* createWsAdapter(session, wss);
|
|
21
|
+
*
|
|
22
|
+
* // Option 2: Handle events yourself
|
|
23
|
+
* session.on('ready', (data) => console.log('Ready:', data));
|
|
24
|
+
* session.on('update', (data) => myTransport.send(data));
|
|
25
|
+
*
|
|
26
|
+
* await session.spawnAgent();
|
|
27
|
+
* await session.prompt('Hello!');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export { AgentSession } from './session.js';
|
|
31
|
+
export type { AgentSessionEvents } from './session.js';
|
|
32
|
+
export { createWsAdapter } from './ws-adapter.js';
|
|
33
|
+
export type { WsAdapterOptions } from './ws-adapter.js';
|
|
34
|
+
export { AmuxClient } from './client.js';
|
|
35
|
+
export { TerminalManager } from './terminal.js';
|
|
36
|
+
export { StateManager } from './state.js';
|
|
37
|
+
export { isToolCallUpdate, isToolCallUpdateMessage, isDiffContent, normalizeSessionUpdate, } from './session-updates.js';
|
|
38
|
+
export { parseMessageToContentBlocks } from './message-parser.js';
|
|
39
|
+
export type { AgentSessionConfig, AgentConfig, SessionMetadata, SessionState, SessionRestoreInfo, StoredEvent, } from './types.js';
|
|
40
|
+
export { AGENTS } from './types.js';
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAGlE,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,WAAW,GACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* amux - Agent Multiplexer
|
|
3
|
+
*
|
|
4
|
+
* A library for managing ACP agent sessions with an EventEmitter interface.
|
|
5
|
+
* Transport-agnostic - wire up to WebSocket, HTTP, IPC, or anything else.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { AgentSession, createWsAdapter } from '@bytespell/amux';
|
|
10
|
+
* import { WebSocketServer } from 'ws';
|
|
11
|
+
*
|
|
12
|
+
* const session = new AgentSession({
|
|
13
|
+
* instanceId: 'my-instance',
|
|
14
|
+
* basePath: __dirname,
|
|
15
|
+
* systemContext: 'You are a helpful assistant...',
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* // Option 1: Use the WebSocket adapter
|
|
19
|
+
* const wss = new WebSocketServer({ port: 3000 });
|
|
20
|
+
* createWsAdapter(session, wss);
|
|
21
|
+
*
|
|
22
|
+
* // Option 2: Handle events yourself
|
|
23
|
+
* session.on('ready', (data) => console.log('Ready:', data));
|
|
24
|
+
* session.on('update', (data) => myTransport.send(data));
|
|
25
|
+
*
|
|
26
|
+
* await session.spawnAgent();
|
|
27
|
+
* await session.prompt('Hello!');
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
// Core session management
|
|
31
|
+
export { AgentSession } from './session.js';
|
|
32
|
+
// WebSocket adapter
|
|
33
|
+
export { createWsAdapter } from './ws-adapter.js';
|
|
34
|
+
// Supporting components (for advanced usage)
|
|
35
|
+
export { AmuxClient } from './client.js';
|
|
36
|
+
export { TerminalManager } from './terminal.js';
|
|
37
|
+
export { StateManager } from './state.js';
|
|
38
|
+
// Session update utilities
|
|
39
|
+
export { isToolCallUpdate, isToolCallUpdateMessage, isDiffContent, normalizeSessionUpdate, } from './session-updates.js';
|
|
40
|
+
// Message parsing utilities
|
|
41
|
+
export { parseMessageToContentBlocks } from './message-parser.js';
|
|
42
|
+
// Built-in agents registry
|
|
43
|
+
export { AGENTS } from './types.js';
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,6CAA6C;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,2BAA2B;AAC3B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,4BAA4B;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAYlE,2BAA2B;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import type * as acp from '@agentclientprotocol/sdk';
|
|
3
2
|
/**
|
|
4
3
|
* Parse message text with @mentions into ContentBlock array.
|
|
5
4
|
* @mentions become resource_link blocks, other text becomes text blocks.
|
|
@@ -9,6 +8,5 @@ import { ContentBlock } from '@agentclientprotocol/sdk';
|
|
|
9
8
|
* - "@src/foo.ts" → [{ type: 'resource_link', uri: 'file://...', name: 'src/foo.ts' }]
|
|
10
9
|
* - "check @src/foo.ts for bugs" → text + resource_link + text
|
|
11
10
|
*/
|
|
12
|
-
declare function parseMessageToContentBlocks(message: string, workingDir: string): ContentBlock[];
|
|
13
|
-
|
|
14
|
-
export { parseMessageToContentBlocks };
|
|
11
|
+
export declare function parseMessageToContentBlocks(message: string, workingDir: string): acp.ContentBlock[];
|
|
12
|
+
//# sourceMappingURL=message-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-parser.d.ts","sourceRoot":"","sources":["../src/message-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAErD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,GAAG,CAAC,YAAY,EAAE,CAsCpB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
/**
|
|
3
|
+
* Parse message text with @mentions into ContentBlock array.
|
|
4
|
+
* @mentions become resource_link blocks, other text becomes text blocks.
|
|
5
|
+
*
|
|
6
|
+
* Examples:
|
|
7
|
+
* - "hello world" → [{ type: 'text', text: 'hello world' }]
|
|
8
|
+
* - "@src/foo.ts" → [{ type: 'resource_link', uri: 'file://...', name: 'src/foo.ts' }]
|
|
9
|
+
* - "check @src/foo.ts for bugs" → text + resource_link + text
|
|
10
|
+
*/
|
|
11
|
+
export function parseMessageToContentBlocks(message, workingDir) {
|
|
12
|
+
const blocks = [];
|
|
13
|
+
// Match @path/to/file.ts, @./local.ts, @../parent/file.ts
|
|
14
|
+
// Allows leading ./ or ../ followed by path characters
|
|
15
|
+
const mentionRegex = /@(\.{0,2}[\w\/\.\-]+)/g;
|
|
16
|
+
let lastIndex = 0;
|
|
17
|
+
for (const match of message.matchAll(mentionRegex)) {
|
|
18
|
+
// Add text before mention
|
|
19
|
+
if (match.index > lastIndex) {
|
|
20
|
+
const text = message.slice(lastIndex, match.index);
|
|
21
|
+
if (text.trim()) {
|
|
22
|
+
blocks.push({ type: 'text', text });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Add resource_link for mention
|
|
26
|
+
const relativePath = match[1];
|
|
27
|
+
const absolutePath = path.resolve(workingDir, relativePath);
|
|
28
|
+
blocks.push({
|
|
29
|
+
type: 'resource_link',
|
|
30
|
+
uri: `file://${absolutePath}`,
|
|
31
|
+
name: relativePath,
|
|
32
|
+
});
|
|
33
|
+
lastIndex = match.index + match[0].length;
|
|
34
|
+
}
|
|
35
|
+
// Add remaining text
|
|
36
|
+
if (lastIndex < message.length) {
|
|
37
|
+
const text = message.slice(lastIndex);
|
|
38
|
+
if (text.trim()) {
|
|
39
|
+
blocks.push({ type: 'text', text });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// If no mentions found, return single text block
|
|
43
|
+
return blocks.length > 0 ? blocks : [{ type: 'text', text: message }];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=message-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-parser.js","sourceRoot":"","sources":["../src/message-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAe,EACf,UAAkB;IAElB,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,0DAA0D;IAC1D,uDAAuD;IACvD,MAAM,YAAY,GAAG,wBAAwB,CAAC;IAE9C,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,0BAA0B;QAC1B,IAAI,KAAK,CAAC,KAAM,GAAG,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,UAAU,YAAY,EAAE;YAC7B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QAEH,SAAS,GAAG,KAAK,CAAC,KAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Application } from 'express';
|
|
2
|
+
import { type Server } from 'http';
|
|
3
|
+
import { AgentSession } from './session.js';
|
|
4
|
+
import type { AmuxServerConfig } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create an amux server with full Express + WebSocket setup.
|
|
7
|
+
* This is the "batteries included" API for building agent-powered plugins.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createAmuxServer(config?: AmuxServerConfig): {
|
|
10
|
+
app: Application;
|
|
11
|
+
server: Server;
|
|
12
|
+
start: () => Promise<void>;
|
|
13
|
+
shutdown: () => void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Attach amux to an existing Express app and HTTP server.
|
|
17
|
+
* For when you want more control over the server setup.
|
|
18
|
+
*/
|
|
19
|
+
export declare function attachAmux(_app: Application, server: Server, config: Omit<AmuxServerConfig, 'port' | 'dev' | 'staticDir'>): {
|
|
20
|
+
agentSession: AgentSession;
|
|
21
|
+
start: () => Promise<void>;
|
|
22
|
+
shutdown: () => void;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAkD,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,YAAY,CAAC;AAY3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAqB,GAAG;IAC/D,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CA0SA;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC,GAC3D;IACD,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CA2EA"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import { WebSocketServer, WebSocket } from 'ws';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import os from 'os';
|
|
7
|
+
import { AgentSession } from './session.js';
|
|
8
|
+
import { StateManager } from './state.js';
|
|
9
|
+
/**
|
|
10
|
+
* Create an amux server with full Express + WebSocket setup.
|
|
11
|
+
* This is the "batteries included" API for building agent-powered plugins.
|
|
12
|
+
*/
|
|
13
|
+
export function createAmuxServer(config = {}) {
|
|
14
|
+
const PORT = config.port ?? (process.env.PORT ? parseInt(process.env.PORT, 10) : 3000);
|
|
15
|
+
const INSTANCE_ID = process.env.INSTANCE_ID ?? 'default';
|
|
16
|
+
const basePath = config.basePath ?? process.cwd();
|
|
17
|
+
const isDev = config.dev ?? !config.staticDir;
|
|
18
|
+
const app = express();
|
|
19
|
+
const server = createServer(app);
|
|
20
|
+
const clients = new Set();
|
|
21
|
+
// State manager
|
|
22
|
+
const stateManager = new StateManager(config.stateDir);
|
|
23
|
+
// Broadcast function
|
|
24
|
+
function broadcast(message) {
|
|
25
|
+
const msgStr = JSON.stringify(message);
|
|
26
|
+
for (const client of clients) {
|
|
27
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
28
|
+
client.send(msgStr);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Create agent session
|
|
33
|
+
const agentSession = new AgentSession({
|
|
34
|
+
instanceId: INSTANCE_ID,
|
|
35
|
+
basePath,
|
|
36
|
+
broadcast,
|
|
37
|
+
systemContext: config.systemContext,
|
|
38
|
+
fixedCwd: config.fixedCwd,
|
|
39
|
+
agentType: config.agentType,
|
|
40
|
+
stateDir: config.stateDir,
|
|
41
|
+
});
|
|
42
|
+
// Allow embedding in iframes
|
|
43
|
+
app.use((_req, res, next) => {
|
|
44
|
+
res.removeHeader('X-Frame-Options');
|
|
45
|
+
res.setHeader('Content-Security-Policy', 'frame-ancestors *');
|
|
46
|
+
next();
|
|
47
|
+
});
|
|
48
|
+
app.use(express.json());
|
|
49
|
+
// --- HTTP API Routes ---
|
|
50
|
+
// Health check
|
|
51
|
+
app.get('/api/health', (_req, res) => {
|
|
52
|
+
res.json({ status: 'ok' });
|
|
53
|
+
});
|
|
54
|
+
// List directories for picker
|
|
55
|
+
app.get('/api/directories', (req, res) => {
|
|
56
|
+
const dirPath = req.query.path || os.homedir();
|
|
57
|
+
try {
|
|
58
|
+
const stats = fs.statSync(dirPath);
|
|
59
|
+
if (!stats.isDirectory()) {
|
|
60
|
+
res.status(400).json({ error: 'Not a directory' });
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
|
64
|
+
const directories = entries
|
|
65
|
+
.filter(e => e.isDirectory() && !e.name.startsWith('.'))
|
|
66
|
+
.map(e => e.name)
|
|
67
|
+
.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
|
|
68
|
+
const response = {
|
|
69
|
+
path: dirPath,
|
|
70
|
+
parent: path.dirname(dirPath),
|
|
71
|
+
directories,
|
|
72
|
+
isRoot: dirPath === '/' || dirPath === path.dirname(dirPath),
|
|
73
|
+
};
|
|
74
|
+
res.json(response);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
res.status(400).json({ error: err.message });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// Get replay history
|
|
81
|
+
app.get('/api/history', (_req, res) => {
|
|
82
|
+
const history = stateManager.loadHistory(agentSession.sessionId);
|
|
83
|
+
res.json({ history, sessionId: agentSession.sessionId });
|
|
84
|
+
});
|
|
85
|
+
// Clear history
|
|
86
|
+
app.delete('/api/history', (_req, res) => {
|
|
87
|
+
stateManager.clearHistory(agentSession.sessionId);
|
|
88
|
+
res.json({ success: true });
|
|
89
|
+
});
|
|
90
|
+
// Get available agents
|
|
91
|
+
app.get('/api/agents', (_req, res) => {
|
|
92
|
+
const agents = agentSession.getAvailableAgents().map(a => ({
|
|
93
|
+
...a,
|
|
94
|
+
current: a.id === agentSession.agentType,
|
|
95
|
+
}));
|
|
96
|
+
res.json({ agents, currentAgent: agentSession.agentType });
|
|
97
|
+
});
|
|
98
|
+
// --- WebSocket Setup ---
|
|
99
|
+
const wss = new WebSocketServer({ server, path: '/ws' });
|
|
100
|
+
wss.on('connection', (ws) => {
|
|
101
|
+
console.log('[amux] Client connected');
|
|
102
|
+
clients.add(ws);
|
|
103
|
+
// Send current state to new client
|
|
104
|
+
if (agentSession.isConnected) {
|
|
105
|
+
ws.send(JSON.stringify({
|
|
106
|
+
type: 'ready',
|
|
107
|
+
cwd: agentSession.cwd,
|
|
108
|
+
sessionId: agentSession.sessionId,
|
|
109
|
+
capabilities: agentSession.agentCapabilities,
|
|
110
|
+
agent: agentSession.getAgentInfo(),
|
|
111
|
+
availableAgents: agentSession.getAvailableAgents(),
|
|
112
|
+
systemContext: agentSession.systemContext ? true : undefined,
|
|
113
|
+
}));
|
|
114
|
+
// Send history to hydrate the chat UI
|
|
115
|
+
const history = stateManager.loadHistory(agentSession.sessionId);
|
|
116
|
+
if (history.length > 0) {
|
|
117
|
+
ws.send(JSON.stringify({
|
|
118
|
+
type: 'history_replay',
|
|
119
|
+
previousSessionId: agentSession.sessionId,
|
|
120
|
+
events: history,
|
|
121
|
+
eventCount: history.length,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
ws.send(JSON.stringify({ type: 'connecting' }));
|
|
127
|
+
}
|
|
128
|
+
ws.on('message', async (message) => {
|
|
129
|
+
try {
|
|
130
|
+
const msg = JSON.parse(message.toString());
|
|
131
|
+
await handleWsMessage(ws, msg, agentSession);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.error('[amux] Invalid message:', err);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
ws.on('close', () => {
|
|
138
|
+
console.log('[amux] Client disconnected');
|
|
139
|
+
clients.delete(ws);
|
|
140
|
+
});
|
|
141
|
+
ws.on('error', (err) => {
|
|
142
|
+
console.error('[amux] WebSocket error:', err);
|
|
143
|
+
clients.delete(ws);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
/**
|
|
147
|
+
* Handle WebSocket messages
|
|
148
|
+
*/
|
|
149
|
+
async function handleWsMessage(ws, msg, session) {
|
|
150
|
+
switch (msg.type) {
|
|
151
|
+
case 'prompt':
|
|
152
|
+
if (!session.isConnected || !session.sessionId) {
|
|
153
|
+
ws.send(JSON.stringify({ type: 'error', message: 'Agent not ready' }));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
await session.prompt(msg.message);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Error already broadcast by session
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
case 'cancel':
|
|
164
|
+
await session.cancel();
|
|
165
|
+
break;
|
|
166
|
+
case 'permission_response':
|
|
167
|
+
session.handlePermissionResponse(msg.requestId, msg.optionId);
|
|
168
|
+
break;
|
|
169
|
+
case 'change_cwd':
|
|
170
|
+
if (msg.path) {
|
|
171
|
+
try {
|
|
172
|
+
const stats = fs.statSync(msg.path);
|
|
173
|
+
if (stats.isDirectory()) {
|
|
174
|
+
await session.changeCwd(msg.path);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
ws.send(JSON.stringify({ type: 'error', message: 'Path is not a directory' }));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
ws.send(JSON.stringify({ type: 'error', message: `Invalid path: ${err.message}` }));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
case 'new_session':
|
|
186
|
+
try {
|
|
187
|
+
await session.newSession();
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
ws.send(JSON.stringify({ type: 'error', message: `Failed to create session: ${err.message}` }));
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
case 'set_mode':
|
|
194
|
+
if (msg.modeId) {
|
|
195
|
+
try {
|
|
196
|
+
await session.setMode(msg.modeId);
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
ws.send(JSON.stringify({ type: 'error', message: `Failed to set mode: ${err.message}` }));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
break;
|
|
203
|
+
case 'set_model':
|
|
204
|
+
if (msg.modelId) {
|
|
205
|
+
try {
|
|
206
|
+
await session.setModel(msg.modelId);
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
ws.send(JSON.stringify({ type: 'error', message: `Failed to set model: ${err.message}` }));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
case 'change_agent':
|
|
214
|
+
if (msg.agentType) {
|
|
215
|
+
try {
|
|
216
|
+
await session.changeAgent(msg.agentType);
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
ws.send(JSON.stringify({ type: 'error', message: `${err.message}` }));
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case 'get_history': {
|
|
224
|
+
const history = stateManager.loadHistory(session.sessionId);
|
|
225
|
+
ws.send(JSON.stringify({ type: 'history', events: history, sessionId: session.sessionId }));
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case 'list_sessions':
|
|
229
|
+
try {
|
|
230
|
+
const sessions = await session.listSessions();
|
|
231
|
+
ws.send(JSON.stringify({ type: 'sessions', sessions }));
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
ws.send(JSON.stringify({ type: 'error', message: `Failed to list sessions: ${err.message}` }));
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
case 'switch_session':
|
|
238
|
+
if (msg.sessionId) {
|
|
239
|
+
try {
|
|
240
|
+
await session.switchSession(msg.sessionId);
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
ws.send(JSON.stringify({ type: 'error', message: `Failed to switch session: ${err.message}` }));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Start function
|
|
250
|
+
async function start() {
|
|
251
|
+
// Setup static serving
|
|
252
|
+
if (isDev && !config.staticDir) {
|
|
253
|
+
// In dev mode without static dir, just serve API
|
|
254
|
+
console.log('[amux] Running in API-only mode (no static files)');
|
|
255
|
+
}
|
|
256
|
+
else if (config.staticDir) {
|
|
257
|
+
app.use(express.static(config.staticDir));
|
|
258
|
+
app.get('/{*splat}', (_req, res) => {
|
|
259
|
+
res.sendFile(path.join(config.staticDir, 'index.html'));
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Start the agent
|
|
263
|
+
await agentSession.spawnAgent();
|
|
264
|
+
// Start HTTP server
|
|
265
|
+
server.listen(PORT, () => {
|
|
266
|
+
console.log(`[amux] Running on port ${PORT}`);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// Shutdown function
|
|
270
|
+
function shutdown() {
|
|
271
|
+
console.log('[amux] Shutting down');
|
|
272
|
+
agentSession.shutdown();
|
|
273
|
+
for (const ws of clients)
|
|
274
|
+
ws.close();
|
|
275
|
+
wss.close();
|
|
276
|
+
server.close();
|
|
277
|
+
}
|
|
278
|
+
// Handle SIGTERM
|
|
279
|
+
process.on('SIGTERM', () => {
|
|
280
|
+
shutdown();
|
|
281
|
+
process.exit(0);
|
|
282
|
+
});
|
|
283
|
+
return { app, server, start, shutdown };
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Attach amux to an existing Express app and HTTP server.
|
|
287
|
+
* For when you want more control over the server setup.
|
|
288
|
+
*/
|
|
289
|
+
export function attachAmux(_app, server, config) {
|
|
290
|
+
const INSTANCE_ID = process.env.INSTANCE_ID ?? 'default';
|
|
291
|
+
const basePath = config.basePath ?? process.cwd();
|
|
292
|
+
const clients = new Set();
|
|
293
|
+
// State manager
|
|
294
|
+
const stateManager = new StateManager(config.stateDir);
|
|
295
|
+
// Broadcast function
|
|
296
|
+
function broadcast(message) {
|
|
297
|
+
const msgStr = JSON.stringify(message);
|
|
298
|
+
for (const client of clients) {
|
|
299
|
+
if (client.readyState === WebSocket.OPEN) {
|
|
300
|
+
client.send(msgStr);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Create agent session
|
|
305
|
+
const agentSession = new AgentSession({
|
|
306
|
+
instanceId: INSTANCE_ID,
|
|
307
|
+
basePath,
|
|
308
|
+
broadcast,
|
|
309
|
+
systemContext: config.systemContext,
|
|
310
|
+
fixedCwd: config.fixedCwd,
|
|
311
|
+
agentType: config.agentType,
|
|
312
|
+
stateDir: config.stateDir,
|
|
313
|
+
});
|
|
314
|
+
// WebSocket setup
|
|
315
|
+
const wss = new WebSocketServer({ server, path: '/ws' });
|
|
316
|
+
wss.on('connection', (ws) => {
|
|
317
|
+
console.log('[amux] Client connected');
|
|
318
|
+
clients.add(ws);
|
|
319
|
+
if (agentSession.isConnected) {
|
|
320
|
+
ws.send(JSON.stringify({
|
|
321
|
+
type: 'ready',
|
|
322
|
+
cwd: agentSession.cwd,
|
|
323
|
+
sessionId: agentSession.sessionId,
|
|
324
|
+
capabilities: agentSession.agentCapabilities,
|
|
325
|
+
agent: agentSession.getAgentInfo(),
|
|
326
|
+
availableAgents: agentSession.getAvailableAgents(),
|
|
327
|
+
}));
|
|
328
|
+
const history = stateManager.loadHistory(agentSession.sessionId);
|
|
329
|
+
if (history.length > 0) {
|
|
330
|
+
ws.send(JSON.stringify({
|
|
331
|
+
type: 'history_replay',
|
|
332
|
+
previousSessionId: agentSession.sessionId,
|
|
333
|
+
events: history,
|
|
334
|
+
eventCount: history.length,
|
|
335
|
+
}));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
ws.send(JSON.stringify({ type: 'connecting' }));
|
|
340
|
+
}
|
|
341
|
+
ws.on('close', () => {
|
|
342
|
+
clients.delete(ws);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
async function start() {
|
|
346
|
+
await agentSession.spawnAgent();
|
|
347
|
+
}
|
|
348
|
+
function shutdown() {
|
|
349
|
+
agentSession.shutdown();
|
|
350
|
+
for (const ws of clients)
|
|
351
|
+
ws.close();
|
|
352
|
+
wss.close();
|
|
353
|
+
}
|
|
354
|
+
return { agentSession, start, shutdown };
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type * as acp from '@agentclientprotocol/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Type guard for tool_call session updates
|
|
4
|
+
*/
|
|
5
|
+
export declare function isToolCallUpdate(update: acp.SessionUpdate): update is acp.ToolCall & {
|
|
6
|
+
sessionUpdate: 'tool_call';
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Type guard for tool_call_update session updates
|
|
10
|
+
*/
|
|
11
|
+
export declare function isToolCallUpdateMessage(update: acp.SessionUpdate): update is acp.ToolCallUpdate & {
|
|
12
|
+
sessionUpdate: 'tool_call_update';
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Type guard for diff content items
|
|
16
|
+
*/
|
|
17
|
+
export declare function isDiffContent(item: acp.ToolCallContent): item is acp.Diff & {
|
|
18
|
+
type: 'diff';
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Normalize ACP session updates.
|
|
22
|
+
* Claude sends Edit/Write diffs as {newText, oldText, path} instead of unified diff.
|
|
23
|
+
* We convert these to standard unified diff format so the UI doesn't need agent-specific logic.
|
|
24
|
+
*/
|
|
25
|
+
export declare function normalizeSessionUpdate(update: acp.SessionUpdate): acp.SessionUpdate;
|
|
26
|
+
//# sourceMappingURL=session-updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-updates.d.ts","sourceRoot":"","sources":["../src/session-updates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAErD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,GAAG,CAAC,aAAa,GACxB,MAAM,IAAI,GAAG,CAAC,QAAQ,GAAG;IAAE,aAAa,EAAE,WAAW,CAAA;CAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,GAAG,CAAC,aAAa,GACxB,MAAM,IAAI,GAAG,CAAC,cAAc,GAAG;IAAE,aAAa,EAAE,kBAAkB,CAAA;CAAE,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,GAAG,CAAC,eAAe,GACxB,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAErC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,GAAG,CAAC,aAAa,GACxB,GAAG,CAAC,aAAa,CAkDnB"}
|