@introspection-ai/recipes 0.13.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/LICENSE +191 -0
- package/README.md +184 -0
- package/dist/agent-tool.d.ts +42 -0
- package/dist/agent-tool.d.ts.map +1 -0
- package/dist/agent-tool.js +159 -0
- package/dist/agent-tool.js.map +1 -0
- package/dist/child-agent-completions.d.ts +61 -0
- package/dist/child-agent-completions.d.ts.map +1 -0
- package/dist/child-agent-completions.js +135 -0
- package/dist/child-agent-completions.js.map +1 -0
- package/dist/child-agent-store.d.ts +48 -0
- package/dist/child-agent-store.d.ts.map +1 -0
- package/dist/child-agent-store.js +98 -0
- package/dist/child-agent-store.js.map +1 -0
- package/dist/child-agent.d.ts +43 -0
- package/dist/child-agent.d.ts.map +1 -0
- package/dist/child-agent.js +268 -0
- package/dist/child-agent.js.map +1 -0
- package/dist/direct-cli.d.ts +9 -0
- package/dist/direct-cli.d.ts.map +1 -0
- package/dist/direct-cli.js +22 -0
- package/dist/direct-cli.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect.d.ts +26 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +70 -0
- package/dist/inspect.js.map +1 -0
- package/dist/interactions.d.ts +204 -0
- package/dist/interactions.d.ts.map +1 -0
- package/dist/interactions.js +358 -0
- package/dist/interactions.js.map +1 -0
- package/dist/mcp-catalog.d.ts +8 -0
- package/dist/mcp-catalog.d.ts.map +1 -0
- package/dist/mcp-catalog.js +60 -0
- package/dist/mcp-catalog.js.map +1 -0
- package/dist/mcp-cli-core.d.ts +79 -0
- package/dist/mcp-cli-core.d.ts.map +1 -0
- package/dist/mcp-cli-core.js +1717 -0
- package/dist/mcp-cli-core.js.map +1 -0
- package/dist/mcp-cli-help.d.ts +2 -0
- package/dist/mcp-cli-help.d.ts.map +1 -0
- package/dist/mcp-cli-help.js +36 -0
- package/dist/mcp-cli-help.js.map +1 -0
- package/dist/mcp-cli-policy.d.ts +17 -0
- package/dist/mcp-cli-policy.d.ts.map +1 -0
- package/dist/mcp-cli-policy.js +230 -0
- package/dist/mcp-cli-policy.js.map +1 -0
- package/dist/mcp-cli.d.ts +3 -0
- package/dist/mcp-cli.d.ts.map +1 -0
- package/dist/mcp-cli.js +33 -0
- package/dist/mcp-cli.js.map +1 -0
- package/dist/mcp-client.d.ts +3 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +86 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp-command-context.d.ts +13 -0
- package/dist/mcp-command-context.d.ts.map +1 -0
- package/dist/mcp-command-context.js +29 -0
- package/dist/mcp-command-context.js.map +1 -0
- package/dist/mcp-contract.d.ts +16 -0
- package/dist/mcp-contract.d.ts.map +1 -0
- package/dist/mcp-contract.js +306 -0
- package/dist/mcp-contract.js.map +1 -0
- package/dist/mcp-daemon-client.d.ts +10 -0
- package/dist/mcp-daemon-client.d.ts.map +1 -0
- package/dist/mcp-daemon-client.js +119 -0
- package/dist/mcp-daemon-client.js.map +1 -0
- package/dist/mcp-daemon-protocol.d.ts +64 -0
- package/dist/mcp-daemon-protocol.d.ts.map +1 -0
- package/dist/mcp-daemon-protocol.js +6 -0
- package/dist/mcp-daemon-protocol.js.map +1 -0
- package/dist/mcp-daemon.d.ts +3 -0
- package/dist/mcp-daemon.d.ts.map +1 -0
- package/dist/mcp-daemon.js +76880 -0
- package/dist/mcp-daemon.js.map +1 -0
- package/dist/mcp-run-worker.d.ts +2 -0
- package/dist/mcp-run-worker.d.ts.map +1 -0
- package/dist/mcp-run-worker.js +76579 -0
- package/dist/mcp-run-worker.js.map +1 -0
- package/dist/mcp.d.ts +168 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +558 -0
- package/dist/mcp.js.map +1 -0
- package/dist/pi-extension.d.ts +30 -0
- package/dist/pi-extension.d.ts.map +1 -0
- package/dist/pi-extension.js +880 -0
- package/dist/pi-extension.js.map +1 -0
- package/dist/provider-env.d.ts +2 -0
- package/dist/provider-env.d.ts.map +1 -0
- package/dist/provider-env.js +21 -0
- package/dist/provider-env.js.map +1 -0
- package/dist/recipe/resolve.d.ts +30 -0
- package/dist/recipe/resolve.d.ts.map +1 -0
- package/dist/recipe/resolve.js +131 -0
- package/dist/recipe/resolve.js.map +1 -0
- package/dist/recipe-agent.d.ts +71 -0
- package/dist/recipe-agent.d.ts.map +1 -0
- package/dist/recipe-agent.js +555 -0
- package/dist/recipe-agent.js.map +1 -0
- package/dist/recipe-extensions.d.ts +9 -0
- package/dist/recipe-extensions.d.ts.map +1 -0
- package/dist/recipe-extensions.js +81 -0
- package/dist/recipe-extensions.js.map +1 -0
- package/dist/recipe-mcp-config.d.ts +15 -0
- package/dist/recipe-mcp-config.d.ts.map +1 -0
- package/dist/recipe-mcp-config.js +82 -0
- package/dist/recipe-mcp-config.js.map +1 -0
- package/dist/recipe-model.d.ts +49 -0
- package/dist/recipe-model.d.ts.map +1 -0
- package/dist/recipe-model.js +299 -0
- package/dist/recipe-model.js.map +1 -0
- package/dist/recipe-package.d.ts +79 -0
- package/dist/recipe-package.d.ts.map +1 -0
- package/dist/recipe-package.js +479 -0
- package/dist/recipe-package.js.map +1 -0
- package/dist/recipe-skills.d.ts +7 -0
- package/dist/recipe-skills.d.ts.map +1 -0
- package/dist/recipe-skills.js +46 -0
- package/dist/recipe-skills.js.map +1 -0
- package/dist/run-controller.d.ts +32 -0
- package/dist/run-controller.d.ts.map +1 -0
- package/dist/run-controller.js +259 -0
- package/dist/run-controller.js.map +1 -0
- package/dist/run.d.ts +28 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +84 -0
- package/dist/run.js.map +1 -0
- package/dist/session.d.ts +140 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +363 -0
- package/dist/session.js.map +1 -0
- package/dist/test-utils.d.ts +32 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +259 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/testing.d.ts +25 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +96 -0
- package/dist/testing.js.map +1 -0
- package/docs/agent-composition.md +196 -0
- package/docs/deployment-configuration.md +65 -0
- package/docs/index.md +49 -0
- package/docs/interactions.md +210 -0
- package/docs/mcp-auth.md +80 -0
- package/docs/mcp-configuration.md +126 -0
- package/docs/migration.md +70 -0
- package/docs/pi-extension.md +97 -0
- package/docs/python-bindings-release.md +47 -0
- package/docs/recipe-evals.md +70 -0
- package/docs/recipe-flow.md +41 -0
- package/docs/recipe-format.md +186 -0
- package/docs/recipe-judges.md +152 -0
- package/docs/runtime-library.md +171 -0
- package/package.json +106 -0
- 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/mcp-client/linux-x64/mcp-client +0 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { parse } from "yaml";
|
|
4
|
+
import { mergeRecipeAgentModelConfig, parseRecipeAgentModelConfig, RecipeModelConfigError, } from "./recipe-model.js";
|
|
5
|
+
import { isValidRecipeMcpToolSelection, packageResourcePaths, parseRecipeMcpToolSelection, readPiPackageManifest, RecipePackageError, } from "./recipe-package.js";
|
|
6
|
+
import { mcpSelectionAllowsTool, normalizeMcpServerId, } from "./mcp.js";
|
|
7
|
+
const INVALID_AGENT_MCP = Symbol("invalidAgentMcp");
|
|
8
|
+
export const REQUIRED_RECIPE_AGENT_FIELDS = [
|
|
9
|
+
"model.name",
|
|
10
|
+
"model.thinkingLevel",
|
|
11
|
+
"tools",
|
|
12
|
+
"systemInstructions",
|
|
13
|
+
];
|
|
14
|
+
const AGENT_YAML_KEYS = new Set([
|
|
15
|
+
"name",
|
|
16
|
+
"from",
|
|
17
|
+
"description",
|
|
18
|
+
"model",
|
|
19
|
+
"tools",
|
|
20
|
+
"mcp",
|
|
21
|
+
"skills",
|
|
22
|
+
"subagents",
|
|
23
|
+
"extensions",
|
|
24
|
+
"system_instructions",
|
|
25
|
+
"systemInstructions",
|
|
26
|
+
"prompt",
|
|
27
|
+
]);
|
|
28
|
+
function asRecord(value) {
|
|
29
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
30
|
+
? value
|
|
31
|
+
: {};
|
|
32
|
+
}
|
|
33
|
+
function stringArray(value) {
|
|
34
|
+
return Array.isArray(value)
|
|
35
|
+
? value.filter((item) => typeof item === "string")
|
|
36
|
+
: [];
|
|
37
|
+
}
|
|
38
|
+
function modelProjection(config) {
|
|
39
|
+
if (!config)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (!config.name && !config.thinkingLevel)
|
|
42
|
+
return undefined;
|
|
43
|
+
return {
|
|
44
|
+
...(config.name ? { name: config.name } : {}),
|
|
45
|
+
...(config.thinkingLevel ? { thinkingLevel: config.thinkingLevel } : {}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function parseSystemInstructions(data) {
|
|
49
|
+
const raw = asRecord(data.system_instructions ?? data.systemInstructions);
|
|
50
|
+
if (Object.hasOwn(raw, "content") && typeof raw.content === "string") {
|
|
51
|
+
const mode = raw.mode === "replace" ? "replace" : "append";
|
|
52
|
+
return { mode, content: raw.content.trim() };
|
|
53
|
+
}
|
|
54
|
+
const prompt = typeof data.prompt === "string" ? data.prompt.trim() : "";
|
|
55
|
+
return prompt ? { mode: "append", content: prompt } : undefined;
|
|
56
|
+
}
|
|
57
|
+
function parseExtensions(data) {
|
|
58
|
+
const raw = asRecord(data.extensions);
|
|
59
|
+
const extensions = {};
|
|
60
|
+
if (Object.hasOwn(raw, "include"))
|
|
61
|
+
extensions.include = stringArray(raw.include);
|
|
62
|
+
if (Object.hasOwn(raw, "exclude"))
|
|
63
|
+
extensions.exclude = stringArray(raw.exclude);
|
|
64
|
+
return extensions.include || extensions.exclude ? extensions : undefined;
|
|
65
|
+
}
|
|
66
|
+
function parseMcp(data) {
|
|
67
|
+
if (!Object.hasOwn(data, "mcp"))
|
|
68
|
+
return undefined;
|
|
69
|
+
const value = data.mcp;
|
|
70
|
+
const validObject = Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
71
|
+
const raw = asRecord(value);
|
|
72
|
+
const mcp = {};
|
|
73
|
+
for (const [serverId, value] of Object.entries(raw)) {
|
|
74
|
+
mcp[serverId] = parseRecipeMcpToolSelection(value);
|
|
75
|
+
}
|
|
76
|
+
if (!validObject) {
|
|
77
|
+
Object.defineProperty(mcp, INVALID_AGENT_MCP, {
|
|
78
|
+
value: true,
|
|
79
|
+
enumerable: false,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return mcp;
|
|
83
|
+
}
|
|
84
|
+
function mergeMcp(base, child) {
|
|
85
|
+
if (!base)
|
|
86
|
+
return child;
|
|
87
|
+
if (!child)
|
|
88
|
+
return base;
|
|
89
|
+
const merged = { ...base };
|
|
90
|
+
for (const [serverId, childServer] of Object.entries(child)) {
|
|
91
|
+
const baseServer = base[serverId];
|
|
92
|
+
merged[serverId] = {
|
|
93
|
+
...(baseServer?.include !== undefined ? { include: baseServer.include } : {}),
|
|
94
|
+
...(baseServer?.exclude !== undefined ? { exclude: baseServer.exclude } : {}),
|
|
95
|
+
...(childServer.include !== undefined ? { include: childServer.include } : {}),
|
|
96
|
+
...(childServer.exclude !== undefined ? { exclude: childServer.exclude } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return merged;
|
|
100
|
+
}
|
|
101
|
+
function readYaml(path) {
|
|
102
|
+
return asRecord(parse(readFileSync(path, "utf8")));
|
|
103
|
+
}
|
|
104
|
+
function recipeManifest(recipeDir) {
|
|
105
|
+
try {
|
|
106
|
+
return readPiPackageManifest(recipeDir);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
if (err instanceof RecipePackageError)
|
|
110
|
+
return null;
|
|
111
|
+
throw err;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function yamlFilesFromPaths(paths) {
|
|
115
|
+
const files = [];
|
|
116
|
+
for (const path of paths) {
|
|
117
|
+
if (!existsSync(path))
|
|
118
|
+
continue;
|
|
119
|
+
const stats = statSync(path);
|
|
120
|
+
if (stats.isFile() && /\.ya?ml$/i.test(path)) {
|
|
121
|
+
files.push(path);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (!stats.isDirectory())
|
|
125
|
+
continue;
|
|
126
|
+
for (const entry of readdirSync(path, { withFileTypes: true })) {
|
|
127
|
+
if (!entry.isFile() || !/\.ya?ml$/i.test(entry.name))
|
|
128
|
+
continue;
|
|
129
|
+
files.push(join(path, entry.name));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return files.sort();
|
|
133
|
+
}
|
|
134
|
+
function recipeAgentFiles(recipeDir) {
|
|
135
|
+
const manifest = recipeManifest(recipeDir);
|
|
136
|
+
if (manifest)
|
|
137
|
+
return yamlFilesFromPaths(packageResourcePaths(manifest, "agents"));
|
|
138
|
+
return yamlFilesFromPaths([join(recipeDir, "agents")]);
|
|
139
|
+
}
|
|
140
|
+
function readRecipeAgentSources(recipeDir, opts = {}) {
|
|
141
|
+
const sources = [];
|
|
142
|
+
for (const path of recipeAgentFiles(recipeDir)) {
|
|
143
|
+
const data = readYaml(path);
|
|
144
|
+
const fallbackName = basename(path).replace(/\.ya?ml$/i, "");
|
|
145
|
+
const explicitName = typeof data.name === "string" && Boolean(data.name.trim());
|
|
146
|
+
const name = explicitName ? data.name.trim() : fallbackName;
|
|
147
|
+
const unknownKeys = Object.keys(data).filter((key) => !AGENT_YAML_KEYS.has(key));
|
|
148
|
+
if (unknownKeys.length > 0) {
|
|
149
|
+
opts.onInvalidFile?.(path, new Error(`Agent YAML at ${path} has unsupported key(s): ${unknownKeys.join(", ")}`));
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
let modelConfig;
|
|
153
|
+
try {
|
|
154
|
+
modelConfig = parseRecipeAgentModelConfig(`Agent YAML at ${path}`, data.model);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
if (!(err instanceof RecipeModelConfigError))
|
|
158
|
+
throw err;
|
|
159
|
+
opts.onInvalidFile?.(path, err);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
sources.push({
|
|
163
|
+
fallbackName,
|
|
164
|
+
explicitName,
|
|
165
|
+
definition: {
|
|
166
|
+
name,
|
|
167
|
+
from: typeof data.from === "string" && data.from.trim() ? data.from.trim() : undefined,
|
|
168
|
+
description: typeof data.description === "string" ? data.description : undefined,
|
|
169
|
+
model: modelProjection(modelConfig),
|
|
170
|
+
modelConfig,
|
|
171
|
+
tools: Object.hasOwn(data, "tools") ? stringArray(data.tools) : undefined,
|
|
172
|
+
mcp: parseMcp(data),
|
|
173
|
+
skills: Object.hasOwn(data, "skills") ? stringArray(data.skills) : undefined,
|
|
174
|
+
subagents: Object.hasOwn(data, "subagents") ? stringArray(data.subagents) : undefined,
|
|
175
|
+
extensions: parseExtensions(data),
|
|
176
|
+
systemInstructions: parseSystemInstructions(data),
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return sources;
|
|
181
|
+
}
|
|
182
|
+
export function loadRecipeAgentDefinitions(recipeDir) {
|
|
183
|
+
const rawDefinitions = new Map();
|
|
184
|
+
const aliases = new Map();
|
|
185
|
+
const resolvedDefinitions = new Map();
|
|
186
|
+
const definitions = new Map();
|
|
187
|
+
const sources = readRecipeAgentSources(recipeDir, {
|
|
188
|
+
onInvalidFile: (path, error) => {
|
|
189
|
+
console.warn(`[recipes] skipping ${path}: ${error.message}`);
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
for (const source of sources) {
|
|
193
|
+
rawDefinitions.set(source.definition.name, source.definition);
|
|
194
|
+
aliases.set(source.fallbackName, source.definition.name);
|
|
195
|
+
}
|
|
196
|
+
function resolveName(name) {
|
|
197
|
+
return rawDefinitions.has(name) ? name : aliases.get(name) ?? name;
|
|
198
|
+
}
|
|
199
|
+
function mergeExtensions(base, child) {
|
|
200
|
+
if (!base)
|
|
201
|
+
return child;
|
|
202
|
+
if (!child)
|
|
203
|
+
return base;
|
|
204
|
+
return {
|
|
205
|
+
...(base.include ? { include: base.include } : {}),
|
|
206
|
+
...(base.exclude ? { exclude: base.exclude } : {}),
|
|
207
|
+
...(child.include ? { include: child.include } : {}),
|
|
208
|
+
...(child.exclude ? { exclude: child.exclude } : {}),
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function resolveDefinition(name, stack = []) {
|
|
212
|
+
const resolvedName = resolveName(name);
|
|
213
|
+
if (resolvedDefinitions.has(resolvedName))
|
|
214
|
+
return resolvedDefinitions.get(resolvedName);
|
|
215
|
+
if (stack.includes(resolvedName))
|
|
216
|
+
return undefined;
|
|
217
|
+
const raw = rawDefinitions.get(resolvedName);
|
|
218
|
+
if (!raw)
|
|
219
|
+
return undefined;
|
|
220
|
+
const base = raw.from
|
|
221
|
+
? resolveDefinition(raw.from, [...stack, resolvedName])
|
|
222
|
+
: undefined;
|
|
223
|
+
if (raw.from && !base)
|
|
224
|
+
return undefined;
|
|
225
|
+
const modelConfig = mergeRecipeAgentModelConfig(base?.modelConfig, raw.modelConfig);
|
|
226
|
+
const definition = {
|
|
227
|
+
name: raw.name,
|
|
228
|
+
...(raw.from ? { from: raw.from } : {}),
|
|
229
|
+
description: raw.description ?? base?.description,
|
|
230
|
+
model: modelProjection(modelConfig),
|
|
231
|
+
...(modelConfig ? { modelConfig } : {}),
|
|
232
|
+
tools: raw.tools ?? base?.tools ?? [],
|
|
233
|
+
mcp: mergeMcp(base?.mcp, raw.mcp),
|
|
234
|
+
skills: raw.skills ?? base?.skills ?? [],
|
|
235
|
+
subagents: raw.subagents ?? base?.subagents ?? [],
|
|
236
|
+
skillsDeclared: raw.skills !== undefined || base?.skillsDeclared === true,
|
|
237
|
+
subagentsDeclared: raw.subagents !== undefined || base?.subagentsDeclared === true,
|
|
238
|
+
extensions: mergeExtensions(base?.extensions, raw.extensions),
|
|
239
|
+
systemInstructions: raw.systemInstructions ?? base?.systemInstructions,
|
|
240
|
+
};
|
|
241
|
+
resolvedDefinitions.set(resolvedName, definition);
|
|
242
|
+
return definition;
|
|
243
|
+
}
|
|
244
|
+
for (const name of rawDefinitions.keys()) {
|
|
245
|
+
const definition = resolveDefinition(name);
|
|
246
|
+
if (!definition) {
|
|
247
|
+
console.warn(`[recipes] skipping agent "${name}": ${fromChainSkipReason(name, rawDefinitions, resolveName)}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
definitions.set(name, definition);
|
|
251
|
+
}
|
|
252
|
+
for (const [alias, name] of aliases) {
|
|
253
|
+
if (definitions.has(alias))
|
|
254
|
+
continue;
|
|
255
|
+
const definition = definitions.get(name);
|
|
256
|
+
if (definition)
|
|
257
|
+
definitions.set(alias, definition);
|
|
258
|
+
}
|
|
259
|
+
return definitions;
|
|
260
|
+
}
|
|
261
|
+
/** Explain why an agent's from: chain failed to resolve (cycle or missing base). */
|
|
262
|
+
function fromChainSkipReason(name, rawDefinitions, resolveName) {
|
|
263
|
+
const stack = [];
|
|
264
|
+
let current = resolveName(name);
|
|
265
|
+
for (;;) {
|
|
266
|
+
const raw = rawDefinitions.get(current);
|
|
267
|
+
if (!raw?.from)
|
|
268
|
+
return "from: chain failed to resolve";
|
|
269
|
+
const next = resolveName(raw.from);
|
|
270
|
+
if (!rawDefinitions.has(next)) {
|
|
271
|
+
return `from: "${raw.from}" does not exist in the recipe`;
|
|
272
|
+
}
|
|
273
|
+
if (stack.includes(next) || next === current) {
|
|
274
|
+
return `from: cycle detected (${[...stack, current, next].join(" -> ")})`;
|
|
275
|
+
}
|
|
276
|
+
stack.push(current);
|
|
277
|
+
current = next;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function recipeAgentFieldProvided(definition, field) {
|
|
281
|
+
if (field === "model.name")
|
|
282
|
+
return Boolean(definition.model?.name);
|
|
283
|
+
if (field === "model.thinkingLevel")
|
|
284
|
+
return Boolean(definition.model?.thinkingLevel);
|
|
285
|
+
if (field === "tools")
|
|
286
|
+
return definition.tools !== undefined;
|
|
287
|
+
if (field === "skills")
|
|
288
|
+
return definition.skills !== undefined;
|
|
289
|
+
if (field === "subagents")
|
|
290
|
+
return definition.subagents !== undefined;
|
|
291
|
+
return definition.systemInstructions !== undefined;
|
|
292
|
+
}
|
|
293
|
+
export function validateResolvedRecipeAgentDefinition(opts) {
|
|
294
|
+
const rawDefinitions = new Map();
|
|
295
|
+
const aliases = new Map();
|
|
296
|
+
const explicitNames = new Map();
|
|
297
|
+
for (const source of readRecipeAgentSources(opts.recipeDir)) {
|
|
298
|
+
rawDefinitions.set(source.definition.name, source.definition);
|
|
299
|
+
aliases.set(source.fallbackName, source.definition.name);
|
|
300
|
+
explicitNames.set(source.definition.name, source.explicitName);
|
|
301
|
+
}
|
|
302
|
+
function resolveName(name) {
|
|
303
|
+
return rawDefinitions.has(name) ? name : aliases.get(name) ?? name;
|
|
304
|
+
}
|
|
305
|
+
function inheritanceFinding(name, stack = []) {
|
|
306
|
+
const resolvedName = resolveName(name);
|
|
307
|
+
const definition = rawDefinitions.get(resolvedName);
|
|
308
|
+
if (!definition) {
|
|
309
|
+
return {
|
|
310
|
+
agentName: resolvedName,
|
|
311
|
+
field: "from",
|
|
312
|
+
message: `Recipe agent "${resolvedName}" was not found`,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
if (!definition.from)
|
|
316
|
+
return undefined;
|
|
317
|
+
const resolvedFrom = resolveName(definition.from);
|
|
318
|
+
if (stack.includes(resolvedFrom)) {
|
|
319
|
+
return {
|
|
320
|
+
agentName: resolvedName,
|
|
321
|
+
field: "from",
|
|
322
|
+
message: `Recipe agent "${resolvedName}" has cyclic from chain: ${[
|
|
323
|
+
...stack,
|
|
324
|
+
resolvedName,
|
|
325
|
+
resolvedFrom,
|
|
326
|
+
].join(" -> ")}`,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
if (!rawDefinitions.has(resolvedFrom)) {
|
|
330
|
+
return {
|
|
331
|
+
agentName: resolvedName,
|
|
332
|
+
field: "from",
|
|
333
|
+
message: `Recipe agent "${resolvedName}" inherits from missing agent "${definition.from}"`,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
return inheritanceFinding(definition.from, [...stack, resolvedName]);
|
|
337
|
+
}
|
|
338
|
+
function resolvedFieldProvided(name, field, stack = []) {
|
|
339
|
+
const resolvedName = resolveName(name);
|
|
340
|
+
if (stack.includes(resolvedName))
|
|
341
|
+
return false;
|
|
342
|
+
const definition = rawDefinitions.get(resolvedName);
|
|
343
|
+
if (!definition)
|
|
344
|
+
return false;
|
|
345
|
+
if (recipeAgentFieldProvided(definition, field))
|
|
346
|
+
return true;
|
|
347
|
+
return definition.from
|
|
348
|
+
? resolvedFieldProvided(definition.from, field, [...stack, resolvedName])
|
|
349
|
+
: false;
|
|
350
|
+
}
|
|
351
|
+
function resolvedTools(name, stack = []) {
|
|
352
|
+
const resolvedName = resolveName(name);
|
|
353
|
+
if (stack.includes(resolvedName))
|
|
354
|
+
return undefined;
|
|
355
|
+
const definition = rawDefinitions.get(resolvedName);
|
|
356
|
+
if (!definition)
|
|
357
|
+
return undefined;
|
|
358
|
+
if (definition.tools !== undefined)
|
|
359
|
+
return definition.tools;
|
|
360
|
+
return definition.from
|
|
361
|
+
? resolvedTools(definition.from, [...stack, resolvedName])
|
|
362
|
+
: undefined;
|
|
363
|
+
}
|
|
364
|
+
function resolvedMcp(name, stack = []) {
|
|
365
|
+
const resolvedName = resolveName(name);
|
|
366
|
+
if (stack.includes(resolvedName))
|
|
367
|
+
return undefined;
|
|
368
|
+
const definition = rawDefinitions.get(resolvedName);
|
|
369
|
+
if (!definition)
|
|
370
|
+
return undefined;
|
|
371
|
+
const base = definition.from
|
|
372
|
+
? resolvedMcp(definition.from, [...stack, resolvedName])
|
|
373
|
+
: undefined;
|
|
374
|
+
return mergeMcp(base, definition.mcp);
|
|
375
|
+
}
|
|
376
|
+
function rawMcpChainInvalid(name, stack = []) {
|
|
377
|
+
const resolvedName = resolveName(name);
|
|
378
|
+
if (stack.includes(resolvedName))
|
|
379
|
+
return false;
|
|
380
|
+
const definition = rawDefinitions.get(resolvedName);
|
|
381
|
+
if (!definition)
|
|
382
|
+
return false;
|
|
383
|
+
const rawMcp = definition.mcp;
|
|
384
|
+
if (rawMcp?.[INVALID_AGENT_MCP] ||
|
|
385
|
+
Object.values(rawMcp ?? {}).some((selection) => !isValidRecipeMcpToolSelection(selection))) {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
return definition.from
|
|
389
|
+
? rawMcpChainInvalid(definition.from, [...stack, resolvedName])
|
|
390
|
+
: false;
|
|
391
|
+
}
|
|
392
|
+
const agentName = resolveName(opts.agentName);
|
|
393
|
+
const findings = [];
|
|
394
|
+
if (opts.requireExplicitName && explicitNames.get(agentName) !== true) {
|
|
395
|
+
findings.push({
|
|
396
|
+
agentName,
|
|
397
|
+
field: "name",
|
|
398
|
+
severity: "warning",
|
|
399
|
+
message: `Recipe agent "${agentName}" must declare name`,
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
const inheritance = inheritanceFinding(agentName);
|
|
403
|
+
if (inheritance)
|
|
404
|
+
findings.push(inheritance);
|
|
405
|
+
for (const field of opts.requiredFields ?? []) {
|
|
406
|
+
if (resolvedFieldProvided(agentName, field))
|
|
407
|
+
continue;
|
|
408
|
+
findings.push({
|
|
409
|
+
agentName,
|
|
410
|
+
field,
|
|
411
|
+
...(field === "model.name" ? {} : { severity: "warning" }),
|
|
412
|
+
message: `Recipe agent "${agentName}" must declare ${field} directly or inherit it with from`,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
const mcp = resolvedMcp(agentName);
|
|
416
|
+
const manifest = recipeManifest(opts.recipeDir);
|
|
417
|
+
const packageMcpServers = manifest
|
|
418
|
+
? new Map(manifest.mcp.servers.map((server) => [
|
|
419
|
+
normalizeMcpServerId(server.id),
|
|
420
|
+
server.tools,
|
|
421
|
+
]))
|
|
422
|
+
: undefined;
|
|
423
|
+
// Rust recipe-check owns detailed authoring diagnostics. This runtime guard
|
|
424
|
+
// only ensures malformed raw policies fail closed before agent startup.
|
|
425
|
+
const invalidMcpPolicy = rawMcpChainInvalid(agentName) ||
|
|
426
|
+
Object.entries(mcp ?? {}).some(([serverId, selection]) => {
|
|
427
|
+
if (!serverId.trim() || !isValidRecipeMcpToolSelection(selection)) {
|
|
428
|
+
return true;
|
|
429
|
+
}
|
|
430
|
+
if (!packageMcpServers)
|
|
431
|
+
return false;
|
|
432
|
+
const packageSelection = packageMcpServers.get(normalizeMcpServerId(serverId));
|
|
433
|
+
if (!packageSelection)
|
|
434
|
+
return true;
|
|
435
|
+
return (selection.include ?? []).some((toolName) => {
|
|
436
|
+
const value = toolName.trim();
|
|
437
|
+
return value !== "*" && !mcpSelectionAllowsTool(packageSelection, value);
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
if (invalidMcpPolicy) {
|
|
441
|
+
findings.push({
|
|
442
|
+
agentName,
|
|
443
|
+
field: "mcp",
|
|
444
|
+
code: "mcp_invalid",
|
|
445
|
+
message: `Recipe agent "${agentName}" has an invalid MCP policy; run introspection check for details`,
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
return findings;
|
|
449
|
+
}
|
|
450
|
+
function isValidRecipeModelSpec(spec) {
|
|
451
|
+
const slash = spec.indexOf("/");
|
|
452
|
+
if (slash <= 0 || slash === spec.length - 1)
|
|
453
|
+
return false;
|
|
454
|
+
const provider = spec.slice(0, slash);
|
|
455
|
+
return !/[\s:]/.test(provider);
|
|
456
|
+
}
|
|
457
|
+
function validateRecipeAgentModelSpecs(sources) {
|
|
458
|
+
const findings = [];
|
|
459
|
+
for (const source of sources) {
|
|
460
|
+
const spec = source.definition.model?.name;
|
|
461
|
+
if (!spec || isValidRecipeModelSpec(spec))
|
|
462
|
+
continue;
|
|
463
|
+
findings.push({
|
|
464
|
+
agentName: source.definition.name,
|
|
465
|
+
field: "model.name",
|
|
466
|
+
message: `Recipe agent "${source.definition.name}" has invalid model.name "${spec}" - expected "<provider>/<model_id>"`,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
return findings;
|
|
470
|
+
}
|
|
471
|
+
function validateRecipeAgentNames(sources) {
|
|
472
|
+
const findings = [];
|
|
473
|
+
const explicitNameCounts = new Map();
|
|
474
|
+
const explicitNames = new Set();
|
|
475
|
+
for (const source of sources) {
|
|
476
|
+
if (!source.explicitName)
|
|
477
|
+
continue;
|
|
478
|
+
explicitNames.add(source.definition.name);
|
|
479
|
+
explicitNameCounts.set(source.definition.name, (explicitNameCounts.get(source.definition.name) ?? 0) + 1);
|
|
480
|
+
}
|
|
481
|
+
for (const [name, count] of explicitNameCounts) {
|
|
482
|
+
if (count <= 1)
|
|
483
|
+
continue;
|
|
484
|
+
findings.push({
|
|
485
|
+
agentName: name,
|
|
486
|
+
field: "name",
|
|
487
|
+
message: `Recipe agent name "${name}" is declared by multiple files`,
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
for (const source of sources) {
|
|
491
|
+
if (source.fallbackName === source.definition.name ||
|
|
492
|
+
!explicitNames.has(source.fallbackName)) {
|
|
493
|
+
continue;
|
|
494
|
+
}
|
|
495
|
+
findings.push({
|
|
496
|
+
agentName: source.definition.name,
|
|
497
|
+
field: "name",
|
|
498
|
+
message: `Recipe agent file alias "${source.fallbackName}" conflicts with an explicit agent name`,
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
return findings;
|
|
502
|
+
}
|
|
503
|
+
export function validateRecipeAgentDefinitions(recipeDir) {
|
|
504
|
+
const invalidFileFindings = [];
|
|
505
|
+
const sources = readRecipeAgentSources(recipeDir, {
|
|
506
|
+
onInvalidFile: (path, error) => {
|
|
507
|
+
invalidFileFindings.push({
|
|
508
|
+
agentName: basename(path).replace(/\.ya?ml$/i, ""),
|
|
509
|
+
field: "file",
|
|
510
|
+
message: error.message,
|
|
511
|
+
});
|
|
512
|
+
},
|
|
513
|
+
});
|
|
514
|
+
const agentNames = [...new Set(sources.map((source) => source.definition.name))].sort();
|
|
515
|
+
return [
|
|
516
|
+
...invalidFileFindings,
|
|
517
|
+
...validateRecipeAgentNames(sources),
|
|
518
|
+
...validateRecipeAgentModelSpecs(sources),
|
|
519
|
+
...agentNames.flatMap((agentName) => validateResolvedRecipeAgentDefinition({
|
|
520
|
+
recipeDir,
|
|
521
|
+
agentName,
|
|
522
|
+
requireExplicitName: true,
|
|
523
|
+
requiredFields: REQUIRED_RECIPE_AGENT_FIELDS,
|
|
524
|
+
})),
|
|
525
|
+
];
|
|
526
|
+
}
|
|
527
|
+
export function resolveRecipeAgentName(opts) {
|
|
528
|
+
if (opts.agentName?.trim())
|
|
529
|
+
return opts.agentName.trim();
|
|
530
|
+
const definitions = loadRecipeAgentDefinitions(opts.recipeDir);
|
|
531
|
+
const defaultAgent = definitions.get("agent");
|
|
532
|
+
if (defaultAgent)
|
|
533
|
+
return defaultAgent.name;
|
|
534
|
+
const uniqueNames = [
|
|
535
|
+
...new Set([...definitions.values()].map((definition) => definition.name)),
|
|
536
|
+
];
|
|
537
|
+
if (uniqueNames.length === 1)
|
|
538
|
+
return uniqueNames[0];
|
|
539
|
+
if (uniqueNames.length === 0)
|
|
540
|
+
return "agent";
|
|
541
|
+
throw new Error("Recipe has multiple agents and no default entrypoint; add agents/agent.yaml or set PI_AGENT_NAME");
|
|
542
|
+
}
|
|
543
|
+
export function resolveRecipeAgentDefinition(opts) {
|
|
544
|
+
const agentName = resolveRecipeAgentName(opts);
|
|
545
|
+
const agent = loadRecipeAgentDefinitions(opts.recipeDir).get(agentName) ?? null;
|
|
546
|
+
return { agentName, agent };
|
|
547
|
+
}
|
|
548
|
+
export function loadRecipeSystemPrompt(recipeDir) {
|
|
549
|
+
const path = join(recipeDir, "SYSTEM.md");
|
|
550
|
+
if (!existsSync(path))
|
|
551
|
+
return undefined;
|
|
552
|
+
const content = readFileSync(path, "utf8").trim();
|
|
553
|
+
return content || undefined;
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=recipe-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-agent.js","sourceRoot":"","sources":["../src/recipe-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExtensionFactory } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
/**
|
|
3
|
+
* Load a recipe-declared extension module and return its factory. TS sources
|
|
4
|
+
* load through jiti with package aliases pinned to this package's resolved
|
|
5
|
+
* module instances, so recipe extensions share interaction/interrupt state
|
|
6
|
+
* with their host.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadRecipeExtensionFactory(recipeDir: string, extensionPath: string): Promise<ExtensionFactory>;
|
|
9
|
+
//# sourceMappingURL=recipe-extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe-extensions.d.ts","sourceRoot":"","sources":["../src/recipe-extensions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AA0DxE;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAkB3B"}
|