@anvia/core 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.js +7 -7
- package/dist/{chunk-VXONXP2G.js → chunk-BALBBVI3.js} +5 -5
- package/dist/{chunk-YEBIVZM2.js → chunk-DALYP4PX.js} +4 -4
- package/dist/{chunk-2NDQHV7V.js → chunk-HYUYZEAJ.js} +5 -5
- package/dist/{chunk-4HWN7734.js → chunk-JI5YZWNT.js} +3 -3
- package/dist/{chunk-4BGN6PYF.js → chunk-MELYDKWQ.js} +4 -4
- package/dist/{chunk-BCA4VZ5W.js → chunk-NCPN4SJR.js} +2 -2
- package/dist/{chunk-KYEBWN3E.js → chunk-YLMDBQO4.js} +4 -4
- package/dist/evals/index.js +12 -12
- package/dist/extractor/index.js +8 -8
- package/dist/index.js +8 -8
- package/dist/internal/agent.js +6 -6
- package/dist/mcp/index.js +187 -2
- package/dist/mcp/index.js.map +1 -1
- package/dist/request/index.js +5 -5
- package/dist/skills/index.js +5 -5
- package/dist/tool/index.js +4 -4
- package/dist/vector-store/index.js +2 -2
- package/package.json +4 -3
- /package/dist/{chunk-VXONXP2G.js.map → chunk-BALBBVI3.js.map} +0 -0
- /package/dist/{chunk-YEBIVZM2.js.map → chunk-DALYP4PX.js.map} +0 -0
- /package/dist/{chunk-2NDQHV7V.js.map → chunk-HYUYZEAJ.js.map} +0 -0
- /package/dist/{chunk-4HWN7734.js.map → chunk-JI5YZWNT.js.map} +0 -0
- /package/dist/{chunk-4BGN6PYF.js.map → chunk-MELYDKWQ.js.map} +0 -0
- /package/dist/{chunk-BCA4VZ5W.js.map → chunk-NCPN4SJR.js.map} +0 -0
- /package/dist/{chunk-KYEBWN3E.js.map → chunk-YLMDBQO4.js.map} +0 -0
package/dist/agent/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-JI5YZWNT.js";
|
|
4
|
+
import "../chunk-DALYP4PX.js";
|
|
5
|
+
import "../chunk-BALBBVI3.js";
|
|
6
6
|
import "../chunk-YK4WAAS4.js";
|
|
7
7
|
import "../chunk-XUUY2L2D.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-HYUYZEAJ.js";
|
|
9
|
+
import "../chunk-MELYDKWQ.js";
|
|
10
10
|
import "../chunk-2ODTMRHP.js";
|
|
11
11
|
import "../chunk-UQX6EXWG.js";
|
|
12
12
|
import "../chunk-MRQLEK2B.js";
|
|
13
|
+
import "../chunk-MNWK2USR.js";
|
|
14
|
+
import "../chunk-OIMLU4SF.js";
|
|
13
15
|
import "../chunk-Q25IWLBT.js";
|
|
14
16
|
import "../chunk-MC3CCKEB.js";
|
|
15
17
|
import "../chunk-ADH7NNCS.js";
|
|
16
18
|
import "../chunk-WQKHFADH.js";
|
|
17
|
-
import "../chunk-MNWK2USR.js";
|
|
18
|
-
import "../chunk-OIMLU4SF.js";
|
|
19
19
|
import "../chunk-CWUJUSOS.js";
|
|
20
20
|
export {
|
|
21
21
|
AgentBuilder
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
parseToolArgs,
|
|
6
6
|
toolResultContentToText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HYUYZEAJ.js";
|
|
8
8
|
import {
|
|
9
9
|
runControl,
|
|
10
10
|
toolCallControl
|
|
@@ -15,6 +15,9 @@ import {
|
|
|
15
15
|
createMemoryCompactionSummary,
|
|
16
16
|
cumulativeCompactedMessageCount
|
|
17
17
|
} from "./chunk-MRQLEK2B.js";
|
|
18
|
+
import {
|
|
19
|
+
mapWithConcurrency
|
|
20
|
+
} from "./chunk-OIMLU4SF.js";
|
|
18
21
|
import {
|
|
19
22
|
CompletionRequestBuilder
|
|
20
23
|
} from "./chunk-Q25IWLBT.js";
|
|
@@ -30,9 +33,6 @@ import {
|
|
|
30
33
|
getAssistantGenerationMetadata,
|
|
31
34
|
textFromAssistantContent
|
|
32
35
|
} from "./chunk-ADH7NNCS.js";
|
|
33
|
-
import {
|
|
34
|
-
mapWithConcurrency
|
|
35
|
-
} from "./chunk-OIMLU4SF.js";
|
|
36
36
|
import {
|
|
37
37
|
appendGuardrailPolicies,
|
|
38
38
|
hasEnforcedOutputGuardrails,
|
|
@@ -2729,4 +2729,4 @@ export {
|
|
|
2729
2729
|
extractRagText,
|
|
2730
2730
|
PromptRequest
|
|
2731
2731
|
};
|
|
2732
|
-
//# sourceMappingURL=chunk-
|
|
2732
|
+
//# sourceMappingURL=chunk-BALBBVI3.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PromptRequest
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BALBBVI3.js";
|
|
4
4
|
import {
|
|
5
5
|
isSkillTool
|
|
6
6
|
} from "./chunk-YK4WAAS4.js";
|
|
7
7
|
import {
|
|
8
8
|
ToolSet
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HYUYZEAJ.js";
|
|
10
10
|
import {
|
|
11
11
|
createTool
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MELYDKWQ.js";
|
|
13
13
|
import {
|
|
14
14
|
isStreamingCompletionModel
|
|
15
15
|
} from "./chunk-MC3CCKEB.js";
|
|
@@ -222,4 +222,4 @@ export {
|
|
|
222
222
|
Agent,
|
|
223
223
|
AgentSession
|
|
224
224
|
};
|
|
225
|
-
//# sourceMappingURL=chunk-
|
|
225
|
+
//# sourceMappingURL=chunk-DALYP4PX.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore,
|
|
3
3
|
createTool
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MELYDKWQ.js";
|
|
5
|
+
import {
|
|
6
|
+
embedDocuments
|
|
7
|
+
} from "./chunk-MNWK2USR.js";
|
|
5
8
|
import {
|
|
6
9
|
isToolResultContentArray,
|
|
7
10
|
serializeToolResultOutput
|
|
8
11
|
} from "./chunk-ADH7NNCS.js";
|
|
9
|
-
import {
|
|
10
|
-
embedDocuments
|
|
11
|
-
} from "./chunk-MNWK2USR.js";
|
|
12
12
|
|
|
13
13
|
// src/tool/errors.ts
|
|
14
14
|
var ToolCallError = class extends Error {
|
|
@@ -220,4 +220,4 @@ export {
|
|
|
220
220
|
createMiddleware,
|
|
221
221
|
createThinkTool
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
223
|
+
//# sourceMappingURL=chunk-HYUYZEAJ.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Agent,
|
|
3
3
|
normalizeAgentId
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DALYP4PX.js";
|
|
5
5
|
import {
|
|
6
6
|
ToolSet
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HYUYZEAJ.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveMemoryOptions
|
|
10
10
|
} from "./chunk-UQX6EXWG.js";
|
|
@@ -217,4 +217,4 @@ var AgentBuilder = class {
|
|
|
217
217
|
export {
|
|
218
218
|
AgentBuilder
|
|
219
219
|
};
|
|
220
|
-
//# sourceMappingURL=chunk-
|
|
220
|
+
//# sourceMappingURL=chunk-JI5YZWNT.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
toProviderJsonSchema
|
|
3
|
-
} from "./chunk-WQKHFADH.js";
|
|
4
1
|
import {
|
|
5
2
|
cosineSimilarity,
|
|
6
3
|
embedText
|
|
7
4
|
} from "./chunk-MNWK2USR.js";
|
|
5
|
+
import {
|
|
6
|
+
toProviderJsonSchema
|
|
7
|
+
} from "./chunk-WQKHFADH.js";
|
|
8
8
|
|
|
9
9
|
// src/vector-store/index.ts
|
|
10
10
|
import { z } from "zod";
|
|
@@ -334,4 +334,4 @@ export {
|
|
|
334
334
|
InMemoryVectorIndex,
|
|
335
335
|
createVectorSearchTool
|
|
336
336
|
};
|
|
337
|
-
//# sourceMappingURL=chunk-
|
|
337
|
+
//# sourceMappingURL=chunk-MELYDKWQ.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-YK4WAAS4.js";
|
|
7
7
|
import {
|
|
8
8
|
createTool
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MELYDKWQ.js";
|
|
10
10
|
|
|
11
11
|
// src/skills/instructions.ts
|
|
12
12
|
function skillInstructions(skills) {
|
|
@@ -395,4 +395,4 @@ export {
|
|
|
395
395
|
SkillValidationError,
|
|
396
396
|
skill
|
|
397
397
|
};
|
|
398
|
-
//# sourceMappingURL=chunk-
|
|
398
|
+
//# sourceMappingURL=chunk-NCPN4SJR.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JI5YZWNT.js";
|
|
4
4
|
import {
|
|
5
5
|
extractRagText
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BALBBVI3.js";
|
|
7
7
|
import {
|
|
8
8
|
createTool
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MELYDKWQ.js";
|
|
10
10
|
import {
|
|
11
11
|
CompletionRequestBuilder
|
|
12
12
|
} from "./chunk-Q25IWLBT.js";
|
|
@@ -138,4 +138,4 @@ export {
|
|
|
138
138
|
Extractor,
|
|
139
139
|
ExtractorBuilder
|
|
140
140
|
};
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
141
|
+
//# sourceMappingURL=chunk-YLMDBQO4.js.map
|
package/dist/evals/index.js
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ExtractorBuilder
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-YLMDBQO4.js";
|
|
4
|
+
import "../chunk-JI5YZWNT.js";
|
|
5
|
+
import "../chunk-DALYP4PX.js";
|
|
6
|
+
import "../chunk-BALBBVI3.js";
|
|
7
7
|
import "../chunk-YK4WAAS4.js";
|
|
8
8
|
import "../chunk-XUUY2L2D.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-HYUYZEAJ.js";
|
|
10
|
+
import "../chunk-MELYDKWQ.js";
|
|
11
11
|
import "../chunk-2ODTMRHP.js";
|
|
12
12
|
import "../chunk-UQX6EXWG.js";
|
|
13
13
|
import "../chunk-MRQLEK2B.js";
|
|
14
|
-
import "../chunk-Q25IWLBT.js";
|
|
15
|
-
import "../chunk-MC3CCKEB.js";
|
|
16
|
-
import {
|
|
17
|
-
Usage
|
|
18
|
-
} from "../chunk-ADH7NNCS.js";
|
|
19
|
-
import "../chunk-WQKHFADH.js";
|
|
20
14
|
import {
|
|
21
15
|
cosineSimilarity,
|
|
22
16
|
embedText
|
|
@@ -24,6 +18,12 @@ import {
|
|
|
24
18
|
import {
|
|
25
19
|
mapWithConcurrency
|
|
26
20
|
} from "../chunk-OIMLU4SF.js";
|
|
21
|
+
import "../chunk-Q25IWLBT.js";
|
|
22
|
+
import "../chunk-MC3CCKEB.js";
|
|
23
|
+
import {
|
|
24
|
+
Usage
|
|
25
|
+
} from "../chunk-ADH7NNCS.js";
|
|
26
|
+
import "../chunk-WQKHFADH.js";
|
|
27
27
|
import "../chunk-CWUJUSOS.js";
|
|
28
28
|
|
|
29
29
|
// src/evals/advanced-metrics.ts
|
package/dist/extractor/index.js
CHANGED
|
@@ -2,23 +2,23 @@ import {
|
|
|
2
2
|
ExtractionError,
|
|
3
3
|
Extractor,
|
|
4
4
|
ExtractorBuilder
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-YLMDBQO4.js";
|
|
6
|
+
import "../chunk-JI5YZWNT.js";
|
|
7
|
+
import "../chunk-DALYP4PX.js";
|
|
8
|
+
import "../chunk-BALBBVI3.js";
|
|
9
9
|
import "../chunk-YK4WAAS4.js";
|
|
10
10
|
import "../chunk-XUUY2L2D.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-HYUYZEAJ.js";
|
|
12
|
+
import "../chunk-MELYDKWQ.js";
|
|
13
13
|
import "../chunk-2ODTMRHP.js";
|
|
14
14
|
import "../chunk-UQX6EXWG.js";
|
|
15
15
|
import "../chunk-MRQLEK2B.js";
|
|
16
|
+
import "../chunk-MNWK2USR.js";
|
|
17
|
+
import "../chunk-OIMLU4SF.js";
|
|
16
18
|
import "../chunk-Q25IWLBT.js";
|
|
17
19
|
import "../chunk-MC3CCKEB.js";
|
|
18
20
|
import "../chunk-ADH7NNCS.js";
|
|
19
21
|
import "../chunk-WQKHFADH.js";
|
|
20
|
-
import "../chunk-MNWK2USR.js";
|
|
21
|
-
import "../chunk-OIMLU4SF.js";
|
|
22
22
|
import "../chunk-CWUJUSOS.js";
|
|
23
23
|
export {
|
|
24
24
|
ExtractionError,
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
SkillValidationError,
|
|
3
3
|
loadSkills,
|
|
4
4
|
skill
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NCPN4SJR.js";
|
|
6
6
|
import {
|
|
7
7
|
coreMessagesToUIMessages,
|
|
8
8
|
uiMessagesToCoreMessages
|
|
@@ -11,22 +11,22 @@ import "./chunk-CQNNSZPG.js";
|
|
|
11
11
|
import "./chunk-XWUC7CIT.js";
|
|
12
12
|
import {
|
|
13
13
|
AgentBuilder
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-JI5YZWNT.js";
|
|
15
|
+
import "./chunk-DALYP4PX.js";
|
|
16
16
|
import {
|
|
17
17
|
MaxTurnsError,
|
|
18
18
|
PromptCancelledError,
|
|
19
19
|
ToolApprovalRequiredError
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-BALBBVI3.js";
|
|
21
21
|
import "./chunk-YK4WAAS4.js";
|
|
22
22
|
import "./chunk-XUUY2L2D.js";
|
|
23
23
|
import {
|
|
24
24
|
createMiddleware,
|
|
25
25
|
createThinkTool
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-HYUYZEAJ.js";
|
|
27
27
|
import {
|
|
28
28
|
createTool
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-MELYDKWQ.js";
|
|
30
30
|
import {
|
|
31
31
|
cancelPrompt,
|
|
32
32
|
createHook,
|
|
@@ -42,6 +42,8 @@ import {
|
|
|
42
42
|
createSummaryMemoryCompactor,
|
|
43
43
|
isMemoryCompactionSummary
|
|
44
44
|
} from "./chunk-MRQLEK2B.js";
|
|
45
|
+
import "./chunk-MNWK2USR.js";
|
|
46
|
+
import "./chunk-OIMLU4SF.js";
|
|
45
47
|
import "./chunk-Q25IWLBT.js";
|
|
46
48
|
import {
|
|
47
49
|
createCompletion,
|
|
@@ -62,8 +64,6 @@ import {
|
|
|
62
64
|
withContextUsage
|
|
63
65
|
} from "./chunk-ADH7NNCS.js";
|
|
64
66
|
import "./chunk-WQKHFADH.js";
|
|
65
|
-
import "./chunk-MNWK2USR.js";
|
|
66
|
-
import "./chunk-OIMLU4SF.js";
|
|
67
67
|
import {
|
|
68
68
|
allow,
|
|
69
69
|
block,
|
package/dist/internal/agent.js
CHANGED
|
@@ -2,20 +2,20 @@ import {
|
|
|
2
2
|
Agent,
|
|
3
3
|
AgentSession,
|
|
4
4
|
DEFAULT_MAX_TURNS
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-DALYP4PX.js";
|
|
6
|
+
import "../chunk-BALBBVI3.js";
|
|
7
7
|
import "../chunk-YK4WAAS4.js";
|
|
8
8
|
import "../chunk-XUUY2L2D.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-HYUYZEAJ.js";
|
|
10
|
+
import "../chunk-MELYDKWQ.js";
|
|
11
11
|
import "../chunk-2ODTMRHP.js";
|
|
12
12
|
import "../chunk-MRQLEK2B.js";
|
|
13
|
+
import "../chunk-MNWK2USR.js";
|
|
14
|
+
import "../chunk-OIMLU4SF.js";
|
|
13
15
|
import "../chunk-Q25IWLBT.js";
|
|
14
16
|
import "../chunk-MC3CCKEB.js";
|
|
15
17
|
import "../chunk-ADH7NNCS.js";
|
|
16
18
|
import "../chunk-WQKHFADH.js";
|
|
17
|
-
import "../chunk-MNWK2USR.js";
|
|
18
|
-
import "../chunk-OIMLU4SF.js";
|
|
19
19
|
import "../chunk-CWUJUSOS.js";
|
|
20
20
|
export {
|
|
21
21
|
Agent,
|
package/dist/mcp/index.js
CHANGED
|
@@ -101,6 +101,172 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
|
101
101
|
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
102
102
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
103
103
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
104
|
+
|
|
105
|
+
// src/mcp/url-safety.ts
|
|
106
|
+
import { lookup } from "dns/promises";
|
|
107
|
+
import { BlockList, isIP } from "net";
|
|
108
|
+
import { Agent, Pool, fetch as undiciFetch } from "undici";
|
|
109
|
+
var blockedIpv4Addresses = new BlockList();
|
|
110
|
+
var blockedIpv6Addresses = new BlockList();
|
|
111
|
+
for (const [network, prefix] of [
|
|
112
|
+
["0.0.0.0", 8],
|
|
113
|
+
["10.0.0.0", 8],
|
|
114
|
+
["100.64.0.0", 10],
|
|
115
|
+
["127.0.0.0", 8],
|
|
116
|
+
["169.254.0.0", 16],
|
|
117
|
+
["172.16.0.0", 12],
|
|
118
|
+
["192.0.0.0", 24],
|
|
119
|
+
["192.0.2.0", 24],
|
|
120
|
+
["192.88.99.0", 24],
|
|
121
|
+
["192.168.0.0", 16],
|
|
122
|
+
["198.18.0.0", 15],
|
|
123
|
+
["198.51.100.0", 24],
|
|
124
|
+
["203.0.113.0", 24],
|
|
125
|
+
["224.0.0.0", 4],
|
|
126
|
+
["240.0.0.0", 4]
|
|
127
|
+
]) {
|
|
128
|
+
blockedIpv4Addresses.addSubnet(network, prefix, "ipv4");
|
|
129
|
+
}
|
|
130
|
+
for (const [network, prefix] of [
|
|
131
|
+
["::", 96],
|
|
132
|
+
["::ffff:0:0", 96],
|
|
133
|
+
["64:ff9b::", 96],
|
|
134
|
+
["64:ff9b:1::", 48],
|
|
135
|
+
["100::", 64],
|
|
136
|
+
["2001::", 32],
|
|
137
|
+
["2001:2::", 48],
|
|
138
|
+
["2001:10::", 28],
|
|
139
|
+
["2001:20::", 28],
|
|
140
|
+
["2001:db8::", 32],
|
|
141
|
+
["2002::", 16],
|
|
142
|
+
["fc00::", 7],
|
|
143
|
+
["fe80::", 10],
|
|
144
|
+
["fec0::", 10],
|
|
145
|
+
["ff00::", 8]
|
|
146
|
+
]) {
|
|
147
|
+
blockedIpv6Addresses.addSubnet(network, prefix, "ipv6");
|
|
148
|
+
}
|
|
149
|
+
var defaultAddressResolver = (hostname) => lookup(hostname, { all: true, verbatim: true });
|
|
150
|
+
function parseAndValidateMcpUrl(url) {
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = new URL(url);
|
|
154
|
+
} catch {
|
|
155
|
+
throw new Error(`Invalid MCP URL: ${url}`);
|
|
156
|
+
}
|
|
157
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
158
|
+
throw new Error(`MCP URL blocked: only HTTP(S) URLs are allowed (${parsed.protocol})`);
|
|
159
|
+
}
|
|
160
|
+
validateMcpHostname(parsed.hostname);
|
|
161
|
+
return parsed;
|
|
162
|
+
}
|
|
163
|
+
async function resolveAndValidateMcpHostname(hostname, resolveAddresses = defaultAddressResolver) {
|
|
164
|
+
const normalizedHostname = normalizeHostname(hostname);
|
|
165
|
+
validateMcpHostname(normalizedHostname);
|
|
166
|
+
const family = isIP(normalizedHostname);
|
|
167
|
+
if (family !== 0) {
|
|
168
|
+
return [{ address: normalizedHostname, family }];
|
|
169
|
+
}
|
|
170
|
+
let addresses;
|
|
171
|
+
try {
|
|
172
|
+
addresses = await resolveAddresses(normalizedHostname);
|
|
173
|
+
} catch (cause) {
|
|
174
|
+
throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`, { cause });
|
|
175
|
+
}
|
|
176
|
+
if (addresses.length === 0) {
|
|
177
|
+
throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`);
|
|
178
|
+
}
|
|
179
|
+
for (const { address } of addresses) {
|
|
180
|
+
validateMcpHostname(address);
|
|
181
|
+
}
|
|
182
|
+
return addresses;
|
|
183
|
+
}
|
|
184
|
+
function createSafeMcpLookup(resolveAddresses = defaultAddressResolver) {
|
|
185
|
+
return (hostname, options, callback) => {
|
|
186
|
+
void resolveAndValidateMcpHostname(hostname, resolveAddresses).then(
|
|
187
|
+
(addresses) => {
|
|
188
|
+
const requestedFamily = normalizeRequestedFamily(options.family);
|
|
189
|
+
const matchingAddresses = requestedFamily === 0 ? addresses : addresses.filter(({ family }) => family === requestedFamily);
|
|
190
|
+
if (matchingAddresses.length === 0) {
|
|
191
|
+
const error = new Error(`No matching address family for MCP URL (${hostname})`);
|
|
192
|
+
Object.assign(error, { code: "EAI_ADDRFAMILY" });
|
|
193
|
+
callback(error, []);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (options.all) {
|
|
197
|
+
callback(null, matchingAddresses);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const address = matchingAddresses[0];
|
|
201
|
+
if (!address) {
|
|
202
|
+
callback(new Error(`Unable to resolve MCP URL hostname (${hostname})`), []);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
callback(null, address.address, address.family);
|
|
206
|
+
},
|
|
207
|
+
(cause) => {
|
|
208
|
+
callback(asError(cause), []);
|
|
209
|
+
}
|
|
210
|
+
);
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function createSafeMcpFetch() {
|
|
214
|
+
return (url, init) => {
|
|
215
|
+
parseAndValidateMcpUrl(url);
|
|
216
|
+
return undiciFetch(url, {
|
|
217
|
+
...init,
|
|
218
|
+
dispatcher: safeMcpDispatcher
|
|
219
|
+
});
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function validateMcpHostname(hostname) {
|
|
223
|
+
const normalizedHostname = normalizeHostname(hostname);
|
|
224
|
+
if (normalizedHostname === "localhost" || normalizedHostname.endsWith(".localhost")) {
|
|
225
|
+
throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);
|
|
226
|
+
}
|
|
227
|
+
const family = isIP(normalizedHostname);
|
|
228
|
+
if (family === 0) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (family === 4 && normalizedHostname.startsWith("127.") || family === 6 && normalizedHostname === "::1") {
|
|
232
|
+
throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);
|
|
233
|
+
}
|
|
234
|
+
if (normalizedHostname === "169.254.169.254" || normalizedHostname === "fd00:ec2::254") {
|
|
235
|
+
throw new Error(`MCP URL blocked: cloud metadata endpoint not allowed (${normalizedHostname})`);
|
|
236
|
+
}
|
|
237
|
+
if (family === 4 && blockedIpv4Addresses.check(normalizedHostname, "ipv4") || family === 6 && blockedIpv6Addresses.check(normalizedHostname, "ipv6")) {
|
|
238
|
+
const range = family === 4 ? "IP" : "IPv6";
|
|
239
|
+
throw new Error(`MCP URL blocked: private ${range} range not allowed (${normalizedHostname})`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
function normalizeHostname(hostname) {
|
|
243
|
+
const withoutBrackets = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
244
|
+
return withoutBrackets.toLowerCase().replace(/\.+$/, "");
|
|
245
|
+
}
|
|
246
|
+
function normalizeRequestedFamily(family) {
|
|
247
|
+
if (family === 4 || family === "IPv4") {
|
|
248
|
+
return 4;
|
|
249
|
+
}
|
|
250
|
+
if (family === 6 || family === "IPv6") {
|
|
251
|
+
return 6;
|
|
252
|
+
}
|
|
253
|
+
return 0;
|
|
254
|
+
}
|
|
255
|
+
function asError(cause) {
|
|
256
|
+
return cause instanceof Error ? cause : new Error(String(cause));
|
|
257
|
+
}
|
|
258
|
+
var safeMcpDispatcher = new Agent({
|
|
259
|
+
autoSelectFamily: true,
|
|
260
|
+
connect: {
|
|
261
|
+
lookup: createSafeMcpLookup()
|
|
262
|
+
},
|
|
263
|
+
factory(origin, options) {
|
|
264
|
+
parseAndValidateMcpUrl(origin);
|
|
265
|
+
return new Pool(origin, options);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
// src/mcp/connections.ts
|
|
104
270
|
var CORE_CLIENT_VERSION = readCorePackageVersion();
|
|
105
271
|
var mcp = {
|
|
106
272
|
stdio(options) {
|
|
@@ -118,10 +284,15 @@ var mcp = {
|
|
|
118
284
|
return {
|
|
119
285
|
name: options.name,
|
|
120
286
|
async connect() {
|
|
287
|
+
assertNoCustomMcpFetch(options.transport?.fetch);
|
|
288
|
+
const url = parseAndValidateMcpUrl(options.url);
|
|
121
289
|
const client = createSdkClient();
|
|
122
290
|
await client.connect(
|
|
123
291
|
asSdkTransport(
|
|
124
|
-
new StreamableHTTPClientTransport(
|
|
292
|
+
new StreamableHTTPClientTransport(url, {
|
|
293
|
+
...options.transport,
|
|
294
|
+
fetch: createSafeMcpFetch()
|
|
295
|
+
})
|
|
125
296
|
)
|
|
126
297
|
);
|
|
127
298
|
return client;
|
|
@@ -132,15 +303,29 @@ var mcp = {
|
|
|
132
303
|
return {
|
|
133
304
|
name: options.name,
|
|
134
305
|
async connect() {
|
|
306
|
+
assertNoCustomMcpFetch(options.transport?.fetch);
|
|
307
|
+
const url = parseAndValidateMcpUrl(options.url);
|
|
135
308
|
const client = createSdkClient();
|
|
136
309
|
await client.connect(
|
|
137
|
-
asSdkTransport(
|
|
310
|
+
asSdkTransport(
|
|
311
|
+
new SSEClientTransport(url, {
|
|
312
|
+
...options.transport,
|
|
313
|
+
fetch: createSafeMcpFetch()
|
|
314
|
+
})
|
|
315
|
+
)
|
|
138
316
|
);
|
|
139
317
|
return client;
|
|
140
318
|
}
|
|
141
319
|
};
|
|
142
320
|
}
|
|
143
321
|
};
|
|
322
|
+
function assertNoCustomMcpFetch(fetch) {
|
|
323
|
+
if (fetch !== void 0) {
|
|
324
|
+
throw new Error(
|
|
325
|
+
"Custom MCP transport fetch implementations are not allowed because they can bypass SSRF protection"
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
144
329
|
function createSdkClient() {
|
|
145
330
|
return new Client({
|
|
146
331
|
name: "@anvia/core",
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts"],"sourcesContent":["import { isRecord } from \"../internal/record\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n let tools: Awaited<ReturnType<typeof client.listTools>>[\"tools\"];\n try {\n ({ tools } = await client.listTools());\n } catch (error) {\n try {\n await client.close();\n } catch {\n // Preserve the initialization failure so callers see the actionable MCP error.\n }\n throw error;\n }\n\n return {\n name: connection.name,\n tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),\n close: () => client.close(),\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n McpClient,\n McpConnection,\n McpHttpOptions,\n McpSseOptions,\n McpStdioOptions,\n} from \"./types\";\n\nconst CORE_CLIENT_VERSION = readCorePackageVersion();\n\nexport const mcp = {\n stdio(options: McpStdioOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const { name: _name, ...server } = options;\n const client = createSdkClient();\n await client.connect(asSdkTransport(new StdioClientTransport(server)));\n return client as McpClient;\n },\n };\n },\n\n http(options: McpHttpOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new StreamableHTTPClientTransport(new URL(options.url), options.transport),\n ),\n );\n return client as McpClient;\n },\n };\n },\n\n sse(options: McpSseOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(new SSEClientTransport(new URL(options.url), options.transport)),\n );\n return client as McpClient;\n },\n };\n },\n};\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: CORE_CLIENT_VERSION,\n });\n}\n\nfunction readCorePackageVersion(): string {\n try {\n const packageJson = JSON.parse(\n readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf8\"),\n ) as { version?: unknown };\n return typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction asSdkTransport(transport: unknown): Parameters<Client[\"connect\"]>[0] {\n return transport as Parameters<Client[\"connect\"]>[0];\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts","../../src/mcp/url-safety.ts"],"sourcesContent":["import { isRecord } from \"../internal/record\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n let tools: Awaited<ReturnType<typeof client.listTools>>[\"tools\"];\n try {\n ({ tools } = await client.listTools());\n } catch (error) {\n try {\n await client.close();\n } catch {\n // Preserve the initialization failure so callers see the actionable MCP error.\n }\n throw error;\n }\n\n return {\n name: connection.name,\n tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),\n close: () => client.close(),\n };\n}\n","import { readFileSync } from \"node:fs\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n McpClient,\n McpConnection,\n McpHttpOptions,\n McpSseOptions,\n McpStdioOptions,\n} from \"./types\";\nimport { createSafeMcpFetch, parseAndValidateMcpUrl } from \"./url-safety\";\n\nconst CORE_CLIENT_VERSION = readCorePackageVersion();\n\nexport const mcp = {\n stdio(options: McpStdioOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const { name: _name, ...server } = options;\n const client = createSdkClient();\n await client.connect(asSdkTransport(new StdioClientTransport(server)));\n return client as McpClient;\n },\n };\n },\n\n http(options: McpHttpOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n assertNoCustomMcpFetch(options.transport?.fetch);\n const url = parseAndValidateMcpUrl(options.url);\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new StreamableHTTPClientTransport(url, {\n ...options.transport,\n fetch: createSafeMcpFetch(),\n }),\n ),\n );\n return client as McpClient;\n },\n };\n },\n\n sse(options: McpSseOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n assertNoCustomMcpFetch(options.transport?.fetch);\n const url = parseAndValidateMcpUrl(options.url);\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new SSEClientTransport(url, {\n ...options.transport,\n fetch: createSafeMcpFetch(),\n }),\n ),\n );\n return client as McpClient;\n },\n };\n },\n};\n\nfunction assertNoCustomMcpFetch(fetch: unknown): void {\n if (fetch !== undefined) {\n throw new Error(\n \"Custom MCP transport fetch implementations are not allowed because they can bypass SSRF protection\",\n );\n }\n}\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: CORE_CLIENT_VERSION,\n });\n}\n\nfunction readCorePackageVersion(): string {\n try {\n const packageJson = JSON.parse(\n readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf8\"),\n ) as { version?: unknown };\n return typeof packageJson.version === \"string\" ? packageJson.version : \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction asSdkTransport(transport: unknown): Parameters<Client[\"connect\"]>[0] {\n return transport as Parameters<Client[\"connect\"]>[0];\n}\n","import type { LookupAddress } from \"node:dns\";\nimport { lookup } from \"node:dns/promises\";\nimport type { LookupFunction } from \"node:net\";\nimport { BlockList, isIP } from \"node:net\";\nimport type { StreamableHTTPClientTransportOptions } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport { Agent, Pool, fetch as undiciFetch } from \"undici\";\n\ntype FetchLike = NonNullable<StreamableHTTPClientTransportOptions[\"fetch\"]>;\n\nexport type McpAddressResolver = (hostname: string) => Promise<LookupAddress[]>;\n\nconst blockedIpv4Addresses = new BlockList();\nconst blockedIpv6Addresses = new BlockList();\n\nfor (const [network, prefix] of [\n [\"0.0.0.0\", 8],\n [\"10.0.0.0\", 8],\n [\"100.64.0.0\", 10],\n [\"127.0.0.0\", 8],\n [\"169.254.0.0\", 16],\n [\"172.16.0.0\", 12],\n [\"192.0.0.0\", 24],\n [\"192.0.2.0\", 24],\n [\"192.88.99.0\", 24],\n [\"192.168.0.0\", 16],\n [\"198.18.0.0\", 15],\n [\"198.51.100.0\", 24],\n [\"203.0.113.0\", 24],\n [\"224.0.0.0\", 4],\n [\"240.0.0.0\", 4],\n] as const) {\n blockedIpv4Addresses.addSubnet(network, prefix, \"ipv4\");\n}\n\nfor (const [network, prefix] of [\n [\"::\", 96],\n [\"::ffff:0:0\", 96],\n [\"64:ff9b::\", 96],\n [\"64:ff9b:1::\", 48],\n [\"100::\", 64],\n [\"2001::\", 32],\n [\"2001:2::\", 48],\n [\"2001:10::\", 28],\n [\"2001:20::\", 28],\n [\"2001:db8::\", 32],\n [\"2002::\", 16],\n [\"fc00::\", 7],\n [\"fe80::\", 10],\n [\"fec0::\", 10],\n [\"ff00::\", 8],\n] as const) {\n blockedIpv6Addresses.addSubnet(network, prefix, \"ipv6\");\n}\n\nconst defaultAddressResolver: McpAddressResolver = (hostname) =>\n lookup(hostname, { all: true, verbatim: true });\n\nexport function parseAndValidateMcpUrl(url: string | URL): URL {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new Error(`Invalid MCP URL: ${url}`);\n }\n\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(`MCP URL blocked: only HTTP(S) URLs are allowed (${parsed.protocol})`);\n }\n\n validateMcpHostname(parsed.hostname);\n return parsed;\n}\n\nexport async function resolveAndValidateMcpHostname(\n hostname: string,\n resolveAddresses: McpAddressResolver = defaultAddressResolver,\n): Promise<LookupAddress[]> {\n const normalizedHostname = normalizeHostname(hostname);\n validateMcpHostname(normalizedHostname);\n\n const family = isIP(normalizedHostname);\n if (family !== 0) {\n return [{ address: normalizedHostname, family }];\n }\n\n let addresses: LookupAddress[];\n try {\n addresses = await resolveAddresses(normalizedHostname);\n } catch (cause) {\n throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`, { cause });\n }\n\n if (addresses.length === 0) {\n throw new Error(`Unable to resolve MCP URL hostname (${normalizedHostname})`);\n }\n\n for (const { address } of addresses) {\n validateMcpHostname(address);\n }\n\n return addresses;\n}\n\nexport function createSafeMcpLookup(\n resolveAddresses: McpAddressResolver = defaultAddressResolver,\n): LookupFunction {\n return (hostname, options, callback) => {\n void resolveAndValidateMcpHostname(hostname, resolveAddresses).then(\n (addresses) => {\n const requestedFamily = normalizeRequestedFamily(options.family);\n const matchingAddresses =\n requestedFamily === 0\n ? addresses\n : addresses.filter(({ family }) => family === requestedFamily);\n\n if (matchingAddresses.length === 0) {\n const error = new Error(`No matching address family for MCP URL (${hostname})`);\n Object.assign(error, { code: \"EAI_ADDRFAMILY\" });\n callback(error, []);\n return;\n }\n\n if (options.all) {\n callback(null, matchingAddresses);\n return;\n }\n\n const address = matchingAddresses[0];\n if (!address) {\n callback(new Error(`Unable to resolve MCP URL hostname (${hostname})`), []);\n return;\n }\n callback(null, address.address, address.family);\n },\n (cause: unknown) => {\n callback(asError(cause), []);\n },\n );\n };\n}\n\nexport function createSafeMcpFetch(): FetchLike {\n return (url, init) => {\n parseAndValidateMcpUrl(url);\n return undiciFetch(url as Parameters<typeof undiciFetch>[0], {\n ...(init as Parameters<typeof undiciFetch>[1]),\n dispatcher: safeMcpDispatcher,\n }) as ReturnType<FetchLike>;\n };\n}\n\nfunction validateMcpHostname(hostname: string): void {\n const normalizedHostname = normalizeHostname(hostname);\n\n if (normalizedHostname === \"localhost\" || normalizedHostname.endsWith(\".localhost\")) {\n throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);\n }\n\n const family = isIP(normalizedHostname);\n if (family === 0) {\n return;\n }\n\n if (\n (family === 4 && normalizedHostname.startsWith(\"127.\")) ||\n (family === 6 && normalizedHostname === \"::1\")\n ) {\n throw new Error(`MCP URL blocked: localhost not allowed (${normalizedHostname})`);\n }\n\n if (normalizedHostname === \"169.254.169.254\" || normalizedHostname === \"fd00:ec2::254\") {\n throw new Error(`MCP URL blocked: cloud metadata endpoint not allowed (${normalizedHostname})`);\n }\n\n if (\n (family === 4 && blockedIpv4Addresses.check(normalizedHostname, \"ipv4\")) ||\n (family === 6 && blockedIpv6Addresses.check(normalizedHostname, \"ipv6\"))\n ) {\n const range = family === 4 ? \"IP\" : \"IPv6\";\n throw new Error(`MCP URL blocked: private ${range} range not allowed (${normalizedHostname})`);\n }\n}\n\nfunction normalizeHostname(hostname: string): string {\n const withoutBrackets =\n hostname.startsWith(\"[\") && hostname.endsWith(\"]\") ? hostname.slice(1, -1) : hostname;\n return withoutBrackets.toLowerCase().replace(/\\.+$/, \"\");\n}\n\nfunction normalizeRequestedFamily(family: number | string | undefined): 0 | 4 | 6 {\n if (family === 4 || family === \"IPv4\") {\n return 4;\n }\n if (family === 6 || family === \"IPv6\") {\n return 6;\n }\n return 0;\n}\n\nfunction asError(cause: unknown): Error {\n return cause instanceof Error ? cause : new Error(String(cause));\n}\n\nconst safeMcpDispatcher = new Agent({\n autoSelectFamily: true,\n connect: {\n lookup: createSafeMcpLookup(),\n },\n factory(origin, options) {\n parseAndValidateMcpUrl(origin);\n return new Pool(origin, options as Pool.Options);\n },\n});\n"],"mappings":";;;;;AAGO,SAAS,qBACd,MACA,MACuD;AACvD,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO,EAAE,KAAK;AAAA,EAChB;AAEA,MAAI,CAAC,SAAS,IAAI,GAAG;AACnB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAEA,SAAO,EAAE,MAAM,WAAW,KAAK;AACjC;AAEO,SAAS,iBAAiB,QAAmC;AAClE,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,kBAAkB,OAAO,UAAU;AAAA,EAC5C;AAEA,MAAI,OAAO,YAAY,MAAM;AAC3B,UAAM,IAAI,MAAM,gBAAgB,OAAO,OAAO,CAAC;AAAA,EACjD;AAEA,SAAO,OAAO,QAAQ,IAAI,aAAa,EAAE,KAAK,EAAE;AAClD;AAEA,SAAS,gBAAgB,SAAuC;AAC9D,QAAM,OAAO,QACV,IAAI,CAAC,SAAU,KAAK,SAAS,SAAS,KAAK,OAAO,MAAU,EAC5D,OAAO,CAAC,SAAyB,SAAS,MAAS,EACnD,KAAK,IAAI;AAEZ,SAAO,SAAS,KAAK,+BAA+B;AACtD;AAEA,SAAS,cAAc,SAAqC;AAC1D,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,QAAQ;AAAA,EACjB;AAEA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,IAAI;AAAA,EACxD;AAEA,MAAI,QAAQ,SAAS,YAAY;AAC/B,UAAM,WACJ,QAAQ,SAAS,aAAa,SAAY,KAAK,QAAQ,QAAQ,SAAS,QAAQ;AAClF,QAAI,UAAU,QAAQ,UAAU;AAC9B,aAAO,GAAG,QAAQ,GAAG,QAAQ,SAAS,GAAG,IAAI,QAAQ,SAAS,IAAI;AAAA,IACpE;AAEA,WAAO,GAAG,QAAQ,GAAG,QAAQ,SAAS,GAAG,IAAI,QAAQ,SAAS,IAAI;AAAA,EACpE;AAEA,QAAM,IAAI,MAAM,wCAAwC,kBAAkB,OAAO,CAAC,EAAE;AACtF;AAEA,SAAS,kBAAkB,OAAwB;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,KAAK,UAAU,KAAK;AACvC,SAAO,eAAe,SAAY,OAAO,KAAK,IAAI;AACpD;;;AC/DA,IAAM,wBAAwB,uBAAO,IAAI,yBAAyB;AAE3D,SAAS,cACd,YACA,QACA,YACM;AACN,QAAM,OAAa;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,aAA6B;AAC3B,aAAO;AAAA,QACL,MAAM,WAAW;AAAA,QACjB,aAAa,WAAW,eAAe;AAAA,QACvC,YAAY,WAAW;AAAA,MACzB;AAAA,IACF;AAAA,IACA,MAAM,KAAK,MAAuB;AAChC,YAAM,SAAS,MAAM,OAAO,SAAS,qBAAqB,WAAW,MAAM,IAAI,CAAC;AAChF,aAAO,iBAAiB,MAAM;AAAA,IAChC;AAAA,EACF;AACA,MAAI,eAAe,QAAW;AAC5B,WAAO,eAAe,MAAM,uBAAuB;AAAA,MACjD,OAAO,EAAE,WAAW;AAAA,MACpB,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC9BA,eAAsB,WAAW,YAA+C;AAC9E,QAAM,SAAS,MAAM,WAAW,QAAQ;AACxC,MAAI;AACJ,MAAI;AACF,KAAC,EAAE,MAAM,IAAI,MAAM,OAAO,UAAU;AAAA,EACtC,SAAS,OAAO;AACd,QAAI;AACF,YAAM,OAAO,MAAM;AAAA,IACrB,QAAQ;AAAA,IAER;AACA,UAAM;AAAA,EACR;AAEA,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO,MAAM,IAAI,CAAC,SAAS,cAAc,MAAM,QAAQ,WAAW,IAAI,CAAC;AAAA,IACvE,OAAO,MAAM,OAAO,MAAM;AAAA,EAC5B;AACF;;;ACtBA,SAAS,oBAAoB;AAC7B,SAAS,cAAc;AACvB,SAAS,0BAA0B;AACnC,SAAS,4BAA4B;AACrC,SAAS,qCAAqC;;;ACH9C,SAAS,cAAc;AAEvB,SAAS,WAAW,YAAY;AAEhC,SAAS,OAAO,MAAM,SAAS,mBAAmB;AAMlD,IAAM,uBAAuB,IAAI,UAAU;AAC3C,IAAM,uBAAuB,IAAI,UAAU;AAE3C,WAAW,CAAC,SAAS,MAAM,KAAK;AAAA,EAC9B,CAAC,WAAW,CAAC;AAAA,EACb,CAAC,YAAY,CAAC;AAAA,EACd,CAAC,cAAc,EAAE;AAAA,EACjB,CAAC,aAAa,CAAC;AAAA,EACf,CAAC,eAAe,EAAE;AAAA,EAClB,CAAC,cAAc,EAAE;AAAA,EACjB,CAAC,aAAa,EAAE;AAAA,EAChB,CAAC,aAAa,EAAE;AAAA,EAChB,CAAC,eAAe,EAAE;AAAA,EAClB,CAAC,eAAe,EAAE;AAAA,EAClB,CAAC,cAAc,EAAE;AAAA,EACjB,CAAC,gBAAgB,EAAE;AAAA,EACnB,CAAC,eAAe,EAAE;AAAA,EAClB,CAAC,aAAa,CAAC;AAAA,EACf,CAAC,aAAa,CAAC;AACjB,GAAY;AACV,uBAAqB,UAAU,SAAS,QAAQ,MAAM;AACxD;AAEA,WAAW,CAAC,SAAS,MAAM,KAAK;AAAA,EAC9B,CAAC,MAAM,EAAE;AAAA,EACT,CAAC,cAAc,EAAE;AAAA,EACjB,CAAC,aAAa,EAAE;AAAA,EAChB,CAAC,eAAe,EAAE;AAAA,EAClB,CAAC,SAAS,EAAE;AAAA,EACZ,CAAC,UAAU,EAAE;AAAA,EACb,CAAC,YAAY,EAAE;AAAA,EACf,CAAC,aAAa,EAAE;AAAA,EAChB,CAAC,aAAa,EAAE;AAAA,EAChB,CAAC,cAAc,EAAE;AAAA,EACjB,CAAC,UAAU,EAAE;AAAA,EACb,CAAC,UAAU,CAAC;AAAA,EACZ,CAAC,UAAU,EAAE;AAAA,EACb,CAAC,UAAU,EAAE;AAAA,EACb,CAAC,UAAU,CAAC;AACd,GAAY;AACV,uBAAqB,UAAU,SAAS,QAAQ,MAAM;AACxD;AAEA,IAAM,yBAA6C,CAAC,aAClD,OAAO,UAAU,EAAE,KAAK,MAAM,UAAU,KAAK,CAAC;AAEzC,SAAS,uBAAuB,KAAwB;AAC7D,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,GAAG;AAAA,EACtB,QAAQ;AACN,UAAM,IAAI,MAAM,oBAAoB,GAAG,EAAE;AAAA,EAC3C;AAEA,MAAI,OAAO,aAAa,WAAW,OAAO,aAAa,UAAU;AAC/D,UAAM,IAAI,MAAM,mDAAmD,OAAO,QAAQ,GAAG;AAAA,EACvF;AAEA,sBAAoB,OAAO,QAAQ;AACnC,SAAO;AACT;AAEA,eAAsB,8BACpB,UACA,mBAAuC,wBACb;AAC1B,QAAM,qBAAqB,kBAAkB,QAAQ;AACrD,sBAAoB,kBAAkB;AAEtC,QAAM,SAAS,KAAK,kBAAkB;AACtC,MAAI,WAAW,GAAG;AAChB,WAAO,CAAC,EAAE,SAAS,oBAAoB,OAAO,CAAC;AAAA,EACjD;AAEA,MAAI;AACJ,MAAI;AACF,gBAAY,MAAM,iBAAiB,kBAAkB;AAAA,EACvD,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,uCAAuC,kBAAkB,KAAK,EAAE,MAAM,CAAC;AAAA,EACzF;AAEA,MAAI,UAAU,WAAW,GAAG;AAC1B,UAAM,IAAI,MAAM,uCAAuC,kBAAkB,GAAG;AAAA,EAC9E;AAEA,aAAW,EAAE,QAAQ,KAAK,WAAW;AACnC,wBAAoB,OAAO;AAAA,EAC7B;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,mBAAuC,wBACvB;AAChB,SAAO,CAAC,UAAU,SAAS,aAAa;AACtC,SAAK,8BAA8B,UAAU,gBAAgB,EAAE;AAAA,MAC7D,CAAC,cAAc;AACb,cAAM,kBAAkB,yBAAyB,QAAQ,MAAM;AAC/D,cAAM,oBACJ,oBAAoB,IAChB,YACA,UAAU,OAAO,CAAC,EAAE,OAAO,MAAM,WAAW,eAAe;AAEjE,YAAI,kBAAkB,WAAW,GAAG;AAClC,gBAAM,QAAQ,IAAI,MAAM,2CAA2C,QAAQ,GAAG;AAC9E,iBAAO,OAAO,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,mBAAS,OAAO,CAAC,CAAC;AAClB;AAAA,QACF;AAEA,YAAI,QAAQ,KAAK;AACf,mBAAS,MAAM,iBAAiB;AAChC;AAAA,QACF;AAEA,cAAM,UAAU,kBAAkB,CAAC;AACnC,YAAI,CAAC,SAAS;AACZ,mBAAS,IAAI,MAAM,uCAAuC,QAAQ,GAAG,GAAG,CAAC,CAAC;AAC1E;AAAA,QACF;AACA,iBAAS,MAAM,QAAQ,SAAS,QAAQ,MAAM;AAAA,MAChD;AAAA,MACA,CAAC,UAAmB;AAClB,iBAAS,QAAQ,KAAK,GAAG,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,qBAAgC;AAC9C,SAAO,CAAC,KAAK,SAAS;AACpB,2BAAuB,GAAG;AAC1B,WAAO,YAAY,KAA0C;AAAA,MAC3D,GAAI;AAAA,MACJ,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;AAEA,SAAS,oBAAoB,UAAwB;AACnD,QAAM,qBAAqB,kBAAkB,QAAQ;AAErD,MAAI,uBAAuB,eAAe,mBAAmB,SAAS,YAAY,GAAG;AACnF,UAAM,IAAI,MAAM,2CAA2C,kBAAkB,GAAG;AAAA,EAClF;AAEA,QAAM,SAAS,KAAK,kBAAkB;AACtC,MAAI,WAAW,GAAG;AAChB;AAAA,EACF;AAEA,MACG,WAAW,KAAK,mBAAmB,WAAW,MAAM,KACpD,WAAW,KAAK,uBAAuB,OACxC;AACA,UAAM,IAAI,MAAM,2CAA2C,kBAAkB,GAAG;AAAA,EAClF;AAEA,MAAI,uBAAuB,qBAAqB,uBAAuB,iBAAiB;AACtF,UAAM,IAAI,MAAM,yDAAyD,kBAAkB,GAAG;AAAA,EAChG;AAEA,MACG,WAAW,KAAK,qBAAqB,MAAM,oBAAoB,MAAM,KACrE,WAAW,KAAK,qBAAqB,MAAM,oBAAoB,MAAM,GACtE;AACA,UAAM,QAAQ,WAAW,IAAI,OAAO;AACpC,UAAM,IAAI,MAAM,4BAA4B,KAAK,uBAAuB,kBAAkB,GAAG;AAAA,EAC/F;AACF;AAEA,SAAS,kBAAkB,UAA0B;AACnD,QAAM,kBACJ,SAAS,WAAW,GAAG,KAAK,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,EAAE,IAAI;AAC/E,SAAO,gBAAgB,YAAY,EAAE,QAAQ,QAAQ,EAAE;AACzD;AAEA,SAAS,yBAAyB,QAAgD;AAChF,MAAI,WAAW,KAAK,WAAW,QAAQ;AACrC,WAAO;AAAA,EACT;AACA,MAAI,WAAW,KAAK,WAAW,QAAQ;AACrC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,QAAQ,OAAuB;AACtC,SAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AACjE;AAEA,IAAM,oBAAoB,IAAI,MAAM;AAAA,EAClC,kBAAkB;AAAA,EAClB,SAAS;AAAA,IACP,QAAQ,oBAAoB;AAAA,EAC9B;AAAA,EACA,QAAQ,QAAQ,SAAS;AACvB,2BAAuB,MAAM;AAC7B,WAAO,IAAI,KAAK,QAAQ,OAAuB;AAAA,EACjD;AACF,CAAC;;;ADtMD,IAAM,sBAAsB,uBAAuB;AAE5C,IAAM,MAAM;AAAA,EACjB,MAAM,SAAyC;AAC7C,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,cAAM,EAAE,MAAM,OAAO,GAAG,OAAO,IAAI;AACnC,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO,QAAQ,eAAe,IAAI,qBAAqB,MAAM,CAAC,CAAC;AACrE,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,KAAK,SAAwC;AAC3C,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,+BAAuB,QAAQ,WAAW,KAAK;AAC/C,cAAM,MAAM,uBAAuB,QAAQ,GAAG;AAC9C,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO;AAAA,UACX;AAAA,YACE,IAAI,8BAA8B,KAAK;AAAA,cACrC,GAAG,QAAQ;AAAA,cACX,OAAO,mBAAmB;AAAA,YAC5B,CAAC;AAAA,UACH;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,SAAuC;AACzC,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,MAAM,UAA8B;AAClC,+BAAuB,QAAQ,WAAW,KAAK;AAC/C,cAAM,MAAM,uBAAuB,QAAQ,GAAG;AAC9C,cAAM,SAAS,gBAAgB;AAC/B,cAAM,OAAO;AAAA,UACX;AAAA,YACE,IAAI,mBAAmB,KAAK;AAAA,cAC1B,GAAG,QAAQ;AAAA,cACX,OAAO,mBAAmB;AAAA,YAC5B,CAAC;AAAA,UACH;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,OAAsB;AACpD,MAAI,UAAU,QAAW;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBAA0B;AACjC,SAAO,IAAI,OAAO;AAAA,IAChB,MAAM;AAAA,IACN,SAAS;AAAA,EACX,CAAC;AACH;AAEA,SAAS,yBAAiC;AACxC,MAAI;AACF,UAAM,cAAc,KAAK;AAAA,MACvB,aAAa,IAAI,IAAI,sBAAsB,YAAY,GAAG,GAAG,MAAM;AAAA,IACrE;AACA,WAAO,OAAO,YAAY,YAAY,WAAW,YAAY,UAAU;AAAA,EACzE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,WAAsD;AAC5E,SAAO;AACT;","names":[]}
|
package/dist/request/index.js
CHANGED
|
@@ -3,18 +3,18 @@ import {
|
|
|
3
3
|
PromptCancelledError,
|
|
4
4
|
PromptRequest,
|
|
5
5
|
ToolApprovalRequiredError
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-BALBBVI3.js";
|
|
7
7
|
import "../chunk-XUUY2L2D.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-HYUYZEAJ.js";
|
|
9
|
+
import "../chunk-MELYDKWQ.js";
|
|
10
10
|
import "../chunk-2ODTMRHP.js";
|
|
11
11
|
import "../chunk-MRQLEK2B.js";
|
|
12
|
+
import "../chunk-MNWK2USR.js";
|
|
13
|
+
import "../chunk-OIMLU4SF.js";
|
|
12
14
|
import "../chunk-Q25IWLBT.js";
|
|
13
15
|
import "../chunk-MC3CCKEB.js";
|
|
14
16
|
import "../chunk-ADH7NNCS.js";
|
|
15
17
|
import "../chunk-WQKHFADH.js";
|
|
16
|
-
import "../chunk-MNWK2USR.js";
|
|
17
|
-
import "../chunk-OIMLU4SF.js";
|
|
18
18
|
import "../chunk-CWUJUSOS.js";
|
|
19
19
|
export {
|
|
20
20
|
MaxTurnsError,
|
package/dist/skills/index.js
CHANGED
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
SkillValidationError,
|
|
3
3
|
loadSkills,
|
|
4
4
|
skill
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-NCPN4SJR.js";
|
|
6
6
|
import "../chunk-CQNNSZPG.js";
|
|
7
7
|
import "../chunk-YK4WAAS4.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-ADH7NNCS.js";
|
|
11
|
-
import "../chunk-WQKHFADH.js";
|
|
8
|
+
import "../chunk-HYUYZEAJ.js";
|
|
9
|
+
import "../chunk-MELYDKWQ.js";
|
|
12
10
|
import "../chunk-MNWK2USR.js";
|
|
13
11
|
import "../chunk-OIMLU4SF.js";
|
|
12
|
+
import "../chunk-ADH7NNCS.js";
|
|
13
|
+
import "../chunk-WQKHFADH.js";
|
|
14
14
|
export {
|
|
15
15
|
SkillValidationError,
|
|
16
16
|
loadSkills,
|
package/dist/tool/index.js
CHANGED
|
@@ -12,17 +12,17 @@ import {
|
|
|
12
12
|
normalizeToolResultOutput,
|
|
13
13
|
parseToolArgs,
|
|
14
14
|
toolResultContentToText
|
|
15
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-HYUYZEAJ.js";
|
|
16
16
|
import {
|
|
17
17
|
createTool
|
|
18
|
-
} from "../chunk-
|
|
18
|
+
} from "../chunk-MELYDKWQ.js";
|
|
19
|
+
import "../chunk-MNWK2USR.js";
|
|
20
|
+
import "../chunk-OIMLU4SF.js";
|
|
19
21
|
import {
|
|
20
22
|
isToolResultContentArray,
|
|
21
23
|
serializeToolResultOutput
|
|
22
24
|
} from "../chunk-ADH7NNCS.js";
|
|
23
25
|
import "../chunk-WQKHFADH.js";
|
|
24
|
-
import "../chunk-MNWK2USR.js";
|
|
25
|
-
import "../chunk-OIMLU4SF.js";
|
|
26
26
|
export {
|
|
27
27
|
ToolCallError,
|
|
28
28
|
ToolJsonError,
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
InMemoryVectorStore,
|
|
4
4
|
createVectorSearchTool,
|
|
5
5
|
vectorFilter
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-WQKHFADH.js";
|
|
6
|
+
} from "../chunk-MELYDKWQ.js";
|
|
8
7
|
import "../chunk-MNWK2USR.js";
|
|
9
8
|
import "../chunk-OIMLU4SF.js";
|
|
9
|
+
import "../chunk-WQKHFADH.js";
|
|
10
10
|
export {
|
|
11
11
|
InMemoryVectorIndex,
|
|
12
12
|
InMemoryVectorStore,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Core runtime primitives for context-aware Anvia agents.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -118,9 +118,10 @@
|
|
|
118
118
|
}
|
|
119
119
|
},
|
|
120
120
|
"dependencies": {
|
|
121
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
122
|
-
"pdfjs-dist": "^6.
|
|
121
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
122
|
+
"pdfjs-dist": "^6.2.108",
|
|
123
123
|
"tinyglobby": "^0.2.17",
|
|
124
|
+
"undici": "^6.25.0",
|
|
124
125
|
"yaml": "^2.9.0",
|
|
125
126
|
"zod": "^4.4.3"
|
|
126
127
|
},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|