@jackchen_me/open-multi-agent 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- package/.github/pull_request_template.md +14 -0
- package/.github/workflows/ci.yml +23 -0
- package/CLAUDE.md +80 -0
- package/CODE_OF_CONDUCT.md +48 -0
- package/CONTRIBUTING.md +72 -0
- package/DECISIONS.md +43 -0
- package/README.md +144 -144
- package/README_zh.md +277 -0
- package/SECURITY.md +17 -0
- package/dist/agent/agent.d.ts +20 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +233 -12
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/loop-detector.d.ts +39 -0
- package/dist/agent/loop-detector.d.ts.map +1 -0
- package/dist/agent/loop-detector.js +122 -0
- package/dist/agent/loop-detector.js.map +1 -0
- package/dist/agent/pool.d.ts +2 -1
- package/dist/agent/pool.d.ts.map +1 -1
- package/dist/agent/pool.js +4 -2
- package/dist/agent/pool.js.map +1 -1
- package/dist/agent/runner.d.ts +23 -1
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +113 -12
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/structured-output.d.ts +33 -0
- package/dist/agent/structured-output.d.ts.map +1 -0
- package/dist/agent/structured-output.js +116 -0
- package/dist/agent/structured-output.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/adapter.d.ts +12 -4
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +28 -5
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/anthropic.d.ts +1 -1
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +2 -1
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/copilot.d.ts +92 -0
- package/dist/llm/copilot.d.ts.map +1 -0
- package/dist/llm/copilot.js +427 -0
- package/dist/llm/copilot.js.map +1 -0
- package/dist/llm/gemini.d.ts +65 -0
- package/dist/llm/gemini.d.ts.map +1 -0
- package/dist/llm/gemini.js +317 -0
- package/dist/llm/gemini.js.map +1 -0
- package/dist/llm/grok.d.ts +21 -0
- package/dist/llm/grok.d.ts.map +1 -0
- package/dist/llm/grok.js +24 -0
- package/dist/llm/grok.js.map +1 -0
- package/dist/llm/openai-common.d.ts +54 -0
- package/dist/llm/openai-common.d.ts.map +1 -0
- package/dist/llm/openai-common.js +242 -0
- package/dist/llm/openai-common.js.map +1 -0
- package/dist/llm/openai.d.ts +2 -2
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +23 -226
- package/dist/llm/openai.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +25 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +214 -41
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/task/queue.d.ts +31 -2
- package/dist/task/queue.d.ts.map +1 -1
- package/dist/task/queue.js +70 -3
- package/dist/task/queue.js.map +1 -1
- package/dist/task/task.d.ts +3 -0
- package/dist/task/task.d.ts.map +1 -1
- package/dist/task/task.js +5 -1
- package/dist/task/task.js.map +1 -1
- package/dist/team/messaging.d.ts.map +1 -1
- package/dist/team/messaging.js +2 -1
- package/dist/team/messaging.js.map +1 -1
- package/dist/tool/text-tool-extractor.d.ts +32 -0
- package/dist/tool/text-tool-extractor.d.ts.map +1 -0
- package/dist/tool/text-tool-extractor.js +187 -0
- package/dist/tool/text-tool-extractor.js.map +1 -0
- package/dist/types.d.ts +167 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/trace.d.ts +12 -0
- package/dist/utils/trace.d.ts.map +1 -0
- package/dist/utils/trace.js +30 -0
- package/dist/utils/trace.js.map +1 -0
- package/examples/05-copilot-test.ts +49 -0
- package/examples/06-local-model.ts +200 -0
- package/examples/07-fan-out-aggregate.ts +209 -0
- package/examples/08-gemma4-local.ts +192 -0
- package/examples/09-structured-output.ts +73 -0
- package/examples/10-task-retry.ts +132 -0
- package/examples/11-trace-observability.ts +133 -0
- package/examples/12-grok.ts +154 -0
- package/examples/13-gemini.ts +48 -0
- package/package.json +14 -3
- package/src/agent/agent.ts +273 -15
- package/src/agent/loop-detector.ts +137 -0
- package/src/agent/pool.ts +9 -2
- package/src/agent/runner.ts +148 -19
- package/src/agent/structured-output.ts +126 -0
- package/src/index.ts +17 -1
- package/src/llm/adapter.ts +29 -5
- package/src/llm/anthropic.ts +2 -1
- package/src/llm/copilot.ts +552 -0
- package/src/llm/gemini.ts +378 -0
- package/src/llm/grok.ts +29 -0
- package/src/llm/openai-common.ts +294 -0
- package/src/llm/openai.ts +31 -261
- package/src/orchestrator/orchestrator.ts +260 -40
- package/src/task/queue.ts +74 -4
- package/src/task/task.ts +8 -1
- package/src/team/messaging.ts +3 -1
- package/src/tool/text-tool-extractor.ts +219 -0
- package/src/types.ts +186 -6
- package/src/utils/trace.ts +34 -0
- package/tests/agent-hooks.test.ts +473 -0
- package/tests/agent-pool.test.ts +212 -0
- package/tests/approval.test.ts +464 -0
- package/tests/built-in-tools.test.ts +393 -0
- package/tests/gemini-adapter.test.ts +97 -0
- package/tests/grok-adapter.test.ts +74 -0
- package/tests/llm-adapters.test.ts +357 -0
- package/tests/loop-detection.test.ts +456 -0
- package/tests/openai-fallback.test.ts +159 -0
- package/tests/orchestrator.test.ts +281 -0
- package/tests/scheduler.test.ts +221 -0
- package/tests/semaphore.test.ts +57 -0
- package/tests/shared-memory.test.ts +122 -0
- package/tests/structured-output.test.ts +331 -0
- package/tests/task-queue.test.ts +244 -0
- package/tests/task-retry.test.ts +368 -0
- package/tests/task-utils.test.ts +155 -0
- package/tests/team-messaging.test.ts +329 -0
- package/tests/text-tool-extractor.test.ts +170 -0
- package/tests/tool-executor.test.ts +193 -0
- package/tests/trace.test.ts +453 -0
- package/vitest.config.ts +9 -0
package/dist/agent/agent.d.ts
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
import type { AgentConfig, AgentState, AgentRunResult, LLMMessage, StreamEvent, ToolUseContext } from '../types.js';
|
|
26
26
|
import type { ToolDefinition as FrameworkToolDefinition, ToolRegistry } from '../tool/framework.js';
|
|
27
27
|
import type { ToolExecutor } from '../tool/executor.js';
|
|
28
|
+
import { type RunOptions } from './runner.js';
|
|
28
29
|
/**
|
|
29
30
|
* High-level wrapper around {@link AgentRunner} that manages conversation
|
|
30
31
|
* history, state transitions, and tool lifecycle.
|
|
@@ -61,7 +62,7 @@ export declare class Agent {
|
|
|
61
62
|
*
|
|
62
63
|
* Use this for one-shot queries where past context is irrelevant.
|
|
63
64
|
*/
|
|
64
|
-
run(prompt: string): Promise<AgentRunResult>;
|
|
65
|
+
run(prompt: string, runOptions?: Partial<RunOptions>): Promise<AgentRunResult>;
|
|
65
66
|
/**
|
|
66
67
|
* Run `prompt` as part of the ongoing conversation.
|
|
67
68
|
*
|
|
@@ -104,11 +105,29 @@ export declare class Agent {
|
|
|
104
105
|
* Handles state transitions and error wrapping.
|
|
105
106
|
*/
|
|
106
107
|
private executeRun;
|
|
108
|
+
/** Emit an `agent` trace event if `onTrace` is provided. */
|
|
109
|
+
private emitAgentTrace;
|
|
110
|
+
/**
|
|
111
|
+
* Validate agent output against the configured `outputSchema`.
|
|
112
|
+
* On first validation failure, retry once with error feedback.
|
|
113
|
+
*/
|
|
114
|
+
private validateStructuredOutput;
|
|
107
115
|
/**
|
|
108
116
|
* Shared streaming path used by `stream`.
|
|
109
117
|
* Handles state transitions and error wrapping.
|
|
110
118
|
*/
|
|
111
119
|
private executeStream;
|
|
120
|
+
/** Extract the prompt text from the last user message to build hook context. */
|
|
121
|
+
private buildBeforeRunHookContext;
|
|
122
|
+
/**
|
|
123
|
+
* Apply a (possibly modified) hook context back to the messages array.
|
|
124
|
+
*
|
|
125
|
+
* Only text blocks in the last user message are replaced; non-text content
|
|
126
|
+
* (images, tool results) is preserved. The array element is replaced (not
|
|
127
|
+
* mutated in place) so that shallow copies of the original array (e.g. from
|
|
128
|
+
* `prompt()`) are not affected.
|
|
129
|
+
*/
|
|
130
|
+
private applyHookContext;
|
|
112
131
|
private transitionTo;
|
|
113
132
|
private transitionToError;
|
|
114
133
|
private toAgentRunResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,cAAc,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,cAAc,EAEd,UAAU,EACV,WAAW,EAEX,cAAc,EACf,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,cAAc,IAAI,uBAAuB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,EAAmC,KAAK,UAAU,EAAkB,MAAM,aAAa,CAAA;AAqC9F;;;GAGG;AACH,qBAAa,KAAK;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAE5B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,OAAO,CAAC,cAAc,CAAmB;IAEzC;;;;;;;OAOG;gBAED,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY;IAkB5B;;;;;OAKG;YACW,SAAS;IA2CvB;;;;;;;OAOG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAQpF;;;;;;;OAOG;IAEG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBtD;;;;OAIG;IAEI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC;IAY1D,oFAAoF;IACpF,QAAQ,IAAI,UAAU;IAItB,uDAAuD;IACvD,UAAU,IAAI,UAAU,EAAE;IAI1B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAab;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI;IAI5C;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,0DAA0D;IAC1D,QAAQ,IAAI,MAAM,EAAE;IAQpB;;;OAGG;YACW,UAAU;IAuFxB,4DAA4D;IAC5D,OAAO,CAAC,cAAc;IAqBtB;;;OAGG;YACW,wBAAwB;IA+EtC;;;OAGG;YACY,aAAa;IAiD5B,gFAAgF;IAChF,OAAO,CAAC,yBAAyB;IAgBjC;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;IAoBxB;;;OAGG;IACH,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,cAAc;CAU5D"}
|
package/dist/agent/agent.js
CHANGED
|
@@ -22,12 +22,29 @@
|
|
|
22
22
|
* console.log(result.output)
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
+
import { emitTrace, generateRunId } from '../utils/trace.js';
|
|
25
26
|
import { createAdapter } from '../llm/adapter.js';
|
|
26
27
|
import { AgentRunner } from './runner.js';
|
|
28
|
+
import { buildStructuredOutputInstruction, extractJSON, validateOutput, } from './structured-output.js';
|
|
27
29
|
// ---------------------------------------------------------------------------
|
|
28
30
|
// Internal helpers
|
|
29
31
|
// ---------------------------------------------------------------------------
|
|
30
32
|
const ZERO_USAGE = { input_tokens: 0, output_tokens: 0 };
|
|
33
|
+
/**
|
|
34
|
+
* Combine two {@link AbortSignal}s so that aborting either one cancels the
|
|
35
|
+
* returned signal. Works on Node 18+ (no `AbortSignal.any` required).
|
|
36
|
+
*/
|
|
37
|
+
function mergeAbortSignals(a, b) {
|
|
38
|
+
const controller = new AbortController();
|
|
39
|
+
if (a.aborted || b.aborted) {
|
|
40
|
+
controller.abort();
|
|
41
|
+
return controller.signal;
|
|
42
|
+
}
|
|
43
|
+
const abort = () => controller.abort();
|
|
44
|
+
a.addEventListener('abort', abort, { once: true });
|
|
45
|
+
b.addEventListener('abort', abort, { once: true });
|
|
46
|
+
return controller.signal;
|
|
47
|
+
}
|
|
31
48
|
function addUsage(a, b) {
|
|
32
49
|
return {
|
|
33
50
|
input_tokens: a.input_tokens + b.input_tokens,
|
|
@@ -82,16 +99,25 @@ export class Agent {
|
|
|
82
99
|
return this.runner;
|
|
83
100
|
}
|
|
84
101
|
const provider = this.config.provider ?? 'anthropic';
|
|
85
|
-
const adapter = await createAdapter(provider);
|
|
102
|
+
const adapter = await createAdapter(provider, this.config.apiKey, this.config.baseURL);
|
|
103
|
+
// Append structured-output instructions when an outputSchema is configured.
|
|
104
|
+
let effectiveSystemPrompt = this.config.systemPrompt;
|
|
105
|
+
if (this.config.outputSchema) {
|
|
106
|
+
const instruction = buildStructuredOutputInstruction(this.config.outputSchema);
|
|
107
|
+
effectiveSystemPrompt = effectiveSystemPrompt
|
|
108
|
+
? effectiveSystemPrompt + '\n' + instruction
|
|
109
|
+
: instruction;
|
|
110
|
+
}
|
|
86
111
|
const runnerOptions = {
|
|
87
112
|
model: this.config.model,
|
|
88
|
-
systemPrompt:
|
|
113
|
+
systemPrompt: effectiveSystemPrompt,
|
|
89
114
|
maxTurns: this.config.maxTurns,
|
|
90
115
|
maxTokens: this.config.maxTokens,
|
|
91
116
|
temperature: this.config.temperature,
|
|
92
117
|
allowedTools: this.config.tools,
|
|
93
118
|
agentName: this.name,
|
|
94
119
|
agentRole: this.config.systemPrompt?.slice(0, 50) ?? 'assistant',
|
|
120
|
+
loopDetection: this.config.loopDetection,
|
|
95
121
|
};
|
|
96
122
|
this.runner = new AgentRunner(adapter, this._toolRegistry, this._toolExecutor, runnerOptions);
|
|
97
123
|
return this.runner;
|
|
@@ -107,11 +133,11 @@ export class Agent {
|
|
|
107
133
|
*
|
|
108
134
|
* Use this for one-shot queries where past context is irrelevant.
|
|
109
135
|
*/
|
|
110
|
-
async run(prompt) {
|
|
136
|
+
async run(prompt, runOptions) {
|
|
111
137
|
const messages = [
|
|
112
138
|
{ role: 'user', content: [{ type: 'text', text: prompt }] },
|
|
113
139
|
];
|
|
114
|
-
return this.executeRun(messages);
|
|
140
|
+
return this.executeRun(messages, runOptions);
|
|
115
141
|
}
|
|
116
142
|
/**
|
|
117
143
|
* Run `prompt` as part of the ongoing conversation.
|
|
@@ -121,6 +147,7 @@ export class Agent {
|
|
|
121
147
|
*
|
|
122
148
|
* Use this for multi-turn interactions.
|
|
123
149
|
*/
|
|
150
|
+
// TODO(#18): accept optional RunOptions to forward trace context
|
|
124
151
|
async prompt(message) {
|
|
125
152
|
const userMessage = {
|
|
126
153
|
role: 'user',
|
|
@@ -139,6 +166,7 @@ export class Agent {
|
|
|
139
166
|
*
|
|
140
167
|
* Like {@link run}, this does not use or update the persistent history.
|
|
141
168
|
*/
|
|
169
|
+
// TODO(#18): accept optional RunOptions to forward trace context
|
|
142
170
|
async *stream(prompt) {
|
|
143
171
|
const messages = [
|
|
144
172
|
{ role: 'user', content: [{ type: 'text', text: prompt }] },
|
|
@@ -197,29 +225,163 @@ export class Agent {
|
|
|
197
225
|
* Shared execution path used by both `run` and `prompt`.
|
|
198
226
|
* Handles state transitions and error wrapping.
|
|
199
227
|
*/
|
|
200
|
-
async executeRun(messages) {
|
|
228
|
+
async executeRun(messages, callerOptions) {
|
|
201
229
|
this.transitionTo('running');
|
|
230
|
+
const agentStartMs = Date.now();
|
|
202
231
|
try {
|
|
232
|
+
// --- beforeRun hook ---
|
|
233
|
+
if (this.config.beforeRun) {
|
|
234
|
+
const hookCtx = this.buildBeforeRunHookContext(messages);
|
|
235
|
+
const modified = await this.config.beforeRun(hookCtx);
|
|
236
|
+
this.applyHookContext(messages, modified, hookCtx.prompt);
|
|
237
|
+
}
|
|
203
238
|
const runner = await this.getRunner();
|
|
239
|
+
const internalOnMessage = (msg) => {
|
|
240
|
+
this.state.messages.push(msg);
|
|
241
|
+
callerOptions?.onMessage?.(msg);
|
|
242
|
+
};
|
|
243
|
+
// Auto-generate runId when onTrace is provided but runId is missing
|
|
244
|
+
const needsRunId = callerOptions?.onTrace && !callerOptions.runId;
|
|
245
|
+
// Create a fresh timeout signal per run (not per runner) so that
|
|
246
|
+
// each run() / prompt() call gets its own timeout window.
|
|
247
|
+
const timeoutSignal = this.config.timeoutMs !== undefined && this.config.timeoutMs > 0
|
|
248
|
+
? AbortSignal.timeout(this.config.timeoutMs)
|
|
249
|
+
: undefined;
|
|
250
|
+
// Merge caller-provided abortSignal with the timeout signal so that
|
|
251
|
+
// either cancellation source is respected.
|
|
252
|
+
const callerAbort = callerOptions?.abortSignal;
|
|
253
|
+
const effectiveAbort = timeoutSignal && callerAbort
|
|
254
|
+
? mergeAbortSignals(timeoutSignal, callerAbort)
|
|
255
|
+
: timeoutSignal ?? callerAbort;
|
|
204
256
|
const runOptions = {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
},
|
|
257
|
+
...callerOptions,
|
|
258
|
+
onMessage: internalOnMessage,
|
|
259
|
+
...(needsRunId ? { runId: generateRunId() } : undefined),
|
|
260
|
+
...(effectiveAbort ? { abortSignal: effectiveAbort } : undefined),
|
|
208
261
|
};
|
|
209
262
|
const result = await runner.run(messages, runOptions);
|
|
210
263
|
this.state.tokenUsage = addUsage(this.state.tokenUsage, result.tokenUsage);
|
|
264
|
+
// --- Structured output validation ---
|
|
265
|
+
if (this.config.outputSchema) {
|
|
266
|
+
let validated = await this.validateStructuredOutput(messages, result, runner, runOptions);
|
|
267
|
+
// --- afterRun hook ---
|
|
268
|
+
if (this.config.afterRun) {
|
|
269
|
+
validated = await this.config.afterRun(validated);
|
|
270
|
+
}
|
|
271
|
+
this.emitAgentTrace(callerOptions, agentStartMs, validated);
|
|
272
|
+
return validated;
|
|
273
|
+
}
|
|
274
|
+
let agentResult = this.toAgentRunResult(result, true);
|
|
275
|
+
// --- afterRun hook ---
|
|
276
|
+
if (this.config.afterRun) {
|
|
277
|
+
agentResult = await this.config.afterRun(agentResult);
|
|
278
|
+
}
|
|
211
279
|
this.transitionTo('completed');
|
|
212
|
-
|
|
280
|
+
this.emitAgentTrace(callerOptions, agentStartMs, agentResult);
|
|
281
|
+
return agentResult;
|
|
213
282
|
}
|
|
214
283
|
catch (err) {
|
|
215
284
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
216
285
|
this.transitionToError(error);
|
|
217
|
-
|
|
286
|
+
const errorResult = {
|
|
218
287
|
success: false,
|
|
219
288
|
output: error.message,
|
|
220
289
|
messages: [],
|
|
221
290
|
tokenUsage: ZERO_USAGE,
|
|
222
291
|
toolCalls: [],
|
|
292
|
+
structured: undefined,
|
|
293
|
+
};
|
|
294
|
+
this.emitAgentTrace(callerOptions, agentStartMs, errorResult);
|
|
295
|
+
return errorResult;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/** Emit an `agent` trace event if `onTrace` is provided. */
|
|
299
|
+
emitAgentTrace(options, startMs, result) {
|
|
300
|
+
if (!options?.onTrace)
|
|
301
|
+
return;
|
|
302
|
+
const endMs = Date.now();
|
|
303
|
+
emitTrace(options.onTrace, {
|
|
304
|
+
type: 'agent',
|
|
305
|
+
runId: options.runId ?? '',
|
|
306
|
+
taskId: options.taskId,
|
|
307
|
+
agent: options.traceAgent ?? this.name,
|
|
308
|
+
turns: result.messages.filter(m => m.role === 'assistant').length,
|
|
309
|
+
tokens: result.tokenUsage,
|
|
310
|
+
toolCalls: result.toolCalls.length,
|
|
311
|
+
startMs,
|
|
312
|
+
endMs,
|
|
313
|
+
durationMs: endMs - startMs,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Validate agent output against the configured `outputSchema`.
|
|
318
|
+
* On first validation failure, retry once with error feedback.
|
|
319
|
+
*/
|
|
320
|
+
async validateStructuredOutput(originalMessages, result, runner, runOptions) {
|
|
321
|
+
const schema = this.config.outputSchema;
|
|
322
|
+
// First attempt
|
|
323
|
+
let firstAttemptError;
|
|
324
|
+
try {
|
|
325
|
+
const parsed = extractJSON(result.output);
|
|
326
|
+
const validated = validateOutput(schema, parsed);
|
|
327
|
+
this.transitionTo('completed');
|
|
328
|
+
return this.toAgentRunResult(result, true, validated);
|
|
329
|
+
}
|
|
330
|
+
catch (e) {
|
|
331
|
+
firstAttemptError = e;
|
|
332
|
+
}
|
|
333
|
+
// Retry: send full context + error feedback
|
|
334
|
+
const errorMsg = firstAttemptError instanceof Error
|
|
335
|
+
? firstAttemptError.message
|
|
336
|
+
: String(firstAttemptError);
|
|
337
|
+
const errorFeedbackMessage = {
|
|
338
|
+
role: 'user',
|
|
339
|
+
content: [{
|
|
340
|
+
type: 'text',
|
|
341
|
+
text: [
|
|
342
|
+
'Your previous response did not produce valid JSON matching the required schema.',
|
|
343
|
+
'',
|
|
344
|
+
`Error: ${errorMsg}`,
|
|
345
|
+
'',
|
|
346
|
+
'Please try again. Respond with ONLY valid JSON, no other text.',
|
|
347
|
+
].join('\n'),
|
|
348
|
+
}],
|
|
349
|
+
};
|
|
350
|
+
const retryMessages = [
|
|
351
|
+
...originalMessages,
|
|
352
|
+
...result.messages,
|
|
353
|
+
errorFeedbackMessage,
|
|
354
|
+
];
|
|
355
|
+
const retryResult = await runner.run(retryMessages, runOptions);
|
|
356
|
+
this.state.tokenUsage = addUsage(this.state.tokenUsage, retryResult.tokenUsage);
|
|
357
|
+
const mergedTokenUsage = addUsage(result.tokenUsage, retryResult.tokenUsage);
|
|
358
|
+
// Include the error feedback turn to maintain alternating user/assistant roles,
|
|
359
|
+
// which is required by Anthropic's API for subsequent prompt() calls.
|
|
360
|
+
const mergedMessages = [...result.messages, errorFeedbackMessage, ...retryResult.messages];
|
|
361
|
+
const mergedToolCalls = [...result.toolCalls, ...retryResult.toolCalls];
|
|
362
|
+
try {
|
|
363
|
+
const parsed = extractJSON(retryResult.output);
|
|
364
|
+
const validated = validateOutput(schema, parsed);
|
|
365
|
+
this.transitionTo('completed');
|
|
366
|
+
return {
|
|
367
|
+
success: true,
|
|
368
|
+
output: retryResult.output,
|
|
369
|
+
messages: mergedMessages,
|
|
370
|
+
tokenUsage: mergedTokenUsage,
|
|
371
|
+
toolCalls: mergedToolCalls,
|
|
372
|
+
structured: validated,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
// Retry also failed
|
|
377
|
+
this.transitionTo('completed');
|
|
378
|
+
return {
|
|
379
|
+
success: false,
|
|
380
|
+
output: retryResult.output,
|
|
381
|
+
messages: mergedMessages,
|
|
382
|
+
tokenUsage: mergedTokenUsage,
|
|
383
|
+
toolCalls: mergedToolCalls,
|
|
384
|
+
structured: undefined,
|
|
223
385
|
};
|
|
224
386
|
}
|
|
225
387
|
}
|
|
@@ -230,12 +392,28 @@ export class Agent {
|
|
|
230
392
|
async *executeStream(messages) {
|
|
231
393
|
this.transitionTo('running');
|
|
232
394
|
try {
|
|
395
|
+
// --- beforeRun hook ---
|
|
396
|
+
if (this.config.beforeRun) {
|
|
397
|
+
const hookCtx = this.buildBeforeRunHookContext(messages);
|
|
398
|
+
const modified = await this.config.beforeRun(hookCtx);
|
|
399
|
+
this.applyHookContext(messages, modified, hookCtx.prompt);
|
|
400
|
+
}
|
|
233
401
|
const runner = await this.getRunner();
|
|
234
|
-
|
|
402
|
+
// Fresh timeout per stream call, same as executeRun.
|
|
403
|
+
const timeoutSignal = this.config.timeoutMs !== undefined && this.config.timeoutMs > 0
|
|
404
|
+
? AbortSignal.timeout(this.config.timeoutMs)
|
|
405
|
+
: undefined;
|
|
406
|
+
for await (const event of runner.stream(messages, timeoutSignal ? { abortSignal: timeoutSignal } : {})) {
|
|
235
407
|
if (event.type === 'done') {
|
|
236
408
|
const result = event.data;
|
|
237
409
|
this.state.tokenUsage = addUsage(this.state.tokenUsage, result.tokenUsage);
|
|
410
|
+
let agentResult = this.toAgentRunResult(result, true);
|
|
411
|
+
if (this.config.afterRun) {
|
|
412
|
+
agentResult = await this.config.afterRun(agentResult);
|
|
413
|
+
}
|
|
238
414
|
this.transitionTo('completed');
|
|
415
|
+
yield { type: 'done', data: agentResult };
|
|
416
|
+
continue;
|
|
239
417
|
}
|
|
240
418
|
else if (event.type === 'error') {
|
|
241
419
|
const error = event.data instanceof Error
|
|
@@ -253,6 +431,47 @@ export class Agent {
|
|
|
253
431
|
}
|
|
254
432
|
}
|
|
255
433
|
// -------------------------------------------------------------------------
|
|
434
|
+
// Hook helpers
|
|
435
|
+
// -------------------------------------------------------------------------
|
|
436
|
+
/** Extract the prompt text from the last user message to build hook context. */
|
|
437
|
+
buildBeforeRunHookContext(messages) {
|
|
438
|
+
let prompt = '';
|
|
439
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
440
|
+
if (messages[i].role === 'user') {
|
|
441
|
+
prompt = messages[i].content
|
|
442
|
+
.filter((b) => b.type === 'text')
|
|
443
|
+
.map(b => b.text)
|
|
444
|
+
.join('');
|
|
445
|
+
break;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// Strip hook functions to avoid circular self-references in the context
|
|
449
|
+
const { beforeRun, afterRun, ...agentInfo } = this.config;
|
|
450
|
+
return { prompt, agent: agentInfo };
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Apply a (possibly modified) hook context back to the messages array.
|
|
454
|
+
*
|
|
455
|
+
* Only text blocks in the last user message are replaced; non-text content
|
|
456
|
+
* (images, tool results) is preserved. The array element is replaced (not
|
|
457
|
+
* mutated in place) so that shallow copies of the original array (e.g. from
|
|
458
|
+
* `prompt()`) are not affected.
|
|
459
|
+
*/
|
|
460
|
+
applyHookContext(messages, ctx, originalPrompt) {
|
|
461
|
+
if (ctx.prompt === originalPrompt)
|
|
462
|
+
return;
|
|
463
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
464
|
+
if (messages[i].role === 'user') {
|
|
465
|
+
const nonTextBlocks = messages[i].content.filter(b => b.type !== 'text');
|
|
466
|
+
messages[i] = {
|
|
467
|
+
role: 'user',
|
|
468
|
+
content: [{ type: 'text', text: ctx.prompt }, ...nonTextBlocks],
|
|
469
|
+
};
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
// -------------------------------------------------------------------------
|
|
256
475
|
// State transition helpers
|
|
257
476
|
// -------------------------------------------------------------------------
|
|
258
477
|
transitionTo(status) {
|
|
@@ -264,13 +483,15 @@ export class Agent {
|
|
|
264
483
|
// -------------------------------------------------------------------------
|
|
265
484
|
// Result mapping
|
|
266
485
|
// -------------------------------------------------------------------------
|
|
267
|
-
toAgentRunResult(result, success) {
|
|
486
|
+
toAgentRunResult(result, success, structured) {
|
|
268
487
|
return {
|
|
269
488
|
success,
|
|
270
489
|
output: result.output,
|
|
271
490
|
messages: result.messages,
|
|
272
491
|
tokenUsage: result.tokenUsage,
|
|
273
492
|
toolCalls: result.toolCalls,
|
|
493
|
+
structured,
|
|
494
|
+
...(result.loopDetected ? { loopDetected: true } : {}),
|
|
274
495
|
};
|
|
275
496
|
}
|
|
276
497
|
// -------------------------------------------------------------------------
|
package/dist/agent/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sliding-window loop detector for the agent conversation loop.
|
|
3
|
+
*
|
|
4
|
+
* Tracks tool-call signatures and text outputs across turns to detect when an
|
|
5
|
+
* agent is stuck repeating the same actions. Used by {@link AgentRunner} when
|
|
6
|
+
* {@link LoopDetectionConfig} is provided.
|
|
7
|
+
*/
|
|
8
|
+
import type { LoopDetectionConfig, LoopDetectionInfo } from '../types.js';
|
|
9
|
+
export declare class LoopDetector {
|
|
10
|
+
private readonly maxRepeats;
|
|
11
|
+
private readonly windowSize;
|
|
12
|
+
private readonly toolSignatures;
|
|
13
|
+
private readonly textOutputs;
|
|
14
|
+
constructor(config?: LoopDetectionConfig);
|
|
15
|
+
/**
|
|
16
|
+
* Record a turn's tool calls. Returns detection info when a loop is found.
|
|
17
|
+
*/
|
|
18
|
+
recordToolCalls(blocks: ReadonlyArray<{
|
|
19
|
+
name: string;
|
|
20
|
+
input: Record<string, unknown>;
|
|
21
|
+
}>): LoopDetectionInfo | null;
|
|
22
|
+
/**
|
|
23
|
+
* Record a turn's text output. Returns detection info when a loop is found.
|
|
24
|
+
*/
|
|
25
|
+
recordText(text: string): LoopDetectionInfo | null;
|
|
26
|
+
/**
|
|
27
|
+
* Deterministic JSON signature for a set of tool calls.
|
|
28
|
+
* Sorts calls by name (for multi-tool turns) and keys within each input.
|
|
29
|
+
*/
|
|
30
|
+
private computeToolSignature;
|
|
31
|
+
/** Push an entry and trim the buffer to `windowSize`. */
|
|
32
|
+
private push;
|
|
33
|
+
/**
|
|
34
|
+
* Count how many consecutive identical entries exist at the tail of `buffer`.
|
|
35
|
+
* Returns 1 when the last entry is unique.
|
|
36
|
+
*/
|
|
37
|
+
private consecutiveRepeats;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=loop-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-detector.d.ts","sourceRoot":"","sources":["../../src/agent/loop-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAwBzE,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;gBAE/B,MAAM,GAAE,mBAAwB;IAO5C;;OAEG;IACH,eAAe,CACb,MAAM,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GACtE,iBAAiB,GAAG,IAAI;IAoB3B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAuBlD;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAa5B,yDAAyD;IACzD,OAAO,CAAC,IAAI;IAOZ;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAU3B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Sliding-window loop detector for the agent conversation loop.
|
|
3
|
+
*
|
|
4
|
+
* Tracks tool-call signatures and text outputs across turns to detect when an
|
|
5
|
+
* agent is stuck repeating the same actions. Used by {@link AgentRunner} when
|
|
6
|
+
* {@link LoopDetectionConfig} is provided.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* Recursively sort object keys so that `{b:1, a:2}` and `{a:2, b:1}` produce
|
|
13
|
+
* the same JSON string.
|
|
14
|
+
*/
|
|
15
|
+
function sortKeys(value) {
|
|
16
|
+
if (value === null || typeof value !== 'object')
|
|
17
|
+
return value;
|
|
18
|
+
if (Array.isArray(value))
|
|
19
|
+
return value.map(sortKeys);
|
|
20
|
+
const sorted = {};
|
|
21
|
+
for (const key of Object.keys(value).sort()) {
|
|
22
|
+
sorted[key] = sortKeys(value[key]);
|
|
23
|
+
}
|
|
24
|
+
return sorted;
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// LoopDetector
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export class LoopDetector {
|
|
30
|
+
maxRepeats;
|
|
31
|
+
windowSize;
|
|
32
|
+
toolSignatures = [];
|
|
33
|
+
textOutputs = [];
|
|
34
|
+
constructor(config = {}) {
|
|
35
|
+
this.maxRepeats = config.maxRepetitions ?? 3;
|
|
36
|
+
const requestedWindow = config.loopDetectionWindow ?? 4;
|
|
37
|
+
// Window must be >= threshold, otherwise detection can never trigger.
|
|
38
|
+
this.windowSize = Math.max(requestedWindow, this.maxRepeats);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Record a turn's tool calls. Returns detection info when a loop is found.
|
|
42
|
+
*/
|
|
43
|
+
recordToolCalls(blocks) {
|
|
44
|
+
if (blocks.length === 0)
|
|
45
|
+
return null;
|
|
46
|
+
const signature = this.computeToolSignature(blocks);
|
|
47
|
+
this.push(this.toolSignatures, signature);
|
|
48
|
+
const count = this.consecutiveRepeats(this.toolSignatures);
|
|
49
|
+
if (count >= this.maxRepeats) {
|
|
50
|
+
const names = blocks.map(b => b.name).join(', ');
|
|
51
|
+
return {
|
|
52
|
+
kind: 'tool_repetition',
|
|
53
|
+
repetitions: count,
|
|
54
|
+
detail: `Tool call "${names}" with identical arguments has repeated ` +
|
|
55
|
+
`${count} times consecutively. The agent appears to be stuck in a loop.`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Record a turn's text output. Returns detection info when a loop is found.
|
|
62
|
+
*/
|
|
63
|
+
recordText(text) {
|
|
64
|
+
const normalised = text.trim().replace(/\s+/g, ' ');
|
|
65
|
+
if (normalised.length === 0)
|
|
66
|
+
return null;
|
|
67
|
+
this.push(this.textOutputs, normalised);
|
|
68
|
+
const count = this.consecutiveRepeats(this.textOutputs);
|
|
69
|
+
if (count >= this.maxRepeats) {
|
|
70
|
+
return {
|
|
71
|
+
kind: 'text_repetition',
|
|
72
|
+
repetitions: count,
|
|
73
|
+
detail: `The agent has produced the same text response ${count} times ` +
|
|
74
|
+
`consecutively. It appears to be stuck in a loop.`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
// -------------------------------------------------------------------------
|
|
80
|
+
// Private
|
|
81
|
+
// -------------------------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Deterministic JSON signature for a set of tool calls.
|
|
84
|
+
* Sorts calls by name (for multi-tool turns) and keys within each input.
|
|
85
|
+
*/
|
|
86
|
+
computeToolSignature(blocks) {
|
|
87
|
+
const items = blocks
|
|
88
|
+
.map(b => ({ name: b.name, input: sortKeys(b.input) }))
|
|
89
|
+
.sort((a, b) => {
|
|
90
|
+
const cmp = a.name.localeCompare(b.name);
|
|
91
|
+
if (cmp !== 0)
|
|
92
|
+
return cmp;
|
|
93
|
+
return JSON.stringify(a.input).localeCompare(JSON.stringify(b.input));
|
|
94
|
+
});
|
|
95
|
+
return JSON.stringify(items);
|
|
96
|
+
}
|
|
97
|
+
/** Push an entry and trim the buffer to `windowSize`. */
|
|
98
|
+
push(buffer, entry) {
|
|
99
|
+
buffer.push(entry);
|
|
100
|
+
while (buffer.length > this.windowSize) {
|
|
101
|
+
buffer.shift();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Count how many consecutive identical entries exist at the tail of `buffer`.
|
|
106
|
+
* Returns 1 when the last entry is unique.
|
|
107
|
+
*/
|
|
108
|
+
consecutiveRepeats(buffer) {
|
|
109
|
+
if (buffer.length === 0)
|
|
110
|
+
return 0;
|
|
111
|
+
const last = buffer[buffer.length - 1];
|
|
112
|
+
let count = 0;
|
|
113
|
+
for (let i = buffer.length - 1; i >= 0; i--) {
|
|
114
|
+
if (buffer[i] === last)
|
|
115
|
+
count++;
|
|
116
|
+
else
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
return count;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=loop-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-detector.js","sourceRoot":"","sources":["../../src/agent/loop-detector.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/pool.d.ts
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
import type { AgentRunResult } from '../types.js';
|
|
23
|
+
import type { RunOptions } from './runner.js';
|
|
23
24
|
import type { Agent } from './agent.js';
|
|
24
25
|
export { Semaphore } from '../utils/semaphore.js';
|
|
25
26
|
export interface PoolStatus {
|
|
@@ -78,7 +79,7 @@ export declare class AgentPool {
|
|
|
78
79
|
*
|
|
79
80
|
* @throws {Error} If the agent name is not found.
|
|
80
81
|
*/
|
|
81
|
-
run(agentName: string, prompt: string): Promise<AgentRunResult>;
|
|
82
|
+
run(agentName: string, prompt: string, runOptions?: Partial<RunOptions>): Promise<AgentRunResult>;
|
|
82
83
|
/**
|
|
83
84
|
* Run prompts on multiple agents in parallel, subject to the concurrency
|
|
84
85
|
* cap set at construction time.
|
package/dist/agent/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/agent/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAMjD,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAMD;;;;;;GAMG;AACH,qBAAa,SAAS;IAUR,OAAO,CAAC,QAAQ,CAAC,cAAc;IAT3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,wDAAwD;IACxD,OAAO,CAAC,eAAe,CAAI;IAE3B;;;OAGG;gBAC0B,cAAc,GAAE,MAAU;IAQvD;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAUvB;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC;;OAEG;IACH,IAAI,IAAI,KAAK,EAAE;IAQf;;;;;OAKG;IACG,GAAG,
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/agent/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAMjD,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAMD;;;;;;GAMG;AACH,qBAAa,SAAS;IAUR,OAAO,CAAC,QAAQ,CAAC,cAAc;IAT3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,wDAAwD;IACxD,OAAO,CAAC,eAAe,CAAI;IAE3B;;;OAGG;gBAC0B,cAAc,GAAE,MAAU;IAQvD;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAUvB;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC;;OAEG;IACH,IAAI,IAAI,KAAK,EAAE;IAQf;;;;;OAKG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAW1B;;;;;;;;;OASG;IAEG,WAAW,CACf,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GACxE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IA2BvC;;;;;;;;OAQG;IAEG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAuBrD;;OAEG;IACH,SAAS,IAAI,UAAU;IAsBvB;;;;;;;;OAQG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAUpB"}
|