@agentxjs/core 1.9.9-dev → 2.0.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.
- package/README.md +342 -0
- package/dist/RpcClient-BcJ_zAGu.d.ts +304 -0
- package/dist/agent/engine/internal/index.d.ts +20 -15
- package/dist/agent/engine/internal/index.js +1 -2
- package/dist/agent/engine/mealy/index.js +0 -1
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +6 -6
- package/dist/agent/types/index.d.ts +4 -4
- package/dist/agent/types/index.js +1 -2
- package/dist/bash/index.d.ts +29 -0
- package/dist/bash/index.js +7 -0
- package/dist/{bus-uF1DM2ox.d.ts → bus-C9FLWIu8.d.ts} +3 -1
- package/dist/{chunk-K6WXQ2RW.js → chunk-23UUBQXR.js} +1 -2
- package/dist/chunk-23UUBQXR.js.map +1 -0
- package/dist/chunk-BHOD5PKR.js +55 -0
- package/dist/chunk-BHOD5PKR.js.map +1 -0
- package/dist/{chunk-I7GYR3MN.js → chunk-DEAR6N3O.js} +77 -91
- package/dist/chunk-DEAR6N3O.js.map +1 -0
- package/dist/chunk-FI7WQFGV.js +37 -0
- package/dist/chunk-FI7WQFGV.js.map +1 -0
- package/dist/{chunk-TBU7FFZT.js → chunk-JTKCV7IS.js} +4 -4
- package/dist/chunk-JTKCV7IS.js.map +1 -0
- package/dist/{chunk-E5FPOAPO.js → chunk-LTVNPHST.js} +1 -1
- package/dist/chunk-LTVNPHST.js.map +1 -0
- package/dist/chunk-SKS7S2RY.js +1 -0
- package/dist/common/logger/index.js +0 -2
- package/dist/common/logger/index.js.map +1 -1
- package/dist/container/index.d.ts +3 -4
- package/dist/container/index.js +0 -2
- package/dist/container/index.js.map +1 -1
- package/dist/driver/index.d.ts +2 -310
- package/dist/event/index.d.ts +4 -4
- package/dist/event/index.js +1 -2
- package/dist/event/types/index.d.ts +4 -10
- package/dist/event/types/index.js +1 -2
- package/dist/{event-CDuTzs__.d.ts → event-DNWOBSBO.d.ts} +3 -4
- package/dist/image/index.d.ts +9 -5
- package/dist/image/index.js +5 -2
- package/dist/image/index.js.map +1 -1
- package/dist/index-CuS1i5V-.d.ts +609 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/{message-BMrMm1pq.d.ts → message-03TJzvIX.d.ts} +10 -33
- package/dist/mq/index.js +0 -2
- package/dist/mq/index.js.map +1 -1
- package/dist/network/index.d.ts +3 -291
- package/dist/network/index.js +3 -14
- package/dist/network/index.js.map +1 -1
- package/dist/persistence/index.d.ts +2 -155
- package/dist/platform/index.d.ts +76 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/runtime/index.d.ts +26 -59
- package/dist/runtime/index.js +117 -33
- package/dist/runtime/index.js.map +1 -1
- package/dist/session/index.d.ts +4 -52
- package/dist/session/index.js +4 -51
- package/dist/session/index.js.map +1 -1
- package/dist/types-aE74Eo6G.d.ts +90 -0
- package/package.json +10 -5
- package/src/agent/__tests__/engine/internal/messageAssemblerProcessor.test.ts +291 -87
- package/src/agent/__tests__/engine/internal/turnTrackerProcessor.test.ts +56 -75
- package/src/agent/engine/MealyMachine.ts +1 -1
- package/src/agent/engine/internal/messageAssemblerProcessor.ts +99 -114
- package/src/agent/engine/internal/turnTrackerProcessor.ts +23 -27
- package/src/agent/types/event.ts +0 -4
- package/src/agent/types/index.ts +1 -3
- package/src/agent/types/message.ts +9 -43
- package/src/bash/index.ts +21 -0
- package/src/bash/tool.ts +57 -0
- package/src/bash/types.ts +108 -0
- package/src/driver/index.ts +1 -0
- package/src/driver/types.ts +122 -4
- package/src/event/__tests__/EventBus.test.ts +1 -1
- package/src/event/types/agent.ts +0 -11
- package/src/event/types/command.ts +3 -1
- package/src/image/Image.ts +11 -1
- package/src/image/types.ts +8 -2
- package/src/network/RpcClient.ts +21 -20
- package/src/network/index.ts +1 -1
- package/src/persistence/types.ts +5 -2
- package/src/platform/index.ts +21 -0
- package/src/platform/types.ts +84 -0
- package/src/runtime/AgentXRuntime.ts +184 -57
- package/src/runtime/__tests__/AgentXRuntime.test.ts +343 -0
- package/src/runtime/index.ts +7 -19
- package/src/runtime/types.ts +10 -62
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-E5FPOAPO.js.map +0 -1
- package/dist/chunk-I7GYR3MN.js.map +0 -1
- package/dist/chunk-K6WXQ2RW.js.map +0 -1
- package/dist/chunk-TBU7FFZT.js.map +0 -1
- package/dist/workspace/index.d.ts +0 -111
- package/dist/wrapper-Y3UTVU2E.js +0 -3635
- package/dist/wrapper-Y3UTVU2E.js.map +0 -1
- package/src/workspace/index.ts +0 -27
- package/src/workspace/types.ts +0 -131
- /package/dist/{workspace → bash}/index.js.map +0 -0
- /package/dist/{chunk-7D4SUZUM.js.map → chunk-SKS7S2RY.js.map} +0 -0
- /package/dist/{workspace → platform}/index.js +0 -0
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* turnTrackerProcessor
|
|
3
3
|
*
|
|
4
4
|
* Pure Mealy transition function that tracks request-response turn pairs.
|
|
5
|
+
* Derives turn events entirely from stream-layer events (no external injection).
|
|
5
6
|
*
|
|
6
|
-
* Input Events:
|
|
7
|
-
* -
|
|
8
|
-
* - message_stop (
|
|
9
|
-
* - assistant_message (Message Layer)
|
|
7
|
+
* Input Events (Stream Layer):
|
|
8
|
+
* - message_start → emit turn_request (a new turn begins)
|
|
9
|
+
* - message_stop → emit turn_response (turn completes, based on stop reason)
|
|
10
10
|
*
|
|
11
11
|
* Output Events (Turn Layer):
|
|
12
12
|
* - turn_request
|
|
@@ -15,11 +15,9 @@
|
|
|
15
15
|
|
|
16
16
|
import type { Processor, ProcessorDefinition } from "../mealy";
|
|
17
17
|
import type {
|
|
18
|
-
// Input: combined stream and message events
|
|
19
18
|
StreamEvent,
|
|
20
|
-
|
|
19
|
+
MessageStartEvent,
|
|
21
20
|
MessageStopEvent,
|
|
22
|
-
UserMessageEvent,
|
|
23
21
|
// Output: Turn events
|
|
24
22
|
TurnRequestEvent,
|
|
25
23
|
TurnResponseEvent,
|
|
@@ -88,9 +86,9 @@ export type TurnTrackerOutput = TurnRequestEvent | TurnResponseEvent;
|
|
|
88
86
|
|
|
89
87
|
/**
|
|
90
88
|
* Input event types for TurnTracker
|
|
91
|
-
*
|
|
89
|
+
* Only stream-layer events — turn events are derived, not injected.
|
|
92
90
|
*/
|
|
93
|
-
export type TurnTrackerInput = StreamEvent
|
|
91
|
+
export type TurnTrackerInput = StreamEvent;
|
|
94
92
|
|
|
95
93
|
/**
|
|
96
94
|
* turnTrackerProcessor
|
|
@@ -104,39 +102,37 @@ export const turnTrackerProcessor: Processor<
|
|
|
104
102
|
TurnTrackerOutput
|
|
105
103
|
> = (state, input): [TurnTrackerState, TurnTrackerOutput[]] => {
|
|
106
104
|
switch (input.type) {
|
|
107
|
-
case "
|
|
108
|
-
return
|
|
105
|
+
case "message_start":
|
|
106
|
+
return handleMessageStart(state, input as MessageStartEvent);
|
|
109
107
|
|
|
110
108
|
case "message_stop":
|
|
111
109
|
return handleMessageStop(state, input as StreamEvent);
|
|
112
110
|
|
|
113
|
-
case "assistant_message":
|
|
114
|
-
// Turn completion is handled in message_stop
|
|
115
|
-
// This handler is kept for potential future use
|
|
116
|
-
return [state, []];
|
|
117
|
-
|
|
118
111
|
default:
|
|
119
112
|
return [state, []];
|
|
120
113
|
}
|
|
121
114
|
};
|
|
122
115
|
|
|
123
116
|
/**
|
|
124
|
-
* Handle
|
|
117
|
+
* Handle message_start event — a new turn begins
|
|
125
118
|
*/
|
|
126
|
-
function
|
|
119
|
+
function handleMessageStart(
|
|
127
120
|
state: Readonly<TurnTrackerState>,
|
|
128
|
-
event:
|
|
121
|
+
event: MessageStartEvent
|
|
129
122
|
): [TurnTrackerState, TurnTrackerOutput[]] {
|
|
130
|
-
|
|
131
|
-
|
|
123
|
+
// If there's already a pending turn (e.g. tool_use didn't end the turn),
|
|
124
|
+
// don't start a new one
|
|
125
|
+
if (state.pendingTurn) {
|
|
126
|
+
return [state, []];
|
|
127
|
+
}
|
|
132
128
|
|
|
133
|
-
|
|
134
|
-
const
|
|
129
|
+
const turnId = generateId();
|
|
130
|
+
const messageId = event.data.messageId ?? "";
|
|
135
131
|
|
|
136
132
|
const pendingTurn: PendingTurn = {
|
|
137
133
|
turnId,
|
|
138
|
-
messageId
|
|
139
|
-
content:
|
|
134
|
+
messageId,
|
|
135
|
+
content: "",
|
|
140
136
|
requestedAt: event.timestamp,
|
|
141
137
|
};
|
|
142
138
|
|
|
@@ -145,8 +141,8 @@ function handleUserMessage(
|
|
|
145
141
|
timestamp: Date.now(),
|
|
146
142
|
data: {
|
|
147
143
|
turnId,
|
|
148
|
-
messageId
|
|
149
|
-
content:
|
|
144
|
+
messageId,
|
|
145
|
+
content: "",
|
|
150
146
|
timestamp: event.timestamp,
|
|
151
147
|
},
|
|
152
148
|
};
|
package/src/agent/types/event.ts
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
import type {
|
|
16
16
|
UserMessage,
|
|
17
17
|
AssistantMessage,
|
|
18
|
-
ToolCallMessage,
|
|
19
18
|
ToolResultMessage,
|
|
20
19
|
ErrorMessage,
|
|
21
20
|
TokenUsage,
|
|
@@ -368,7 +367,6 @@ export interface MessageEvent<T extends string = string, D = unknown> extends En
|
|
|
368
367
|
|
|
369
368
|
export type UserMessageEvent = EngineEvent<"user_message", UserMessage>;
|
|
370
369
|
export type AssistantMessageEvent = EngineEvent<"assistant_message", AssistantMessage>;
|
|
371
|
-
export type ToolCallMessageEvent = EngineEvent<"tool_call_message", ToolCallMessage>;
|
|
372
370
|
export type ToolResultMessageEvent = EngineEvent<"tool_result_message", ToolResultMessage>;
|
|
373
371
|
export type ErrorMessageEvent = EngineEvent<"error_message", ErrorMessage>;
|
|
374
372
|
|
|
@@ -378,7 +376,6 @@ export type ErrorMessageEvent = EngineEvent<"error_message", ErrorMessage>;
|
|
|
378
376
|
export type AgentMessageEvent =
|
|
379
377
|
| UserMessageEvent
|
|
380
378
|
| AssistantMessageEvent
|
|
381
|
-
| ToolCallMessageEvent
|
|
382
379
|
| ToolResultMessageEvent
|
|
383
380
|
| ErrorMessageEvent;
|
|
384
381
|
|
|
@@ -389,7 +386,6 @@ export function isMessageEvent(event: EngineEvent): event is AgentMessageEvent {
|
|
|
389
386
|
const messageTypes = [
|
|
390
387
|
"user_message",
|
|
391
388
|
"assistant_message",
|
|
392
|
-
"tool_call_message",
|
|
393
389
|
"tool_result_message",
|
|
394
390
|
"error_message",
|
|
395
391
|
];
|
package/src/agent/types/index.ts
CHANGED
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
* ## Message Types (Three-Party Model)
|
|
49
49
|
*
|
|
50
50
|
* - **User**: Human participant (UserMessage)
|
|
51
|
-
* - **Assistant**: AI participant (AssistantMessage
|
|
51
|
+
* - **Assistant**: AI participant (AssistantMessage — content includes ToolCallPart)
|
|
52
52
|
* - **Tool**: Computer/execution environment (ToolResultMessage)
|
|
53
53
|
*
|
|
54
54
|
* @packageDocumentation
|
|
@@ -75,7 +75,6 @@ export type {
|
|
|
75
75
|
TokenUsage,
|
|
76
76
|
UserMessage,
|
|
77
77
|
AssistantMessage,
|
|
78
|
-
ToolCallMessage,
|
|
79
78
|
ToolResultMessage,
|
|
80
79
|
ErrorMessage,
|
|
81
80
|
Message,
|
|
@@ -145,7 +144,6 @@ export type {
|
|
|
145
144
|
MessageEvent,
|
|
146
145
|
UserMessageEvent,
|
|
147
146
|
AssistantMessageEvent,
|
|
148
|
-
ToolCallMessageEvent,
|
|
149
147
|
ToolResultMessageEvent,
|
|
150
148
|
ErrorMessageEvent,
|
|
151
149
|
AgentMessageEvent,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This file defines:
|
|
5
5
|
* - Content Parts: TextPart, ThinkingPart, ImagePart, FilePart, ToolCallPart, ToolResultPart
|
|
6
|
-
* - Message Types: UserMessage, AssistantMessage,
|
|
6
|
+
* - Message Types: UserMessage, AssistantMessage, ToolResultMessage, ErrorMessage
|
|
7
7
|
* - Message Role and Subtype discriminators
|
|
8
8
|
*
|
|
9
9
|
* @packageDocumentation
|
|
@@ -215,7 +215,7 @@ export type MessageRole = "user" | "assistant" | "tool" | "system" | "error";
|
|
|
215
215
|
* Represents the specific type/category of the message.
|
|
216
216
|
* Used together with role for serialization and type discrimination.
|
|
217
217
|
*/
|
|
218
|
-
export type MessageSubtype = "user" | "assistant" | "tool-
|
|
218
|
+
export type MessageSubtype = "user" | "assistant" | "tool-result" | "error";
|
|
219
219
|
|
|
220
220
|
/**
|
|
221
221
|
* Token usage information
|
|
@@ -256,9 +256,9 @@ export interface UserMessage {
|
|
|
256
256
|
* Assistant Message
|
|
257
257
|
*
|
|
258
258
|
* Message generated by the AI assistant.
|
|
259
|
-
* Contains text, thinking process,
|
|
260
|
-
*
|
|
261
|
-
*
|
|
259
|
+
* Contains text, thinking process, files, and tool calls.
|
|
260
|
+
* Tool calls are content blocks within the assistant message,
|
|
261
|
+
* matching the mainstream API pattern (Anthropic, OpenAI).
|
|
262
262
|
*/
|
|
263
263
|
export interface AssistantMessage {
|
|
264
264
|
/** Unique identifier */
|
|
@@ -270,8 +270,8 @@ export interface AssistantMessage {
|
|
|
270
270
|
/** Message subtype for serialization */
|
|
271
271
|
subtype: "assistant";
|
|
272
272
|
|
|
273
|
-
/** Message content - can be simple string or array of parts */
|
|
274
|
-
content: string | Array<TextPart | ThinkingPart | FilePart>;
|
|
273
|
+
/** Message content - can be simple string or array of parts (including tool calls) */
|
|
274
|
+
content: string | Array<TextPart | ThinkingPart | FilePart | ToolCallPart>;
|
|
275
275
|
|
|
276
276
|
/** When this message was created (Unix timestamp in milliseconds) */
|
|
277
277
|
timestamp: number;
|
|
@@ -283,35 +283,6 @@ export interface AssistantMessage {
|
|
|
283
283
|
usage?: TokenUsage;
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
-
/**
|
|
287
|
-
* Tool Call Message
|
|
288
|
-
*
|
|
289
|
-
* Represents AI's request to invoke a tool.
|
|
290
|
-
* Emitted when tool call parameters are fully assembled.
|
|
291
|
-
*
|
|
292
|
-
* Subject: Assistant (AI decided to call a tool)
|
|
293
|
-
* Timing: At tool_use_content_block_stop
|
|
294
|
-
*/
|
|
295
|
-
export interface ToolCallMessage {
|
|
296
|
-
/** Unique message identifier */
|
|
297
|
-
id: string;
|
|
298
|
-
|
|
299
|
-
/** Message role - assistant initiates tool calls */
|
|
300
|
-
role: "assistant";
|
|
301
|
-
|
|
302
|
-
/** Message subtype for serialization */
|
|
303
|
-
subtype: "tool-call";
|
|
304
|
-
|
|
305
|
-
/** Tool call details */
|
|
306
|
-
toolCall: ToolCallPart;
|
|
307
|
-
|
|
308
|
-
/** When this message was created (Unix timestamp in milliseconds) */
|
|
309
|
-
timestamp: number;
|
|
310
|
-
|
|
311
|
-
/** Parent message ID (the assistant message that triggered this) */
|
|
312
|
-
parentId?: string;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
286
|
/**
|
|
316
287
|
* Tool Result Message
|
|
317
288
|
*
|
|
@@ -377,11 +348,6 @@ export interface ErrorMessage {
|
|
|
377
348
|
* Use `subtype` field for precise type discrimination.
|
|
378
349
|
*
|
|
379
350
|
* Role: Who sent it (user, assistant, tool, system, error)
|
|
380
|
-
* Subtype: What type of message (user, assistant, tool-
|
|
351
|
+
* Subtype: What type of message (user, assistant, tool-result, error)
|
|
381
352
|
*/
|
|
382
|
-
export type Message =
|
|
383
|
-
| UserMessage
|
|
384
|
-
| AssistantMessage
|
|
385
|
-
| ToolCallMessage
|
|
386
|
-
| ToolResultMessage
|
|
387
|
-
| ErrorMessage;
|
|
353
|
+
export type Message = UserMessage | AssistantMessage | ToolResultMessage | ErrorMessage;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash Module
|
|
3
|
+
*
|
|
4
|
+
* Abstraction for command execution capability.
|
|
5
|
+
* Platform packages provide concrete implementations.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import type { BashProvider, BashResult } from "@agentxjs/core/bash";
|
|
10
|
+
*
|
|
11
|
+
* // Platform provides implementation
|
|
12
|
+
* const bash: BashProvider = platform.bashProvider;
|
|
13
|
+
*
|
|
14
|
+
* const result = await bash.execute("echo hello", { cwd: "/tmp" });
|
|
15
|
+
* console.log(result.stdout); // "hello\n"
|
|
16
|
+
* console.log(result.exitCode); // 0
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export type { BashProvider, BashResult, BashOptions } from "./types";
|
|
21
|
+
export { createBashTool } from "./tool";
|
package/src/bash/tool.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash Tool Definition
|
|
3
|
+
*
|
|
4
|
+
* Creates a ToolDefinition that wraps a BashProvider.
|
|
5
|
+
* The tool schema is sent to the LLM, the execute function
|
|
6
|
+
* delegates to the platform-provided BashProvider via closure.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { ToolDefinition } from "../driver/types";
|
|
10
|
+
import type { BashProvider } from "./types";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create a bash ToolDefinition from a BashProvider
|
|
14
|
+
*
|
|
15
|
+
* @param provider - Platform-provided BashProvider
|
|
16
|
+
* @returns ToolDefinition ready for DriverConfig.tools
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* if (platform.bashProvider) {
|
|
21
|
+
* tools.push(createBashTool(platform.bashProvider));
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function createBashTool(provider: BashProvider): ToolDefinition {
|
|
26
|
+
return {
|
|
27
|
+
name: "bash",
|
|
28
|
+
description:
|
|
29
|
+
"Execute a shell command and return stdout, stderr, and exit code. " +
|
|
30
|
+
"Use this for running CLI tools, scripts, file operations, etc.",
|
|
31
|
+
parameters: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties: {
|
|
34
|
+
command: {
|
|
35
|
+
type: "string",
|
|
36
|
+
description: "Shell command to execute (e.g. 'ls -la', 'cat file.txt')",
|
|
37
|
+
},
|
|
38
|
+
cwd: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "Working directory for the command (optional)",
|
|
41
|
+
},
|
|
42
|
+
timeout: {
|
|
43
|
+
type: "number",
|
|
44
|
+
description: "Timeout in milliseconds (optional, default 30000)",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["command"],
|
|
48
|
+
},
|
|
49
|
+
execute: async (params) => {
|
|
50
|
+
const result = await provider.execute(params.command as string, {
|
|
51
|
+
cwd: params.cwd as string | undefined,
|
|
52
|
+
timeout: params.timeout as number | undefined,
|
|
53
|
+
});
|
|
54
|
+
return result;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash Types
|
|
3
|
+
*
|
|
4
|
+
* Abstraction for command execution capability.
|
|
5
|
+
* Different platforms provide different implementations:
|
|
6
|
+
* - Node.js: child_process based
|
|
7
|
+
* - Docker: Container exec
|
|
8
|
+
* - Sandbox: Isolated environment
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* ┌─────────────────────────────────────────────────────┐
|
|
12
|
+
* │ core/bash │
|
|
13
|
+
* │ ┌─────────────────────────────────────────────────┐│
|
|
14
|
+
* │ │ BashProvider (interface) ││
|
|
15
|
+
* │ │ BashResult (interface) ││
|
|
16
|
+
* │ │ BashOptions (interface) ││
|
|
17
|
+
* │ └─────────────────────────────────────────────────┘│
|
|
18
|
+
* └─────────────────────────────────────────────────────┘
|
|
19
|
+
* │
|
|
20
|
+
* ┌────────────────┼────────────────┐
|
|
21
|
+
* ▼ ▼ ▼
|
|
22
|
+
* ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
23
|
+
* │ platform-node│ │platform-docker│ │platform-sandbox│
|
|
24
|
+
* │ ChildProcess │ │ ContainerExec│ │ SandboxExec │
|
|
25
|
+
* └──────────────┘ └──────────────┘ └──────────────┘
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Bash Result
|
|
31
|
+
// ============================================================================
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* BashResult - Output from a command execution
|
|
35
|
+
*/
|
|
36
|
+
export interface BashResult {
|
|
37
|
+
/**
|
|
38
|
+
* Standard output
|
|
39
|
+
*/
|
|
40
|
+
stdout: string;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Standard error
|
|
44
|
+
*/
|
|
45
|
+
stderr: string;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Process exit code (0 = success)
|
|
49
|
+
*/
|
|
50
|
+
exitCode: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// Bash Options
|
|
55
|
+
// ============================================================================
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* BashOptions - Configuration for a single command execution
|
|
59
|
+
*/
|
|
60
|
+
export interface BashOptions {
|
|
61
|
+
/**
|
|
62
|
+
* Working directory for the command
|
|
63
|
+
*/
|
|
64
|
+
cwd?: string;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Timeout in milliseconds
|
|
68
|
+
*/
|
|
69
|
+
timeout?: number;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Environment variables
|
|
73
|
+
*/
|
|
74
|
+
env?: Record<string, string>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// Bash Provider
|
|
79
|
+
// ============================================================================
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* BashProvider - Abstraction for command execution
|
|
83
|
+
*
|
|
84
|
+
* Platform implementations provide this interface.
|
|
85
|
+
* The provider is stateless — each execute() call is independent.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* const result = await provider.execute("ls -la", { cwd: "/tmp" });
|
|
90
|
+
* console.log(result.stdout);
|
|
91
|
+
* console.log(result.exitCode); // 0
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export interface BashProvider {
|
|
95
|
+
/**
|
|
96
|
+
* Provider type (e.g., "child-process", "docker", "sandbox")
|
|
97
|
+
*/
|
|
98
|
+
readonly type: string;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Execute a shell command
|
|
102
|
+
*
|
|
103
|
+
* @param command - Shell command to execute
|
|
104
|
+
* @param options - Execution options
|
|
105
|
+
* @returns Command output and exit code
|
|
106
|
+
*/
|
|
107
|
+
execute(command: string, options?: BashOptions): Promise<BashResult>;
|
|
108
|
+
}
|
package/src/driver/index.ts
CHANGED
package/src/driver/types.ts
CHANGED
|
@@ -31,17 +31,72 @@
|
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
import type { UserMessage } from "../agent/types/message";
|
|
34
|
+
import type { Session } from "../session/types";
|
|
34
35
|
|
|
35
36
|
// ============================================================================
|
|
36
|
-
//
|
|
37
|
+
// Tool Definition
|
|
37
38
|
// ============================================================================
|
|
38
39
|
|
|
39
40
|
/**
|
|
40
|
-
*
|
|
41
|
+
* ToolDefinition - Defines a tool for LLM tool calling
|
|
42
|
+
*
|
|
43
|
+
* Tools are injected into the Driver via DriverConfig.tools.
|
|
44
|
+
* The Driver passes tool schemas to the LLM and executes handlers
|
|
45
|
+
* when the LLM requests a tool call.
|
|
41
46
|
*
|
|
42
|
-
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const calculator: ToolDefinition = {
|
|
50
|
+
* name: "calculator",
|
|
51
|
+
* description: "Evaluates a math expression",
|
|
52
|
+
* parameters: {
|
|
53
|
+
* type: "object",
|
|
54
|
+
* properties: {
|
|
55
|
+
* expression: { type: "string", description: "e.g. '123 * 456'" },
|
|
56
|
+
* },
|
|
57
|
+
* required: ["expression"],
|
|
58
|
+
* },
|
|
59
|
+
* execute: async (params) => {
|
|
60
|
+
* const result = Function(`"use strict"; return (${params.expression})`)();
|
|
61
|
+
* return { result: String(result) };
|
|
62
|
+
* },
|
|
63
|
+
* };
|
|
64
|
+
* ```
|
|
43
65
|
*/
|
|
44
|
-
export interface
|
|
66
|
+
export interface ToolDefinition {
|
|
67
|
+
/**
|
|
68
|
+
* Tool name (unique identifier)
|
|
69
|
+
*/
|
|
70
|
+
name: string;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Description of what the tool does (sent to LLM)
|
|
74
|
+
*/
|
|
75
|
+
description?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* JSON Schema for the tool's input parameters
|
|
79
|
+
*/
|
|
80
|
+
parameters: {
|
|
81
|
+
type: "object";
|
|
82
|
+
properties: Record<string, unknown>;
|
|
83
|
+
required?: string[];
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Function to execute when the LLM calls this tool
|
|
88
|
+
*/
|
|
89
|
+
execute: (params: Record<string, unknown>) => Promise<unknown>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// MCP Server Configuration
|
|
94
|
+
// ============================================================================
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Stdio transport — launches a local MCP server as a child process.
|
|
98
|
+
*/
|
|
99
|
+
export interface McpStdioServerConfig {
|
|
45
100
|
/**
|
|
46
101
|
* Command to run the MCP server
|
|
47
102
|
*/
|
|
@@ -58,6 +113,34 @@ export interface McpServerConfig {
|
|
|
58
113
|
env?: Record<string, string>;
|
|
59
114
|
}
|
|
60
115
|
|
|
116
|
+
/**
|
|
117
|
+
* HTTP Streamable transport — connects to a remote MCP server over HTTP.
|
|
118
|
+
*/
|
|
119
|
+
export interface McpHttpServerConfig {
|
|
120
|
+
/**
|
|
121
|
+
* Transport type discriminator
|
|
122
|
+
*/
|
|
123
|
+
type: "http";
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* URL of the remote MCP server
|
|
127
|
+
*/
|
|
128
|
+
url: string;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Additional HTTP headers (e.g. Authorization)
|
|
132
|
+
*/
|
|
133
|
+
headers?: Record<string, string>;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* MCP Server configuration.
|
|
138
|
+
*
|
|
139
|
+
* - Stdio: `{ command, args?, env? }` — local subprocess
|
|
140
|
+
* - HTTP: `{ transport: "http", url, headers? }` — remote server
|
|
141
|
+
*/
|
|
142
|
+
export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig;
|
|
143
|
+
|
|
61
144
|
// ============================================================================
|
|
62
145
|
// Stream Event (Lightweight)
|
|
63
146
|
// ============================================================================
|
|
@@ -150,6 +233,16 @@ export interface ErrorEvent extends StreamEvent<
|
|
|
150
233
|
}
|
|
151
234
|
> {}
|
|
152
235
|
|
|
236
|
+
export interface MessageDeltaEvent extends StreamEvent<
|
|
237
|
+
"message_delta",
|
|
238
|
+
{
|
|
239
|
+
usage?: {
|
|
240
|
+
inputTokens: number;
|
|
241
|
+
outputTokens: number;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
> {}
|
|
245
|
+
|
|
153
246
|
export interface InterruptedEvent extends StreamEvent<
|
|
154
247
|
"interrupted",
|
|
155
248
|
{
|
|
@@ -162,6 +255,7 @@ export interface InterruptedEvent extends StreamEvent<
|
|
|
162
255
|
*/
|
|
163
256
|
export type DriverStreamEvent =
|
|
164
257
|
| MessageStartEvent
|
|
258
|
+
| MessageDeltaEvent
|
|
165
259
|
| MessageStopEvent
|
|
166
260
|
| TextDeltaEvent
|
|
167
261
|
| ToolUseStartEvent
|
|
@@ -252,8 +346,32 @@ export interface DriverConfig<TOptions = Record<string, unknown>> {
|
|
|
252
346
|
*/
|
|
253
347
|
mcpServers?: Record<string, McpServerConfig>;
|
|
254
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Tool definitions for LLM tool calling
|
|
351
|
+
*
|
|
352
|
+
* Tools are passed to the LLM provider and executed when the LLM
|
|
353
|
+
* requests a tool call. Each tool includes its JSON Schema (sent to
|
|
354
|
+
* the LLM) and an execute function (called at runtime).
|
|
355
|
+
*/
|
|
356
|
+
tools?: ToolDefinition[];
|
|
357
|
+
|
|
255
358
|
// === Session Configuration ===
|
|
256
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Session for message history access
|
|
362
|
+
*
|
|
363
|
+
* Stateless drivers (like MonoDriver) use this to read conversation history.
|
|
364
|
+
* Stateful drivers (like ClaudeDriver) may ignore this as they manage
|
|
365
|
+
* history internally via SDK.
|
|
366
|
+
*
|
|
367
|
+
* @example
|
|
368
|
+
* ```typescript
|
|
369
|
+
* // MonoDriver reads history from Session
|
|
370
|
+
* const history = await config.session?.getMessages();
|
|
371
|
+
* ```
|
|
372
|
+
*/
|
|
373
|
+
session?: Session;
|
|
374
|
+
|
|
257
375
|
/**
|
|
258
376
|
* Session ID to resume (for conversation continuity)
|
|
259
377
|
*
|
package/src/event/types/agent.ts
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
import type {
|
|
8
8
|
UserMessage,
|
|
9
9
|
AssistantMessage,
|
|
10
|
-
ToolCallMessage,
|
|
11
10
|
ToolResultMessage,
|
|
12
11
|
ErrorMessage,
|
|
13
12
|
} from "../../agent/types";
|
|
@@ -376,15 +375,6 @@ export interface AssistantMessageEvent extends AgentMessageEventBase<
|
|
|
376
375
|
AssistantMessage
|
|
377
376
|
> {}
|
|
378
377
|
|
|
379
|
-
/**
|
|
380
|
-
* ToolCallMessageEvent - Tool call message (part of assistant turn)
|
|
381
|
-
* Data: Complete ToolCallMessage object
|
|
382
|
-
*/
|
|
383
|
-
export interface ToolCallMessageEvent extends AgentMessageEventBase<
|
|
384
|
-
"tool_call_message",
|
|
385
|
-
ToolCallMessage
|
|
386
|
-
> {}
|
|
387
|
-
|
|
388
378
|
/**
|
|
389
379
|
* ToolResultMessageEvent - Tool result message
|
|
390
380
|
* Data: Complete ToolResultMessage object
|
|
@@ -409,7 +399,6 @@ export interface ErrorMessageEvent extends AgentMessageEventBase<"error_message"
|
|
|
409
399
|
export type AgentMessageEvent =
|
|
410
400
|
| UserMessageEvent
|
|
411
401
|
| AssistantMessageEvent
|
|
412
|
-
| ToolCallMessageEvent
|
|
413
402
|
| ToolResultMessageEvent
|
|
414
403
|
| ErrorMessageEvent;
|
|
415
404
|
|
|
@@ -87,7 +87,7 @@ export interface McpServerConfig {
|
|
|
87
87
|
* Image metadata for storing provider-specific data
|
|
88
88
|
*/
|
|
89
89
|
export interface ImageMetadata {
|
|
90
|
-
|
|
90
|
+
driverSessionId?: string;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -373,6 +373,7 @@ export interface ImageCreateRequest extends BaseCommandRequest<
|
|
|
373
373
|
name?: string;
|
|
374
374
|
description?: string;
|
|
375
375
|
systemPrompt?: string;
|
|
376
|
+
customData?: Record<string, unknown>;
|
|
376
377
|
};
|
|
377
378
|
}
|
|
378
379
|
> {}
|
|
@@ -446,6 +447,7 @@ export interface ImageUpdateRequest extends BaseCommandRequest<
|
|
|
446
447
|
updates: {
|
|
447
448
|
name?: string;
|
|
448
449
|
description?: string;
|
|
450
|
+
customData?: Record<string, unknown>;
|
|
449
451
|
};
|
|
450
452
|
}
|
|
451
453
|
> {}
|