pi-forge 1.2.2 → 1.2.3
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 +1 -1
- package/dist/client/assets/{CodeMirrorEditor-BwTPp-8p.js → CodeMirrorEditor-1gu-DS9k.js} +4 -4
- package/dist/client/assets/{CodeMirrorEditor-BwTPp-8p.js.map → CodeMirrorEditor-1gu-DS9k.js.map} +1 -1
- package/dist/client/assets/{index--G_jkVyP.js → index-BxZV6ddv.js} +62 -59
- package/dist/client/assets/index-BxZV6ddv.js.map +1 -0
- package/dist/client/assets/index-KUhxvBxw.css +1 -0
- package/dist/client/assets/workbox-window.prod.es5-Cch4wiA5.js.map +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.map +1 -1
- package/dist/server/agent-resource-loader.js +11 -2
- package/dist/server/agent-resource-loader.js.map +1 -1
- package/dist/server/config.js +21 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/mcp/config.js +71 -30
- package/dist/server/mcp/config.js.map +1 -1
- package/dist/server/mcp/manager.js +199 -14
- package/dist/server/mcp/manager.js.map +1 -1
- package/dist/server/mcp/stdio-trust.js +86 -0
- package/dist/server/mcp/stdio-trust.js.map +1 -0
- package/dist/server/project-manager.js +8 -0
- package/dist/server/project-manager.js.map +1 -1
- package/dist/server/routes/mcp.js +165 -18
- package/dist/server/routes/mcp.js.map +1 -1
- package/dist/server/routes/projects.js +80 -0
- package/dist/server/routes/projects.js.map +1 -1
- package/dist/server/system-prompt-overrides.js +103 -0
- package/dist/server/system-prompt-overrides.js.map +1 -0
- package/package.json +1 -1
- package/dist/client/assets/index--G_jkVyP.js.map +0 -1
- package/dist/client/assets/index-B4ryaCak.css +0 -1
|
@@ -3,6 +3,16 @@ import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
|
3
3
|
import { dirname } from "node:path";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import { config } from "../config.js";
|
|
6
|
+
/**
|
|
7
|
+
* True when this entry should be opened as a stdio (subprocess)
|
|
8
|
+
* server, false when remote (URL). Single source of truth for the
|
|
9
|
+
* discriminator — callers don't have to re-derive
|
|
10
|
+
* `cfg.command !== undefined` everywhere, and a future migration to
|
|
11
|
+
* an explicit `kind` field has one place to change.
|
|
12
|
+
*/
|
|
13
|
+
export function isStdioConfig(cfg) {
|
|
14
|
+
return typeof cfg.command === "string" && cfg.command.length > 0;
|
|
15
|
+
}
|
|
6
16
|
const SECRET_PLACEHOLDER = "***REDACTED***";
|
|
7
17
|
async function ensureDir() {
|
|
8
18
|
await mkdir(dirname(config.mcpConfigFile), { recursive: true });
|
|
@@ -53,35 +63,78 @@ export async function readMcpJson() {
|
|
|
53
63
|
}
|
|
54
64
|
}
|
|
55
65
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
66
|
+
* Copy `src` to a fresh `McpServerConfig` keeping only fields that
|
|
67
|
+
* are not `undefined`. Centralizes the field list so the redact /
|
|
68
|
+
* write paths can't drift from each other when we add a field.
|
|
69
|
+
*/
|
|
70
|
+
function copyServerCleaned(src) {
|
|
71
|
+
const out = {};
|
|
72
|
+
if (src.enabled !== undefined)
|
|
73
|
+
out.enabled = src.enabled;
|
|
74
|
+
if (src.url !== undefined)
|
|
75
|
+
out.url = src.url;
|
|
76
|
+
if (src.transport !== undefined)
|
|
77
|
+
out.transport = src.transport;
|
|
78
|
+
if (src.command !== undefined)
|
|
79
|
+
out.command = src.command;
|
|
80
|
+
if (src.args !== undefined)
|
|
81
|
+
out.args = [...src.args];
|
|
82
|
+
if (src.cwd !== undefined)
|
|
83
|
+
out.cwd = src.cwd;
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Same as readMcpJson but with every secret VALUE replaced with the
|
|
88
|
+
* redaction sentinel. Covers both `headers` (remote) and `env`
|
|
89
|
+
* (stdio) — both fields commonly carry credentials.
|
|
59
90
|
*/
|
|
60
91
|
export async function readMcpJsonRedacted() {
|
|
61
92
|
const raw = await readMcpJson();
|
|
62
93
|
const out = {};
|
|
63
94
|
for (const [name, server] of Object.entries(raw.servers)) {
|
|
64
|
-
const cleaned =
|
|
65
|
-
if (server.transport !== undefined)
|
|
66
|
-
cleaned.transport = server.transport;
|
|
67
|
-
if (server.enabled !== undefined)
|
|
68
|
-
cleaned.enabled = server.enabled;
|
|
95
|
+
const cleaned = copyServerCleaned(server);
|
|
69
96
|
if (server.headers !== undefined) {
|
|
70
97
|
cleaned.headers = {};
|
|
71
98
|
for (const k of Object.keys(server.headers)) {
|
|
72
99
|
cleaned.headers[k] = SECRET_PLACEHOLDER;
|
|
73
100
|
}
|
|
74
101
|
}
|
|
102
|
+
if (server.env !== undefined) {
|
|
103
|
+
cleaned.env = {};
|
|
104
|
+
for (const k of Object.keys(server.env)) {
|
|
105
|
+
cleaned.env[k] = SECRET_PLACEHOLDER;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
75
108
|
out[name] = cleaned;
|
|
76
109
|
}
|
|
77
110
|
return { disabled: raw.disabled === true, servers: out };
|
|
78
111
|
}
|
|
79
112
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
|
|
113
|
+
* Merge a sentinel-bearing key/value map with the prior persisted
|
|
114
|
+
* one. Used for both `headers` and `env` — same shape, same logic,
|
|
115
|
+
* single helper. Sentinel ↦ prior value (or drop the key if no
|
|
116
|
+
* prior); real value ↦ overwrite.
|
|
117
|
+
*/
|
|
118
|
+
function mergeSecretMap(next, prior) {
|
|
119
|
+
const out = {};
|
|
120
|
+
for (const [k, v] of Object.entries(next)) {
|
|
121
|
+
if (v === SECRET_PLACEHOLDER) {
|
|
122
|
+
if (prior?.[k] !== undefined)
|
|
123
|
+
out[k] = prior[k];
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
out[k] = v;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Write `mcp.json`, merging the secret-placeholder for `headers`
|
|
133
|
+
* AND `env` values back to the prior persisted value. Without this,
|
|
134
|
+
* an "edit and save" round-trip from the UI (which sees the
|
|
135
|
+
* sentinel) would write the literal sentinel back to disk and lock
|
|
136
|
+
* the user out of their MCP server. Same pattern as
|
|
137
|
+
* config-manager.writeModelsJson for `apiKey`.
|
|
85
138
|
*/
|
|
86
139
|
export async function writeMcpJson(next) {
|
|
87
140
|
const existing = await readMcpJson().catch(() => ({ servers: {} }));
|
|
@@ -89,24 +142,12 @@ export async function writeMcpJson(next) {
|
|
|
89
142
|
if (next.disabled === true)
|
|
90
143
|
safe.disabled = true;
|
|
91
144
|
for (const [name, server] of Object.entries(next.servers ?? {})) {
|
|
92
|
-
const merged =
|
|
93
|
-
if (server.transport !== undefined)
|
|
94
|
-
merged.transport = server.transport;
|
|
95
|
-
if (server.enabled !== undefined)
|
|
96
|
-
merged.enabled = server.enabled;
|
|
145
|
+
const merged = copyServerCleaned(server);
|
|
97
146
|
if (server.headers !== undefined) {
|
|
98
|
-
merged.headers =
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
if (hv === SECRET_PLACEHOLDER) {
|
|
103
|
-
if (prior[hk] !== undefined)
|
|
104
|
-
merged.headers[hk] = prior[hk];
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
merged.headers[hk] = hv;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
147
|
+
merged.headers = mergeSecretMap(server.headers, existing.servers[name]?.headers);
|
|
148
|
+
}
|
|
149
|
+
if (server.env !== undefined) {
|
|
150
|
+
merged.env = mergeSecretMap(server.env, existing.servers[name]?.env);
|
|
110
151
|
}
|
|
111
152
|
safe.servers[name] = merged;
|
|
112
153
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@ import { join } from "node:path";
|
|
|
3
3
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
4
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
5
5
|
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
6
|
-
import {
|
|
6
|
+
import { getDefaultEnvironment, StdioClientTransport, } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
7
|
+
import { isStdioConfig, readMcpJson } from "./config.js";
|
|
8
|
+
import { isStdioTrustedForProject } from "./stdio-trust.js";
|
|
7
9
|
import { bridgeMcpTool } from "./tool-bridge.js";
|
|
8
10
|
const PROJECT_MCP_FILE = ".mcp.json";
|
|
9
11
|
function entryKey(scope, name) {
|
|
@@ -29,6 +31,7 @@ export async function loadGlobal() {
|
|
|
29
31
|
await syncScope("global", cfg.servers);
|
|
30
32
|
}
|
|
31
33
|
export async function loadProject(projectId, projectPath) {
|
|
34
|
+
cachedProjectPaths.set(projectId, projectPath);
|
|
32
35
|
const cfg = await readProjectMcpJson(projectPath);
|
|
33
36
|
await syncScope({ project: projectId }, cfg);
|
|
34
37
|
loadedProjects.add(projectId);
|
|
@@ -126,21 +129,32 @@ export function getStatus(opts) {
|
|
|
126
129
|
shortName: t.name,
|
|
127
130
|
description: t.description,
|
|
128
131
|
}));
|
|
132
|
+
const isStdio = isStdioConfig(e.config);
|
|
129
133
|
const status = {
|
|
130
134
|
scope: e.scope === "global" ? "global" : "project",
|
|
131
135
|
name: e.name,
|
|
132
|
-
|
|
136
|
+
kind: isStdio ? "stdio" : "remote",
|
|
133
137
|
enabled: e.config.enabled !== false,
|
|
134
138
|
state: e.state,
|
|
135
139
|
toolCount: e.tools.length,
|
|
136
140
|
tools,
|
|
137
141
|
};
|
|
142
|
+
if (isStdio) {
|
|
143
|
+
if (e.config.command !== undefined)
|
|
144
|
+
status.command = e.config.command;
|
|
145
|
+
if (e.config.args !== undefined)
|
|
146
|
+
status.args = [...e.config.args];
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
if (e.config.url !== undefined)
|
|
150
|
+
status.url = e.config.url;
|
|
151
|
+
if (e.config.transport !== undefined)
|
|
152
|
+
status.transport = e.config.transport;
|
|
153
|
+
}
|
|
138
154
|
if (e.scope !== "global")
|
|
139
155
|
status.projectId = e.scope.project;
|
|
140
156
|
if (e.lastError !== undefined)
|
|
141
157
|
status.lastError = e.lastError;
|
|
142
|
-
if (e.config.transport !== undefined)
|
|
143
|
-
status.transport = e.config.transport;
|
|
144
158
|
out.push(status);
|
|
145
159
|
}
|
|
146
160
|
return out;
|
|
@@ -159,10 +173,61 @@ export async function probe(scope, name) {
|
|
|
159
173
|
const opts = scope === "global" ? undefined : { projectId: scope.project };
|
|
160
174
|
return getStatus(opts).find((s) => s.name === name && s.scope === (scope === "global" ? "global" : "project"));
|
|
161
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Re-attempt connection for every project-scoped stdio entry stuck
|
|
178
|
+
* in `trust_required`. Called from the `POST /mcp/trust/:projectId`
|
|
179
|
+
* route after the operator grants trust — the entries are already
|
|
180
|
+
* in the pool (they were created by `loadProject`), we just need to
|
|
181
|
+
* retry the connect now that the trust gate would pass.
|
|
182
|
+
*
|
|
183
|
+
* Remote entries and global entries are untouched; their connection
|
|
184
|
+
* state doesn't change with stdio trust.
|
|
185
|
+
*/
|
|
186
|
+
export async function reconnectGatedStdioForProject(projectId) {
|
|
187
|
+
const toConnect = [];
|
|
188
|
+
for (const e of pool.values()) {
|
|
189
|
+
if (e.scope === "global")
|
|
190
|
+
continue;
|
|
191
|
+
if (e.scope.project !== projectId)
|
|
192
|
+
continue;
|
|
193
|
+
if (e.state !== "trust_required")
|
|
194
|
+
continue;
|
|
195
|
+
toConnect.push(e);
|
|
196
|
+
}
|
|
197
|
+
// Sequentially-awaited so the connect attempts don't all spawn
|
|
198
|
+
// subprocesses at the same instant — if the operator just clicked
|
|
199
|
+
// trust on a project with five stdio entries, staggering keeps the
|
|
200
|
+
// pi-forge log readable and avoids a thundering-herd spawn.
|
|
201
|
+
for (const entry of toConnect) {
|
|
202
|
+
await connectEntry(entry);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Drop every cached entry for a project — pool entries, the
|
|
207
|
+
* loadedProjects marker, and the cwd hint. Called when the operator
|
|
208
|
+
* revokes stdio trust so the next session-create in this project
|
|
209
|
+
* re-reads `.mcp.json` and re-gates anything that needs gating.
|
|
210
|
+
* Disconnects any currently-running subprocesses too.
|
|
211
|
+
*/
|
|
212
|
+
export async function unloadProject(projectId) {
|
|
213
|
+
const toClose = [];
|
|
214
|
+
for (const [key, entry] of Array.from(pool.entries())) {
|
|
215
|
+
if (entry.scope === "global")
|
|
216
|
+
continue;
|
|
217
|
+
if (entry.scope.project !== projectId)
|
|
218
|
+
continue;
|
|
219
|
+
toClose.push(entry);
|
|
220
|
+
pool.delete(key);
|
|
221
|
+
}
|
|
222
|
+
await Promise.allSettled(toClose.map((e) => disconnectEntry(e)));
|
|
223
|
+
loadedProjects.delete(projectId);
|
|
224
|
+
cachedProjectPaths.delete(projectId);
|
|
225
|
+
}
|
|
162
226
|
export async function disposeAll() {
|
|
163
227
|
await Promise.allSettled(Array.from(pool.values()).map((entry) => disconnectEntry(entry)));
|
|
164
228
|
pool.clear();
|
|
165
229
|
loadedProjects.clear();
|
|
230
|
+
cachedProjectPaths.clear();
|
|
166
231
|
}
|
|
167
232
|
/* ----------------------------- internals ----------------------------- */
|
|
168
233
|
async function syncScope(scope, configs) {
|
|
@@ -181,12 +246,10 @@ async function syncScope(scope, configs) {
|
|
|
181
246
|
const key = entryKey(scope, name);
|
|
182
247
|
const existing = pool.get(key);
|
|
183
248
|
if (existing !== undefined) {
|
|
184
|
-
const sameUrl = existing.config.url === cfg.url;
|
|
185
|
-
const sameTransport = existing.config.transport === cfg.transport;
|
|
186
249
|
const sameEnabled = (existing.config.enabled !== false) === (cfg.enabled !== false);
|
|
187
|
-
const
|
|
250
|
+
const sameConnectionFields = sameConnectionConfig(existing.config, cfg);
|
|
188
251
|
existing.config = cfg;
|
|
189
|
-
if (
|
|
252
|
+
if (sameEnabled && sameConnectionFields) {
|
|
190
253
|
// Nothing meaningful changed; skip the disconnect/reconnect dance.
|
|
191
254
|
continue;
|
|
192
255
|
}
|
|
@@ -212,6 +275,31 @@ async function syncScope(scope, configs) {
|
|
|
212
275
|
}
|
|
213
276
|
}
|
|
214
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* Equality across every field that affects the underlying connection
|
|
280
|
+
* (excluding `enabled`, which the caller compares separately because
|
|
281
|
+
* a false→true flip needs to drop into connect, not just reconnect).
|
|
282
|
+
* Covers both remote (`url`, `transport`, `headers`) and stdio
|
|
283
|
+
* (`command`, `args`, `env`, `cwd`) — comparing the irrelevant set
|
|
284
|
+
* for a given kind is harmless because both sides are `undefined`.
|
|
285
|
+
*/
|
|
286
|
+
function sameConnectionConfig(a, b) {
|
|
287
|
+
if (a.url !== b.url)
|
|
288
|
+
return false;
|
|
289
|
+
if (a.transport !== b.transport)
|
|
290
|
+
return false;
|
|
291
|
+
if (a.command !== b.command)
|
|
292
|
+
return false;
|
|
293
|
+
if (a.cwd !== b.cwd)
|
|
294
|
+
return false;
|
|
295
|
+
if (JSON.stringify(a.args ?? []) !== JSON.stringify(b.args ?? []))
|
|
296
|
+
return false;
|
|
297
|
+
if (JSON.stringify(a.headers ?? {}) !== JSON.stringify(b.headers ?? {}))
|
|
298
|
+
return false;
|
|
299
|
+
if (JSON.stringify(a.env ?? {}) !== JSON.stringify(b.env ?? {}))
|
|
300
|
+
return false;
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
215
303
|
function entryScopeMatches(a, b) {
|
|
216
304
|
if (a === "global" && b === "global")
|
|
217
305
|
return true;
|
|
@@ -220,13 +308,28 @@ function entryScopeMatches(a, b) {
|
|
|
220
308
|
return false;
|
|
221
309
|
}
|
|
222
310
|
async function connectEntry(entry) {
|
|
311
|
+
// Project-scope stdio entries are gated behind a per-project trust
|
|
312
|
+
// decision (see stdio-trust.ts). Refuse to spawn until the operator
|
|
313
|
+
// grants trust via the UI. Global stdio entries and remote entries
|
|
314
|
+
// bypass the gate entirely.
|
|
315
|
+
if (isStdioConfig(entry.config) && entry.scope !== "global") {
|
|
316
|
+
const trusted = await isStdioTrustedForProject(entry.scope.project).catch(() => false);
|
|
317
|
+
if (!trusted) {
|
|
318
|
+
entry.state = "trust_required";
|
|
319
|
+
entry.lastError = "stdio MCP servers from this project require trust";
|
|
320
|
+
entry.tools = [];
|
|
321
|
+
entry.bridged = [];
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
223
325
|
entry.state = "connecting";
|
|
224
326
|
delete entry.lastError;
|
|
225
327
|
try {
|
|
226
|
-
const { client, transport, resolvedTransport } = await openConnection(entry.config);
|
|
328
|
+
const { client, transport, resolvedTransport } = await openConnection(entry.config, entry.scope);
|
|
227
329
|
entry.client = client;
|
|
228
330
|
entry.transport = transport;
|
|
229
|
-
|
|
331
|
+
if (resolvedTransport !== undefined)
|
|
332
|
+
entry.config.transport = resolvedTransport;
|
|
230
333
|
const list = await client.listTools();
|
|
231
334
|
entry.tools = (list.tools ?? []).map((t) => ({
|
|
232
335
|
name: t.name,
|
|
@@ -272,11 +375,27 @@ async function disconnectEntry(entry) {
|
|
|
272
375
|
await Promise.resolve(transport?.close()).catch(() => undefined);
|
|
273
376
|
}
|
|
274
377
|
/**
|
|
275
|
-
* Open a connection
|
|
276
|
-
*
|
|
277
|
-
*
|
|
378
|
+
* Open a connection. Branches on the config's discriminator:
|
|
379
|
+
* - stdio (`command` set) ↦ spawn the subprocess via
|
|
380
|
+
* StdioClientTransport (cwd defaults to the project path for
|
|
381
|
+
* project-scoped servers).
|
|
382
|
+
* - remote (`url` set) ↦ tries StreamableHTTP first when
|
|
383
|
+
* `transport: "auto"` (the default), falls back to SSE — covers
|
|
384
|
+
* fastmcp servers regardless of which transport they expose.
|
|
385
|
+
*
|
|
386
|
+
* The route layer rejects configs where neither (or both) is set, so
|
|
387
|
+
* we don't have to defend against ambiguous input here.
|
|
278
388
|
*/
|
|
279
|
-
async function openConnection(cfg) {
|
|
389
|
+
async function openConnection(cfg, scope) {
|
|
390
|
+
if (isStdioConfig(cfg)) {
|
|
391
|
+
return await openStdio(cfg, scope);
|
|
392
|
+
}
|
|
393
|
+
if (cfg.url === undefined) {
|
|
394
|
+
// Shouldn't happen — the route validator rejects "neither url
|
|
395
|
+
// nor command" with a 400 before reaching the manager. Be loud
|
|
396
|
+
// if it does so a future regression surfaces immediately.
|
|
397
|
+
throw new Error("mcp: server has neither url nor command");
|
|
398
|
+
}
|
|
280
399
|
const url = new URL(cfg.url);
|
|
281
400
|
const requested = cfg.transport ?? "auto";
|
|
282
401
|
if (requested === "streamable-http") {
|
|
@@ -293,6 +412,72 @@ async function openConnection(cfg) {
|
|
|
293
412
|
return await openSse(url, cfg.headers);
|
|
294
413
|
}
|
|
295
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* Spawn the configured subprocess and speak MCP over its stdin /
|
|
417
|
+
* stdout via the SDK's StdioClientTransport.
|
|
418
|
+
*
|
|
419
|
+
* **Env handling.** The SDK passes ONLY `cfg.env` (when set) to the
|
|
420
|
+
* child; it does NOT inherit from the pi-forge process env. We
|
|
421
|
+
* intentionally preserve that behavior — the operator must
|
|
422
|
+
* explicitly pass through any credential / config the subprocess
|
|
423
|
+
* needs. To keep common-case shells / runtimes working though, we
|
|
424
|
+
* always merge in the SDK's `getDefaultEnvironment()` allowlist
|
|
425
|
+
* (PATH, HOME, locale vars, etc.), with operator-supplied entries
|
|
426
|
+
* winning on collision so an explicit `PATH` override still works.
|
|
427
|
+
*
|
|
428
|
+
* **cwd.** Project-scoped entries default to the project path (the
|
|
429
|
+
* user's repo root); global entries inherit the pi-forge process
|
|
430
|
+
* cwd. An explicit `cfg.cwd` always wins.
|
|
431
|
+
*
|
|
432
|
+
* **stderr.** Inherited so the operator can see startup failures /
|
|
433
|
+
* tracebacks in the pi-forge log without having to pipe-and-pump
|
|
434
|
+
* the child's stderr ourselves.
|
|
435
|
+
*/
|
|
436
|
+
async function openStdio(cfg, scope) {
|
|
437
|
+
if (cfg.command === undefined || cfg.command.length === 0) {
|
|
438
|
+
throw new Error("mcp: stdio server requires a command");
|
|
439
|
+
}
|
|
440
|
+
// Project-scope cwd default: spawn relative to the user's repo
|
|
441
|
+
// root so paths inside `args` resolve sanely. Global entries
|
|
442
|
+
// inherit pi-forge's cwd unless overridden.
|
|
443
|
+
const resolvedCwd = cfg.cwd ?? (scope === "global" ? undefined : projectCwdHint(scope.project));
|
|
444
|
+
const env = {
|
|
445
|
+
...getDefaultEnvironment(),
|
|
446
|
+
...(cfg.env ?? {}),
|
|
447
|
+
};
|
|
448
|
+
const transport = new StdioClientTransport({
|
|
449
|
+
command: cfg.command,
|
|
450
|
+
args: cfg.args ?? [],
|
|
451
|
+
env,
|
|
452
|
+
...(resolvedCwd !== undefined ? { cwd: resolvedCwd } : {}),
|
|
453
|
+
stderr: "inherit",
|
|
454
|
+
});
|
|
455
|
+
const client = new Client({ name: "pi-forge", version: "1.0.0" }, { capabilities: {} });
|
|
456
|
+
await client.connect(transport);
|
|
457
|
+
return { client, transport, resolvedTransport: undefined };
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Lookup the cached project cwd. Returns undefined when the project
|
|
461
|
+
* isn't in the pool yet (defensive — `loadProject` always populates
|
|
462
|
+
* the pool with entries before connect, so the project path is
|
|
463
|
+
* already on the entries themselves, but we read from the entry
|
|
464
|
+
* rather than the projects file to keep this hot path free of disk
|
|
465
|
+
* I/O).
|
|
466
|
+
*/
|
|
467
|
+
function projectCwdHint(projectId) {
|
|
468
|
+
for (const e of pool.values()) {
|
|
469
|
+
if (e.scope !== "global" && e.scope.project === projectId) {
|
|
470
|
+
return e.config.cwd ?? cachedProjectPaths.get(projectId);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return cachedProjectPaths.get(projectId);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Project-id → on-disk path cache, populated by `loadProject` so
|
|
477
|
+
* `openStdio` can default `cwd` without a project-manager round
|
|
478
|
+
* trip. Cleared in lockstep with the pool on `disposeAll`.
|
|
479
|
+
*/
|
|
480
|
+
const cachedProjectPaths = new Map();
|
|
296
481
|
async function openStreamableHttp(url, headers) {
|
|
297
482
|
const transport = new StreamableHTTPClientTransport(url, headers !== undefined ? { requestInit: { headers } } : undefined);
|
|
298
483
|
const client = new Client({ name: "pi-forge", version: "1.0.0" }, { capabilities: {} });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { chmodSync } from "node:fs";
|
|
2
|
+
import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { config } from "../config.js";
|
|
6
|
+
const EMPTY = { projects: {} };
|
|
7
|
+
async function ensureDir() {
|
|
8
|
+
await mkdir(dirname(config.mcpStdioTrustFile), { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
async function atomicWrite(data) {
|
|
11
|
+
await ensureDir();
|
|
12
|
+
const path = config.mcpStdioTrustFile;
|
|
13
|
+
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
14
|
+
await writeFile(tmp, JSON.stringify(data, null, 2), { mode: 0o600 });
|
|
15
|
+
try {
|
|
16
|
+
chmodSync(tmp, 0o600);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// best-effort
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
await rename(tmp, path);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
await unlink(tmp).catch(() => undefined);
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function readAll() {
|
|
30
|
+
try {
|
|
31
|
+
const raw = await readFile(config.mcpStdioTrustFile, "utf8");
|
|
32
|
+
if (raw.trim().length === 0)
|
|
33
|
+
return { projects: {} };
|
|
34
|
+
const parsed = JSON.parse(raw);
|
|
35
|
+
if (typeof parsed !== "object" || parsed === null || !("projects" in parsed)) {
|
|
36
|
+
return { projects: {} };
|
|
37
|
+
}
|
|
38
|
+
const projects = parsed.projects;
|
|
39
|
+
if (typeof projects !== "object" || projects === null)
|
|
40
|
+
return { projects: {} };
|
|
41
|
+
const out = { projects: {} };
|
|
42
|
+
for (const [pid, val] of Object.entries(projects)) {
|
|
43
|
+
if (typeof val !== "object" || val === null)
|
|
44
|
+
continue;
|
|
45
|
+
const trustedAt = val.trustedAt;
|
|
46
|
+
if (typeof trustedAt !== "string")
|
|
47
|
+
continue;
|
|
48
|
+
out.projects[pid] = { trustedAt };
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
if (err.code === "ENOENT")
|
|
54
|
+
return { projects: {} };
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function isStdioTrustedForProject(projectId) {
|
|
59
|
+
const cur = await readAll();
|
|
60
|
+
return cur.projects[projectId] !== undefined;
|
|
61
|
+
}
|
|
62
|
+
export async function grantStdioTrust(projectId) {
|
|
63
|
+
const cur = await readAll();
|
|
64
|
+
if (cur.projects[projectId] !== undefined)
|
|
65
|
+
return;
|
|
66
|
+
cur.projects[projectId] = { trustedAt: new Date().toISOString() };
|
|
67
|
+
await atomicWrite(cur);
|
|
68
|
+
}
|
|
69
|
+
export async function revokeStdioTrust(projectId) {
|
|
70
|
+
const cur = await readAll();
|
|
71
|
+
if (cur.projects[projectId] === undefined)
|
|
72
|
+
return;
|
|
73
|
+
delete cur.projects[projectId];
|
|
74
|
+
await atomicWrite(cur);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Drop the trust record on project delete so the file doesn't
|
|
78
|
+
* accumulate orphans. Mirrors the skill/tool/prompt-overrides
|
|
79
|
+
* cleanup hook called from project-manager.deleteProject.
|
|
80
|
+
*/
|
|
81
|
+
export async function clearProjectStdioTrust(projectId) {
|
|
82
|
+
await revokeStdioTrust(projectId);
|
|
83
|
+
}
|
|
84
|
+
/** Exported for tests so the empty-state branch is reachable. */
|
|
85
|
+
export const _EMPTY_FOR_TESTS = EMPTY;
|
|
86
|
+
//# sourceMappingURL=stdio-trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-trust.js","sourceRoot":"","sources":["../../src/mcp/stdio-trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ import { randomUUID } from "node:crypto";
|
|
|
4
4
|
import { config } from "./config.js";
|
|
5
5
|
import { clearProjectOverrides as clearProjectSkillOverrides } from "./skill-overrides.js";
|
|
6
6
|
import { clearProjectPromptOverrides } from "./prompt-overrides.js";
|
|
7
|
+
import { clearProjectSystemPromptAddendum } from "./system-prompt-overrides.js";
|
|
8
|
+
import { clearProjectStdioTrust } from "./mcp/stdio-trust.js";
|
|
7
9
|
/**
|
|
8
10
|
* Project ids are always `randomUUID()` output. Mirrors the same
|
|
9
11
|
* regex used in session-registry's `sessionDirFor()` validator.
|
|
@@ -222,6 +224,12 @@ export async function deleteProject(id, opts = {}) {
|
|
|
222
224
|
await clearProjectPromptOverrides(id).catch((err) => {
|
|
223
225
|
warn({ err, id }, "prompt-overrides cleanup failed");
|
|
224
226
|
});
|
|
227
|
+
await clearProjectSystemPromptAddendum(id).catch((err) => {
|
|
228
|
+
warn({ err, id }, "system-prompt-overrides cleanup failed");
|
|
229
|
+
});
|
|
230
|
+
await clearProjectStdioTrust(id).catch((err) => {
|
|
231
|
+
warn({ err, id }, "mcp-stdio-trust cleanup failed");
|
|
232
|
+
});
|
|
225
233
|
if (opts.cascadeSessionDir === true) {
|
|
226
234
|
// Wipe the project's session directory. Best-effort — a missing
|
|
227
235
|
// dir (no sessions ever recorded) is not an error.
|