craftar 0.27.1 → 0.28.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.
@@ -0,0 +1,244 @@
1
+ /**
2
+ * MCP server rendering and credential checking (spec 34).
3
+ * The one place a server is rendered or scanned for placeholders.
4
+ */
5
+ import { FORGE_SCHEMA_SERVER_PARAMS } from "../schema/index.js";
6
+ import { findSecrets, looksLikeSecretValue, secretValueKind } from "./secrets.js";
7
+ import { urlCredentialIn } from "./remote.js";
8
+ /** The placeholder pattern, same as `substitute`'s in resolve.ts. */
9
+ const PLACEHOLDER = /\{\{\s*([A-Za-z0-9_.]+)\s*\}\}/g;
10
+ /**
11
+ * A YAML alias can make a server refer back to itself, and a walk would not end. Worded as `fingerprintOf` words it, behind
12
+ * the ingredient's ref — as every message about a server starts.
13
+ */
14
+ const cyclic = (meta) => new Error(`${meta.type}/${meta.name}: ingredient metadata is cyclic (a YAML alias refers back to itself)`);
15
+ /** Whether this Forge's servers are rendered (spec 34 §4.1: schema 4 or above). */
16
+ export function rendersServers(manifest) {
17
+ return manifest.schema >= FORGE_SCHEMA_SERVER_PARAMS;
18
+ }
19
+ /**
20
+ * Render an MCP server by substituting its declared params.
21
+ * Returns the same object when nothing is substituted.
22
+ */
23
+ export function renderServer(meta, params) {
24
+ const declared = meta.params ?? {};
25
+ const missing = [];
26
+ const undeclared = [];
27
+ const substituted = [];
28
+ const missingSeen = new Set();
29
+ const undeclaredSeen = new Set();
30
+ /**
31
+ * Walk a value, substituting string leaves. Returns the same object when nothing changed,
32
+ * a new object (on null prototype) when something did.
33
+ */
34
+ const ancestors = new Set();
35
+ function walk(value, path, under) {
36
+ if (typeof value === "string") {
37
+ let changed = false;
38
+ // One replace per leaf, no second pass on substituted text.
39
+ const result = value.replace(PLACEHOLDER, (match, key) => {
40
+ // Own properties only — never follow a prototype.
41
+ const isDeclared = Object.hasOwn(declared, key);
42
+ const isValued = Object.hasOwn(params, key);
43
+ if (isDeclared && isValued) {
44
+ // Declared and valued → substitute
45
+ changed = true;
46
+ return String(params[key]);
47
+ }
48
+ if (isDeclared && !isValued) {
49
+ // Declared, no value → left, added to missing
50
+ if (!missingSeen.has(key)) {
51
+ missingSeen.add(key);
52
+ missing.push(key);
53
+ }
54
+ return match;
55
+ }
56
+ if (!isDeclared && isValued) {
57
+ // Undeclared, valued → left, added to undeclared
58
+ if (!undeclaredSeen.has(key)) {
59
+ undeclaredSeen.add(key);
60
+ undeclared.push(key);
61
+ }
62
+ return match;
63
+ }
64
+ // Undeclared, no value → left, said nowhere
65
+ return match;
66
+ });
67
+ if (changed) {
68
+ substituted.push({ path, under, value: result });
69
+ return result;
70
+ }
71
+ return value;
72
+ }
73
+ if (value === null || typeof value !== "object")
74
+ return value; // numbers, booleans, null — as they are
75
+ if (ancestors.has(value))
76
+ throw cyclic(meta);
77
+ ancestors.add(value);
78
+ try {
79
+ return Array.isArray(value) ? walkArray(value, path, under) : walkObject(value, path, under);
80
+ }
81
+ finally {
82
+ ancestors.delete(value);
83
+ }
84
+ }
85
+ function walkArray(value, path, under) {
86
+ let changed = false;
87
+ const items = [];
88
+ for (let i = 0; i < value.length; i++) {
89
+ const item = walk(value[i], `${path}[${i}]`, under);
90
+ items.push(item);
91
+ if (item !== value[i])
92
+ changed = true;
93
+ }
94
+ return changed ? items : value;
95
+ }
96
+ function walkObject(value, path, under) {
97
+ let changed = false;
98
+ // A null prototype, so a `__proto__` key stays an entry; own enumerable keys only, in the source's order.
99
+ const result = Object.create(null);
100
+ for (const k of Object.keys(value)) {
101
+ const v = walk(value[k], path ? `${path}.${k}` : k, path ? under : k);
102
+ result[k] = v;
103
+ if (v !== value[k])
104
+ changed = true;
105
+ }
106
+ return changed ? result : value;
107
+ }
108
+ const server = walk(meta.server, "", "");
109
+ return {
110
+ server,
111
+ missing,
112
+ undeclared,
113
+ substituted,
114
+ };
115
+ }
116
+ /** The keys a server's string values cite, once each, in the server's own order, depth first. [] for a non-mcp ingredient. */
117
+ export function serverCitations(meta) {
118
+ if (meta.type !== "mcp")
119
+ return [];
120
+ const declared = meta.params ?? {};
121
+ const result = [];
122
+ const seen = new Set();
123
+ const ancestors = new Set();
124
+ function walk(value) {
125
+ if (typeof value === "string") {
126
+ // Find all placeholders in this string
127
+ let match;
128
+ const re = new RegExp(PLACEHOLDER.source, "g");
129
+ while ((match = re.exec(value)) !== null) {
130
+ const key = match[1];
131
+ if (!seen.has(key)) {
132
+ seen.add(key);
133
+ result.push({ key, declared: Object.hasOwn(declared, key) });
134
+ }
135
+ }
136
+ return;
137
+ }
138
+ if (value === null || typeof value !== "object")
139
+ return;
140
+ if (ancestors.has(value))
141
+ throw cyclic(meta);
142
+ ancestors.add(value);
143
+ // Walk values only, not keys (keys are never scanned for placeholders)
144
+ for (const v of Array.isArray(value) ? value : Object.keys(value).map((k) => value[k]))
145
+ walk(v);
146
+ ancestors.delete(value);
147
+ }
148
+ walk(meta.server);
149
+ return result;
150
+ }
151
+ /**
152
+ * Check the substituted leaves of a rendered server for credentials.
153
+ * Row U (URL credentials) is tried before row T (token patterns).
154
+ * Row E (entropy) applies only to leaves under `env` or `args`.
155
+ */
156
+ export function credentialIn(substituted) {
157
+ const warnings = [];
158
+ for (const leaf of substituted) {
159
+ // Row U: URL with credentials (tried before row T)
160
+ if (urlCredentialIn(leaf.value)) {
161
+ return { error: { path: leaf.path, kind: "url-credentials" }, warnings: [] };
162
+ }
163
+ // Row T: Token of a known format
164
+ const tokenHit = findSecrets(leaf.value)[0];
165
+ if (tokenHit) {
166
+ return { error: { path: leaf.path, kind: tokenHit.kind }, warnings: [] };
167
+ }
168
+ // Row E: High-entropy value, only under env or args
169
+ if ((leaf.under === "env" || leaf.under === "args") && looksLikeSecretValue(leaf.value)) {
170
+ warnings.push({ path: leaf.path, kind: "high-entropy-value" });
171
+ }
172
+ }
173
+ return { error: null, warnings };
174
+ }
175
+ /** Build the error message for a credential found in a rendered server. */
176
+ export function credentialMessage(ref, f) {
177
+ // Row U gets a different verb ("holds a URL with credentials") than row T ("looks like a credential")
178
+ if (f.kind === "url-credentials") {
179
+ return `${ref}: the value rendered into server.${f.path} holds a URL with credentials (${f.kind}) — a generated file is committed, so a secret cannot come from a param; have the server read it from the environment`;
180
+ }
181
+ return `${ref}: the value rendered into server.${f.path} looks like a credential (${f.kind}) — a generated file is committed, so a secret cannot come from a param; have the server read it from the environment`;
182
+ }
183
+ /** Build the warning message for a high-entropy value (row E). */
184
+ export function entropyMessage(ref, f) {
185
+ return `${ref}: the value rendered into server.${f.path} may be a secret (${f.kind}) — a generated file is committed; if it is one, have the server read it from the environment`;
186
+ }
187
+ /** Build the warning message for an undeclared key with a value. */
188
+ export function undeclaredMessage(ref, key) {
189
+ return `${ref}: server cites {{${key}}}, which has a value but is not declared in the ingredient's params — left verbatim`;
190
+ }
191
+ /** Import's scan of a server it read (moved from the importer, messages unchanged). */
192
+ export function serverSecret(serverName, server) {
193
+ for (const [key, value] of Object.entries(server)) {
194
+ const hit = secretInServerField(serverName, key, value, key === "env" || key === "args");
195
+ if (hit)
196
+ return hit;
197
+ }
198
+ return null;
199
+ }
200
+ /** Recursively scan one MCP server field for a secret-like value, building a dotted/bracketed field path. */
201
+ function secretInServerField(server, field, value, useEntropy) {
202
+ if (Array.isArray(value)) {
203
+ for (const [i, v] of value.entries()) {
204
+ const hit = secretInServerField(server, `${field}[${i}]`, v, useEntropy);
205
+ if (hit)
206
+ return hit;
207
+ }
208
+ return null;
209
+ }
210
+ if (value !== null && typeof value === "object") {
211
+ for (const [k, v] of Object.entries(value)) {
212
+ const hit = secretInServerField(server, `${field}.${k}`, v, useEntropy);
213
+ if (hit)
214
+ return hit;
215
+ }
216
+ return null;
217
+ }
218
+ if (typeof value !== "string" && typeof value !== "number")
219
+ return null;
220
+ const kind = useEntropy ? secretValueKind(String(value)) : (findSecrets(String(value))[0]?.kind ?? null);
221
+ return kind ? `secret-like value (${kind}) in .mcp.json → mcpServers.${server}.${field}` : null;
222
+ }
223
+ /** Whether `unify`'s kept-variant warning gets its second line (spec 34 §5.2). */
224
+ export function holdsBaseCitations(base, variant) {
225
+ // Both must be mcp
226
+ if (base.type !== "mcp" || variant.type !== "mcp")
227
+ return false;
228
+ // The base must declare at least one key
229
+ const baseParams = base.params;
230
+ if (!baseParams || Object.keys(baseParams).length === 0)
231
+ return false;
232
+ // The variant must have no params key (undefined, not empty {})
233
+ if (variant.params !== undefined)
234
+ return false;
235
+ // A key the variant's server cites must be one of the base's declared keys
236
+ const variantCitations = serverCitations(variant);
237
+ const baseDeclared = new Set(Object.keys(baseParams));
238
+ for (const cite of variantCitations) {
239
+ if (baseDeclared.has(cite.key))
240
+ return true;
241
+ }
242
+ return false;
243
+ }
244
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/core/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { IngredientSchema, ProfileSchema, WorkspaceConfigSchema } from "../schem
5
5
  import { placeholders, bodyFile } from "./extract.js";
