@eir-labs/coltrane 0.4.1 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +33 -4
  2. package/dist/src/access_grant.d.ts +21 -0
  3. package/dist/src/access_grant.js +33 -4
  4. package/dist/src/access_grant.js.map +1 -1
  5. package/dist/src/claude_invoker.d.ts +28 -0
  6. package/dist/src/claude_invoker.js +68 -7
  7. package/dist/src/claude_invoker.js.map +1 -1
  8. package/dist/src/cli.d.ts +44 -0
  9. package/dist/src/cli.js +358 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/cli_entry.d.ts +2 -0
  12. package/dist/src/cli_entry.js +23 -0
  13. package/dist/src/cli_entry.js.map +1 -0
  14. package/dist/src/composition.d.ts +2 -0
  15. package/dist/src/composition.js.map +1 -1
  16. package/dist/src/fs_atomic.d.ts +1 -0
  17. package/dist/src/fs_atomic.js +34 -0
  18. package/dist/src/fs_atomic.js.map +1 -0
  19. package/dist/src/genome_schema.d.ts +5 -1
  20. package/dist/src/genome_schema.js +12 -1
  21. package/dist/src/genome_schema.js.map +1 -1
  22. package/dist/src/genome_writer.d.ts +2 -2
  23. package/dist/src/genome_writer.js +17 -4
  24. package/dist/src/genome_writer.js.map +1 -1
  25. package/dist/src/gig_tracker.d.ts +29 -1
  26. package/dist/src/gig_tracker.js +27 -0
  27. package/dist/src/gig_tracker.js.map +1 -1
  28. package/dist/src/index.d.ts +1 -0
  29. package/dist/src/index.js +1 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/ledger.d.ts +3 -0
  32. package/dist/src/ledger.js.map +1 -1
  33. package/dist/src/loader.d.ts +2 -0
  34. package/dist/src/loader.js +10 -0
  35. package/dist/src/loader.js.map +1 -1
  36. package/dist/src/mcp.js +82 -20
  37. package/dist/src/mcp.js.map +1 -1
  38. package/dist/src/outputs.d.ts +74 -0
  39. package/dist/src/outputs.js +106 -71
  40. package/dist/src/outputs.js.map +1 -1
  41. package/dist/src/registry.d.ts +13 -0
  42. package/dist/src/registry.js +112 -0
  43. package/dist/src/registry.js.map +1 -1
  44. package/dist/src/reuse.d.ts +276 -0
  45. package/dist/src/reuse.js +215 -0
  46. package/dist/src/reuse.js.map +1 -0
  47. package/dist/src/runtime.d.ts +157 -4
  48. package/dist/src/runtime.js +519 -30
  49. package/dist/src/runtime.js.map +1 -1
  50. package/dist/src/server.d.ts +20 -0
  51. package/dist/src/server.js +733 -28
  52. package/dist/src/server.js.map +1 -1
  53. package/dist/src/server_relay.d.ts +2 -0
  54. package/dist/src/server_relay.js +31 -8
  55. package/dist/src/server_relay.js.map +1 -1
  56. package/dist/src/skill_runner.mjs +8 -2
  57. package/dist/src/skill_subprocess.d.ts +47 -5
  58. package/dist/src/skill_subprocess.js +242 -11
  59. package/dist/src/skill_subprocess.js.map +1 -1
  60. package/dist/src/version.d.ts +1 -1
  61. package/dist/src/version.js +11 -7
  62. package/dist/src/version.js.map +1 -1
  63. package/package.json +8 -7
@@ -6,25 +6,126 @@
6
6
  // load-bearing instrument: they are the skill's test suite, the determinism meter
7
7
  // (stable across repeated runs), AND the evolution gate (an improved skill.mjs is
8
8
  // accepted only if every fixture still passes).
