@ariaflowagents/core 0.6.3 → 0.7.1
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 +58 -5
- package/dist/agents/Agent.d.ts +1 -0
- package/dist/agents/Agent.d.ts.map +1 -1
- package/dist/agents/Agent.js +10 -1
- package/dist/agents/Agent.js.map +1 -1
- package/dist/agents/CompositeAgent.d.ts +8 -12
- package/dist/agents/CompositeAgent.d.ts.map +1 -1
- package/dist/agents/CompositeAgent.js +30 -16
- package/dist/agents/CompositeAgent.js.map +1 -1
- package/dist/agents/FlowAgent.js +2 -2
- package/dist/agents/FlowAgent.js.map +1 -1
- package/dist/agents/LLMAgent.d.ts.map +1 -1
- package/dist/agents/LLMAgent.js +4 -25
- package/dist/agents/LLMAgent.js.map +1 -1
- package/dist/agents/TriageAgent.d.ts.map +1 -1
- package/dist/agents/TriageAgent.js +8 -29
- package/dist/agents/TriageAgent.js.map +1 -1
- package/dist/callbacks/httpCallback.d.ts +1 -0
- package/dist/callbacks/httpCallback.d.ts.map +1 -1
- package/dist/callbacks/httpCallback.js +20 -6
- package/dist/callbacks/httpCallback.js.map +1 -1
- package/dist/callbacks/streamCallback.d.ts +26 -0
- package/dist/callbacks/streamCallback.d.ts.map +1 -0
- package/dist/callbacks/streamCallback.js +281 -0
- package/dist/callbacks/streamCallback.js.map +1 -0
- package/dist/flows/FlowManager.d.ts +19 -4
- package/dist/flows/FlowManager.d.ts.map +1 -1
- package/dist/flows/FlowManager.js +360 -132
- package/dist/flows/FlowManager.js.map +1 -1
- package/dist/flows/extraction.d.ts +17 -0
- package/dist/flows/extraction.d.ts.map +1 -0
- package/dist/flows/extraction.js +56 -0
- package/dist/flows/extraction.js.map +1 -0
- package/dist/flows/index.d.ts +1 -2
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +1 -1
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/template.d.ts +2 -2
- package/dist/flows/template.d.ts.map +1 -1
- package/dist/flows/template.js +13 -0
- package/dist/flows/template.js.map +1 -1
- package/dist/flows/validation.d.ts +7 -0
- package/dist/flows/validation.d.ts.map +1 -0
- package/dist/flows/validation.js +42 -0
- package/dist/flows/validation.js.map +1 -0
- package/dist/hooks/builtin/metrics.d.ts +4 -34
- package/dist/hooks/builtin/metrics.d.ts.map +1 -1
- package/dist/hooks/builtin/metrics.js +3 -65
- package/dist/hooks/builtin/metrics.js.map +1 -1
- package/dist/hooks/helpers.d.ts +8 -47
- package/dist/hooks/helpers.d.ts.map +1 -1
- package/dist/hooks/helpers.js +38 -104
- package/dist/hooks/helpers.js.map +1 -1
- package/dist/hooks/index.d.ts +4 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/processors/ProcessorRunner.d.ts.map +1 -1
- package/dist/processors/ProcessorRunner.js +13 -0
- package/dist/processors/ProcessorRunner.js.map +1 -1
- package/dist/prompts/PromptBuilder.d.ts.map +1 -1
- package/dist/prompts/PromptBuilder.js +1 -0
- package/dist/prompts/PromptBuilder.js.map +1 -1
- package/dist/prompts/types.d.ts +2 -1
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/types.js +29 -7
- package/dist/prompts/types.js.map +1 -1
- package/dist/runtime/ContextManager.d.ts +1 -1
- package/dist/runtime/ContextManager.d.ts.map +1 -1
- package/dist/runtime/ContextManager.js +141 -20
- package/dist/runtime/ContextManager.js.map +1 -1
- package/dist/runtime/ExtractionEngine.d.ts +34 -0
- package/dist/runtime/ExtractionEngine.d.ts.map +1 -0
- package/dist/runtime/ExtractionEngine.js +155 -0
- package/dist/runtime/ExtractionEngine.js.map +1 -0
- package/dist/runtime/FlowExecutor.d.ts +51 -0
- package/dist/runtime/FlowExecutor.d.ts.map +1 -0
- package/dist/runtime/FlowExecutor.js +523 -0
- package/dist/runtime/FlowExecutor.js.map +1 -0
- package/dist/runtime/InjectionQueue.d.ts +8 -1
- package/dist/runtime/InjectionQueue.d.ts.map +1 -1
- package/dist/runtime/InjectionQueue.js +33 -0
- package/dist/runtime/InjectionQueue.js.map +1 -1
- package/dist/runtime/Runtime.d.ts +32 -2
- package/dist/runtime/Runtime.d.ts.map +1 -1
- package/dist/runtime/Runtime.js +513 -612
- package/dist/runtime/Runtime.js.map +1 -1
- package/dist/runtime/SessionEventManager.d.ts +17 -0
- package/dist/runtime/SessionEventManager.d.ts.map +1 -0
- package/dist/runtime/SessionEventManager.js +149 -0
- package/dist/runtime/SessionEventManager.js.map +1 -0
- package/dist/runtime/SuggestionManager.d.ts +7 -0
- package/dist/runtime/SuggestionManager.d.ts.map +1 -0
- package/dist/runtime/SuggestionManager.js +50 -0
- package/dist/runtime/SuggestionManager.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/services/MetricsService.d.ts +55 -0
- package/dist/services/MetricsService.d.ts.map +1 -0
- package/dist/services/MetricsService.js +86 -0
- package/dist/services/MetricsService.js.map +1 -0
- package/dist/services/TracingService.d.ts +13 -0
- package/dist/services/TracingService.d.ts.map +1 -0
- package/dist/services/TracingService.js +62 -0
- package/dist/services/TracingService.js.map +1 -0
- package/dist/session/stores/MemoryStore.js +1 -1
- package/dist/session/stores/MemoryStore.js.map +1 -1
- package/dist/tools/Tool.d.ts +25 -3
- package/dist/tools/Tool.d.ts.map +1 -1
- package/dist/tools/Tool.js.map +1 -1
- package/dist/tools/errorHandling.d.ts +1 -1
- package/dist/tools/errorHandling.d.ts.map +1 -1
- package/dist/tools/errorHandling.js +27 -20
- package/dist/tools/errorHandling.js.map +1 -1
- package/dist/tools/http.d.ts.map +1 -1
- package/dist/tools/http.js +53 -17
- package/dist/tools/http.js.map +1 -1
- package/dist/types/index.d.ts +179 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/telemetry.d.ts +52 -0
- package/dist/types/telemetry.d.ts.map +1 -0
- package/dist/types/telemetry.js +2 -0
- package/dist/types/telemetry.js.map +1 -0
- package/dist/utils/aiStream.d.ts +7 -0
- package/dist/utils/aiStream.d.ts.map +1 -0
- package/dist/utils/aiStream.js +41 -0
- package/dist/utils/aiStream.js.map +1 -0
- package/dist/utils/chrono.d.ts +3 -46
- package/dist/utils/chrono.d.ts.map +1 -1
- package/dist/utils/chrono.js.map +1 -1
- package/dist/utils/isRecord.d.ts +2 -0
- package/dist/utils/isRecord.d.ts.map +1 -0
- package/dist/utils/isRecord.js +4 -0
- package/dist/utils/isRecord.js.map +1 -0
- package/dist/utils/messageNormalization.d.ts +3 -0
- package/dist/utils/messageNormalization.d.ts.map +1 -0
- package/dist/utils/messageNormalization.js +121 -0
- package/dist/utils/messageNormalization.js.map +1 -0
- package/dist/utils/streamChunk.d.ts +5 -0
- package/dist/utils/streamChunk.d.ts.map +1 -0
- package/dist/utils/streamChunk.js +50 -0
- package/dist/utils/streamChunk.js.map +1 -0
- package/guides/EXAMPLE_VERIFICATION.md +53 -0
- package/guides/FLOWS.md +29 -0
- package/guides/GETTING_STARTED.md +14 -1
- package/guides/README.md +3 -1
- package/guides/RUNTIME.md +75 -0
- package/guides/TOOLS.md +6 -0
- package/package.json +2 -2
- package/dist/flows/AgentFlowManager.d.ts +0 -161
- package/dist/flows/AgentFlowManager.d.ts.map +0 -1
- package/dist/flows/AgentFlowManager.js +0 -448
- package/dist/flows/AgentFlowManager.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,9 +20,9 @@ This package is built on top of the Vercel AI SDK v6.
|
|
|
20
20
|
This package exports:
|
|
21
21
|
- **Agents:** `Agent`, `LLMAgent`, `FlowAgent`, `TriageAgent`, `CompositeAgent`
|
|
22
22
|
- **Runtime:** `Runtime`, `createRuntime`
|
|
23
|
-
- **Flows:** `FlowManager`, `FlowGraph`, `FlowNode`, `createFlowTransition`
|
|
24
|
-
- **Session:** `SessionManager`, `SessionStore`, `MemoryStore`
|
|
25
|
-
- **Tools:** `createTool`, `createToolWithFiller`, `createHandoffTool`
|
|
23
|
+
- **Flows:** `FlowManager`, `FlowGraph`, `FlowNode`, `createFlowTransition`, `validateFlowConfig`
|
|
24
|
+
- **Session:** `SessionManager`, `SessionStore`, `MemoryStore`, `RedisStore`
|
|
25
|
+
- **Tools:** `createTool`, `createToolWithFiller`, `createHandoffTool`, `createHttpTool`
|
|
26
26
|
- **System Injections:** `InjectionQueue`, `commonInjections`
|
|
27
27
|
- **Prompts:** `PromptTemplateBuilder`, `PromptBuilder`
|
|
28
28
|
- **Hooks:** `HookRunner`, `loggingHooks`, `createMetricsHooks`
|
|
@@ -68,6 +68,55 @@ const run = async () => {
|
|
|
68
68
|
run();
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
## Stream Callback Defaults (Message-Oriented)
|
|
72
|
+
|
|
73
|
+
`streamCallback` is non-blocking and pluggable (file/http/db/custom sinks).
|
|
74
|
+
Current defaults are optimized for persistence pipelines:
|
|
75
|
+
|
|
76
|
+
- no implicit sink (if `sinks` is omitted, callback is a no-op)
|
|
77
|
+
- message mode by default (`input`, `done`, `error`, `tripwire`, tool events, and transition events)
|
|
78
|
+
- token deltas off by default
|
|
79
|
+
- final assistant text included as `fullText` on terminal events
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { Runtime, createFileStreamSink } from '@ariaflowagents/core';
|
|
83
|
+
|
|
84
|
+
const runtime = new Runtime({
|
|
85
|
+
agents: [supportAgent],
|
|
86
|
+
defaultAgentId: 'support',
|
|
87
|
+
streamCallback: {
|
|
88
|
+
sinks: [createFileStreamSink({ directory: './transcripts' })],
|
|
89
|
+
// defaults shown explicitly:
|
|
90
|
+
eventMode: 'message',
|
|
91
|
+
emitToolEvents: true,
|
|
92
|
+
emitTransitionEvents: true,
|
|
93
|
+
emitTextDeltas: false,
|
|
94
|
+
emitFinalText: true,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Runtime Durability Defaults
|
|
100
|
+
|
|
101
|
+
Runtime now applies lightweight durability hardening by default:
|
|
102
|
+
|
|
103
|
+
- session checkpoints are persisted on `tool-result`, `tool-error`, and `flow-transition`
|
|
104
|
+
- handoff state changes are checkpointed immediately after routing updates
|
|
105
|
+
- replay-friendly per-turn events are stored in `session.workingMemory.runtimeEventLog`
|
|
106
|
+
(`user`, `assistant_final`, `tool_call`, `tool_result`, `tool_error`, `transition`)
|
|
107
|
+
|
|
108
|
+
Tool execution context also includes `idempotencyKey` in `experimental_context`, which can be forwarded to external systems.
|
|
109
|
+
|
|
110
|
+
For high-volume token streaming, opt in:
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
streamCallback: {
|
|
114
|
+
sinks: [createFileStreamSink({ directory: './transcripts' })],
|
|
115
|
+
eventMode: 'all',
|
|
116
|
+
emitTextDeltas: true,
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
71
120
|
## Routing & Handoffs (Important Defaults)
|
|
72
121
|
|
|
73
122
|
AriaFlow supports invisible multi-agent routing via a `handoff` tool.
|
|
@@ -198,15 +247,19 @@ The `Runtime` class orchestrates multiple agents with seamless handoffs:
|
|
|
198
247
|
- **TriageAgent**: Routes requests to the appropriate specialist
|
|
199
248
|
- **Agent Handoffs**: Transfer conversation context between agents
|
|
200
249
|
- **Session Persistence**: Maintains conversation state
|
|
250
|
+
- **Flow Snapshot Memory**: Persists flow progress in `session.workingMemory.flowStateByAgent`
|
|
201
251
|
|
|
202
|
-
###
|
|
252
|
+
### FlowManager (Single Flow)
|
|
203
253
|
|
|
204
|
-
The `
|
|
254
|
+
The `FlowManager` class manages structured, node-based conversations:
|
|
205
255
|
|
|
206
256
|
- **Flow Nodes**: Each node has a specific purpose and tools
|
|
207
257
|
- **State Transitions**: Tools drive transitions via `createFlowTransition()`
|
|
258
|
+
- **Declarative Edge Tools**: `FlowManager` auto-injects tools for `transitions[].on` edges
|
|
208
259
|
- **Flow Hooks**: Observe lifecycle events (onFlowStart, onTransition, etc.)
|
|
209
260
|
- **Context Strategies**: Control memory management (append, reset, summarize)
|
|
261
|
+
- **Prompt Composition**: Global role prompt + node prompt (per-node opt-out via `addGlobalPrompt: false`)
|
|
262
|
+
- **Transition Contracts**: `contract.toolOnly` and `contract.requiresUserTurn` are enforced at runtime
|
|
210
263
|
|
|
211
264
|
### Date Parsing Utilities
|
|
212
265
|
|
package/dist/agents/Agent.d.ts
CHANGED
|
@@ -11,5 +11,6 @@ export declare abstract class Agent<TConfig extends AgentConfig = AgentConfig> {
|
|
|
11
11
|
cleanup(_context: AgentContext): Promise<void>;
|
|
12
12
|
get canHandoffTo(): string[];
|
|
13
13
|
protected buildSystemPrompt(context: AgentContext): string;
|
|
14
|
+
protected getSystemPromptString(): string;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=Agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../../src/agents/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../../src/agents/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpF,8BAAsB,KAAK,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IACnE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEd,MAAM,EAAE,OAAO;IAO3B,QAAQ,CAAC,OAAO,CACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,GACpB,cAAc,CAAC,eAAe,CAAC;IAE5B,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAInE,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,IAAI,YAAY,IAAI,MAAM,EAAE,CAE3B;IAED,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAW1D,SAAS,CAAC,qBAAqB,IAAI,MAAM;CAQ1C"}
|
package/dist/agents/Agent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PromptBuilder } from '../prompts/PromptBuilder.js';
|
|
1
2
|
export class Agent {
|
|
2
3
|
id;
|
|
3
4
|
name;
|
|
@@ -22,12 +23,20 @@ export class Agent {
|
|
|
22
23
|
return this.config.canHandoffTo ?? [];
|
|
23
24
|
}
|
|
24
25
|
buildSystemPrompt(context) {
|
|
25
|
-
let prompt = this.
|
|
26
|
+
let prompt = this.getSystemPromptString();
|
|
26
27
|
const memory = context.workingMemory.toJSON();
|
|
27
28
|
if (Object.keys(memory).length > 0) {
|
|
28
29
|
prompt += `\n\n## Known Information\n${JSON.stringify(memory, null, 2)}`;
|
|
29
30
|
}
|
|
30
31
|
return prompt;
|
|
31
32
|
}
|
|
33
|
+
getSystemPromptString() {
|
|
34
|
+
const sp = this.config.systemPrompt;
|
|
35
|
+
if (typeof sp === 'string') {
|
|
36
|
+
return sp;
|
|
37
|
+
}
|
|
38
|
+
// It's a PromptTemplate
|
|
39
|
+
return new PromptBuilder(sp).build();
|
|
40
|
+
}
|
|
32
41
|
}
|
|
33
42
|
//# sourceMappingURL=Agent.js.map
|
package/dist/agents/Agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../src/agents/Agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Agent.js","sourceRoot":"","sources":["../../src/agents/Agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,OAAgB,KAAK;IAChB,EAAE,CAAS;IACX,IAAI,CAAS;IACb,WAAW,CAAU;IACpB,MAAM,CAAU;IAE1B,YAAY,MAAe;QACzB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAOD,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,QAAsB;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAsB;QACrC,yBAAyB;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAsB;QAClC,yBAAyB;IAC3B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IACxC,CAAC;IAES,iBAAiB,CAAC,OAAqB;QAC/C,IAAI,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,6BAA6B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,qBAAqB;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QACpC,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,wBAAwB;QACxB,OAAO,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
import type { AgentContext, AgentStreamPart } from '../types/index.js';
|
|
2
|
-
import
|
|
3
|
-
export interface CompositeAgentConfig {
|
|
4
|
-
|
|
5
|
-
name: string;
|
|
6
|
-
description?: string;
|
|
1
|
+
import type { AgentConfig, AgentContext, AgentStreamPart } from '../types/index.js';
|
|
2
|
+
import { Agent } from './Agent.js';
|
|
3
|
+
export interface CompositeAgentConfig extends AgentConfig {
|
|
4
|
+
type: 'composite';
|
|
7
5
|
agents: Agent[];
|
|
8
6
|
entryAgent: string;
|
|
9
7
|
maxHandoffs?: number;
|
|
10
8
|
}
|
|
11
|
-
export declare class CompositeAgent {
|
|
12
|
-
readonly id: string;
|
|
13
|
-
readonly name: string;
|
|
14
|
-
readonly description?: string;
|
|
9
|
+
export declare class CompositeAgent extends Agent<CompositeAgentConfig> {
|
|
15
10
|
private agents;
|
|
16
11
|
private entryAgentId;
|
|
17
12
|
private maxHandoffs;
|
|
18
13
|
constructor(config: CompositeAgentConfig);
|
|
14
|
+
initialize(context: AgentContext): Promise<void>;
|
|
15
|
+
cleanup(context: AgentContext): Promise<void>;
|
|
19
16
|
process(input: string, context: AgentContext): AsyncGenerator<AgentStreamPart>;
|
|
20
17
|
getAgent(id: string): Agent | undefined;
|
|
21
|
-
get
|
|
22
|
-
get entryAgent(): string;
|
|
18
|
+
get subAgentIds(): string[];
|
|
23
19
|
}
|
|
24
20
|
//# sourceMappingURL=CompositeAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeAgent.d.ts","sourceRoot":"","sources":["../../src/agents/CompositeAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"CompositeAgent.d.ts","sourceRoot":"","sources":["../../src/agents/CompositeAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAe,SAAQ,KAAK,CAAC,oBAAoB,CAAC;IAC7D,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,oBAAoB;IAUlC,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhD,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,OAAO,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,GACpB,cAAc,CAAC,eAAe,CAAC;IAmDlC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIvC,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;CACF"}
|
|
@@ -1,32 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
name;
|
|
4
|
-
description;
|
|
1
|
+
import { Agent } from './Agent.js';
|
|
2
|
+
export class CompositeAgent extends Agent {
|
|
5
3
|
agents = new Map();
|
|
6
4
|
entryAgentId;
|
|
7
5
|
maxHandoffs;
|
|
8
6
|
constructor(config) {
|
|
9
|
-
|
|
10
|
-
this.name = config.name;
|
|
11
|
-
this.description = config.description;
|
|
7
|
+
super(config);
|
|
12
8
|
this.entryAgentId = config.entryAgent;
|
|
13
9
|
this.maxHandoffs = config.maxHandoffs ?? 10;
|
|
14
10
|
for (const agent of config.agents) {
|
|
15
11
|
this.agents.set(agent.id, agent);
|
|
16
12
|
}
|
|
17
13
|
}
|
|
14
|
+
async initialize(context) {
|
|
15
|
+
await super.initialize(context);
|
|
16
|
+
for (const agent of this.agents.values()) {
|
|
17
|
+
await agent.initialize(context);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async cleanup(context) {
|
|
21
|
+
for (const agent of this.agents.values()) {
|
|
22
|
+
await agent.cleanup(context);
|
|
23
|
+
}
|
|
24
|
+
await super.cleanup(context);
|
|
25
|
+
}
|
|
18
26
|
async *process(input, context) {
|
|
19
|
-
let currentAgentId = context.
|
|
27
|
+
let currentAgentId = context.session.activeAgentId || this.entryAgentId;
|
|
20
28
|
let currentInput = input;
|
|
21
29
|
let handoffCount = 0;
|
|
22
30
|
while (handoffCount < this.maxHandoffs) {
|
|
23
31
|
const agent = this.agents.get(currentAgentId);
|
|
24
32
|
if (!agent) {
|
|
25
|
-
yield { type: 'error', error: `Agent "${currentAgentId}" not found` };
|
|
33
|
+
yield { type: 'error', error: `Agent "${currentAgentId}" not found in composite agent "${this.id}"` };
|
|
26
34
|
return;
|
|
27
35
|
}
|
|
28
36
|
let handoffTriggered = false;
|
|
29
37
|
let nextAgentId;
|
|
38
|
+
// Delegate processing to the sub-agent
|
|
30
39
|
for await (const part of agent.process(currentInput, context)) {
|
|
31
40
|
yield part;
|
|
32
41
|
if (part.type === 'handoff') {
|
|
@@ -34,26 +43,31 @@ export class CompositeAgent {
|
|
|
34
43
|
nextAgentId = part.targetAgent;
|
|
35
44
|
handoffCount += 1;
|
|
36
45
|
}
|
|
46
|
+
if (part.type === 'turn-end' && part.metadata?.response) {
|
|
47
|
+
// In a composite agent, we might want to collect all messages
|
|
48
|
+
// but for now we just yield it up so the orchestrator can persist.
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
51
|
if (!handoffTriggered || !nextAgentId) {
|
|
39
52
|
break;
|
|
40
53
|
}
|
|
54
|
+
// If the target agent is not part of this composite, stop internal loop and let runtime handle it
|
|
55
|
+
if (!this.agents.has(nextAgentId)) {
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
41
58
|
currentAgentId = nextAgentId;
|
|
42
|
-
context.
|
|
43
|
-
currentInput = '';
|
|
59
|
+
context.session.activeAgentId = nextAgentId;
|
|
60
|
+
currentInput = ''; // Clear input for the next agent in the sequence
|
|
44
61
|
}
|
|
45
62
|
if (handoffCount >= this.maxHandoffs) {
|
|
46
|
-
yield { type: 'error', error:
|
|
63
|
+
yield { type: 'error', error: `Maximum internal handoffs (${this.maxHandoffs}) exceeded in composite agent "${this.id}"` };
|
|
47
64
|
}
|
|
48
65
|
}
|
|
49
66
|
getAgent(id) {
|
|
50
67
|
return this.agents.get(id);
|
|
51
68
|
}
|
|
52
|
-
get
|
|
69
|
+
get subAgentIds() {
|
|
53
70
|
return Array.from(this.agents.keys());
|
|
54
71
|
}
|
|
55
|
-
get entryAgent() {
|
|
56
|
-
return this.entryAgentId;
|
|
57
|
-
}
|
|
58
72
|
}
|
|
59
73
|
//# sourceMappingURL=CompositeAgent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeAgent.js","sourceRoot":"","sources":["../../src/agents/CompositeAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CompositeAgent.js","sourceRoot":"","sources":["../../src/agents/CompositeAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/FlowAgent.js
CHANGED
|
@@ -14,9 +14,9 @@ export class FlowAgent extends Agent {
|
|
|
14
14
|
flow: this.config.flow,
|
|
15
15
|
initialNode: this.config.initialNode,
|
|
16
16
|
model: this.config.model,
|
|
17
|
-
defaultRolePrompt: this.
|
|
17
|
+
defaultRolePrompt: this.getSystemPromptString(),
|
|
18
18
|
contextMessages: context.messages,
|
|
19
|
-
|
|
19
|
+
abortSignal: context.abortSignal,
|
|
20
20
|
});
|
|
21
21
|
for await (const part of this.flowManager.initialize()) {
|
|
22
22
|
yield part;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowAgent.js","sourceRoot":"","sources":["../../src/agents/FlowAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,MAAM,OAAO,SAAU,SAAQ,KAAsB;IAC3C,WAAW,CAAe;IAElC,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CACZ,KAAa,EACb,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAM;gBACzB,iBAAiB,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"FlowAgent.js","sourceRoot":"","sources":["../../src/agents/FlowAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,MAAM,OAAO,SAAU,SAAQ,KAAsB;IAC3C,WAAW,CAAe;IAElC,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CACZ,KAAa,EACb,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACpC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAM;gBACzB,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,EAAE;gBAC/C,eAAe,EAAE,OAAO,CAAC,QAAQ;gBACjC,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;gBACvD,MAAM,IAAI,CAAC;YACb,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,CAAC;YAEX,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC7B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMAgent.d.ts","sourceRoot":"","sources":["../../src/agents/LLMAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"LLMAgent.d.ts","sourceRoot":"","sources":["../../src/agents/LLMAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIvF,qBAAa,QAAS,SAAQ,KAAK,CAAC,cAAc,CAAC;IACjD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,EAAE,cAAc;IAS3B,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,GACpB,cAAc,CAAC,eAAe,CAAC;IAgBlC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;CAG9D"}
|
package/dist/agents/LLMAgent.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { streamText } from 'ai';
|
|
2
2
|
import { Agent } from './Agent.js';
|
|
3
|
-
import {
|
|
3
|
+
import { processAIStream } from '../utils/aiStream.js';
|
|
4
4
|
export class LLMAgent extends Agent {
|
|
5
5
|
model;
|
|
6
6
|
tools;
|
|
@@ -19,31 +19,10 @@ export class LLMAgent extends Agent {
|
|
|
19
19
|
system: systemPrompt,
|
|
20
20
|
messages: context.messages,
|
|
21
21
|
tools: this.getToolsForContext(context),
|
|
22
|
+
abortSignal: context.abortSignal,
|
|
22
23
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
yield { type: 'text-delta', text: chunk.text };
|
|
26
|
-
}
|
|
27
|
-
if (chunk.type === 'tool-call') {
|
|
28
|
-
const args = 'args' in chunk ? chunk.args : chunk.input;
|
|
29
|
-
yield { type: 'tool-call', toolName: chunk.toolName, args };
|
|
30
|
-
}
|
|
31
|
-
if (chunk.type === 'tool-result') {
|
|
32
|
-
const toolResult = 'result' in chunk ? chunk.result : chunk.output;
|
|
33
|
-
yield { type: 'tool-result', toolName: chunk.toolName, result: toolResult };
|
|
34
|
-
if (isHandoffResult(toolResult)) {
|
|
35
|
-
const targetAgent = toolResult.targetAgent ?? toolResult.targetAgentId;
|
|
36
|
-
yield {
|
|
37
|
-
type: 'handoff',
|
|
38
|
-
targetAgent,
|
|
39
|
-
reason: toolResult.reason,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const response = await result.response;
|
|
45
|
-
context.session.messages.push(...response.messages);
|
|
46
|
-
yield { type: 'turn-end' };
|
|
24
|
+
yield* processAIStream(result.fullStream);
|
|
25
|
+
yield { type: 'turn-end', metadata: { response: await result.response } };
|
|
47
26
|
}
|
|
48
27
|
getToolsForContext(_context) {
|
|
49
28
|
return this.tools;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LLMAgent.js","sourceRoot":"","sources":["../../src/agents/LLMAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoC,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"LLMAgent.js","sourceRoot":"","sources":["../../src/agents/LLMAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoC,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,OAAO,QAAS,SAAQ,KAAqB;IACzC,KAAK,CAAgB;IACrB,KAAK,CAAU;IAEvB,YAAY,MAAsB;QAChC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CACZ,MAAc,EACd,OAAqB;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAe;YACjC,KAAK,EAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAS;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5E,CAAC;IAES,kBAAkB,CAAC,QAAsB;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriageAgent.d.ts","sourceRoot":"","sources":["../../src/agents/TriageAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAc,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TriageAgent.d.ts","sourceRoot":"","sources":["../../src/agents/TriageAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAc,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAKtG,qBAAa,WAAY,SAAQ,KAAK,CAAC,iBAAiB,CAAC;IACvD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;gBAElB,MAAM,EAAE,iBAAiB;IAS9B,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,GACpB,cAAc,CAAC,eAAe,CAAC;IAoBlC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,iBAAiB;CAmB1B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { streamText, tool } from 'ai';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { Agent } from './Agent.js';
|
|
4
|
-
import {
|
|
4
|
+
import { processAIStream } from '../utils/aiStream.js';
|
|
5
5
|
export class TriageAgent extends Agent {
|
|
6
6
|
routes;
|
|
7
7
|
defaultAgent;
|
|
@@ -14,50 +14,29 @@ export class TriageAgent extends Agent {
|
|
|
14
14
|
this.defaultAgent = config.defaultAgent;
|
|
15
15
|
}
|
|
16
16
|
async *process(_input, context) {
|
|
17
|
-
const systemPrompt = this.buildRoutingPrompt();
|
|
17
|
+
const systemPrompt = this.buildRoutingPrompt(context);
|
|
18
18
|
const handoffTool = this.createHandoffTool();
|
|
19
19
|
const result = streamText({
|
|
20
20
|
model: this.config.model,
|
|
21
21
|
system: systemPrompt,
|
|
22
22
|
messages: context.messages,
|
|
23
|
+
abortSignal: context.abortSignal,
|
|
23
24
|
tools: {
|
|
24
25
|
handoff_to_agent: handoffTool,
|
|
25
26
|
...this.config.tools,
|
|
26
27
|
},
|
|
27
28
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
yield { type: 'text-delta', text: chunk.text };
|
|
31
|
-
}
|
|
32
|
-
if (chunk.type === 'tool-call') {
|
|
33
|
-
const args = 'args' in chunk ? chunk.args : chunk.input;
|
|
34
|
-
yield { type: 'tool-call', toolName: chunk.toolName, args };
|
|
35
|
-
}
|
|
36
|
-
if (chunk.type === 'tool-result') {
|
|
37
|
-
const toolResult = 'result' in chunk ? chunk.result : chunk.output;
|
|
38
|
-
yield { type: 'tool-result', toolName: chunk.toolName, result: toolResult };
|
|
39
|
-
if (isHandoffResult(toolResult)) {
|
|
40
|
-
const targetAgent = toolResult.targetAgent ?? toolResult.targetAgentId;
|
|
41
|
-
yield {
|
|
42
|
-
type: 'handoff',
|
|
43
|
-
targetAgent,
|
|
44
|
-
reason: toolResult.reason,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const response = await result.response;
|
|
50
|
-
context.session.messages.push(...response.messages);
|
|
51
|
-
yield { type: 'turn-end' };
|
|
29
|
+
yield* processAIStream(result.fullStream);
|
|
30
|
+
yield { type: 'turn-end', metadata: { response: await result.response } };
|
|
52
31
|
}
|
|
53
|
-
buildRoutingPrompt() {
|
|
32
|
+
buildRoutingPrompt(context) {
|
|
54
33
|
const routeDescriptions = this.routes
|
|
55
34
|
.map(route => `- **${route.agentId}**: ${route.description}`)
|
|
56
35
|
.join('\n');
|
|
57
36
|
const defaultNote = this.defaultAgent
|
|
58
37
|
? `\n- Use "${this.defaultAgent}" when no specialist applies.`
|
|
59
38
|
: '';
|
|
60
|
-
return `${this.
|
|
39
|
+
return `${this.buildSystemPrompt(context)}
|
|
61
40
|
|
|
62
41
|
## Available Specialists
|
|
63
42
|
${routeDescriptions}
|
|
@@ -65,7 +44,7 @@ ${routeDescriptions}
|
|
|
65
44
|
## Instructions
|
|
66
45
|
- Follow the system prompt above.
|
|
67
46
|
- Use the handoff_to_agent tool when a specialist is needed.
|
|
68
|
-
-
|
|
47
|
+
- You MAY provide a very brief, natural transition (e.g., "I'll check that for you...") or remain silent. Do not state "I am handing you off".
|
|
69
48
|
- Keep the transition content separate from the specialist's likely greeting.
|
|
70
49
|
- Always provide a reason for the handoff via the tool${defaultNote}`;
|
|
71
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriageAgent.js","sourceRoot":"","sources":["../../src/agents/TriageAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"TriageAgent.js","sourceRoot":"","sources":["../../src/agents/TriageAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,OAAO,WAAY,SAAQ,KAAwB;IAC/C,MAAM,CAAe;IACrB,YAAY,CAAU;IAE9B,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gBAAgB,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CACZ,MAAc,EACd,OAAqB;QAErB,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE7C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAM;YACzB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAe;YACjC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE;gBACL,gBAAgB,EAAE,WAAW;gBAC7B,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;aACd;SACT,CAAC,CAAC;QAEH,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC5E,CAAC;IAEO,kBAAkB,CAAC,OAAqB;QAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM;aAClC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;aAC5D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY;YACnC,CAAC,CAAC,YAAY,IAAI,CAAC,YAAY,+BAA+B;YAC9D,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;;;EAG3C,iBAAiB;;;;;;;wDAOqC,WAAW,EAAE,CAAC;IACpE,CAAC;IAEO,iBAAiB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC;YACV,WAAW,EAAE,wEAAwE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,QAAiC,CAAC;gBACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;aAC9D,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC3C,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,aAAa;oBACb,WAAW,EAAE,aAAa;oBAC1B,MAAM;iBACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpCallback.d.ts","sourceRoot":"","sources":["../../src/callbacks/httpCallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"httpCallback.d.ts","sourceRoot":"","sources":["../../src/callbacks/httpCallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAgD9H;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D"}
|
|
@@ -14,31 +14,44 @@ function shouldSendEvent(eventType, config) {
|
|
|
14
14
|
}
|
|
15
15
|
return true;
|
|
16
16
|
}
|
|
17
|
-
async function sendHttpRequest(url, method, headers, payload) {
|
|
17
|
+
async function sendHttpRequest(url, method, headers, payload, timeoutMs) {
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const timeout = setTimeout(() => controller.abort('HTTP callback timeout'), timeoutMs);
|
|
18
20
|
try {
|
|
19
|
-
await fetch(url, {
|
|
21
|
+
const response = await fetch(url, {
|
|
20
22
|
method,
|
|
21
23
|
headers: {
|
|
22
24
|
'Content-Type': 'application/json',
|
|
23
25
|
...headers,
|
|
24
26
|
},
|
|
25
27
|
body: JSON.stringify(payload),
|
|
28
|
+
signal: controller.signal,
|
|
26
29
|
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
console.error(`[HttpCallback] Webhook returned ${response.status}`);
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
catch (error) {
|
|
29
35
|
console.error(`[HttpCallback] Failed to send webhook: ${error.message}`);
|
|
30
36
|
}
|
|
37
|
+
finally {
|
|
38
|
+
clearTimeout(timeout);
|
|
39
|
+
}
|
|
31
40
|
}
|
|
32
41
|
export function createHttpCallback(config) {
|
|
33
42
|
const resolvedHeaders = config.headers
|
|
34
43
|
? Object.fromEntries(Object.entries(config.headers).map(([key, value]) => [key, resolveEnvVars(value)]))
|
|
35
44
|
: undefined;
|
|
36
45
|
return async (context, part) => {
|
|
46
|
+
const isTerminal = part.type === 'turn-end' || part.type === 'error' || part.type === 'done';
|
|
37
47
|
if (part.type === 'text-delta') {
|
|
38
48
|
const currentText = TEXT_ACCUMULATOR.get(context.session.id) || '';
|
|
39
49
|
TEXT_ACCUMULATOR.set(context.session.id, currentText + part.text);
|
|
40
50
|
}
|
|
41
51
|
if (!shouldSendEvent(part.type, config)) {
|
|
52
|
+
if (isTerminal) {
|
|
53
|
+
TEXT_ACCUMULATOR.delete(context.session.id);
|
|
54
|
+
}
|
|
42
55
|
return;
|
|
43
56
|
}
|
|
44
57
|
const payload = {
|
|
@@ -53,10 +66,11 @@ export function createHttpCallback(config) {
|
|
|
53
66
|
payload.fullText = fullText;
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
69
|
+
void sendHttpRequest(resolveEnvVars(config.url), config.method || 'POST', resolvedHeaders, payload, config.timeoutMs ?? 5000).finally(() => {
|
|
70
|
+
if (isTerminal) {
|
|
71
|
+
TEXT_ACCUMULATOR.delete(context.session.id);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
60
74
|
};
|
|
61
75
|
}
|
|
62
76
|
export function clearTextAccumulator(sessionId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpCallback.js","sourceRoot":"","sources":["../../src/callbacks/httpCallback.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"httpCallback.js","sourceRoot":"","sources":["../../src/callbacks/httpCallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HarnessStreamPart, RunContext, StreamCallbackConfig, StreamCallbackPayload, StreamCallbackSink } from '../types/index.js';
|
|
2
|
+
export interface StreamCallbackAdapter {
|
|
3
|
+
onStreamPart: (context: RunContext, part: HarnessStreamPart) => Promise<void>;
|
|
4
|
+
flush: (timeoutMs?: number) => Promise<void>;
|
|
5
|
+
close: (timeoutMs?: number) => Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createConsoleStreamSink(options?: {
|
|
8
|
+
logger?: Pick<Console, 'log'>;
|
|
9
|
+
prefix?: string;
|
|
10
|
+
}): StreamCallbackSink;
|
|
11
|
+
export declare function createFileStreamSink(config: {
|
|
12
|
+
path?: string;
|
|
13
|
+
directory?: string;
|
|
14
|
+
filename?: string | ((payload: StreamCallbackPayload) => string);
|
|
15
|
+
mkdirp?: boolean;
|
|
16
|
+
format?: 'jsonl' | 'text';
|
|
17
|
+
}): StreamCallbackSink;
|
|
18
|
+
export declare function createFunctionStreamSink(handler: (payload: StreamCallbackPayload) => Promise<void> | void, name?: string): StreamCallbackSink;
|
|
19
|
+
export declare function createHttpStreamSink(config: {
|
|
20
|
+
url: string;
|
|
21
|
+
method?: 'POST' | 'PUT';
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
}): StreamCallbackSink;
|
|
25
|
+
export declare function createStreamCallbackAdapter(config?: StreamCallbackConfig): StreamCallbackAdapter;
|
|
26
|
+
//# sourceMappingURL=streamCallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamCallback.d.ts","sourceRoot":"","sources":["../../src/callbacks/streamCallback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA8HxI,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,GAAE;IAC/C,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACZ,GAAG,kBAAkB,CAU1B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,qBAAqB,KAAK,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B,GAAG,kBAAkB,CA8CrB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACjE,IAAI,GAAE,MAAmB,GACxB,kBAAkB,CAOpB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,kBAAkB,CAoCrB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,GAAE,oBAAyB,GAAG,qBAAqB,CAsFpG"}
|