6
6
  import { exists, listFiles, readIngredientText, FORGE_MANIFEST } from "./forge.js";
7
7
  import { manifestWithSections } from "./manifest-edit.js";
8
+ import { rendersServers, serverCitations } from "./mcp-server.js";
8
9
  import { resolve, sectionKey } from "./resolve.js";
9
10
  import { errorText } from "./schema-fault.js";
10
11
  import { canonicalValue } from "./sections.js";
@@ -45,15 +46,19 @@ export function resolvedBy(forge, profile) {
45
46
  const r = resolve(forge, WorkspaceConfigSchema.parse({ forge: ".", profile }));
46
47
  return new Set(r.ingredients.map((i) => i.ref));
47
48
  }
48
- /** Whether any body file an ingredient reads through `ctx.text` cites `{{key}}`. */
49
- async function cites(ing, key) {
49
+ /**
50
+ * Whether any body file an ingredient reads through `ctx.text` cites `{{key}}` — or, in a Forge whose servers are
51
+ * rendered (`schema`, spec 34 §5.2), whether its MCP server cites it as a key the ingredient declares: an undeclared
52
+ * citation is never substituted, so a value under it moves no byte.
53
+ */
54
+ async function cites(ing, key, schema) {
50
55
  for (const rel of await listFiles(ing.dir)) {
51
56
  if (rel === "ingredient.yaml" || !bodyFile(ing.meta, rel, ing.dir))
52
57
  continue;
53
58
  if (placeholders(await readIngredientText(ing, rel)).includes(key))
54
59
  return true;
55
60
  }
56
- return false;
61
+ return rendersServers({ schema }) && serverCitations(ing.meta).some((c) => c.declared && c.key === key);
57
62
  }
58
63
  /**
59
64
  * Spec 11 §6.11: a section value can cite `{{key}}` (sections expand before params), so a scan over
@@ -92,7 +97,7 @@ export async function checkParamWrites(forge, base, variant, profile, extraction
92
97
  if (!decl)
93
98
  declare.push(e);
94
99
  // P14: an undeclared {{key}} already in the base, or any in the variant, would start resolving.
95
- if (!decl && (await cites(base, e.key)))
100
+ if (!decl && (await cites(base, e.key, forge.manifest.schema)))
96
101
  throw new Error(`unify: ${base.ref} already uses {{${e.key}}}`);
97
102
  // …and so would one in any profile's section value for the base's key: the default reaches every profile (spec 11 §6.11).
98
103
  for (const [q, p] of decl ? [] : forge.profiles) {
@@ -100,7 +105,7 @@ export async function checkParamWrites(forge, base, variant, profile, extraction
100
105
  if (where)
101
106
  throw new Error(`unify: profile ${q} ${where} already uses {{${e.key}}}`);
102
107
  }
103
- if (await cites(variant, e.key))
108
+ if (await cites(variant, e.key, forge.manifest.schema))
104
109
  throw new Error(`unify: ${variant.ref} already uses {{${e.key}}}`);
105
110
  // P15, P16: a stronger layer that sets the key would override the base's default. Not for a
106
111
  // reused key: the base already renders {{key}} through every layer, so nothing it sees moves.
@@ -129,7 +134,7 @@ export async function checkParamWrites(forge, base, variant, profile, extraction
129
134
  for (const ing of forge.ingredients.values()) {
130
135
  if (ing.ref === base.ref || ing.ref === variant.ref)
131
136
  continue;
132
- if (await cites(ing, e.key))
137
+ if (await cites(ing, e.key, forge.manifest.schema))
133
138
  throw new Error(`unify: ${ing.ref} also uses {{${e.key}}} under profile ${profile} — its text would change`);
134
139
  }
135
140
  // …and so would the profile's own section values (spec 11 §6.11). Every key a Forge ingredient
@@ -1 +1 @@
1
- {"version":3,"file":"param-writes.js","sourceRoot":"","sources":["../../src/core/param-writes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"param-writes.js","sourceRoot":"","sources":["../../src/core/param-writes.ts"],"names":[],"mappings":"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"}
package/dist/core/proc.js CHANGED
@@ -1,8 +1,11 @@
1
1
  /**
2
- * External-process execution (design D3): capture (stdout of a finished process, execFile)
3
- * and spawnInherited (inherited output, spawn). A program is resolved by onPath before it is run. No shell.
2
+ * External-process execution (design D3): every external program craftar runs — git, dotnet — is run
3
+ * from here; `process.env` is read only as `execProgram`'s default. capture (stdout of a finished process,
4
+ * execFile), execProgram (stdout and stderr, resolved by onPath) and spawnInherited (inherited output, spawn).
5
+ * A program is resolved by onPath before it is run. No shell.
4
6
  */
5
7
  import { execFile, spawn } from "node:child_process";
8
+ import { promisify } from "node:util";
6
9
  import { promises as fs, constants } from "node:fs";
7
10
  import path from "node:path";
8
11
  /** A wedged probe should not hang doctor forever. */
@@ -35,6 +38,32 @@ export function pathEntries(value, win = WIN) {
35
38
  }
36
39
  return entries;
37
40
  }