9
- import { spawnSync } from "node:child_process";
10
- import { readFileSync, readdirSync, existsSync } from "node:fs";
11
- import { join, extname } from "node:path";
9
+ import { spawn, spawnSync } from "node:child_process";
10
+ import { readFileSync, readdirSync, existsSync, realpathSync } from "node:fs";
11
+ import { join, extname, dirname } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
13
13
  const RUNNER = fileURLToPath(new URL("./skill_runner.mjs", import.meta.url));
14
14
  /**
15
- * Permission tier → Node --permission flags. Tier 0 is read-only with no side effects
16
- * (can load its own code + read inputs, but cannot write, spawn, or reach the network).
17
- * Higher tiers add write, then child_process (needed by skills that shell out, e.g.
18
- * run-vitest-band). The grant IS the enforcement a skill can do only what its tier allows.
15
+ * Permission tier → Node --permission flags, SCOPED TO THE SKILL.
16
+ *
17
+ * This used to be `--allow-fs-read=*` for every tier, with a comment asserting that tier 0
18
+ * "cannot write, spawn, or reach the network". Probed through `executeSkill` on a real
19
+ * machine, a tier-0 skill read `/etc/passwd`, read all 77 of the parent's environment
20
+ * variables, and completed an outbound HTTPS request. `--allow-fs-read=*` is literally
21
+ * "read every file", so the first was never confined at all.
22
+ *
23
+ * The reads are now scoped to the skill's own package directory plus the runner that has to
24
+ * import it. `tests/skill_sandbox_confinement.test.ts` probes the capability rather than the
25
+ * flag string, because asserting on flags is how the previous claim survived being false.
26
+ *
27
+ * WHAT THIS DOES NOT DO: Node's permission model has no network gate. There is no flag here
28
+ * that stops `fetch`, and there was never one — the old guarantee was unimplementable in this
29
+ * runtime, not merely misconfigured. A pre-open-source ancestor of this engine ran skills under
30
+ * Deno (`--allow-read=<dir>` plus a net allowlist), which is the runtime with the primitive
31
+ * this wants. Until that returns, an outbound request from a skill is possible and is stated
32
+ * rather than denied. What has changed is that the credential is no longer in reach: the child
33
+ * gets an explicit minimal environment (see `skillEnv`), so there is nothing worth exfiltrating.
19
34
  */
