@bytespell/amux-client 0.0.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.
- package/dist/accumulator.d.ts +77 -0
- package/dist/accumulator.d.ts.map +1 -0
- package/dist/accumulator.js +285 -0
- package/dist/accumulator.js.map +1 -0
- package/dist/client.d.ts +155 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +364 -0
- package/dist/client.js.map +1 -0
- package/dist/connection.d.ts +81 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +143 -0
- package/dist/connection.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/react/context.d.ts +60 -0
- package/dist/react/context.d.ts.map +1 -0
- package/dist/react/context.js +138 -0
- package/dist/react/context.js.map +1 -0
- package/dist/react/hooks.d.ts +153 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +156 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/index.d.ts +29 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +27 -0
- package/dist/react/index.js.map +1 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
- package/src/accumulator.ts +307 -0
- package/src/client.ts +445 -0
- package/src/connection.ts +194 -0
- package/src/index.ts +59 -0
- package/src/react/context.tsx +200 -0
- package/src/react/hooks.ts +208 -0
- package/src/react/index.ts +37 -0
- package/src/types.ts +120 -0
- package/tsconfig.json +14 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { SessionUpdate } from '@bytespell/amux-types';
|
|
2
|
+
import type { Message, Turn } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Message and Turn accumulator
|
|
5
|
+
*
|
|
6
|
+
* Processes streaming session updates and builds structured conversation data.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Accumulator {
|
|
9
|
+
private _messages;
|
|
10
|
+
private _turns;
|
|
11
|
+
private _currentTurn;
|
|
12
|
+
/**
|
|
13
|
+
* All accumulated messages
|
|
14
|
+
*/
|
|
15
|
+
get messages(): Message[];
|
|
16
|
+
/**
|
|
17
|
+
* All turns (grouped user/assistant pairs)
|
|
18
|
+
*/
|
|
19
|
+
get turns(): Turn[];
|
|
20
|
+
/**
|
|
21
|
+
* Current active turn (if streaming)
|
|
22
|
+
*/
|
|
23
|
+
get currentTurn(): Turn | null;
|
|
24
|
+
/**
|
|
25
|
+
* Last user message
|
|
26
|
+
*/
|
|
27
|
+
get lastUserMessage(): Message | null;
|
|
28
|
+
/**
|
|
29
|
+
* Last assistant message
|
|
30
|
+
*/
|
|
31
|
+
get lastAssistantMessage(): Message | null;
|
|
32
|
+
/**
|
|
33
|
+
* Start a new turn
|
|
34
|
+
*/
|
|
35
|
+
startTurn(): void;
|
|
36
|
+
/**
|
|
37
|
+
* End the current turn
|
|
38
|
+
*/
|
|
39
|
+
endTurn(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Set turn status to awaiting permission
|
|
42
|
+
*/
|
|
43
|
+
setAwaitingPermission(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Resume streaming after permission
|
|
46
|
+
*/
|
|
47
|
+
resumeStreaming(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Process a session update
|
|
50
|
+
*/
|
|
51
|
+
processUpdate(update: SessionUpdate): void;
|
|
52
|
+
/**
|
|
53
|
+
* Process user message chunk
|
|
54
|
+
*/
|
|
55
|
+
private processUserChunk;
|
|
56
|
+
/**
|
|
57
|
+
* Process assistant message chunk
|
|
58
|
+
*/
|
|
59
|
+
private processAssistantChunk;
|
|
60
|
+
/**
|
|
61
|
+
* Process tool call
|
|
62
|
+
*/
|
|
63
|
+
private processToolCall;
|
|
64
|
+
/**
|
|
65
|
+
* Process tool call update
|
|
66
|
+
*/
|
|
67
|
+
private processToolCallUpdate;
|
|
68
|
+
/**
|
|
69
|
+
* Replay history events
|
|
70
|
+
*/
|
|
71
|
+
replayHistory(events: unknown[]): void;
|
|
72
|
+
/**
|
|
73
|
+
* Clear all accumulated data
|
|
74
|
+
*/
|
|
75
|
+
clear(): void;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=accumulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accumulator.d.ts","sourceRoot":"","sources":["../src/accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AAS/D;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,YAAY,CAAqB;IAEzC;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,IAAI,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,OAAO,GAAG,IAAI,CAOpC;IAED;;OAEG;IACH,IAAI,oBAAoB,IAAI,OAAO,GAAG,IAAI,CAOzC;IAED;;OAEG;IACH,SAAS,IAAI,IAAI;IAWjB;;OAEG;IACH,OAAO,IAAI,IAAI;IAaf;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAM7B;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAmB1C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4C7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAkBtC;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a unique ID
|
|
3
|
+
*/
|
|
4
|
+
function generateId() {
|
|
5
|
+
return Math.random().toString(36).substring(2, 15);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Message and Turn accumulator
|
|
9
|
+
*
|
|
10
|
+
* Processes streaming session updates and builds structured conversation data.
|
|
11
|
+
*/
|
|
12
|
+
export class Accumulator {
|
|
13
|
+
_messages = [];
|
|
14
|
+
_turns = [];
|
|
15
|
+
_currentTurn = null;
|
|
16
|
+
/**
|
|
17
|
+
* All accumulated messages
|
|
18
|
+
*/
|
|
19
|
+
get messages() {
|
|
20
|
+
return this._messages;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* All turns (grouped user/assistant pairs)
|
|
24
|
+
*/
|
|
25
|
+
get turns() {
|
|
26
|
+
return this._turns;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Current active turn (if streaming)
|
|
30
|
+
*/
|
|
31
|
+
get currentTurn() {
|
|
32
|
+
return this._currentTurn;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Last user message
|
|
36
|
+
*/
|
|
37
|
+
get lastUserMessage() {
|
|
38
|
+
for (let i = this._messages.length - 1; i >= 0; i--) {
|
|
39
|
+
if (this._messages[i]?.role === 'user') {
|
|
40
|
+
return this._messages[i] ?? null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Last assistant message
|
|
47
|
+
*/
|
|
48
|
+
get lastAssistantMessage() {
|
|
49
|
+
for (let i = this._messages.length - 1; i >= 0; i--) {
|
|
50
|
+
if (this._messages[i]?.role === 'assistant') {
|
|
51
|
+
return this._messages[i] ?? null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Start a new turn
|
|
58
|
+
*/
|
|
59
|
+
startTurn() {
|
|
60
|
+
this._currentTurn = {
|
|
61
|
+
id: generateId(),
|
|
62
|
+
userMessage: null,
|
|
63
|
+
assistantMessage: null,
|
|
64
|
+
toolCalls: [],
|
|
65
|
+
status: 'streaming',
|
|
66
|
+
};
|
|
67
|
+
this._turns.push(this._currentTurn);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* End the current turn
|
|
71
|
+
*/
|
|
72
|
+
endTurn() {
|
|
73
|
+
if (this._currentTurn) {
|
|
74
|
+
this._currentTurn.status = 'complete';
|
|
75
|
+
if (this._currentTurn.userMessage) {
|
|
76
|
+
this._currentTurn.userMessage.status = 'complete';
|
|
77
|
+
}
|
|
78
|
+
if (this._currentTurn.assistantMessage) {
|
|
79
|
+
this._currentTurn.assistantMessage.status = 'complete';
|
|
80
|
+
}
|
|
81
|
+
this._currentTurn = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Set turn status to awaiting permission
|
|
86
|
+
*/
|
|
87
|
+
setAwaitingPermission() {
|
|
88
|
+
if (this._currentTurn) {
|
|
89
|
+
this._currentTurn.status = 'awaiting_permission';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Resume streaming after permission
|
|
94
|
+
*/
|
|
95
|
+
resumeStreaming() {
|
|
96
|
+
if (this._currentTurn && this._currentTurn.status === 'awaiting_permission') {
|
|
97
|
+
this._currentTurn.status = 'streaming';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Process a session update
|
|
102
|
+
*/
|
|
103
|
+
processUpdate(update) {
|
|
104
|
+
const updateType = update.sessionUpdate;
|
|
105
|
+
switch (updateType) {
|
|
106
|
+
case 'user_message_chunk':
|
|
107
|
+
this.processUserChunk(update);
|
|
108
|
+
break;
|
|
109
|
+
case 'agent_message_chunk':
|
|
110
|
+
this.processAssistantChunk(update);
|
|
111
|
+
break;
|
|
112
|
+
case 'tool_call':
|
|
113
|
+
this.processToolCall(update);
|
|
114
|
+
break;
|
|
115
|
+
case 'tool_call_update':
|
|
116
|
+
this.processToolCallUpdate(update);
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Process user message chunk
|
|
122
|
+
*/
|
|
123
|
+
processUserChunk(update) {
|
|
124
|
+
if (update.sessionUpdate !== 'user_message_chunk')
|
|
125
|
+
return;
|
|
126
|
+
// Create or get current turn
|
|
127
|
+
if (!this._currentTurn) {
|
|
128
|
+
this.startTurn();
|
|
129
|
+
}
|
|
130
|
+
// Create user message if needed
|
|
131
|
+
if (!this._currentTurn.userMessage) {
|
|
132
|
+
const userMessage = {
|
|
133
|
+
id: generateId(),
|
|
134
|
+
role: 'user',
|
|
135
|
+
content: [],
|
|
136
|
+
status: 'streaming',
|
|
137
|
+
timestamp: Date.now(),
|
|
138
|
+
};
|
|
139
|
+
this._currentTurn.userMessage = userMessage;
|
|
140
|
+
this._messages.push(userMessage);
|
|
141
|
+
}
|
|
142
|
+
// Add content
|
|
143
|
+
const content = update.content;
|
|
144
|
+
if (content?.type === 'text' && content.text) {
|
|
145
|
+
const lastBlock = this._currentTurn.userMessage.content[this._currentTurn.userMessage.content.length - 1];
|
|
146
|
+
if (lastBlock?.type === 'text') {
|
|
147
|
+
lastBlock.text += content.text;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this._currentTurn.userMessage.content.push({
|
|
151
|
+
type: 'text',
|
|
152
|
+
text: content.text,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Process assistant message chunk
|
|
159
|
+
*/
|
|
160
|
+
processAssistantChunk(update) {
|
|
161
|
+
if (update.sessionUpdate !== 'agent_message_chunk')
|
|
162
|
+
return;
|
|
163
|
+
// Create turn if needed
|
|
164
|
+
if (!this._currentTurn) {
|
|
165
|
+
this.startTurn();
|
|
166
|
+
}
|
|
167
|
+
// Create assistant message if needed
|
|
168
|
+
if (!this._currentTurn.assistantMessage) {
|
|
169
|
+
const assistantMessage = {
|
|
170
|
+
id: generateId(),
|
|
171
|
+
role: 'assistant',
|
|
172
|
+
content: [],
|
|
173
|
+
status: 'streaming',
|
|
174
|
+
timestamp: Date.now(),
|
|
175
|
+
};
|
|
176
|
+
this._currentTurn.assistantMessage = assistantMessage;
|
|
177
|
+
this._messages.push(assistantMessage);
|
|
178
|
+
}
|
|
179
|
+
// Add content based on type
|
|
180
|
+
const content = update.content;
|
|
181
|
+
if (!content)
|
|
182
|
+
return;
|
|
183
|
+
const assistantContent = this._currentTurn.assistantMessage.content;
|
|
184
|
+
if (content.type === 'text' && content.text) {
|
|
185
|
+
const lastBlock = assistantContent[assistantContent.length - 1];
|
|
186
|
+
if (lastBlock?.type === 'text') {
|
|
187
|
+
lastBlock.text += content.text;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
assistantContent.push({ type: 'text', text: content.text });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (content.type === 'thinking' && content.text) {
|
|
194
|
+
const lastBlock = assistantContent[assistantContent.length - 1];
|
|
195
|
+
if (lastBlock?.type === 'thinking') {
|
|
196
|
+
lastBlock.text += content.text;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
assistantContent.push({ type: 'thinking', text: content.text });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Process tool call
|
|
205
|
+
*/
|
|
206
|
+
processToolCall(update) {
|
|
207
|
+
if (update.sessionUpdate !== 'tool_call')
|
|
208
|
+
return;
|
|
209
|
+
if (!this._currentTurn)
|
|
210
|
+
return;
|
|
211
|
+
const toolCall = {
|
|
212
|
+
id: update.toolCallId ?? generateId(),
|
|
213
|
+
name: update.title ?? 'unknown',
|
|
214
|
+
input: update.input,
|
|
215
|
+
status: 'pending',
|
|
216
|
+
};
|
|
217
|
+
this._currentTurn.toolCalls.push(toolCall);
|
|
218
|
+
// Also add to assistant message content
|
|
219
|
+
if (this._currentTurn.assistantMessage) {
|
|
220
|
+
this._currentTurn.assistantMessage.content.push({
|
|
221
|
+
type: 'tool_use',
|
|
222
|
+
id: toolCall.id,
|
|
223
|
+
name: toolCall.name,
|
|
224
|
+
input: toolCall.input,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Process tool call update
|
|
230
|
+
*/
|
|
231
|
+
processToolCallUpdate(update) {
|
|
232
|
+
if (update.sessionUpdate !== 'tool_call_update')
|
|
233
|
+
return;
|
|
234
|
+
if (!this._currentTurn)
|
|
235
|
+
return;
|
|
236
|
+
const toolCallId = update.toolCallId;
|
|
237
|
+
if (!toolCallId)
|
|
238
|
+
return;
|
|
239
|
+
const toolCall = this._currentTurn.toolCalls.find((tc) => tc.id === toolCallId);
|
|
240
|
+
if (!toolCall)
|
|
241
|
+
return;
|
|
242
|
+
const status = update.status;
|
|
243
|
+
if (status === 'running') {
|
|
244
|
+
toolCall.status = 'running';
|
|
245
|
+
}
|
|
246
|
+
else if (status === 'completed') {
|
|
247
|
+
toolCall.status = 'complete';
|
|
248
|
+
toolCall.result = update.output;
|
|
249
|
+
}
|
|
250
|
+
else if (status === 'error') {
|
|
251
|
+
toolCall.status = 'error';
|
|
252
|
+
toolCall.error = update.error;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Replay history events
|
|
257
|
+
*/
|
|
258
|
+
replayHistory(events) {
|
|
259
|
+
// Clear current state
|
|
260
|
+
this._messages = [];
|
|
261
|
+
this._turns = [];
|
|
262
|
+
this._currentTurn = null;
|
|
263
|
+
for (const event of events) {
|
|
264
|
+
const e = event;
|
|
265
|
+
if (e.type === 'turn_start') {
|
|
266
|
+
this.startTurn();
|
|
267
|
+
}
|
|
268
|
+
else if (e.type === 'turn_end') {
|
|
269
|
+
this.endTurn();
|
|
270
|
+
}
|
|
271
|
+
else if (e.type === 'session_update' && e.update) {
|
|
272
|
+
this.processUpdate(e.update);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Clear all accumulated data
|
|
278
|
+
*/
|
|
279
|
+
clear() {
|
|
280
|
+
this._messages = [];
|
|
281
|
+
this._turns = [];
|
|
282
|
+
this._currentTurn = null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=accumulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accumulator.js","sourceRoot":"","sources":["../src/accumulator.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { AgentInfo, ModelInfo, SessionMetadata } from '@bytespell/amux-types';
|
|
2
|
+
import type { AmuxClientOptions, AmuxClientEvents, ConnectionStatus, Message, Turn } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* AmuxClient - WebSocket client for consuming amux
|
|
5
|
+
*
|
|
6
|
+
* Provides:
|
|
7
|
+
* - Connection management with auto-reconnect
|
|
8
|
+
* - Type-safe event subscription
|
|
9
|
+
* - Command methods for server interaction
|
|
10
|
+
* - Message accumulation for UI rendering
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const client = new AmuxClient({ url: 'ws://localhost:3000/ws' });
|
|
15
|
+
*
|
|
16
|
+
* client.on('ready', (data) => console.log('Ready:', data.cwd));
|
|
17
|
+
* client.on('update', (update) => console.log('Update:', update));
|
|
18
|
+
*
|
|
19
|
+
* client.connect();
|
|
20
|
+
* client.prompt('Hello!');
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class AmuxClient {
|
|
24
|
+
private connection;
|
|
25
|
+
private accumulator;
|
|
26
|
+
private handlers;
|
|
27
|
+
private _cwd;
|
|
28
|
+
private _sessionId;
|
|
29
|
+
private _agent;
|
|
30
|
+
private _availableAgents;
|
|
31
|
+
private _availableModels;
|
|
32
|
+
private _currentModelId;
|
|
33
|
+
private _capabilities;
|
|
34
|
+
private _sessions;
|
|
35
|
+
private _isReady;
|
|
36
|
+
private _isProcessing;
|
|
37
|
+
private _pendingPermission;
|
|
38
|
+
constructor(options: AmuxClientOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Connect to the WebSocket server
|
|
41
|
+
*/
|
|
42
|
+
connect(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Disconnect from the WebSocket server
|
|
45
|
+
*/
|
|
46
|
+
disconnect(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Whether WebSocket is connected
|
|
49
|
+
*/
|
|
50
|
+
get isConnected(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Whether client is ready (connected and received 'ready' event)
|
|
53
|
+
*/
|
|
54
|
+
get isReady(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Current connection status
|
|
57
|
+
*/
|
|
58
|
+
get connectionStatus(): ConnectionStatus;
|
|
59
|
+
/**
|
|
60
|
+
* Subscribe to an event
|
|
61
|
+
*/
|
|
62
|
+
on<K extends keyof AmuxClientEvents>(event: K, handler: (data: AmuxClientEvents[K]) => void): void;
|
|
63
|
+
/**
|
|
64
|
+
* Unsubscribe from an event
|
|
65
|
+
*/
|
|
66
|
+
off<K extends keyof AmuxClientEvents>(event: K, handler: (data: AmuxClientEvents[K]) => void): void;
|
|
67
|
+
/**
|
|
68
|
+
* Emit an event to handlers
|
|
69
|
+
*/
|
|
70
|
+
private emit;
|
|
71
|
+
/** Current working directory */
|
|
72
|
+
get cwd(): string | null;
|
|
73
|
+
/** Current session ID */
|
|
74
|
+
get sessionId(): string | null;
|
|
75
|
+
/** Current agent info */
|
|
76
|
+
get agent(): AgentInfo | null;
|
|
77
|
+
/** Available agents */
|
|
78
|
+
get availableAgents(): Array<{
|
|
79
|
+
id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
}>;
|
|
82
|
+
/** Available models */
|
|
83
|
+
get availableModels(): ModelInfo[];
|
|
84
|
+
/** Current model ID */
|
|
85
|
+
get currentModelId(): string | null;
|
|
86
|
+
/** Agent capabilities */
|
|
87
|
+
get capabilities(): unknown;
|
|
88
|
+
/** List of sessions (from list_sessions response) */
|
|
89
|
+
get sessions(): SessionMetadata[];
|
|
90
|
+
/** Whether currently processing a turn */
|
|
91
|
+
get isProcessing(): boolean;
|
|
92
|
+
/** Whether agent is actively streaming */
|
|
93
|
+
get isStreaming(): boolean;
|
|
94
|
+
/** Whether blocked on permission request */
|
|
95
|
+
get isAwaitingPermission(): boolean;
|
|
96
|
+
/** Current pending permission request */
|
|
97
|
+
get pendingPermission(): AmuxClientEvents['permission_request'] | null;
|
|
98
|
+
/** All accumulated messages */
|
|
99
|
+
get messages(): Message[];
|
|
100
|
+
/** All turns */
|
|
101
|
+
get turns(): Turn[];
|
|
102
|
+
/** Current active turn */
|
|
103
|
+
get currentTurn(): Turn | null;
|
|
104
|
+
/** Last user message */
|
|
105
|
+
get lastUserMessage(): Message | null;
|
|
106
|
+
/** Last assistant message */
|
|
107
|
+
get lastAssistantMessage(): Message | null;
|
|
108
|
+
/**
|
|
109
|
+
* Send a prompt to the agent
|
|
110
|
+
*/
|
|
111
|
+
prompt(message: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Cancel current operation
|
|
114
|
+
*/
|
|
115
|
+
cancel(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Respond to a permission request
|
|
118
|
+
*/
|
|
119
|
+
respondToPermission(requestId: string, optionId: string): void;
|
|
120
|
+
/**
|
|
121
|
+
* Change working directory
|
|
122
|
+
*/
|
|
123
|
+
changeCwd(path: string): void;
|
|
124
|
+
/**
|
|
125
|
+
* Create a new session
|
|
126
|
+
*/
|
|
127
|
+
newSession(): void;
|
|
128
|
+
/**
|
|
129
|
+
* Change agent type
|
|
130
|
+
*/
|
|
131
|
+
changeAgent(agentType: string): void;
|
|
132
|
+
/**
|
|
133
|
+
* Set session mode
|
|
134
|
+
*/
|
|
135
|
+
setMode(modeId: string): void;
|
|
136
|
+
/**
|
|
137
|
+
* Set model
|
|
138
|
+
*/
|
|
139
|
+
setModel(modelId: string): void;
|
|
140
|
+
/**
|
|
141
|
+
* Request list of sessions
|
|
142
|
+
*/
|
|
143
|
+
requestSessions(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Switch to a different session
|
|
146
|
+
*/
|
|
147
|
+
switchSession(sessionId: string): void;
|
|
148
|
+
/**
|
|
149
|
+
* Request history for current session
|
|
150
|
+
*/
|
|
151
|
+
requestHistory(): void;
|
|
152
|
+
private handleMessage;
|
|
153
|
+
private handleStatusChange;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|