runspec-node 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/finder.d.ts CHANGED
@@ -1,4 +1,36 @@
1
+ /**
2
+ * Locate the governing `runspec.toml`.
3
+ *
4
+ * Resolution order mirrors the Python `parse()`:
5
+ * 1. `RUNSPEC_CONFIG` env var — explicit override.
6
+ * 2. an explicit `start` directory, when one is passed.
7
+ * 3. **caller-relative** — walk up from the entry script's directory
8
+ * (`require.main` / `process.argv[1]`). This is what lets an installed
9
+ * runnable find its own config from *any* working directory — e.g. when a
10
+ * controller launches `bin/greet` over SSH with `cwd` = the login home,
11
+ * not the package. Mirrors Python resolving relative to the installed
12
+ * package, "what makes installed entry points work from any working
13
+ * directory".
14
+ * 4. **cwd-relative** — walk up from `process.cwd()` (the historical
15
+ * behaviour, kept as the final fallback).
16
+ *
17
+ * A `runspec.toml` found *inside* a `node_modules` path is ignored: those
18
+ * belong to installed dependencies (including runspec-node's own bundled CLI
19
+ * spec), never the project being discovered.
20
+ */
1
21
  export declare function findConfig(start?: string): {
2
22
  configPath: string;
3
23
  };
24
+ /**
25
+ * Ordered, de-duplicated list of directories to walk up from, mirroring the
26
+ * resolution order documented on `findConfig`. Pure (no I/O) so the priority
27
+ * logic is unit-testable without a filesystem fixture.
28
+ */
29
+ export declare function searchStarts(start: string | undefined, entryDir: string | undefined, cwd: string): string[];
30
+ /**
31
+ * Walk up from `start` looking for a `runspec.toml`, skipping any found under a
32
+ * `node_modules` path (a dependency's spec, not the project's). Returns the
33
+ * path or null. Exported for testing.
34
+ */
35
+ export declare function walkUp(start: string): string | null;
4
36
  //# sourceMappingURL=finder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../src/finder.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAiBjE"}