41
+ /** The PATH value from `env`, reading the key as `onPath` reads it (on win32: whatever case). */
42
+ function pathOf(env) {
43
+ const key = WIN ? Object.keys(env).find((k) => k.toUpperCase() === "PATH") : "PATH";
44
+ return key === undefined ? undefined : env[key];
45
+ }
46
+ /**
47
+ * `env` with its PATH reduced to the entries `onPath` looks in, so that what the program starts in turn (git
48
+ * starts ssh, a credential helper, a hook) is not looked for in the working directory either. When no absolute
49
+ * entry is left, off Windows the child gets NO PATH: an empty one makes the platform look in the working
50
+ * directory, an absent one makes it use its default path. On win32 the key is always set, empty if need be: Node
51
+ * gives a child with no PATH key the parent's own, unfiltered (read in libuv, not measured). No caller reaches
52
+ * that case today — a bare `git` or `dotnet` is not found first. A copy: the caller's object is not changed.
53
+ * Only the PATH key is replaced — on win32 every spelling of it, by one `PATH`; elsewhere `Path` and `path` are
54
+ * other variables.
55
+ */
56
+ function childEnv(env) {
57
+ const result = {};
58
+ for (const [k, v] of Object.entries(env)) {
59
+ if ((WIN ? k.toUpperCase() : k) !== "PATH")
60
+ result[k] = v;
61
+ }
62
+ const entries = pathEntries(pathOf(env) ?? "");
63
+ if (WIN || entries.length > 0)
64
+ result.PATH = entries.join(path.delimiter);
65
+ return result;
66
+ }
38
67
  /** A file; off win32 also executable; any error → false. */
