@introspection-ai/recipes 0.13.0 → 0.14.1
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 +46 -57
- package/dist/{agent-tool.d.ts → agents.d.ts} +4 -1
- package/dist/agents.d.ts.map +1 -0
- package/dist/{agent-tool.js → agents.js} +1 -1
- package/dist/agents.js.map +1 -0
- package/dist/api/extensions.d.ts +3 -0
- package/dist/api/extensions.d.ts.map +1 -0
- package/dist/api/extensions.js +2 -0
- package/dist/api/extensions.js.map +1 -0
- package/dist/api/mcp.d.ts +4 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +2 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/session.d.ts +3 -0
- package/dist/api/session.d.ts.map +1 -0
- package/dist/api/session.js +2 -0
- package/dist/api/session.js.map +1 -0
- package/dist/child-agent.d.ts +5 -4
- package/dist/child-agent.d.ts.map +1 -1
- package/dist/child-agent.js +26 -117
- package/dist/child-agent.js.map +1 -1
- package/dist/child-session.d.ts +23 -0
- package/dist/child-session.d.ts.map +1 -0
- package/dist/child-session.js +48 -0
- package/dist/child-session.js.map +1 -0
- package/dist/extensions.d.ts +29 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +119 -0
- package/dist/extensions.js.map +1 -0
- package/dist/index.d.ts +4 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -13
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +38 -5
- package/dist/inspect.d.ts.map +1 -1
- package/dist/inspect.js +92 -41
- package/dist/inspect.js.map +1 -1
- package/dist/interactions.d.ts +18 -2
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +41 -10
- package/dist/interactions.js.map +1 -1
- package/dist/mcp-catalog.d.ts +1 -0
- package/dist/mcp-catalog.d.ts.map +1 -1
- package/dist/mcp-catalog.js +14 -6
- package/dist/mcp-catalog.js.map +1 -1
- package/dist/mcp-chunks/auth-command-ZLGYIEUY.js +273 -0
- package/dist/mcp-chunks/call-arguments-LU3W6D3K.js +13 -0
- package/dist/mcp-chunks/call-command-LKTKSYTH.js +612 -0
- package/dist/mcp-chunks/chunk-2U4BSDC4.js +3951 -0
- package/dist/mcp-chunks/chunk-2XL7MG7R.js +272 -0
- package/dist/mcp-chunks/chunk-3BJA27PY.js +2321 -0
- package/dist/mcp-chunks/chunk-4SQKWYFF.js +15 -0
- package/dist/mcp-chunks/chunk-5QOSCSQB.js +290 -0
- package/dist/mcp-chunks/chunk-6W5QFASN.js +77 -0
- package/dist/mcp-chunks/chunk-6XCZGU3G.js +1004 -0
- package/dist/mcp-chunks/chunk-7FHEBT5G.js +149 -0
- package/dist/mcp-chunks/chunk-7KA2VJVZ.js +114 -0
- package/dist/mcp-chunks/chunk-7UDVSOOF.js +138 -0
- package/dist/mcp-chunks/chunk-BNV3TPE4.js +66 -0
- package/dist/mcp-chunks/chunk-BTLAWHTA.js +129 -0
- package/dist/mcp-chunks/chunk-BV56DXPW.js +13 -0
- package/dist/mcp-chunks/chunk-BWHIA4PC.js +90 -0
- package/dist/mcp-chunks/chunk-BZIQOWE6.js +267 -0
- package/dist/mcp-chunks/chunk-D3MRAZ6H.js +16140 -0
- package/dist/mcp-chunks/chunk-DHBE7UBH.js +750 -0
- package/dist/mcp-chunks/chunk-E22DYOW5.js +251 -0
- package/dist/mcp-chunks/chunk-ECIVB7P4.js +139 -0
- package/dist/mcp-chunks/chunk-HKRJ6O36.js +1076 -0
- package/dist/mcp-chunks/chunk-IABRYROW.js +44 -0
- package/dist/mcp-chunks/chunk-J6LYIZXN.js +45 -0
- package/dist/mcp-chunks/chunk-L7NTQVYN.js +161 -0
- package/dist/mcp-chunks/chunk-LEZSACDE.js +141 -0
- package/dist/mcp-chunks/chunk-LKIBAYKU.js +208 -0
- package/dist/mcp-chunks/chunk-LNH5LAJD.js +152 -0
- package/dist/mcp-chunks/chunk-LQQEYD76.js +124 -0
- package/dist/mcp-chunks/chunk-LRKZP7DJ.js +47 -0
- package/dist/mcp-chunks/chunk-LS7PMWSR.js +109 -0
- package/dist/mcp-chunks/chunk-M3TPODXI.js +95 -0
- package/dist/mcp-chunks/chunk-MZ2NARG7.js +400 -0
- package/dist/mcp-chunks/chunk-N46NEFAF.js +45 -0
- package/dist/mcp-chunks/chunk-NNOEGEUZ.js +17273 -0
- package/dist/mcp-chunks/chunk-NRAJX5E4.js +69 -0
- package/dist/mcp-chunks/chunk-P3PSC54P.js +869 -0
- package/dist/mcp-chunks/chunk-PIIYJR44.js +6341 -0
- package/dist/mcp-chunks/chunk-PWYFKGKG.js +385 -0
- package/dist/mcp-chunks/chunk-SJCCBNZ4.js +45 -0
- package/dist/mcp-chunks/chunk-TATVT5IT.js +194 -0
- package/dist/mcp-chunks/chunk-TEUKFFQL.js +29 -0
- package/dist/mcp-chunks/chunk-UKYNQGNE.js +150 -0
- package/dist/mcp-chunks/chunk-UNKB4SBV.js +37 -0
- package/dist/mcp-chunks/chunk-WD6BOD24.js +138 -0
- package/dist/mcp-chunks/chunk-WQJZMCJN.js +73 -0
- package/dist/mcp-chunks/chunk-XANPGTLI.js +364 -0
- package/dist/mcp-chunks/chunk-XQK2JSW4.js +35 -0
- package/dist/mcp-chunks/chunk-YHQUTU6L.js +571 -0
- package/dist/mcp-chunks/chunk-YVZKMV5H.js +57 -0
- package/dist/mcp-chunks/cli-UV4QJZZM.js +929 -0
- package/dist/mcp-chunks/client-S7RQUG5U.js +13 -0
- package/dist/mcp-chunks/config-command-NLAGKID5.js +1101 -0
- package/dist/mcp-chunks/daemon-command-U242Z6VY.js +26 -0
- package/dist/mcp-chunks/dist-LK3SHAMX.js +6478 -0
- package/dist/mcp-chunks/emit-ts-command-VBXVXO6V.js +386 -0
- package/dist/mcp-chunks/generate-cli-runner-6CAZZA3P.js +1426 -0
- package/dist/mcp-chunks/inspect-cli-command-3ZORTOR7.js +111 -0
- package/dist/mcp-chunks/launch-YKRXHXJI.js +10 -0
- package/dist/mcp-chunks/lifecycle-XVKRHPH3.js +16 -0
- package/dist/mcp-chunks/list-command-2MEGGNFQ.js +4190 -0
- package/dist/mcp-chunks/output-utils-NKESLAJ6.js +12 -0
- package/dist/mcp-chunks/prompt-B1Yc1NPt-VGOTWJMN.js +918 -0
- package/dist/mcp-chunks/record-command-YXHTTTT5.js +17 -0
- package/dist/mcp-chunks/replay-command-25HJ6AQU.js +85 -0
- package/dist/mcp-chunks/resource-command-OO4NYF5C.js +97 -0
- package/dist/mcp-chunks/result-utils-MOHHLNM7.js +15 -0
- package/dist/mcp-chunks/runtime-5WJ3G25Y.js +33 -0
- package/dist/mcp-chunks/runtime-wrapper-RPWDIDBF.js +10 -0
- package/dist/mcp-chunks/serve-command-DHXJZMMN.js +3302 -0
- package/dist/mcp-chunks/timeouts-W2XWCCXR.js +18 -0
- package/dist/mcp-chunks/vault-command-PIYIUEZL.js +154 -0
- package/dist/mcp-daemon-client.d.ts +6 -1
- package/dist/mcp-daemon-client.d.ts.map +1 -1
- package/dist/mcp-daemon-client.js +119 -2
- package/dist/mcp-daemon-client.js.map +1 -1
- package/dist/mcp-daemon-protocol.d.ts +18 -1
- package/dist/mcp-daemon-protocol.d.ts.map +1 -1
- package/dist/mcp-daemon-protocol.js +31 -0
- package/dist/mcp-daemon-protocol.js.map +1 -1
- package/dist/mcp-daemon.js +169 -76602
- package/dist/mcp-daemon.js.map +1 -1
- package/dist/mcp-policy.d.ts +11 -0
- package/dist/mcp-policy.d.ts.map +1 -0
- package/dist/mcp-policy.js +27 -0
- package/dist/mcp-policy.js.map +1 -0
- package/dist/mcp-run-worker.js +38 -76540
- package/dist/mcp-tools.d.ts +39 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +493 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/mcp.d.ts +21 -9
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +101 -31
- package/dist/mcp.js.map +1 -1
- package/dist/model-binding.d.ts +39 -0
- package/dist/model-binding.d.ts.map +1 -0
- package/dist/model-binding.js +103 -0
- package/dist/model-binding.js.map +1 -0
- package/dist/pi-extension.d.ts +2 -22
- package/dist/pi-extension.d.ts.map +1 -1
- package/dist/pi-extension.js +296 -71
- package/dist/pi-extension.js.map +1 -1
- package/dist/recipe/resolve.d.ts +43 -20
- package/dist/recipe/resolve.d.ts.map +1 -1
- package/dist/recipe/resolve.js +215 -70
- package/dist/recipe/resolve.js.map +1 -1
- package/dist/recipe-agent.d.ts +24 -27
- package/dist/recipe-agent.d.ts.map +1 -1
- package/dist/recipe-agent.js +278 -230
- package/dist/recipe-agent.js.map +1 -1
- package/dist/recipe-check.d.ts +18 -0
- package/dist/recipe-check.d.ts.map +1 -0
- package/dist/recipe-check.js +261 -0
- package/dist/recipe-check.js.map +1 -0
- package/dist/recipe-extensions.d.ts.map +1 -1
- package/dist/recipe-extensions.js +0 -3
- package/dist/recipe-extensions.js.map +1 -1
- package/dist/recipe-model.d.ts +3 -1
- package/dist/recipe-model.d.ts.map +1 -1
- package/dist/recipe-model.js +15 -12
- package/dist/recipe-model.js.map +1 -1
- package/dist/recipe-package.d.ts +6 -28
- package/dist/recipe-package.d.ts.map +1 -1
- package/dist/recipe-package.js +248 -191
- package/dist/recipe-package.js.map +1 -1
- package/dist/recipe-skills.d.ts.map +1 -1
- package/dist/recipe-skills.js +42 -29
- package/dist/recipe-skills.js.map +1 -1
- package/dist/run-controller.d.ts +10 -9
- package/dist/run-controller.d.ts.map +1 -1
- package/dist/run-controller.js +28 -21
- package/dist/run-controller.js.map +1 -1
- package/dist/session.d.ts +40 -53
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +312 -173
- package/dist/session.js.map +1 -1
- package/dist/test-utils.d.ts +7 -7
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/test-utils.js +32 -15
- package/dist/test-utils.js.map +1 -1
- package/docs/agent-composition.md +41 -35
- package/docs/host-api.md +201 -0
- package/docs/index.md +9 -14
- package/docs/interactions.md +12 -11
- package/docs/mcp-auth.md +6 -6
- package/docs/mcp-configuration.md +73 -25
- package/docs/pi-extension.md +39 -11
- package/docs/recipe-flow.md +9 -9
- package/docs/recipe-format.md +106 -41
- package/docs/recipe-judges.md +24 -36
- package/package.json +23 -17
- package/vendor/mcp-client/darwin-arm64/mcp-client +0 -0
- package/vendor/mcp-client/darwin-x64/mcp-client +0 -0
- package/vendor/mcp-client/linux-arm64/mcp-client +0 -0
- package/vendor/recipe-check/darwin-arm64/recipe-check +0 -0
- package/vendor/recipe-check/darwin-x64/recipe-check +0 -0
- package/vendor/recipe-check/linux-arm64/recipe-check +0 -0
- package/vendor/recipe-check/linux-x64/recipe-check +0 -0
- package/vendor/recipe-check/linux-x64-musl/recipe-check +0 -0
- package/vendor/recipe-check/win32-x64/recipe-check.exe +0 -0
- package/dist/agent-tool.d.ts.map +0 -1
- package/dist/agent-tool.js.map +0 -1
- package/dist/run.d.ts +0 -28
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -84
- package/dist/run.js.map +0 -1
- package/dist/testing.d.ts +0 -25
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -96
- package/dist/testing.js.map +0 -1
- package/docs/deployment-configuration.md +0 -65
- package/docs/migration.md +0 -70
- package/docs/python-bindings-release.md +0 -47
- package/docs/recipe-evals.md +0 -70
- package/docs/runtime-library.md +0 -171
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { McpCatalogServer } from "./mcp-daemon-protocol.js";
|
|
3
|
+
import type { McpSessionConfig } from "./mcp.js";
|
|
4
|
+
import type { RecipeAgentMcp } from "./recipe-agent.js";
|
|
5
|
+
type Recordish = Record<string, unknown>;
|
|
6
|
+
export interface McpToolActivation {
|
|
7
|
+
getActiveTools(): string[];
|
|
8
|
+
setActiveTools(names: string[]): void;
|
|
9
|
+
}
|
|
10
|
+
export interface McpToolDetails {
|
|
11
|
+
server: string;
|
|
12
|
+
tool: string;
|
|
13
|
+
structuredContent?: Recordish;
|
|
14
|
+
outputSchema?: Recordish;
|
|
15
|
+
truncated?: {
|
|
16
|
+
originalBytes: number;
|
|
17
|
+
originalLines: number;
|
|
18
|
+
returnedBytes: number;
|
|
19
|
+
returnedLines: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface McpToolSet {
|
|
23
|
+
tools: ToolDefinition[];
|
|
24
|
+
toolNames: string[];
|
|
25
|
+
initialActiveToolNames: string[];
|
|
26
|
+
searchToolName?: string;
|
|
27
|
+
diagnostics: string[];
|
|
28
|
+
canonicalToPiName: ReadonlyMap<string, string>;
|
|
29
|
+
}
|
|
30
|
+
export declare function piMcpToolName(serverId: string, toolName: string): string;
|
|
31
|
+
export declare function createMcpToolSet(options: {
|
|
32
|
+
session: McpSessionConfig;
|
|
33
|
+
catalogs: readonly McpCatalogServer[];
|
|
34
|
+
mcp: RecipeAgentMcp;
|
|
35
|
+
env: NodeJS.ProcessEnv;
|
|
36
|
+
activation: McpToolActivation;
|
|
37
|
+
}): McpToolSet;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=mcp-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tools.d.ts","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,cAAc,IAAI,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AA4HD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQxE;AA+UD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG,UAAU,CA0Nb"}
|
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { Ajv } from "ajv";
|
|
3
|
+
import { Ajv2020 } from "ajv/dist/2020.js";
|
|
4
|
+
import { Type } from "typebox";
|
|
5
|
+
import { callMcpDaemonTool } from "./mcp-daemon-client.js";
|
|
6
|
+
import { searchMcpTools } from "./mcp-cli-core.js";
|
|
7
|
+
import { mcpSelectionAllowsTool } from "./mcp-policy.js";
|
|
8
|
+
const MCP_SEARCH_TOOL_NAME = "mcp_search";
|
|
9
|
+
const DEFAULT_OUTPUT_MAX_BYTES = 50 * 1024;
|
|
10
|
+
const DEFAULT_OUTPUT_MAX_LINES = 2_000;
|
|
11
|
+
const DEFAULT_CALL_TIMEOUT_MS = 120_000;
|
|
12
|
+
function asRecord(value) {
|
|
13
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
14
|
+
? value
|
|
15
|
+
: undefined;
|
|
16
|
+
}
|
|
17
|
+
function positiveInteger(value, fallback) {
|
|
18
|
+
const parsed = Number(value);
|
|
19
|
+
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
20
|
+
}
|
|
21
|
+
function schemaCompiler(schema) {
|
|
22
|
+
const dialect = typeof schema.$schema === "string" ? schema.$schema : "";
|
|
23
|
+
return dialect.includes("draft-07")
|
|
24
|
+
? new Ajv({ strict: false, allErrors: true, validateFormats: false })
|
|
25
|
+
: new Ajv2020({ strict: false, allErrors: true, validateFormats: false });
|
|
26
|
+
}
|
|
27
|
+
function compileSchema(schema, label) {
|
|
28
|
+
try {
|
|
29
|
+
return schemaCompiler(schema).compile(schema);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`${label} is not a compilable JSON Schema: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function jsonPointerValue(root, ref) {
|
|
36
|
+
if (!ref.startsWith("#/")) {
|
|
37
|
+
throw new Error(`unsupported non-local JSON Schema reference '${ref}'`);
|
|
38
|
+
}
|
|
39
|
+
let current = root;
|
|
40
|
+
for (const rawPart of ref.slice(2).split("/")) {
|
|
41
|
+
const part = rawPart.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
42
|
+
const record = asRecord(current);
|
|
43
|
+
if (!record || !Object.hasOwn(record, part)) {
|
|
44
|
+
throw new Error(`unresolved JSON Schema reference '${ref}'`);
|
|
45
|
+
}
|
|
46
|
+
current = record[part];
|
|
47
|
+
}
|
|
48
|
+
return current;
|
|
49
|
+
}
|
|
50
|
+
function dereferenceSchema(root, value, stack = []) {
|
|
51
|
+
if (Array.isArray(value)) {
|
|
52
|
+
return value.map((entry) => dereferenceSchema(root, entry, stack));
|
|
53
|
+
}
|
|
54
|
+
const record = asRecord(value);
|
|
55
|
+
if (!record)
|
|
56
|
+
return value;
|
|
57
|
+
if (typeof record.$ref === "string") {
|
|
58
|
+
if (stack.includes(record.$ref)) {
|
|
59
|
+
throw new Error(`circular JSON Schema reference '${record.$ref}' is not provider-safe`);
|
|
60
|
+
}
|
|
61
|
+
const target = asRecord(jsonPointerValue(root, record.$ref));
|
|
62
|
+
if (!target) {
|
|
63
|
+
throw new Error(`JSON Schema reference '${record.$ref}' does not resolve to an object`);
|
|
64
|
+
}
|
|
65
|
+
const siblings = Object.fromEntries(Object.entries(record).filter(([key]) => key !== "$ref"));
|
|
66
|
+
return {
|
|
67
|
+
...dereferenceSchema(root, target, [...stack, record.$ref]),
|
|
68
|
+
...dereferenceSchema(root, siblings, stack),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return Object.fromEntries(Object.entries(record)
|
|
72
|
+
.filter(([key]) => key !== "$defs" && key !== "definitions")
|
|
73
|
+
.map(([key, entry]) => [key, dereferenceSchema(root, entry, stack)]));
|
|
74
|
+
}
|
|
75
|
+
function providerSafeInputSchema(schema, label) {
|
|
76
|
+
const normalized = asRecord(dereferenceSchema(schema, schema));
|
|
77
|
+
if (!normalized || normalized.type !== "object") {
|
|
78
|
+
throw new Error(`${label} must be a JSON Schema object with type 'object'`);
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
schema: normalized,
|
|
82
|
+
validate: compileSchema(normalized, label),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function sanitizeNamePart(value) {
|
|
86
|
+
const normalized = value
|
|
87
|
+
.replace(/[^A-Za-z0-9_-]+/g, "_")
|
|
88
|
+
.replace(/^[_-]+|[_-]+$/g, "");
|
|
89
|
+
return normalized || "tool";
|
|
90
|
+
}
|
|
91
|
+
export function piMcpToolName(serverId, toolName) {
|
|
92
|
+
const canonical = `${serverId}.${toolName}`;
|
|
93
|
+
const hash = createHash("sha256").update(canonical).digest("hex").slice(0, 10);
|
|
94
|
+
const readable = `mcp_${sanitizeNamePart(serverId)}_${sanitizeNamePart(toolName)}`;
|
|
95
|
+
const prefix = readable.slice(0, 64 - hash.length - 1).replace(/_+$/g, "");
|
|
96
|
+
return `${prefix}_${hash}`;
|
|
97
|
+
}
|
|
98
|
+
function stableJson(value) {
|
|
99
|
+
if (Array.isArray(value)) {
|
|
100
|
+
return `[${value.map((item) => stableJson(item)).join(",")}]`;
|
|
101
|
+
}
|
|
102
|
+
const record = asRecord(value);
|
|
103
|
+
if (record) {
|
|
104
|
+
return `{${Object.keys(record)
|
|
105
|
+
.sort()
|
|
106
|
+
.map((key) => `${JSON.stringify(key)}:${stableJson(record[key])}`)
|
|
107
|
+
.join(",")}}`;
|
|
108
|
+
}
|
|
109
|
+
return JSON.stringify(value) ?? "null";
|
|
110
|
+
}
|
|
111
|
+
function sameJsonText(text, value) {
|
|
112
|
+
try {
|
|
113
|
+
return stableJson(JSON.parse(text)) === stableJson(value);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function embeddedResourceText(block) {
|
|
120
|
+
const resource = asRecord(block.resource);
|
|
121
|
+
const uri = typeof resource?.uri === "string" ? resource.uri : "resource";
|
|
122
|
+
if (typeof resource?.text === "string") {
|
|
123
|
+
return `[Embedded resource: ${uri}]\n${resource.text}`;
|
|
124
|
+
}
|
|
125
|
+
if (typeof resource?.blob === "string") {
|
|
126
|
+
return `[Embedded binary resource: ${uri}; ${typeof resource.mimeType === "string"
|
|
127
|
+
? resource.mimeType
|
|
128
|
+
: "application/octet-stream"}]`;
|
|
129
|
+
}
|
|
130
|
+
return `[Embedded resource: ${uri}]`;
|
|
131
|
+
}
|
|
132
|
+
function contentBlocks(result, structuredContent) {
|
|
133
|
+
const blocks = [];
|
|
134
|
+
if (structuredContent) {
|
|
135
|
+
blocks.push({ type: "text", text: stableJson(structuredContent) });
|
|
136
|
+
}
|
|
137
|
+
for (const raw of Array.isArray(result.content) ? result.content : []) {
|
|
138
|
+
const block = asRecord(raw);
|
|
139
|
+
if (!block || typeof block.type !== "string")
|
|
140
|
+
continue;
|
|
141
|
+
if (block.type === "text" && typeof block.text === "string") {
|
|
142
|
+
if (structuredContent &&
|
|
143
|
+
sameJsonText(block.text, structuredContent)) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
blocks.push({ type: "text", text: block.text });
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if (block.type === "image" &&
|
|
150
|
+
typeof block.data === "string" &&
|
|
151
|
+
typeof block.mimeType === "string") {
|
|
152
|
+
blocks.push({
|
|
153
|
+
type: "image",
|
|
154
|
+
data: block.data,
|
|
155
|
+
mimeType: block.mimeType,
|
|
156
|
+
});
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (block.type === "resource_link" && typeof block.uri === "string") {
|
|
160
|
+
blocks.push({
|
|
161
|
+
type: "text",
|
|
162
|
+
text: `[Resource link: ${typeof block.name === "string" ? block.name : block.uri}]\n${block.uri}`,
|
|
163
|
+
});
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (block.type === "resource") {
|
|
167
|
+
blocks.push({ type: "text", text: embeddedResourceText(block) });
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (block.type === "audio") {
|
|
171
|
+
blocks.push({
|
|
172
|
+
type: "text",
|
|
173
|
+
text: `[Audio content: ${typeof block.mimeType === "string" ? block.mimeType : "audio/*"}]`,
|
|
174
|
+
});
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
blocks.push({ type: "text", text: stableJson(block) });
|
|
178
|
+
}
|
|
179
|
+
if (blocks.length === 0) {
|
|
180
|
+
blocks.push({ type: "text", text: "(empty result)" });
|
|
181
|
+
}
|
|
182
|
+
return blocks;
|
|
183
|
+
}
|
|
184
|
+
function truncateUtf8(text, maxBytes) {
|
|
185
|
+
if (Buffer.byteLength(text, "utf8") <= maxBytes)
|
|
186
|
+
return text;
|
|
187
|
+
let low = 0;
|
|
188
|
+
let high = text.length;
|
|
189
|
+
while (low < high) {
|
|
190
|
+
const middle = Math.ceil((low + high) / 2);
|
|
191
|
+
if (Buffer.byteLength(text.slice(0, middle), "utf8") <= maxBytes) {
|
|
192
|
+
low = middle;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
high = middle - 1;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return text.slice(0, low);
|
|
199
|
+
}
|
|
200
|
+
function guardContent(content, env) {
|
|
201
|
+
const maxBytes = positiveInteger(env.PI_RECIPES_MCP_MAX_OUTPUT_BYTES, DEFAULT_OUTPUT_MAX_BYTES);
|
|
202
|
+
const maxLines = positiveInteger(env.PI_RECIPES_MCP_MAX_OUTPUT_LINES, DEFAULT_OUTPUT_MAX_LINES);
|
|
203
|
+
const images = content.filter((block) => block.type === "image");
|
|
204
|
+
const text = content
|
|
205
|
+
.filter((block) => block.type === "text")
|
|
206
|
+
.map((block) => block.text)
|
|
207
|
+
.join("\n");
|
|
208
|
+
const originalBytes = Buffer.byteLength(text, "utf8");
|
|
209
|
+
const imageBytes = images.reduce((total, image) => total + Buffer.byteLength(image.data, "base64"), 0);
|
|
210
|
+
const originalContentBytes = originalBytes + imageBytes;
|
|
211
|
+
const originalLines = text.split("\n").length;
|
|
212
|
+
if (originalContentBytes <= maxBytes && originalLines <= maxLines) {
|
|
213
|
+
return { content };
|
|
214
|
+
}
|
|
215
|
+
const linePreview = text.split("\n").slice(0, maxLines).join("\n");
|
|
216
|
+
const notice = `\n\n[Output truncated: ${originalContentBytes} bytes, ${originalLines} lines${images.length > 0 ? `, ${images.length} image(s) omitted` : ""}.]`;
|
|
217
|
+
const preview = truncateUtf8(linePreview, Math.max(0, maxBytes - Buffer.byteLength(notice, "utf8")));
|
|
218
|
+
const guarded = `${preview}${notice}`;
|
|
219
|
+
return {
|
|
220
|
+
content: [{ type: "text", text: guarded }],
|
|
221
|
+
truncated: {
|
|
222
|
+
originalBytes: originalContentBytes,
|
|
223
|
+
originalLines,
|
|
224
|
+
returnedBytes: Buffer.byteLength(guarded, "utf8"),
|
|
225
|
+
returnedLines: guarded.split("\n").length,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function errorText(result, env) {
|
|
230
|
+
const guarded = guardContent(contentBlocks(result, undefined), env);
|
|
231
|
+
const text = guarded.content
|
|
232
|
+
.filter((value) => value.type === "text")
|
|
233
|
+
.map((value) => value.text)
|
|
234
|
+
.join("\n")
|
|
235
|
+
.trim();
|
|
236
|
+
return text || "MCP tool execution failed.";
|
|
237
|
+
}
|
|
238
|
+
function validateResult(tool, raw, env) {
|
|
239
|
+
const result = asRecord(raw);
|
|
240
|
+
if (!result) {
|
|
241
|
+
throw new Error(`MCP tool '${tool.canonicalName}' returned a malformed result.`);
|
|
242
|
+
}
|
|
243
|
+
if (result.isError === true) {
|
|
244
|
+
throw new Error(errorText(result, env));
|
|
245
|
+
}
|
|
246
|
+
const structuredContent = asRecord(result.structuredContent);
|
|
247
|
+
if (tool.validateOutput) {
|
|
248
|
+
if (!structuredContent) {
|
|
249
|
+
throw new Error(`MCP tool '${tool.canonicalName}' declares outputSchema but returned no structuredContent. The remote outcome is unknown; do not retry automatically.`);
|
|
250
|
+
}
|
|
251
|
+
if (!tool.validateOutput(structuredContent)) {
|
|
252
|
+
throw new Error(`MCP tool '${tool.canonicalName}' returned structuredContent that does not match outputSchema: ${schemaErrors(tool.validateOutput)}. The remote outcome is unknown; do not retry automatically.`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const guarded = guardContent(contentBlocks(result, structuredContent), env);
|
|
256
|
+
return {
|
|
257
|
+
content: guarded.content,
|
|
258
|
+
details: {
|
|
259
|
+
server: tool.serverId,
|
|
260
|
+
tool: tool.catalog.name,
|
|
261
|
+
...(structuredContent ? { structuredContent } : {}),
|
|
262
|
+
...(tool.outputSchema ? { outputSchema: tool.outputSchema } : {}),
|
|
263
|
+
...(guarded.truncated ? { truncated: guarded.truncated } : {}),
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function schemaErrors(validate) {
|
|
268
|
+
return (validate.errors ?? [])
|
|
269
|
+
.slice(0, 3)
|
|
270
|
+
.map((error) => `${error.instancePath || "/"} ${error.message ?? "invalid"}`)
|
|
271
|
+
.join("; ");
|
|
272
|
+
}
|
|
273
|
+
function activeCanonicalNames(mcp, usable) {
|
|
274
|
+
const result = new Set();
|
|
275
|
+
for (const tool of usable) {
|
|
276
|
+
const policy = mcp.servers[tool.serverId];
|
|
277
|
+
const deferred = policy.defer?.includes("*") === true ||
|
|
278
|
+
policy.defer?.includes(tool.catalog.name) === true;
|
|
279
|
+
const eager = policy.eager?.includes("*") === true ||
|
|
280
|
+
policy.eager?.includes(tool.catalog.name) === true;
|
|
281
|
+
if (!deferred || eager)
|
|
282
|
+
result.add(tool.canonicalName);
|
|
283
|
+
}
|
|
284
|
+
return result;
|
|
285
|
+
}
|
|
286
|
+
function prepareCatalogSession(session, catalogs, tools) {
|
|
287
|
+
const usable = new Set(tools.map((tool) => tool.canonicalName));
|
|
288
|
+
return {
|
|
289
|
+
...session,
|
|
290
|
+
servers: session.servers.map((server) => {
|
|
291
|
+
const catalog = catalogs.find((entry) => entry.id === server.id);
|
|
292
|
+
return {
|
|
293
|
+
...server,
|
|
294
|
+
catalog: (catalog?.tools ?? []).filter((tool) => usable.has(`${server.id}.${tool.name}`)),
|
|
295
|
+
};
|
|
296
|
+
}),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function compileUsableTools(session, catalogs) {
|
|
300
|
+
const usable = [];
|
|
301
|
+
const unusable = new Map();
|
|
302
|
+
for (const server of session.servers) {
|
|
303
|
+
const discovered = catalogs.find((catalog) => catalog.id === server.id);
|
|
304
|
+
if (!discovered || discovered.error)
|
|
305
|
+
continue;
|
|
306
|
+
for (const catalog of discovered.tools) {
|
|
307
|
+
const canonicalName = `${server.id}.${catalog.name}`;
|
|
308
|
+
try {
|
|
309
|
+
const rawInputSchema = asRecord(catalog.input_schema) ?? {
|
|
310
|
+
type: "object",
|
|
311
|
+
additionalProperties: false,
|
|
312
|
+
};
|
|
313
|
+
const input = providerSafeInputSchema(rawInputSchema, `${canonicalName} inputSchema`);
|
|
314
|
+
const outputSchema = asRecord(catalog.output_schema);
|
|
315
|
+
usable.push({
|
|
316
|
+
serverId: server.id,
|
|
317
|
+
serverName: server.name,
|
|
318
|
+
catalog,
|
|
319
|
+
canonicalName,
|
|
320
|
+
piName: piMcpToolName(server.id, catalog.name),
|
|
321
|
+
inputSchema: input.schema,
|
|
322
|
+
validateInput: input.validate,
|
|
323
|
+
...(outputSchema
|
|
324
|
+
? {
|
|
325
|
+
outputSchema,
|
|
326
|
+
validateOutput: compileSchema(outputSchema, `${canonicalName} outputSchema`),
|
|
327
|
+
}
|
|
328
|
+
: {}),
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
unusable.set(canonicalName, error instanceof Error ? error.message : String(error));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return { usable, unusable };
|
|
337
|
+
}
|
|
338
|
+
export function createMcpToolSet(options) {
|
|
339
|
+
// A host-provisioned daemon may serve more than one agent. Re-apply this
|
|
340
|
+
// resolved agent's policy before any catalog entry becomes a Pi tool.
|
|
341
|
+
const session = {
|
|
342
|
+
...options.session,
|
|
343
|
+
servers: options.session.servers.filter((server) => Object.hasOwn(options.mcp.servers, server.id)),
|
|
344
|
+
};
|
|
345
|
+
const catalogs = options.catalogs
|
|
346
|
+
.filter((catalog) => Object.hasOwn(options.mcp.servers, catalog.id))
|
|
347
|
+
.map((catalog) => ({
|
|
348
|
+
...catalog,
|
|
349
|
+
tools: catalog.tools.filter((tool) => mcpSelectionAllowsTool(options.mcp.servers[catalog.id], tool.name)),
|
|
350
|
+
}));
|
|
351
|
+
const requiredFailures = catalogs.filter((catalog) => {
|
|
352
|
+
const server = session.servers.find((entry) => entry.id === catalog.id);
|
|
353
|
+
return server?.required === true && Boolean(catalog.error);
|
|
354
|
+
});
|
|
355
|
+
if (requiredFailures.length > 0) {
|
|
356
|
+
throw new Error(`Required MCP catalog discovery failed: ${requiredFailures
|
|
357
|
+
.map((catalog) => `${catalog.id}: ${catalog.error}`)
|
|
358
|
+
.join("; ")}`);
|
|
359
|
+
}
|
|
360
|
+
const { usable, unusable } = compileUsableTools(session, catalogs);
|
|
361
|
+
const activeCanonical = activeCanonicalNames(options.mcp, usable);
|
|
362
|
+
const requestedEager = new Set(Object.entries(options.mcp.servers).flatMap(([serverId, policy]) => (policy.eager ?? []).includes("*")
|
|
363
|
+
? usable
|
|
364
|
+
.filter((tool) => tool.serverId === serverId)
|
|
365
|
+
.map((tool) => tool.canonicalName)
|
|
366
|
+
: (policy.eager ?? []).map((tool) => `${serverId}.${tool}`)));
|
|
367
|
+
for (const [serverId, policy] of Object.entries(options.mcp.servers)) {
|
|
368
|
+
const selectors = policy.eager ?? [];
|
|
369
|
+
if (!selectors.includes("*"))
|
|
370
|
+
continue;
|
|
371
|
+
const catalog = catalogs.find((entry) => entry.id === serverId);
|
|
372
|
+
if (!catalog || catalog.error) {
|
|
373
|
+
throw new Error(`Eager MCP wildcard for '${serverId}' requires a healthy catalog${catalog?.error ? `: ${catalog.error}` : "."}`);
|
|
374
|
+
}
|
|
375
|
+
const unusableActive = [...unusable.entries()].find(([name]) => name.startsWith(`${serverId}.`));
|
|
376
|
+
if (unusableActive) {
|
|
377
|
+
throw new Error(`Eager MCP wildcard for '${serverId}' includes unusable tool '${unusableActive[0]}': ${unusableActive[1]}`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const knownCanonical = new Set(catalogs.flatMap((server) => server.tools.map((tool) => `${server.id}.${tool.name}`)));
|
|
381
|
+
for (const name of requestedEager) {
|
|
382
|
+
if (unusable.has(name)) {
|
|
383
|
+
throw new Error(`Eager MCP tool '${name}' is unusable: ${unusable.get(name)}`);
|
|
384
|
+
}
|
|
385
|
+
if (!knownCanonical.has(name) || !activeCanonical.has(name)) {
|
|
386
|
+
throw new Error(`Eager MCP tool '${name}' is not authorized and available in the current catalog.`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
const canonicalToPiName = new Map(usable.map((tool) => [tool.canonicalName, tool.piName]));
|
|
390
|
+
const piNames = new Set();
|
|
391
|
+
for (const tool of usable) {
|
|
392
|
+
if (piNames.has(tool.piName) || tool.piName === MCP_SEARCH_TOOL_NAME) {
|
|
393
|
+
throw new Error(`MCP tool name collision for '${tool.canonicalName}' (${tool.piName}).`);
|
|
394
|
+
}
|
|
395
|
+
piNames.add(tool.piName);
|
|
396
|
+
}
|
|
397
|
+
const tools = usable.map((tool) => ({
|
|
398
|
+
name: tool.piName,
|
|
399
|
+
label: tool.catalog.name,
|
|
400
|
+
description: tool.catalog.description ?? `MCP tool ${tool.canonicalName}`,
|
|
401
|
+
parameters: Type.Unsafe(tool.inputSchema),
|
|
402
|
+
executionMode: tool.catalog.annotations?.readOnlyHint === true &&
|
|
403
|
+
tool.catalog.annotations?.idempotentHint === true
|
|
404
|
+
? "parallel"
|
|
405
|
+
: "sequential",
|
|
406
|
+
async execute(_toolCallId, params, signal) {
|
|
407
|
+
const input = asRecord(params) ?? {};
|
|
408
|
+
if (!tool.validateInput(input)) {
|
|
409
|
+
throw new Error(`MCP tool '${tool.canonicalName}' received arguments that do not match inputSchema: ${schemaErrors(tool.validateInput)}`);
|
|
410
|
+
}
|
|
411
|
+
const raw = await callMcpDaemonTool(tool.serverId, tool.catalog.name, input, {
|
|
412
|
+
env: options.env,
|
|
413
|
+
signal,
|
|
414
|
+
timeoutMs: positiveInteger(options.env.PI_RECIPES_MCP_CALL_TIMEOUT_MS, DEFAULT_CALL_TIMEOUT_MS),
|
|
415
|
+
});
|
|
416
|
+
return validateResult(tool, raw, options.env);
|
|
417
|
+
},
|
|
418
|
+
}));
|
|
419
|
+
const initialActiveToolNames = usable
|
|
420
|
+
.filter((tool) => activeCanonical.has(tool.canonicalName))
|
|
421
|
+
.map((tool) => tool.piName);
|
|
422
|
+
const inactive = usable.filter((tool) => !activeCanonical.has(tool.canonicalName));
|
|
423
|
+
if (inactive.length > 0) {
|
|
424
|
+
const inactiveSession = prepareCatalogSession(session, catalogs, inactive);
|
|
425
|
+
tools.push({
|
|
426
|
+
name: MCP_SEARCH_TOOL_NAME,
|
|
427
|
+
label: "MCP Search",
|
|
428
|
+
description: "Search authorized inactive MCP tools and enable the best matches for the next model request.",
|
|
429
|
+
parameters: Type.Object({
|
|
430
|
+
query: Type.String({
|
|
431
|
+
description: "Capability or task to find an MCP tool for.",
|
|
432
|
+
}),
|
|
433
|
+
limit: Type.Optional(Type.Integer({ minimum: 1, maximum: 10, default: 3 })),
|
|
434
|
+
}),
|
|
435
|
+
executionMode: "sequential",
|
|
436
|
+
async execute(_toolCallId, params) {
|
|
437
|
+
const input = asRecord(params) ?? {};
|
|
438
|
+
const query = typeof input.query === "string" ? input.query : "";
|
|
439
|
+
const requestedLimit = typeof input.limit === "number" ? input.limit : 3;
|
|
440
|
+
const active = new Set(options.activation.getActiveTools());
|
|
441
|
+
const matches = searchMcpTools(inactiveSession, query, {
|
|
442
|
+
limit: inactive.length,
|
|
443
|
+
})
|
|
444
|
+
.filter((match) => {
|
|
445
|
+
const name = canonicalToPiName.get(match.ref);
|
|
446
|
+
return Boolean(name) && !active.has(name);
|
|
447
|
+
})
|
|
448
|
+
.slice(0, requestedLimit);
|
|
449
|
+
const added = matches
|
|
450
|
+
.map((match) => canonicalToPiName.get(match.ref))
|
|
451
|
+
.filter((name) => Boolean(name));
|
|
452
|
+
const details = {
|
|
453
|
+
matches: matches.map((match) => ({
|
|
454
|
+
name: match.ref,
|
|
455
|
+
description: match.description,
|
|
456
|
+
required: match.required,
|
|
457
|
+
})),
|
|
458
|
+
added,
|
|
459
|
+
};
|
|
460
|
+
const text = matches.length === 0
|
|
461
|
+
? `No inactive MCP tools matched "${query}".`
|
|
462
|
+
: [
|
|
463
|
+
`Enabled ${matches.length} MCP tool(s) for the next model request:`,
|
|
464
|
+
...matches.map((match) => `- ${match.ref}${match.description ? ` — ${match.description}` : ""}`),
|
|
465
|
+
].join("\n");
|
|
466
|
+
const result = {
|
|
467
|
+
content: [{ type: "text", text }],
|
|
468
|
+
details,
|
|
469
|
+
};
|
|
470
|
+
if (added.length > 0) {
|
|
471
|
+
options.activation.setActiveTools([
|
|
472
|
+
...new Set([...active, ...added]),
|
|
473
|
+
]);
|
|
474
|
+
}
|
|
475
|
+
return result;
|
|
476
|
+
},
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
return {
|
|
480
|
+
tools,
|
|
481
|
+
toolNames: usable.map((tool) => tool.piName),
|
|
482
|
+
initialActiveToolNames,
|
|
483
|
+
...(inactive.length > 0 ? { searchToolName: MCP_SEARCH_TOOL_NAME } : {}),
|
|
484
|
+
diagnostics: [
|
|
485
|
+
...options.catalogs
|
|
486
|
+
.filter((catalog) => catalog.error)
|
|
487
|
+
.map((catalog) => `${catalog.id}: ${catalog.error}`),
|
|
488
|
+
...[...unusable.entries()].map(([name, error]) => `${name}: ${error}`),
|
|
489
|
+
],
|
|
490
|
+
canonicalToPiName,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
//# sourceMappingURL=mcp-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../src/mcp-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { type RecipePackageManifest, type RecipeMcpToolSelection } from "./recipe-package.js";
|
|
2
|
+
import { type ScopedMcpToolSelection } from "./mcp-policy.js";
|
|
3
|
+
export { preloadMcpCatalogs } from "./mcp-catalog.js";
|
|
4
|
+
export { executableRecipeToolNames, mcpSelectionAllowsTool, normalizeMcpServerId, resolveAgentMcpSelections, type ScopedMcpToolSelection, } from "./mcp-policy.js";
|
|
2
5
|
export interface McpToolCatalogEntry {
|
|
3
6
|
name: string;
|
|
4
7
|
description?: string;
|
|
@@ -10,6 +13,7 @@ export interface McpSessionServer {
|
|
|
10
13
|
id: string;
|
|
11
14
|
name: string;
|
|
12
15
|
base_url: string;
|
|
16
|
+
required?: boolean;
|
|
13
17
|
package_tools: RecipeMcpToolSelection;
|
|
14
18
|
agent_tools: RecipeMcpToolSelection[];
|
|
15
19
|
/** Optional package-pinned catalog. Dynamic bindings leave this absent. */
|
|
@@ -52,7 +56,7 @@ export interface McpConfigurationDiagnostic {
|
|
|
52
56
|
export interface MaterializeMcpSessionOptions {
|
|
53
57
|
cwd: string;
|
|
54
58
|
manifest: RecipePackageManifest;
|
|
55
|
-
/** MCP selections for the
|
|
59
|
+
/** MCP selections for the one resolved agent owning this session. */
|
|
56
60
|
agentMcp?: readonly ScopedMcpToolSelection[];
|
|
57
61
|
env?: NodeJS.ProcessEnv;
|
|
58
62
|
/**
|
|
@@ -60,6 +64,8 @@ export interface MaterializeMcpSessionOptions {
|
|
|
60
64
|
* (`.pi/mcp.local.json`) is not consulted.
|
|
61
65
|
*/
|
|
62
66
|
localConfig?: McpLocalConfig;
|
|
67
|
+
/** Explicit generated mcporter target for a private tools-mode runtime. */
|
|
68
|
+
mcporterConfigPath?: string;
|
|
63
69
|
}
|
|
64
70
|
/**
|
|
65
71
|
* A `required: true` package MCP server has no endpoint binding. Thrown by
|
|
@@ -121,15 +127,8 @@ export declare function materializeSessionMcpCli(opts: {
|
|
|
121
127
|
binDir: string;
|
|
122
128
|
shimPath: string;
|
|
123
129
|
}>;
|
|
124
|
-
export declare function
|
|
125
|
-
export interface ScopedMcpToolSelection {
|
|
126
|
-
serverId: string;
|
|
127
|
-
tools: RecipeMcpToolSelection;
|
|
128
|
-
}
|
|
129
|
-
export declare function resolveAgentMcpSelections(mcp: Readonly<Record<string, RecipeMcpToolSelection>> | undefined): ScopedMcpToolSelection[];
|
|
130
|
-
export declare function executableRecipeToolNames(tools: readonly string[]): string[];
|
|
130
|
+
export declare function readMcpSessionConfig(cwd: string, env?: NodeJS.ProcessEnv): McpSessionConfig;
|
|
131
131
|
export declare function formatMcpConfigurationDiagnostics(diagnostics: readonly McpConfigurationDiagnostic[], limit?: number): string;
|
|
132
|
-
export declare function mcpSelectionAllowsTool(selection: RecipeMcpToolSelection, toolName: string): boolean;
|
|
133
132
|
export declare function mcpSessionAllowsTool(server: Pick<McpSessionServer, "package_tools" | "agent_tools">, toolName: string): boolean;
|
|
134
133
|
export declare function filterMcpCatalog(server: Pick<McpSessionServer, "package_tools" | "agent_tools">, catalog: readonly McpToolCatalogEntry[]): McpToolCatalogEntry[];
|
|
135
134
|
export interface McporterServerConfig {
|
|
@@ -163,6 +162,19 @@ export declare function buildMcporterConfig(session: McpSessionConfig, opts?: {
|
|
|
163
162
|
cwd?: string;
|
|
164
163
|
}): McporterConfig;
|
|
165
164
|
export declare function clearMcpSession(env: NodeJS.ProcessEnv, cwd: string): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Remove the CLI-facing MCP surface entirely. Tools mode calls this before it
|
|
167
|
+
* creates its private daemon environment so shell tools cannot inherit the
|
|
168
|
+
* session, mcporter config, or `mcp` shim.
|
|
169
|
+
*/
|
|
170
|
+
export declare function clearSessionMcpCli(env: NodeJS.ProcessEnv, cwd: string): Promise<{
|
|
171
|
+
previousMcporterConfig?: string;
|
|
172
|
+
}>;
|
|
173
|
+
export declare function createIsolatedMcpEnvironment(baseEnv: NodeJS.ProcessEnv): Promise<{
|
|
174
|
+
env: NodeJS.ProcessEnv;
|
|
175
|
+
directory: string;
|
|
176
|
+
mcporterConfigPath: string;
|
|
177
|
+
}>;
|
|
166
178
|
export declare function materializeMcpSession(opts: MaterializeMcpSessionOptions): Promise<MaterializedMcpSession>;
|
|
167
179
|
export declare function stopMcpDaemon(env: NodeJS.ProcessEnv): Promise<void>;
|
|
168
180
|
//# sourceMappingURL=mcp.d.ts.map
|