@jackchen_me/open-multi-agent 0.1.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/LICENSE +21 -0
- package/README.md +280 -0
- package/dist/agent/agent.d.ts +121 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +294 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/pool.d.ts +128 -0
- package/dist/agent/pool.d.ts.map +1 -0
- package/dist/agent/pool.js +236 -0
- package/dist/agent/pool.js.map +1 -0
- package/dist/agent/runner.d.ts +120 -0
- package/dist/agent/runner.d.ts.map +1 -0
- package/dist/agent/runner.js +274 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/adapter.d.ts +38 -0
- package/dist/llm/adapter.d.ts.map +1 -0
- package/dist/llm/adapter.js +46 -0
- package/dist/llm/adapter.js.map +1 -0
- package/dist/llm/anthropic.d.ts +56 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +307 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/openai.d.ts +62 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +424 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/memory/shared.d.ts +86 -0
- package/dist/memory/shared.d.ts.map +1 -0
- package/dist/memory/shared.js +155 -0
- package/dist/memory/shared.js.map +1 -0
- package/dist/memory/store.d.ts +64 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +103 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +173 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +698 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/scheduler.d.ts +112 -0
- package/dist/orchestrator/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/scheduler.js +282 -0
- package/dist/orchestrator/scheduler.js.map +1 -0
- package/dist/task/queue.d.ts +160 -0
- package/dist/task/queue.d.ts.map +1 -0
- package/dist/task/queue.js +337 -0
- package/dist/task/queue.js.map +1 -0
- package/dist/task/task.d.ts +86 -0
- package/dist/task/task.d.ts.map +1 -0
- package/dist/task/task.js +201 -0
- package/dist/task/task.js.map +1 -0
- package/dist/team/messaging.d.ts +106 -0
- package/dist/team/messaging.d.ts.map +1 -0
- package/dist/team/messaging.js +182 -0
- package/dist/team/messaging.js.map +1 -0
- package/dist/team/team.d.ts +141 -0
- package/dist/team/team.d.ts.map +1 -0
- package/dist/team/team.js +282 -0
- package/dist/team/team.js.map +1 -0
- package/dist/tool/built-in/bash.d.ts +12 -0
- package/dist/tool/built-in/bash.d.ts.map +1 -0
- package/dist/tool/built-in/bash.js +133 -0
- package/dist/tool/built-in/bash.js.map +1 -0
- package/dist/tool/built-in/file-edit.d.ts +14 -0
- package/dist/tool/built-in/file-edit.d.ts.map +1 -0
- package/dist/tool/built-in/file-edit.js +130 -0
- package/dist/tool/built-in/file-edit.js.map +1 -0
- package/dist/tool/built-in/file-read.d.ts +12 -0
- package/dist/tool/built-in/file-read.d.ts.map +1 -0
- package/dist/tool/built-in/file-read.js +82 -0
- package/dist/tool/built-in/file-read.js.map +1 -0
- package/dist/tool/built-in/file-write.d.ts +11 -0
- package/dist/tool/built-in/file-write.d.ts.map +1 -0
- package/dist/tool/built-in/file-write.js +70 -0
- package/dist/tool/built-in/file-write.js.map +1 -0
- package/dist/tool/built-in/grep.d.ts +15 -0
- package/dist/tool/built-in/grep.d.ts.map +1 -0
- package/dist/tool/built-in/grep.js +287 -0
- package/dist/tool/built-in/grep.js.map +1 -0
- package/dist/tool/built-in/index.d.ts +36 -0
- package/dist/tool/built-in/index.d.ts.map +1 -0
- package/dist/tool/built-in/index.js +45 -0
- package/dist/tool/built-in/index.js.map +1 -0
- package/dist/tool/executor.d.ts +71 -0
- package/dist/tool/executor.d.ts.map +1 -0
- package/dist/tool/executor.js +116 -0
- package/dist/tool/executor.js.map +1 -0
- package/dist/tool/framework.d.ts +143 -0
- package/dist/tool/framework.d.ts.map +1 -0
- package/dist/tool/framework.js +371 -0
- package/dist/tool/framework.js.map +1 -0
- package/dist/types.d.ts +285 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/semaphore.d.ts +47 -0
- package/dist/utils/semaphore.d.ts.map +1 -0
- package/dist/utils/semaphore.js +85 -0
- package/dist/utils/semaphore.js.map +1 -0
- package/examples/01-single-agent.ts +131 -0
- package/examples/02-team-collaboration.ts +167 -0
- package/examples/03-task-pipeline.ts +201 -0
- package/examples/04-multi-model-team.ts +261 -0
- package/package.json +49 -0
- package/src/agent/agent.ts +364 -0
- package/src/agent/pool.ts +278 -0
- package/src/agent/runner.ts +413 -0
- package/src/index.ts +166 -0
- package/src/llm/adapter.ts +74 -0
- package/src/llm/anthropic.ts +388 -0
- package/src/llm/openai.ts +522 -0
- package/src/memory/shared.ts +181 -0
- package/src/memory/store.ts +124 -0
- package/src/orchestrator/orchestrator.ts +851 -0
- package/src/orchestrator/scheduler.ts +352 -0
- package/src/task/queue.ts +394 -0
- package/src/task/task.ts +232 -0
- package/src/team/messaging.ts +230 -0
- package/src/team/team.ts +334 -0
- package/src/tool/built-in/bash.ts +187 -0
- package/src/tool/built-in/file-edit.ts +154 -0
- package/src/tool/built-in/file-read.ts +105 -0
- package/src/tool/built-in/file-write.ts +81 -0
- package/src/tool/built-in/grep.ts +362 -0
- package/src/tool/built-in/index.ts +50 -0
- package/src/tool/executor.ts +178 -0
- package/src/tool/framework.ts +557 -0
- package/src/types.ts +362 -0
- package/src/utils/semaphore.ts +89 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/tool/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAO7C,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAA;IACV,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAEzB,QAAQ,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB;IASrE;;;;;;;;;OASG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,CAAC;IAsBtB;;;;;;;;OAQG;IACG,YAAY,CAChB,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAmBnC;;;;OAIG;YACW,OAAO;IAuCrB,qCAAqC;IACrC,OAAO,CAAC,WAAW;CAMpB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel tool executor with concurrency control and error isolation.
|
|
3
|
+
*
|
|
4
|
+
* Validates input via Zod schemas, enforces a maximum concurrency limit using
|
|
5
|
+
* a lightweight semaphore, tracks execution duration, and surfaces any
|
|
6
|
+
* execution errors as ToolResult objects rather than thrown exceptions.
|
|
7
|
+
*
|
|
8
|
+
* Types are imported from `../types` to ensure consistency with the rest of
|
|
9
|
+
* the framework.
|
|
10
|
+
*/
|
|
11
|
+
import { Semaphore } from '../utils/semaphore.js';
|
|
12
|
+
/**
|
|
13
|
+
* Executes tools from a {@link ToolRegistry}, validating input against each
|
|
14
|
+
* tool's Zod schema and enforcing a concurrency limit for batch execution.
|
|
15
|
+
*
|
|
16
|
+
* All errors — including unknown tool names, Zod validation failures, and
|
|
17
|
+
* execution exceptions — are caught and returned as `ToolResult` objects with
|
|
18
|
+
* `isError: true` so the agent runner can forward them to the LLM.
|
|
19
|
+
*/
|
|
20
|
+
export class ToolExecutor {
|
|
21
|
+
registry;
|
|
22
|
+
semaphore;
|
|
23
|
+
constructor(registry, options = {}) {
|
|
24
|
+
this.registry = registry;
|
|
25
|
+
this.semaphore = new Semaphore(options.maxConcurrency ?? 4);
|
|
26
|
+
}
|
|
27
|
+
// -------------------------------------------------------------------------
|
|
28
|
+
// Single execution
|
|
29
|
+
// -------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Execute a single tool by name.
|
|
32
|
+
*
|
|
33
|
+
* Errors are caught and returned as a {@link ToolResult} with
|
|
34
|
+
* `isError: true` — this method itself never rejects.
|
|
35
|
+
*
|
|
36
|
+
* @param toolName The registered tool name.
|
|
37
|
+
* @param input Raw input object (before Zod validation).
|
|
38
|
+
* @param context Execution context forwarded to the tool.
|
|
39
|
+
*/
|
|
40
|
+
async execute(toolName, input, context) {
|
|
41
|
+
const tool = this.registry.get(toolName);
|
|
42
|
+
if (tool === undefined) {
|
|
43
|
+
return this.errorResult(`Tool "${toolName}" is not registered in the ToolRegistry.`);
|
|
44
|
+
}
|
|
45
|
+
// Check abort before even starting
|
|
46
|
+
if (context.abortSignal?.aborted === true) {
|
|
47
|
+
return this.errorResult(`Tool "${toolName}" was aborted before execution began.`);
|
|
48
|
+
}
|
|
49
|
+
return this.runTool(tool, input, context);
|
|
50
|
+
}
|
|
51
|
+
// -------------------------------------------------------------------------
|
|
52
|
+
// Batch execution
|
|
53
|
+
// -------------------------------------------------------------------------
|
|
54
|
+
/**
|
|
55
|
+
* Execute multiple tool calls in parallel, honouring the concurrency limit.
|
|
56
|
+
*
|
|
57
|
+
* Returns a `Map` from call ID to result. Every call in `calls` is
|
|
58
|
+
* guaranteed to produce an entry — errors are captured as results.
|
|
59
|
+
*
|
|
60
|
+
* @param calls Array of tool calls to execute.
|
|
61
|
+
* @param context Shared execution context for all calls in this batch.
|
|
62
|
+
*/
|
|
63
|
+
async executeBatch(calls, context) {
|
|
64
|
+
const results = new Map();
|
|
65
|
+
await Promise.all(calls.map(async (call) => {
|
|
66
|
+
const result = await this.semaphore.run(() => this.execute(call.name, call.input, context));
|
|
67
|
+
results.set(call.id, result);
|
|
68
|
+
}));
|
|
69
|
+
return results;
|
|
70
|
+
}
|
|
71
|
+
// -------------------------------------------------------------------------
|
|
72
|
+
// Private helpers
|
|
73
|
+
// -------------------------------------------------------------------------
|
|
74
|
+
/**
|
|
75
|
+
* Validate input with the tool's Zod schema, then call `execute`.
|
|
76
|
+
* Any synchronous or asynchronous error is caught and turned into an error
|
|
77
|
+
* ToolResult.
|
|
78
|
+
*/
|
|
79
|
+
async runTool(
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
tool, rawInput, context) {
|
|
82
|
+
// --- Zod validation ---
|
|
83
|
+
const parseResult = tool.inputSchema.safeParse(rawInput);
|
|
84
|
+
if (!parseResult.success) {
|
|
85
|
+
const issues = parseResult.error.issues
|
|
86
|
+
.map((issue) => ` • ${issue.path.join('.')}: ${issue.message}`)
|
|
87
|
+
.join('\n');
|
|
88
|
+
return this.errorResult(`Invalid input for tool "${tool.name}":\n${issues}`);
|
|
89
|
+
}
|
|
90
|
+
// --- Abort check after parse (parse can be expensive for large inputs) ---
|
|
91
|
+
if (context.abortSignal?.aborted === true) {
|
|
92
|
+
return this.errorResult(`Tool "${tool.name}" was aborted before execution began.`);
|
|
93
|
+
}
|
|
94
|
+
// --- Execute ---
|
|
95
|
+
try {
|
|
96
|
+
const result = await tool.execute(parseResult.data, context);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const message = err instanceof Error
|
|
101
|
+
? err.message
|
|
102
|
+
: typeof err === 'string'
|
|
103
|
+
? err
|
|
104
|
+
: JSON.stringify(err);
|
|
105
|
+
return this.errorResult(`Tool "${tool.name}" threw an error: ${message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Construct an error ToolResult. */
|
|
109
|
+
errorResult(message) {
|
|
110
|
+
return {
|
|
111
|
+
data: message,
|
|
112
|
+
isError: true,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/tool/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definition framework for open-multi-agent.
|
|
3
|
+
*
|
|
4
|
+
* Provides the core primitives for declaring, registering, and converting
|
|
5
|
+
* tools to the JSON Schema format that LLM APIs expect.
|
|
6
|
+
*
|
|
7
|
+
* Types shared with the rest of the framework (`ToolDefinition`, `ToolResult`,
|
|
8
|
+
* `ToolUseContext`) are imported from `../types` to ensure a single source of
|
|
9
|
+
* truth. This file re-exports them for the convenience of downstream callers
|
|
10
|
+
* who only need to import from `tool/framework`.
|
|
11
|
+
*/
|
|
12
|
+
import { type ZodSchema } from 'zod';
|
|
13
|
+
import type { ToolDefinition, ToolResult, ToolUseContext, LLMToolDef } from '../types.js';
|
|
14
|
+
export type { ToolDefinition, ToolResult, ToolUseContext };
|
|
15
|
+
/** Minimal JSON Schema for a single property. */
|
|
16
|
+
export type JSONSchemaProperty = {
|
|
17
|
+
type: 'string';
|
|
18
|
+
description?: string;
|
|
19
|
+
enum?: string[];
|
|
20
|
+
} | {
|
|
21
|
+
type: 'number';
|
|
22
|
+
description?: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'integer';
|
|
25
|
+
description?: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'boolean';
|
|
28
|
+
description?: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'null';
|
|
31
|
+
description?: string;
|
|
32
|
+
} | {
|
|
33
|
+
type: 'array';
|
|
34
|
+
items: JSONSchemaProperty;
|
|
35
|
+
description?: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'object';
|
|
38
|
+
properties: Record<string, JSONSchemaProperty>;
|
|
39
|
+
required?: string[];
|
|
40
|
+
description?: string;
|
|
41
|
+
} | {
|
|
42
|
+
anyOf: JSONSchemaProperty[];
|
|
43
|
+
description?: string;
|
|
44
|
+
} | {
|
|
45
|
+
const: unknown;
|
|
46
|
+
description?: string;
|
|
47
|
+
} | Record<string, unknown>;
|
|
48
|
+
/**
|
|
49
|
+
* Define a typed tool. This is the single entry-point for creating tools
|
|
50
|
+
* that can be registered with a {@link ToolRegistry}.
|
|
51
|
+
*
|
|
52
|
+
* The returned object satisfies the {@link ToolDefinition} interface imported
|
|
53
|
+
* from `../types`.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const echoTool = defineTool({
|
|
58
|
+
* name: 'echo',
|
|
59
|
+
* description: 'Echo the input message back to the caller.',
|
|
60
|
+
* inputSchema: z.object({ message: z.string() }),
|
|
61
|
+
* execute: async ({ message }) => ({
|
|
62
|
+
* data: message,
|
|
63
|
+
* isError: false,
|
|
64
|
+
* }),
|
|
65
|
+
* })
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function defineTool<TInput>(config: {
|
|
69
|
+
name: string;
|
|
70
|
+
description: string;
|
|
71
|
+
inputSchema: ZodSchema<TInput>;
|
|
72
|
+
execute: (input: TInput, context: ToolUseContext) => Promise<ToolResult>;
|
|
73
|
+
}): ToolDefinition<TInput>;
|
|
74
|
+
/**
|
|
75
|
+
* Registry that holds a set of named tools and can produce the JSON Schema
|
|
76
|
+
* representation expected by LLM APIs (Anthropic, OpenAI, etc.).
|
|
77
|
+
*/
|
|
78
|
+
export declare class ToolRegistry {
|
|
79
|
+
private readonly tools;
|
|
80
|
+
/**
|
|
81
|
+
* Add a tool to the registry. Throws if a tool with the same name has
|
|
82
|
+
* already been registered — prevents silent overwrites.
|
|
83
|
+
*/
|
|
84
|
+
register(tool: ToolDefinition<any>): void;
|
|
85
|
+
/** Return a tool by name, or `undefined` if not found. */
|
|
86
|
+
get(name: string): ToolDefinition<any> | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Return all registered tool definitions as an array.
|
|
89
|
+
*
|
|
90
|
+
* Callers that only need names can do `registry.list().map(t => t.name)`.
|
|
91
|
+
* This matches the agent's `getTools()` pattern.
|
|
92
|
+
*/
|
|
93
|
+
list(): ToolDefinition<any>[];
|
|
94
|
+
/**
|
|
95
|
+
* Return all registered tool definitions as an array.
|
|
96
|
+
* Alias for {@link list} — available for callers that prefer explicit naming.
|
|
97
|
+
*/
|
|
98
|
+
getAll(): ToolDefinition<any>[];
|
|
99
|
+
/** Return true when a tool with the given name is registered. */
|
|
100
|
+
has(name: string): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Remove a tool by name.
|
|
103
|
+
* No-op if the tool was not registered — matches the agent's expected
|
|
104
|
+
* behaviour where `removeTool` is a graceful operation.
|
|
105
|
+
*/
|
|
106
|
+
unregister(name: string): void;
|
|
107
|
+
/** Alias for {@link unregister} — available for symmetry with `register`. */
|
|
108
|
+
deregister(name: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Convert all registered tools to the {@link LLMToolDef} format used by LLM
|
|
111
|
+
* adapters. This is the primary method called by the agent runner before
|
|
112
|
+
* each LLM API call.
|
|
113
|
+
*/
|
|
114
|
+
toToolDefs(): LLMToolDef[];
|
|
115
|
+
/**
|
|
116
|
+
* Convert all registered tools to the Anthropic-style `input_schema`
|
|
117
|
+
* format. Prefer {@link toToolDefs} for normal use; this method is exposed
|
|
118
|
+
* for callers that construct their own API payloads.
|
|
119
|
+
*/
|
|
120
|
+
toLLMTools(): Array<{
|
|
121
|
+
name: string;
|
|
122
|
+
description: string;
|
|
123
|
+
input_schema: {
|
|
124
|
+
type: 'object';
|
|
125
|
+
properties: Record<string, JSONSchemaProperty>;
|
|
126
|
+
required?: string[];
|
|
127
|
+
};
|
|
128
|
+
}>;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Convert a Zod schema to a plain JSON Schema object suitable for inclusion
|
|
132
|
+
* in LLM API calls.
|
|
133
|
+
*
|
|
134
|
+
* Supported Zod types:
|
|
135
|
+
* z.string(), z.number(), z.boolean(), z.enum(), z.array(), z.object(),
|
|
136
|
+
* z.optional(), z.union(), z.literal(), z.describe(), z.nullable(),
|
|
137
|
+
* z.default(), z.intersection(), z.discriminatedUnion(), z.record(),
|
|
138
|
+
* z.tuple(), z.any(), z.unknown(), z.never(), z.effects() (transforms)
|
|
139
|
+
*
|
|
140
|
+
* Unsupported types fall back to `{}` (any) which is still valid JSON Schema.
|
|
141
|
+
*/
|
|
142
|
+
export declare function zodToJsonSchema(schema: ZodSchema): Record<string, unknown>;
|
|
143
|
+
//# sourceMappingURL=framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../src/tool/framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definition framework for open-multi-agent.
|
|
3
|
+
*
|
|
4
|
+
* Provides the core primitives for declaring, registering, and converting
|
|
5
|
+
* tools to the JSON Schema format that LLM APIs expect.
|
|
6
|
+
*
|
|
7
|
+
* Types shared with the rest of the framework (`ToolDefinition`, `ToolResult`,
|
|
8
|
+
* `ToolUseContext`) are imported from `../types` to ensure a single source of
|
|
9
|
+
* truth. This file re-exports them for the convenience of downstream callers
|
|
10
|
+
* who only need to import from `tool/framework`.
|
|
11
|
+
*/
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// defineTool
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Define a typed tool. This is the single entry-point for creating tools
|
|
17
|
+
* that can be registered with a {@link ToolRegistry}.
|
|
18
|
+
*
|
|
19
|
+
* The returned object satisfies the {@link ToolDefinition} interface imported
|
|
20
|
+
* from `../types`.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const echoTool = defineTool({
|
|
25
|
+
* name: 'echo',
|
|
26
|
+
* description: 'Echo the input message back to the caller.',
|
|
27
|
+
* inputSchema: z.object({ message: z.string() }),
|
|
28
|
+
* execute: async ({ message }) => ({
|
|
29
|
+
* data: message,
|
|
30
|
+
* isError: false,
|
|
31
|
+
* }),
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function defineTool(config) {
|
|
36
|
+
return {
|
|
37
|
+
name: config.name,
|
|
38
|
+
description: config.description,
|
|
39
|
+
inputSchema: config.inputSchema,
|
|
40
|
+
execute: config.execute,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// ToolRegistry
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Registry that holds a set of named tools and can produce the JSON Schema
|
|
48
|
+
* representation expected by LLM APIs (Anthropic, OpenAI, etc.).
|
|
49
|
+
*/
|
|
50
|
+
export class ToolRegistry {
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
+
tools = new Map();
|
|
53
|
+
/**
|
|
54
|
+
* Add a tool to the registry. Throws if a tool with the same name has
|
|
55
|
+
* already been registered — prevents silent overwrites.
|
|
56
|
+
*/
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
register(tool) {
|
|
59
|
+
if (this.tools.has(tool.name)) {
|
|
60
|
+
throw new Error(`ToolRegistry: a tool named "${tool.name}" is already registered. ` +
|
|
61
|
+
'Use a unique name or deregister the existing one first.');
|
|
62
|
+
}
|
|
63
|
+
this.tools.set(tool.name, tool);
|
|
64
|
+
}
|
|
65
|
+
/** Return a tool by name, or `undefined` if not found. */
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
67
|
+
get(name) {
|
|
68
|
+
return this.tools.get(name);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Return all registered tool definitions as an array.
|
|
72
|
+
*
|
|
73
|
+
* Callers that only need names can do `registry.list().map(t => t.name)`.
|
|
74
|
+
* This matches the agent's `getTools()` pattern.
|
|
75
|
+
*/
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
list() {
|
|
78
|
+
return Array.from(this.tools.values());
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Return all registered tool definitions as an array.
|
|
82
|
+
* Alias for {@link list} — available for callers that prefer explicit naming.
|
|
83
|
+
*/
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
getAll() {
|
|
86
|
+
return Array.from(this.tools.values());
|
|
87
|
+
}
|
|
88
|
+
/** Return true when a tool with the given name is registered. */
|
|
89
|
+
has(name) {
|
|
90
|
+
return this.tools.has(name);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove a tool by name.
|
|
94
|
+
* No-op if the tool was not registered — matches the agent's expected
|
|
95
|
+
* behaviour where `removeTool` is a graceful operation.
|
|
96
|
+
*/
|
|
97
|
+
unregister(name) {
|
|
98
|
+
this.tools.delete(name);
|
|
99
|
+
}
|
|
100
|
+
/** Alias for {@link unregister} — available for symmetry with `register`. */
|
|
101
|
+
deregister(name) {
|
|
102
|
+
this.tools.delete(name);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Convert all registered tools to the {@link LLMToolDef} format used by LLM
|
|
106
|
+
* adapters. This is the primary method called by the agent runner before
|
|
107
|
+
* each LLM API call.
|
|
108
|
+
*/
|
|
109
|
+
toToolDefs() {
|
|
110
|
+
return Array.from(this.tools.values()).map((tool) => {
|
|
111
|
+
const schema = zodToJsonSchema(tool.inputSchema);
|
|
112
|
+
return {
|
|
113
|
+
name: tool.name,
|
|
114
|
+
description: tool.description,
|
|
115
|
+
inputSchema: schema,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Convert all registered tools to the Anthropic-style `input_schema`
|
|
121
|
+
* format. Prefer {@link toToolDefs} for normal use; this method is exposed
|
|
122
|
+
* for callers that construct their own API payloads.
|
|
123
|
+
*/
|
|
124
|
+
toLLMTools() {
|
|
125
|
+
return Array.from(this.tools.values()).map((tool) => {
|
|
126
|
+
const schema = zodToJsonSchema(tool.inputSchema);
|
|
127
|
+
return {
|
|
128
|
+
name: tool.name,
|
|
129
|
+
description: tool.description,
|
|
130
|
+
input_schema: {
|
|
131
|
+
type: 'object',
|
|
132
|
+
properties: schema.properties ?? {},
|
|
133
|
+
...(schema.required !== undefined
|
|
134
|
+
? { required: schema.required }
|
|
135
|
+
: {}),
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// zodToJsonSchema
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
/**
|
|
145
|
+
* Convert a Zod schema to a plain JSON Schema object suitable for inclusion
|
|
146
|
+
* in LLM API calls.
|
|
147
|
+
*
|
|
148
|
+
* Supported Zod types:
|
|
149
|
+
* z.string(), z.number(), z.boolean(), z.enum(), z.array(), z.object(),
|
|
150
|
+
* z.optional(), z.union(), z.literal(), z.describe(), z.nullable(),
|
|
151
|
+
* z.default(), z.intersection(), z.discriminatedUnion(), z.record(),
|
|
152
|
+
* z.tuple(), z.any(), z.unknown(), z.never(), z.effects() (transforms)
|
|
153
|
+
*
|
|
154
|
+
* Unsupported types fall back to `{}` (any) which is still valid JSON Schema.
|
|
155
|
+
*/
|
|
156
|
+
export function zodToJsonSchema(schema) {
|
|
157
|
+
return convertZodType(schema);
|
|
158
|
+
}
|
|
159
|
+
// Internal recursive converter. We access Zod's internal `_def` structure
|
|
160
|
+
// because Zod v3 does not ship a first-class JSON Schema exporter.
|
|
161
|
+
function convertZodType(schema) {
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
163
|
+
const def = schema._def;
|
|
164
|
+
const description = def.description;
|
|
165
|
+
const withDesc = (result) => description !== undefined ? { ...result, description } : result;
|
|
166
|
+
switch (def.typeName) {
|
|
167
|
+
// -----------------------------------------------------------------------
|
|
168
|
+
// Primitives
|
|
169
|
+
// -----------------------------------------------------------------------
|
|
170
|
+
case ZodTypeName.ZodString:
|
|
171
|
+
return withDesc({ type: 'string' });
|
|
172
|
+
case ZodTypeName.ZodNumber:
|
|
173
|
+
return withDesc({ type: 'number' });
|
|
174
|
+
case ZodTypeName.ZodBigInt:
|
|
175
|
+
return withDesc({ type: 'integer' });
|
|
176
|
+
case ZodTypeName.ZodBoolean:
|
|
177
|
+
return withDesc({ type: 'boolean' });
|
|
178
|
+
case ZodTypeName.ZodNull:
|
|
179
|
+
return withDesc({ type: 'null' });
|
|
180
|
+
case ZodTypeName.ZodUndefined:
|
|
181
|
+
return withDesc({ type: 'null' });
|
|
182
|
+
case ZodTypeName.ZodDate:
|
|
183
|
+
return withDesc({ type: 'string', format: 'date-time' });
|
|
184
|
+
// -----------------------------------------------------------------------
|
|
185
|
+
// Literals
|
|
186
|
+
// -----------------------------------------------------------------------
|
|
187
|
+
case ZodTypeName.ZodLiteral: {
|
|
188
|
+
const literalDef = def;
|
|
189
|
+
return withDesc({ const: literalDef.value });
|
|
190
|
+
}
|
|
191
|
+
// -----------------------------------------------------------------------
|
|
192
|
+
// Enums
|
|
193
|
+
// -----------------------------------------------------------------------
|
|
194
|
+
case ZodTypeName.ZodEnum: {
|
|
195
|
+
const enumDef = def;
|
|
196
|
+
return withDesc({ type: 'string', enum: enumDef.values });
|
|
197
|
+
}
|
|
198
|
+
case ZodTypeName.ZodNativeEnum: {
|
|
199
|
+
const nativeEnumDef = def;
|
|
200
|
+
const values = Object.values(nativeEnumDef.values).filter((v) => typeof v === 'string' || typeof v === 'number');
|
|
201
|
+
return withDesc({ enum: values });
|
|
202
|
+
}
|
|
203
|
+
// -----------------------------------------------------------------------
|
|
204
|
+
// Arrays
|
|
205
|
+
// -----------------------------------------------------------------------
|
|
206
|
+
case ZodTypeName.ZodArray: {
|
|
207
|
+
const arrayDef = def;
|
|
208
|
+
return withDesc({
|
|
209
|
+
type: 'array',
|
|
210
|
+
items: convertZodType(arrayDef.type),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
case ZodTypeName.ZodTuple: {
|
|
214
|
+
const tupleDef = def;
|
|
215
|
+
return withDesc({
|
|
216
|
+
type: 'array',
|
|
217
|
+
prefixItems: tupleDef.items.map(convertZodType),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// -----------------------------------------------------------------------
|
|
221
|
+
// Objects
|
|
222
|
+
// -----------------------------------------------------------------------
|
|
223
|
+
case ZodTypeName.ZodObject: {
|
|
224
|
+
const objectDef = def;
|
|
225
|
+
const properties = {};
|
|
226
|
+
const required = [];
|
|
227
|
+
for (const [key, value] of Object.entries(objectDef.shape())) {
|
|
228
|
+
properties[key] = convertZodType(value);
|
|
229
|
+
const innerDef = value._def;
|
|
230
|
+
const isOptional = innerDef.typeName === ZodTypeName.ZodOptional ||
|
|
231
|
+
innerDef.typeName === ZodTypeName.ZodDefault ||
|
|
232
|
+
innerDef.typeName === ZodTypeName.ZodNullable;
|
|
233
|
+
if (!isOptional) {
|
|
234
|
+
required.push(key);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const result = { type: 'object', properties };
|
|
238
|
+
if (required.length > 0)
|
|
239
|
+
result.required = required;
|
|
240
|
+
return withDesc(result);
|
|
241
|
+
}
|
|
242
|
+
case ZodTypeName.ZodRecord: {
|
|
243
|
+
const recordDef = def;
|
|
244
|
+
return withDesc({
|
|
245
|
+
type: 'object',
|
|
246
|
+
additionalProperties: convertZodType(recordDef.valueType),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// -----------------------------------------------------------------------
|
|
250
|
+
// Optional / Nullable / Default
|
|
251
|
+
// -----------------------------------------------------------------------
|
|
252
|
+
case ZodTypeName.ZodOptional: {
|
|
253
|
+
const optionalDef = def;
|
|
254
|
+
const inner = convertZodType(optionalDef.innerType);
|
|
255
|
+
return description !== undefined ? { ...inner, description } : inner;
|
|
256
|
+
}
|
|
257
|
+
case ZodTypeName.ZodNullable: {
|
|
258
|
+
const nullableDef = def;
|
|
259
|
+
const inner = convertZodType(nullableDef.innerType);
|
|
260
|
+
const type = inner.type;
|
|
261
|
+
if (typeof type === 'string') {
|
|
262
|
+
return withDesc({ ...inner, type: [type, 'null'] });
|
|
263
|
+
}
|
|
264
|
+
return withDesc({ anyOf: [inner, { type: 'null' }] });
|
|
265
|
+
}
|
|
266
|
+
case ZodTypeName.ZodDefault: {
|
|
267
|
+
const defaultDef = def;
|
|
268
|
+
const inner = convertZodType(defaultDef.innerType);
|
|
269
|
+
return withDesc({ ...inner, default: defaultDef.defaultValue() });
|
|
270
|
+
}
|
|
271
|
+
// -----------------------------------------------------------------------
|
|
272
|
+
// Union / Intersection / Discriminated Union
|
|
273
|
+
// -----------------------------------------------------------------------
|
|
274
|
+
case ZodTypeName.ZodUnion: {
|
|
275
|
+
const unionDef = def;
|
|
276
|
+
const options = unionDef.options.map(convertZodType);
|
|
277
|
+
return withDesc({ anyOf: options });
|
|
278
|
+
}
|
|
279
|
+
case ZodTypeName.ZodDiscriminatedUnion: {
|
|
280
|
+
const duDef = def;
|
|
281
|
+
const options = duDef.options.map(convertZodType);
|
|
282
|
+
return withDesc({ anyOf: options });
|
|
283
|
+
}
|
|
284
|
+
case ZodTypeName.ZodIntersection: {
|
|
285
|
+
const intDef = def;
|
|
286
|
+
return withDesc({
|
|
287
|
+
allOf: [convertZodType(intDef.left), convertZodType(intDef.right)],
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
// -----------------------------------------------------------------------
|
|
291
|
+
// Wrappers that forward to their inner type
|
|
292
|
+
// -----------------------------------------------------------------------
|
|
293
|
+
case ZodTypeName.ZodEffects: {
|
|
294
|
+
const effectsDef = def;
|
|
295
|
+
const inner = convertZodType(effectsDef.schema);
|
|
296
|
+
return description !== undefined ? { ...inner, description } : inner;
|
|
297
|
+
}
|
|
298
|
+
case ZodTypeName.ZodBranded: {
|
|
299
|
+
const brandedDef = def;
|
|
300
|
+
return withDesc(convertZodType(brandedDef.type));
|
|
301
|
+
}
|
|
302
|
+
case ZodTypeName.ZodReadonly: {
|
|
303
|
+
const readonlyDef = def;
|
|
304
|
+
return withDesc(convertZodType(readonlyDef.innerType));
|
|
305
|
+
}
|
|
306
|
+
case ZodTypeName.ZodCatch: {
|
|
307
|
+
const catchDef = def;
|
|
308
|
+
return withDesc(convertZodType(catchDef.innerType));
|
|
309
|
+
}
|
|
310
|
+
case ZodTypeName.ZodPipeline: {
|
|
311
|
+
const pipelineDef = def;
|
|
312
|
+
return withDesc(convertZodType(pipelineDef.in));
|
|
313
|
+
}
|
|
314
|
+
// -----------------------------------------------------------------------
|
|
315
|
+
// Any / Unknown – JSON Schema wildcard
|
|
316
|
+
// -----------------------------------------------------------------------
|
|
317
|
+
case ZodTypeName.ZodAny:
|
|
318
|
+
case ZodTypeName.ZodUnknown:
|
|
319
|
+
return withDesc({});
|
|
320
|
+
case ZodTypeName.ZodNever:
|
|
321
|
+
return withDesc({ not: {} });
|
|
322
|
+
case ZodTypeName.ZodVoid:
|
|
323
|
+
return withDesc({ type: 'null' });
|
|
324
|
+
// -----------------------------------------------------------------------
|
|
325
|
+
// Fallback
|
|
326
|
+
// -----------------------------------------------------------------------
|
|
327
|
+
default:
|
|
328
|
+
return withDesc({});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
// Internal Zod type-name enum (mirrors Zod's internal ZodFirstPartyTypeKind)
|
|
333
|
+
// ---------------------------------------------------------------------------
|
|
334
|
+
var ZodTypeName;
|
|
335
|
+
(function (ZodTypeName) {
|
|
336
|
+
ZodTypeName["ZodString"] = "ZodString";
|
|
337
|
+
ZodTypeName["ZodNumber"] = "ZodNumber";
|
|
338
|
+
ZodTypeName["ZodBigInt"] = "ZodBigInt";
|
|
339
|
+
ZodTypeName["ZodBoolean"] = "ZodBoolean";
|
|
340
|
+
ZodTypeName["ZodDate"] = "ZodDate";
|
|
341
|
+
ZodTypeName["ZodUndefined"] = "ZodUndefined";
|
|
342
|
+
ZodTypeName["ZodNull"] = "ZodNull";
|
|
343
|
+
ZodTypeName["ZodAny"] = "ZodAny";
|
|
344
|
+
ZodTypeName["ZodUnknown"] = "ZodUnknown";
|
|
345
|
+
ZodTypeName["ZodNever"] = "ZodNever";
|
|
346
|
+
ZodTypeName["ZodVoid"] = "ZodVoid";
|
|
347
|
+
ZodTypeName["ZodArray"] = "ZodArray";
|
|
348
|
+
ZodTypeName["ZodObject"] = "ZodObject";
|
|
349
|
+
ZodTypeName["ZodUnion"] = "ZodUnion";
|
|
350
|
+
ZodTypeName["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
|
|
351
|
+
ZodTypeName["ZodIntersection"] = "ZodIntersection";
|
|
352
|
+
ZodTypeName["ZodTuple"] = "ZodTuple";
|
|
353
|
+
ZodTypeName["ZodRecord"] = "ZodRecord";
|
|
354
|
+
ZodTypeName["ZodMap"] = "ZodMap";
|
|
355
|
+
ZodTypeName["ZodSet"] = "ZodSet";
|
|
356
|
+
ZodTypeName["ZodFunction"] = "ZodFunction";
|
|
357
|
+
ZodTypeName["ZodLazy"] = "ZodLazy";
|
|
358
|
+
ZodTypeName["ZodLiteral"] = "ZodLiteral";
|
|
359
|
+
ZodTypeName["ZodEnum"] = "ZodEnum";
|
|
360
|
+
ZodTypeName["ZodEffects"] = "ZodEffects";
|
|
361
|
+
ZodTypeName["ZodNativeEnum"] = "ZodNativeEnum";
|
|
362
|
+
ZodTypeName["ZodOptional"] = "ZodOptional";
|
|
363
|
+
ZodTypeName["ZodNullable"] = "ZodNullable";
|
|
364
|
+
ZodTypeName["ZodDefault"] = "ZodDefault";
|
|
365
|
+
ZodTypeName["ZodCatch"] = "ZodCatch";
|
|
366
|
+
ZodTypeName["ZodPromise"] = "ZodPromise";
|
|
367
|
+
ZodTypeName["ZodBranded"] = "ZodBranded";
|
|
368
|
+
ZodTypeName["ZodPipeline"] = "ZodPipeline";
|
|
369
|
+
ZodTypeName["ZodReadonly"] = "ZodReadonly";
|
|
370
|
+
})(ZodTypeName || (ZodTypeName = {}));
|
|
371
|
+
//# sourceMappingURL=framework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/tool/framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoCH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CAAS,MAKlC;IACC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB,8DAA8D;IAC7C,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAA;IAE/D;;;OAGG;IACH,8DAA8D;IAC9D,QAAQ,CAAC,IAAyB;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,CAAC,IAAI,2BAA2B;gBACjE,yDAAyD,CAC5D,CAAA;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,0DAA0D;IAC1D,8DAA8D;IAC9D,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,8DAA8D;IAC9D,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACxC,CAAC;IAED;;;OAGG;IACH,8DAA8D;IAC9D,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,iEAAiE;IACjE,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,6EAA6E;IAC7E,UAAU,CAAC,IAAY;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAChD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,MAAM;aACC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,UAAU;QASR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAChD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAiB;oBACvB,UAAU,EACP,MAAM,CAAC,UAAiD,IAAI,EAAE;oBACjE,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;wBAC/B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAoB,EAAE;wBAC3C,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,2EAA2E;AAC3E,mEAAmE;AACnE,SAAS,cAAc,CAAC,MAAiB;IACvC,8DAA8D;IAC9D,MAAM,GAAG,GAAI,MAAc,CAAC,IAAkB,CAAA;IAE9C,MAAM,WAAW,GAAuB,GAAG,CAAC,WAAW,CAAA;IAEvD,MAAM,QAAQ,GAAG,CAAC,MAA+B,EAA2B,EAAE,CAC5E,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;IAEjE,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,0EAA0E;QAC1E,aAAa;QACb,0EAA0E;QAC1E,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAErC,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAErC,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAEtC,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QAEtC,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAEnC,KAAK,WAAW,CAAC,YAAY;YAC3B,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAEnC,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;QAE1D,0EAA0E;QAC1E,WAAW;QACX,0EAA0E;QAC1E,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,GAAoB,CAAA;YACvC,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,0EAA0E;QAC1E,QAAQ;QACR,0EAA0E;QAC1E,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG,GAAiB,CAAA;YACjC,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,KAAK,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;YAC/B,MAAM,aAAa,GAAG,GAAuB,CAAA;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAgB,CAAC,CAAC,MAAM,CACjE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,CACtD,CAAA;YACD,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QACnC,CAAC;QAED,0EAA0E;QAC1E,SAAS;QACT,0EAA0E;QAC1E,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAkB,CAAA;YACnC,OAAO,QAAQ,CAAC;gBACd,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;aACrC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAkB,CAAA;YACnC,OAAO,QAAQ,CAAC;gBACd,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;aAChD,CAAC,CAAA;QACJ,CAAC;QAED,0EAA0E;QAC1E,UAAU;QACV,0EAA0E;QAC1E,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,GAAmB,CAAA;YACrC,MAAM,UAAU,GAA4B,EAAE,CAAA;YAC9C,MAAM,QAAQ,GAAa,EAAE,CAAA;YAE7B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC7D,UAAU,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAkB,CAAC,CAAA;gBAEpD,MAAM,QAAQ,GAAK,KAAuD,CAAC,IAAI,CAAA;gBAC/E,MAAM,UAAU,GACd,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,WAAW;oBAC7C,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,UAAU;oBAC5C,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,WAAW,CAAA;gBAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;YACtE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAA;YACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;QAED,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,GAAmB,CAAA;YACrC,OAAO,QAAQ,CAAC;gBACd,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;aAC1D,CAAC,CAAA;QACJ,CAAC;QAED,0EAA0E;QAC1E,gCAAgC;QAChC,0EAA0E;QAC1E,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7B,MAAM,WAAW,GAAG,GAAqB,CAAA;YACzC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;YACnD,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QACtE,CAAC;QAED,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7B,MAAM,WAAW,GAAG,GAAqB,CAAA;YACzC,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;YACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;YACrD,CAAC;YACD,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACvD,CAAC;QAED,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,GAAoB,CAAA;YACvC,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAClD,OAAO,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QACnE,CAAC;QAED,0EAA0E;QAC1E,6CAA6C;QAC7C,0EAA0E;QAC1E,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAkB,CAAA;YACnC,MAAM,OAAO,GAAI,QAAQ,CAAC,OAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YACrE,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,KAAK,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,GAA+B,CAAA;YAC7C,MAAM,OAAO,GAAI,KAAK,CAAC,OAAuB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;YAClE,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;QACrC,CAAC;QAED,KAAK,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,GAAyB,CAAA;YACxC,OAAO,QAAQ,CAAC;gBACd,KAAK,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACnE,CAAC,CAAA;QACJ,CAAC;QAED,0EAA0E;QAC1E,4CAA4C;QAC5C,0EAA0E;QAC1E,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,GAAoB,CAAA;YACvC,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAC/C,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;QACtE,CAAC;QAED,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5B,MAAM,UAAU,GAAG,GAAoB,CAAA;YACvC,OAAO,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,CAAC;QAED,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7B,MAAM,WAAW,GAAG,GAAqB,CAAA;YACzC,OAAO,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAA;QACxD,CAAC;QAED,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,GAAkB,CAAA;YACnC,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QACrD,CAAC;QAED,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7B,MAAM,WAAW,GAAG,GAAqB,CAAA;YACzC,OAAO,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;QACjD,CAAC;QAED,0EAA0E;QAC1E,uCAAuC;QACvC,0EAA0E;QAC1E,KAAK,WAAW,CAAC,MAAM,CAAC;QACxB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;QAErB,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;QAE9B,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAEnC,0EAA0E;QAC1E,WAAW;QACX,0EAA0E;QAC1E;YACE,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAE9E,IAAW,WAmCV;AAnCD,WAAW,WAAW;IACpB,sCAAuB,CAAA;IACvB,sCAAuB,CAAA;IACvB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;IACnB,4CAA6B,CAAA;IAC7B,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,wCAAyB,CAAA;IACzB,oCAAqB,CAAA;IACrB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,oCAAqB,CAAA;IACrB,8DAA+C,CAAA;IAC/C,kDAAmC,CAAA;IACnC,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,0CAA2B,CAAA;IAC3B,kCAAmB,CAAA;IACnB,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;IACnB,wCAAyB,CAAA;IACzB,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;IAC3B,0CAA2B,CAAA;IAC3B,wCAAyB,CAAA;IACzB,oCAAqB,CAAA;IACrB,wCAAyB,CAAA;IACzB,wCAAyB,CAAA;IACzB,0CAA2B,CAAA;IAC3B,0CAA2B,CAAA;AAC7B,CAAC,EAnCU,WAAW,KAAX,WAAW,QAmCrB"}
|