39
68
  async function isProgram(file) {
40
69
  try {
@@ -54,14 +83,15 @@ async function isProgram(file) {
54
83
  * The platform's own lookup is not used: it also searches the child's working directory (on Windows always; elsewhere
55
84
  * for an empty or relative PATH entry), and craftar runs `dotnet` with the workspace root as working directory
56
85
  * (spec 32 §7: a program is found on PATH only). An absolute `file` is returned as given; a relative path is null.
86
+ * The first candidate that is an executable file is taken — unlike the platform, craftar does not go on to the
87
+ * next entry when that file then fails to start.
57
88
  */
58
89
  export async function onPath(file, env) {
59
90
  if (path.isAbsolute(file))
60
91
  return file;
61
92
  if (file === "" || file !== path.basename(file))
62
93
  return null;
63
- const key = WIN ? Object.keys(env).find((k) => k.toUpperCase() === "PATH") : "PATH";
64
- const entries = pathEntries((key === undefined ? undefined : env[key]) ?? "");
94
+ const entries = pathEntries(pathOf(env) ?? "");
65
95
  const names = WIN && !WIN_EXTENSIONS.some((ext) => file.toLowerCase().endsWith(ext)) ? WIN_EXTENSIONS.map((ext) => file + ext) : [file];
66
96
  for (const entry of entries) {
67
97
  for (const name of names) {
@@ -72,24 +102,25 @@ export async function onPath(file, env) {
72
102
  }
73
103
  return null;
74
104
  }
75
- /** Reject with an ENOENT error for a file not on PATH. */
105
+ /** Reject with an ENOENT error for a file not on PATH, matching what Node gives for a program it cannot find. */
76
106
  function notOnPath(file) {
77
- return Object.assign(new Error(`${file} is not on PATH`), { code: "ENOENT" });
107
+ return Object.assign(new Error(`spawn ${file} ENOENT`), { code: "ENOENT", errno: -2, syscall: `spawn ${file}`, path: file });
78
108
  }
79
- /** stdout of a process that exited 0; rejects otherwise (ENOENT when it cannot start). No shell. */
80
- export const capture = async (file, args, env, cwd) => {
109
+ /**
110
+ * stdout and stderr of a program that exited 0, the program resolved by `onPath` over `opts.env` (the process's
111
+ * environment when none is given) — never by the platform's lookup. Rejects as `execFile` does: with `code`,
112
+ * `stdout` and `stderr` on a non-zero exit, and with `code: "ENOENT"` when the program is on no absolute PATH entry.
113
+ */
114
+ export async function execProgram(file, args, opts = {}) {
115
+ const env = opts.env ?? process.env;
81
116
  const program = await onPath(file, env);
82
117
  if (program === null)
83
118
  throw notOnPath(file);
84
- return new Promise((resolve, reject) => {
85
- execFile(program, args, { env, cwd, timeout: PROBE_TIMEOUT_MS }, (error, stdout) => {
86
- if (error)
87
- reject(error);
88
- else
89
- resolve(stdout);
90
- });
91
- });
92
- };
119
+ const { stdout, stderr } = await promisify(execFile)(program, args, { ...opts, env: childEnv(env), encoding: "utf8" });
120
+ return { stdout, stderr };
121
+ }
122
+ /** stdout of a process that exited 0; rejects otherwise (ENOENT when it cannot start). No shell. */
123
+ export const capture = async (file, args, env, cwd) => (await execProgram(file, args, { env, cwd, timeout: PROBE_TIMEOUT_MS })).stdout;
93
124
  /** Output inherited, stdin as asked; resolves with the exit code (null when killed by a signal); rejects when it cannot start. No shell. */
94
125
  export const spawnInherited = async (req) => {
95
126
  const program = await onPath(req.file, req.env);
@@ -98,7 +129,7 @@ export const spawnInherited = async (req) => {
98
129
  return new Promise((resolve, reject) => {
99
130
  const child = spawn(program, req.args, {
100
131
  cwd: req.cwd,
101
- env: req.env,
132
+ env: childEnv(req.env),
102
133
  stdio: [req.stdin, "inherit", "inherit"],
103
134
  });
104
135
  child.on("error", reject);
@@ -1 +1 @@
1
- {"version":3,"file":"proc.js","sourceRoot":"","sources":["../../src/core/proc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proc.js","sourceRoot":"","sources":["../../src/core/proc.ts"],"names":[],"mappings":"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"}