20
- export function tierFlags(tier) {
21
- const flags = ["--permission", "--allow-fs-read=*"];
35
+ /** Node major running this process. */
36
+ function nodeMajor() {
37
+ return Number(process.versions.node.split(".")[0] ?? 0);
38
+ }
39
+ /**
40
+ * The runtime floor for skill execution, checked where it can be explained.
41
+ *
42
+ * The sandbox spawns with `--permission`, which is Node 22+. On Node 20 the child dies with
43
+ * `node: bad option: --permission` — a message that names the flag rather than the reason, and
44
+ * appears once per skill rather than once per process. `engines` in package.json says `>=22`,
45
+ * but npm treats that as advisory, so a consumer on 20 reaches here anyway.
46
+ *
47
+ * Refusing loudly is the only honest option. There is no degraded mode: running a skill on a
48
+ * runtime with no permission model means running it UNSANDBOXED, and silently doing that would
49
+ * invert the guarantee this module exists to provide.
50
+ */
51
+ export const MIN_NODE_FOR_SANDBOX = 22;
52
+ function assertSandboxCapableRuntime() {
53
+ const major = nodeMajor();
54
+ if (major < MIN_NODE_FOR_SANDBOX) {
55
+ throw new Error(`coltrane needs Node ${MIN_NODE_FOR_SANDBOX}+ to execute skills; this is Node ${process.versions.node}. ` +
56
+ `Skill execution is sandboxed with --permission, which does not exist before Node ${MIN_NODE_FOR_SANDBOX}. ` +
57
+ `Running without it would execute skill code unsandboxed, so it is refused rather than degraded.`);
58
+ }
59
+ }
60
+ export function tierFlags(tier, skillDir) {
61
+ // `RUNNER` lives in this package's dist/; the child must be able to read it to start, and to
62
+ // read the skill it imports. Nothing else.
63
+ // One flag PER PATH: Node no longer accepts a comma-separated list here, and silently
64
+ // warns rather than failing, so a joined list degrades into "no readable paths" and every
65
+ // skill breaks at import time.
66
+ //
67
+ // REAL paths, not the caller's. Node's permission model matches on the resolved path, and on
68
+ // macOS the system temp dir is a symlink (`/var/folders/...` → `/private/var/folders/...`),
69
+ // so granting the symlinked path grants nothing and every skill under it fails at import.
70
+ const real = (pth) => { try {
71
+ return realpathSync(pth);
72
+ }
73
+ catch {
74
+ return pth;
75
+ } };
76
+ const own = [real(dirname(RUNNER)), ...(skillDir ? [real(skillDir)] : [])];
77
+ const flags = ["--permission"];
78
+ // TIER 0 is confined to its own package. The tier is documented as "read-only with no side
79
+ // effects — can load its own code + read inputs", and a tier-0 skill's inputs arrive on
80
+ // STDIN, not from the filesystem. It never had a reason to read elsewhere; `--allow-fs-read=*`
81
+ // simply granted it because that was the easiest flag to write.
82
+ //
83
+ // TIER 1+ reads broadly, because that is what those tiers are FOR — a skill that extracts
84
+ // text from a document at a path it was handed, or runs a test band over a repo, has to
85
+ // reach outside its own directory. Confining them would not be security, it would be
86
+ // removing the capability the tier exists to grant.
22
87
  if (tier >= 1)
23
- flags.push("--allow-fs-write=*");
88
+ flags.push("--allow-fs-read=*", "--allow-fs-write=*");
89
+ else
90
+ flags.push(...own.map((p2) => `--allow-fs-read=${p2}`));
24
91
  if (tier >= 2)
25
92
  flags.push("--allow-child-process");
26
93
  return flags;
27
94
  }
95
+ /**
96
+ * The environment a skill child receives.
97
+ *
98
+ * Deliberately NOT `process.env`. The parent's environment carries the provider credential —
99
+ * `ANTHROPIC_API_KEY` in any real deployment — and a skill that can read it plus reach the
100
+ * network can exfiltrate it in one line. Inheriting the whole environment made that a
101
+ * one-liner; this makes it impossible regardless of the network gap above.
102
+ *
103
+ * PATH is kept because a tier-2 skill that may spawn needs to resolve a binary at all, and
104
+ * HOME/TMPDIR because Node itself consults them during startup.
105
+ */
106
+ export function skillEnv() {
107
+ const keep = ["PATH", "HOME", "TMPDIR", "LANG", "NODE_OPTIONS"];
108
+ const env = {};
109
+ for (const k of keep)
110
+ if (process.env[k] !== undefined)
111
+ env[k] = process.env[k];
112
+ return env;
113
+ }
114
+ /**
115
+ * The skill directory as the permission model sees it.
116
+ *
117
+ * Grants are matched on RESOLVED paths, so the path handed to the child must be the same one
118
+ * that was granted. Granting `/private/var/...` while passing `/var/...` (the macOS temp-dir
119
+ * symlink) grants a path the child never asks for, and every read is denied.
120
+ */
121
+ function realDir(skillDir) {
122
+ try {
123
+ return realpathSync(skillDir);
124
+ }
125
+ catch {
126
+ return skillDir;
127
+ }
128
+ }
28
129
  export function readSkillMeta(skillDir) {
29
130
  return JSON.parse(readFileSync(join(skillDir, "meta.json"), "utf-8"));
30
131
  }
@@ -48,12 +149,15 @@ export function executeSkill(skillDir, input, timeoutMs = 120_000, tierOverride)
48
149
  // SIGTERM-trapping child can't survive the timeout.
49
150
  const timeout = typeof meta.timeout_ms === "number" ? Math.min(timeoutMs, meta.timeout_ms) : timeoutMs;
50
151
  const started = Date.now();
51
- const res = spawnSync("node", [...tierFlags(tier), RUNNER, skillDir], {
152
+ assertSandboxCapableRuntime();
153
+ const dir = realDir(skillDir);
154
+ const res = spawnSync("node", [...tierFlags(tier, dir), RUNNER, dir], {
52
155
  input: JSON.stringify(input),
53
156
  encoding: "utf-8",
54
157
  maxBuffer: 64 * 1024 * 1024,
55
158
  timeout,
56
159
  killSignal: "SIGKILL",
160
+ env: skillEnv(),
57
161
  });
58
162
  const duration_ms = Date.now() - started;
59
163
  if (res.error)
@@ -66,6 +170,133 @@ export function executeSkill(skillDir, input, timeoutMs = 120_000, tierOverride)
66
170
  return { ok: false, error: `unparseable skill output: ${(res.stdout || res.stderr || "").slice(0, 300)}`, duration_ms };
67
171
  }
68
172
  }
173
+ /**
174
+ * #253 — the same execution, without blocking the event loop, and cancellable.
175
+ *
176
+ * `executeSkill` uses `spawnSync`, which blocks the thread until the child exits. The
177
+ * runtime's abort chain (#249/#250) is cooperative — `checkpoint()` reads the signal between
178
+ * phases and batches, and the invoker kills its child when the signal fires — and NONE of
179
+ * that can run while the loop is blocked. The abort event cannot even be *delivered*. So
180
+ * `gig_abort` during a skill chair was a promise the engine could not keep for up to the
181
+ * skill's timeout, which by default is 120 seconds.
182
+ *
183
+ * That is #249's shape again: a control the operator reaches for that reports success and
184
+ * does nothing. The difference is that #249 was a missing kill and this was a missing
185
+ * opportunity to kill.
186
+ *
187
+ * `executeSkill` is kept as-is rather than reimplemented on top of this. Its callers — the
188
+ * fixture runner and the determinism meter — are batch tools with no cancellation story, and
189
+ * making them async would ripple through the skill-authoring surface for no benefit. The
190
+ * RUNTIME is the caller that needed this.
191
+ */
192
+ export async function executeSkillAsync(skillDir, input, timeoutMs = 120_000, opts = {}) {
193
+ const started = Date.now();
194
+ const abortResult = () => ({
195
+ ok: false,
196
+ error: `skill aborted: ${opts.signal ? abortReason(opts.signal) : "cancelled"}`,
197
+ duration_ms: Date.now() - started,
198
+ });
199
+ // Cheapest possible honouring of a cancellation: if it is already aborted, spawn nothing.
200
+ if (opts.signal?.aborted)
201
+ return abortResult();
202
+ const meta = readSkillMeta(skillDir);
203
+ const tier = opts.tierOverride ?? (meta.permission?.tier ?? 0);
204
+ // As in executeSkill: the skill's own declared ceiling caps the caller's timeout, so a
205
+ // runaway code half cannot outlive its budget.
206
+ const timeout = typeof meta.timeout_ms === "number" ? Math.min(timeoutMs, meta.timeout_ms) : timeoutMs;
207
+ return await new Promise((resolve) => {
208
+ assertSandboxCapableRuntime();
209
+ const dir = realDir(skillDir);
210
+ const child = spawn("node", [...tierFlags(tier, dir), RUNNER, dir], {
211
+ stdio: ["pipe", "pipe", "pipe"], env: skillEnv(),
212
+ });
213
+ // Mirror executeSkill's `maxBuffer: 64 MB`. Accumulating without a cap was a regression
214
+ // against the function this replaces: tier 0 grants --allow-fs-read=*, so "print a large
215
+ // file" is one line of skill code, and an unbounded read grows the LONG-LIVED MCP server's
216
+ // heap by the size of whatever it printed. Bounded, killed, and named — a truncated read
217
+ // must not surface as "unparseable skill output", which says nothing about what happened.
218
+ const MAX_OUTPUT_BYTES = 64 * 1024 * 1024;
219
+ let stdout = "";
220
+ let stderr = "";
221
+ let overflowed = false;
222
+ let settled = false;
223
+ const done = (r) => {
224
+ if (settled)
225
+ return;
226
+ settled = true;
227
+ clearTimeout(timer);
228
+ opts.signal?.removeEventListener("abort", onAbort);
229
+ resolve(r);
230
+ };
231
+ // SIGKILL, not the default SIGTERM — a SIGTERM-trapping child must not survive a stop.
232
+ const kill = () => {
233
+ try {
234
+ child.kill("SIGKILL");
235
+ }
236
+ catch {
237
+ /* already gone */
238
+ }
239
+ };
240
+ const onAbort = () => {
241
+ kill();
242
+ done(abortResult());
243
+ };
244
+ const timer = setTimeout(() => {
245
+ kill();
246
+ done({ ok: false, error: `skill timed out after ${timeout}ms`, duration_ms: Date.now() - started });
247
+ }, timeout);
248
+ opts.signal?.addEventListener("abort", onAbort, { once: true });
249
+ const capture = (buf, which) => {
250
+ if (overflowed)
251
+ return;
252
+ const next = (which === "out" ? stdout : stderr) + buf.toString();
253
+ if (next.length > MAX_OUTPUT_BYTES) {
254
+ overflowed = true;
255
+ kill();
256
+ done({
257
+ ok: false,
258
+ error: `skill output exceeded ${MAX_OUTPUT_BYTES} bytes and was killed`,
259
+ duration_ms: Date.now() - started,
260
+ });
261
+ return;
262
+ }
263
+ if (which === "out")
264
+ stdout = next;
265
+ else
266
+ stderr = next;
267
+ };
268
+ child.stdout.on("data", (c) => capture(c, "out"));
269
+ child.stderr.on("data", (c) => capture(c, "err"));
270
+ child.on("error", (e) => done({ ok: false, error: String(e.message), duration_ms: Date.now() - started }));
271
+ child.on("close", () => {
272
+ const duration_ms = Date.now() - started;
273
+ try {
274
+ const parsed = JSON.parse(stdout);
275
+ done({ ...parsed, duration_ms });
276
+ }
277
+ catch {
278
+ done({
279
+ ok: false,
280
+ error: `unparseable skill output: ${(stdout || stderr || "").slice(0, 300)}`,
281
+ duration_ms,
282
+ });
283
+ }
284
+ });
285
+ child.stdin.on("error", () => {
286
+ /* the child may exit before we finish writing; `close` reports the real outcome */
287
+ });
288
+ child.stdin.end(JSON.stringify(input));
289
+ });
290
+ }
291
+ /** The human-readable cause behind an abort, whatever shape the aborter used. */
292
+ function abortReason(signal) {
293
+ const r = signal.reason;
294
+ if (r instanceof Error)
295
+ return r.message;
296
+ if (typeof r === "string" && r)
297
+ return r;
298
+ return "cancelled";
299
+ }
69
300
  function getPath(obj, path) {
70
301
  return path.split(".").reduce((acc, k) => (acc != null ? acc[k] : undefined), obj);
71
302
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skill_subprocess.js","sourceRoot":"","sources":["../../src/skill_subprocess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill_subprocess.js","sourceRoot":"","sources":["../../src/skill_subprocess.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** Engine semver. Keep in lockstep with package.json `version` (enforced by test). */
2
- export declare const COLTRANE_VERSION = "0.4.1";
2
+ export declare const COLTRANE_VERSION = "0.5.1";
3
3
  /**
4
4
  * The commit this engine checkout is sitting on, or null when it can't be determined.
5
5
  *
@@ -1,11 +1,15 @@
1
1
  // The engine's version identity — the thing a consumer can assert against.
2
2
  //
3
- // Why this exists: coltrane is not published to npm, so downstreams vendor it as a
4
- // git clone. Without an exported version there is no way for a consumer to answer
5
- // "is the engine I just loaded the engine I was built against?" the only available
6
- // check was duck-typing two function names, which passes for *every* revision of the
7
- // engine and therefore proves nothing. A version mismatch then surfaces as a contract
8
- // failure deep inside a running gig, minutes and dollars in, instead of at boot.
3
+ // Why this exists: a consumer needs to answer "is the engine I just loaded the engine I
4
+ // was built against?" The only available check was duck-typing two function names, which
5
+ // passes for *every* revision of the engine and therefore proves nothing. A version
6
+ // mismatch then surfaces as a contract failure deep inside a running gig, minutes and
7
+ // dollars in, instead of at boot.
8
+ //
9
+ // This predates publication — it was written when downstreams vendored the engine as a
10
+ // git clone and the range in their package.json could not be the answer. It still is not:
11
+ // a semver range says what npm was asked to install, not what got loaded, and the vendored
12
+ // path remains supported.
9
13
  //
10
14
  // COLTRANE_VERSION is the single source of truth in code and MUST equal package.json's
11
15
  // `version` — `tests/version_identity.test.ts` fails the build if they drift.
@@ -13,7 +17,7 @@ import { existsSync, readFileSync, statSync } from "node:fs";
13
17
  import { dirname, join, resolve } from "node:path";
14
18
  import { fileURLToPath } from "node:url";
15
19
  /** Engine semver. Keep in lockstep with package.json `version` (enforced by test). */
16
- export const COLTRANE_VERSION = "0.4.1";
20
+ export const COLTRANE_VERSION = "0.5.1";
17
21
  /**
18
22
  * The commit this engine checkout is sitting on, or null when it can't be determined.
19
23
  *
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@eir-labs/coltrane",
3
- "version": "0.4.1",
4
- "description": "A methodology engine a typed substrate for defining agents, composing multi-phase standards, dispatching gigs, and sealing every output to a content-addressed ledger. Ships as an MCP server.",
3
+ "version": "0.5.1",
4
+ "description": "A methodology engine \u2014 a typed substrate for defining agents, composing multi-phase standards, dispatching gigs, and sealing every output to a content-addressed ledger. Ships as an MCP server.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
7
7
  "author": "Eir",
8
- "homepage": "https://github.com/eir-dev/coltrane#readme",
8
+ "homepage": "https://github.com/eir-labs/coltrane#readme",
9
9
  "repository": {
10
10
  "type": "git",
11
- "url": "git+https://github.com/eir-dev/coltrane.git"
11
+ "url": "git+https://github.com/eir-labs/coltrane.git"
12
12
  },
13
13
  "bugs": {
14
- "url": "https://github.com/eir-dev/coltrane/issues"
14
+ "url": "https://github.com/eir-labs/coltrane/issues"
15
15
  },
16
16
  "keywords": [
17
17
  "mcp",
@@ -22,9 +22,10 @@
22
22
  "workflow-engine"
23
23
  ],
24
24
  "engines": {
25
- "node": ">=20"
25
+ "node": ">=22"
26
26
  },
27
27
  "bin": {
28
+ "coltrane": "./dist/src/cli_entry.js",
28
29
  "coltrane-server": "./dist/src/server_entry.js"
29
30
  },
30
31
  "main": "./dist/src/index.js",
@@ -51,7 +52,7 @@
51
52
  "access": "public"
52
53
  },
53
54
  "scripts": {
54
- "build": "tsc && cp src/skill_runner.mjs dist/src/ && chmod +x dist/src/server_entry.js dist/src/server_relay.js",
55
+ "build": "tsc && cp src/skill_runner.mjs dist/src/ && chmod +x dist/src/server_entry.js dist/src/server_relay.js dist/src/cli_entry.js",
55
56
  "dev": "tsc --watch",
56
57
  "prepare": "npm run build",
57
58
  "test": "vitest run",