@open-multi-agent/core 1.4.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.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +373 -0
  3. package/dist/agent/agent.d.ts +153 -0
  4. package/dist/agent/agent.d.ts.map +1 -0
  5. package/dist/agent/agent.js +559 -0
  6. package/dist/agent/agent.js.map +1 -0
  7. package/dist/agent/loop-detector.d.ts +39 -0
  8. package/dist/agent/loop-detector.d.ts.map +1 -0
  9. package/dist/agent/loop-detector.js +122 -0
  10. package/dist/agent/loop-detector.js.map +1 -0
  11. package/dist/agent/pool.d.ts +158 -0
  12. package/dist/agent/pool.d.ts.map +1 -0
  13. package/dist/agent/pool.js +320 -0
  14. package/dist/agent/pool.js.map +1 -0
  15. package/dist/agent/runner.d.ts +242 -0
  16. package/dist/agent/runner.d.ts.map +1 -0
  17. package/dist/agent/runner.js +943 -0
  18. package/dist/agent/runner.js.map +1 -0
  19. package/dist/agent/structured-output.d.ts +33 -0
  20. package/dist/agent/structured-output.d.ts.map +1 -0
  21. package/dist/agent/structured-output.js +116 -0
  22. package/dist/agent/structured-output.js.map +1 -0
  23. package/dist/cli/oma.d.ts +30 -0
  24. package/dist/cli/oma.d.ts.map +1 -0
  25. package/dist/cli/oma.js +433 -0
  26. package/dist/cli/oma.js.map +1 -0
  27. package/dist/dashboard/layout-tasks.d.ts +23 -0
  28. package/dist/dashboard/layout-tasks.d.ts.map +1 -0
  29. package/dist/dashboard/layout-tasks.js +79 -0
  30. package/dist/dashboard/layout-tasks.js.map +1 -0
  31. package/dist/dashboard/render-team-run-dashboard.d.ts +11 -0
  32. package/dist/dashboard/render-team-run-dashboard.d.ts.map +1 -0
  33. package/dist/dashboard/render-team-run-dashboard.js +456 -0
  34. package/dist/dashboard/render-team-run-dashboard.js.map +1 -0
  35. package/dist/errors.d.ts +14 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +20 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/index.d.ts +79 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +92 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/llm/adapter.d.ts +54 -0
  44. package/dist/llm/adapter.d.ts.map +1 -0
  45. package/dist/llm/adapter.js +101 -0
  46. package/dist/llm/adapter.js.map +1 -0
  47. package/dist/llm/anthropic.d.ts +57 -0
  48. package/dist/llm/anthropic.d.ts.map +1 -0
  49. package/dist/llm/anthropic.js +432 -0
  50. package/dist/llm/anthropic.js.map +1 -0
  51. package/dist/llm/azure-openai.d.ts +74 -0
  52. package/dist/llm/azure-openai.d.ts.map +1 -0
  53. package/dist/llm/azure-openai.js +267 -0
  54. package/dist/llm/azure-openai.js.map +1 -0
  55. package/dist/llm/bedrock.d.ts +41 -0
  56. package/dist/llm/bedrock.d.ts.map +1 -0
  57. package/dist/llm/bedrock.js +345 -0
  58. package/dist/llm/bedrock.js.map +1 -0
  59. package/dist/llm/copilot.d.ts +92 -0
  60. package/dist/llm/copilot.d.ts.map +1 -0
  61. package/dist/llm/copilot.js +433 -0
  62. package/dist/llm/copilot.js.map +1 -0
  63. package/dist/llm/deepseek.d.ts +21 -0
  64. package/dist/llm/deepseek.d.ts.map +1 -0
  65. package/dist/llm/deepseek.js +24 -0
  66. package/dist/llm/deepseek.js.map +1 -0
  67. package/dist/llm/gemini.d.ts +65 -0
  68. package/dist/llm/gemini.d.ts.map +1 -0
  69. package/dist/llm/gemini.js +427 -0
  70. package/dist/llm/gemini.js.map +1 -0
  71. package/dist/llm/grok.d.ts +21 -0
  72. package/dist/llm/grok.d.ts.map +1 -0
  73. package/dist/llm/grok.js +24 -0
  74. package/dist/llm/grok.js.map +1 -0
  75. package/dist/llm/minimax.d.ts +21 -0
  76. package/dist/llm/minimax.d.ts.map +1 -0
  77. package/dist/llm/minimax.js +24 -0
  78. package/dist/llm/minimax.js.map +1 -0
  79. package/dist/llm/openai-common.d.ts +65 -0
  80. package/dist/llm/openai-common.d.ts.map +1 -0
  81. package/dist/llm/openai-common.js +286 -0
  82. package/dist/llm/openai-common.js.map +1 -0
  83. package/dist/llm/openai.d.ts +63 -0
  84. package/dist/llm/openai.d.ts.map +1 -0
  85. package/dist/llm/openai.js +256 -0
  86. package/dist/llm/openai.js.map +1 -0
  87. package/dist/llm/qiniu.d.ts +21 -0
  88. package/dist/llm/qiniu.d.ts.map +1 -0
  89. package/dist/llm/qiniu.js +24 -0
  90. package/dist/llm/qiniu.js.map +1 -0
  91. package/dist/mcp.d.ts +3 -0
  92. package/dist/mcp.d.ts.map +1 -0
  93. package/dist/mcp.js +2 -0
  94. package/dist/mcp.js.map +1 -0
  95. package/dist/memory/shared.d.ts +162 -0
  96. package/dist/memory/shared.d.ts.map +1 -0
  97. package/dist/memory/shared.js +294 -0
  98. package/dist/memory/shared.js.map +1 -0
  99. package/dist/memory/store.d.ts +72 -0
  100. package/dist/memory/store.d.ts.map +1 -0
  101. package/dist/memory/store.js +121 -0
  102. package/dist/memory/store.js.map +1 -0
  103. package/dist/orchestrator/orchestrator.d.ts +245 -0
  104. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  105. package/dist/orchestrator/orchestrator.js +1400 -0
  106. package/dist/orchestrator/orchestrator.js.map +1 -0
  107. package/dist/orchestrator/scheduler.d.ts +112 -0
  108. package/dist/orchestrator/scheduler.d.ts.map +1 -0
  109. package/dist/orchestrator/scheduler.js +256 -0
  110. package/dist/orchestrator/scheduler.js.map +1 -0
  111. package/dist/task/queue.d.ts +191 -0
  112. package/dist/task/queue.d.ts.map +1 -0
  113. package/dist/task/queue.js +408 -0
  114. package/dist/task/queue.js.map +1 -0
  115. package/dist/task/task.d.ts +90 -0
  116. package/dist/task/task.d.ts.map +1 -0
  117. package/dist/task/task.js +206 -0
  118. package/dist/task/task.js.map +1 -0
  119. package/dist/team/messaging.d.ts +106 -0
  120. package/dist/team/messaging.d.ts.map +1 -0
  121. package/dist/team/messaging.js +183 -0
  122. package/dist/team/messaging.js.map +1 -0
  123. package/dist/team/team.d.ts +141 -0
  124. package/dist/team/team.d.ts.map +1 -0
  125. package/dist/team/team.js +293 -0
  126. package/dist/team/team.js.map +1 -0
  127. package/dist/tool/built-in/bash.d.ts +12 -0
  128. package/dist/tool/built-in/bash.d.ts.map +1 -0
  129. package/dist/tool/built-in/bash.js +133 -0
  130. package/dist/tool/built-in/bash.js.map +1 -0
  131. package/dist/tool/built-in/delegate.d.ts +29 -0
  132. package/dist/tool/built-in/delegate.d.ts.map +1 -0
  133. package/dist/tool/built-in/delegate.js +92 -0
  134. package/dist/tool/built-in/delegate.js.map +1 -0
  135. package/dist/tool/built-in/file-edit.d.ts +14 -0
  136. package/dist/tool/built-in/file-edit.d.ts.map +1 -0
  137. package/dist/tool/built-in/file-edit.js +130 -0
  138. package/dist/tool/built-in/file-edit.js.map +1 -0
  139. package/dist/tool/built-in/file-read.d.ts +12 -0
  140. package/dist/tool/built-in/file-read.d.ts.map +1 -0
  141. package/dist/tool/built-in/file-read.js +82 -0
  142. package/dist/tool/built-in/file-read.js.map +1 -0
  143. package/dist/tool/built-in/file-write.d.ts +11 -0
  144. package/dist/tool/built-in/file-write.d.ts.map +1 -0
  145. package/dist/tool/built-in/file-write.js +70 -0
  146. package/dist/tool/built-in/file-write.js.map +1 -0
  147. package/dist/tool/built-in/fs-walk.d.ts +23 -0
  148. package/dist/tool/built-in/fs-walk.d.ts.map +1 -0
  149. package/dist/tool/built-in/fs-walk.js +78 -0
  150. package/dist/tool/built-in/fs-walk.js.map +1 -0
  151. package/dist/tool/built-in/glob.d.ts +12 -0
  152. package/dist/tool/built-in/glob.d.ts.map +1 -0
  153. package/dist/tool/built-in/glob.js +82 -0
  154. package/dist/tool/built-in/glob.js.map +1 -0
  155. package/dist/tool/built-in/grep.d.ts +15 -0
  156. package/dist/tool/built-in/grep.d.ts.map +1 -0
  157. package/dist/tool/built-in/grep.js +218 -0
  158. package/dist/tool/built-in/grep.js.map +1 -0
  159. package/dist/tool/built-in/index.d.ts +48 -0
  160. package/dist/tool/built-in/index.d.ts.map +1 -0
  161. package/dist/tool/built-in/index.js +56 -0
  162. package/dist/tool/built-in/index.js.map +1 -0
  163. package/dist/tool/executor.d.ts +100 -0
  164. package/dist/tool/executor.d.ts.map +1 -0
  165. package/dist/tool/executor.js +184 -0
  166. package/dist/tool/executor.js.map +1 -0
  167. package/dist/tool/framework.d.ts +167 -0
  168. package/dist/tool/framework.d.ts.map +1 -0
  169. package/dist/tool/framework.js +402 -0
  170. package/dist/tool/framework.js.map +1 -0
  171. package/dist/tool/mcp.d.ts +31 -0
  172. package/dist/tool/mcp.d.ts.map +1 -0
  173. package/dist/tool/mcp.js +175 -0
  174. package/dist/tool/mcp.js.map +1 -0
  175. package/dist/tool/text-tool-extractor.d.ts +32 -0
  176. package/dist/tool/text-tool-extractor.d.ts.map +1 -0
  177. package/dist/tool/text-tool-extractor.js +195 -0
  178. package/dist/tool/text-tool-extractor.js.map +1 -0
  179. package/dist/types.d.ts +916 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +8 -0
  182. package/dist/types.js.map +1 -0
  183. package/dist/utils/keywords.d.ts +18 -0
  184. package/dist/utils/keywords.d.ts.map +1 -0
  185. package/dist/utils/keywords.js +32 -0
  186. package/dist/utils/keywords.js.map +1 -0
  187. package/dist/utils/semaphore.d.ts +49 -0
  188. package/dist/utils/semaphore.d.ts.map +1 -0
  189. package/dist/utils/semaphore.js +89 -0
  190. package/dist/utils/semaphore.js.map +1 -0
  191. package/dist/utils/tokens.d.ts +7 -0
  192. package/dist/utils/tokens.d.ts.map +1 -0
  193. package/dist/utils/tokens.js +30 -0
  194. package/dist/utils/tokens.js.map +1 -0
  195. package/dist/utils/trace.d.ts +12 -0
  196. package/dist/utils/trace.d.ts.map +1 -0
  197. package/dist/utils/trace.js +30 -0
  198. package/dist/utils/trace.js.map +1 -0
  199. package/docs/DECISIONS.md +49 -0
  200. package/docs/cli.md +265 -0
  201. package/docs/context-management.md +24 -0
  202. package/docs/featured-partner.md +28 -0
  203. package/docs/observability.md +56 -0
  204. package/docs/providers.md +78 -0
  205. package/docs/shared-memory.md +27 -0
  206. package/docs/tool-configuration.md +152 -0
  207. package/package.json +96 -0
