@compyle/unagent 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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +547 -0
  3. package/dist/agents/agent-as-tool.d.ts +4 -0
  4. package/dist/agents/agent-as-tool.d.ts.map +1 -0
  5. package/dist/agents/agent-as-tool.js +105 -0
  6. package/dist/agents/agent-as-tool.js.map +1 -0
  7. package/dist/agents/define-agent.d.ts +101 -0
  8. package/dist/agents/define-agent.d.ts.map +1 -0
  9. package/dist/agents/define-agent.js +866 -0
  10. package/dist/agents/define-agent.js.map +1 -0
  11. package/dist/agents/index.d.ts +3 -0
  12. package/dist/agents/index.d.ts.map +1 -0
  13. package/dist/agents/index.js +3 -0
  14. package/dist/agents/index.js.map +1 -0
  15. package/dist/bridge/node-bridge.d.ts +2 -0
  16. package/dist/bridge/node-bridge.d.ts.map +1 -0
  17. package/dist/bridge/node-bridge.js +772 -0
  18. package/dist/bridge/node-bridge.js.map +1 -0
  19. package/dist/client/base-client.d.ts +86 -0
  20. package/dist/client/base-client.d.ts.map +1 -0
  21. package/dist/client/base-client.js +254 -0
  22. package/dist/client/base-client.js.map +1 -0
  23. package/dist/client/claude.d.ts +66 -0
  24. package/dist/client/claude.d.ts.map +1 -0
  25. package/dist/client/claude.js +846 -0
  26. package/dist/client/claude.js.map +1 -0
  27. package/dist/client/codex/codex-client.d.ts +78 -0
  28. package/dist/client/codex/codex-client.d.ts.map +1 -0
  29. package/dist/client/codex/codex-client.js +906 -0
  30. package/dist/client/codex/codex-client.js.map +1 -0
  31. package/dist/client/codex/codex-home.d.ts +6 -0
  32. package/dist/client/codex/codex-home.d.ts.map +1 -0
  33. package/dist/client/codex/codex-home.js +26 -0
  34. package/dist/client/codex/codex-home.js.map +1 -0
  35. package/dist/client/codex/config/config-loader.d.ts +8 -0
  36. package/dist/client/codex/config/config-loader.d.ts.map +1 -0
  37. package/dist/client/codex/config/config-loader.js +137 -0
  38. package/dist/client/codex/config/config-loader.js.map +1 -0
  39. package/dist/client/codex/config/config-types.d.ts +43 -0
  40. package/dist/client/codex/config/config-types.d.ts.map +1 -0
  41. package/dist/client/codex/config/config-types.js +2 -0
  42. package/dist/client/codex/config/config-types.js.map +1 -0
  43. package/dist/client/codex/config/config-writer.d.ts +24 -0
  44. package/dist/client/codex/config/config-writer.d.ts.map +1 -0
  45. package/dist/client/codex/config/config-writer.js +353 -0
  46. package/dist/client/codex/config/config-writer.js.map +1 -0
  47. package/dist/client/codex/config/index.d.ts +7 -0
  48. package/dist/client/codex/config/index.d.ts.map +1 -0
  49. package/dist/client/codex/config/index.js +6 -0
  50. package/dist/client/codex/config/index.js.map +1 -0
  51. package/dist/client/codex/config/mcp-config-generator.d.ts +7 -0
  52. package/dist/client/codex/config/mcp-config-generator.d.ts.map +1 -0
  53. package/dist/client/codex/config/mcp-config-generator.js +140 -0
  54. package/dist/client/codex/config/mcp-config-generator.js.map +1 -0
  55. package/dist/client/codex/config/tools-config-writer.d.ts +2 -0
  56. package/dist/client/codex/config/tools-config-writer.d.ts.map +1 -0
  57. package/dist/client/codex/config/tools-config-writer.js +21 -0
  58. package/dist/client/codex/config/tools-config-writer.js.map +1 -0
  59. package/dist/client/codex/index.d.ts +4 -0
  60. package/dist/client/codex/index.d.ts.map +1 -0
  61. package/dist/client/codex/index.js +3 -0
  62. package/dist/client/codex/index.js.map +1 -0
  63. package/dist/client/config-utils.d.ts +4 -0
  64. package/dist/client/config-utils.d.ts.map +1 -0
  65. package/dist/client/config-utils.js +32 -0
  66. package/dist/client/config-utils.js.map +1 -0
  67. package/dist/client/extra-headers.d.ts +12 -0
  68. package/dist/client/extra-headers.d.ts.map +1 -0
  69. package/dist/client/extra-headers.js +102 -0
  70. package/dist/client/extra-headers.js.map +1 -0
  71. package/dist/client/field-mappings.d.ts +3 -0
  72. package/dist/client/field-mappings.d.ts.map +1 -0
  73. package/dist/client/field-mappings.js +40 -0
  74. package/dist/client/field-mappings.js.map +1 -0
  75. package/dist/client/transformers/content-utils.d.ts +34 -0
  76. package/dist/client/transformers/content-utils.d.ts.map +1 -0
  77. package/dist/client/transformers/content-utils.js +237 -0
  78. package/dist/client/transformers/content-utils.js.map +1 -0
  79. package/dist/events/event-bus.d.ts +19 -0
  80. package/dist/events/event-bus.d.ts.map +1 -0
  81. package/dist/events/event-bus.js +134 -0
  82. package/dist/events/event-bus.js.map +1 -0
  83. package/dist/events/event-types.d.ts +53 -0
  84. package/dist/events/event-types.d.ts.map +1 -0
  85. package/dist/events/event-types.js +6 -0
  86. package/dist/events/event-types.js.map +1 -0
  87. package/dist/events/index.d.ts +4 -0
  88. package/dist/events/index.d.ts.map +1 -0
  89. package/dist/events/index.js +4 -0
  90. package/dist/events/index.js.map +1 -0
  91. package/dist/index.d.ts +12 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +11 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/messages/index.d.ts +3 -0
  96. package/dist/messages/index.d.ts.map +1 -0
  97. package/dist/messages/index.js +3 -0
  98. package/dist/messages/index.js.map +1 -0
  99. package/dist/messages/message-types.d.ts +60 -0
  100. package/dist/messages/message-types.d.ts.map +1 -0
  101. package/dist/messages/message-types.js +6 -0
  102. package/dist/messages/message-types.js.map +1 -0
  103. package/dist/messages/message-utils.d.ts +51 -0
  104. package/dist/messages/message-utils.d.ts.map +1 -0
  105. package/dist/messages/message-utils.js +343 -0
  106. package/dist/messages/message-utils.js.map +1 -0
  107. package/dist/tools/define-tool.d.ts +6 -0
  108. package/dist/tools/define-tool.d.ts.map +1 -0
  109. package/dist/tools/define-tool.js +83 -0
  110. package/dist/tools/define-tool.js.map +1 -0
  111. package/dist/tools/index.d.ts +6 -0
  112. package/dist/tools/index.d.ts.map +1 -0
  113. package/dist/tools/index.js +6 -0
  114. package/dist/tools/index.js.map +1 -0
  115. package/dist/tools/mcp-stdio-proxy.d.ts +2 -0
  116. package/dist/tools/mcp-stdio-proxy.d.ts.map +1 -0
  117. package/dist/tools/mcp-stdio-proxy.js +31 -0
  118. package/dist/tools/mcp-stdio-proxy.js.map +1 -0
  119. package/dist/tools/tool-call-context.d.ts +8 -0
  120. package/dist/tools/tool-call-context.d.ts.map +1 -0
  121. package/dist/tools/tool-call-context.js +44 -0
  122. package/dist/tools/tool-call-context.js.map +1 -0
  123. package/dist/tools/tool-registry.d.ts +14 -0
  124. package/dist/tools/tool-registry.d.ts.map +1 -0
  125. package/dist/tools/tool-registry.js +47 -0
  126. package/dist/tools/tool-registry.js.map +1 -0
  127. package/dist/tools/tool-result-converter.d.ts +3 -0
  128. package/dist/tools/tool-result-converter.d.ts.map +1 -0
  129. package/dist/tools/tool-result-converter.js +38 -0
  130. package/dist/tools/tool-result-converter.js.map +1 -0
  131. package/dist/tools/tool-service-manager.d.ts +12 -0
  132. package/dist/tools/tool-service-manager.d.ts.map +1 -0
  133. package/dist/tools/tool-service-manager.js +118 -0
  134. package/dist/tools/tool-service-manager.js.map +1 -0
  135. package/dist/tools/tool-stdio-mcp-service.d.ts +29 -0
  136. package/dist/tools/tool-stdio-mcp-service.d.ts.map +1 -0
  137. package/dist/tools/tool-stdio-mcp-service.js +185 -0
  138. package/dist/tools/tool-stdio-mcp-service.js.map +1 -0
  139. package/dist/tools/tool-types.d.ts +29 -0
  140. package/dist/tools/tool-types.d.ts.map +1 -0
  141. package/dist/tools/tool-types.js +2 -0
  142. package/dist/tools/tool-types.js.map +1 -0
  143. package/package.json +58 -0
