@kadi.build/core 0.15.4 → 0.15.6
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 +139 -1
- package/agent.json +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -4
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/react-loop.d.ts +251 -0
- package/dist/react-loop.d.ts.map +1 -0
- package/dist/react-loop.js +499 -0
- package/dist/react-loop.js.map +1 -0
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/client.ts +12 -4
- package/src/config.ts +42 -1
- package/src/index.ts +20 -0
- package/src/react-loop.ts +792 -0
- package/src/types.ts +8 -2
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReActLoop — SDK Primitive for Agent Execution
|
|
3
|
+
*
|
|
4
|
+
* The ReAct (Reason + Act) loop is the core agent execution primitive.
|
|
5
|
+
* It handles: tool routing, model calls, turn management, context compaction,
|
|
6
|
+
* event hooks, stop conditions, steering, and event emission.
|
|
7
|
+
*
|
|
8
|
+
* It does NOT handle: planning, sub-agents, filesystem management, or skills.
|
|
9
|
+
* Those are engine ability concerns.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { KadiClient, ReActLoop } from '@kadi.build/core';
|
|
14
|
+
*
|
|
15
|
+
* const client = new KadiClient({ name: 'my-agent' });
|
|
16
|
+
* await client.connect();
|
|
17
|
+
*
|
|
18
|
+
* const loop = new ReActLoop({
|
|
19
|
+
* client,
|
|
20
|
+
* model: { routing: 'broker', model: 'claude-sonnet-4-6' },
|
|
21
|
+
* tools: { broker: true },
|
|
22
|
+
* maxTurns: 50,
|
|
23
|
+
* systemPrompt: 'You are a research assistant...',
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* const result = await loop.run('Analyze the test results');
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @see docs/kadi-harness-spec-v5.md §8 (ReActLoop)
|
|
30
|
+
*/
|
|
31
|
+
import type { KadiClient } from './client.js';
|
|
32
|
+
import type { ToolDefinition } from './types.js';
|
|
33
|
+
/** Model routing and configuration */
|
|
34
|
+
export interface ModelConfig {
|
|
35
|
+
/** How to route model calls: 'broker' (via model-provider) or 'direct' */
|
|
36
|
+
routing: 'broker' | 'direct';
|
|
37
|
+
/** Provider name (used when routing: 'direct') */
|
|
38
|
+
provider?: string;
|
|
39
|
+
/** Model identifier (e.g. 'claude-sonnet-4-6') */
|
|
40
|
+
model: string;
|
|
41
|
+
/** Sampling temperature */
|
|
42
|
+
temperature?: number;
|
|
43
|
+
/** Max tokens for model response */
|
|
44
|
+
maxTokens?: number;
|
|
45
|
+
}
|
|
46
|
+
/** Tool routing configuration */
|
|
47
|
+
export interface ToolsConfig {
|
|
48
|
+
/** Include all tools from connected broker networks */
|
|
49
|
+
broker?: boolean;
|
|
50
|
+
/** Local tools to include by name */
|
|
51
|
+
native?: string[];
|
|
52
|
+
/** Additional custom tool definitions with handlers */
|
|
53
|
+
custom?: CustomTool[];
|
|
54
|
+
/** Pre-configured tool router (from bridge) */
|
|
55
|
+
router?: ToolRouter;
|
|
56
|
+
/** Pre-resolved tool definitions (bypass discovery) */
|
|
57
|
+
definitions?: ToolDefinition[];
|
|
58
|
+
}
|
|
59
|
+
/** A custom tool with definition and handler */
|
|
60
|
+
export interface CustomTool {
|
|
61
|
+
definition: ToolDefinition;
|
|
62
|
+
handler: (params: unknown) => Promise<unknown>;
|
|
63
|
+
}
|
|
64
|
+
/** Tool router interface — resolves and executes tool calls */
|
|
65
|
+
export interface ToolRouter {
|
|
66
|
+
resolve(toolName: string): Promise<ToolDefinition | undefined>;
|
|
67
|
+
execute(toolName: string, params: unknown): Promise<unknown>;
|
|
68
|
+
}
|
|
69
|
+
/** Event emission configuration */
|
|
70
|
+
export interface EventsConfig {
|
|
71
|
+
/** Whether to emit events */
|
|
72
|
+
enabled?: boolean;
|
|
73
|
+
/** Which network to emit events on */
|
|
74
|
+
network?: string;
|
|
75
|
+
/** Event channel prefix (default: 'kadi.agent') */
|
|
76
|
+
prefix?: string;
|
|
77
|
+
}
|
|
78
|
+
/** Lifecycle hooks */
|
|
79
|
+
export interface ReActHooks {
|
|
80
|
+
/** Called before each LLM call */
|
|
81
|
+
beforeTurn?: (turn: TurnInfo) => Promise<void>;
|
|
82
|
+
/** Called after each tool execution */
|
|
83
|
+
afterTurn?: (turn: TurnInfo, result: TurnResult) => Promise<void>;
|
|
84
|
+
/** Intercept/modify tool calls before execution */
|
|
85
|
+
onToolCall?: (toolName: string, params: unknown) => Promise<unknown | void>;
|
|
86
|
+
/** Handle errors — return 'retry', 'skip', or 'abort' */
|
|
87
|
+
onError?: (error: Error, turn: TurnInfo) => Promise<'retry' | 'skip' | 'abort'>;
|
|
88
|
+
/** Return false to stop the loop */
|
|
89
|
+
shouldContinue?: (turn: TurnInfo, result: TurnResult) => Promise<boolean>;
|
|
90
|
+
}
|
|
91
|
+
/** Full configuration for the ReActLoop */
|
|
92
|
+
export interface ReActConfig {
|
|
93
|
+
/** KadiClient instance for broker communication */
|
|
94
|
+
client?: KadiClient;
|
|
95
|
+
/** Model configuration */
|
|
96
|
+
model: ModelConfig;
|
|
97
|
+
/** Tools available to the loop */
|
|
98
|
+
tools?: ToolsConfig;
|
|
99
|
+
/** Maximum number of turns (default: 100) */
|
|
100
|
+
maxTurns?: number;
|
|
101
|
+
/** Maximum wall-clock time (e.g. '2h', '30m', '500ms') */
|
|
102
|
+
timeout?: string;
|
|
103
|
+
/** System prompt prepended to context */
|
|
104
|
+
systemPrompt?: string;
|
|
105
|
+
/** Context compaction strategy (default: 'auto') */
|
|
106
|
+
compaction?: 'auto' | 'manual' | 'off';
|
|
107
|
+
/** Token threshold for compaction trigger (default: 128000) */
|
|
108
|
+
maxContextTokens?: number;
|
|
109
|
+
/** Model for compaction summaries (null = same model) */
|
|
110
|
+
summaryModel?: string;
|
|
111
|
+
/** Lifecycle hooks */
|
|
112
|
+
hooks?: ReActHooks;
|
|
113
|
+
/** Event emission configuration */
|
|
114
|
+
events?: EventsConfig;
|
|
115
|
+
/** Auth context */
|
|
116
|
+
auth?: {
|
|
117
|
+
token?: string;
|
|
118
|
+
};
|
|
119
|
+
/** Model call function — override for testing or custom providers */
|
|
120
|
+
modelCall?: (messages: Message[], tools: ToolDefinition[]) => Promise<ModelResponse>;
|
|
121
|
+
}
|
|
122
|
+
/** A message in the conversation context */
|
|
123
|
+
export interface Message {
|
|
124
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
125
|
+
content: string;
|
|
126
|
+
/** Tool call ID (for tool results) */
|
|
127
|
+
toolCallId?: string;
|
|
128
|
+
/** Tool calls requested by the model */
|
|
129
|
+
toolCalls?: ToolCall[];
|
|
130
|
+
}
|
|
131
|
+
/** A tool call from the model */
|
|
132
|
+
export interface ToolCall {
|
|
133
|
+
id: string;
|
|
134
|
+
name: string;
|
|
135
|
+
arguments: unknown;
|
|
136
|
+
}
|
|
137
|
+
/** Response from a model call */
|
|
138
|
+
export interface ModelResponse {
|
|
139
|
+
/** Text content of the response */
|
|
140
|
+
content?: string;
|
|
141
|
+
/** Tool calls requested by the model */
|
|
142
|
+
toolCalls?: ToolCall[];
|
|
143
|
+
/** Estimated tokens used */
|
|
144
|
+
tokensUsed?: number;
|
|
145
|
+
/** Whether the model considers the task done */
|
|
146
|
+
done?: boolean;
|
|
147
|
+
}
|
|
148
|
+
/** Information about the current turn */
|
|
149
|
+
export interface TurnInfo {
|
|
150
|
+
/** Turn number (1-indexed) */
|
|
151
|
+
number: number;
|
|
152
|
+
/** When this turn started */
|
|
153
|
+
startedAt: Date;
|
|
154
|
+
/** Cumulative tokens used so far */
|
|
155
|
+
tokensUsed: number;
|
|
156
|
+
/** Cumulative tool calls so far */
|
|
157
|
+
toolCalls: number;
|
|
158
|
+
}
|
|
159
|
+
/** Result of a single turn */
|
|
160
|
+
export interface TurnResult {
|
|
161
|
+
/** Tool that was called (if any) */
|
|
162
|
+
toolName?: string;
|
|
163
|
+
/** Parameters passed to the tool */
|
|
164
|
+
toolParams?: unknown;
|
|
165
|
+
/** Result returned by the tool */
|
|
166
|
+
toolResult?: unknown;
|
|
167
|
+
/** Text response from the model */
|
|
168
|
+
modelResponse?: string;
|
|
169
|
+
/** Tokens used in this turn */
|
|
170
|
+
tokensUsed: number;
|
|
171
|
+
/** Whether the loop is complete */
|
|
172
|
+
completed: boolean;
|
|
173
|
+
/** Reason for completion (if completed) */
|
|
174
|
+
reason?: StopReason;
|
|
175
|
+
}
|
|
176
|
+
/** Reasons the loop can stop */
|
|
177
|
+
export type StopReason = 'max_turns' | 'timeout' | 'should_continue' | 'model_done' | 'error' | 'cancelled';
|
|
178
|
+
/** Final result of the loop execution */
|
|
179
|
+
export interface ReActResult {
|
|
180
|
+
/** How the loop ended */
|
|
181
|
+
status: 'completed' | 'cancelled' | 'error' | 'max_turns' | 'timeout';
|
|
182
|
+
/** Total turns executed */
|
|
183
|
+
turns: number;
|
|
184
|
+
/** Total tokens used */
|
|
185
|
+
totalTokens: number;
|
|
186
|
+
/** Artifacts produced during execution */
|
|
187
|
+
artifacts: unknown[];
|
|
188
|
+
/** Last model response text */
|
|
189
|
+
lastResponse?: string;
|
|
190
|
+
/** Error that caused the loop to stop (if applicable) */
|
|
191
|
+
error?: Error;
|
|
192
|
+
}
|
|
193
|
+
/** Handle for controlling a running loop */
|
|
194
|
+
export interface LoopHandle {
|
|
195
|
+
/** Inject a steering message into the loop */
|
|
196
|
+
steer(message: string): Promise<void>;
|
|
197
|
+
/** Cancel the loop */
|
|
198
|
+
cancel(): Promise<void>;
|
|
199
|
+
/** Promise that resolves when the loop completes */
|
|
200
|
+
completion: Promise<ReActResult>;
|
|
201
|
+
/** Listen for loop events */
|
|
202
|
+
on(event: string, handler: (...args: unknown[]) => void): void;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The ReAct (Reason + Act) loop — core agent execution primitive.
|
|
206
|
+
*
|
|
207
|
+
* Runs a loop: call model → if tool call → execute tool → feed result → repeat.
|
|
208
|
+
* Stops when: max turns reached, timeout, shouldContinue returns false,
|
|
209
|
+
* model indicates done (no tool call), or an error causes abort.
|
|
210
|
+
*/
|
|
211
|
+
export declare class ReActLoop {
|
|
212
|
+
private readonly config;
|
|
213
|
+
private readonly emitter;
|
|
214
|
+
private readonly customTools;
|
|
215
|
+
constructor(config: ReActConfig);
|
|
216
|
+
/**
|
|
217
|
+
* Run the loop synchronously (blocks until complete).
|
|
218
|
+
*
|
|
219
|
+
* @param prompt - User prompt to start the loop with
|
|
220
|
+
* @returns Final result with status, turn count, and artifacts
|
|
221
|
+
*/
|
|
222
|
+
run(prompt: string): Promise<ReActResult>;
|
|
223
|
+
/**
|
|
224
|
+
* Start the loop in interactive mode (supports steering).
|
|
225
|
+
*
|
|
226
|
+
* @param prompt - User prompt to start the loop with
|
|
227
|
+
* @returns Handle for steering, cancellation, and completion
|
|
228
|
+
*/
|
|
229
|
+
start(prompt: string): LoopHandle;
|
|
230
|
+
private executeLoop;
|
|
231
|
+
private callModel;
|
|
232
|
+
/**
|
|
233
|
+
* Resolve available tool definitions.
|
|
234
|
+
* Priority: custom → native → broker → definitions
|
|
235
|
+
*/
|
|
236
|
+
private resolveToolDefinitions;
|
|
237
|
+
/**
|
|
238
|
+
* Execute a tool by name.
|
|
239
|
+
* Routing priority: router → custom → broker
|
|
240
|
+
*/
|
|
241
|
+
private executeTool;
|
|
242
|
+
/**
|
|
243
|
+
* Compact the message history by summarizing older messages.
|
|
244
|
+
* Preserves the system prompt and most recent messages.
|
|
245
|
+
*/
|
|
246
|
+
private compactContext;
|
|
247
|
+
private handleError;
|
|
248
|
+
private emitEvent;
|
|
249
|
+
private buildResult;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=react-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-loop.d.ts","sourceRoot":"","sources":["../src/react-loop.ts"],"names":[],"mappings":"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"}
|