agentx-sdk 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -160
- package/dist/agent.d.ts +5 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +63 -30
- package/dist/agent.js.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +8 -4
- package/dist/config/config.js.map +1 -1
- package/dist/contracts/entities/agent-event.d.ts.map +1 -1
- package/dist/contracts/entities/index.d.ts +1 -1
- package/dist/contracts/entities/index.d.ts.map +1 -1
- package/dist/core/compaction/autocompact.d.ts.map +1 -1
- package/dist/core/compaction/autocompact.js +9 -12
- package/dist/core/compaction/autocompact.js.map +1 -1
- package/dist/core/compaction/microcompact.js +1 -1
- package/dist/core/compaction/microcompact.js.map +1 -1
- package/dist/core/compaction/snip-compact.d.ts.map +1 -1
- package/dist/core/compaction/snip-compact.js.map +1 -1
- package/dist/core/compaction/tool-result-budget.js.map +1 -1
- package/dist/core/context-analysis.js.map +1 -1
- package/dist/core/context-builder.d.ts.map +1 -1
- package/dist/core/context-builder.js +8 -5
- package/dist/core/context-builder.js.map +1 -1
- package/dist/core/conversation-manager.d.ts +1 -1
- package/dist/core/conversation-manager.d.ts.map +1 -1
- package/dist/core/conversation-manager.js +4 -2
- package/dist/core/conversation-manager.js.map +1 -1
- package/dist/core/execution-context.d.ts.map +1 -1
- package/dist/core/execution-context.js.map +1 -1
- package/dist/core/message-normalize.js +1 -1
- package/dist/core/message-normalize.js.map +1 -1
- package/dist/core/prompt-builders.d.ts.map +1 -1
- package/dist/core/prompt-builders.js +2 -2
- package/dist/core/prompt-builders.js.map +1 -1
- package/dist/core/react-loop.d.ts.map +1 -1
- package/dist/core/react-loop.js +79 -23
- package/dist/core/react-loop.js.map +1 -1
- package/dist/core/stream-emitter.js +17 -18
- package/dist/core/stream-emitter.js.map +1 -1
- package/dist/core/streaming-tool-executor.d.ts.map +1 -1
- package/dist/core/streaming-tool-executor.js +18 -8
- package/dist/core/streaming-tool-executor.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge/chunking.js +1 -1
- package/dist/knowledge/chunking.js.map +1 -1
- package/dist/knowledge/embedding-service.d.ts.map +1 -1
- package/dist/knowledge/embedding-service.js +5 -2
- package/dist/knowledge/embedding-service.js.map +1 -1
- package/dist/knowledge/knowledge-manager.d.ts.map +1 -1
- package/dist/knowledge/knowledge-manager.js +3 -2
- package/dist/knowledge/knowledge-manager.js.map +1 -1
- package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -1
- package/dist/knowledge/sqlite-vector-store.js +12 -6
- package/dist/knowledge/sqlite-vector-store.js.map +1 -1
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +4 -2
- package/dist/llm/errors.js.map +1 -1
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +31 -13
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/memory/file-memory-system.d.ts.map +1 -1
- package/dist/memory/file-memory-system.js +34 -17
- package/dist/memory/file-memory-system.js.map +1 -1
- package/dist/memory/memory-extractor.d.ts +9 -9
- package/dist/memory/memory-extractor.d.ts.map +1 -1
- package/dist/memory/memory-extractor.js +4 -2
- package/dist/memory/memory-extractor.js.map +1 -1
- package/dist/memory/memory-paths.d.ts.map +1 -1
- package/dist/memory/memory-paths.js +11 -4
- package/dist/memory/memory-paths.js.map +1 -1
- package/dist/memory/memory-prompts.d.ts.map +1 -1
- package/dist/memory/memory-prompts.js +1 -1
- package/dist/memory/memory-prompts.js.map +1 -1
- package/dist/memory/memory-relevance.d.ts +2 -1
- package/dist/memory/memory-relevance.d.ts.map +1 -1
- package/dist/memory/memory-relevance.js +1 -1
- package/dist/memory/memory-relevance.js.map +1 -1
- package/dist/memory/memory-scanner.d.ts.map +1 -1
- package/dist/memory/memory-scanner.js +7 -6
- package/dist/memory/memory-scanner.js.map +1 -1
- package/dist/memory/memory-tools.d.ts.map +1 -1
- package/dist/memory/memory-tools.js +16 -6
- package/dist/memory/memory-tools.js.map +1 -1
- package/dist/memory/memory-types.js +1 -1
- package/dist/memory/memory-types.js.map +1 -1
- package/dist/skills/skill-glob.js +1 -1
- package/dist/skills/skill-glob.js.map +1 -1
- package/dist/skills/skill-loader.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +29 -25
- package/dist/skills/skill-loader.js.map +1 -1
- package/dist/skills/skill-manager.d.ts.map +1 -1
- package/dist/skills/skill-manager.js +18 -17
- package/dist/skills/skill-manager.js.map +1 -1
- package/dist/storage/sqlite-conversation-store.d.ts.map +1 -1
- package/dist/storage/sqlite-conversation-store.js +15 -7
- package/dist/storage/sqlite-conversation-store.js.map +1 -1
- package/dist/storage/sqlite-database.js +3 -1
- package/dist/storage/sqlite-database.js.map +1 -1
- package/dist/tools/builtin/ask-user.d.ts.map +1 -1
- package/dist/tools/builtin/ask-user.js +4 -1
- package/dist/tools/builtin/ask-user.js.map +1 -1
- package/dist/tools/builtin/bash.d.ts.map +1 -1
- package/dist/tools/builtin/bash.js +5 -3
- package/dist/tools/builtin/bash.js.map +1 -1
- package/dist/tools/builtin/file-edit.d.ts.map +1 -1
- package/dist/tools/builtin/file-edit.js +16 -4
- package/dist/tools/builtin/file-edit.js.map +1 -1
- package/dist/tools/builtin/file-read.d.ts.map +1 -1
- package/dist/tools/builtin/file-read.js +9 -5
- package/dist/tools/builtin/file-read.js.map +1 -1
- package/dist/tools/builtin/file-write.d.ts.map +1 -1
- package/dist/tools/builtin/file-write.js +4 -1
- package/dist/tools/builtin/file-write.js.map +1 -1
- package/dist/tools/builtin/glob.d.ts.map +1 -1
- package/dist/tools/builtin/glob.js +9 -4
- package/dist/tools/builtin/glob.js.map +1 -1
- package/dist/tools/builtin/grep.d.ts.map +1 -1
- package/dist/tools/builtin/grep.js +6 -2
- package/dist/tools/builtin/grep.js.map +1 -1
- package/dist/tools/builtin/path-guard.d.ts.map +1 -1
- package/dist/tools/builtin/path-guard.js.map +1 -1
- package/dist/tools/builtin/web-fetch.d.ts.map +1 -1
- package/dist/tools/builtin/web-fetch.js +16 -8
- package/dist/tools/builtin/web-fetch.js.map +1 -1
- package/dist/tools/json-schema-to-zod.d.ts +2 -2
- package/dist/tools/json-schema-to-zod.d.ts.map +1 -1
- package/dist/tools/json-schema-to-zod.js +3 -5
- package/dist/tools/json-schema-to-zod.js.map +1 -1
- package/dist/tools/mcp-adapter.d.ts +2 -2
- package/dist/tools/mcp-adapter.d.ts.map +1 -1
- package/dist/tools/mcp-adapter.js +40 -24
- package/dist/tools/mcp-adapter.js.map +1 -1
- package/dist/tools/skill-tool.d.ts.map +1 -1
- package/dist/tools/skill-tool.js +12 -13
- package/dist/tools/skill-tool.js.map +1 -1
- package/dist/tools/sql/sql-tool-factory.d.ts.map +1 -1
- package/dist/tools/sql/sql-tool-factory.js +8 -6
- package/dist/tools/sql/sql-tool-factory.js.map +1 -1
- package/dist/tools/tool-executor.d.ts +3 -3
- package/dist/tools/tool-executor.d.ts.map +1 -1
- package/dist/tools/tool-executor.js +17 -8
- package/dist/tools/tool-executor.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/model-context.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +5 -2
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/token-counter.d.ts.map +1 -1
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +22 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,
|
|
1
|
+
{"version":3,"file":"file-write.js","sourceRoot":"","sources":["../../../src/tools/builtin/file-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EACT,2FAA2F;QAC7F,UAAU,EAAE,eAAe;QAC3B,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAE,IAA8B,CAAC,SAAS;QAEhE,KAAK,CAAC,OAAO,CAAC,OAAgB;YAC5B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAA0C,CAAC;YAE1E,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,OAAO,sBAAsB,KAAK,aAAa,SAAS,EAAE,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,sBAAsB,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE;oBACxE,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/glob.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAwBxE,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/glob.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAwBxE,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAqE7D"}
|
|
@@ -39,7 +39,11 @@ export function createGlobTool(workingDir) {
|
|
|
39
39
|
return { content: error.message, isError: true };
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
const baseDir = searchPath
|
|
42
|
+
const baseDir = searchPath?.trim()
|
|
43
|
+
? searchPath
|
|
44
|
+
: workingDir?.trim()
|
|
45
|
+
? workingDir
|
|
46
|
+
: process.cwd();
|
|
43
47
|
const allFiles = [];
|
|
44
48
|
try {
|
|
45
49
|
await walkDir(baseDir, allFiles);
|
|
@@ -49,7 +53,7 @@ export function createGlobTool(workingDir) {
|
|
|
49
53
|
}
|
|
50
54
|
// Match against pattern (relative paths). Use path.relative + posix-style
|
|
51
55
|
// separators so `/home/user` does not prefix-match `/home/username`.
|
|
52
|
-
const matched = allFiles.filter(f => {
|
|
56
|
+
const matched = allFiles.filter((f) => {
|
|
53
57
|
const rel = relative(baseDir, f);
|
|
54
58
|
if (rel.startsWith('..') || rel === '')
|
|
55
59
|
return false;
|
|
@@ -71,9 +75,10 @@ export function createGlobTool(workingDir) {
|
|
|
71
75
|
}));
|
|
72
76
|
withStats.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
73
77
|
const limited = withStats.slice(0, MAX_RESULTS);
|
|
74
|
-
const lines = limited.map(f => f.path);
|
|
78
|
+
const lines = limited.map((f) => f.path);
|
|
75
79
|
const truncated = matched.length > MAX_RESULTS;
|
|
76
|
-
return lines.join('\n') +
|
|
80
|
+
return (lines.join('\n') +
|
|
81
|
+
(truncated ? `\n\n[${matched.length - MAX_RESULTS} more files not shown]` : ''));
|
|
77
82
|
},
|
|
78
83
|
};
|
|
79
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../src/tools/builtin/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAClF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACjF,CAAC,CAAC;AAEH,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,OAAiB;IACnD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAmB;IAChD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../../src/tools/builtin/glob.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/grep.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/grep.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAwCxE,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAwF7D"}
|
|
@@ -48,7 +48,7 @@ export function createGrepTool(workingDir) {
|
|
|
48
48
|
isConcurrencySafe: true,
|
|
49
49
|
isReadOnly: true,
|
|
50
50
|
async execute(rawArgs, signal) {
|
|
51
|
-
const { pattern, path: searchPath, glob: globFilter, max_results } = rawArgs;
|
|
51
|
+
const { pattern, path: searchPath, glob: globFilter, max_results, } = rawArgs;
|
|
52
52
|
if (workingDir && searchPath) {
|
|
53
53
|
try {
|
|
54
54
|
assertSafePath(searchPath, workingDir);
|
|
@@ -57,7 +57,11 @@ export function createGrepTool(workingDir) {
|
|
|
57
57
|
return { content: error.message, isError: true };
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
const baseDir = searchPath
|
|
60
|
+
const baseDir = searchPath?.trim()
|
|
61
|
+
? searchPath
|
|
62
|
+
: workingDir?.trim()
|
|
63
|
+
? workingDir
|
|
64
|
+
: process.cwd();
|
|
61
65
|
const maxResults = max_results ?? DEFAULT_MAX_RESULTS;
|
|
62
66
|
// Reject patterns that can cause catastrophic backtracking (ReDoS).
|
|
63
67
|
// Catches: quantified groups (a+)+, consecutive quantifiers a+*, quantified classes [a-z]*,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/builtin/grep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAClF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC1F,CAAC,CAAC;AAEH,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,WAAoB;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,UAAU,IAAI,CAAC,CAAS;QAC3B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/builtin/grep.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"path-guard.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB;IAC9C,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"path-guard.js","sourceRoot":"","sources":["../../../src/tools/builtin/path-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD;;;GAGG;AACH,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,kBAAkB;IAC9C,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,mCAAmC,OAAO,GAAG,CAClF,CAAC;IACJ,CAAC;IACD,kEAAkE;IAClE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,yCAAyC,OAAO,GAAG,CACpG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/web-fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/web-fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAgFxE,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C;AA4GD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,CA4FrF"}
|
|
@@ -16,11 +16,15 @@ function validateFetchUrl(rawUrl) {
|
|
|
16
16
|
}
|
|
17
17
|
const host = parsed.hostname.toLowerCase();
|
|
18
18
|
// Loopback and wildcard hostnames
|
|
19
|
-
if (host === 'localhost' ||
|
|
19
|
+
if (host === 'localhost' ||
|
|
20
|
+
host === '0.0.0.0' ||
|
|
21
|
+
host === '::1' ||
|
|
22
|
+
host === '[::1]' ||
|
|
23
|
+
host === '::') {
|
|
20
24
|
return `Blocked hostname: ${host}`;
|
|
21
25
|
}
|
|
22
26
|
// IPv4 literal checks (loopback, private ranges, link-local metadata)
|
|
23
|
-
const ipv4 =
|
|
27
|
+
const ipv4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
|
|
24
28
|
if (ipv4) {
|
|
25
29
|
const [a, b] = ipv4.slice(1).map(Number);
|
|
26
30
|
if (a === 127)
|
|
@@ -45,7 +49,7 @@ function validateFetchUrl(rawUrl) {
|
|
|
45
49
|
if (/^f[cd]/i.test(ipv6Bare))
|
|
46
50
|
return 'Blocked IPv6 private range (fc00::/7)';
|
|
47
51
|
// IPv4-mapped: ::ffff:a.b.c.d — re-validate the embedded IPv4 address
|
|
48
|
-
const ipv4MappedMatch =
|
|
52
|
+
const ipv4MappedMatch = /^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/i.exec(ipv6Bare);
|
|
49
53
|
if (ipv4MappedMatch) {
|
|
50
54
|
const embeddedResult = validateFetchUrl(`http://${ipv4MappedMatch[1]}/`);
|
|
51
55
|
if (embeddedResult)
|
|
@@ -55,7 +59,7 @@ function validateFetchUrl(rawUrl) {
|
|
|
55
59
|
// canonicalises ::ffff:10.0.0.1 to ::ffff:a00:1, so a dot-notation regex
|
|
56
60
|
// alone leaves the SSRF guard wide open. Decode the two hex groups back
|
|
57
61
|
// into the IPv4 octets and re-validate.
|
|
58
|
-
const ipv4MappedHex =
|
|
62
|
+
const ipv4MappedHex = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i.exec(ipv6Bare);
|
|
59
63
|
if (ipv4MappedHex) {
|
|
60
64
|
const high = parseInt(ipv4MappedHex[1], 16);
|
|
61
65
|
const low = parseInt(ipv4MappedHex[2], 16);
|
|
@@ -177,8 +181,7 @@ export function createWebFetchTool(options) {
|
|
|
177
181
|
const getResolver = () => {
|
|
178
182
|
if (options?.dnsResolver)
|
|
179
183
|
return Promise.resolve(options.dnsResolver);
|
|
180
|
-
|
|
181
|
-
resolverPromise = defaultDnsResolver();
|
|
184
|
+
resolverPromise ??= defaultDnsResolver();
|
|
182
185
|
return resolverPromise;
|
|
183
186
|
};
|
|
184
187
|
return {
|
|
@@ -203,7 +206,10 @@ export function createWebFetchTool(options) {
|
|
|
203
206
|
let response;
|
|
204
207
|
for (let hop = 0; hop <= MAX_REDIRECT_HOPS; hop++) {
|
|
205
208
|
if (hop === MAX_REDIRECT_HOPS) {
|
|
206
|
-
return {
|
|
209
|
+
return {
|
|
210
|
+
content: `SSRF check: too many redirects (>${MAX_REDIRECT_HOPS})`,
|
|
211
|
+
isError: true,
|
|
212
|
+
};
|
|
207
213
|
}
|
|
208
214
|
response = await fetch(currentUrl, {
|
|
209
215
|
signal,
|
|
@@ -244,7 +250,9 @@ export function createWebFetchTool(options) {
|
|
|
244
250
|
text = text.slice(0, maxChars) + `\n\n[truncated — body size limit reached]`;
|
|
245
251
|
}
|
|
246
252
|
else if (text.length > maxChars) {
|
|
247
|
-
text =
|
|
253
|
+
text =
|
|
254
|
+
text.slice(0, maxChars) +
|
|
255
|
+
`\n\n[truncated — ${text.length - maxChars} characters omitted]`;
|
|
248
256
|
}
|
|
249
257
|
return text || '(empty response)';
|
|
250
258
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/builtin/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,sDAAsD;AAE/F,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,MAAc;IACtC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE3C,kCAAkC;IAClC,
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/builtin/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,sDAAsD;AAE/F,gGAAgG;AAChG,SAAS,gBAAgB,CAAC,MAAc;IACtC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,mBAAmB,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE3C,kCAAkC;IAClC,IACE,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,KAAK;QACd,IAAI,KAAK,OAAO;QAChB,IAAI,KAAK,IAAI,EACb,CAAC;QACD,OAAO,qBAAqB,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,sEAAsE;IACtE,MAAM,IAAI,GAAG,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqC,CAAC;QAC7E,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,0BAA0B,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,kCAAkC,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,sCAAsC,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,qCAAqC,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,2CAA2C,CAAC;QAC/E,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,mBAAmB,CAAC;IAC1C,CAAC;IAED,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvF,sCAAsC;IACtC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,6CAA6C,CAAC;IACtF,oDAAoD;IACpD,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,uCAAuC,CAAC;IAC7E,sEAAsE;IACtE,MAAM,eAAe,GAAG,gDAAgD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxF,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,cAAc,GAAG,gBAAgB,CAAC,UAAU,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzE,IAAI,cAAc;YAAE,OAAO,6BAA6B,cAAc,EAAE,CAAC;IAC3E,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,wCAAwC;IACxC,MAAM,aAAa,GAAG,2CAA2C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACrB,MAAM,cAAc,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,cAAc;YAAE,OAAO,4CAA4C,cAAc,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,OAAO,GAAG,yBAAyB,CAAC;AAQ1C,KAAK,UAAU,kBAAkB;IAC/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC9C,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAqB;IACpE,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,mEAAmE;IACnE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9F,IAAI,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACpD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAC5B,CAAC,CAAC;QACH,MAAM,SAAS,GAAa;YAC1B,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;YACrE,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,GAAG;gBAAE,OAAO,0BAA0B,QAAQ,gBAAgB,IAAI,MAAM,GAAG,EAAE,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACvF,CAAC,CAAC;AAEH,+CAA+C;AAC/C,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;SAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,QAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,MAAM,GAAI,QAAQ,CAAC,IAAmC,CAAC,SAAS,EAAE,CAAC;IACzE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,uEAAuE;YACvE,sEAAsE;YACtE,uEAAuE;YACvE,yEAAyE;YACzE,wEAAwE;YACxE,IAAI,SAAS,GAAG,aAAa,IAAI,cAAc,EAAE,CAAC;gBAChD,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBACrB,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;YACR,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC;YACjC,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;YAC9B,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,2CAA2C;QAC3C,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAuC;IACxE,IAAI,eAAe,GAAgC,IAAI,CAAC;IACxD,MAAM,WAAW,GAAG,GAAyB,EAAE;QAC7C,IAAI,OAAO,EAAE,WAAW;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtE,eAAe,KAAK,kBAAkB,EAAE,CAAC;QACzC,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,kFAAkF;QAC/F,UAAU,EAAE,cAAc;QAC1B,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,IAAI;QAEhB,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,MAAmB;YACjD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,OAAyC,CAAC;YACrE,MAAM,QAAQ,GAAG,SAAS,IAAI,iBAAiB,CAAC;YAEhD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,OAAO;gBAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1D,IAAI,UAAU;gBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAE9D,IAAI,CAAC;gBACH,yEAAyE;gBACzE,IAAI,UAAU,GAAG,GAAG,CAAC;gBACrB,IAAI,QAAmB,CAAC;gBAExB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,iBAAiB,EAAE,GAAG,EAAE,EAAE,CAAC;oBAClD,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;wBAC9B,OAAO;4BACL,OAAO,EAAE,oCAAoC,iBAAiB,GAAG;4BACjE,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;wBACjC,MAAM;wBACN,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE;wBAC3C,QAAQ,EAAE,QAAQ;qBACnB,CAAC,CAAC;oBAEH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;wBACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACd,OAAO,EAAE,OAAO,EAAE,kCAAkC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wBACxE,CAAC;wBACD,IAAI,OAAe,CAAC;wBACpB,IAAI,CAAC;4BACH,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC;wBAC/C,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,EAAE,OAAO,EAAE,iCAAiC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wBACjF,CAAC;wBACD,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;wBAClD,IAAI,eAAe,EAAE,CAAC;4BACpB,OAAO,EAAE,OAAO,EAAE,qBAAqB,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wBAC5E,CAAC;wBACD,UAAU,GAAG,OAAO,CAAC;wBACrB,SAAS;oBACX,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,OAAO,EAAE,OAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBACvF,CAAC;gBAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC/D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAE9E,IAAI,IAAI,GAAG,OAAO,CAAC;gBACnB,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;gBAED,IAAI,gBAAgB,EAAE,CAAC;oBACrB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,2CAA2C,CAAC;gBAC/E,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;oBAClC,IAAI;wBACF,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;4BACvB,oBAAoB,IAAI,CAAC,MAAM,GAAG,QAAQ,sBAAsB,CAAC;gBACrE,CAAC;gBAED,OAAO,IAAI,IAAI,kBAAkB,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,iBAAkB,KAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjF,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* nullable, descriptions, required fields. Max recursion depth: 10.
|
|
9
9
|
*/
|
|
10
10
|
import { z } from 'zod';
|
|
11
|
-
|
|
11
|
+
interface JsonSchema {
|
|
12
12
|
type?: string;
|
|
13
13
|
properties?: Record<string, JsonSchema>;
|
|
14
14
|
required?: string[];
|
|
@@ -20,7 +20,7 @@ type JsonSchema = {
|
|
|
20
20
|
description?: string;
|
|
21
21
|
default?: unknown;
|
|
22
22
|
[key: string]: unknown;
|
|
23
|
-
}
|
|
23
|
+
}
|
|
24
24
|
/**
|
|
25
25
|
* Convert a JSON Schema to a Zod schema.
|
|
26
26
|
* Returns `z.object({}).passthrough()` for undefined/empty input.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-to-zod.d.ts","sourceRoot":"","sources":["../../src/tools/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,
|
|
1
|
+
{"version":3,"file":"json-schema-to-zod.d.ts","sourceRoot":"","sources":["../../src/tools/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,SAAI,GAAG,CAAC,CAAC,UAAU,CAyDnF"}
|
|
@@ -37,9 +37,7 @@ export function jsonSchemaToZod(schema, depth = 0) {
|
|
|
37
37
|
}
|
|
38
38
|
// Array
|
|
39
39
|
if (type === 'array') {
|
|
40
|
-
const items = schema.items
|
|
41
|
-
? jsonSchemaToZod(schema.items, depth + 1)
|
|
42
|
-
: z.unknown();
|
|
40
|
+
const items = schema.items ? jsonSchemaToZod(schema.items, depth + 1) : z.unknown();
|
|
43
41
|
let arr = z.array(items);
|
|
44
42
|
if (schema.nullable)
|
|
45
43
|
arr = arr.nullable();
|
|
@@ -110,7 +108,7 @@ function buildEnum(values, nullable) {
|
|
|
110
108
|
return e;
|
|
111
109
|
}
|
|
112
110
|
// Mixed types — fall back to union of literals
|
|
113
|
-
const literals = values.map(v => z.literal(v));
|
|
111
|
+
const literals = values.map((v) => z.literal(v));
|
|
114
112
|
if (literals.length >= 2) {
|
|
115
113
|
return z.union(literals);
|
|
116
114
|
}
|
|
@@ -119,7 +117,7 @@ function buildEnum(values, nullable) {
|
|
|
119
117
|
function buildUnion(schemas, depth) {
|
|
120
118
|
// Limit members to prevent DoS via malicious MCP schemas with huge anyOf/oneOf arrays.
|
|
121
119
|
const limited = schemas.slice(0, MAX_UNION_MEMBERS);
|
|
122
|
-
const members = limited.map(s => jsonSchemaToZod(s, depth + 1));
|
|
120
|
+
const members = limited.map((s) => jsonSchemaToZod(s, depth + 1));
|
|
123
121
|
if (members.length >= 2) {
|
|
124
122
|
return z.union(members);
|
|
125
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-to-zod.js","sourceRoot":"","sources":["../../src/tools/json-schema-to-zod.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,iFAAiF;AACjF,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAgB7B;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAA0B,EAAE,KAAK,GAAG,CAAC;IACnE,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAErD,iCAAiC;IACjC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,yBAAyB;IACzB,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;IACR,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"json-schema-to-zod.js","sourceRoot":"","sources":["../../src/tools/json-schema-to-zod.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,13 @@ import type { AgentTool } from '../contracts/entities/agent-tool.js';
|
|
|
2
2
|
import type { MCPConnectionConfig } from '../config/config.js';
|
|
3
3
|
import type { ToolExecutor } from './tool-executor.js';
|
|
4
4
|
export interface MCPHealthStatus {
|
|
5
|
-
servers:
|
|
5
|
+
servers: {
|
|
6
6
|
name: string;
|
|
7
7
|
status: 'connected' | 'disconnected' | 'error' | 'reconnecting';
|
|
8
8
|
lastError?: string;
|
|
9
9
|
toolCount: number;
|
|
10
10
|
uptime: number;
|
|
11
|
-
}
|
|
11
|
+
}[];
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
14
|
* Bridges MCP servers to AgentTool instances.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAyEvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,GAAG,cAAc,CAAC;QAChE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL;AA4CD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoC;IAChE,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;gBAEnD,QAAQ,EAAE,YAAY;IAIlC;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA6ChE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACH,SAAS,IAAI,eAAe;IAY5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,mEAAmE;IACnE,cAAc,IAAI,iBAAiB,EAAE;IASrC,sCAAsC;IACtC,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAIxC,8CAA8C;IACxC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAkB/D,8CAA8C;IACxC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBpE,qEAAqE;IAC/D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwCvF,OAAO,CAAC,WAAW;IAwFnB;;;;OAIG;YACW,mBAAmB;YA+CnB,WAAW;IAkBzB,OAAO,CAAC,gBAAgB;CAoCzB"}
|
|
@@ -19,19 +19,23 @@ class MCPInvalidShapeError extends ZodError {
|
|
|
19
19
|
}
|
|
20
20
|
/** Validated shape of listResources server response. */
|
|
21
21
|
const ListResourcesResultSchema = z.object({
|
|
22
|
-
resources: z.array(z
|
|
22
|
+
resources: z.array(z
|
|
23
|
+
.object({
|
|
23
24
|
uri: z.string(),
|
|
24
25
|
name: z.string(),
|
|
25
26
|
mimeType: z.string().optional(),
|
|
26
27
|
description: z.string().optional(),
|
|
27
|
-
})
|
|
28
|
+
})
|
|
29
|
+
.passthrough()),
|
|
28
30
|
});
|
|
29
31
|
/** Validated shape of readResource server response. */
|
|
30
32
|
const ReadResourceResultSchema = z.object({
|
|
31
|
-
contents: z.array(z
|
|
33
|
+
contents: z.array(z
|
|
34
|
+
.object({
|
|
32
35
|
text: z.string().optional(),
|
|
33
36
|
uri: z.string(),
|
|
34
|
-
})
|
|
37
|
+
})
|
|
38
|
+
.passthrough()),
|
|
35
39
|
});
|
|
36
40
|
/** Validated shape of getPrompt server response. */
|
|
37
41
|
const GetPromptResultSchema = z.object({
|
|
@@ -44,13 +48,15 @@ const GetPromptResultSchema = z.object({
|
|
|
44
48
|
})),
|
|
45
49
|
});
|
|
46
50
|
/** Shape of the content array returned from MCP server tool calls. */
|
|
47
|
-
const MCPToolContentSchema = z.array(z
|
|
51
|
+
const MCPToolContentSchema = z.array(z
|
|
52
|
+
.object({
|
|
48
53
|
type: z.string(),
|
|
49
54
|
text: z.string().optional(),
|
|
50
55
|
data: z.string().optional(),
|
|
51
56
|
mimeType: z.string().optional(),
|
|
52
57
|
uri: z.string().optional(),
|
|
53
|
-
})
|
|
58
|
+
})
|
|
59
|
+
.passthrough());
|
|
54
60
|
export class MCPAdapter {
|
|
55
61
|
executor;
|
|
56
62
|
connections = new Map();
|
|
@@ -73,7 +79,7 @@ export class MCPAdapter {
|
|
|
73
79
|
// List tools from server
|
|
74
80
|
const { tools: mcpTools } = await client.listTools();
|
|
75
81
|
// Convert MCP tools to AgentTools
|
|
76
|
-
const agentTools = mcpTools.map(mcpTool => this.convertTool(config.name, mcpTool, client, config));
|
|
82
|
+
const agentTools = mcpTools.map((mcpTool) => this.convertTool(config.name, mcpTool, client, config));
|
|
77
83
|
// Register tools in executor
|
|
78
84
|
for (const tool of agentTools) {
|
|
79
85
|
this.executor.register(tool);
|
|
@@ -84,7 +90,7 @@ export class MCPAdapter {
|
|
|
84
90
|
config,
|
|
85
91
|
client,
|
|
86
92
|
transport,
|
|
87
|
-
toolNames: agentTools.map(t => t.name),
|
|
93
|
+
toolNames: agentTools.map((t) => t.name),
|
|
88
94
|
connectedAt: Date.now(),
|
|
89
95
|
status: 'connected',
|
|
90
96
|
};
|
|
@@ -132,7 +138,7 @@ export class MCPAdapter {
|
|
|
132
138
|
*/
|
|
133
139
|
getHealth() {
|
|
134
140
|
return {
|
|
135
|
-
servers: [...this.connections.values()].map(conn => ({
|
|
141
|
+
servers: [...this.connections.values()].map((conn) => ({
|
|
136
142
|
name: conn.name,
|
|
137
143
|
status: conn.status,
|
|
138
144
|
lastError: conn.lastError,
|
|
@@ -146,7 +152,7 @@ export class MCPAdapter {
|
|
|
146
152
|
}
|
|
147
153
|
/** Get connection info for all servers (for context injection). */
|
|
148
154
|
getConnections() {
|
|
149
|
-
return [...this.connections.values()].map(conn => ({
|
|
155
|
+
return [...this.connections.values()].map((conn) => ({
|
|
150
156
|
name: conn.name,
|
|
151
157
|
status: conn.status,
|
|
152
158
|
instructions: conn.instructions,
|
|
@@ -160,14 +166,14 @@ export class MCPAdapter {
|
|
|
160
166
|
/** List resources from a connected server. */
|
|
161
167
|
async listResources(serverName) {
|
|
162
168
|
const conn = this.connections.get(serverName);
|
|
163
|
-
if (
|
|
169
|
+
if (conn?.status !== 'connected')
|
|
164
170
|
return [];
|
|
165
171
|
try {
|
|
166
172
|
const raw = await conn.client.listResources?.();
|
|
167
173
|
if (!raw)
|
|
168
174
|
return [];
|
|
169
175
|
const parsed = ListResourcesResultSchema.parse(raw);
|
|
170
|
-
return parsed.resources.map(r => ({ ...r, serverName }));
|
|
176
|
+
return parsed.resources.map((r) => ({ ...r, serverName }));
|
|
171
177
|
}
|
|
172
178
|
catch {
|
|
173
179
|
return [];
|
|
@@ -176,7 +182,7 @@ export class MCPAdapter {
|
|
|
176
182
|
/** Read a specific resource from a server. */
|
|
177
183
|
async readResource(serverName, uri) {
|
|
178
184
|
const conn = this.connections.get(serverName);
|
|
179
|
-
if (
|
|
185
|
+
if (conn?.status !== 'connected') {
|
|
180
186
|
throw new Error(`MCP server "${serverName}" not connected`);
|
|
181
187
|
}
|
|
182
188
|
const raw = await conn.client.readResource?.({ uri });
|
|
@@ -186,12 +192,12 @@ export class MCPAdapter {
|
|
|
186
192
|
if (!result.success) {
|
|
187
193
|
throw new MCPInvalidShapeError(result.error.issues, `invalid resource shape from MCP server "${serverName}"`);
|
|
188
194
|
}
|
|
189
|
-
return result.data.contents.map(c => c.text ?? `[Binary: ${c.uri}]`).join('\n');
|
|
195
|
+
return result.data.contents.map((c) => c.text ?? `[Binary: ${c.uri}]`).join('\n');
|
|
190
196
|
}
|
|
191
197
|
/** Fetch and return a prompt from a server (for skill getPrompt). */
|
|
192
198
|
async getPrompt(serverName, promptName, args) {
|
|
193
199
|
const conn = this.connections.get(serverName);
|
|
194
|
-
if (
|
|
200
|
+
if (conn?.status !== 'connected') {
|
|
195
201
|
throw new Error(`MCP server "${serverName}" not connected`);
|
|
196
202
|
}
|
|
197
203
|
const parsedArgs = {};
|
|
@@ -209,10 +215,12 @@ export class MCPAdapter {
|
|
|
209
215
|
if (!result.success) {
|
|
210
216
|
throw new MCPInvalidShapeError(result.error.issues, `invalid prompt shape from MCP server "${serverName}"`);
|
|
211
217
|
}
|
|
212
|
-
return result.data.messages
|
|
213
|
-
|
|
218
|
+
return result.data.messages
|
|
219
|
+
.map((m) => {
|
|
220
|
+
const content = typeof m.content === 'string' ? m.content : (m.content.text ?? '');
|
|
214
221
|
return content;
|
|
215
|
-
})
|
|
222
|
+
})
|
|
223
|
+
.join('\n');
|
|
216
224
|
}
|
|
217
225
|
convertTool(serverName, mcpTool, client, config) {
|
|
218
226
|
const safeServerName = serverName.replace(/__/g, '_');
|
|
@@ -242,7 +250,9 @@ export class MCPAdapter {
|
|
|
242
250
|
controller.signal.addEventListener('abort', () => reject(new Error(`MCP tool "${mcpTool.name}" timed out after ${timeout}ms`)), { once: true });
|
|
243
251
|
});
|
|
244
252
|
const result = await Promise.race([
|
|
245
|
-
client.callTool({ name: mcpTool.name, arguments: args }, undefined, {
|
|
253
|
+
client.callTool({ name: mcpTool.name, arguments: args }, undefined, {
|
|
254
|
+
signal: controller.signal,
|
|
255
|
+
}),
|
|
246
256
|
timeoutPromise,
|
|
247
257
|
]);
|
|
248
258
|
// Validate the response shape — untrusted MCP servers may return malformed content.
|
|
@@ -251,13 +261,13 @@ export class MCPAdapter {
|
|
|
251
261
|
return { content: 'MCP tool returned invalid content shape', isError: true };
|
|
252
262
|
}
|
|
253
263
|
// Handle mixed content types (text, image, resource)
|
|
254
|
-
const parts = parsedContent.data.map(c => {
|
|
264
|
+
const parts = parsedContent.data.map((c) => {
|
|
255
265
|
if (c.type === 'text' && typeof c.text === 'string')
|
|
256
266
|
return c.text;
|
|
257
267
|
if (c.type === 'image') {
|
|
258
268
|
const mime = c.mimeType ?? 'unknown';
|
|
259
269
|
const dataLen = typeof c.data === 'string' ? c.data.length : 0;
|
|
260
|
-
const sizeKB = Math.round(dataLen * 0.75 / 1024);
|
|
270
|
+
const sizeKB = Math.round((dataLen * 0.75) / 1024);
|
|
261
271
|
return `[Image: ${mime}, ~${sizeKB}KB]`;
|
|
262
272
|
}
|
|
263
273
|
if (c.type === 'resource')
|
|
@@ -307,7 +317,9 @@ export class MCPAdapter {
|
|
|
307
317
|
}
|
|
308
318
|
}
|
|
309
319
|
// Auto-detect: try StreamableHTTP first, fall back to SSE
|
|
310
|
-
const requestInit = config.headers
|
|
320
|
+
const requestInit = config.headers
|
|
321
|
+
? { headers: config.headers }
|
|
322
|
+
: undefined;
|
|
311
323
|
const client1 = new Client({ name: `agentx-${config.name}`, version: '0.1.0' });
|
|
312
324
|
const { StreamableHTTPClientTransport } = await import('@modelcontextprotocol/sdk/client/streamableHttp.js');
|
|
313
325
|
const httpTransport = new StreamableHTTPClientTransport(new URL(config.url), { requestInit });
|
|
@@ -393,7 +405,9 @@ async function loadSDK() {
|
|
|
393
405
|
try {
|
|
394
406
|
const mod = await import('@modelcontextprotocol/sdk/client/index.js');
|
|
395
407
|
// Cast needed because MCP SDK types are broader than our minimal MCPClient interface
|
|
396
|
-
return {
|
|
408
|
+
return {
|
|
409
|
+
Client: mod.Client,
|
|
410
|
+
};
|
|
397
411
|
}
|
|
398
412
|
catch {
|
|
399
413
|
throw new Error('Install @modelcontextprotocol/sdk to use MCP connections: npm install @modelcontextprotocol/sdk');
|
|
@@ -405,7 +419,9 @@ async function closeTransportQuietly(transport) {
|
|
|
405
419
|
if (t && typeof t.close === 'function')
|
|
406
420
|
await Promise.resolve(t.close());
|
|
407
421
|
}
|
|
408
|
-
catch {
|
|
422
|
+
catch {
|
|
423
|
+
/* best-effort cleanup */
|
|
424
|
+
}
|
|
409
425
|
}
|
|
410
426
|
async function createTransport(config) {
|
|
411
427
|
const requestInit = config.headers
|