@bf-meishijian/aip 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +2 -2
  2. package/dist/daemon.d.ts.map +1 -1
  3. package/dist/daemon.js +7 -0
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/diagnostics.d.ts.map +1 -1
  6. package/dist/general-run-client.d.ts +21 -3
  7. package/dist/general-run-client.d.ts.map +1 -1
  8. package/dist/general-run-client.js +3 -0
  9. package/dist/general-run-client.js.map +1 -1
  10. package/dist/general-run-manager.d.ts +1 -1
  11. package/dist/general-run-manager.d.ts.map +1 -1
  12. package/dist/general-run-manager.js +5 -2
  13. package/dist/general-run-manager.js.map +1 -1
  14. package/dist/general-run-tools.d.ts +6 -4
  15. package/dist/general-run-tools.d.ts.map +1 -1
  16. package/dist/general-run-tools.js +108 -115
  17. package/dist/general-run-tools.js.map +1 -1
  18. package/dist/host-status.d.ts.map +1 -1
  19. package/dist/live-employee.d.ts +2 -3
  20. package/dist/live-employee.d.ts.map +1 -1
  21. package/dist/live-employee.js +35 -341
  22. package/dist/live-employee.js.map +1 -1
  23. package/dist/local-employee-runtime.d.ts +29 -0
  24. package/dist/local-employee-runtime.d.ts.map +1 -0
  25. package/dist/local-employee-runtime.js +487 -0
  26. package/dist/local-employee-runtime.js.map +1 -0
  27. package/dist/local-mcp.d.ts +137 -0
  28. package/dist/local-mcp.d.ts.map +1 -0
  29. package/dist/local-mcp.js +153 -0
  30. package/dist/local-mcp.js.map +1 -0
  31. package/dist/pi-model-service.d.ts.map +1 -1
  32. package/dist/platform-client.d.ts +3 -0
  33. package/dist/platform-client.d.ts.map +1 -1
  34. package/dist/qa-session-manager.d.ts +1 -1
  35. package/dist/qa-session-manager.d.ts.map +1 -1
  36. package/dist/qa-session-manager.js +12 -5
  37. package/dist/qa-session-manager.js.map +1 -1
  38. package/dist/state.d.ts +2 -2
  39. package/dist/state.js +2 -2
  40. package/package.json +10 -9
