@standardagents/builder 0.11.0-next.ab7e1ea → 0.11.0-next.c3b4490
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/built-in-routes.js +22071 -401
- package/dist/built-in-routes.js.map +1 -1
- package/dist/client/assets/index.css +1 -1
- package/dist/client/index.js +28 -19
- package/dist/client/vendor.js +1 -1
- package/dist/client/vue.js +1 -1
- package/dist/index.d.ts +674 -840
- package/dist/index.js +7205 -4228
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.js +386 -121
- package/dist/plugin.js.map +1 -1
- package/dist/sip.wasm +0 -0
- package/package.json +8 -4
- package/dist/client/assets/img/meta.svg +0 -19
- package/dist/client/assets/img/moonshotai.svg +0 -4
- package/dist/client/assets/img/zai.svg +0 -219
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { AgentPluginOptions, agentbuilder } from './plugin.js';
|
|
2
2
|
import { DurableObjectStorage } from '@cloudflare/workers-types';
|
|
3
|
-
import {
|
|
3
|
+
import { ZodObject, ZodRawShape } from 'zod';
|
|
4
|
+
import { ToolResult as ToolResult$1, HookSignatures, AgentDefinition as AgentDefinition$1, ControllerContext, Controller, ModelDefinition as ModelDefinition$1, ToolArgs, PromptTextPart, SubpromptConfig as SubpromptConfig$2, ReasoningConfig, SideConfig as SideConfig$1, LLMProviderInterface, ContentPart, TextPart, ImagePart, FilePart } from '@standardagents/spec';
|
|
5
|
+
export { AgentType, HookSignatures, ImageContent, ModelCapabilities, ModelProvider, PromptInput, PromptTextPart, ProviderAssistantMessage, ProviderError, ProviderErrorCode, ProviderFactory, ProviderFactoryConfig, ProviderFinishReason, ProviderGeneratedImage, ProviderMessage, ProviderMessageContent, ModelCapabilities as ProviderModelCapabilities, ProviderReasoningDetail, ProviderRequest, ProviderResponse, ProviderStreamChunk, ProviderSystemMessage, ProviderTool, ProviderToolCallPart, ProviderToolMessage, ProviderToolResultContent, ProviderUsage, ProviderUserMessage, ReasoningConfig, StructuredPrompt, TextContent, Tool, ToolArgs, ToolArgsNode, ToolArgsRawShape, ToolContent, defineAgent, defineHook, defineModel, definePrompt, defineTool, mapReasoningLevel } from '@standardagents/spec';
|
|
4
6
|
import { DurableObject } from 'cloudflare:workers';
|
|
5
7
|
import 'vite';
|
|
6
8
|
|
|
@@ -144,122 +146,6 @@ declare class StreamManager {
|
|
|
144
146
|
forceClose(): void;
|
|
145
147
|
}
|
|
146
148
|
|
|
147
|
-
/**
|
|
148
|
-
* Content item types that can be returned by tools
|
|
149
|
-
*/
|
|
150
|
-
interface TextContent {
|
|
151
|
-
type: "text";
|
|
152
|
-
text: string;
|
|
153
|
-
}
|
|
154
|
-
interface ImageContent {
|
|
155
|
-
type: "image";
|
|
156
|
-
data: string;
|
|
157
|
-
mimeType: string;
|
|
158
|
-
}
|
|
159
|
-
type ToolContent = TextContent | ImageContent;
|
|
160
|
-
/** Decrement helper to stop recursion at depth 0 */
|
|
161
|
-
type Dec<N extends number> = N extends 10 ? 9 : N extends 9 ? 8 : N extends 8 ? 7 : N extends 7 ? 6 : N extends 6 ? 5 : N extends 5 ? 4 : N extends 4 ? 3 : N extends 3 ? 2 : N extends 2 ? 1 : N extends 1 ? 0 : 0;
|
|
162
|
-
/**
|
|
163
|
-
* Allowed Zod node for tool arguments.
|
|
164
|
-
* Tweak this union as your single source of truth for what’s allowed.
|
|
165
|
-
* Increase the default depth if you need crazier nesting.
|
|
166
|
-
*/
|
|
167
|
-
type ToolArgsNode<D extends number = 7> = ZodString | ZodNumber | ZodBoolean | ZodNull | ZodLiteral<string | number | boolean | null> | ZodEnum<Record<string, string>> | (D extends 0 ? never : ZodOptional<ToolArgsNode<Dec<D>>>) | (D extends 0 ? never : ZodNullable<ToolArgsNode<Dec<D>>>) | (D extends 0 ? never : ZodDefault<ToolArgsNode<Dec<D>>>) | (D extends 0 ? never : ZodArray<ToolArgsNode<Dec<D>>>) | (D extends 0 ? never : ZodObject<Record<string, ToolArgsNode<Dec<D>>>>) | (D extends 0 ? never : ZodRecord<ZodString, ToolArgsNode<Dec<D>>>) | (D extends 0 ? never : ZodUnion<[
|
|
168
|
-
ToolArgsNode<Dec<D>>,
|
|
169
|
-
ToolArgsNode<Dec<D>>,
|
|
170
|
-
...ToolArgsNode<Dec<D>>[]
|
|
171
|
-
]>);
|
|
172
|
-
/**
|
|
173
|
-
* Raw shape for an object whose values are ToolArgsNode.
|
|
174
|
-
* This is what users write inside z.object({ ... }).
|
|
175
|
-
*/
|
|
176
|
-
type ToolArgsRawShape<D extends number = 7> = Record<string, ToolArgsNode<D>>;
|
|
177
|
-
/** The top-level schema must be an object for OpenAI tools. */
|
|
178
|
-
type ToolArgs<D extends number = 7> = z.ZodObject<ToolArgsRawShape<D>>;
|
|
179
|
-
type StructuredToolReturn = ToolArgs;
|
|
180
|
-
/**
|
|
181
|
-
* Defines a tool function. Tools accept the current flow state as well as the arguments being passed to them.
|
|
182
|
-
*/
|
|
183
|
-
type Tool<Args extends ToolArgs | null = null> = Args extends ToolArgs ? (flow: FlowState, args: z.infer<Args>) => Promise<ToolResult> : (flow: FlowState) => Promise<ToolResult>;
|
|
184
|
-
/**
|
|
185
|
-
* @param toolDescription - Description of what the tool does.
|
|
186
|
-
* @param args - The arguments for the tool.
|
|
187
|
-
* @param tool - The tool function.
|
|
188
|
-
* @returns A tuple containing the description, arguments and the tool function.
|
|
189
|
-
*/
|
|
190
|
-
declare function defineTool<Args extends ToolArgs>(toolDescription: string, args: Args, tool: Tool<Args>): [string, Args, Tool<Args>, null];
|
|
191
|
-
declare function defineTool(toolDescription: string, tool: Tool<null>): [string, null, Tool<null>, null];
|
|
192
|
-
declare function defineTool<Args extends ToolArgs, RetValue extends StructuredToolReturn>(toolDescription: string, args: Args, tool: Tool<Args>, returnSchema: RetValue): [string, Args, Tool<Args>, RetValue];
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Hook signatures for all available hooks
|
|
196
|
-
*/
|
|
197
|
-
interface HookSignatures {
|
|
198
|
-
/**
|
|
199
|
-
* Called before messages are filtered and sent to the LLM
|
|
200
|
-
* Receives SQL row data with all columns before transformation
|
|
201
|
-
* Return value is transformed into chat completion format
|
|
202
|
-
*/
|
|
203
|
-
filter_messages: (state: FlowState, rows: Message[]) => Promise<Message[]>;
|
|
204
|
-
/**
|
|
205
|
-
* Called after message history is loaded and before sending to LLM
|
|
206
|
-
* Receives messages in chat completion format (already transformed)
|
|
207
|
-
*/
|
|
208
|
-
prefilter_llm_history: (state: FlowState, messages: Array<{
|
|
209
|
-
role: string;
|
|
210
|
-
content: string | null;
|
|
211
|
-
tool_calls?: any;
|
|
212
|
-
tool_call_id?: string;
|
|
213
|
-
name?: string;
|
|
214
|
-
}>) => Promise<Array<{
|
|
215
|
-
role: string;
|
|
216
|
-
content: string | null;
|
|
217
|
-
tool_calls?: any;
|
|
218
|
-
tool_call_id?: string;
|
|
219
|
-
name?: string;
|
|
220
|
-
}>>;
|
|
221
|
-
/**
|
|
222
|
-
* Called before a message is created in the database
|
|
223
|
-
*/
|
|
224
|
-
before_create_message: (state: FlowState, message: Record<string, any>) => Promise<Record<string, any>>;
|
|
225
|
-
/**
|
|
226
|
-
* Called after a message is created in the database
|
|
227
|
-
*/
|
|
228
|
-
after_create_message: (state: FlowState, message: Record<string, any>) => Promise<void>;
|
|
229
|
-
/**
|
|
230
|
-
* Called before a message is updated in the database
|
|
231
|
-
*/
|
|
232
|
-
before_update_message: (state: FlowState, messageId: string, updates: Record<string, any>) => Promise<Record<string, any>>;
|
|
233
|
-
/**
|
|
234
|
-
* Called after a message is updated in the database
|
|
235
|
-
*/
|
|
236
|
-
after_update_message: (state: FlowState, message: Message) => Promise<void>;
|
|
237
|
-
/**
|
|
238
|
-
* Called before a tool result is stored in the database
|
|
239
|
-
*/
|
|
240
|
-
before_store_tool_result: (state: FlowState, toolCall: Record<string, any>, toolResult: Record<string, any>) => Promise<Record<string, any>>;
|
|
241
|
-
/**
|
|
242
|
-
* Called after a successful tool call
|
|
243
|
-
*/
|
|
244
|
-
after_tool_call_success: (state: FlowState, toolCall: ToolCall, toolResult: ToolResult) => Promise<ToolResult | null>;
|
|
245
|
-
/**
|
|
246
|
-
* Called after a failed tool call
|
|
247
|
-
*/
|
|
248
|
-
after_tool_call_failure: (state: FlowState, toolCall: ToolCall, toolResult: ToolResult) => Promise<ToolResult | null>;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Define a hook with strict typing based on hook name
|
|
252
|
-
*
|
|
253
|
-
* @example
|
|
254
|
-
* ```typescript
|
|
255
|
-
* export default defineHook('filter_messages', async (state, rows) => {
|
|
256
|
-
* // Only include messages from last 10 turns
|
|
257
|
-
* return rows.slice(-10);
|
|
258
|
-
* });
|
|
259
|
-
* ```
|
|
260
|
-
*/
|
|
261
|
-
declare function defineHook<K extends keyof HookSignatures>(hookName: K, implementation: HookSignatures[K]): HookSignatures[K];
|
|
262
|
-
|
|
263
149
|
/**
|
|
264
150
|
* Agent configuration from D1 agents table
|
|
265
151
|
*/
|
|
@@ -274,15 +160,15 @@ interface Agent {
|
|
|
274
160
|
side_a_stop_on_response: boolean;
|
|
275
161
|
side_a_stop_tool: string | null;
|
|
276
162
|
side_a_stop_tool_response_property: string | null;
|
|
277
|
-
|
|
278
|
-
|
|
163
|
+
side_a_max_steps: number | null;
|
|
164
|
+
side_a_end_session_tool: string | null;
|
|
279
165
|
side_b_label: string | null;
|
|
280
166
|
side_b_agent_prompt: string | null;
|
|
281
167
|
side_b_stop_on_response: boolean;
|
|
282
168
|
side_b_stop_tool: string | null;
|
|
283
169
|
side_b_stop_tool_response_property: string | null;
|
|
284
|
-
|
|
285
|
-
|
|
170
|
+
side_b_max_steps: number | null;
|
|
171
|
+
side_b_end_session_tool: string | null;
|
|
286
172
|
}
|
|
287
173
|
/**
|
|
288
174
|
* Message in OpenAI chat completion format
|
|
@@ -327,6 +213,8 @@ interface ThreadMetadata {
|
|
|
327
213
|
id: string;
|
|
328
214
|
agent_id: string;
|
|
329
215
|
user_id: string | null;
|
|
216
|
+
tenvs: Record<string, unknown> | null;
|
|
217
|
+
properties: Record<string, unknown> | null;
|
|
330
218
|
created_at: number;
|
|
331
219
|
}
|
|
332
220
|
/**
|
|
@@ -335,6 +223,31 @@ interface ThreadMetadata {
|
|
|
335
223
|
type HookRegistry = {
|
|
336
224
|
[K in keyof HookSignatures]?: () => Promise<HookSignatures[K]>;
|
|
337
225
|
};
|
|
226
|
+
/**
|
|
227
|
+
* Native tool module type - represents a loaded tool definition.
|
|
228
|
+
* Tools can have args (with validation schema) or no args.
|
|
229
|
+
* Uses local Zod types for compatibility with z.toJSONSchema().
|
|
230
|
+
*/
|
|
231
|
+
interface NativeToolModule {
|
|
232
|
+
/** Description of what the tool does (shown to the LLM). */
|
|
233
|
+
description: string;
|
|
234
|
+
/** Zod schema for validating tool arguments, or null for no args. */
|
|
235
|
+
args: ZodObject<ZodRawShape> | null;
|
|
236
|
+
/** The tool implementation function. */
|
|
237
|
+
execute: ((state: any, args: Record<string, unknown>) => Promise<ToolResult$1>) | ((state: any) => Promise<ToolResult$1>);
|
|
238
|
+
/** Zod schema for thread environment variables, or null if none. */
|
|
239
|
+
tenvs?: ZodObject<ZodRawShape> | null;
|
|
240
|
+
/**
|
|
241
|
+
* Where this tool is executed:
|
|
242
|
+
* - 'local': Execute locally by the execution engine (default)
|
|
243
|
+
* - 'provider': Executed by the LLM provider, results come in response
|
|
244
|
+
*/
|
|
245
|
+
executionMode?: 'local' | 'provider';
|
|
246
|
+
/**
|
|
247
|
+
* Which provider executes this tool (when executionMode='provider').
|
|
248
|
+
*/
|
|
249
|
+
executionProvider?: string;
|
|
250
|
+
}
|
|
338
251
|
/**
|
|
339
252
|
* Thread instance (forward reference to avoid circular dependency)
|
|
340
253
|
*/
|
|
@@ -348,14 +261,48 @@ interface ThreadInstance {
|
|
|
348
261
|
}>;
|
|
349
262
|
getLogs(limit?: number, offset?: number, order?: "asc" | "desc"): Promise<LogData[]>;
|
|
350
263
|
getThreadMeta(threadId: string): Promise<ThreadMetadata | null>;
|
|
264
|
+
deleteMessage(messageId: string): Promise<{
|
|
265
|
+
success: boolean;
|
|
266
|
+
error?: string;
|
|
267
|
+
}>;
|
|
351
268
|
shouldStop(): Promise<boolean>;
|
|
352
|
-
tools(): Record<string, () => Promise<
|
|
269
|
+
tools(): Record<string, () => Promise<NativeToolModule>>;
|
|
353
270
|
hooks(): HookRegistry;
|
|
354
271
|
loadModel(name: string): Promise<any>;
|
|
355
272
|
loadPrompt(name: string): Promise<any>;
|
|
356
273
|
loadAgent(name: string): Promise<any>;
|
|
357
274
|
getPromptNames(): string[];
|
|
358
275
|
getAgentNames(): string[];
|
|
276
|
+
writeFile(path: string, data: ArrayBuffer | string, mimeType: string, options?: Record<string, unknown>): Promise<any>;
|
|
277
|
+
readFile(path: string): Promise<{
|
|
278
|
+
success: boolean;
|
|
279
|
+
data?: string;
|
|
280
|
+
error?: string;
|
|
281
|
+
}>;
|
|
282
|
+
statFile(path: string): Promise<any>;
|
|
283
|
+
readdirFile(path: string): Promise<any[]>;
|
|
284
|
+
unlinkFile(path: string): Promise<void>;
|
|
285
|
+
mkdirFile(path: string): Promise<any>;
|
|
286
|
+
rmdirFile(path: string): Promise<void>;
|
|
287
|
+
getFileStats(): Promise<any>;
|
|
288
|
+
grepFiles(pattern: string): Promise<any[]>;
|
|
289
|
+
findFiles(pattern: string): Promise<any>;
|
|
290
|
+
getFileThumbnail(path: string): Promise<ArrayBuffer | null>;
|
|
291
|
+
readFileChunk(path: string, chunkIndex: number): Promise<{
|
|
292
|
+
success: boolean;
|
|
293
|
+
data?: string;
|
|
294
|
+
error?: string;
|
|
295
|
+
}>;
|
|
296
|
+
runAgent(threadId: string, agentName: string): Promise<void>;
|
|
297
|
+
scheduleEffect(threadId: string, effectName: string, effectArgs: Record<string, unknown>, delayMs?: number): Promise<string>;
|
|
298
|
+
getScheduledEffects(name?: string): Promise<Array<{
|
|
299
|
+
id: string;
|
|
300
|
+
name: string;
|
|
301
|
+
args: Record<string, unknown>;
|
|
302
|
+
scheduledAt: number;
|
|
303
|
+
createdAt: number;
|
|
304
|
+
}>>;
|
|
305
|
+
removeScheduledEffect(id: string): Promise<boolean>;
|
|
359
306
|
insertOrphanedToolCall(params: {
|
|
360
307
|
content?: string;
|
|
361
308
|
toolCallId: string;
|
|
@@ -389,11 +336,12 @@ type FlowCallWithRetries = FlowCall & {
|
|
|
389
336
|
reasons: string[];
|
|
390
337
|
};
|
|
391
338
|
/**
|
|
392
|
-
*
|
|
339
|
+
* Sub-prompt configuration - defines options for when a sub-prompt is called as a tool
|
|
393
340
|
*/
|
|
394
|
-
interface
|
|
341
|
+
interface SubpromptConfig$1 {
|
|
395
342
|
name: string;
|
|
396
343
|
initUserMessageProperty?: string;
|
|
344
|
+
initAttachmentsProperty?: string;
|
|
397
345
|
includeTextResponse?: boolean;
|
|
398
346
|
includeToolCalls?: boolean;
|
|
399
347
|
includeErrors?: boolean;
|
|
@@ -412,8 +360,6 @@ interface PromptData {
|
|
|
412
360
|
required_schema: string;
|
|
413
361
|
include_chat: boolean;
|
|
414
362
|
include_past_tools: boolean;
|
|
415
|
-
before_tool: string | null;
|
|
416
|
-
after_tool: string | null;
|
|
417
363
|
prompts: string;
|
|
418
364
|
created_at: number;
|
|
419
365
|
/** @deprecated All prompts are now automatically exposed as tools */
|
|
@@ -424,10 +370,8 @@ interface PromptData {
|
|
|
424
370
|
reasoning_max_tokens: number | null;
|
|
425
371
|
reasoning_exclude: boolean;
|
|
426
372
|
include_reasoning: boolean;
|
|
427
|
-
maxImagePixels: number | null;
|
|
428
373
|
recentImageThreshold: number | null;
|
|
429
|
-
_tools?: (string |
|
|
430
|
-
_handoffAgents?: string[];
|
|
374
|
+
_tools?: (string | SubpromptConfig$1)[];
|
|
431
375
|
_requiredSchema?: any;
|
|
432
376
|
}
|
|
433
377
|
/**
|
|
@@ -447,9 +391,9 @@ interface FlowState {
|
|
|
447
391
|
sideB: PromptData | null;
|
|
448
392
|
};
|
|
449
393
|
prompt: PromptData;
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
394
|
+
stepCount: number;
|
|
395
|
+
sideAStepCount: number;
|
|
396
|
+
sideBStepCount: number;
|
|
453
397
|
stopped: boolean;
|
|
454
398
|
stoppedBy?: "a" | "b";
|
|
455
399
|
forcedNextSide?: "side_a" | "side_b";
|
|
@@ -488,6 +432,7 @@ interface FlowState {
|
|
|
488
432
|
depth: number;
|
|
489
433
|
pendingMessageId?: string;
|
|
490
434
|
allowedTools?: ToolDefinition[];
|
|
435
|
+
pendingMetadataPromises?: Promise<void>[];
|
|
491
436
|
}
|
|
492
437
|
/**
|
|
493
438
|
* Text content part for multimodal messages
|
|
@@ -524,6 +469,10 @@ interface RequestContext {
|
|
|
524
469
|
tool_calls?: ToolCall[];
|
|
525
470
|
tool_call_id?: string;
|
|
526
471
|
name?: string;
|
|
472
|
+
reasoning_content?: string;
|
|
473
|
+
reasoning_details?: any[];
|
|
474
|
+
attachments?: any[];
|
|
475
|
+
toolName?: string;
|
|
527
476
|
}>;
|
|
528
477
|
model: string;
|
|
529
478
|
tools?: ToolDefinition[];
|
|
@@ -555,6 +504,33 @@ interface ToolDefinition {
|
|
|
555
504
|
description: string;
|
|
556
505
|
parameters?: Record<string, any>;
|
|
557
506
|
};
|
|
507
|
+
/**
|
|
508
|
+
* Where this tool is executed:
|
|
509
|
+
* - 'local': Execute locally by the execution engine (default)
|
|
510
|
+
* - 'provider': Executed by the LLM provider, results come in response
|
|
511
|
+
*/
|
|
512
|
+
executionMode?: 'local' | 'provider';
|
|
513
|
+
/**
|
|
514
|
+
* Which provider executes this tool (when executionMode='provider')
|
|
515
|
+
* e.g., 'openai', 'anthropic'
|
|
516
|
+
*/
|
|
517
|
+
executionProvider?: string;
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Image returned by an LLM response (e.g., from image generation models)
|
|
521
|
+
* Format follows OpenAI/OpenRouter chat completions API
|
|
522
|
+
*/
|
|
523
|
+
interface LLMResponseImage {
|
|
524
|
+
type: "image_url";
|
|
525
|
+
/** Unique ID for this generated image (used to link to tool call) */
|
|
526
|
+
id?: string;
|
|
527
|
+
/** Name of the tool that generated this image (e.g., 'image_generation') */
|
|
528
|
+
toolName?: string;
|
|
529
|
+
/** The revised/actual prompt used to generate the image (from OpenAI's image_generation) */
|
|
530
|
+
revisedPrompt?: string;
|
|
531
|
+
image_url: {
|
|
532
|
+
url: string;
|
|
533
|
+
};
|
|
558
534
|
}
|
|
559
535
|
/**
|
|
560
536
|
* LLM response
|
|
@@ -566,6 +542,7 @@ interface LLMResponse {
|
|
|
566
542
|
reasoning_content?: string | null;
|
|
567
543
|
reasoning_details?: any[];
|
|
568
544
|
tool_calls?: ToolCall[];
|
|
545
|
+
images?: LLMResponseImage[];
|
|
569
546
|
finish_reason: string;
|
|
570
547
|
usage: {
|
|
571
548
|
prompt_tokens: number;
|
|
@@ -580,6 +557,23 @@ interface LLMResponse {
|
|
|
580
557
|
cost?: number;
|
|
581
558
|
provider?: string;
|
|
582
559
|
};
|
|
560
|
+
/** @internal Provider instance reference for async metadata fetching */
|
|
561
|
+
_provider?: unknown;
|
|
562
|
+
/** @internal Provider response ID for async metadata fetching */
|
|
563
|
+
_providerResponseId?: string;
|
|
564
|
+
/** @internal Aggregate response for logging */
|
|
565
|
+
_aggregate_response?: unknown;
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Attachment returned by a tool (e.g., generated images)
|
|
569
|
+
* Stored in thread filesystem and linked to the tool message
|
|
570
|
+
*/
|
|
571
|
+
interface ToolAttachment {
|
|
572
|
+
name: string;
|
|
573
|
+
mimeType: string;
|
|
574
|
+
data: string;
|
|
575
|
+
width?: number;
|
|
576
|
+
height?: number;
|
|
583
577
|
}
|
|
584
578
|
/**
|
|
585
579
|
* Tool result
|
|
@@ -597,6 +591,16 @@ interface ToolResult {
|
|
|
597
591
|
result?: string;
|
|
598
592
|
error?: string;
|
|
599
593
|
stack?: string;
|
|
594
|
+
/**
|
|
595
|
+
* File attachments returned by the tool.
|
|
596
|
+
*
|
|
597
|
+
* Can contain either:
|
|
598
|
+
* - ToolAttachment: New files with base64 data to be stored
|
|
599
|
+
* - AttachmentRef: References to existing files in the thread filesystem
|
|
600
|
+
*
|
|
601
|
+
* New attachments are stored under /attachments/ directory.
|
|
602
|
+
*/
|
|
603
|
+
attachments?: Array<ToolAttachment | AttachmentRef>;
|
|
600
604
|
}
|
|
601
605
|
/**
|
|
602
606
|
* Flow execution result
|
|
@@ -605,20 +609,20 @@ interface FlowResult {
|
|
|
605
609
|
messages: Message[];
|
|
606
610
|
stopped: boolean;
|
|
607
611
|
stoppedBy?: "a" | "b";
|
|
608
|
-
|
|
612
|
+
stepCount: number;
|
|
609
613
|
stream: ReadableStream<Uint8Array>;
|
|
610
614
|
}
|
|
611
615
|
/**
|
|
612
616
|
* Telemetry event types
|
|
613
617
|
*/
|
|
614
618
|
type TelemetryEvent = {
|
|
615
|
-
type: "
|
|
616
|
-
|
|
619
|
+
type: "step_started";
|
|
620
|
+
step: number;
|
|
617
621
|
side: "a" | "b";
|
|
618
622
|
timestamp: number;
|
|
619
623
|
} | {
|
|
620
|
-
type: "
|
|
621
|
-
|
|
624
|
+
type: "step_completed";
|
|
625
|
+
step: number;
|
|
622
626
|
stopped: boolean;
|
|
623
627
|
timestamp: number;
|
|
624
628
|
} | {
|
|
@@ -691,6 +695,7 @@ interface LogData {
|
|
|
691
695
|
tools_available?: number;
|
|
692
696
|
prompt_name?: string;
|
|
693
697
|
tools_called?: string;
|
|
698
|
+
actual_provider?: string | null;
|
|
694
699
|
parent_log_id?: string | null;
|
|
695
700
|
tools_schema?: string | null;
|
|
696
701
|
message_history?: string | null;
|
|
@@ -741,6 +746,8 @@ interface FileRecord {
|
|
|
741
746
|
createdAt: number;
|
|
742
747
|
width?: number | null;
|
|
743
748
|
height?: number | null;
|
|
749
|
+
isChunked?: boolean;
|
|
750
|
+
chunkCount?: number;
|
|
744
751
|
}
|
|
745
752
|
/**
|
|
746
753
|
* Image-specific metadata stored in FileRecord.metadata
|
|
@@ -779,43 +786,218 @@ interface FileStats {
|
|
|
779
786
|
fileCount: number;
|
|
780
787
|
}
|
|
781
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Router and endpoint definition module for AgentBuilder.
|
|
791
|
+
*
|
|
792
|
+
* This module re-exports endpoint types from @standardagents/spec and provides
|
|
793
|
+
* the runtime router implementation for handling HTTP requests.
|
|
794
|
+
*
|
|
795
|
+
* @module
|
|
796
|
+
*/
|
|
797
|
+
|
|
798
|
+
/**
|
|
799
|
+
* Durable Object namespace interface.
|
|
800
|
+
* This is Cloudflare-specific and used by the builder runtime.
|
|
801
|
+
*/
|
|
802
|
+
interface DurableObjectNamespace$1<T = unknown> {
|
|
803
|
+
idFromName(name: string): DurableObjectId;
|
|
804
|
+
idFromString(id: string): DurableObjectId;
|
|
805
|
+
newUniqueId(): DurableObjectId;
|
|
806
|
+
get(id: DurableObjectId): DurableObjectStub$1<T>;
|
|
807
|
+
}
|
|
808
|
+
/**
|
|
809
|
+
* Durable Object ID interface.
|
|
810
|
+
*/
|
|
811
|
+
interface DurableObjectId {
|
|
812
|
+
toString(): string;
|
|
813
|
+
equals(other: DurableObjectId): boolean;
|
|
814
|
+
}
|
|
815
|
+
/**
|
|
816
|
+
* Durable Object stub interface.
|
|
817
|
+
* The generic type T represents the RPC methods available on the stub.
|
|
818
|
+
*/
|
|
819
|
+
type DurableObjectStub$1<T = unknown> = {
|
|
820
|
+
id: DurableObjectId;
|
|
821
|
+
name?: string;
|
|
822
|
+
fetch(request: Request | string, requestInitr?: RequestInit): Promise<Response>;
|
|
823
|
+
} & T;
|
|
824
|
+
/**
|
|
825
|
+
* Log entry from DurableThread.getLogs()
|
|
826
|
+
*/
|
|
827
|
+
interface LogEntry {
|
|
828
|
+
id: string;
|
|
829
|
+
message_id: string;
|
|
830
|
+
provider: string;
|
|
831
|
+
model: string;
|
|
832
|
+
model_name: string | null;
|
|
833
|
+
prompt_name: string | null;
|
|
834
|
+
tools_called: string | null;
|
|
835
|
+
parent_log_id: string | null;
|
|
836
|
+
retry_of_log_id: string | null;
|
|
837
|
+
error: string | null;
|
|
838
|
+
cost_total: number | null;
|
|
839
|
+
is_complete: number;
|
|
840
|
+
created_at: number;
|
|
841
|
+
request_body: string | null;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Response from getThreadMeta()
|
|
845
|
+
*/
|
|
846
|
+
interface ThreadMetaResponse {
|
|
847
|
+
thread: ThreadRegistryEntry$1;
|
|
848
|
+
agent: AgentDefinition$1 | null;
|
|
849
|
+
stats: {
|
|
850
|
+
messageCount: number;
|
|
851
|
+
logCount: number;
|
|
852
|
+
lastActivity: number | null;
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
/**
|
|
856
|
+
* Log details returned by getLogDetails
|
|
857
|
+
*/
|
|
858
|
+
interface LogDetails {
|
|
859
|
+
id: string;
|
|
860
|
+
message_id: string;
|
|
861
|
+
provider: string;
|
|
862
|
+
actual_provider: string | null;
|
|
863
|
+
model: string;
|
|
864
|
+
model_name: string | null;
|
|
865
|
+
endpoint: string | null;
|
|
866
|
+
request_body: string | null;
|
|
867
|
+
request_headers: string | null;
|
|
868
|
+
response_body: string | null;
|
|
869
|
+
response_headers: string | null;
|
|
870
|
+
status_code: number | null;
|
|
871
|
+
reasoning_content: string | null;
|
|
872
|
+
input_tokens: number | null;
|
|
873
|
+
cached_tokens: number | null;
|
|
874
|
+
output_tokens: number | null;
|
|
875
|
+
reasoning_tokens: number | null;
|
|
876
|
+
total_tokens: number | null;
|
|
877
|
+
latency_ms: number | null;
|
|
878
|
+
time_to_first_token_ms: number | null;
|
|
879
|
+
finish_reason: string | null;
|
|
880
|
+
error: string | null;
|
|
881
|
+
error_type: string | null;
|
|
882
|
+
cost_input: number | null;
|
|
883
|
+
cost_output: number | null;
|
|
884
|
+
cost_total: number | null;
|
|
885
|
+
message_history_length: number | null;
|
|
886
|
+
tools_available: number | null;
|
|
887
|
+
prompt_name: string | null;
|
|
888
|
+
tools_called: string | null;
|
|
889
|
+
provider_tools: string | null;
|
|
890
|
+
parent_log_id: string | null;
|
|
891
|
+
tools_schema: string | null;
|
|
892
|
+
system_prompt: string | null;
|
|
893
|
+
errors: string | null;
|
|
894
|
+
retry_of_log_id: string | null;
|
|
895
|
+
tool_results: string | null;
|
|
896
|
+
is_complete: number;
|
|
897
|
+
created_at: number;
|
|
898
|
+
}
|
|
899
|
+
/**
|
|
900
|
+
* RPC methods exposed by DurableThread for external callers.
|
|
901
|
+
*/
|
|
902
|
+
interface DurableThreadRpc {
|
|
903
|
+
stop(): Promise<Response>;
|
|
904
|
+
getMessages(limit?: number, offset?: number, order?: "ASC" | "DESC", includeSilent?: boolean, maxDepth?: number): Promise<{
|
|
905
|
+
messages: unknown[];
|
|
906
|
+
total: number;
|
|
907
|
+
hasMore: boolean;
|
|
908
|
+
}>;
|
|
909
|
+
deleteMessage(messageId: string): Promise<{
|
|
910
|
+
success: boolean;
|
|
911
|
+
error?: string;
|
|
912
|
+
}>;
|
|
913
|
+
updateMessageContent(messageId: string, content: string): Promise<{
|
|
914
|
+
success: boolean;
|
|
915
|
+
error?: string;
|
|
916
|
+
}>;
|
|
917
|
+
getLogs(limit?: number, offset?: number, order?: "ASC" | "DESC"): Promise<{
|
|
918
|
+
logs: LogEntry[];
|
|
919
|
+
total: number;
|
|
920
|
+
hasMore: boolean;
|
|
921
|
+
}>;
|
|
922
|
+
getLogDetails(logId: string): Promise<LogDetails | null>;
|
|
923
|
+
getThreadMeta(threadId: string): Promise<ThreadMetaResponse | null>;
|
|
924
|
+
deleteThread(): Promise<void>;
|
|
925
|
+
readFile(path: string): Promise<{
|
|
926
|
+
success: boolean;
|
|
927
|
+
data?: string;
|
|
928
|
+
error?: string;
|
|
929
|
+
}>;
|
|
930
|
+
}
|
|
931
|
+
/**
|
|
932
|
+
* Thread registry entry from DurableAgentBuilder.
|
|
933
|
+
*/
|
|
934
|
+
interface ThreadRegistryEntry$1 {
|
|
935
|
+
id: string;
|
|
936
|
+
agent_name: string;
|
|
937
|
+
user_id: string | null;
|
|
938
|
+
tags: string[] | null;
|
|
939
|
+
created_at: number;
|
|
940
|
+
}
|
|
941
|
+
/**
|
|
942
|
+
* RPC methods exposed by DurableAgentBuilder for external callers.
|
|
943
|
+
*/
|
|
944
|
+
interface DurableAgentBuilderRpc {
|
|
945
|
+
createThread(params: {
|
|
946
|
+
agent_name: string;
|
|
947
|
+
user_id?: string;
|
|
948
|
+
tags?: string[];
|
|
949
|
+
tenvs?: Record<string, unknown>;
|
|
950
|
+
properties?: Record<string, unknown>;
|
|
951
|
+
}): Promise<ThreadRegistryEntry$1>;
|
|
952
|
+
getThread(threadId: string): Promise<ThreadRegistryEntry$1 | null>;
|
|
953
|
+
listThreads(params?: {
|
|
954
|
+
agent_name?: string;
|
|
955
|
+
user_id?: string;
|
|
956
|
+
search?: string;
|
|
957
|
+
startDate?: number;
|
|
958
|
+
endDate?: number;
|
|
959
|
+
limit?: number;
|
|
960
|
+
offset?: number;
|
|
961
|
+
}): Promise<{
|
|
962
|
+
threads: ThreadRegistryEntry$1[];
|
|
963
|
+
total: number;
|
|
964
|
+
}>;
|
|
965
|
+
deleteThread(threadId: string): Promise<void>;
|
|
966
|
+
getUserByUsername(username: string): Promise<unknown>;
|
|
967
|
+
createSession(session: {
|
|
968
|
+
user_id: string;
|
|
969
|
+
token_hash: string;
|
|
970
|
+
expires_at: number;
|
|
971
|
+
}): Promise<void>;
|
|
972
|
+
loadAgent(name: string): Promise<AgentDefinition$1>;
|
|
973
|
+
}
|
|
782
974
|
/**
|
|
783
975
|
* Minimum required environment bindings for thread endpoints.
|
|
784
976
|
* User's Env interface should extend this.
|
|
785
977
|
*
|
|
786
|
-
*
|
|
787
|
-
* Durable Object types that extend DurableThread/DurableAgentBuilder.
|
|
978
|
+
* This is Cloudflare-specific and used by the builder runtime.
|
|
788
979
|
*/
|
|
789
980
|
interface ThreadEnv {
|
|
790
|
-
AGENT_BUILDER_THREAD: DurableObjectNamespace<
|
|
791
|
-
AGENT_BUILDER: DurableObjectNamespace<
|
|
981
|
+
AGENT_BUILDER_THREAD: DurableObjectNamespace$1<DurableThreadRpc>;
|
|
982
|
+
AGENT_BUILDER: DurableObjectNamespace$1<DurableAgentBuilderRpc>;
|
|
792
983
|
[key: string]: unknown;
|
|
793
984
|
}
|
|
794
985
|
/**
|
|
795
|
-
*
|
|
986
|
+
* Builder-specific controller context with typed env.
|
|
987
|
+
*
|
|
988
|
+
* This extends the spec's ControllerContext with proper typing for
|
|
989
|
+
* Cloudflare environment bindings.
|
|
796
990
|
*/
|
|
797
|
-
|
|
798
|
-
|
|
991
|
+
interface BuilderControllerContext<Env extends ThreadEnv = ThreadEnv> extends Omit<ControllerContext, 'env'> {
|
|
992
|
+
env: Env;
|
|
993
|
+
}
|
|
799
994
|
/**
|
|
800
|
-
*
|
|
801
|
-
|
|
995
|
+
* Builder-specific controller type with typed env.
|
|
996
|
+
*/
|
|
997
|
+
type BuilderController<Env extends ThreadEnv = ThreadEnv> = (context: BuilderControllerContext<Env>) => ReturnType<Controller>;
|
|
998
|
+
/**
|
|
999
|
+
* Thread endpoint context with access to thread instance and metadata.
|
|
802
1000
|
*/
|
|
803
|
-
interface ControllerContext<Env = any> {
|
|
804
|
-
req: Request;
|
|
805
|
-
params: Record<string, string>;
|
|
806
|
-
env: Env;
|
|
807
|
-
url: URL;
|
|
808
|
-
agents?: VirtualModuleRegistry<unknown>;
|
|
809
|
-
agentNames?: string[];
|
|
810
|
-
prompts?: VirtualModuleRegistry<unknown>;
|
|
811
|
-
promptNames?: string[];
|
|
812
|
-
models?: VirtualModuleRegistry<unknown>;
|
|
813
|
-
modelNames?: string[];
|
|
814
|
-
tools?: VirtualModuleRegistry<unknown>;
|
|
815
|
-
hooks?: VirtualModuleRegistry<unknown>;
|
|
816
|
-
config?: Record<string, unknown>;
|
|
817
|
-
}
|
|
818
|
-
type Controller<Env = any> = (context: ControllerContext<Env>) => string | Promise<string> | Response | Promise<Response> | ReadableStream | Promise<ReadableStream> | null | Promise<null> | void | Promise<void> | Promise<object> | object;
|
|
819
1001
|
interface ThreadEndpointContext {
|
|
820
1002
|
req: Request;
|
|
821
1003
|
thread: {
|
|
@@ -823,22 +1005,67 @@ interface ThreadEndpointContext {
|
|
|
823
1005
|
metadata: ThreadMetadata;
|
|
824
1006
|
};
|
|
825
1007
|
}
|
|
826
|
-
declare function defineController<Env = any>(controller: Controller<Env>): Controller<Env>;
|
|
827
1008
|
/**
|
|
828
|
-
*
|
|
829
|
-
*
|
|
1009
|
+
* Handler function for builder thread endpoints.
|
|
1010
|
+
*
|
|
1011
|
+
* Unlike the spec's ThreadEndpointHandler which receives ThreadState,
|
|
1012
|
+
* the builder's handler receives direct access to the Durable Object
|
|
1013
|
+
* instance and thread metadata. This allows for lower-level operations
|
|
1014
|
+
* like calling RPC methods directly on the instance.
|
|
1015
|
+
*/
|
|
1016
|
+
type BuilderThreadEndpointHandler = (req: Request, context: {
|
|
1017
|
+
instance: ThreadInstance;
|
|
1018
|
+
metadata: ThreadMetadata;
|
|
1019
|
+
}) => Response | Promise<Response>;
|
|
1020
|
+
/**
|
|
1021
|
+
* Define a thread-specific endpoint with access to the Durable Object instance.
|
|
1022
|
+
*
|
|
1023
|
+
* This is the builder's version of defineThreadEndpoint. It provides direct
|
|
1024
|
+
* access to the thread's Durable Object instance and metadata, allowing
|
|
1025
|
+
* for lower-level operations like calling RPC methods directly.
|
|
830
1026
|
*
|
|
831
1027
|
* @param handler - Function that receives the request and thread context
|
|
832
1028
|
* @returns A Controller that can be used with the router
|
|
833
1029
|
*
|
|
834
1030
|
* @example
|
|
835
|
-
*
|
|
836
|
-
*
|
|
837
|
-
*
|
|
838
|
-
*
|
|
1031
|
+
* ```typescript
|
|
1032
|
+
* import { defineThreadEndpoint } from '@standardagents/builder';
|
|
1033
|
+
*
|
|
1034
|
+
* export default defineThreadEndpoint(async (req, { instance, metadata }) => {
|
|
1035
|
+
* // Access thread metadata
|
|
1036
|
+
* console.log('Thread ID:', metadata.id);
|
|
1037
|
+
* console.log('Agent ID:', metadata.agent_id);
|
|
1038
|
+
*
|
|
1039
|
+
* // Call RPC methods on the Durable Object instance
|
|
1040
|
+
* const messagesResult = await instance.getMessages();
|
|
1041
|
+
* const logs = await instance.getLogs();
|
|
1042
|
+
*
|
|
1043
|
+
* return Response.json({
|
|
1044
|
+
* messageCount: messagesResult.messages.length,
|
|
1045
|
+
* logCount: logs.length,
|
|
1046
|
+
* });
|
|
839
1047
|
* });
|
|
1048
|
+
* ```
|
|
1049
|
+
*/
|
|
1050
|
+
declare function defineThreadEndpoint(handler: BuilderThreadEndpointHandler): BuilderController;
|
|
1051
|
+
|
|
1052
|
+
/**
|
|
1053
|
+
* Define a controller with typed Cloudflare environment bindings.
|
|
1054
|
+
*
|
|
1055
|
+
* This is the builder's version of defineController that provides
|
|
1056
|
+
* proper typing for AGENT_BUILDER_THREAD and other CF bindings.
|
|
1057
|
+
*
|
|
1058
|
+
* @example
|
|
1059
|
+
* ```typescript
|
|
1060
|
+
* import { defineController } from '../router/index.js';
|
|
1061
|
+
*
|
|
1062
|
+
* export default defineController(async ({ req, env }) => {
|
|
1063
|
+
* const stub = env.AGENT_BUILDER.get(env.AGENT_BUILDER.idFromName('singleton'));
|
|
1064
|
+
* // ...
|
|
1065
|
+
* });
|
|
1066
|
+
* ```
|
|
840
1067
|
*/
|
|
841
|
-
declare function
|
|
1068
|
+
declare function defineController<Env extends ThreadEnv = ThreadEnv>(controller: BuilderController<Env>): BuilderController<Env>;
|
|
842
1069
|
|
|
843
1070
|
/**
|
|
844
1071
|
* Authentication middleware for protecting API routes
|
|
@@ -934,6 +1161,17 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
934
1161
|
* @returns Record of agent name to agent loader function
|
|
935
1162
|
*/
|
|
936
1163
|
agents(): Record<string, () => Promise<any>>;
|
|
1164
|
+
/**
|
|
1165
|
+
* Returns the effects registry for lazy-loading effect definitions.
|
|
1166
|
+
* This method is implemented when you import DurableThread from 'virtual:@standardagents/builder'.
|
|
1167
|
+
*
|
|
1168
|
+
* Effects are scheduled operations that run outside the tool execution context,
|
|
1169
|
+
* ideal for delayed notifications, webhooks, and cleanup tasks.
|
|
1170
|
+
*
|
|
1171
|
+
* @throws Error if not implemented in a subclass
|
|
1172
|
+
* @returns Record of effect name to effect loader function
|
|
1173
|
+
*/
|
|
1174
|
+
effects(): Record<string, () => Promise<any>>;
|
|
937
1175
|
/**
|
|
938
1176
|
* Load a model definition by name.
|
|
939
1177
|
*/
|
|
@@ -958,6 +1196,59 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
958
1196
|
* List available agent names.
|
|
959
1197
|
*/
|
|
960
1198
|
getAgentNames(): string[];
|
|
1199
|
+
/**
|
|
1200
|
+
* Load an effect definition by name.
|
|
1201
|
+
*/
|
|
1202
|
+
loadEffect(name: string): Promise<any>;
|
|
1203
|
+
/**
|
|
1204
|
+
* List available effect names.
|
|
1205
|
+
*/
|
|
1206
|
+
getEffectNames(): string[];
|
|
1207
|
+
/**
|
|
1208
|
+
* Get thread metadata from DurableAgentBuilder.
|
|
1209
|
+
* Used for creating ThreadState outside of flow execution.
|
|
1210
|
+
*/
|
|
1211
|
+
getThreadMetadata(threadId: string): Promise<ThreadMetadata>;
|
|
1212
|
+
/**
|
|
1213
|
+
* Trigger an agent to run on this thread.
|
|
1214
|
+
*
|
|
1215
|
+
* Queues an agent execution via the alarm queue. The execution
|
|
1216
|
+
* runs asynchronously in the background.
|
|
1217
|
+
*
|
|
1218
|
+
* @param threadId - Thread ID for the execution
|
|
1219
|
+
* @param agentName - Name of the agent to run
|
|
1220
|
+
*/
|
|
1221
|
+
runAgent(threadId: string, agentName: string): Promise<void>;
|
|
1222
|
+
/**
|
|
1223
|
+
* Schedule an effect for future execution.
|
|
1224
|
+
*
|
|
1225
|
+
* @param threadId - Thread ID for the effect execution context
|
|
1226
|
+
* @param effectName - Name of the effect to schedule
|
|
1227
|
+
* @param effectArgs - Arguments to pass to the effect handler
|
|
1228
|
+
* @param delayMs - Delay in milliseconds before execution (default: 0)
|
|
1229
|
+
* @returns UUID of the scheduled effect
|
|
1230
|
+
*/
|
|
1231
|
+
scheduleEffect(threadId: string, effectName: string, effectArgs: Record<string, unknown>, delayMs?: number): Promise<string>;
|
|
1232
|
+
/**
|
|
1233
|
+
* Get scheduled effects for this thread.
|
|
1234
|
+
*
|
|
1235
|
+
* @param name - Optional effect name to filter by
|
|
1236
|
+
* @returns Array of scheduled effect records
|
|
1237
|
+
*/
|
|
1238
|
+
getScheduledEffects(name?: string): Promise<Array<{
|
|
1239
|
+
id: string;
|
|
1240
|
+
name: string;
|
|
1241
|
+
args: Record<string, unknown>;
|
|
1242
|
+
scheduledAt: number;
|
|
1243
|
+
createdAt: number;
|
|
1244
|
+
}>>;
|
|
1245
|
+
/**
|
|
1246
|
+
* Remove a scheduled effect.
|
|
1247
|
+
*
|
|
1248
|
+
* @param id - The effect ID returned by scheduleEffect
|
|
1249
|
+
* @returns true if the effect was found and removed, false otherwise
|
|
1250
|
+
*/
|
|
1251
|
+
removeScheduledEffect(id: string): Promise<boolean>;
|
|
961
1252
|
/**
|
|
962
1253
|
* Ensures the database schema is up to date.
|
|
963
1254
|
* This method is called on the first request to the Durable Object.
|
|
@@ -1003,6 +1294,15 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1003
1294
|
* Simple "off" switch - stops turns, only cleared by user messages
|
|
1004
1295
|
*/
|
|
1005
1296
|
stop(): Promise<Response>;
|
|
1297
|
+
/**
|
|
1298
|
+
* Continue execution from where it stopped (RPC method)
|
|
1299
|
+
* Useful for debugging - continues the FlowEngine with additional steps
|
|
1300
|
+
* without adding a new message.
|
|
1301
|
+
*
|
|
1302
|
+
* @param threadId The thread ID
|
|
1303
|
+
* @param side Which side to start from ('a' or 'b'), defaults to 'a'
|
|
1304
|
+
*/
|
|
1305
|
+
continueExecution(threadId: string, side?: 'a' | 'b'): Promise<Response>;
|
|
1006
1306
|
/**
|
|
1007
1307
|
* Get message history (RPC method)
|
|
1008
1308
|
*
|
|
@@ -1046,6 +1346,7 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1046
1346
|
}>;
|
|
1047
1347
|
/**
|
|
1048
1348
|
* Delete a message (RPC method)
|
|
1349
|
+
* Also cleans up any attachment files stored on the thread filesystem
|
|
1049
1350
|
*/
|
|
1050
1351
|
deleteMessage(messageId: string): Promise<{
|
|
1051
1352
|
success: boolean;
|
|
@@ -1114,10 +1415,12 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1114
1415
|
id: string;
|
|
1115
1416
|
message_id: string;
|
|
1116
1417
|
provider: string;
|
|
1418
|
+
actual_provider: string | null;
|
|
1117
1419
|
model: string;
|
|
1118
1420
|
model_name: string | null;
|
|
1119
1421
|
prompt_name: string | null;
|
|
1120
1422
|
tools_called: string | null;
|
|
1423
|
+
provider_tools: string | null;
|
|
1121
1424
|
parent_log_id: string | null;
|
|
1122
1425
|
retry_of_log_id: string | null;
|
|
1123
1426
|
error: string | null;
|
|
@@ -1137,6 +1440,7 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1137
1440
|
id: string;
|
|
1138
1441
|
message_id: string;
|
|
1139
1442
|
provider: string;
|
|
1443
|
+
actual_provider: string | null;
|
|
1140
1444
|
model: string;
|
|
1141
1445
|
model_name: string | null;
|
|
1142
1446
|
endpoint: string | null;
|
|
@@ -1163,6 +1467,7 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1163
1467
|
tools_available: number | null;
|
|
1164
1468
|
prompt_name: string | null;
|
|
1165
1469
|
tools_called: string | null;
|
|
1470
|
+
provider_tools: string | null;
|
|
1166
1471
|
parent_log_id: string | null;
|
|
1167
1472
|
tools_schema: string | null;
|
|
1168
1473
|
message_history: string | null;
|
|
@@ -1255,7 +1560,7 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1255
1560
|
private broadcastMessageChunk;
|
|
1256
1561
|
/**
|
|
1257
1562
|
* Broadcast a telemetry event to all connected message WebSocket clients
|
|
1258
|
-
* Used for execution status updates (
|
|
1563
|
+
* Used for execution status updates (step_started, tool_started, etc.)
|
|
1259
1564
|
*/
|
|
1260
1565
|
private broadcastTelemetry;
|
|
1261
1566
|
/**
|
|
@@ -1271,8 +1576,9 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1271
1576
|
/**
|
|
1272
1577
|
* WebSocket Hibernation API handler for connection close
|
|
1273
1578
|
* Called when a WebSocket connection is closed
|
|
1579
|
+
* Note: Do NOT call ws.close() here - the connection is already closed
|
|
1274
1580
|
*/
|
|
1275
|
-
webSocketClose(ws: WebSocket,
|
|
1581
|
+
webSocketClose(ws: WebSocket, _code: number, _reason: string, _wasClean: boolean): Promise<void>;
|
|
1276
1582
|
/**
|
|
1277
1583
|
* WebSocket Hibernation API handler for errors
|
|
1278
1584
|
* Called when a WebSocket encounters an error
|
|
@@ -1291,11 +1597,21 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1291
1597
|
* This is the actual execution logic, separate from the public execute() RPC method
|
|
1292
1598
|
*/
|
|
1293
1599
|
private executeFlow;
|
|
1600
|
+
/**
|
|
1601
|
+
* Internal method: Execute an effect (called by alarm queue)
|
|
1602
|
+
* Effects run outside the tool execution context.
|
|
1603
|
+
*/
|
|
1604
|
+
private executeEffect;
|
|
1294
1605
|
/**
|
|
1295
1606
|
* Internal method: Process a message (called by alarm queue)
|
|
1296
1607
|
* This is the actual message processing logic, separate from the public sendMessage() RPC method
|
|
1297
1608
|
*/
|
|
1298
1609
|
private processMessage;
|
|
1610
|
+
/**
|
|
1611
|
+
* Internal method: Continue execution without adding a message (called by alarm queue)
|
|
1612
|
+
* This allows resuming FlowEngine execution from where it stopped.
|
|
1613
|
+
*/
|
|
1614
|
+
private doContinueExecution;
|
|
1299
1615
|
/**
|
|
1300
1616
|
* TEST METHOD: Queue a test operation
|
|
1301
1617
|
* Used for testing alarm queue ordering and timing
|
|
@@ -1542,6 +1858,59 @@ declare class DurableThread<Env extends ThreadEnv = ThreadEnv> extends DurableOb
|
|
|
1542
1858
|
error: any;
|
|
1543
1859
|
files?: undefined;
|
|
1544
1860
|
}>;
|
|
1861
|
+
/**
|
|
1862
|
+
* Start a chunked file upload.
|
|
1863
|
+
* Creates file record with is_chunked=1 and chunk_count=null.
|
|
1864
|
+
* Caller should then use writeFileChunk() to write chunks.
|
|
1865
|
+
*/
|
|
1866
|
+
startChunkedUpload(path: string, totalSize: number, mimeType: string, options?: {
|
|
1867
|
+
metadata?: Record<string, unknown>;
|
|
1868
|
+
width?: number;
|
|
1869
|
+
height?: number;
|
|
1870
|
+
}): Promise<{
|
|
1871
|
+
success: boolean;
|
|
1872
|
+
chunkSize?: number;
|
|
1873
|
+
expectedChunks?: number;
|
|
1874
|
+
error?: string;
|
|
1875
|
+
}>;
|
|
1876
|
+
/**
|
|
1877
|
+
* Write a single chunk of a chunked file upload.
|
|
1878
|
+
* @param path - File path
|
|
1879
|
+
* @param chunkIndex - 0-based chunk index
|
|
1880
|
+
* @param data - Base64 encoded chunk data
|
|
1881
|
+
*/
|
|
1882
|
+
writeFileChunk(path: string, chunkIndex: number, data: string): Promise<{
|
|
1883
|
+
success: boolean;
|
|
1884
|
+
error?: string;
|
|
1885
|
+
}>;
|
|
1886
|
+
/**
|
|
1887
|
+
* Complete a chunked file upload.
|
|
1888
|
+
* Validates all chunks are present and sets chunk_count.
|
|
1889
|
+
*/
|
|
1890
|
+
completeChunkedUpload(path: string, expectedChunks: number, options?: {
|
|
1891
|
+
thumbnail?: string;
|
|
1892
|
+
}): Promise<{
|
|
1893
|
+
success: boolean;
|
|
1894
|
+
file?: FileRecord;
|
|
1895
|
+
error?: string;
|
|
1896
|
+
}>;
|
|
1897
|
+
/**
|
|
1898
|
+
* Read a single chunk of a file.
|
|
1899
|
+
* Use for streaming large files to client.
|
|
1900
|
+
*/
|
|
1901
|
+
readFileChunk(path: string, chunkIndex: number): Promise<{
|
|
1902
|
+
success: boolean;
|
|
1903
|
+
data?: string;
|
|
1904
|
+
error?: string;
|
|
1905
|
+
}>;
|
|
1906
|
+
/**
|
|
1907
|
+
* Get file info including chunking metadata.
|
|
1908
|
+
*/
|
|
1909
|
+
getFileInfo(path: string): Promise<{
|
|
1910
|
+
success: boolean;
|
|
1911
|
+
file?: FileRecord;
|
|
1912
|
+
error?: string;
|
|
1913
|
+
}>;
|
|
1545
1914
|
}
|
|
1546
1915
|
|
|
1547
1916
|
/**
|
|
@@ -1554,6 +1923,7 @@ interface AgentBuilderEnv {
|
|
|
1554
1923
|
GITHUB_TOKEN?: string;
|
|
1555
1924
|
GITHUB_REPO?: string;
|
|
1556
1925
|
GITHUB_BRANCH?: string;
|
|
1926
|
+
ENCRYPTION_KEY?: string;
|
|
1557
1927
|
}
|
|
1558
1928
|
/**
|
|
1559
1929
|
* Thread metadata stored in the registry.
|
|
@@ -1563,6 +1933,8 @@ interface ThreadRegistryEntry {
|
|
|
1563
1933
|
agent_name: string;
|
|
1564
1934
|
user_id: string | null;
|
|
1565
1935
|
tags: string[] | null;
|
|
1936
|
+
tenvs: Record<string, unknown> | null;
|
|
1937
|
+
properties: Record<string, unknown> | null;
|
|
1566
1938
|
created_at: number;
|
|
1567
1939
|
}
|
|
1568
1940
|
/**
|
|
@@ -1587,7 +1959,7 @@ interface User {
|
|
|
1587
1959
|
/**
|
|
1588
1960
|
* Provider credentials.
|
|
1589
1961
|
*/
|
|
1590
|
-
interface Provider {
|
|
1962
|
+
interface Provider$1 {
|
|
1591
1963
|
name: string;
|
|
1592
1964
|
sdk: string;
|
|
1593
1965
|
api_key: string;
|
|
@@ -1631,6 +2003,8 @@ declare class DurableAgentBuilder<Env extends AgentBuilderEnv = AgentBuilderEnv>
|
|
|
1631
2003
|
agent_name: string;
|
|
1632
2004
|
user_id?: string;
|
|
1633
2005
|
tags?: string[];
|
|
2006
|
+
tenvs?: Record<string, unknown>;
|
|
2007
|
+
properties?: Record<string, unknown>;
|
|
1634
2008
|
}): Promise<ThreadRegistryEntry>;
|
|
1635
2009
|
/**
|
|
1636
2010
|
* Get a thread by ID.
|
|
@@ -1638,10 +2012,15 @@ declare class DurableAgentBuilder<Env extends AgentBuilderEnv = AgentBuilderEnv>
|
|
|
1638
2012
|
getThread(id: string): Promise<ThreadRegistryEntry | null>;
|
|
1639
2013
|
/**
|
|
1640
2014
|
* List threads with optional filtering.
|
|
2015
|
+
* Note: tenvs are not decrypted in list operations for performance.
|
|
2016
|
+
* Use getThread() to retrieve a thread with decrypted tenvs.
|
|
1641
2017
|
*/
|
|
1642
2018
|
listThreads(params?: {
|
|
1643
2019
|
agent_name?: string;
|
|
1644
2020
|
user_id?: string;
|
|
2021
|
+
search?: string;
|
|
2022
|
+
startDate?: number;
|
|
2023
|
+
endDate?: number;
|
|
1645
2024
|
limit?: number;
|
|
1646
2025
|
offset?: number;
|
|
1647
2026
|
}): Promise<{
|
|
@@ -1687,15 +2066,15 @@ declare class DurableAgentBuilder<Env extends AgentBuilderEnv = AgentBuilderEnv>
|
|
|
1687
2066
|
/**
|
|
1688
2067
|
* Get a provider's credentials.
|
|
1689
2068
|
*/
|
|
1690
|
-
getProvider(name: string): Promise<Provider | null>;
|
|
2069
|
+
getProvider(name: string): Promise<Provider$1 | null>;
|
|
1691
2070
|
/**
|
|
1692
2071
|
* Set a provider's credentials.
|
|
1693
2072
|
*/
|
|
1694
|
-
setProvider(provider: Provider): Promise<void>;
|
|
2073
|
+
setProvider(provider: Provider$1): Promise<void>;
|
|
1695
2074
|
/**
|
|
1696
2075
|
* List all providers.
|
|
1697
2076
|
*/
|
|
1698
|
-
listProviders(): Promise<Provider[]>;
|
|
2077
|
+
listProviders(): Promise<Provider$1[]>;
|
|
1699
2078
|
/**
|
|
1700
2079
|
* Delete a provider.
|
|
1701
2080
|
*/
|
|
@@ -1847,206 +2226,69 @@ declare class DurableAgentBuilder<Env extends AgentBuilderEnv = AgentBuilderEnv>
|
|
|
1847
2226
|
* Handle WebSocket upgrade for events channel
|
|
1848
2227
|
* Uses Hibernation API to reduce costs during inactivity
|
|
1849
2228
|
*/
|
|
1850
|
-
private handleEventsWebSocketUpgrade;
|
|
1851
|
-
/**
|
|
1852
|
-
* Broadcast an event to all connected WebSocket clients
|
|
1853
|
-
*/
|
|
1854
|
-
private broadcastEvent;
|
|
1855
|
-
/**
|
|
1856
|
-
* WebSocket Hibernation API handler for incoming messages
|
|
1857
|
-
* Called when a message is received on a hibernated WebSocket
|
|
1858
|
-
*/
|
|
1859
|
-
webSocketMessage(ws: WebSocket, message: string | ArrayBuffer): Promise<void>;
|
|
1860
|
-
/**
|
|
1861
|
-
* WebSocket Hibernation API handler for connection close
|
|
1862
|
-
* Called when a WebSocket connection is closed
|
|
1863
|
-
*/
|
|
1864
|
-
webSocketClose(ws: WebSocket, code: number, reason: string, wasClean: boolean): Promise<void>;
|
|
1865
|
-
/**
|
|
1866
|
-
* WebSocket Hibernation API handler for errors
|
|
1867
|
-
* Called when a WebSocket encounters an error
|
|
1868
|
-
*/
|
|
1869
|
-
webSocketError(ws: WebSocket, error: unknown): Promise<void>;
|
|
1870
|
-
}
|
|
1871
|
-
|
|
1872
|
-
/**
|
|
1873
|
-
* Model definition module for AgentBuilder.
|
|
1874
|
-
*
|
|
1875
|
-
* Models define LLM configurations including provider, model ID, pricing,
|
|
1876
|
-
* and fallback chains. Models are referenced by name from prompts.
|
|
1877
|
-
*
|
|
1878
|
-
* @module
|
|
1879
|
-
*/
|
|
1880
|
-
/**
|
|
1881
|
-
* Supported LLM provider types.
|
|
1882
|
-
* Each provider requires a corresponding API key environment variable:
|
|
1883
|
-
* - `openai` → `OPENAI_API_KEY`
|
|
1884
|
-
* - `openrouter` → `OPENROUTER_API_KEY`
|
|
1885
|
-
* - `anthropic` → `ANTHROPIC_API_KEY`
|
|
1886
|
-
* - `google` → `GOOGLE_API_KEY`
|
|
1887
|
-
* - `test` → No API key required (for testing with scripted responses)
|
|
1888
|
-
*/
|
|
1889
|
-
type ModelProvider = 'openai' | 'openrouter' | 'anthropic' | 'google' | 'test';
|
|
1890
|
-
/**
|
|
1891
|
-
* Model definition configuration.
|
|
1892
|
-
*
|
|
1893
|
-
* @template N - The model name as a string literal type for type inference
|
|
1894
|
-
*
|
|
1895
|
-
* @example
|
|
1896
|
-
* ```typescript
|
|
1897
|
-
* import { defineModel } from '@standardagents/builder';
|
|
1898
|
-
*
|
|
1899
|
-
* export default defineModel({
|
|
1900
|
-
* name: 'gpt-4o',
|
|
1901
|
-
* provider: 'openai',
|
|
1902
|
-
* model: 'gpt-4o',
|
|
1903
|
-
* fallbacks: ['gpt-4-turbo', 'gpt-3.5-turbo'],
|
|
1904
|
-
* inputPrice: 2.5,
|
|
1905
|
-
* outputPrice: 10,
|
|
1906
|
-
* });
|
|
1907
|
-
* ```
|
|
1908
|
-
*/
|
|
1909
|
-
interface ModelDefinition<N extends string = string> {
|
|
1910
|
-
/**
|
|
1911
|
-
* Unique name for this model definition.
|
|
1912
|
-
* Used as the identifier when referencing from prompts.
|
|
1913
|
-
* Should be descriptive and consistent (e.g., 'gpt-4o', 'claude-3-opus').
|
|
1914
|
-
*/
|
|
1915
|
-
name: N;
|
|
1916
|
-
/**
|
|
1917
|
-
* The LLM provider to use for API calls.
|
|
1918
|
-
* The corresponding API key environment variable must be set.
|
|
1919
|
-
*/
|
|
1920
|
-
provider: ModelProvider;
|
|
1921
|
-
/**
|
|
1922
|
-
* The actual model identifier sent to the provider API.
|
|
1923
|
-
*
|
|
1924
|
-
* For OpenAI: 'gpt-4o', 'gpt-4-turbo', 'gpt-3.5-turbo', etc.
|
|
1925
|
-
* For OpenRouter: 'openai/gpt-4o', 'anthropic/claude-3-opus', etc.
|
|
1926
|
-
* For Anthropic: 'claude-3-opus-20240229', 'claude-3-sonnet-20240229', etc.
|
|
1927
|
-
* For Google: 'gemini-1.5-pro', 'gemini-1.5-flash', etc.
|
|
1928
|
-
*/
|
|
1929
|
-
model: string;
|
|
1930
|
-
/**
|
|
1931
|
-
* Optional list of additional provider prefixes for OpenRouter.
|
|
1932
|
-
* Allows routing through specific providers when using OpenRouter.
|
|
1933
|
-
*
|
|
1934
|
-
* @example ['anthropic', 'google'] - prefer Anthropic, fallback to Google
|
|
1935
|
-
*/
|
|
1936
|
-
includedProviders?: string[];
|
|
1937
|
-
/**
|
|
1938
|
-
* Fallback models to try if this model fails.
|
|
1939
|
-
* Referenced by model name (must be defined in agentbuilder/models/).
|
|
1940
|
-
* Tried in order after primary model exhausts retries.
|
|
1941
|
-
*
|
|
1942
|
-
* @example ['gpt-4', 'gpt-3.5-turbo']
|
|
1943
|
-
*/
|
|
1944
|
-
fallbacks?: AgentBuilder.Models[];
|
|
2229
|
+
private handleEventsWebSocketUpgrade;
|
|
1945
2230
|
/**
|
|
1946
|
-
*
|
|
1947
|
-
* Used for cost tracking and reporting in logs.
|
|
2231
|
+
* Broadcast an event to all connected WebSocket clients
|
|
1948
2232
|
*/
|
|
1949
|
-
|
|
2233
|
+
private broadcastEvent;
|
|
1950
2234
|
/**
|
|
1951
|
-
*
|
|
1952
|
-
*
|
|
2235
|
+
* WebSocket Hibernation API handler for incoming messages
|
|
2236
|
+
* Called when a message is received on a hibernated WebSocket
|
|
1953
2237
|
*/
|
|
1954
|
-
|
|
2238
|
+
webSocketMessage(ws: WebSocket, message: string | ArrayBuffer): Promise<void>;
|
|
1955
2239
|
/**
|
|
1956
|
-
*
|
|
1957
|
-
*
|
|
2240
|
+
* WebSocket Hibernation API handler for connection close
|
|
2241
|
+
* Called when a WebSocket connection is closed
|
|
1958
2242
|
*/
|
|
1959
|
-
|
|
2243
|
+
webSocketClose(ws: WebSocket, code: number, reason: string, wasClean: boolean): Promise<void>;
|
|
1960
2244
|
/**
|
|
1961
|
-
*
|
|
2245
|
+
* WebSocket Hibernation API handler for errors
|
|
2246
|
+
* Called when a WebSocket encounters an error
|
|
1962
2247
|
*/
|
|
1963
|
-
|
|
1964
|
-
/**
|
|
1965
|
-
* Whether the model supports vision (image understanding).
|
|
1966
|
-
* When true, image attachments will be sent to the model as part of the request.
|
|
1967
|
-
* Models like GPT-4o, Claude 3, and Gemini support vision.
|
|
1968
|
-
*/
|
|
1969
|
-
vision?: boolean;
|
|
1970
|
-
/**
|
|
1971
|
-
* Whether the model supports function calling (tool use).
|
|
1972
|
-
* Most modern models support this, defaults to true if not specified.
|
|
1973
|
-
*/
|
|
1974
|
-
functionCalling?: boolean;
|
|
1975
|
-
/**
|
|
1976
|
-
* Whether the model supports structured outputs (JSON mode).
|
|
1977
|
-
*/
|
|
1978
|
-
structuredOutputs?: boolean;
|
|
1979
|
-
};
|
|
2248
|
+
webSocketError(ws: WebSocket, error: unknown): Promise<void>;
|
|
1980
2249
|
}
|
|
2250
|
+
|
|
1981
2251
|
/**
|
|
1982
|
-
*
|
|
2252
|
+
* Model definition module for AgentBuilder.
|
|
1983
2253
|
*
|
|
1984
|
-
*
|
|
1985
|
-
*
|
|
1986
|
-
*
|
|
2254
|
+
* This module re-exports model types from @standardagents/spec and provides
|
|
2255
|
+
* a builder-specific version of ModelDefinition that supports the generated
|
|
2256
|
+
* AgentBuilder.Models type for fallback references.
|
|
1987
2257
|
*
|
|
1988
|
-
* @
|
|
1989
|
-
|
|
1990
|
-
|
|
2258
|
+
* @module
|
|
2259
|
+
*/
|
|
2260
|
+
|
|
2261
|
+
/**
|
|
2262
|
+
* Model definition configuration with AgentBuilder-specific fallback typing.
|
|
1991
2263
|
*
|
|
1992
|
-
* @
|
|
1993
|
-
*
|
|
1994
|
-
* // agentbuilder/models/gpt_4o.ts
|
|
1995
|
-
* import { defineModel } from '@standardagents/builder';
|
|
1996
|
-
*
|
|
1997
|
-
* export default defineModel({
|
|
1998
|
-
* name: 'gpt-4o',
|
|
1999
|
-
* provider: 'openai',
|
|
2000
|
-
* model: 'gpt-4o',
|
|
2001
|
-
* fallbacks: ['gpt-4-turbo'],
|
|
2002
|
-
* inputPrice: 2.5,
|
|
2003
|
-
* outputPrice: 10,
|
|
2004
|
-
* });
|
|
2005
|
-
* ```
|
|
2264
|
+
* Extends the base ModelDefinition from @standardagents/spec to support
|
|
2265
|
+
* the generated AgentBuilder.Models type for type-safe fallback references.
|
|
2006
2266
|
*
|
|
2007
|
-
* @
|
|
2008
|
-
* ```typescript
|
|
2009
|
-
* // Using OpenRouter with provider preferences
|
|
2010
|
-
* export default defineModel({
|
|
2011
|
-
* name: 'claude-3-opus',
|
|
2012
|
-
* provider: 'openrouter',
|
|
2013
|
-
* model: 'anthropic/claude-3-opus',
|
|
2014
|
-
* includedProviders: ['anthropic'],
|
|
2015
|
-
* });
|
|
2016
|
-
* ```
|
|
2267
|
+
* @template N - The model name as a string literal type for type inference
|
|
2017
2268
|
*/
|
|
2018
|
-
|
|
2269
|
+
interface ModelDefinition<N extends string = string> extends Omit<ModelDefinition$1<N>, 'fallbacks'> {
|
|
2270
|
+
/**
|
|
2271
|
+
* Fallback models to try if this model fails.
|
|
2272
|
+
* Referenced by model name (must be defined in agents/models/).
|
|
2273
|
+
* Tried in order after primary model exhausts retries.
|
|
2274
|
+
*
|
|
2275
|
+
* @example ['gpt-4', 'gpt-3.5-turbo']
|
|
2276
|
+
*/
|
|
2277
|
+
fallbacks?: AgentBuilder.Models[];
|
|
2278
|
+
}
|
|
2019
2279
|
|
|
2020
2280
|
/**
|
|
2021
2281
|
* Prompt definition module for AgentBuilder.
|
|
2022
2282
|
*
|
|
2023
|
-
*
|
|
2024
|
-
*
|
|
2283
|
+
* This module re-exports prompt types from @standardagents/spec and provides
|
|
2284
|
+
* builder-specific versions that use the generated AgentBuilder namespace types.
|
|
2025
2285
|
*
|
|
2026
2286
|
* @module
|
|
2027
2287
|
*/
|
|
2028
2288
|
|
|
2029
2289
|
/**
|
|
2030
|
-
* A
|
|
2031
|
-
*
|
|
2032
|
-
* @example
|
|
2033
|
-
* ```typescript
|
|
2034
|
-
* { type: 'text', content: 'You are a helpful assistant.\n\n' }
|
|
2035
|
-
* ```
|
|
2036
|
-
*/
|
|
2037
|
-
interface PromptTextPart {
|
|
2038
|
-
type: 'text';
|
|
2039
|
-
/** The text content */
|
|
2040
|
-
content: string;
|
|
2041
|
-
}
|
|
2042
|
-
/**
|
|
2043
|
-
* A prompt inclusion part - includes another prompt's content.
|
|
2044
|
-
* Uses AgentBuilder.Prompts for type-safe autocomplete of prompt names.
|
|
2045
|
-
*
|
|
2046
|
-
* @example
|
|
2047
|
-
* ```typescript
|
|
2048
|
-
* { type: 'include', prompt: 'responder_rules' }
|
|
2049
|
-
* ```
|
|
2290
|
+
* A prompt inclusion part with type-safe autocomplete.
|
|
2291
|
+
* Uses AgentBuilder.Prompts for type-safe prompt name references.
|
|
2050
2292
|
*/
|
|
2051
2293
|
interface PromptIncludePart {
|
|
2052
2294
|
type: 'include';
|
|
@@ -2055,448 +2297,107 @@ interface PromptIncludePart {
|
|
|
2055
2297
|
}
|
|
2056
2298
|
/**
|
|
2057
2299
|
* A single part of a structured prompt.
|
|
2058
|
-
* Discriminated union on `type` field for TypeScript narrowing.
|
|
2059
2300
|
*/
|
|
2060
2301
|
type PromptPart = PromptTextPart | PromptIncludePart;
|
|
2061
2302
|
/**
|
|
2062
|
-
*
|
|
2063
|
-
* Provides type-safe composition with other prompts via autocomplete.
|
|
2064
|
-
*
|
|
2065
|
-
* @example
|
|
2066
|
-
* ```typescript
|
|
2067
|
-
* prompt: [
|
|
2068
|
-
* { type: 'text', content: 'You are a helpful assistant.\n\n' },
|
|
2069
|
-
* { type: 'include', prompt: 'common_rules' },
|
|
2070
|
-
* { type: 'text', content: '\n\nBe concise.' },
|
|
2071
|
-
* ]
|
|
2072
|
-
* ```
|
|
2073
|
-
*/
|
|
2074
|
-
type StructuredPrompt = PromptPart[];
|
|
2075
|
-
/**
|
|
2076
|
-
* The prompt content can be either a plain string or a structured array.
|
|
2077
|
-
*
|
|
2078
|
-
* @example
|
|
2079
|
-
* ```typescript
|
|
2080
|
-
* // Simple string prompt:
|
|
2081
|
-
* prompt: 'You are a helpful assistant.'
|
|
2082
|
-
*
|
|
2083
|
-
* // Structured prompt with includes:
|
|
2084
|
-
* prompt: [
|
|
2085
|
-
* { type: 'text', content: 'You are a helpful assistant.\n\n' },
|
|
2086
|
-
* { type: 'include', prompt: 'common_rules' },
|
|
2087
|
-
* ]
|
|
2088
|
-
* ```
|
|
2303
|
+
* Prompt content can be a string or structured array with type-safe includes.
|
|
2089
2304
|
*/
|
|
2090
|
-
type PromptContent = string |
|
|
2305
|
+
type PromptContent = string | PromptPart[];
|
|
2091
2306
|
/**
|
|
2092
|
-
*
|
|
2093
|
-
*
|
|
2094
|
-
* @template T - The tool name type (for type-safe tool references)
|
|
2307
|
+
* Sub-prompt configuration with type-safe name references.
|
|
2095
2308
|
*/
|
|
2096
|
-
interface
|
|
2097
|
-
/**
|
|
2098
|
-
* Name of the tool to include.
|
|
2099
|
-
* Must be a tool, prompt, or agent defined in agentbuilder/.
|
|
2100
|
-
*/
|
|
2309
|
+
interface SubpromptConfig<T extends string = AgentBuilder.Callables> extends Omit<SubpromptConfig$2<T>, 'name'> {
|
|
2310
|
+
/** Name of the sub-prompt (type-safe with autocomplete) */
|
|
2101
2311
|
name: T;
|
|
2102
|
-
/**
|
|
2103
|
-
* Include text response content from sub-prompt execution in the tool result.
|
|
2104
|
-
* @default true
|
|
2105
|
-
*/
|
|
2106
|
-
includeTextResponse?: boolean;
|
|
2107
|
-
/**
|
|
2108
|
-
* Include tool call details from sub-prompt execution in the tool result.
|
|
2109
|
-
* @default true
|
|
2110
|
-
*/
|
|
2111
|
-
includeToolCalls?: boolean;
|
|
2112
|
-
/**
|
|
2113
|
-
* Include error details from sub-prompt execution in the tool result.
|
|
2114
|
-
* @default true
|
|
2115
|
-
*/
|
|
2116
|
-
includeErrors?: boolean;
|
|
2117
|
-
/**
|
|
2118
|
-
* Property from the tool call arguments to use as the initial user message
|
|
2119
|
-
* when this tool triggers a sub-prompt execution.
|
|
2120
|
-
*
|
|
2121
|
-
* @example
|
|
2122
|
-
* If the tool is called with `{ query: "search term", limit: 10 }` and
|
|
2123
|
-
* `initUserMessageProperty: 'query'`, the sub-prompt will receive
|
|
2124
|
-
* "search term" as the initial user message.
|
|
2125
|
-
*/
|
|
2126
|
-
initUserMessageProperty?: string;
|
|
2127
2312
|
}
|
|
2128
2313
|
/**
|
|
2129
|
-
*
|
|
2130
|
-
* Applies to models like OpenAI o1, Anthropic Claude with extended thinking,
|
|
2131
|
-
* Google Gemini with thinking, and Qwen with reasoning.
|
|
2314
|
+
* @deprecated Use SubpromptConfig instead
|
|
2132
2315
|
*/
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
* Effort level for reasoning models.
|
|
2136
|
-
* Higher effort = more thinking tokens = potentially better results.
|
|
2137
|
-
*
|
|
2138
|
-
* - `low`: Minimal reasoning, faster responses
|
|
2139
|
-
* - `medium`: Balanced reasoning and speed
|
|
2140
|
-
* - `high`: Maximum reasoning, slower but more thorough
|
|
2141
|
-
*
|
|
2142
|
-
* @default undefined (use model defaults)
|
|
2143
|
-
*/
|
|
2144
|
-
effort?: 'low' | 'medium' | 'high';
|
|
2145
|
-
/**
|
|
2146
|
-
* Maximum tokens to allocate for reasoning.
|
|
2147
|
-
* Applies to models that support token limits on reasoning
|
|
2148
|
-
* (Anthropic, Gemini, Qwen).
|
|
2149
|
-
*/
|
|
2150
|
-
maxTokens?: number;
|
|
2151
|
-
/**
|
|
2152
|
-
* Use reasoning internally but exclude from the response.
|
|
2153
|
-
* Model thinks through the problem but only returns the final answer.
|
|
2154
|
-
* Useful for cleaner outputs while maintaining reasoning quality.
|
|
2155
|
-
*/
|
|
2156
|
-
exclude?: boolean;
|
|
2157
|
-
/**
|
|
2158
|
-
* Include reasoning content in the message history for multi-turn context.
|
|
2159
|
-
* When true, reasoning is preserved and visible to subsequent turns.
|
|
2160
|
-
* @default false
|
|
2161
|
-
*/
|
|
2162
|
-
include?: boolean;
|
|
2163
|
-
}
|
|
2316
|
+
type ToolConfig<T extends string = AgentBuilder.Callables> = SubpromptConfig<T>;
|
|
2317
|
+
|
|
2164
2318
|
/**
|
|
2165
|
-
* Prompt definition configuration.
|
|
2319
|
+
* Prompt definition configuration with AgentBuilder-specific typing.
|
|
2320
|
+
*
|
|
2321
|
+
* Provides type-safe references to models, tools, and agents via the
|
|
2322
|
+
* generated AgentBuilder namespace.
|
|
2166
2323
|
*
|
|
2167
2324
|
* @template N - The prompt name as a string literal type
|
|
2168
2325
|
* @template S - The Zod schema type for requiredSchema (inferred automatically)
|
|
2169
|
-
*
|
|
2170
|
-
* @example
|
|
2171
|
-
* ```typescript
|
|
2172
|
-
* import { definePrompt } from '@standardagents/builder';
|
|
2173
|
-
* import { z } from 'zod';
|
|
2174
|
-
*
|
|
2175
|
-
* export default definePrompt({
|
|
2176
|
-
* name: 'customer_support',
|
|
2177
|
-
* toolDescription: 'Handle customer support inquiries',
|
|
2178
|
-
* model: 'gpt-4o',
|
|
2179
|
-
* // Simple string prompt:
|
|
2180
|
-
* prompt: `You are a helpful customer support agent.
|
|
2181
|
-
* Always be polite and try to resolve issues quickly.`,
|
|
2182
|
-
* // Or structured prompt with type-safe includes:
|
|
2183
|
-
* // prompt: [
|
|
2184
|
-
* // { type: 'text', content: 'You are a helpful customer support agent.\n\n' },
|
|
2185
|
-
* // { type: 'include', prompt: 'common_rules' },
|
|
2186
|
-
* // ],
|
|
2187
|
-
* tools: ['search_knowledge_base', 'create_ticket'],
|
|
2188
|
-
* requiredSchema: z.object({
|
|
2189
|
-
* query: z.string().describe('The customer inquiry'),
|
|
2190
|
-
* }),
|
|
2191
|
-
* });
|
|
2192
|
-
* ```
|
|
2193
2326
|
*/
|
|
2194
|
-
interface PromptDefinition<N extends string = string, S extends
|
|
2195
|
-
/**
|
|
2196
|
-
* Unique name for this prompt.
|
|
2197
|
-
* Used as the identifier when referencing from agents or as a tool.
|
|
2198
|
-
* Should be snake_case (e.g., 'customer_support', 'data_analyst').
|
|
2199
|
-
*/
|
|
2327
|
+
interface PromptDefinition<N extends string = string, S extends ToolArgs = ToolArgs> {
|
|
2328
|
+
/** Unique name for this prompt. */
|
|
2200
2329
|
name: N;
|
|
2201
|
-
/**
|
|
2202
|
-
* Description shown when this prompt is exposed as a tool.
|
|
2203
|
-
* Should clearly describe what this prompt does for LLM tool selection.
|
|
2204
|
-
*/
|
|
2330
|
+
/** Description shown when this prompt is exposed as a tool. */
|
|
2205
2331
|
toolDescription: string;
|
|
2206
|
-
/**
|
|
2207
|
-
* The system prompt content sent to the LLM.
|
|
2208
|
-
*
|
|
2209
|
-
* Can be either:
|
|
2210
|
-
* 1. A plain string - simple prompt text
|
|
2211
|
-
* 2. A structured array - for composing prompts with type-safe includes
|
|
2212
|
-
*
|
|
2213
|
-
* @example
|
|
2214
|
-
* ```typescript
|
|
2215
|
-
* // Simple string prompt:
|
|
2216
|
-
* prompt: 'You are a helpful assistant.'
|
|
2217
|
-
*
|
|
2218
|
-
* // Structured prompt with type-safe includes:
|
|
2219
|
-
* prompt: [
|
|
2220
|
-
* { type: 'text', content: 'You are a helpful assistant.\n\n' },
|
|
2221
|
-
* { type: 'include', prompt: 'common_rules' }, // autocomplete for prompt names!
|
|
2222
|
-
* { type: 'text', content: '\n\nBe concise.' },
|
|
2223
|
-
* ]
|
|
2224
|
-
* ```
|
|
2225
|
-
*/
|
|
2332
|
+
/** The system prompt content with type-safe includes. */
|
|
2226
2333
|
prompt: PromptContent;
|
|
2227
|
-
/**
|
|
2228
|
-
* Model to use for this prompt.
|
|
2229
|
-
* Must reference a model defined in agentbuilder/models/.
|
|
2230
|
-
* Provides autocomplete when types are generated.
|
|
2231
|
-
*/
|
|
2334
|
+
/** Model to use (type-safe with autocomplete). */
|
|
2232
2335
|
model: AgentBuilder.Models;
|
|
2233
2336
|
/**
|
|
2234
2337
|
* @deprecated All prompts are now automatically exposed as tools.
|
|
2235
|
-
* This property is ignored and will be removed in a future version.
|
|
2236
2338
|
*/
|
|
2237
2339
|
exposeAsTool?: boolean;
|
|
2238
|
-
/**
|
|
2239
|
-
* Include full chat history in the LLM context.
|
|
2240
|
-
* When true, all previous messages in the conversation are included.
|
|
2241
|
-
* @default false
|
|
2242
|
-
*/
|
|
2340
|
+
/** Include full chat history in the LLM context. @default false */
|
|
2243
2341
|
includeChat?: boolean;
|
|
2244
|
-
/**
|
|
2245
|
-
* Include results from past tool calls in the LLM context.
|
|
2246
|
-
* When true, previous tool call results are visible to the LLM.
|
|
2247
|
-
* @default false
|
|
2248
|
-
*/
|
|
2342
|
+
/** Include results from past tool calls. @default false */
|
|
2249
2343
|
includePastTools?: boolean;
|
|
2250
|
-
/**
|
|
2251
|
-
* Allow parallel execution of multiple tool calls.
|
|
2252
|
-
* When true, if the LLM requests multiple tools, they execute concurrently.
|
|
2253
|
-
* @default false
|
|
2254
|
-
*/
|
|
2344
|
+
/** Allow parallel execution of multiple tool calls. @default false */
|
|
2255
2345
|
parallelToolCalls?: boolean;
|
|
2256
|
-
/**
|
|
2257
|
-
* Tool calling strategy for the LLM.
|
|
2258
|
-
*
|
|
2259
|
-
* - `auto`: Model decides when to call tools (default)
|
|
2260
|
-
* - `none`: Disable tool calling entirely
|
|
2261
|
-
* - `required`: Force the model to call at least one tool
|
|
2262
|
-
*
|
|
2263
|
-
* @default 'auto'
|
|
2264
|
-
*/
|
|
2346
|
+
/** Tool calling strategy. @default 'auto' */
|
|
2265
2347
|
toolChoice?: 'auto' | 'none' | 'required';
|
|
2266
|
-
/**
|
|
2267
|
-
* Zod schema for validating inputs when this prompt is called as a tool.
|
|
2268
|
-
*
|
|
2269
|
-
* The schema provides:
|
|
2270
|
-
* - Runtime validation of tool call arguments
|
|
2271
|
-
* - Type inference for the prompt's input type
|
|
2272
|
-
* - Auto-generated JSON Schema for LLM tool definitions
|
|
2273
|
-
*
|
|
2274
|
-
* Use `.describe()` on schema fields to provide descriptions for the LLM.
|
|
2275
|
-
*
|
|
2276
|
-
* @example
|
|
2277
|
-
* ```typescript
|
|
2278
|
-
* requiredSchema: z.object({
|
|
2279
|
-
* query: z.string().describe('The search query'),
|
|
2280
|
-
* limit: z.number().optional().default(10).describe('Max results'),
|
|
2281
|
-
* })
|
|
2282
|
-
* ```
|
|
2283
|
-
*/
|
|
2348
|
+
/** Zod schema for validating inputs when called as a tool. */
|
|
2284
2349
|
requiredSchema?: S;
|
|
2285
|
-
/**
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
*
|
|
2289
|
-
* Tools can be:
|
|
2290
|
-
* - Custom tools defined in agentbuilder/tools/
|
|
2291
|
-
* - Other prompts with exposeAsTool: true
|
|
2292
|
-
* - Agents with exposeAsTool: true
|
|
2293
|
-
*
|
|
2294
|
-
* @example
|
|
2295
|
-
* ```typescript
|
|
2296
|
-
* tools: [
|
|
2297
|
-
* 'search_docs', // Simple reference
|
|
2298
|
-
* { name: 'create_ticket', includeErrors: false }, // With config
|
|
2299
|
-
* ]
|
|
2300
|
-
* ```
|
|
2301
|
-
*/
|
|
2302
|
-
tools?: (AgentBuilder.Callables | ToolConfig)[];
|
|
2303
|
-
/**
|
|
2304
|
-
* Agents that can receive handoffs from this prompt.
|
|
2305
|
-
* Enables multi-agent workflows where this prompt can transfer
|
|
2306
|
-
* the conversation to a specialized agent.
|
|
2307
|
-
*/
|
|
2308
|
-
handoffAgents?: AgentBuilder.Agents[];
|
|
2309
|
-
/**
|
|
2310
|
-
* Tool to execute before the LLM request.
|
|
2311
|
-
* Useful for data fetching, context preparation, or preprocessing.
|
|
2312
|
-
* The tool result is available in the prompt context.
|
|
2313
|
-
*/
|
|
2314
|
-
beforeTool?: AgentBuilder.Callables;
|
|
2315
|
-
/**
|
|
2316
|
-
* Tool to execute after the LLM response.
|
|
2317
|
-
* Useful for post-processing, logging, or side effects.
|
|
2318
|
-
*/
|
|
2319
|
-
afterTool?: AgentBuilder.Callables;
|
|
2320
|
-
/**
|
|
2321
|
-
* Reasoning configuration for models that support extended thinking.
|
|
2322
|
-
* Configure effort level, token limits, and visibility of reasoning.
|
|
2323
|
-
*/
|
|
2350
|
+
/** Tools available to this prompt (type-safe with autocomplete). To enable handoffs, include ai_human agent names. */
|
|
2351
|
+
tools?: (AgentBuilder.Callables | SubpromptConfig)[];
|
|
2352
|
+
/** Reasoning configuration for extended thinking models. */
|
|
2324
2353
|
reasoning?: ReasoningConfig;
|
|
2325
|
-
/**
|
|
2326
|
-
* Maximum pixels for image attachments before client-side resize.
|
|
2327
|
-
* Images exceeding this limit are scaled down while preserving aspect ratio.
|
|
2328
|
-
* Images smaller than this limit are not resized up.
|
|
2329
|
-
*
|
|
2330
|
-
* Common values:
|
|
2331
|
-
* - 262144 (256K): 512x512 equivalent - thumbnails, low cost
|
|
2332
|
-
* - 1048576 (1M): 1024x1024 equivalent - good quality (default)
|
|
2333
|
-
* - 2073600 (2M): 1440x1440 equivalent - high quality
|
|
2334
|
-
* - 4194304 (4M): 2048x2048 equivalent - maximum detail
|
|
2335
|
-
*
|
|
2336
|
-
* @default 1048576 (1M pixels, ~1024x1024)
|
|
2337
|
-
*
|
|
2338
|
-
* @example
|
|
2339
|
-
* ```typescript
|
|
2340
|
-
* // High quality images for detailed analysis
|
|
2341
|
-
* maxImagePixels: 2073600
|
|
2342
|
-
*
|
|
2343
|
-
* // Lower quality for cost-sensitive applications
|
|
2344
|
-
* maxImagePixels: 262144
|
|
2345
|
-
* ```
|
|
2346
|
-
*/
|
|
2347
|
-
maxImagePixels?: number;
|
|
2348
|
-
/**
|
|
2349
|
-
* Number of recent messages to keep actual images for in context.
|
|
2350
|
-
* Messages older than this threshold will have their images replaced
|
|
2351
|
-
* with text descriptions to save context window space.
|
|
2352
|
-
*
|
|
2353
|
-
* This helps manage context window usage in long conversations with
|
|
2354
|
-
* many image attachments by summarizing older images.
|
|
2355
|
-
*
|
|
2356
|
-
* @default 10
|
|
2357
|
-
*
|
|
2358
|
-
* @example
|
|
2359
|
-
* ```typescript
|
|
2360
|
-
* // Keep more images in context for image-heavy workflows
|
|
2361
|
-
* recentImageThreshold: 20
|
|
2362
|
-
*
|
|
2363
|
-
* // Aggressively summarize to save context
|
|
2364
|
-
* recentImageThreshold: 5
|
|
2365
|
-
* ```
|
|
2366
|
-
*/
|
|
2354
|
+
/** Number of recent messages to keep actual images for. @default 10 */
|
|
2367
2355
|
recentImageThreshold?: number;
|
|
2368
2356
|
}
|
|
2369
|
-
/**
|
|
2370
|
-
* Helper type to extract the inferred input type from a prompt's Zod schema.
|
|
2371
|
-
*
|
|
2372
|
-
* @template T - The prompt definition type
|
|
2373
|
-
*
|
|
2374
|
-
* @example
|
|
2375
|
-
* ```typescript
|
|
2376
|
-
* const searchPrompt = definePrompt({
|
|
2377
|
-
* name: 'search',
|
|
2378
|
-
* requiredSchema: z.object({ query: z.string(), limit: z.number() }),
|
|
2379
|
-
* // ...
|
|
2380
|
-
* });
|
|
2381
|
-
*
|
|
2382
|
-
* type SearchInput = PromptInput<typeof searchPrompt>;
|
|
2383
|
-
* // { query: string; limit: number }
|
|
2384
|
-
* ```
|
|
2385
|
-
*/
|
|
2386
|
-
type PromptInput<T extends PromptDefinition<any, any>> = T['requiredSchema'] extends z.ZodTypeAny ? z.infer<T['requiredSchema']> : never;
|
|
2387
|
-
/**
|
|
2388
|
-
* Defines a prompt configuration for LLM interactions.
|
|
2389
|
-
*
|
|
2390
|
-
* Prompts are the primary way to configure how agents interact with LLMs.
|
|
2391
|
-
* They specify the system prompt, available tools, input validation,
|
|
2392
|
-
* and various behavioral options.
|
|
2393
|
-
*
|
|
2394
|
-
* @template N - The prompt name as a string literal type
|
|
2395
|
-
* @template S - The Zod schema type for requiredSchema
|
|
2396
|
-
* @param options - Prompt configuration options
|
|
2397
|
-
* @returns The prompt definition for registration
|
|
2398
|
-
*
|
|
2399
|
-
* @example
|
|
2400
|
-
* ```typescript
|
|
2401
|
-
* // agentbuilder/prompts/customer_support.ts
|
|
2402
|
-
* import { definePrompt } from '@standardagents/builder';
|
|
2403
|
-
* import { z } from 'zod';
|
|
2404
|
-
*
|
|
2405
|
-
* export default definePrompt({
|
|
2406
|
-
* name: 'customer_support',
|
|
2407
|
-
* toolDescription: 'Handle customer support inquiries',
|
|
2408
|
-
* model: 'gpt-4o',
|
|
2409
|
-
* prompt: `You are a helpful customer support agent.
|
|
2410
|
-
* Always be polite and try to resolve issues quickly.
|
|
2411
|
-
* If you cannot help, offer to escalate to a human.`,
|
|
2412
|
-
* tools: ['search_knowledge_base', 'create_ticket'],
|
|
2413
|
-
* handoffAgents: ['escalation_agent'],
|
|
2414
|
-
* includeChat: true,
|
|
2415
|
-
* exposeAsTool: true,
|
|
2416
|
-
* requiredSchema: z.object({
|
|
2417
|
-
* query: z.string().describe('The customer inquiry'),
|
|
2418
|
-
* }),
|
|
2419
|
-
* });
|
|
2420
|
-
* ```
|
|
2421
|
-
*/
|
|
2422
|
-
declare function definePrompt<N extends string, S extends z.ZodTypeAny = never>(options: PromptDefinition<N, S>): PromptDefinition<N, S>;
|
|
2423
2357
|
|
|
2424
2358
|
/**
|
|
2425
2359
|
* Agent definition module for AgentBuilder.
|
|
2426
2360
|
*
|
|
2427
|
-
*
|
|
2428
|
-
*
|
|
2429
|
-
* and behavioral rules for each side of the conversation.
|
|
2361
|
+
* This module re-exports agent types from @standardagents/spec and provides
|
|
2362
|
+
* builder-specific versions that use the generated AgentBuilder namespace types.
|
|
2430
2363
|
*
|
|
2431
2364
|
* @module
|
|
2432
2365
|
*/
|
|
2366
|
+
|
|
2433
2367
|
/**
|
|
2434
|
-
*
|
|
2435
|
-
*
|
|
2436
|
-
* - `ai_human`: AI conversing with a human user (most common)
|
|
2437
|
-
* - `dual_ai`: Two AI participants conversing with each other
|
|
2438
|
-
*/
|
|
2439
|
-
type AgentType = 'ai_human' | 'dual_ai';
|
|
2440
|
-
/**
|
|
2441
|
-
* Configuration for one side of an agent conversation.
|
|
2442
|
-
*
|
|
2443
|
-
* Each side has a prompt, stop conditions, and turn limits.
|
|
2444
|
-
* For `ai_human` agents, only sideA (the AI) needs configuration.
|
|
2445
|
-
* For `dual_ai` agents, both sides need configuration.
|
|
2368
|
+
* Side configuration with type-safe autocomplete.
|
|
2369
|
+
* Uses AgentBuilder.Prompts and AgentBuilder.Callables for type-safe references.
|
|
2446
2370
|
*/
|
|
2447
|
-
interface SideConfig {
|
|
2448
|
-
/**
|
|
2449
|
-
* Custom label for this side of the conversation.
|
|
2450
|
-
* Used in UI and logs for clarity.
|
|
2451
|
-
*
|
|
2452
|
-
* @example 'Support Agent', 'Customer', 'ATC', 'Pilot'
|
|
2453
|
-
*/
|
|
2454
|
-
label?: string;
|
|
2371
|
+
interface SideConfig extends Omit<SideConfig$1, 'prompt' | 'stopTool' | 'endSessionTool'> {
|
|
2455
2372
|
/**
|
|
2456
|
-
* The prompt to use for this side.
|
|
2457
|
-
* Must reference a prompt defined in
|
|
2373
|
+
* The prompt to use for this side (type-safe with autocomplete).
|
|
2374
|
+
* Must reference a prompt defined in agents/prompts/.
|
|
2458
2375
|
*/
|
|
2459
2376
|
prompt: AgentBuilder.Prompts;
|
|
2460
2377
|
/**
|
|
2461
|
-
* Stop this side's turn when
|
|
2462
|
-
* When true, the side's turn ends after producing a message without tools.
|
|
2463
|
-
* @default true
|
|
2464
|
-
*/
|
|
2465
|
-
stopOnResponse?: boolean;
|
|
2466
|
-
/**
|
|
2467
|
-
* Stop this side's turn when a specific tool is called.
|
|
2378
|
+
* Stop this side's turn when a specific tool is called (type-safe with autocomplete).
|
|
2468
2379
|
* Overrides stopOnResponse when the named tool is invoked.
|
|
2469
2380
|
* Requires stopToolResponseProperty to extract the result.
|
|
2470
2381
|
*/
|
|
2471
2382
|
stopTool?: AgentBuilder.Callables;
|
|
2472
2383
|
/**
|
|
2473
|
-
*
|
|
2474
|
-
*
|
|
2475
|
-
* The extracted value is used to determine the conversation outcome.
|
|
2476
|
-
*/
|
|
2477
|
-
stopToolResponseProperty?: string;
|
|
2478
|
-
/**
|
|
2479
|
-
* Maximum turns for this side before forcing a stop.
|
|
2480
|
-
* Safety limit to prevent runaway conversations.
|
|
2481
|
-
* A turn is one complete request/response cycle.
|
|
2482
|
-
*/
|
|
2483
|
-
maxTurns?: number;
|
|
2484
|
-
/**
|
|
2485
|
-
* Tool that ends the entire conversation when called.
|
|
2486
|
-
* Different from stopTool - this ends the conversation for both sides,
|
|
2384
|
+
* Tool that ends the entire session when called (type-safe with autocomplete).
|
|
2385
|
+
* Different from stopTool - this ends the session for both sides,
|
|
2487
2386
|
* not just this side's turn.
|
|
2488
2387
|
*/
|
|
2489
|
-
|
|
2388
|
+
endSessionTool?: AgentBuilder.Callables;
|
|
2490
2389
|
/**
|
|
2491
2390
|
* Enable manual stop condition handling via hooks.
|
|
2492
|
-
*
|
|
2493
|
-
* instead of the built-in rules.
|
|
2391
|
+
* Builder-specific feature for custom stop logic.
|
|
2494
2392
|
* @default false
|
|
2495
2393
|
*/
|
|
2496
2394
|
manualStopCondition?: boolean;
|
|
2497
2395
|
}
|
|
2498
2396
|
/**
|
|
2499
|
-
* Agent definition configuration.
|
|
2397
|
+
* Agent definition configuration with AgentBuilder-specific typing.
|
|
2398
|
+
*
|
|
2399
|
+
* Provides type-safe references to prompts and tools via the
|
|
2400
|
+
* generated AgentBuilder namespace.
|
|
2500
2401
|
*
|
|
2501
2402
|
* @template N - The agent name as a string literal type
|
|
2502
2403
|
*
|
|
@@ -2513,145 +2414,68 @@ interface SideConfig {
|
|
|
2513
2414
|
* prompt: 'customer_support',
|
|
2514
2415
|
* stopOnResponse: true,
|
|
2515
2416
|
* },
|
|
2516
|
-
* tags: ['support', 'tier-1'],
|
|
2517
2417
|
* });
|
|
2518
2418
|
* ```
|
|
2519
2419
|
*/
|
|
2520
2420
|
interface AgentDefinition<N extends string = string> {
|
|
2521
|
-
/**
|
|
2522
|
-
* Unique name for this agent.
|
|
2523
|
-
* Used as the identifier for thread creation and handoffs.
|
|
2524
|
-
* Should be snake_case (e.g., 'support_agent', 'research_flow').
|
|
2525
|
-
*/
|
|
2421
|
+
/** Unique name for this agent. */
|
|
2526
2422
|
name: N;
|
|
2527
2423
|
/**
|
|
2528
2424
|
* Human-readable title for the agent.
|
|
2529
|
-
* Optional - if not provided, the name will be used.
|
|
2530
2425
|
* @deprecated Use name instead. Title will be removed in a future version.
|
|
2531
2426
|
*/
|
|
2532
2427
|
title?: string;
|
|
2533
2428
|
/**
|
|
2534
2429
|
* Agent conversation type.
|
|
2535
|
-
*
|
|
2536
2430
|
* - `ai_human`: AI conversing with a human user (default)
|
|
2537
2431
|
* - `dual_ai`: Two AI participants conversing
|
|
2538
|
-
*
|
|
2539
2432
|
* @default 'ai_human'
|
|
2540
2433
|
*/
|
|
2541
|
-
type?:
|
|
2434
|
+
type?: 'ai_human' | 'dual_ai';
|
|
2542
2435
|
/**
|
|
2543
2436
|
* Maximum total turns across both sides.
|
|
2544
2437
|
* Only applies to `dual_ai` agents.
|
|
2545
|
-
* Prevents infinite loops in AI-to-AI conversations.
|
|
2546
2438
|
*/
|
|
2547
2439
|
maxSessionTurns?: number;
|
|
2548
|
-
/**
|
|
2549
|
-
* Configuration for Side A.
|
|
2550
|
-
* For `ai_human`: This is the AI side.
|
|
2551
|
-
* For `dual_ai`: This is the first AI participant.
|
|
2552
|
-
*/
|
|
2440
|
+
/** Configuration for Side A (type-safe with autocomplete). */
|
|
2553
2441
|
sideA: SideConfig;
|
|
2554
|
-
/**
|
|
2555
|
-
* Configuration for Side B.
|
|
2556
|
-
* For `ai_human`: Optional, the human side doesn't need config.
|
|
2557
|
-
* For `dual_ai`: Required, the second AI participant.
|
|
2558
|
-
*/
|
|
2442
|
+
/** Configuration for Side B (type-safe with autocomplete). */
|
|
2559
2443
|
sideB?: SideConfig;
|
|
2560
2444
|
/**
|
|
2561
2445
|
* Expose this agent as a tool for other prompts.
|
|
2562
|
-
* Enables agent composition and handoffs.
|
|
2563
|
-
* When true, other prompts can invoke this agent as a tool.
|
|
2564
2446
|
* @default false
|
|
2565
2447
|
*/
|
|
2566
2448
|
exposeAsTool?: boolean;
|
|
2567
|
-
/**
|
|
2568
|
-
* Description shown when agent is used as a tool.
|
|
2569
|
-
* Required if exposeAsTool is true.
|
|
2570
|
-
* Should clearly describe what this agent does.
|
|
2571
|
-
*/
|
|
2449
|
+
/** Description shown when agent is used as a tool. */
|
|
2572
2450
|
toolDescription?: string;
|
|
2573
2451
|
/**
|
|
2574
|
-
*
|
|
2575
|
-
*
|
|
2576
|
-
*
|
|
2577
|
-
* @example ['customer-service', 'tier-1', 'english']
|
|
2578
|
-
*/
|
|
2579
|
-
tags?: string[];
|
|
2580
|
-
/**
|
|
2581
|
-
* Brief description of what this agent does.
|
|
2582
|
-
* Useful for UIs and documentation.
|
|
2583
|
-
*
|
|
2584
|
-
* @example 'Handles customer support inquiries and resolves issues'
|
|
2452
|
+
* Thread environment variables for this agent.
|
|
2453
|
+
* Merged into thread tenvs at creation time.
|
|
2454
|
+
* Later values (thread) override earlier ones (prompt -> agent).
|
|
2585
2455
|
*/
|
|
2456
|
+
tenvs?: Record<string, unknown>;
|
|
2457
|
+
/** Brief description of what this agent does. */
|
|
2586
2458
|
description?: string;
|
|
2587
|
-
/**
|
|
2588
|
-
* Icon URL or absolute path for the agent.
|
|
2589
|
-
* Absolute paths (starting with `/`) are converted to full URLs in API responses.
|
|
2590
|
-
*
|
|
2591
|
-
* @example 'https://example.com/icon.svg' or '/icons/support.svg'
|
|
2592
|
-
*/
|
|
2459
|
+
/** Icon URL or absolute path for the agent. */
|
|
2593
2460
|
icon?: string;
|
|
2594
2461
|
}
|
|
2462
|
+
|
|
2595
2463
|
/**
|
|
2596
|
-
*
|
|
2597
|
-
*
|
|
2598
|
-
* Agents orchestrate conversations between AI models, or between AI and
|
|
2599
|
-
* human users. They use prompts to configure each side of the conversation
|
|
2600
|
-
* and define stop conditions to control conversation flow.
|
|
2601
|
-
*
|
|
2602
|
-
* @template N - The agent name as a string literal type
|
|
2603
|
-
* @param options - Agent configuration options
|
|
2604
|
-
* @returns The agent definition for registration
|
|
2605
|
-
*
|
|
2606
|
-
* @example
|
|
2607
|
-
* ```typescript
|
|
2608
|
-
* // agentbuilder/agents/support_agent.ts
|
|
2609
|
-
* import { defineAgent } from '@standardagents/builder';
|
|
2610
|
-
*
|
|
2611
|
-
* export default defineAgent({
|
|
2612
|
-
* name: 'support_agent',
|
|
2613
|
-
* title: 'Customer Support Agent',
|
|
2614
|
-
* type: 'ai_human',
|
|
2615
|
-
* sideA: {
|
|
2616
|
-
* label: 'Support',
|
|
2617
|
-
* prompt: 'customer_support',
|
|
2618
|
-
* stopOnResponse: true,
|
|
2619
|
-
* endConversationTool: 'close_ticket',
|
|
2620
|
-
* },
|
|
2621
|
-
* exposeAsTool: true,
|
|
2622
|
-
* toolDescription: 'Hand off to customer support',
|
|
2623
|
-
* tags: ['support', 'tier-1'],
|
|
2624
|
-
* });
|
|
2625
|
-
* ```
|
|
2626
|
-
*
|
|
2627
|
-
* @example
|
|
2628
|
-
* ```typescript
|
|
2629
|
-
* // Dual AI agent (two AIs conversing)
|
|
2630
|
-
* export default defineAgent({
|
|
2631
|
-
* name: 'debate_agent',
|
|
2632
|
-
* title: 'AI Debate',
|
|
2633
|
-
* type: 'dual_ai',
|
|
2634
|
-
* maxSessionTurns: 10,
|
|
2635
|
-
* sideA: {
|
|
2636
|
-
* label: 'Pro',
|
|
2637
|
-
* prompt: 'debate_pro',
|
|
2638
|
-
* stopOnResponse: true,
|
|
2639
|
-
* },
|
|
2640
|
-
* sideB: {
|
|
2641
|
-
* label: 'Con',
|
|
2642
|
-
* prompt: 'debate_con',
|
|
2643
|
-
* stopOnResponse: true,
|
|
2644
|
-
* endConversationTool: 'conclude_debate',
|
|
2645
|
-
* },
|
|
2646
|
-
* });
|
|
2647
|
-
* ```
|
|
2464
|
+
* Options for generating a model file.
|
|
2648
2465
|
*/
|
|
2649
|
-
|
|
2650
|
-
|
|
2466
|
+
interface GenerateModelFileOptions {
|
|
2467
|
+
/** The provider export name (e.g., 'openai', 'openrouter') */
|
|
2468
|
+
providerName: string;
|
|
2469
|
+
/** The provider package (e.g., '@standardagents/openai') */
|
|
2470
|
+
providerPackage: string;
|
|
2471
|
+
}
|
|
2651
2472
|
/**
|
|
2652
2473
|
* Generate a TypeScript file for a model definition.
|
|
2474
|
+
*
|
|
2475
|
+
* @param data - The model definition data
|
|
2476
|
+
* @param options - Provider import options (required since providers are functions)
|
|
2653
2477
|
*/
|
|
2654
|
-
declare function generateModelFile(data: ModelDefinition): string;
|
|
2478
|
+
declare function generateModelFile(data: ModelDefinition, options: GenerateModelFileOptions): string;
|
|
2655
2479
|
|
|
2656
2480
|
/**
|
|
2657
2481
|
* Converts JSON Schema to Zod code string.
|
|
@@ -2690,6 +2514,8 @@ interface ToolConfigInput {
|
|
|
2690
2514
|
include_tool_calls?: boolean;
|
|
2691
2515
|
include_errors?: boolean;
|
|
2692
2516
|
init_user_message_property?: string | null;
|
|
2517
|
+
init_attachments_property?: string | null;
|
|
2518
|
+
tenvs?: Record<string, unknown>;
|
|
2693
2519
|
}
|
|
2694
2520
|
/**
|
|
2695
2521
|
* Prompt part as it comes from the UI/API.
|
|
@@ -2724,9 +2550,6 @@ interface PromptFileData {
|
|
|
2724
2550
|
parallelToolCalls?: boolean;
|
|
2725
2551
|
toolChoice?: 'auto' | 'none' | 'required';
|
|
2726
2552
|
tools?: (string | ToolConfigInput)[];
|
|
2727
|
-
handoffAgents?: string[];
|
|
2728
|
-
beforeTool?: string;
|
|
2729
|
-
afterTool?: string;
|
|
2730
2553
|
reasoning?: {
|
|
2731
2554
|
effort?: 'low' | 'medium' | 'high';
|
|
2732
2555
|
maxTokens?: number;
|
|
@@ -3811,4 +3634,15 @@ declare class GitHubApiError extends Error {
|
|
|
3811
3634
|
constructor(message: string, status: number, details?: unknown);
|
|
3812
3635
|
}
|
|
3813
3636
|
|
|
3814
|
-
|
|
3637
|
+
/** @public Alias for LLMProviderInterface */
|
|
3638
|
+
type Provider = LLMProviderInterface;
|
|
3639
|
+
/** @public Alias for ContentPart */
|
|
3640
|
+
type ProviderContentPart = ContentPart;
|
|
3641
|
+
/** @public Alias for TextPart */
|
|
3642
|
+
type ProviderTextPart = TextPart;
|
|
3643
|
+
/** @public Alias for ImagePart */
|
|
3644
|
+
type ProviderImagePart = ImagePart;
|
|
3645
|
+
/** @public Alias for FilePart */
|
|
3646
|
+
type ProviderFilePart = FilePart;
|
|
3647
|
+
|
|
3648
|
+
export { type Agent, type AgentBuilderEnv, type AgentDefinition, type AttachmentRef, type AuthContext, type AuthUser, type BroadcastOptions, type BuilderThreadEndpointHandler, type BuilderController as Controller, type BuilderControllerContext as ControllerContext, DurableAgentBuilder, DurableThread, type Env, type FileRecord, type FileStats, type FlowResult, type FlowState, FlowStateSdk, type FlowStateWithSdk, GitHubApiError, GitHubClient, type GitHubCommitResult, type GitHubConfig, type GitHubFileChange, type GrepResult, type ImageContentPart, type ImageContextConfig, type ImageMetadata, type InjectMessageOptions$1 as InjectMessageOptions, type Provider as LLMProviderInterface, type LLMResponse, type Message, type MessageContent, type ModelDefinition, type MultimodalContent, type PromptContent, type PromptDefinition, type PromptIncludePart, type PromptPart, type Provider$1 as Provider, type ProviderContentPart, type ProviderFilePart, type ProviderImagePart, type ProviderTextPart, type RequestContext, type SideConfig, type StorageBackend, type SubpromptConfig, type TelemetryEvent, type TextContentPart, type ThreadEndpointContext, type ThreadEnv, type ThreadInstance, type ThreadMetadata, type ThreadRegistryEntry, type ToolCall, type ToolConfig, type ToolResult, type UpdateThreadParams, type User, authenticate, buildImageDescription, cat, defineController, defineThreadEndpoint, emitThreadEvent, enhanceFlowState, exists, find, forceTurn, generateAgentFile, generateImageDescription, generateModelFile, generatePromptFile, getFileStats, getMessages, getMessagesToSummarize, getThumbnail, getUnsummarizedImageAttachments, grep, hasImageAttachments, head, injectMessage, linkFile, mkdir, optimizeImageContext, queueTool, readFile, readdir, reloadHistory, replaceImagesWithDescriptions, requireAdmin, requireAuth, rmdir, stat, tail, unlink, updateThread, writeFile, writeImage };
|