@@ -0,0 +1,167 @@
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
+ /**
73
+ * Optional runtime validator for `ToolResult.data`.
74
+ * When omitted, output validation is skipped.
75
+ *
76
+ * `ToolResult.data` is always a `string`, so the schema is fixed to
77
+ * `ZodSchema<string>` — use `z.string().refine(...)` / `z.string().regex(...)`
78
+ * (or similar) to enforce structural constraints on the serialised output.
79
+ */
80
+ outputSchema?: ZodSchema<string>;
81
+ /**
82
+ * Optional JSON Schema for the LLM (bypasses Zod → JSON Schema conversion).
83
+ */
84
+ llmInputSchema?: Record<string, unknown>;
85
+ /**
86
+ * Per-tool maximum output length in characters. When set, tool output
87
+ * exceeding this limit is truncated (head + tail with a marker in between).
88
+ * Takes priority over agent-level `maxToolOutputChars`.
89
+ */
90
+ maxOutputChars?: number;
91
+ execute: (input: TInput, context: ToolUseContext) => Promise<ToolResult>;
92
+ }): ToolDefinition<TInput>;
93
+ /**
94
+ * Registry that holds a set of named tools and can produce the JSON Schema
95
+ * representation expected by LLM APIs (Anthropic, OpenAI, etc.).
96
+ */
97
+ export declare class ToolRegistry {
98
+ private readonly tools;
99
+ private readonly runtimeToolNames;
100
+ /**
101
+ * Add a tool to the registry. Throws if a tool with the same name has
102
+ * already been registered — prevents silent overwrites.
103
+ */
104
+ register(tool: ToolDefinition<any>, options?: {
105
+ runtimeAdded?: boolean;
106
+ }): void;
107
+ /** Return a tool by name, or `undefined` if not found. */
108
+ get(name: string): ToolDefinition<any> | undefined;
109
+ /**
110
+ * Return all registered tool definitions as an array.
111
+ *
112
+ * Callers that only need names can do `registry.list().map(t => t.name)`.
113
+ * This matches the agent's `getTools()` pattern.
114
+ */
115
+ list(): ToolDefinition<any>[];
116
+ /**
117
+ * Return all registered tool definitions as an array.
118
+ * Alias for {@link list} — available for callers that prefer explicit naming.
119
+ */
120
+ getAll(): ToolDefinition<any>[];
121
+ /** Return true when a tool with the given name is registered. */
122
+ has(name: string): boolean;
123
+ /**
124
+ * Remove a tool by name.
125
+ * No-op if the tool was not registered — matches the agent's expected
126
+ * behaviour where `removeTool` is a graceful operation.
127
+ */
128
+ unregister(name: string): void;
129
+ /** Alias for {@link unregister} — available for symmetry with `register`. */
130
+ deregister(name: string): void;
131
+ /**
132
+ * Convert all registered tools to the {@link LLMToolDef} format used by LLM
133
+ * adapters. This is the primary method called by the agent runner before
134
+ * each LLM API call.
135
+ */
136
+ toToolDefs(): LLMToolDef[];
137
+ /**
138
+ * Return only tools that were added dynamically at runtime (e.g. via
139
+ * `agent.addTool()`), in LLM definition format.
140
+ */
141
+ toRuntimeToolDefs(): LLMToolDef[];
142
+ /**
143
+ * Convert all registered tools to the Anthropic-style `input_schema`
144
+ * format. Prefer {@link toToolDefs} for normal use; this method is exposed
145
+ * for callers that construct their own API payloads.
146
+ */
147
+ toLLMTools(): Array<{
148
+ name: string;
149
+ description: string;
150
+ /** Anthropic-style tool input JSON Schema (`type` is usually `object`). */
151
+ input_schema: Record<string, unknown>;
152
+ }>;
153
+ }
154
+ /**
155
+ * Convert a Zod schema to a plain JSON Schema object suitable for inclusion
156
+ * in LLM API calls.
157
+ *
158
+ * Supported Zod types:
159
+ * z.string(), z.number(), z.boolean(), z.enum(), z.array(), z.object(),
160
+ * z.optional(), z.union(), z.literal(), z.describe(), z.nullable(),
161
+ * z.default(), z.intersection(), z.discriminatedUnion(), z.record(),
162
+ * z.tuple(), z.any(), z.unknown(), z.never(), z.effects() (transforms)
163
+ *
164
+ * Unsupported types fall back to `{}` (any) which is still valid JSON Schema.
165
+ */
166
+ export declare function zodToJsonSchema(schema: ZodSchema): Record<string, unknown>;
167
+ //# 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,402 @@
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
+ ...(config.outputSchema !== undefined
41
+ ? { outputSchema: config.outputSchema }
42
+ : {}),
43
+ ...(config.llmInputSchema !== undefined
44
+ ? { llmInputSchema: config.llmInputSchema }
45
+ : {}),
46
+ ...(config.maxOutputChars !== undefined
47
+ ? { maxOutputChars: config.maxOutputChars }
48
+ : {}),
49
+ execute: config.execute,
50
+ };
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // ToolRegistry
54
+ // ---------------------------------------------------------------------------
55
+ /**
56
+ * Registry that holds a set of named tools and can produce the JSON Schema
57
+ * representation expected by LLM APIs (Anthropic, OpenAI, etc.).
58
+ */
59
+ export class ToolRegistry {
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ tools = new Map();
62
+ runtimeToolNames = new Set();
63
+ /**
64
+ * Add a tool to the registry. Throws if a tool with the same name has
65
+ * already been registered — prevents silent overwrites.
66
+ */
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ register(tool, options) {
69
+ if (this.tools.has(tool.name)) {
70
+ throw new Error(`ToolRegistry: a tool named "${tool.name}" is already registered. ` +
71
+ 'Use a unique name or deregister the existing one first.');
72
+ }
73
+ this.tools.set(tool.name, tool);
74
+ if (options?.runtimeAdded === true) {
75
+ this.runtimeToolNames.add(tool.name);
76
+ }
77
+ }
78
+ /** Return a tool by name, or `undefined` if not found. */
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ get(name) {
81
+ return this.tools.get(name);
82
+ }
83
+ /**
84
+ * Return all registered tool definitions as an array.
85
+ *
86
+ * Callers that only need names can do `registry.list().map(t => t.name)`.
87
+ * This matches the agent's `getTools()` pattern.
88
+ */
89
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
90
+ list() {
91
+ return Array.from(this.tools.values());
92
+ }
93
+ /**
94
+ * Return all registered tool definitions as an array.
95
+ * Alias for {@link list} — available for callers that prefer explicit naming.
96
+ */
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ getAll() {
99
+ return Array.from(this.tools.values());
100
+ }
101
+ /** Return true when a tool with the given name is registered. */
102
+ has(name) {
103
+ return this.tools.has(name);
104
+ }
105
+ /**
106
+ * Remove a tool by name.
107
+ * No-op if the tool was not registered — matches the agent's expected
108
+ * behaviour where `removeTool` is a graceful operation.
109
+ */
110
+ unregister(name) {
111
+ this.tools.delete(name);
112
+ this.runtimeToolNames.delete(name);
113
+ }
114
+ /** Alias for {@link unregister} — available for symmetry with `register`. */
115
+ deregister(name) {
116
+ this.unregister(name);
117
+ }
118
+ /**
119
+ * Convert all registered tools to the {@link LLMToolDef} format used by LLM
120
+ * adapters. This is the primary method called by the agent runner before
121
+ * each LLM API call.
122
+ */
123
+ toToolDefs() {
124
+ return Array.from(this.tools.values()).map((tool) => {
125
+ const schema = tool.llmInputSchema ?? zodToJsonSchema(tool.inputSchema);
126
+ return {
127
+ name: tool.name,
128
+ description: tool.description,
129
+ inputSchema: schema,
130
+ };
131
+ });
132
+ }
133
+ /**
134
+ * Return only tools that were added dynamically at runtime (e.g. via
135
+ * `agent.addTool()`), in LLM definition format.
136
+ */
137
+ toRuntimeToolDefs() {
138
+ return this.toToolDefs().filter(tool => this.runtimeToolNames.has(tool.name));
139
+ }
140
+ /**
141
+ * Convert all registered tools to the Anthropic-style `input_schema`
142
+ * format. Prefer {@link toToolDefs} for normal use; this method is exposed
143
+ * for callers that construct their own API payloads.
144
+ */
145
+ toLLMTools() {
146
+ return Array.from(this.tools.values()).map((tool) => {
147
+ if (tool.llmInputSchema !== undefined) {
148
+ return {
149
+ name: tool.name,
150
+ description: tool.description,
151
+ input_schema: {
152
+ type: 'object',
153
+ ...tool.llmInputSchema,
154
+ },
155
+ };
156
+ }
157
+ const schema = zodToJsonSchema(tool.inputSchema);
158
+ return {
159
+ name: tool.name,
160
+ description: tool.description,
161
+ input_schema: {
162
+ type: 'object',
163
+ properties: schema.properties ?? {},
164
+ ...(schema.required !== undefined
165
+ ? { required: schema.required }
166
+ : {}),
167
+ },
168
+ };
169
+ });
170
+ }
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // zodToJsonSchema
174
+ // ---------------------------------------------------------------------------
175
+ /**
176
+ * Convert a Zod schema to a plain JSON Schema object suitable for inclusion
177
+ * in LLM API calls.
178
+ *
179
+ * Supported Zod types:
180
+ * z.string(), z.number(), z.boolean(), z.enum(), z.array(), z.object(),
181
+ * z.optional(), z.union(), z.literal(), z.describe(), z.nullable(),
182
+ * z.default(), z.intersection(), z.discriminatedUnion(), z.record(),
183
+ * z.tuple(), z.any(), z.unknown(), z.never(), z.effects() (transforms)
184
+ *
185
+ * Unsupported types fall back to `{}` (any) which is still valid JSON Schema.
186
+ */
187
+ export function zodToJsonSchema(schema) {
188
+ return convertZodType(schema);
189
+ }
190
+ // Internal recursive converter. We access Zod's internal `_def` structure
191
+ // because Zod v3 does not ship a first-class JSON Schema exporter.
192
+ function convertZodType(schema) {
193
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
194
+ const def = schema._def;
195
+ const description = def.description;
196
+ const withDesc = (result) => description !== undefined ? { ...result, description } : result;
197
+ switch (def.typeName) {
198
+ // -----------------------------------------------------------------------
199
+ // Primitives
200
+ // -----------------------------------------------------------------------
201
+ case ZodTypeName.ZodString:
202
+ return withDesc({ type: 'string' });
203
+ case ZodTypeName.ZodNumber:
204
+ return withDesc({ type: 'number' });
205
+ case ZodTypeName.ZodBigInt:
206
+ return withDesc({ type: 'integer' });
207
+ case ZodTypeName.ZodBoolean:
208
+ return withDesc({ type: 'boolean' });
209
+ case ZodTypeName.ZodNull:
210
+ return withDesc({ type: 'null' });
211
+ case ZodTypeName.ZodUndefined:
212
+ return withDesc({ type: 'null' });
213
+ case ZodTypeName.ZodDate:
214
+ return withDesc({ type: 'string', format: 'date-time' });
215
+ // -----------------------------------------------------------------------
216
+ // Literals
217
+ // -----------------------------------------------------------------------
218
+ case ZodTypeName.ZodLiteral: {
219
+ const literalDef = def;
220
+ return withDesc({ const: literalDef.value });
221
+ }
222
+ // -----------------------------------------------------------------------
223
+ // Enums
224
+ // -----------------------------------------------------------------------
225
+ case ZodTypeName.ZodEnum: {
226
+ const enumDef = def;
227
+ return withDesc({ type: 'string', enum: enumDef.values });
228
+ }
229
+ case ZodTypeName.ZodNativeEnum: {
230
+ const nativeEnumDef = def;
231
+ const values = Object.values(nativeEnumDef.values).filter((v) => typeof v === 'string' || typeof v === 'number');
232
+ return withDesc({ enum: values });
233
+ }
234
+ // -----------------------------------------------------------------------
235
+ // Arrays
236
+ // -----------------------------------------------------------------------
237
+ case ZodTypeName.ZodArray: {
238
+ const arrayDef = def;
239
+ return withDesc({
240
+ type: 'array',
241
+ items: convertZodType(arrayDef.type),
242
+ });
243
+ }
244
+ case ZodTypeName.ZodTuple: {
245
+ const tupleDef = def;
246
+ return withDesc({
247
+ type: 'array',
248
+ prefixItems: tupleDef.items.map(convertZodType),
249
+ });
250
+ }
251
+ // -----------------------------------------------------------------------
252
+ // Objects
253
+ // -----------------------------------------------------------------------
254
+ case ZodTypeName.ZodObject: {
255
+ const objectDef = def;
256
+ const properties = {};
257
+ const required = [];
258
+ for (const [key, value] of Object.entries(objectDef.shape())) {
259
+ properties[key] = convertZodType(value);
260
+ const innerDef = value._def;
261
+ const isOptional = innerDef.typeName === ZodTypeName.ZodOptional ||
262
+ innerDef.typeName === ZodTypeName.ZodDefault ||
263
+ innerDef.typeName === ZodTypeName.ZodNullable;
264
+ if (!isOptional) {
265
+ required.push(key);
266
+ }
267
+ }
268
+ const result = { type: 'object', properties };
269
+ if (required.length > 0)
270
+ result.required = required;
271
+ return withDesc(result);
272
+ }
273
+ case ZodTypeName.ZodRecord: {
274
+ const recordDef = def;
275
+ return withDesc({
276
+ type: 'object',
277
+ additionalProperties: convertZodType(recordDef.valueType),
278
+ });
279
+ }
280
+ // -----------------------------------------------------------------------
281
+ // Optional / Nullable / Default
282
+ // -----------------------------------------------------------------------
283
+ case ZodTypeName.ZodOptional: {
284
+ const optionalDef = def;
285
+ const inner = convertZodType(optionalDef.innerType);
286
+ return description !== undefined ? { ...inner, description } : inner;
287
+ }
288
+ case ZodTypeName.ZodNullable: {
289
+ const nullableDef = def;
290
+ const inner = convertZodType(nullableDef.innerType);
291
+ const type = inner.type;
292
+ if (typeof type === 'string') {
293
+ return withDesc({ ...inner, type: [type, 'null'] });
294
+ }
295
+ return withDesc({ anyOf: [inner, { type: 'null' }] });
296
+ }
297
+ case ZodTypeName.ZodDefault: {
298
+ const defaultDef = def;
299
+ const inner = convertZodType(defaultDef.innerType);
300
+ return withDesc({ ...inner, default: defaultDef.defaultValue() });
301
+ }
302
+ // -----------------------------------------------------------------------
303
+ // Union / Intersection / Discriminated Union
304
+ // -----------------------------------------------------------------------
305
+ case ZodTypeName.ZodUnion: {
306
+ const unionDef = def;
307
+ const options = unionDef.options.map(convertZodType);
308
+ return withDesc({ anyOf: options });
309
+ }
310
+ case ZodTypeName.ZodDiscriminatedUnion: {
311
+ const duDef = def;
312
+ const options = duDef.options.map(convertZodType);
313
+ return withDesc({ anyOf: options });
314
+ }
315
+ case ZodTypeName.ZodIntersection: {
316
+ const intDef = def;
317
+ return withDesc({
318
+ allOf: [convertZodType(intDef.left), convertZodType(intDef.right)],
319
+ });
320
+ }
321
+ // -----------------------------------------------------------------------
322
+ // Wrappers that forward to their inner type
323
+ // -----------------------------------------------------------------------
324
+ case ZodTypeName.ZodEffects: {
325
+ const effectsDef = def;
326
+ const inner = convertZodType(effectsDef.schema);
327
+ return description !== undefined ? { ...inner, description } : inner;
328
+ }
329
+ case ZodTypeName.ZodBranded: {
330
+ const brandedDef = def;
331
+ return withDesc(convertZodType(brandedDef.type));
332
+ }
333
+ case ZodTypeName.ZodReadonly: {
334
+ const readonlyDef = def;
335
+ return withDesc(convertZodType(readonlyDef.innerType));
336
+ }
337
+ case ZodTypeName.ZodCatch: {
338
+ const catchDef = def;
339
+ return withDesc(convertZodType(catchDef.innerType));
340
+ }
341
+ case ZodTypeName.ZodPipeline: {
342
+ const pipelineDef = def;
343
+ return withDesc(convertZodType(pipelineDef.in));
344
+ }
345
+ // -----------------------------------------------------------------------
346
+ // Any / Unknown – JSON Schema wildcard
347
+ // -----------------------------------------------------------------------
348
+ case ZodTypeName.ZodAny:
349
+ case ZodTypeName.ZodUnknown:
350
+ return withDesc({});
351
+ case ZodTypeName.ZodNever:
352
+ return withDesc({ not: {} });
353
+ case ZodTypeName.ZodVoid:
354
+ return withDesc({ type: 'null' });
355
+ // -----------------------------------------------------------------------
356
+ // Fallback
357
+ // -----------------------------------------------------------------------
358
+ default:
359
+ return withDesc({});
360
+ }
361
+ }
362
+ // ---------------------------------------------------------------------------
363
+ // Internal Zod type-name enum (mirrors Zod's internal ZodFirstPartyTypeKind)
364
+ // ---------------------------------------------------------------------------
365
+ var ZodTypeName;
366
+ (function (ZodTypeName) {
367
+ ZodTypeName["ZodString"] = "ZodString";
368
+ ZodTypeName["ZodNumber"] = "ZodNumber";
369
+ ZodTypeName["ZodBigInt"] = "ZodBigInt";
370
+ ZodTypeName["ZodBoolean"] = "ZodBoolean";
371
+ ZodTypeName["ZodDate"] = "ZodDate";
372
+ ZodTypeName["ZodUndefined"] = "ZodUndefined";
373
+ ZodTypeName["ZodNull"] = "ZodNull";
374
+ ZodTypeName["ZodAny"] = "ZodAny";
375
+ ZodTypeName["ZodUnknown"] = "ZodUnknown";
376
+ ZodTypeName["ZodNever"] = "ZodNever";
377
+ ZodTypeName["ZodVoid"] = "ZodVoid";
378
+ ZodTypeName["ZodArray"] = "ZodArray";
379
+ ZodTypeName["ZodObject"] = "ZodObject";
380
+ ZodTypeName["ZodUnion"] = "ZodUnion";
381
+ ZodTypeName["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
382
+ ZodTypeName["ZodIntersection"] = "ZodIntersection";
383
+ ZodTypeName["ZodTuple"] = "ZodTuple";
384
+ ZodTypeName["ZodRecord"] = "ZodRecord";
385
+ ZodTypeName["ZodMap"] = "ZodMap";
386
+ ZodTypeName["ZodSet"] = "ZodSet";
387
+ ZodTypeName["ZodFunction"] = "ZodFunction";
388
+ ZodTypeName["ZodLazy"] = "ZodLazy";
389
+ ZodTypeName["ZodLiteral"] = "ZodLiteral";
390
+ ZodTypeName["ZodEnum"] = "ZodEnum";
391
+ ZodTypeName["ZodEffects"] = "ZodEffects";
392
+ ZodTypeName["ZodNativeEnum"] = "ZodNativeEnum";
393
+ ZodTypeName["ZodOptional"] = "ZodOptional";
394
+ ZodTypeName["ZodNullable"] = "ZodNullable";
395
+ ZodTypeName["ZodDefault"] = "ZodDefault";
396
+ ZodTypeName["ZodCatch"] = "ZodCatch";
397
+ ZodTypeName["ZodPromise"] = "ZodPromise";
398
+ ZodTypeName["ZodBranded"] = "ZodBranded";
399
+ ZodTypeName["ZodPipeline"] = "ZodPipeline";
400
+ ZodTypeName["ZodReadonly"] = "ZodReadonly";
401
+ })(ZodTypeName || (ZodTypeName = {}));
402
+ //# sourceMappingURL=framework.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework.js","sourceRoot":"","sources":["../../src/tool/framework.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { ToolDefinition } from '../types.js';
2
+ export interface ConnectMCPToolsConfig {
3
+ command: string;
4
+ args?: string[];
5
+ env?: Record<string, string | undefined>;
6
+ cwd?: string;
7
+ /**
8
+ * Optional segment prepended to MCP tool names for the framework tool (and LLM) name.
9
+ * Example: prefix `github` + MCP tool `search_issues` → `github_search_issues`.
10
+ */
11
+ namePrefix?: string;
12
+ /**
13
+ * Timeout (ms) for MCP connect and each `tools/list` page. Defaults to 60000.
14
+ */
15
+ requestTimeoutMs?: number;
16
+ /**
17
+ * Client metadata sent to the MCP server.
18
+ */
19
+ clientName?: string;
20
+ clientVersion?: string;
21
+ }
22
+ export interface ConnectedMCPTools {
23
+ tools: ToolDefinition[];
24
+ disconnect: () => Promise<void>;
25
+ }
26
+ /**
27
+ * Connect to an MCP server over stdio and convert exposed MCP tools into
28
+ * open-multi-agent ToolDefinitions.
29
+ */
30
+ export declare function connectMCPTools(config: ConnectMCPToolsConfig): Promise<ConnectedMCPTools>;
31
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/tool/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAkEjD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAqID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAgE5B"}