@@ -0,0 +1,343 @@
1
+ import { MessageRole, } from "./message-types.js";
2
+ export function getMessageRole(message) {
3
+ return message.type;
4
+ }
5
+ function isRecord(value) {
6
+ return typeof value === "object" && value !== null;
7
+ }
8
+ function isNonEmptyString(value) {
9
+ return typeof value === "string" && value.length > 0;
10
+ }
11
+ function getToolUseIdValue(record) {
12
+ return record.tool_use_id ?? record.toolUseId ?? record.id;
13
+ }
14
+ function getToolResultContentValue(record) {
15
+ return record.content ?? record.result;
16
+ }
17
+ function isToolResultLike(record) {
18
+ return Boolean(getToolUseIdValue(record)) && Boolean(getToolResultContentValue(record));
19
+ }
20
+ function getToolResultError(record) {
21
+ return Boolean(record.isError ?? record.is_error ?? record.isErr);
22
+ }
23
+ function stringifyValue(value) {
24
+ if (value === undefined || value === null) {
25
+ return "";
26
+ }
27
+ if (typeof value === "string") {
28
+ return value;
29
+ }
30
+ if (Array.isArray(value)) {
31
+ const parts = [];
32
+ for (const item of value) {
33
+ if (typeof item === "string") {
34
+ parts.push(item);
35
+ continue;
36
+ }
37
+ if (!item || typeof item !== "object") {
38
+ parts.push(String(item));
39
+ continue;
40
+ }
41
+ const record = item;
42
+ if (typeof record.text === "string") {
43
+ parts.push(record.text);
44
+ continue;
45
+ }
46
+ if (typeof record.content === "string") {
47
+ parts.push(record.content);
48
+ continue;
49
+ }
50
+ try {
51
+ parts.push(JSON.stringify(record));
52
+ }
53
+ catch {
54
+ parts.push(String(record));
55
+ }
56
+ }
57
+ if (parts.length > 0) {
58
+ return parts.join("\n");
59
+ }
60
+ }
61
+ if (typeof value === "object") {
62
+ const record = value;
63
+ if (typeof record.text === "string") {
64
+ return record.text;
65
+ }
66
+ if (typeof record.content === "string") {
67
+ return record.content;
68
+ }
69
+ }
70
+ try {
71
+ return JSON.stringify(value);
72
+ }
73
+ catch {
74
+ return String(value);
75
+ }
76
+ }
77
+ function getContentBlocks(message) {
78
+ if (Array.isArray(message.content)) {
79
+ return message.content;
80
+ }
81
+ if (message.content === undefined || message.content === null) {
82
+ return [];
83
+ }
84
+ return [message.content];
85
+ }
86
+ export function validateMessage(message) {
87
+ const errors = [];
88
+ const role = getMessageRole(message);
89
+ if (!role || !Object.values(MessageRole).includes(role)) {
90
+ errors.push(`Invalid message role: ${role}`);
91
+ }
92
+ const contentBlocks = getContentBlocks(message);
93
+ if (contentBlocks.length === 0) {
94
+ errors.push("Message content must be non-empty");
95
+ }
96
+ if (!Array.isArray(message.content)) {
97
+ const singleBlock = message.content;
98
+ const singleType = singleBlock?.type;
99
+ const isToolResultBlock = role === MessageRole.USER && singleType === "tool_result";
100
+ if (!isToolResultBlock) {
101
+ errors.push("Message content must be an array for USER/ASSISTANT messages");
102
+ }
103
+ }
104
+ for (let i = 0; i < contentBlocks.length; i++) {
105
+ const block = contentBlocks[i];
106
+ if (!block.type) {
107
+ errors.push(`Content block at index ${i} is missing type`);
108
+ }
109
+ }
110
+ if (role === MessageRole.USER) {
111
+ const blocks = getContentBlocks(message);
112
+ for (const block of blocks) {
113
+ const blockType = block.type;
114
+ if (blockType !== "text" && blockType !== "image" && blockType !== "tool_result") {
115
+ errors.push(`USER message cannot contain ${blockType} content block`);
116
+ }
117
+ }
118
+ }
119
+ else if (role === MessageRole.ASSISTANT) {
120
+ const blocks = getContentBlocks(message);
121
+ for (const block of blocks) {
122
+ const blockType = block.type;
123
+ const isToolUse = blockType === "tool_use" || blockType === "tool_call";
124
+ if (blockType !== "thinking" && blockType !== "text" && !isToolUse) {
125
+ errors.push(`ASSISTANT message cannot contain ${blockType} content block`);
126
+ }
127
+ }
128
+ }
129
+ return {
130
+ valid: errors.length === 0,
131
+ errors: errors.length > 0 ? errors : undefined,
132
+ };
133
+ }
134
+ export function createUserMessage(content) {
135
+ let contentBlocks;
136
+ if (typeof content === "string") {
137
+ contentBlocks = [{ type: "text", content }];
138
+ }
139
+ else {
140
+ contentBlocks = [{ type: "text", content: content.text }];
141
+ if (content.images && content.images.length > 0) {
142
+ for (const imageUrl of content.images) {
143
+ contentBlocks.push({ type: "image", url: imageUrl });
144
+ }
145
+ }
146
+ }
147
+ return {
148
+ type: MessageRole.USER,
149
+ content: contentBlocks,
150
+ };
151
+ }
152
+ export function createAssistantMessage(params) {
153
+ const contentBlocks = [];
154
+ if (params.thinking) {
155
+ contentBlocks.push({
156
+ type: "thinking",
157
+ content: params.thinking.content,
158
+ signature: params.thinking.signature,
159
+ });
160
+ }
161
+ if (params.text) {
162
+ contentBlocks.push({
163
+ type: "text",
164
+ content: params.text,
165
+ });
166
+ }
167
+ if (params.toolCalls && params.toolCalls.length > 0) {
168
+ contentBlocks.push({
169
+ type: "tool_use",
170
+ content: params.toolCalls,
171
+ });
172
+ }
173
+ return {
174
+ type: MessageRole.ASSISTANT,
175
+ content: contentBlocks,
176
+ ...(params.model && { model: params.model }),
177
+ };
178
+ }
179
+ export function createToolCallResultMessage(results) {
180
+ const isArrayInput = Array.isArray(results);
181
+ const resultList = isArrayInput ? results : [results];
182
+ const contentBlocks = resultList.map((result) => {
183
+ const isError = result.isError ?? result.is_error ?? false;
184
+ const toolUseId = result.tool_use_id ?? result.toolUseId ?? result.id ?? "";
185
+ const rawContent = result.content ?? result.result ?? "";
186
+ let content = "";
187
+ if (typeof rawContent !== "string") {
188
+ content = stringifyValue(rawContent);
189
+ }
190
+ else if (!rawContent && result.result !== undefined && result.result !== null) {
191
+ content = stringifyValue(result.result);
192
+ }
193
+ else {
194
+ content = rawContent;
195
+ }
196
+ const block = {
197
+ type: "tool_result",
198
+ tool_use_id: toolUseId,
199
+ content,
200
+ };
201
+ if (isError) {
202
+ block.is_error = true;
203
+ }
204
+ return block;
205
+ });
206
+ return {
207
+ type: MessageRole.USER,
208
+ content: isArrayInput ? contentBlocks : contentBlocks[0],
209
+ };
210
+ }
211
+ export function extractTextFromMessage(message) {
212
+ const contentBlocks = getContentBlocks(message);
213
+ const textBlocks = contentBlocks.filter((block) => block.type === "text");
214
+ return textBlocks.map((block) => block.content).join("\n");
215
+ }
216
+ export function extractToolCalls(message) {
217
+ const contentBlocks = getContentBlocks(message);
218
+ const toolCallBlocks = contentBlocks.filter((block) => block.type === "tool_use" || block.type === "tool_call");
219
+ return toolCallBlocks.flatMap((block) => block.content);
220
+ }
221
+ export function extractThinkingFromMessage(message) {
222
+ const contentBlocks = getContentBlocks(message);
223
+ return contentBlocks.filter((block) => block.type === "thinking");
224
+ }
225
+ export function extractImagesFromMessage(message) {
226
+ if (getMessageRole(message) !== MessageRole.USER)
227
+ return [];
228
+ const contentBlocks = getContentBlocks(message);
229
+ const imageBlocks = contentBlocks.filter((block) => block.type === "image");
230
+ return imageBlocks.map((block) => block.url);
231
+ }
232
+ export function extractToolResultsFromMessage(message) {
233
+ if (getMessageRole(message) !== MessageRole.USER)
234
+ return [];
235
+ const contentBlocks = getContentBlocks(message);
236
+ const toolResultBlocks = [];
237
+ for (const block of contentBlocks) {
238
+ if (block.type === "tool_result") {
239
+ toolResultBlocks.push({
240
+ type: "tool_result",
241
+ tool_use_id: block.tool_use_id,
242
+ content: block.content,
243
+ is_error: block.isError ?? block.is_error ?? false,
244
+ });
245
+ continue;
246
+ }
247
+ if (!isRecord(block)) {
248
+ continue;
249
+ }
250
+ if (!isToolResultLike(block)) {
251
+ continue;
252
+ }
253
+ const toolUseIdValue = getToolUseIdValue(block);
254
+ const toolUseId = isNonEmptyString(toolUseIdValue) ? toolUseIdValue : "";
255
+ const content = stringifyValue(getToolResultContentValue(block));
256
+ toolResultBlocks.push({
257
+ type: "tool_result",
258
+ tool_use_id: toolUseId,
259
+ content,
260
+ is_error: getToolResultError(block),
261
+ });
262
+ }
263
+ return toolResultBlocks;
264
+ }
265
+ export function normalizeMessage(message) {
266
+ const role = getMessageRole(message);
267
+ const contentBlocks = getContentBlocks(message);
268
+ if (!role) {
269
+ return {
270
+ ...message,
271
+ content: contentBlocks,
272
+ };
273
+ }
274
+ return {
275
+ ...message,
276
+ type: message.type ?? role,
277
+ content: contentBlocks,
278
+ };
279
+ }
280
+ export function messageToEvent(message, clientType, sessionId) {
281
+ const normalized = normalizeMessage(message);
282
+ const baseEvent = {
283
+ timestamp: Date.now(),
284
+ clientType,
285
+ sessionId,
286
+ };
287
+ const messageEvent = {
288
+ type: "item.end",
289
+ ...baseEvent,
290
+ message: normalized,
291
+ };
292
+ return messageEvent;
293
+ }
294
+ export function eventToMessage(event) {
295
+ if (event.type === "item.end") {
296
+ return normalizeMessage(event.message);
297
+ }
298
+ return null;
299
+ }
300
+ export function messageHasErrors(message) {
301
+ const results = extractToolResultsFromMessage(message);
302
+ return results.some((result) => result.isError ?? result.is_error);
303
+ }
304
+ export function getToolCallIds(message) {
305
+ const toolCalls = extractToolCalls(message);
306
+ return toolCalls.map((call) => call.id);
307
+ }
308
+ export function formatMessage(message) {
309
+ const parts = [];
310
+ const role = getMessageRole(message) ?? "UNKNOWN";
311
+ parts.push(`[${role}]`);
312
+ for (const block of getContentBlocks(message)) {
313
+ if (block.type === "tool_result") {
314
+ const result = block.content;
315
+ const isError = block.isError ?? block.is_error;
316
+ parts.push(`ToolResult: ${isError ? "ERROR" : "OK"} - "${result.substring(0, 50)}${result.length > 50 ? "..." : ""}"`);
317
+ continue;
318
+ }
319
+ if (isRecord(block) && isToolResultLike(block)) {
320
+ const result = stringifyValue(getToolResultContentValue(block));
321
+ const isError = getToolResultError(block);
322
+ parts.push(`ToolResult: ${isError ? "ERROR" : "OK"} - "${result.substring(0, 50)}${result.length > 50 ? "..." : ""}"`);
323
+ continue;
324
+ }
325
+ switch (block.type) {
326
+ case "text":
327
+ parts.push(`Text: "${block.content.substring(0, 50)}${block.content.length > 50 ? "..." : ""}"`);
328
+ break;
329
+ case "image":
330
+ parts.push(`Image: ${block.url.substring(0, 50)}...`);
331
+ break;
332
+ case "thinking":
333
+ parts.push(`Thinking: "${block.content.substring(0, 50)}${block.content.length > 50 ? "..." : ""}"`);
334
+ break;
335
+ case "tool_use":
336
+ case "tool_call":
337
+ parts.push(`ToolCalls: ${block.content.length} calls`);
338
+ break;
339
+ }
340
+ }
341
+ return parts.join(" | ");
342
+ }
343
+ //# sourceMappingURL=message-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-utils.js","sourceRoot":"","sources":["../../src/messages/message-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod";
2
+ import type { ToolDefinition, RegisteredTool } from "./tool-types.js";
3
+ export declare function defineTool<Schema extends z.ZodRawShape>(definition: ToolDefinition<Schema>): RegisteredTool;
4
+ export declare function isRegisteredTool(value: unknown): value is RegisteredTool;
5
+ export declare function extractCustomTools(tools: unknown): RegisteredTool[];
6
+ //# sourceMappingURL=define-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-tool.d.ts","sourceRoot":"","sources":["../../src/tools/define-tool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAyBtE,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,EACrD,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,GACjC,cAAc,CA8EhB;AAKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAWxE;AAKD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAkBnE"}
@@ -0,0 +1,83 @@
1
+ import { z } from "zod";
2
+ import { toolRegistry } from "./tool-registry.js";
3
+ import { convertToCallToolResult } from "./tool-result-converter.js";
4
+ export function defineTool(definition) {
5
+ const { name, description, handler } = definition;
6
+ const inputSchema = definition.inputSchema ?? definition.input_schema;
7
+ if (!name || typeof name !== 'string') {
8
+ throw new Error('Tool name must be a non-empty string');
9
+ }
10
+ if (!description || typeof description !== 'string') {
11
+ throw new Error('Tool description must be a non-empty string');
12
+ }
13
+ if (!inputSchema || typeof inputSchema !== "object") {
14
+ throw new Error("Tool inputSchema/input_schema must be a valid Zod schema shape");
15
+ }
16
+ if (typeof handler !== 'function') {
17
+ throw new Error('Tool handler must be a function');
18
+ }
19
+ const id = `${name}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
20
+ const schema = z.object(inputSchema);
21
+ const wrappedHandler = async (args) => {
22
+ try {
23
+ const validatedArgs = schema.parse(args);
24
+ const result = await handler(validatedArgs);
25
+ return convertToCallToolResult(result);
26
+ }
27
+ catch (error) {
28
+ if (error instanceof Error && error.name === 'ZodError') {
29
+ return {
30
+ content: [{
31
+ type: 'text',
32
+ text: `Input validation error: ${error.message}`
33
+ }],
34
+ isError: true
35
+ };
36
+ }
37
+ return {
38
+ content: [{
39
+ type: 'text',
40
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
41
+ }],
42
+ isError: true
43
+ };
44
+ }
45
+ };
46
+ const registeredTool = {
47
+ id,
48
+ name,
49
+ description,
50
+ inputSchema,
51
+ handler: wrappedHandler,
52
+ createdAt: new Date(),
53
+ };
54
+ toolRegistry.register(registeredTool);
55
+ return registeredTool;
56
+ }
57
+ export function isRegisteredTool(value) {
58
+ return (typeof value === 'object' &&
59
+ value !== null &&
60
+ 'id' in value &&
61
+ 'name' in value &&
62
+ 'description' in value &&
63
+ 'inputSchema' in value &&
64
+ 'handler' in value &&
65
+ 'createdAt' in value);
66
+ }
67
+ export function extractCustomTools(tools) {
68
+ if (tools === undefined || tools === null) {
69
+ return [];
70
+ }
71
+ if (Array.isArray(tools)) {
72
+ const invalidTools = tools.filter((tool) => !isRegisteredTool(tool));
73
+ if (invalidTools.length > 0) {
74
+ throw new Error("Tools must be RegisteredTool instances created by defineTool");
75
+ }
76
+ return tools;
77
+ }
78
+ if (isRegisteredTool(tools)) {
79
+ return [tools];
80
+ }
81
+ throw new Error("Tools must be RegisteredTool instances created by defineTool");
82
+ }
83
+ //# sourceMappingURL=define-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-tool.js","sourceRoot":"","sources":["../../src/tools/define-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './tool-types.js';
2
+ export * from './define-tool.js';
3
+ export { toolRegistry } from './tool-registry.js';
4
+ export { convertToCallToolResult } from './tool-result-converter.js';
5
+ export { ToolStdioMcpService } from "./tool-stdio-mcp-service.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './tool-types.js';
2
+ export * from './define-tool.js';
3
+ export { toolRegistry } from './tool-registry.js';
4
+ export { convertToCallToolResult } from './tool-result-converter.js';
5
+ export { ToolStdioMcpService } from "./tool-stdio-mcp-service.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-stdio-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio-proxy.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-stdio-proxy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import net from "node:net";
2
+ const socketPath = process.env.UNAGENT_MCP_SOCKET;
3
+ if (!socketPath) {
4
+ console.error("[mcp-stdio-proxy] Missing UNAGENT_MCP_SOCKET");
5
+ process.exit(1);
6
+ }
7
+ const socket = net.createConnection(socketPath);
8
+ socket.on("connect", () => {
9
+ process.stdin.pipe(socket);
10
+ socket.pipe(process.stdout);
11
+ process.stdin.resume();
12
+ });
13
+ socket.on("close", () => {
14
+ process.exit(0);
15
+ });
16
+ socket.on("error", (error) => {
17
+ console.error("[mcp-stdio-proxy] Socket error:", error);
18
+ process.exit(1);
19
+ });
20
+ process.stdin.on("end", () => {
21
+ socket.end();
22
+ });
23
+ process.on("SIGINT", () => {
24
+ socket.end();
25
+ process.exit(0);
26
+ });
27
+ process.on("SIGTERM", () => {
28
+ socket.end();
29
+ process.exit(0);
30
+ });
31
+ //# sourceMappingURL=mcp-stdio-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-stdio-proxy.js","sourceRoot":"","sources":["../../src/tools/mcp-stdio-proxy.ts"],"names":[],"mappings":"AAKA,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAElD,IAAI,CAAC,UAAU,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAEhD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;IAC3B,MAAM,CAAC,GAAG,EAAE,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ type ToolCallContext = {
2
+ parentToolUseId?: string;
3
+ };
4
+ export declare function runWithToolCallContext<T>(context: ToolCallContext | undefined, fn: () => T): T;
5
+ export declare function getParentToolUseId(): string | undefined;
6
+ export declare function resolveParentToolUseId(extra: unknown): string | undefined;
7
+ export {};
8
+ //# sourceMappingURL=tool-call-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call-context.d.ts","sourceRoot":"","sources":["../../src/tools/tool-call-context.ts"],"names":[],"mappings":"AAOA,KAAK,eAAe,GAAG;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,EAAE,EAAE,MAAM,CAAC,GACV,CAAC,CAKH;AAED,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAEvD;AAoBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBzE"}
@@ -0,0 +1,44 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const toolCallContext = new AsyncLocalStorage();
3
+ export function runWithToolCallContext(context, fn) {
4
+ if (!context || !context.parentToolUseId) {
5
+ return fn();
6
+ }
7
+ return toolCallContext.run(context, fn);
8
+ }
9
+ export function getParentToolUseId() {
10
+ return toolCallContext.getStore()?.parentToolUseId;
11
+ }
12
+ function normalizeParentToolUseId(value) {
13
+ if (typeof value === "string") {
14
+ const trimmed = value.trim();
15
+ return trimmed ? trimmed : undefined;
16
+ }
17
+ if (typeof value === "number" && Number.isFinite(value)) {
18
+ return String(value);
19
+ }
20
+ return undefined;
21
+ }
22
+ function getMetaValue(meta) {
23
+ if (!meta) {
24
+ return undefined;
25
+ }
26
+ return meta.parent_tool_use_id ?? meta.parentToolUseId ?? meta.tool_use_id ?? meta.toolUseId;
27
+ }
28
+ export function resolveParentToolUseId(extra) {
29
+ if (!extra || typeof extra !== "object") {
30
+ return undefined;
31
+ }
32
+ const record = extra;
33
+ const meta = record._meta;
34
+ const metaRecord = meta && typeof meta === "object" ? meta : undefined;
35
+ const candidate = getMetaValue(metaRecord)
36
+ ?? record.parent_tool_use_id
37
+ ?? record.parentToolUseId
38
+ ?? record.tool_use_id
39
+ ?? record.toolUseId
40
+ ?? record.requestId
41
+ ?? record.request_id;
42
+ return normalizeParentToolUseId(candidate);
43
+ }
44
+ //# sourceMappingURL=tool-call-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call-context.js","sourceRoot":"","sources":["../../src/tools/tool-call-context.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAmB,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CACpC,OAAoC,EACpC,EAAW;IAEX,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC,QAAQ,EAAE,EAAE,eAAe,CAAC;AACrD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,IAA8B;IAClD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC;WACrC,MAAM,CAAC,kBAAkB;WACzB,MAAM,CAAC,eAAe;WACtB,MAAM,CAAC,WAAW;WAClB,MAAM,CAAC,SAAS;WAChB,MAAM,CAAC,SAAS;WAChB,MAAM,CAAC,UAAU,CAAC;IAEvB,OAAO,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { RegisteredTool } from './tool-types.js';
2
+ declare class ToolRegistry {
3
+ private toolsById;
4
+ private toolsByName;
5
+ register(tool: RegisteredTool): void;
6
+ registerMultiple(tools: RegisteredTool[]): void;
7
+ getAllTools(): RegisteredTool[];
8
+ getToolByName(name: string): RegisteredTool | undefined;
9
+ getToolById(id: string): RegisteredTool | undefined;
10
+ cleanup(): void;
11
+ }
12
+ export declare const toolRegistry: ToolRegistry;
13
+ export {};
14
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKtD,cAAM,YAAY;IAChB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,WAAW,CAAqC;IAKxD,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAiBpC,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAS/C,WAAW,IAAI,cAAc,EAAE;IAO/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOvD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAOnD,OAAO,IAAI,IAAI;CAOhB;AAKD,eAAO,MAAM,YAAY,cAAqB,CAAC"}