1
+ {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../src/finder.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAoBjE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM3G;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnD"}
package/dist/finder.js CHANGED
@@ -34,20 +34,81 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.findConfig = findConfig;
37
+ exports.searchStarts = searchStarts;
38
+ exports.walkUp = walkUp;
37
39
  const fs = __importStar(require("fs"));
38
40
  const path = __importStar(require("path"));
41
+ /**
42
+ * Locate the governing `runspec.toml`.
43
+ *
44
+ * Resolution order mirrors the Python `parse()`:
45
+ * 1. `RUNSPEC_CONFIG` env var — explicit override.
46
+ * 2. an explicit `start` directory, when one is passed.
47
+ * 3. **caller-relative** — walk up from the entry script's directory
48
+ * (`require.main` / `process.argv[1]`). This is what lets an installed
49
+ * runnable find its own config from *any* working directory — e.g. when a
50
+ * controller launches `bin/greet` over SSH with `cwd` = the login home,
51
+ * not the package. Mirrors Python resolving relative to the installed
52
+ * package, "what makes installed entry points work from any working
53
+ * directory".
54
+ * 4. **cwd-relative** — walk up from `process.cwd()` (the historical
55
+ * behaviour, kept as the final fallback).
56
+ *
57
+ * A `runspec.toml` found *inside* a `node_modules` path is ignored: those
58
+ * belong to installed dependencies (including runspec-node's own bundled CLI
59
+ * spec), never the project being discovered.
60
+ */
39
61
  function findConfig(start) {
40
- let dir = path.resolve(start ?? process.cwd());
62
+ const env = process.env.RUNSPEC_CONFIG;
63
+ if (env && fs.existsSync(env))
64
+ return { configPath: path.resolve(env) };
65
+ // process.argv[1] over require.main.filename: the latter realpath-resolves
66
+ // symlinks, which under `npm link` / workspaces / a local install jumps the
67
+ // entry *out* of the project (to the linked source) and breaks the walk.
68
+ // process.argv[1] preserves the path the binary was actually invoked at —
69
+ // inside the project's node_modules — which is what we want to walk up from.
70
+ const entry = process.argv[1] ?? require.main?.filename;
71
+ const entryDir = entry ? path.dirname(entry) : undefined;
72
+ for (const dir of searchStarts(start, entryDir, process.cwd())) {
73
+ const found = walkUp(dir);
74
+ if (found)
75
+ return { configPath: found };
76
+ }
77
+ throw new Error("No runspec configuration found.\nExpected runspec.toml inside your package directory.\n\nRun 'runspec init' to create one.");
78
+ }
79
+ /**
80
+ * Ordered, de-duplicated list of directories to walk up from, mirroring the
81
+ * resolution order documented on `findConfig`. Pure (no I/O) so the priority
82
+ * logic is unit-testable without a filesystem fixture.
83
+ */
84
+ function searchStarts(start, entryDir, cwd) {
85
+ const out = [];
86
+ if (start)
87
+ out.push(path.resolve(start));
88
+ if (entryDir)
89
+ out.push(path.resolve(entryDir));
90
+ out.push(path.resolve(cwd));
91
+ return [...new Set(out)];
92
+ }
93
+ /**
94
+ * Walk up from `start` looking for a `runspec.toml`, skipping any found under a
95
+ * `node_modules` path (a dependency's spec, not the project's). Returns the
96
+ * path or null. Exported for testing.
97
+ */
98
+ function walkUp(start) {
99
+ let dir = path.resolve(start);
41
100
  while (true) {
42
101
  const runspecToml = path.join(dir, 'runspec.toml');
43
- if (fs.existsSync(runspecToml)) {
44
- return { configPath: runspecToml };
102
+ if (fs.existsSync(runspecToml) && !isInNodeModules(dir)) {
103
+ return runspecToml;
45
104
  }
46
105
  const parent = path.dirname(dir);
47
106
  if (parent === dir)
48
- break;
107
+ return null;
49
108
  dir = parent;
50
109
  }
51
- throw new Error("No runspec configuration found.\nExpected runspec.toml inside your package directory.\n\nRun 'runspec init' to create one.");
110
+ }
111
+ function isInNodeModules(dir) {
112
+ return dir.split(path.sep).includes('node_modules');
52
113
  }
53
114
  //# sourceMappingURL=finder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"finder.js","sourceRoot":"","sources":["../src/finder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,gCAiBC;AApBD,uCAAyB;AACzB,2CAA6B;AAE7B,SAAgB,UAAU,CAAC,KAAc;IACvC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE/C,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4HAA4H,CAC7H,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"finder.js","sourceRoot":"","sources":["../src/finder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,gCAoBC;AAOD,oCAMC;AAOD,wBAWC;AA1ED,uCAAyB;AACzB,2CAA6B;AAE7B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,UAAU,CAAC,KAAc;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACvC,IAAI,GAAG,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAExE,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK;YAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4HAA4H,CAC7H,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,KAAyB,EAAE,QAA4B,EAAE,GAAW;IAC/F,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,IAAI,QAAQ;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAAC,KAAa;IAClC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACtD,CAAC"}
package/dist/loader.js CHANGED
@@ -71,10 +71,15 @@ function normaliseLogging(raw) {
71
71
  // or `RUNSPEC_NO_SUMMARY=1`.
72
72
  if (raw === undefined)
73
73
  return undefined;
74
+ // `store` selects the file layout: 'single' = one rotating {runnable}.log;
75
+ // 'per-run' = one file per invocation. Unknown values fall back to 'single'
76
+ // — the schema check flags typos; runtime stays lenient.
77
+ const store = String(raw['store'] ?? 'single');
74
78
  return {
75
79
  rotate: String(raw['rotate'] ?? 'midnight'),
76
80
  keep: Number(raw['keep'] ?? 7),
77
81
  summary: raw['summary'] !== undefined ? Boolean(raw['summary']) : true,
82
+ store: store === 'per-run' ? 'per-run' : 'single',
78
83
  };
79
84
  }
80
85
  function normaliseRunnables(raw) {
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logging_setup.d.ts","sourceRoot":"","sources":["../src/logging_setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQ9C,QAAA,MAAM,kBAAkB,uBAAuB,CAAC;AAIhD,QAAA,MAAM,gBAAgB,sBAAsB,CAAC;AAc7C,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAwED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAEzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC1D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IACzD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC5D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAE7D,OAAO,CAAC,KAAK;CASd;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C;AAgJD,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAU9E;AAwID;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAiCrC;AAqBD,+EAA+E;AAC/E,iBAAS,kBAAkB,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAKrD;AAED;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAUlE;AAsBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAqBhD;AAkCD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAgDpE;AAID,wBAAgB,aAAa,IAAI,IAAI,CAQpC;AAED,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"logging_setup.d.ts","sourceRoot":"","sources":["../src/logging_setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAa9C,QAAA,MAAM,kBAAkB,uBAAuB,CAAC;AAIhD,QAAA,MAAM,gBAAgB,sBAAsB,CAAC;AAc7C,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAwED,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAEzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC1D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IACzD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC5D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IACzD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAE7D,OAAO,CAAC,KAAK;CASd;AAeD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C;AAoJD,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAU9E;AAkKD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAiCrC;AAqBD,+EAA+E;AAC/E,iBAAS,kBAAkB,CAAC,GAAG,EAAE,KAAK,GAAG,aAAa,CAKrD;AAED;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAUlE;AAsBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAqBhD;AAkCD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CA2DpE;AAID,wBAAgB,aAAa,IAAI,IAAI,CASpC;AAED,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -50,10 +50,15 @@ exports.formatCompactTrace = formatCompactTrace;
50
50
  const fs = __importStar(require("fs"));
51
51
  const path = __importStar(require("path"));
52
52
  const os = __importStar(require("os"));
53
+ const crypto_1 = require("crypto");
53
54
  // ── internal state ────────────────────────────────────────────────────────────
54
55
  let _configured = false;
55
56
  const _loggers = new Map();
56
57
  const _handlers = [];
58
+ // UUID4 assigned at configureLogging() time, injected into every file record as
59
+ // extra.run_id (SPEC §run_id). Separates interleaved runs in a shared log, and
60
+ // matches the run_id token in a per-run filename.
61
+ let _runId = null;
57
62
  const RUN_SUMMARY_LOGGER = 'runspec.runsummary';
58
63
  exports.RUN_SUMMARY_LOGGER = RUN_SUMMARY_LOGGER;
59
64
  // Uncaught exceptions are emitted on this dedicated logger so the file handler
@@ -154,8 +159,11 @@ function formatJson(record) {
154
159
  obj['exc'] = record.error.stack ?? record.error.message;
155
160
  if (record.excStructured)
156
161
  obj['exc_structured'] = record.excStructured;
157
- if (record.extra)
158
- obj['extra'] = record.extra;
162
+ // run_id rides in extra on every file record (console output omits it — that
163
+ // handler uses formatConsole). Mirrors Python's _RunIdFilter.
164
+ if (record.extra || _runId !== null) {
165
+ obj['extra'] = { ...(record.extra ?? {}), ...(_runId !== null ? { run_id: _runId } : {}) };
166
+ }
159
167
  return JSON.stringify(obj);
160
168
  }
161
169
  function formatConsole(record, showTracebacks) {
@@ -349,6 +357,32 @@ class TimedRotatingFileHandler {
349
357
  doRotate(this.logPath, this.keep);
350
358
  }
351
359
  }
360
+ /**
361
+ * Plain append-only handler for `store = "per-run"` — one file per invocation,
362
+ * so there is nothing to rotate (and no rotation race across writers). The file
363
+ * is created lazily on first append, so a run that logs nothing leaves no empty
364
+ * file behind.
365
+ */
366
+ class PlainFileHandler {
367
+ logPath;
368
+ level;
369
+ constructor(logPath, level) {
370
+ this.logPath = logPath;
371
+ this.level = level;
372
+ }
373
+ emit(record) {
374
+ try {
375
+ fs.appendFileSync(this.logPath, formatJson(record) + '\n', 'utf-8');
376
+ }
377
+ catch {
378
+ // never disrupt
379
+ }
380
+ }
381
+ }
382
+ /** Compact UTC stamp for per-run filenames: `YYYYMMDDThhmmssZ`. */
383
+ function _perRunStamp(d) {
384
+ return d.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
385
+ }
352
386
  // ── size/rotate parser ────────────────────────────────────────────────────────
353
387
  const SIZE_RE = /^(\d+(?:\.\d+)?)\s*(KB|MB|GB)$/i;
354
388
  const SIZE_MULT = { KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };
@@ -635,11 +669,22 @@ function configureLogging(opts) {
635
669
  const debug = opts.debug ?? false;
636
670
  _debug = debug;
637
671
  const floor = debug ? LEVEL_NUM['debug'] : LEVEL_NUM['info'];
672
+ // Unique ID for this invocation — injected into every file record (formatJson)
673
+ // and reused as the per-run filename token so file run_id == record run_id.
674
+ _runId = (0, crypto_1.randomUUID)();
638
675
  _handlers.push(new StdoutHandler(floor, debug));
639
676
  _handlers.push(new StderrHandler(debug));
640
677
  const logDir = resolveLogDir(opts.configPath);
641
- const logPath = path.join(logDir, `${opts.runnableName}.log`);
642
- _handlers.push(makeFileHandler(logPath, opts.logCfg.rotate, opts.logCfg.keep, floor));
678
+ if (opts.logCfg.store === 'per-run') {
679
+ // One file per invocation — multi-writer safe (no shared file, so no
680
+ // rotation race). rotate/keep are inert; retention is `runspec logs`.
681
+ const logPath = path.join(logDir, `${opts.runnableName}.${_perRunStamp(new Date())}.${_runId}.log`);
682
+ _handlers.push(new PlainFileHandler(logPath, floor));
683
+ }
684
+ else {
685
+ const logPath = path.join(logDir, `${opts.runnableName}.log`);
686
+ _handlers.push(makeFileHandler(logPath, opts.logCfg.rotate, opts.logCfg.keep, floor));
687
+ }
643
688
  // Always attach the counter — cost is one dict increment per log call.
644
689
  // Only the exit hook + state population are conditional on summary mode.
645
690
  const counter = new RunSummaryCounter();
@@ -674,6 +719,7 @@ function configureLogging(opts) {
674
719
  function _resetForTest() {
675
720
  _configured = false;
676
721
  _debug = false;
722
+ _runId = null;
677
723
  _loggers.clear();
678
724
  _handlers.length = 0;
679
725
  _summaryState = null;
@@ -1 +1 @@
1
- {"version":3,"file":"logging_setup.js","sourceRoot":"","sources":["../src/logging_setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logging_setup.js","sourceRoot":"","sources":["../src/logging_setup.ts"],"names":[],"mappings":"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"}
package/dist/models.d.ts CHANGED
@@ -2,6 +2,9 @@ export interface LoggingConfig {
2
2
  rotate: string;
3
3
  keep: number;
4
4
  summary: boolean;
5
+ /** Log file layout: 'single' (default, one rotating {runnable}.log) or
6
+ * 'per-run' (one {runnable}.{utc-ts}.{run_id}.log per invocation). */
7
+ store?: string;
5
8
  }
6
9
  export interface RawConfig {
7
10
  autonomyDefault: string;
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runspec-node",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "Node/TypeScript language pack for runspec",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -13,7 +13,13 @@
13
13
  "typecheck": "tsc --noEmit",
14
14
  "clean": "rm -rf dist"
15
15
  },
16
- "keywords": ["runspec", "cli", "arguments", "agents", "mcp"],
16
+ "keywords": [
17
+ "runspec",
18
+ "cli",
19
+ "arguments",
20
+ "agents",
21
+ "mcp"
22
+ ],
17
23
  "author": "Jason Finestone",
18
24
  "license": "MIT",
19
25
  "repository": {
package/src/finder.ts CHANGED
@@ -1,21 +1,79 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
3
 
4
+ /**
5
+ * Locate the governing `runspec.toml`.
6
+ *
7
+ * Resolution order mirrors the Python `parse()`:
8
+ * 1. `RUNSPEC_CONFIG` env var — explicit override.
9
+ * 2. an explicit `start` directory, when one is passed.
10
+ * 3. **caller-relative** — walk up from the entry script's directory
11
+ * (`require.main` / `process.argv[1]`). This is what lets an installed
12
+ * runnable find its own config from *any* working directory — e.g. when a
13
+ * controller launches `bin/greet` over SSH with `cwd` = the login home,
14
+ * not the package. Mirrors Python resolving relative to the installed
15
+ * package, "what makes installed entry points work from any working
16
+ * directory".
17
+ * 4. **cwd-relative** — walk up from `process.cwd()` (the historical
18
+ * behaviour, kept as the final fallback).
19
+ *
20
+ * A `runspec.toml` found *inside* a `node_modules` path is ignored: those
21
+ * belong to installed dependencies (including runspec-node's own bundled CLI
22
+ * spec), never the project being discovered.
23
+ */
4
24
  export function findConfig(start?: string): { configPath: string } {
5
- let dir = path.resolve(start ?? process.cwd());
25
+ const env = process.env.RUNSPEC_CONFIG;
26
+ if (env && fs.existsSync(env)) return { configPath: path.resolve(env) };
6
27
 
28
+ // process.argv[1] over require.main.filename: the latter realpath-resolves
29
+ // symlinks, which under `npm link` / workspaces / a local install jumps the
30
+ // entry *out* of the project (to the linked source) and breaks the walk.
31
+ // process.argv[1] preserves the path the binary was actually invoked at —
32
+ // inside the project's node_modules — which is what we want to walk up from.
33
+ const entry = process.argv[1] ?? require.main?.filename;
34
+ const entryDir = entry ? path.dirname(entry) : undefined;
35
+
36
+ for (const dir of searchStarts(start, entryDir, process.cwd())) {
37
+ const found = walkUp(dir);
38
+ if (found) return { configPath: found };
39
+ }
40
+
41
+ throw new Error(
42
+ "No runspec configuration found.\nExpected runspec.toml inside your package directory.\n\nRun 'runspec init' to create one.",
43
+ );
44
+ }
45
+
46
+ /**
47
+ * Ordered, de-duplicated list of directories to walk up from, mirroring the
48
+ * resolution order documented on `findConfig`. Pure (no I/O) so the priority
49
+ * logic is unit-testable without a filesystem fixture.
50
+ */
51
+ export function searchStarts(start: string | undefined, entryDir: string | undefined, cwd: string): string[] {
52
+ const out: string[] = [];
53
+ if (start) out.push(path.resolve(start));
54
+ if (entryDir) out.push(path.resolve(entryDir));
55
+ out.push(path.resolve(cwd));
56
+ return [...new Set(out)];
57
+ }
58
+
59
+ /**
60
+ * Walk up from `start` looking for a `runspec.toml`, skipping any found under a
61
+ * `node_modules` path (a dependency's spec, not the project's). Returns the
62
+ * path or null. Exported for testing.
63
+ */
64
+ export function walkUp(start: string): string | null {
65
+ let dir = path.resolve(start);
7
66
  while (true) {
8
67
  const runspecToml = path.join(dir, 'runspec.toml');
9
- if (fs.existsSync(runspecToml)) {
10
- return { configPath: runspecToml };
68
+ if (fs.existsSync(runspecToml) && !isInNodeModules(dir)) {
69
+ return runspecToml;
11
70
  }
12
-
13
71
  const parent = path.dirname(dir);
14
- if (parent === dir) break;
72
+ if (parent === dir) return null;
15
73
  dir = parent;
16
74
  }
75
+ }
17
76
 
18
- throw new Error(
19
- "No runspec configuration found.\nExpected runspec.toml inside your package directory.\n\nRun 'runspec init' to create one.",
20
- );
77
+ function isInNodeModules(dir: string): boolean {
78
+ return dir.split(path.sep).includes('node_modules');
21
79
  }
package/src/loader.ts CHANGED
@@ -40,10 +40,15 @@ function normaliseLogging(raw: Record<string, unknown> | undefined): LoggingConf
40
40
  // log-event counts by level. Suppress per-invocation with `--no-summary`
41
41
  // or `RUNSPEC_NO_SUMMARY=1`.
42
42
  if (raw === undefined) return undefined;
43
+ // `store` selects the file layout: 'single' = one rotating {runnable}.log;
44
+ // 'per-run' = one file per invocation. Unknown values fall back to 'single'
45
+ // — the schema check flags typos; runtime stays lenient.
46
+ const store = String(raw['store'] ?? 'single');
43
47
  return {
44
48
  rotate: String(raw['rotate'] ?? 'midnight'),
45
49
  keep: Number(raw['keep'] ?? 7),
46
50
  summary: raw['summary'] !== undefined ? Boolean(raw['summary']) : true,
51
+ store: store === 'per-run' ? 'per-run' : 'single',
47
52
  };
48
53
  }
49
54
 
@@ -7,6 +7,7 @@
7
7
  import * as fs from 'fs';
8
8
  import * as path from 'path';
9
9
  import * as os from 'os';
10
+ import { randomUUID } from 'crypto';
10
11
  import type { LoggingConfig } from './models';
11
12
 
12
13
  // ── internal state ────────────────────────────────────────────────────────────
@@ -15,6 +16,11 @@ let _configured = false;
15
16
  const _loggers = new Map<string, Logger>();
16
17
  const _handlers: Handler[] = [];
17
18
 
19
+ // UUID4 assigned at configureLogging() time, injected into every file record as
20
+ // extra.run_id (SPEC §run_id). Separates interleaved runs in a shared log, and
21
+ // matches the run_id token in a per-run filename.
22
+ let _runId: string | null = null;
23
+
18
24
  const RUN_SUMMARY_LOGGER = 'runspec.runsummary';
19
25
  // Uncaught exceptions are emitted on this dedicated logger so the file handler
20
26
  // records them while the console handlers drop them by name — console display is
@@ -171,7 +177,11 @@ function formatJson(record: LogRecord): string {
171
177
  };
172
178
  if (record.error) obj['exc'] = record.error.stack ?? record.error.message;
173
179
  if (record.excStructured) obj['exc_structured'] = record.excStructured;
174
- if (record.extra) obj['extra'] = record.extra;
180
+ // run_id rides in extra on every file record (console output omits it — that
181
+ // handler uses formatConsole). Mirrors Python's _RunIdFilter.
182
+ if (record.extra || _runId !== null) {
183
+ obj['extra'] = { ...(record.extra ?? {}), ...(_runId !== null ? { run_id: _runId } : {}) };
184
+ }
175
185
  return JSON.stringify(obj);
176
186
  }
177
187
 
@@ -343,6 +353,32 @@ class TimedRotatingFileHandler implements Handler {
343
353
  }
344
354
  }
345
355
 
356
+ /**
357
+ * Plain append-only handler for `store = "per-run"` — one file per invocation,
358
+ * so there is nothing to rotate (and no rotation race across writers). The file
359
+ * is created lazily on first append, so a run that logs nothing leaves no empty
360
+ * file behind.
361
+ */
362
+ class PlainFileHandler implements Handler {
363
+ constructor(
364
+ private readonly logPath: string,
365
+ readonly level: number,
366
+ ) {}
367
+
368
+ emit(record: LogRecord): void {
369
+ try {
370
+ fs.appendFileSync(this.logPath, formatJson(record) + '\n', 'utf-8');
371
+ } catch {
372
+ // never disrupt
373
+ }
374
+ }
375
+ }
376
+
377
+ /** Compact UTC stamp for per-run filenames: `YYYYMMDDThhmmssZ`. */
378
+ function _perRunStamp(d: Date): string {
379
+ return d.toISOString().replace(/[-:]/g, '').replace(/\.\d{3}Z$/, 'Z');
380
+ }
381
+
346
382
  // ── size/rotate parser ────────────────────────────────────────────────────────
347
383
 
348
384
  const SIZE_RE = /^(\d+(?:\.\d+)?)\s*(KB|MB|GB)$/i;
@@ -658,12 +694,23 @@ export function configureLogging(opts: ConfigureLoggingOptions): void {
658
694
  _debug = debug;
659
695
  const floor = debug ? LEVEL_NUM['debug'] : LEVEL_NUM['info'];
660
696
 
697
+ // Unique ID for this invocation — injected into every file record (formatJson)
698
+ // and reused as the per-run filename token so file run_id == record run_id.
699
+ _runId = randomUUID();
700
+
661
701
  _handlers.push(new StdoutHandler(floor, debug));
662
702
  _handlers.push(new StderrHandler(debug));
663
703
 
664
704
  const logDir = resolveLogDir(opts.configPath);
665
- const logPath = path.join(logDir, `${opts.runnableName}.log`);
666
- _handlers.push(makeFileHandler(logPath, opts.logCfg.rotate, opts.logCfg.keep, floor));
705
+ if (opts.logCfg.store === 'per-run') {
706
+ // One file per invocation — multi-writer safe (no shared file, so no
707
+ // rotation race). rotate/keep are inert; retention is `runspec logs`.
708
+ const logPath = path.join(logDir, `${opts.runnableName}.${_perRunStamp(new Date())}.${_runId}.log`);
709
+ _handlers.push(new PlainFileHandler(logPath, floor));
710
+ } else {
711
+ const logPath = path.join(logDir, `${opts.runnableName}.log`);
712
+ _handlers.push(makeFileHandler(logPath, opts.logCfg.rotate, opts.logCfg.keep, floor));
713
+ }
667
714
 
668
715
  // Always attach the counter — cost is one dict increment per log call.
669
716
  // Only the exit hook + state population are conditional on summary mode.
@@ -706,6 +753,7 @@ export function configureLogging(opts: ConfigureLoggingOptions): void {
706
753
  export function _resetForTest(): void {
707
754
  _configured = false;
708
755
  _debug = false;
756
+ _runId = null;
709
757
  _loggers.clear();
710
758
  _handlers.length = 0;
711
759
  _summaryState = null;
package/src/models.ts CHANGED
@@ -2,6 +2,9 @@ export interface LoggingConfig {
2
2
  rotate: string;
3
3
  keep: number;
4
4
  summary: boolean;
5
+ /** Log file layout: 'single' (default, one rotating {runnable}.log) or
6
+ * 'per-run' (one {runnable}.{utc-ts}.{run_id}.log per invocation). */
7
+ store?: string;
5
8
  }
6
9
 
7
10
  export interface RawConfig {
@@ -0,0 +1,94 @@
1
+ import * as fs from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { findConfig, searchStarts, walkUp } from '../src/finder';
5
+
6
+ function tmpdir(): string {
7
+ return fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), 'runspec-finder-'));
8
+ }
9
+
10
+ function writeToml(dir: string): string {
11
+ fs.mkdirSync(dir, { recursive: true });
12
+ const p = path.join(dir, 'runspec.toml');
13
+ fs.writeFileSync(p, '[greet]\ndescription = "x"\n');
14
+ return p;
15
+ }
16
+
17
+ describe('searchStarts — resolution priority', () => {
18
+ it('orders explicit start, then entry dir, then cwd', () => {
19
+ expect(searchStarts('/a', '/b', '/c')).toEqual([path.resolve('/a'), path.resolve('/b'), path.resolve('/c')]);
20
+ });
21
+
22
+ it('omits a missing explicit start / entry dir', () => {
23
+ expect(searchStarts(undefined, undefined, '/c')).toEqual([path.resolve('/c')]);
24
+ expect(searchStarts(undefined, '/b', '/c')).toEqual([path.resolve('/b'), path.resolve('/c')]);
25
+ });
26
+
27
+ it('de-duplicates while preserving order (cwd === entry dir)', () => {
28
+ expect(searchStarts(undefined, '/same', '/same')).toEqual([path.resolve('/same')]);
29
+ });
30
+ });
31
+
32
+ describe('walkUp', () => {
33
+ let dir: string;
34
+ afterEach(() => {
35
+ if (dir) fs.rmSync(dir, { recursive: true, force: true });
36
+ });
37
+
38
+ it('finds runspec.toml walking up from a nested dir', () => {
39
+ dir = tmpdir();
40
+ const toml = writeToml(dir);
41
+ const nested = path.join(dir, 'a', 'b', 'c');
42
+ fs.mkdirSync(nested, { recursive: true });
43
+ expect(walkUp(nested)).toBe(toml);
44
+ });
45
+
46
+ it('ignores a runspec.toml that lives under node_modules', () => {
47
+ dir = tmpdir();
48
+ const projectToml = writeToml(dir); // {root}/runspec.toml — the project's
49
+ // A dependency ships its own runspec.toml (e.g. runspec-node's CLI spec).
50
+ const depDir = path.join(dir, 'node_modules', 'runspec-node', 'dist');
51
+ writeToml(depDir);
52
+ // Walking up from inside node_modules must skip the dep's toml and resolve
53
+ // the project's — this is the installed-CLI discovery case.
54
+ expect(walkUp(depDir)).toBe(projectToml);
55
+ });
56
+
57
+ it('returns null when no runspec.toml exists up the tree', () => {
58
+ dir = tmpdir();
59
+ const nested = path.join(dir, 'x', 'y');
60
+ fs.mkdirSync(nested, { recursive: true });
61
+ expect(walkUp(nested)).toBeNull();
62
+ });
63
+ });
64
+
65
+ describe('findConfig', () => {
66
+ let dir: string;
67
+ const savedEnv = process.env.RUNSPEC_CONFIG;
68
+ afterEach(() => {
69
+ if (savedEnv === undefined) delete process.env.RUNSPEC_CONFIG;
70
+ else process.env.RUNSPEC_CONFIG = savedEnv;
71
+ if (dir) fs.rmSync(dir, { recursive: true, force: true });
72
+ });
73
+
74
+ it('honours RUNSPEC_CONFIG when set', () => {
75
+ dir = tmpdir();
76
+ const toml = writeToml(path.join(dir, 'custom'));
77
+ process.env.RUNSPEC_CONFIG = toml;
78
+ // cwd has no toml, but the env var wins regardless.
79
+ expect(findConfig(dir).configPath).toBe(path.resolve(toml));
80
+ });
81
+
82
+ it('resolves from an explicit start dir', () => {
83
+ delete process.env.RUNSPEC_CONFIG;
84
+ dir = tmpdir();
85
+ const toml = writeToml(dir);
86
+ expect(findConfig(path.join(dir, 'sub', 'dir')).configPath).toBe(toml);
87
+ });
88
+
89
+ it('throws a helpful error when nothing is found', () => {
90
+ delete process.env.RUNSPEC_CONFIG;
91
+ dir = tmpdir(); // empty, no runspec.toml anywhere up the chain inside the tmp root
92
+ expect(() => findConfig(dir)).toThrow(/No runspec configuration found/);
93
+ });
94
+ });
@@ -178,7 +178,35 @@ test('normalises [config.logging] with defaults', () => {
178
178
  description = "hi"
179
179
  `);
180
180
  const raw = loadRaw(file);
181
- expect(raw.config.logging).toEqual({ rotate: 'midnight', keep: 7, summary: true });
181
+ expect(raw.config.logging).toEqual({ rotate: 'midnight', keep: 7, summary: true, store: 'single' });
182
+ });
183
+
184
+ test('normalises [config.logging] store = per-run', () => {
185
+ const dir = tmpDir();
186
+ const file = path.join(dir, 'runspec.toml');
187
+ fs.writeFileSync(file, `
188
+ [config.logging]
189
+ store = "per-run"
190
+
191
+ [greet]
192
+ description = "hi"
193
+ `);
194
+ const raw = loadRaw(file);
195
+ expect(raw.config.logging?.store).toBe('per-run');
196
+ });
197
+
198
+ test('normalises [config.logging] unknown store falls back to single', () => {
199
+ const dir = tmpDir();
200
+ const file = path.join(dir, 'runspec.toml');
201
+ fs.writeFileSync(file, `
202
+ [config.logging]
203
+ store = "bogus"
204
+
205
+ [greet]
206
+ description = "hi"
207
+ `);
208
+ const raw = loadRaw(file);
209
+ expect(raw.config.logging?.store).toBe('single');
182
210
  });
183
211
 
184
212
  test('normalises [config.logging] all fields', () => {
@@ -194,7 +222,7 @@ summary = false
194
222
  description = "hi"
195
223
  `);
196
224
  const raw = loadRaw(file);
197
- expect(raw.config.logging).toEqual({ rotate: '10 MB', keep: 3, summary: false });
225
+ expect(raw.config.logging).toEqual({ rotate: '10 MB', keep: 3, summary: false, store: 'single' });
198
226
  });
199
227
 
200
228
  test('[config.logging] summary defaults to true when omitted', () => {
@@ -407,17 +407,20 @@ test('extra fields appear under "extra" key in JSON', () => {
407
407
  getLogger('test').info('connected', { user_id: '42', region: 'eu-west' });
408
408
  const content = fs.readFileSync(path.join(dir, 'logs', 'myscript.log'), 'utf-8').trim();
409
409
  const record = JSON.parse(content);
410
- expect(record.extra).toEqual({ user_id: '42', region: 'eu-west' });
410
+ // run_id is always present on file records (SPEC §run_id); user fields ride alongside.
411
+ expect(record.extra).toMatchObject({ user_id: '42', region: 'eu-west' });
412
+ expect(typeof record.extra.run_id).toBe('string');
411
413
  expect(record.message).toBe('connected');
412
414
  });
413
415
 
414
- test('no "extra" key when no extra fields', () => {
416
+ test('run_id is the only extra field when none supplied', () => {
415
417
  const dir = tmpDir();
416
418
  configureLogging(makeCfg(dir));
417
419
  getLogger('test').info('plain message');
418
420
  const content = fs.readFileSync(path.join(dir, 'logs', 'myscript.log'), 'utf-8').trim();
419
421
  const record = JSON.parse(content);
420
- expect(record.extra).toBeUndefined();
422
+ expect(Object.keys(record.extra)).toEqual(['run_id']);
423
+ expect(typeof record.extra.run_id).toBe('string');
421
424
  });
422
425
 
423
426
  test('error key extracted from fields, not placed in extra', () => {
@@ -428,17 +431,17 @@ test('error key extracted from fields, not placed in extra', () => {
428
431
  const record = JSON.parse(content);
429
432
  expect(typeof record.exc).toBe('string');
430
433
  expect(record.exc).toContain('oops');
431
- expect(record.extra).toEqual({ user_id: '42' });
434
+ expect(record.extra).toMatchObject({ user_id: '42' });
432
435
  expect(record.extra?.error).toBeUndefined();
433
436
  });
434
437
 
435
- test('error-only fields: no extra key', () => {
438
+ test('error-only fields: extra holds just run_id', () => {
436
439
  const dir = tmpDir();
437
440
  configureLogging(makeCfg(dir));
438
441
  getLogger('test').error('boom', { error: new Error('oops') });
439
442
  const content = fs.readFileSync(path.join(dir, 'logs', 'myscript.log'), 'utf-8').trim();
440
443
  const record = JSON.parse(content);
441
- expect(record.extra).toBeUndefined();
444
+ expect(Object.keys(record.extra)).toEqual(['run_id']);
442
445
  expect(typeof record.exc).toBe('string');
443
446
  });
444
447
 
@@ -473,3 +476,58 @@ test('extra fields appear in console output', () => {
473
476
  expect(lines.some(l => l.includes('user_id=42'))).toBe(true);
474
477
  stdoutWrite.mockRestore();
475
478
  });
479
+
480
+ // ── store = "per-run" ───────────────────────────────────────────────────────────
481
+
482
+ const PER_RUN_RE = /^myscript\.\d{8}T\d{6}Z\.[0-9a-fA-F-]{8,}\.log$/;
483
+
484
+ function perRunFile(dir: string): string | undefined {
485
+ return fs.readdirSync(path.join(dir, 'logs')).find(f => PER_RUN_RE.test(f));
486
+ }
487
+
488
+ test('per-run: writes {runnable}.{ts}.{run_id}.log, not {runnable}.log', () => {
489
+ const dir = tmpDir();
490
+ configureLogging(makeCfg(dir, { store: 'per-run' }));
491
+ getLogger('test').info('hi');
492
+ const files = fs.readdirSync(path.join(dir, 'logs'));
493
+ expect(files.some(f => PER_RUN_RE.test(f))).toBe(true);
494
+ expect(files).not.toContain('myscript.log');
495
+ });
496
+
497
+ test('per-run: run_id in filename matches extra.run_id in records', () => {
498
+ const dir = tmpDir();
499
+ configureLogging(makeCfg(dir, { store: 'per-run' }));
500
+ getLogger('test').info('hi');
501
+ const fname = perRunFile(dir)!;
502
+ const fileRunId = fname.replace(/\.log$/, '').split('.').pop();
503
+ const record = JSON.parse(fs.readFileSync(path.join(dir, 'logs', fname), 'utf-8').trim());
504
+ expect(record.extra.run_id).toBe(fileRunId);
505
+ });
506
+
507
+ test('per-run: no rotation even when rotate is set', () => {
508
+ const dir = tmpDir();
509
+ // a tiny size threshold would rotate a single file immediately; per-run must not.
510
+ configureLogging(makeCfg(dir, { store: 'per-run', rotate: '1 KB' }));
511
+ const log = getLogger('test');
512
+ // ~30 × ~60 bytes well exceeds the 1 KB threshold a rotating handler would act on.
513
+ for (let i = 0; i < 30; i++) log.info(`line ${i} ${'x'.repeat(50)}`);
514
+ const files = fs.readdirSync(path.join(dir, 'logs'));
515
+ // exactly one per-run file, and no rotated backups (.log.1 etc.)
516
+ expect(files.filter(f => PER_RUN_RE.test(f))).toHaveLength(1);
517
+ expect(files.some(f => /\.log\.\d+$/.test(f))).toBe(false);
518
+ });
519
+
520
+ test('per-run: no empty file when nothing is logged', () => {
521
+ const dir = tmpDir();
522
+ configureLogging(makeCfg(dir, { store: 'per-run' }));
523
+ // summary is off in makeCfg and we log nothing → lazy append means no file.
524
+ expect(perRunFile(dir)).toBeUndefined();
525
+ });
526
+
527
+ test('default store is single ({runnable}.log)', () => {
528
+ const dir = tmpDir();
529
+ configureLogging(makeCfg(dir)); // no store override
530
+ getLogger('test').info('hi');
531
+ expect(fs.existsSync(path.join(dir, 'logs', 'myscript.log'))).toBe(true);
532
+ expect(perRunFile(dir)).toBeUndefined();
533
+ });