@@ -0,0 +1,487 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { mkdir, readFile, readdir, realpath, rename, rm, writeFile } from "node:fs/promises";
3
+ import { isAbsolute, join, relative, resolve } from "node:path";
4
+ import { resolveHostShell } from "@ai-platform/api-contracts";
5
+ import { createInitialSystemMessage } from "@earendil-works/pi-ai";
6
+ import { createEditToolDefinition, createFindToolDefinition, createGrepToolDefinition, createLsToolDefinition, createReadToolDefinition, createWriteToolDefinition, } from "@earendil-works/pi-coding-agent";
7
+ import { Type } from "typebox";
8
+ import { createHostShellTool } from "./host-tools.js";
9
+ import { LocalMcpSession, localMcpToolName } from "./local-mcp.js";
10
+ import { applyDispatchedTools, rememberTool } from "./tool-dispatch.js";
11
+ const SKILL_FILE_UNAVAILABLE = "EMPLOYEE_SKILL_FILE_UNAVAILABLE:读取失败,未加载正文。请使用你自己当前 Skill 目录中的完整路径重试,不要沿用主管或其他成员的绝对路径;若文件已移除或未绑定,不得把此错误当作资料正文。";
12
+ /** 所有本地员工共享配置刷新、原生工具、MCP 和 Skill 文件装载;业务上下文由调用方提供。 */
13
+ export function localEmployeeRuntime(options) {
14
+ const { initial, runId, runRoot, member, turnId, isClosing = () => false, onTerminalClose = () => { }, } = options;
15
+ let current = initial;
16
+ let round = initial;
17
+ let roundInput;
18
+ let roundFailure;
19
+ let roundId = randomUUID();
20
+ let roundRecorded = false;
21
+ let roundLocations = skillLocations(runRoot, member, initial.agent.skills);
22
+ let locations = new Map();
23
+ let cacheChecked = false;
24
+ let refreshTail = Promise.resolve();
25
+ let localMcp = new LocalMcpSession();
26
+ let registerLocal;
27
+ const read = (purpose = "MODEL", file, call) => {
28
+ const result = refreshTail.then(async () => {
29
+ current = await options.load(purpose, file, call);
30
+ await registerLocal?.(current);
31
+ const nextLocations = skillLocations(runRoot, member, current.agent.skills);
32
+ if (!cacheChecked) {
33
+ await pruneSkillCache(runRoot, member, new Set(nextLocations.values()));
34
+ cacheChecked = true;
35
+ }
36
+ for (const [key, path] of locations)
37
+ if (!nextLocations.has(key))
38
+ await rm(path, { force: true });
39
+ locations = nextLocations;
40
+ if (purpose === "SKILL_READ")
41
+ await materializeSkills(runRoot, member, current.agent.skills);
42
+ return current;
43
+ });
44
+ refreshTail = result.then(() => undefined, () => undefined);
45
+ return result;
46
+ };
47
+ const refreshRound = async () => {
48
+ try {
49
+ const config = await read();
50
+ options.validate?.(config);
51
+ round = config;
52
+ roundId = randomUUID();
53
+ roundRecorded = false;
54
+ roundLocations = new Map(locations);
55
+ roundFailure = undefined;
56
+ }
57
+ catch (error) {
58
+ roundFailure = error;
59
+ throw error;
60
+ }
61
+ };
62
+ const refreshInput = async (messages) => {
63
+ if (roundFailure)
64
+ throw roundFailure;
65
+ const input = messages.findLast((message) => message.role === "user");
66
+ const inputKey = input ? JSON.stringify(input) : undefined;
67
+ if (roundInput !== undefined && inputKey !== undefined && inputKey !== roundInput)
68
+ await refreshRound();
69
+ if (inputKey !== undefined)
70
+ roundInput = inputKey;
71
+ };
72
+ const prompt = () => options.prompt(round, roundLocations);
73
+ const extension = (originalApi) => {
74
+ const api = options.wrapTool
75
+ ? Object.assign(Object.create(originalApi), {
76
+ registerTool: (tool) => originalApi.registerTool(options.wrapTool(tool)),
77
+ })
78
+ : originalApi;
79
+ registerLocal = async (config) => {
80
+ const servers = config.localMcpServers ?? [];
81
+ await localMcp.retain(new Set(servers.map((server) => server.connectionId)));
82
+ for (const server of servers) {
83
+ try {
84
+ const tools = await localMcp.connect(server);
85
+ for (const tool of tools) {
86
+ const name = localMcpToolName(server.connectionId, tool.name);
87
+ if (server.enabledToolNames && !server.enabledToolNames.includes(name))
88
+ continue;
89
+ const definition = {
90
+ name,
91
+ label: tool.label,
92
+ description: tool.description,
93
+ parametersJson: JSON.stringify(tool.inputSchema),
94
+ execution: "HOST",
95
+ handler: name,
96
+ };
97
+ if (!config.toolDefinitions.some((item) => item.name === name))
98
+ config.toolDefinitions.push(definition);
99
+ if (!config.activeToolNames.includes(name))
100
+ config.activeToolNames.push(name);
101
+ const implementation = {
102
+ name,
103
+ label: tool.label,
104
+ description: tool.description,
105
+ parameters: Type.Unsafe(tool.inputSchema),
106
+ async execute(_id, args, signal) {
107
+ const fresh = await read("TOOL");
108
+ const allowed = fresh.localMcpServers?.find((item) => item.connectionId === server.connectionId);
109
+ if (!allowed)
110
+ throw new Error("MCP_TOOL_DISABLED");
111
+ const result = await localMcp.call(allowed, tool.name, args, signal);
112
+ return {
113
+ content: [{ type: "text", text: JSON.stringify(result) }],
114
+ details: {
115
+ mcp: {
116
+ connectionId: server.connectionId,
117
+ tool: tool.name,
118
+ isError: result.isError === true,
119
+ },
120
+ },
121
+ };
122
+ },
123
+ };
124
+ rememberTool(initial.toolDefinitions, name, implementation, api);
125
+ api.registerTool(implementation);
126
+ }
127
+ }
128
+ catch (error) {
129
+ // Failure belongs to this service, never to the employee's other capabilities.
130
+ api.appendEntry("local-mcp-status", {
131
+ connectionId: server.connectionId,
132
+ status: "ERROR",
133
+ error: error instanceof Error && error.message.startsWith("MCP_ENV_MISSING:")
134
+ ? error.message
135
+ : "MCP_CONNECTION_FAILED",
136
+ });
137
+ }
138
+ }
139
+ };
140
+ api.on("session_shutdown", async () => {
141
+ await localMcp.close();
142
+ });
143
+ api.on("agent_end", async () => {
144
+ const previous = localMcp;
145
+ localMcp = new LocalMcpSession();
146
+ await previous.close();
147
+ });
148
+ let runPromptOptions;
149
+ // 开发验收专用:只保存实际请求的系统指令与工具定义,不记录对话/凭证。
150
+ if (process.env.AIP_INSTRUCTION_EVIDENCE_DIR)
151
+ api.on("before_provider_request", async (event, context) => {
152
+ const payload = event.payload;
153
+ const messages = Array.isArray(payload.messages) ? payload.messages : [];
154
+ const input = Array.isArray(payload.input) ? payload.input : [];
155
+ const request = {
156
+ system: payload.system ??
157
+ payload.instructions ??
158
+ [...messages, ...input].filter((message) => message &&
159
+ typeof message === "object" &&
160
+ ["system", "developer"].includes(String(message.role))),
161
+ tools: payload.tools ?? [],
162
+ };
163
+ const secrets = Object.values(current.environmentVariables ?? {}).filter((v) => v.length >= 4);
164
+ const redact = (value) => {
165
+ if (typeof value === "string")
166
+ return secrets.reduce((text, secret) => text.split(secret).join("[REDACTED]"), value);
167
+ if (Array.isArray(value))
168
+ return value.map(redact);
169
+ if (value && typeof value === "object")
170
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, redact(nested)]));
171
+ return value;
172
+ };
173
+ const safeRequest = redact(request);
174
+ const captureId = randomUUID();
175
+ const directory = process.env.AIP_INSTRUCTION_EVIDENCE_DIR;
176
+ await mkdir(directory, { recursive: true, mode: 0o700 });
177
+ await writeFile(resolve(directory, `${captureId}.json`), JSON.stringify({
178
+ captureId,
179
+ capturedAt: new Date().toISOString(),
180
+ runId,
181
+ turnId: turnId,
182
+ member: member,
183
+ sessionId: context.sessionManager.getSessionId(),
184
+ ...redact(options.evidence?.(round) ?? {}),
185
+ employee: { id: round.agent.id, revision: round.agent.revision },
186
+ configHash: round.configHash,
187
+ dispatchedTools: {
188
+ activeToolNames: round.activeToolNames,
189
+ toolDefinitions: round.toolDefinitions,
190
+ },
191
+ runtimeSourceHash: contentHash(await readFile(new URL(import.meta.url), "utf8")),
192
+ systemPrompt: redact(prompt()),
193
+ request: safeRequest,
194
+ requestHash: contentHash(JSON.stringify(safeRequest)),
195
+ }, null, 2), { mode: 0o600, flag: "wx" });
196
+ });
197
+ const registerImplementation = (tool, handler = tool.name) => {
198
+ rememberTool(initial.toolDefinitions, handler, tool, api);
199
+ api.registerTool(tool);
200
+ };
201
+ registerImplementation(createWriteToolDefinition(runRoot));
202
+ registerImplementation(createEditToolDefinition(runRoot));
203
+ registerImplementation(createGrepToolDefinition(runRoot));
204
+ registerImplementation(createFindToolDefinition(runRoot));
205
+ registerImplementation(createLsToolDefinition(runRoot));
206
+ for (const name of (process.platform === "win32" ? ["bash", "powershell"] : ["bash"])) {
207
+ const bash = createHostShellTool(runRoot, { name });
208
+ registerImplementation({
209
+ ...bash,
210
+ async execute(id, args, signal, onUpdate, context) {
211
+ const config = await read("TOOL");
212
+ const shell = resolveHostShell(process.platform, config.environmentVariables ?? {});
213
+ if (shell.name !== name || !config.activeToolNames.includes(name))
214
+ throw new Error("EMPLOYEE_TOOL_DISABLED");
215
+ // Keep credentials in this invocation's child environment, never in process.env or prompts.
216
+ return createHostShellTool(context.cwd, shell, config.environmentVariables).execute(id, args, signal, onUpdate, context);
217
+ },
218
+ });
219
+ }
220
+ const nativeRead = createReadToolDefinition(runRoot);
221
+ registerImplementation({
222
+ ...nativeRead,
223
+ async execute(id, args, signal, onUpdate, context) {
224
+ await read("TOOL");
225
+ if (!current.activeToolNames.includes("read"))
226
+ throw new Error("EMPLOYEE_TOOL_DISABLED");
227
+ const absolute = resolve(context.cwd, args.path);
228
+ const resourceRoot = join(runRoot, ".aip-resources");
229
+ const nested = relative(resourceRoot, absolute);
230
+ const managed = !nested.startsWith("..") && !isAbsolute(nested);
231
+ if (!managed)
232
+ return createReadToolDefinition(context.cwd).execute(id, args, signal, onUpdate, context);
233
+ const metadata = current.agent.skills.find((candidate) => locations.get(`${candidate.id}:${candidate.path}`) === absolute);
234
+ if (!metadata)
235
+ throw new Error(SKILL_FILE_UNAVAILABLE);
236
+ const loaded = await read("SKILL_READ", { skillId: metadata.id, skillPath: metadata.path }, { id, toolName: "read" });
237
+ const file = loaded.agent.skills.find((candidate) => candidate.id === metadata.id && candidate.path === metadata.path);
238
+ if (typeof file?.content !== "string")
239
+ throw new Error(SKILL_FILE_UNAVAILABLE);
240
+ return {
241
+ content: [{ type: "text", text: file.content }],
242
+ details: {
243
+ skillFile: {
244
+ skillId: file.id,
245
+ path: file.path,
246
+ contentHash: contentHash(file.content),
247
+ },
248
+ },
249
+ };
250
+ },
251
+ });
252
+ function registerPlatformTools(definitions) {
253
+ for (const definition of definitions.filter((tool) => tool.execution === "PLATFORM"))
254
+ registerImplementation({
255
+ name: definition.name,
256
+ label: definition.label,
257
+ description: definition.description,
258
+ parameters: Type.Unsafe(JSON.parse(definition.parametersJson)),
259
+ async execute(id, args, signal, onUpdate, context) {
260
+ if (definition.handler === "employee.read_skill") {
261
+ await read("TOOL");
262
+ if (!current.activeToolNames.includes(definition.name))
263
+ throw new Error("EMPLOYEE_TOOL_DISABLED");
264
+ const metadata = current.agent.skills.find((file) => file.name === args.skillName && file.path === args.path);
265
+ if (!metadata)
266
+ throw new Error(SKILL_FILE_UNAVAILABLE);
267
+ const loaded = await read("SKILL_READ", { skillId: metadata.id, skillPath: metadata.path }, { id, toolName: definition.name });
268
+ const file = loaded.agent.skills.find((file) => file.id === metadata.id && file.path === metadata.path);
269
+ if (typeof file?.content !== "string")
270
+ throw new Error(SKILL_FILE_UNAVAILABLE);
271
+ return {
272
+ content: [
273
+ {
274
+ type: "text",
275
+ text: JSON.stringify({
276
+ outcome: "SUCCEEDED",
277
+ skillId: file.id,
278
+ name: file.name,
279
+ path: file.path,
280
+ content: file.content,
281
+ contentHash: contentHash(file.content),
282
+ localPath: locations.get(`${file.id}:${file.path}`),
283
+ skillRoot: resolve(runRoot, ".aip-resources", member, "skills", file.id),
284
+ }),
285
+ },
286
+ ],
287
+ details: {},
288
+ };
289
+ }
290
+ return options.platformTool(definition, id, args, signal, onUpdate, context);
291
+ },
292
+ }, definition.handler);
293
+ }
294
+ registerPlatformTools(initial.toolDefinitions);
295
+ api.on("before_agent_start", async (event, context) => {
296
+ runPromptOptions = event?.systemPromptOptions;
297
+ if (runPromptOptions)
298
+ delete runPromptOptions.forceSystemPrompt;
299
+ try {
300
+ await refreshRound();
301
+ roundInput = undefined;
302
+ registerPlatformTools(round.toolDefinitions);
303
+ applyDispatchedTools(api, initial.toolDefinitions, round.toolDefinitions, round.activeToolNames);
304
+ }
305
+ catch (error) {
306
+ context?.abort();
307
+ throw error;
308
+ }
309
+ // 投影统一由 context_with_system 提供,避免 SDK 的 forced prompt 覆盖新消息规则。
310
+ });
311
+ api.on("context_with_system", async (event, context) => {
312
+ // Pi-subagents 0.78 的边界扩展最后写入 forced prompt;在每次请求投影前清除,
313
+ // 否则 SDK 会用它覆盖下方动态员工与节点规则,连 steer 后的新规则也无法生效。
314
+ if (runPromptOptions)
315
+ delete runPromptOptions.forceSystemPrompt;
316
+ // 主会话已在 prepareRequest 读取;子进程只提供扩展入口,失败时取消真实请求。
317
+ try {
318
+ await refreshInput(event.messages);
319
+ }
320
+ catch (error) {
321
+ context?.abort();
322
+ throw error;
323
+ }
324
+ const config = current;
325
+ const active = config.activeToolNames;
326
+ registerPlatformTools(config.toolDefinitions);
327
+ applyDispatchedTools(api, initial.toolDefinitions, config.toolDefinitions, active);
328
+ const systemPrompt = prompt();
329
+ if (!roundRecorded) {
330
+ const systemPromptHash = createHash("sha256").update(systemPrompt).digest("hex");
331
+ const previous = context.sessionManager
332
+ .getBranch()
333
+ .findLast((entry) => entry.type === "custom" && entry.customType === "employee-skill-model");
334
+ const data = previous?.type === "custom"
335
+ ? previous.data
336
+ : undefined;
337
+ const previousHash = data?.systemPromptHash ??
338
+ (typeof data?.systemPrompt === "string"
339
+ ? createHash("sha256").update(data.systemPrompt).digest("hex")
340
+ : undefined);
341
+ api.appendEntry("employee-skill-model", {
342
+ employeeId: round.agent.id,
343
+ member: member,
344
+ turnId: turnId,
345
+ roundId,
346
+ configRevision: round.agent.revision,
347
+ systemPromptHash,
348
+ ...(systemPromptHash !== previousHash ? { systemPrompt } : {}),
349
+ });
350
+ roundRecorded = true;
351
+ }
352
+ const system = createInitialSystemMessage(systemPrompt, api.getAllTools().filter((tool) => active.includes(tool.name)));
353
+ return {
354
+ messages: [
355
+ ...(system ? [system] : []),
356
+ ...event.messages.filter((message) => message.role !== "system"),
357
+ ],
358
+ };
359
+ });
360
+ api.on("tool_call", async (event) => {
361
+ if (isClosing())
362
+ return { block: true, reason: "本轮自动执行已结束,请等待用户操作,仅可完成文字回复。" };
363
+ const config = await read("TOOL");
364
+ if (!config.activeToolNames.includes(event.toolName))
365
+ return { block: true, reason: "EMPLOYEE_TOOL_DISABLED:当前员工已禁用此工具" };
366
+ return undefined;
367
+ });
368
+ };
369
+ function attach(session) {
370
+ if (typeof session.dispose === "function") {
371
+ const dispose = session.dispose.bind(session);
372
+ session.dispose = () => {
373
+ void localMcp.close();
374
+ dispose();
375
+ };
376
+ }
377
+ const prepareRequest = session.agent.prepareRequest;
378
+ session.agent.prepareRequest = async (request, signal) => {
379
+ const prior = await prepareRequest?.(request, signal);
380
+ // 该 SDK 边界不会吞掉配置错误;排队消息已消费,工具续轮没有新的 user。
381
+ await refreshInput((prior?.context ?? request.context).messages);
382
+ return prior ?? undefined;
383
+ };
384
+ const original = session.agent.prepareNextTurnWithContext;
385
+ session.agent.prepareNextTurnWithContext = async (turn, signal) => {
386
+ const prior = await original?.(turn, signal);
387
+ if (isClosing()) {
388
+ onTerminalClose();
389
+ session.agent.abort();
390
+ session.setActiveToolsByName([]);
391
+ const context = prior?.context ?? turn.context;
392
+ const system = createInitialSystemMessage(prompt(), []);
393
+ return {
394
+ ...prior,
395
+ context: {
396
+ ...context,
397
+ messages: [
398
+ ...(system ? [system] : []),
399
+ ...context.messages.filter((message) => message.role !== "system"),
400
+ ],
401
+ },
402
+ };
403
+ }
404
+ const config = current;
405
+ session.setActiveToolsByName(config.activeToolNames);
406
+ const systemPrompt = prompt();
407
+ const system = createInitialSystemMessage(systemPrompt, session.agent.state.tools.slice());
408
+ return {
409
+ ...prior,
410
+ context: {
411
+ ...(prior?.context ?? turn.context),
412
+ messages: [
413
+ ...(system ? [system] : []),
414
+ ...(prior?.context ?? turn.context).messages.filter((message) => message.role !== "system"),
415
+ ],
416
+ },
417
+ };
418
+ };
419
+ }
420
+ return { extension, attach };
421
+ }
422
+ const contentHash = (content) => createHash("sha256").update(content).digest("hex");
423
+ function skillLocations(runRoot, member, files) {
424
+ if (!/^[a-z0-9-]+$/iu.test(member))
425
+ throw Error("EMPLOYEE_MEMBER_INVALID");
426
+ return new Map(files.map((file) => {
427
+ if (!/^[a-z0-9-]+$/iu.test(file.id) ||
428
+ isAbsolute(file.path) ||
429
+ file.path.split(/[\\/]/u).some((part) => part === ".." || part === "." || part === ""))
430
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
431
+ return [
432
+ `${file.id}:${file.path}`,
433
+ resolve(runRoot, ".aip-resources", member, "skills", file.id, file.path),
434
+ ];
435
+ }));
436
+ }
437
+ async function materializeSkills(runRoot, member, files) {
438
+ const base = join(runRoot, ".aip-resources", member, "skills");
439
+ await mkdir(base, { recursive: true, mode: 0o700 });
440
+ const realBase = await realpath(base), realRun = await realpath(runRoot);
441
+ if (relative(realRun, realBase).startsWith("..") || isAbsolute(relative(realRun, realBase)))
442
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
443
+ for (const file of files) {
444
+ if (typeof file.content !== "string")
445
+ continue;
446
+ if (!/^[a-z0-9-]+$/iu.test(file.id) ||
447
+ isAbsolute(file.path) ||
448
+ file.path.split(/[\\/]/u).some((part) => part === ".." || part === "." || part === ""))
449
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
450
+ const target = resolve(base, file.id, file.path);
451
+ await mkdir(join(target, ".."), { recursive: true, mode: 0o700 });
452
+ const parent = await realpath(join(target, ".."));
453
+ if (relative(realBase, parent).startsWith("..") || isAbsolute(relative(realBase, parent)))
454
+ throw Error("SKILL_RESOURCE_PATH_FORBIDDEN");
455
+ const temporary = `${target}.aip-next`;
456
+ await rm(temporary, { force: true });
457
+ await writeFile(temporary, file.content, { mode: 0o600, flag: "wx" });
458
+ await rename(temporary, target);
459
+ }
460
+ }
461
+ /** 会话续接时按当前绑定清理运行时缓存,避免保留上一轮已解绑的脚本。 */
462
+ async function pruneSkillCache(runRoot, member, allowed) {
463
+ const base = join(runRoot, ".aip-resources", member, "skills");
464
+ let actual;
465
+ try {
466
+ actual = await realpath(base);
467
+ }
468
+ catch (error) {
469
+ if (error.code === "ENOENT")
470
+ return;
471
+ throw error;
472
+ }
473
+ const nested = relative(await realpath(runRoot), actual);
474
+ if (nested.startsWith("..") || isAbsolute(nested))
475
+ throw new Error("SKILL_RESOURCE_PATH_FORBIDDEN");
476
+ const prune = async (directory) => {
477
+ for (const entry of await readdir(directory, { withFileTypes: true })) {
478
+ const path = join(directory, entry.name);
479
+ if (entry.isDirectory())
480
+ await prune(path);
481
+ else if (entry.isSymbolicLink() || !allowed.has(path))
482
+ await rm(path, { force: true });
483
+ }
484
+ };
485
+ await prune(base);
486
+ }
487
+ //# sourceMappingURL=local-employee-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-employee-runtime.js","sourceRoot":"","sources":["../src/local-employee-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ export type LocalMcpServer = {
2
+ connectionId: string;
3
+ name: string;
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ cwd?: string;
8
+ enabledToolNames?: string[];
9
+ };
10
+ export type LocalMcpTool = {
11
+ name: string;
12
+ label: string;
13
+ description: string;
14
+ inputSchema: Record<string, unknown>;
15
+ };
16
+ export declare function localMcpToolName(connectionId: string, remoteName: string): string;
17
+ export declare function localMcpEnvironment(values?: Record<string, string>, environment?: NodeJS.ProcessEnv): {
18
+ [k: string]: string;
19
+ };
20
+ export declare class LocalMcpSession {
21
+ private readonly timeout;
22
+ private readonly connectionTimeout;
23
+ private connections;
24
+ private pending;
25
+ private closed;
26
+ private closing?;
27
+ constructor(timeout?: number, connectionTimeout?: number);
28
+ connect(server: LocalMcpServer): Promise<LocalMcpTool[]>;
29
+ call(server: LocalMcpServer, toolName: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<{
30
+ [x: string]: unknown;
31
+ content: ({
32
+ type: "text";
33
+ text: string;
34
+ annotations?: {
35
+ audience?: ("user" | "assistant")[] | undefined;
36
+ priority?: number | undefined;
37
+ lastModified?: string | undefined;
38
+ } | undefined;
39
+ _meta?: {
40
+ [x: string]: unknown;
41
+ } | undefined;
42
+ } | {
43
+ type: "image";
44
+ data: string;
45
+ mimeType: string;
46
+ annotations?: {
47
+ audience?: ("user" | "assistant")[] | undefined;
48
+ priority?: number | undefined;
49
+ lastModified?: string | undefined;
50
+ } | undefined;
51
+ _meta?: {
52
+ [x: string]: unknown;
53
+ } | undefined;
54
+ } | {
55
+ type: "audio";
56
+ data: string;
57
+ mimeType: string;
58
+ annotations?: {
59
+ audience?: ("user" | "assistant")[] | undefined;
60
+ priority?: number | undefined;
61
+ lastModified?: string | undefined;
62
+ } | undefined;
63
+ _meta?: {
64
+ [x: string]: unknown;
65
+ } | undefined;
66
+ } | {
67
+ uri: string;
68
+ name: string;
69
+ type: "resource_link";
70
+ description?: string | undefined;
71
+ mimeType?: string | undefined;
72
+ size?: number | undefined;
73
+ annotations?: {
74
+ audience?: ("user" | "assistant")[] | undefined;
75
+ priority?: number | undefined;
76
+ lastModified?: string | undefined;
77
+ } | undefined;
78
+ _meta?: {
79
+ [x: string]: unknown;
80
+ } | undefined;
81
+ icons?: {
82
+ src: string;
83
+ mimeType?: string | undefined;
84
+ sizes?: string[] | undefined;
85
+ theme?: "light" | "dark" | undefined;
86
+ }[] | undefined;
87
+ title?: string | undefined;
88
+ } | {
89
+ type: "resource";
90
+ resource: {
91
+ uri: string;
92
+ text: string;
93
+ mimeType?: string | undefined;
94
+ _meta?: {
95
+ [x: string]: unknown;
96
+ } | undefined;
97
+ } | {
98
+ uri: string;
99
+ blob: string;
100
+ mimeType?: string | undefined;
101
+ _meta?: {
102
+ [x: string]: unknown;
103
+ } | undefined;
104
+ };
105
+ annotations?: {
106
+ audience?: ("user" | "assistant")[] | undefined;
107
+ priority?: number | undefined;
108
+ lastModified?: string | undefined;
109
+ } | undefined;
110
+ _meta?: {
111
+ [x: string]: unknown;
112
+ } | undefined;
113
+ })[];
114
+ _meta?: {
115
+ [x: string]: unknown;
116
+ "io.modelcontextprotocol/serverInfo"?: {
117
+ version: string;
118
+ name: string;
119
+ websiteUrl?: string | undefined;
120
+ description?: string | undefined;
121
+ icons?: {
122
+ src: string;
123
+ mimeType?: string | undefined;
124
+ sizes?: string[] | undefined;
125
+ theme?: "light" | "dark" | undefined;
126
+ }[] | undefined;
127
+ title?: string | undefined;
128
+ } | undefined;
129
+ } | undefined;
130
+ structuredContent?: unknown;
131
+ isError?: boolean | undefined;
132
+ }>;
133
+ retain(ids: Set<string>): Promise<void>;
134
+ close(): Promise<void>;
135
+ }
136
+ export declare function discoverLocalMcp(server: LocalMcpServer): Promise<LocalMcpTool[]>;
137
+ //# sourceMappingURL=local-mcp.d.ts.map