@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,47 @@
1
+ class ToolRegistry {
2
+ toolsById = new Map();
3
+ toolsByName = new Map();
4
+ register(tool) {
5
+ const existingById = this.toolsById.get(tool.id);
6
+ if (existingById && existingById.name !== tool.name) {
7
+ throw new Error(`Tool id '${tool.id}' is already registered as '${existingById.name}'`);
8
+ }
9
+ const existingByName = this.toolsByName.get(tool.name);
10
+ if (existingByName && existingByName.id !== tool.id) {
11
+ throw new Error(`Tool name '${tool.name}' is already registered as '${existingByName.id}'`);
12
+ }
13
+ this.toolsById.set(tool.id, tool);
14
+ this.toolsByName.set(tool.name, tool);
15
+ }
16
+ registerMultiple(tools) {
17
+ for (const tool of tools) {
18
+ this.register(tool);
19
+ }
20
+ }
21
+ getAllTools() {
22
+ return Array.from(this.toolsByName.values());
23
+ }
24
+ getToolByName(name) {
25
+ return this.toolsByName.get(name);
26
+ }
27
+ getToolById(id) {
28
+ return this.toolsById.get(id);
29
+ }
30
+ cleanup() {
31
+ this.toolsById.clear();
32
+ this.toolsByName.clear();
33
+ }
34
+ }
35
+ export const toolRegistry = new ToolRegistry();
36
+ process.on('exit', () => {
37
+ toolRegistry.cleanup();
38
+ });
39
+ process.on('SIGINT', () => {
40
+ toolRegistry.cleanup();
41
+ process.exit(0);
42
+ });
43
+ process.on('SIGTERM', () => {
44
+ toolRegistry.cleanup();
45
+ process.exit(0);
46
+ });
47
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"AAUA,MAAM,YAAY;IACR,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;IAKxD,QAAQ,CAAC,IAAoB;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,+BAA+B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,cAAc,IAAI,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,+BAA+B,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAKD,gBAAgB,CAAC,KAAuB;QACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAKD,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAKD,aAAa,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAKD,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAKD,OAAO;QAEL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;CAGF;AAKD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAG/C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,YAAY,CAAC,OAAO,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,YAAY,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,YAAY,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CallToolResult, ToolHandlerResult } from './tool-types.js';
2
+ export declare function convertToCallToolResult(result: ToolHandlerResult): Promise<CallToolResult>;
3
+ //# sourceMappingURL=tool-result-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-converter.d.ts","sourceRoot":"","sources":["../../src/tools/tool-result-converter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAoB,iBAAiB,EAA0B,MAAM,iBAAiB,CAAC;AASnH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CA4ChG"}
@@ -0,0 +1,38 @@
1
+ function isRecord(value) {
2
+ return typeof value === 'object' && value !== null;
3
+ }
4
+ export async function convertToCallToolResult(result) {
5
+ const resolved = await Promise.resolve(result);
6
+ if (typeof resolved === 'string') {
7
+ return {
8
+ content: [{
9
+ type: 'text',
10
+ text: resolved
11
+ }]
12
+ };
13
+ }
14
+ if (!Array.isArray(resolved) && isRecord(resolved)) {
15
+ if (typeof resolved.content === 'string') {
16
+ const content = [{
17
+ type: 'text',
18
+ text: resolved.content
19
+ }];
20
+ return {
21
+ content,
22
+ isError: !!resolved.isError
23
+ };
24
+ }
25
+ }
26
+ if (Array.isArray(resolved)) {
27
+ return {
28
+ content: resolved
29
+ };
30
+ }
31
+ return {
32
+ content: [{
33
+ type: 'text',
34
+ text: JSON.stringify(resolved)
35
+ }]
36
+ };
37
+ }
38
+ //# sourceMappingURL=tool-result-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-converter.js","sourceRoot":"","sources":["../../src/tools/tool-result-converter.ts"],"names":[],"mappings":"AAOA,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAKD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAyB;IAErE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC,MAAkE,CACnE,CAAC;IAGF,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;iBACf,CAAC;SACH,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,OAAO,GAAuB,CAAC;oBACnC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ,CAAC,OAAO;iBACvB,CAAC,CAAC;YACH,OAAO;gBACL,OAAO;gBACP,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO;aAC5B,CAAC;QACJ,CAAC;IACH,CAAC;IAGD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,QAA8B;SACxC,CAAC;IACJ,CAAC;IAGD,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;aAC/B,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ToolServerInfo } from "./tool-stdio-mcp-service.js";
2
+ import type { RegisteredTool } from "./tool-types.js";
3
+ export type ToolServiceCommand = {
4
+ command: string;
5
+ args: string[];
6
+ env?: Record<string, string>;
7
+ };
8
+ export declare function attachToolServiceOwner(config: Record<string, unknown>, owner: object): void;
9
+ export declare function resolveToolServiceOwner(value: unknown): object | undefined;
10
+ export declare function getAgentToolServiceCommand(owner: object, tools: RegisteredTool[], serverInfo?: ToolServerInfo): Promise<ToolServiceCommand>;
11
+ export declare function releaseAgentToolService(owner: object): void;
12
+ //# sourceMappingURL=tool-service-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-service-manager.d.ts","sourceRoot":"","sources":["../../src/tools/tool-service-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAiBF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAU3F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,cAAc,GAC1B,OAAO,CAAC,kBAAkB,CAAC,CAsC7B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAS3D"}
@@ -0,0 +1,118 @@
1
+ import { existsSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { ToolStdioMcpService } from "./tool-stdio-mcp-service.js";
4
+ const TOOL_SERVICE_OWNER = Symbol.for("unagent.toolServiceOwner");
5
+ const serviceEntries = new WeakMap();
6
+ const activeServices = new Set();
7
+ const serviceFinalizer = new FinalizationRegistry((service) => {
8
+ service.stop();
9
+ activeServices.delete(service);
10
+ });
11
+ export function attachToolServiceOwner(config, owner) {
12
+ if (!owner || typeof owner !== "object") {
13
+ return;
14
+ }
15
+ Object.defineProperty(config, TOOL_SERVICE_OWNER, {
16
+ value: owner,
17
+ enumerable: false,
18
+ configurable: false,
19
+ });
20
+ }
21
+ export function resolveToolServiceOwner(value) {
22
+ if (!value || typeof value !== "object") {
23
+ return undefined;
24
+ }
25
+ const owner = value[TOOL_SERVICE_OWNER];
26
+ return owner && typeof owner === "object" ? owner : undefined;
27
+ }
28
+ export async function getAgentToolServiceCommand(owner, tools, serverInfo) {
29
+ if (!owner || typeof owner !== "object") {
30
+ throw new Error("Tool service owner must be an object");
31
+ }
32
+ if (tools.length === 0) {
33
+ throw new Error("Tool service requires at least one tool");
34
+ }
35
+ ensureUniqueToolNames(tools);
36
+ const info = resolveServerInfo(serverInfo);
37
+ const existing = serviceEntries.get(owner);
38
+ if (existing) {
39
+ existing.toolsRef.current = tools;
40
+ existing.infoRef.current = info;
41
+ return existing.command;
42
+ }
43
+ const toolsRef = { current: tools };
44
+ const infoRef = { current: info };
45
+ const service = new ToolStdioMcpService(() => toolsRef.current, () => infoRef.current);
46
+ const address = await service.start();
47
+ const command = buildProxyCommand(address.socketPath);
48
+ serviceEntries.set(owner, {
49
+ service,
50
+ command,
51
+ toolsRef,
52
+ infoRef,
53
+ });
54
+ activeServices.add(service);
55
+ serviceFinalizer.register(owner, service, owner);
56
+ return command;
57
+ }
58
+ export function releaseAgentToolService(owner) {
59
+ const entry = serviceEntries.get(owner);
60
+ if (!entry) {
61
+ return;
62
+ }
63
+ entry.service.stop();
64
+ activeServices.delete(entry.service);
65
+ serviceEntries.delete(owner);
66
+ serviceFinalizer.unregister(owner);
67
+ }
68
+ function buildProxyCommand(socketPath) {
69
+ const proxyPath = resolveProxyPath();
70
+ return {
71
+ command: process.execPath,
72
+ args: [proxyPath],
73
+ env: {
74
+ UNAGENT_MCP_SOCKET: socketPath,
75
+ },
76
+ };
77
+ }
78
+ function resolveProxyPath() {
79
+ const proxyPath = fileURLToPath(new URL("./mcp-stdio-proxy.js", import.meta.url));
80
+ if (!existsSync(proxyPath)) {
81
+ throw new Error(`MCP stdio proxy not found at ${proxyPath}. ` +
82
+ "Run npm run build to generate dist output.");
83
+ }
84
+ return proxyPath;
85
+ }
86
+ function resolveServerInfo(info) {
87
+ return {
88
+ name: info?.name ?? "custom-tools",
89
+ version: info?.version ?? "1.0.0",
90
+ };
91
+ }
92
+ function ensureUniqueToolNames(tools) {
93
+ const seen = new Set();
94
+ for (const tool of tools) {
95
+ if (seen.has(tool.name)) {
96
+ throw new Error(`Duplicate tool name "${tool.name}" for a single agent`);
97
+ }
98
+ seen.add(tool.name);
99
+ }
100
+ }
101
+ function stopAllServices() {
102
+ for (const service of activeServices) {
103
+ service.stop();
104
+ }
105
+ activeServices.clear();
106
+ }
107
+ process.on("exit", () => {
108
+ stopAllServices();
109
+ });
110
+ process.on("SIGINT", () => {
111
+ stopAllServices();
112
+ process.exit(0);
113
+ });
114
+ process.on("SIGTERM", () => {
115
+ stopAllServices();
116
+ process.exit(0);
117
+ });
118
+ //# sourceMappingURL=tool-service-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-service-manager.js","sourceRoot":"","sources":["../../src/tools/tool-service-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { RegisteredTool } from "./tool-types.js";
2
+ export type ToolServerInfo = {
3
+ name: string;
4
+ version: string;
5
+ };
6
+ export type ToolStdioMcpServiceOptions = {
7
+ socketPath?: string;
8
+ };
9
+ export type ToolStdioMcpServiceAddress = {
10
+ socketPath: string;
11
+ };
12
+ export declare class ToolStdioMcpService {
13
+ private server;
14
+ private address;
15
+ private readonly socketPath;
16
+ private readonly getTools;
17
+ private readonly getServerInfo;
18
+ private readonly activeServers;
19
+ private readonly activeSockets;
20
+ constructor(getTools: () => RegisteredTool[], getServerInfo: () => ToolServerInfo, options?: ToolStdioMcpServiceOptions);
21
+ start(): Promise<ToolStdioMcpServiceAddress>;
22
+ stop(): void;
23
+ getAddress(): ToolStdioMcpServiceAddress | null;
24
+ private waitForListening;
25
+ private waitForAddress;
26
+ private handleConnection;
27
+ private createServer;
28
+ }
29
+ //# sourceMappingURL=tool-stdio-mcp-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stdio-mcp-service.d.ts","sourceRoot":"","sources":["../../src/tools/tool-stdio-mcp-service.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAuBF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;gBAGjD,QAAQ,EAAE,MAAM,cAAc,EAAE,EAChC,aAAa,EAAE,MAAM,cAAc,EACnC,OAAO,GAAE,0BAA+B;IAOpC,KAAK,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAgBlD,IAAI,IAAI,IAAI;IA6BZ,UAAU,IAAI,0BAA0B,GAAG,IAAI;YAIjC,gBAAgB;YA8BhB,cAAc;IAiC5B,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,YAAY;CA0BrB"}
@@ -0,0 +1,185 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { existsSync, unlinkSync } from "node:fs";
3
+ import { createServer } from "node:net";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
+ import { resolveParentToolUseId, runWithToolCallContext } from "./tool-call-context.js";
9
+ function createSocketPath() {
10
+ const name = `unagent-mcp-${process.pid}-${randomBytes(6).toString("hex")}`;
11
+ if (process.platform === "win32") {
12
+ return `\\\\.\\pipe\\${name}`;
13
+ }
14
+ return join(tmpdir(), name);
15
+ }
16
+ function cleanupSocketPath(socketPath) {
17
+ if (!socketPath || process.platform === "win32") {
18
+ return;
19
+ }
20
+ try {
21
+ if (existsSync(socketPath)) {
22
+ unlinkSync(socketPath);
23
+ }
24
+ }
25
+ catch {
26
+ }
27
+ }
28
+ export class ToolStdioMcpService {
29
+ server = null;
30
+ address = null;
31
+ socketPath;
32
+ getTools;
33
+ getServerInfo;
34
+ activeServers = new Set();
35
+ activeSockets = new Set();
36
+ constructor(getTools, getServerInfo, options = {}) {
37
+ this.getTools = getTools;
38
+ this.getServerInfo = getServerInfo;
39
+ this.socketPath = options.socketPath ?? createSocketPath();
40
+ }
41
+ async start() {
42
+ if (this.address) {
43
+ return this.address;
44
+ }
45
+ if (this.server) {
46
+ return await this.waitForAddress();
47
+ }
48
+ this.server = createServer((socket) => {
49
+ this.handleConnection(socket);
50
+ });
51
+ return await this.waitForListening();
52
+ }
53
+ stop() {
54
+ if (!this.server) {
55
+ return;
56
+ }
57
+ const server = this.server;
58
+ const socketPath = this.address?.socketPath ?? this.socketPath;
59
+ this.server = null;
60
+ this.address = null;
61
+ for (const active of this.activeServers) {
62
+ void active.close().catch((error) => {
63
+ console.error("[ToolStdioMcpService] Failed to close MCP server:", error);
64
+ });
65
+ }
66
+ this.activeServers.clear();
67
+ for (const socket of this.activeSockets) {
68
+ socket.destroy();
69
+ }
70
+ this.activeSockets.clear();
71
+ server.close((error) => {
72
+ if (error) {
73
+ console.error("[ToolStdioMcpService] Failed to stop server:", error);
74
+ }
75
+ cleanupSocketPath(socketPath);
76
+ });
77
+ }
78
+ getAddress() {
79
+ return this.address;
80
+ }
81
+ async waitForListening() {
82
+ if (!this.server) {
83
+ throw new Error("stdio MCP server not created");
84
+ }
85
+ return await new Promise((resolve, reject) => {
86
+ const server = this.server;
87
+ if (!server) {
88
+ reject(new Error("stdio MCP server not created"));
89
+ return;
90
+ }
91
+ server.once("error", (error) => {
92
+ this.server = null;
93
+ reject(error);
94
+ });
95
+ cleanupSocketPath(this.socketPath);
96
+ server.listen(this.socketPath, () => {
97
+ const address = server.address();
98
+ if (!address || typeof address !== "string") {
99
+ reject(new Error("Failed to determine stdio MCP server socket path"));
100
+ return;
101
+ }
102
+ this.address = { socketPath: address };
103
+ resolve(this.address);
104
+ });
105
+ });
106
+ }
107
+ async waitForAddress() {
108
+ if (this.address) {
109
+ return this.address;
110
+ }
111
+ return await new Promise((resolve, reject) => {
112
+ const server = this.server;
113
+ if (!server) {
114
+ reject(new Error("stdio MCP server not created"));
115
+ return;
116
+ }
117
+ const onListening = () => {
118
+ server.off("error", onError);
119
+ const address = server.address();
120
+ if (!address || typeof address !== "string") {
121
+ reject(new Error("Failed to determine stdio MCP server socket path"));
122
+ return;
123
+ }
124
+ this.address = { socketPath: address };
125
+ resolve(this.address);
126
+ };
127
+ const onError = (error) => {
128
+ server.off("listening", onListening);
129
+ reject(error);
130
+ };
131
+ server.once("listening", onListening);
132
+ server.once("error", onError);
133
+ });
134
+ }
135
+ handleConnection(socket) {
136
+ socket.setNoDelay(true);
137
+ this.activeSockets.add(socket);
138
+ const tools = this.getTools();
139
+ const server = this.createServer(tools);
140
+ const transport = new StdioServerTransport(socket, socket);
141
+ this.activeServers.add(server);
142
+ let cleaned = false;
143
+ const cleanup = () => {
144
+ if (cleaned) {
145
+ return;
146
+ }
147
+ cleaned = true;
148
+ socket.removeAllListeners();
149
+ socket.destroy();
150
+ void server.close().catch((error) => {
151
+ console.error("[ToolStdioMcpService] Failed to close MCP server:", error);
152
+ });
153
+ this.activeServers.delete(server);
154
+ this.activeSockets.delete(socket);
155
+ };
156
+ socket.on("close", cleanup);
157
+ socket.on("error", (error) => {
158
+ console.error("[ToolStdioMcpService] Socket error:", error);
159
+ cleanup();
160
+ });
161
+ void server.connect(transport).catch((error) => {
162
+ console.error("[ToolStdioMcpService] Failed to connect MCP server:", error);
163
+ socket.destroy();
164
+ cleanup();
165
+ });
166
+ }
167
+ createServer(tools) {
168
+ const serverInfo = this.getServerInfo();
169
+ const server = new McpServer({
170
+ name: serverInfo.name,
171
+ version: serverInfo.version,
172
+ });
173
+ for (const tool of tools) {
174
+ server.registerTool(tool.name, {
175
+ description: tool.description,
176
+ inputSchema: tool.inputSchema,
177
+ }, async (args, extra) => {
178
+ const parentToolUseId = resolveParentToolUseId(extra);
179
+ return runWithToolCallContext(parentToolUseId ? { parentToolUseId } : undefined, () => tool.handler(args));
180
+ });
181
+ }
182
+ return server;
183
+ }
184
+ }
185
+ //# sourceMappingURL=tool-stdio-mcp-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-stdio-mcp-service.js","sourceRoot":"","sources":["../../src/tools/tool-stdio-mcp-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import type { CallToolResult as McpCallToolResult, ContentBlock as McpContentBlock } from "@modelcontextprotocol/sdk/types.js";
3
+ export type ToolContentBlock = McpContentBlock;
4
+ export type CallToolResult = McpCallToolResult;
5
+ export type ToolDefinition<Schema extends z.ZodRawShape = z.ZodRawShape> = {
6
+ name: string;
7
+ description: string;
8
+ handler: (args: z.infer<z.ZodObject<Schema>>) => ToolHandlerResult;
9
+ } & ({
10
+ inputSchema: Schema;
11
+ input_schema?: Schema;
12
+ } | {
13
+ input_schema: Schema;
14
+ inputSchema?: Schema;
15
+ });
16
+ export type ToolHandlerResultValue = string | {
17
+ content: string;
18
+ isError?: boolean;
19
+ } | ToolContentBlock[];
20
+ export type ToolHandlerResult = ToolHandlerResultValue | Promise<ToolHandlerResultValue>;
21
+ export interface RegisteredTool {
22
+ id: string;
23
+ name: string;
24
+ description: string;
25
+ inputSchema: z.ZodRawShape | z.ZodTypeAny;
26
+ handler: (args: unknown) => Promise<CallToolResult>;
27
+ createdAt: Date;
28
+ }
29
+ //# sourceMappingURL=tool-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-types.d.ts","sourceRoot":"","sources":["../../src/tools/tool-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,IAAI,iBAAiB,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE/H,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAE/C,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAM/C,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,iBAAiB,CAAC;CACpE,GAAG,CACA;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CACjD,CAAC;AAKF,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,gBAAgB,EAAE,CAAC;AAEvB,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAKzF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;IAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACpD,SAAS,EAAE,IAAI,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-types.js","sourceRoot":"","sources":["../../src/tools/tool-types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@compyle/unagent",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Unified AI Agents Framework - A unified AI Agent development framework",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "watch": "tsc --watch",
21
+ "lint": "eslint src --ext .ts",
22
+ "format": "prettier --write \"src/**/*.ts\"",
23
+ "test": "node --test test/index.test.js"
24
+ },
25
+ "keywords": [
26
+ "agents",
27
+ "ai",
28
+ "framework",
29
+ "claude",
30
+ "codex",
31
+ "mcp",
32
+ "model-context-protocol",
33
+ "unified"
34
+ ],
35
+ "author": "",
36
+ "license": "MIT",
37
+ "devDependencies": {
38
+ "@types/node": "^20.11.0",
39
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
40
+ "@typescript-eslint/parser": "^6.19.0",
41
+ "eslint": "^8.56.0",
42
+ "prettier": "^3.2.4",
43
+ "ts-node": "^10.9.2",
44
+ "typescript": "^5.3.3"
45
+ },
46
+ "dependencies": {
47
+ "@anthropic-ai/claude-agent-sdk": "^0.2.31",
48
+ "@iarna/toml": "^2.2.5",
49
+ "@modelcontextprotocol/sdk": "^1.25.3",
50
+ "@openai/codex-sdk": "^0.87.0",
51
+ "toml": "^3.0.0",
52
+ "zod": "^4.3.6",
53
+ "zod-to-json-schema": "^3.25.1"
54
+ },
55
+ "engines": {
56
+ "node": ">=18.0.0"
57
+ }
58
+ }