runspec-node 0.19.0 → 0.21.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/inference.d.ts +6 -0
- package/dist/inference.d.ts.map +1 -1
- package/dist/inference.js +25 -0
- package/dist/inference.js.map +1 -1
- package/dist/logging_setup.d.ts +29 -1
- package/dist/logging_setup.d.ts.map +1 -1
- package/dist/logging_setup.js +120 -30
- package/dist/logging_setup.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/inference.ts +25 -0
- package/src/logging_setup.ts +137 -30
- package/tests/test_emit_schema.test.ts +16 -0
- package/tests/test_inference.test.ts +29 -1
- package/tests/test_run_summary.test.ts +99 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { parse, loadSpec } from './parser';
|
|
2
2
|
export { registerType, listTypes } from './types';
|
|
3
|
+
export { tsTypeOf } from './inference';
|
|
3
4
|
export { RunSpecError, MissingRequiredArg, InvalidChoice, OutOfRange, UnknownArg, GroupViolation, AutonomyViolation } from './errors';
|
|
4
5
|
export { findConfig } from './finder';
|
|
5
6
|
export { loadRaw } from './loader';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtI,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtI,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLogger = exports.loadRaw = exports.findConfig = exports.AutonomyViolation = exports.GroupViolation = exports.UnknownArg = exports.OutOfRange = exports.InvalidChoice = exports.MissingRequiredArg = exports.RunSpecError = exports.listTypes = exports.registerType = exports.loadSpec = exports.parse = void 0;
|
|
3
|
+
exports.getLogger = exports.loadRaw = exports.findConfig = exports.AutonomyViolation = exports.GroupViolation = exports.UnknownArg = exports.OutOfRange = exports.InvalidChoice = exports.MissingRequiredArg = exports.RunSpecError = exports.tsTypeOf = exports.listTypes = exports.registerType = exports.loadSpec = exports.parse = void 0;
|
|
4
4
|
var parser_1 = require("./parser");
|
|
5
5
|
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parser_1.parse; } });
|
|
6
6
|
Object.defineProperty(exports, "loadSpec", { enumerable: true, get: function () { return parser_1.loadSpec; } });
|
|
7
7
|
var types_1 = require("./types");
|
|
8
8
|
Object.defineProperty(exports, "registerType", { enumerable: true, get: function () { return types_1.registerType; } });
|
|
9
9
|
Object.defineProperty(exports, "listTypes", { enumerable: true, get: function () { return types_1.listTypes; } });
|
|
10
|
+
var inference_1 = require("./inference");
|
|
11
|
+
Object.defineProperty(exports, "tsTypeOf", { enumerable: true, get: function () { return inference_1.tsTypeOf; } });
|
|
10
12
|
var errors_1 = require("./errors");
|
|
11
13
|
Object.defineProperty(exports, "RunSpecError", { enumerable: true, get: function () { return errors_1.RunSpecError; } });
|
|
12
14
|
Object.defineProperty(exports, "MissingRequiredArg", { enumerable: true, get: function () { return errors_1.MissingRequiredArg; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAAlC,+FAAA,KAAK,OAAA;AAAE,kGAAA,QAAQ,OAAA;AACxB,iCAAkD;AAAzC,qGAAA,YAAY,OAAA;AAAE,kGAAA,SAAS,OAAA;AAChC,mCAAsI;AAA7H,sGAAA,YAAY,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AACnH,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,mCAAmC;AAA1B,iGAAA,OAAO,OAAA;AAChB,iDAA4C;AAAnC,0GAAA,SAAS,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAAlC,+FAAA,KAAK,OAAA;AAAE,kGAAA,QAAQ,OAAA;AACxB,iCAAkD;AAAzC,qGAAA,YAAY,OAAA;AAAE,kGAAA,SAAS,OAAA;AAChC,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,mCAAsI;AAA7H,sGAAA,YAAY,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AACnH,mCAAsC;AAA7B,oGAAA,UAAU,OAAA;AACnB,mCAAmC;AAA1B,iGAAA,OAAO,OAAA;AAChB,iDAA4C;AAAnC,0GAAA,SAAS,OAAA"}
|
package/dist/inference.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ export declare const AUTONOMY_LEVELS: readonly ["autonomous", "confirm", "superv
|
|
|
3
3
|
export declare const AUTONOMY_RANK: {
|
|
4
4
|
[k: string]: number;
|
|
5
5
|
};
|
|
6
|
+
/** The TypeScript type of an arg's parsed value: the item type, suffixed `[]`
|
|
7
|
+
* when the arg is `multiple` (`rest` is always `string[]`). `arg.type` itself
|
|
8
|
+
* stays the item type — it drives per-item coercion. Pure helper, computed on
|
|
9
|
+
* demand from a (typically inferred) ArgSpec; custom registered types fall
|
|
10
|
+
* back to `"unknown"`. e.g. `tsTypeOf({type:"str", multiple:true})` → `"string[]"`. */
|
|
11
|
+
export declare function tsTypeOf(arg: ArgSpec): string;
|
|
6
12
|
export declare function inferArg(raw: ArgSpec): ArgSpec;
|
|
7
13
|
export declare function inferScript(raw: ScriptSpec, configAutonomy: string): ScriptSpec;
|
|
8
14
|
export declare function effectiveAutonomy(scriptAutonomy: string, providedArgs: Record<string, unknown>, argSpecs: Record<string, ArgSpec>): string;
|
package/dist/inference.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../src/inference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGpD,eAAO,MAAM,eAAe,4DAA6D,CAAC;AAC1F,eAAO,MAAM,aAAa;;CAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../src/inference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGpD,eAAO,MAAM,eAAe,4DAA6D,CAAC;AAC1F,eAAO,MAAM,aAAa;;CAA4D,CAAC;AAevF;;;;wFAIwF;AACxF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAK7C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAkC9C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,CAc/E;AAED,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAaR;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7E"}
|
package/dist/inference.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AUTONOMY_RANK = exports.AUTONOMY_LEVELS = void 0;
|
|
4
|
+
exports.tsTypeOf = tsTypeOf;
|
|
4
5
|
exports.inferArg = inferArg;
|
|
5
6
|
exports.inferScript = inferScript;
|
|
6
7
|
exports.effectiveAutonomy = effectiveAutonomy;
|
|
@@ -8,6 +9,30 @@ exports.isMoreRestrictive = isMoreRestrictive;
|
|
|
8
9
|
const errors_1 = require("./errors");
|
|
9
10
|
exports.AUTONOMY_LEVELS = ['autonomous', 'confirm', 'supervised', 'manual'];
|
|
10
11
|
exports.AUTONOMY_RANK = Object.fromEntries(exports.AUTONOMY_LEVELS.map((l, i) => [l, i]));
|
|
12
|
+
// Item-type name → its TypeScript type. Mirrors the JSON-Schema type map used
|
|
13
|
+
// by emit; custom (register_type) names fall back to `unknown`.
|
|
14
|
+
const TS_TYPE_NAMES = {
|
|
15
|
+
str: 'string',
|
|
16
|
+
int: 'number',
|
|
17
|
+
float: 'number',
|
|
18
|
+
bool: 'boolean',
|
|
19
|
+
flag: 'boolean',
|
|
20
|
+
path: 'string',
|
|
21
|
+
choice: 'string',
|
|
22
|
+
rest: 'string[]',
|
|
23
|
+
};
|
|
24
|
+
/** The TypeScript type of an arg's parsed value: the item type, suffixed `[]`
|
|
25
|
+
* when the arg is `multiple` (`rest` is always `string[]`). `arg.type` itself
|
|
26
|
+
* stays the item type — it drives per-item coercion. Pure helper, computed on
|
|
27
|
+
* demand from a (typically inferred) ArgSpec; custom registered types fall
|
|
28
|
+
* back to `"unknown"`. e.g. `tsTypeOf({type:"str", multiple:true})` → `"string[]"`. */
|
|
29
|
+
function tsTypeOf(arg) {
|
|
30
|
+
const type = arg.type ?? 'str';
|
|
31
|
+
if (type === 'rest')
|
|
32
|
+
return 'string[]';
|
|
33
|
+
const base = TS_TYPE_NAMES[type] ?? 'unknown';
|
|
34
|
+
return arg.multiple ? `${base}[]` : base;
|
|
35
|
+
}
|
|
11
36
|
function inferArg(raw) {
|
|
12
37
|
const result = { ...raw };
|
|
13
38
|
const def = result.default;
|
package/dist/inference.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../src/inference.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"inference.js","sourceRoot":"","sources":["../src/inference.ts"],"names":[],"mappings":"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"}
|
package/dist/logging_setup.d.ts
CHANGED
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { LoggingConfig } from './models';
|
|
7
7
|
declare const RUN_SUMMARY_LOGGER = "runspec.runsummary";
|
|
8
|
+
declare const EXCEPTION_LOGGER = "runspec.exception";
|
|
9
|
+
interface ExcFrame {
|
|
10
|
+
func: string;
|
|
11
|
+
file: string;
|
|
12
|
+
line: number | null;
|
|
13
|
+
code: string | null;
|
|
14
|
+
}
|
|
15
|
+
interface ExcStructured {
|
|
16
|
+
type: string;
|
|
17
|
+
message: string;
|
|
18
|
+
module: string | null;
|
|
19
|
+
frames: ExcFrame[];
|
|
20
|
+
}
|
|
8
21
|
export declare class Logger {
|
|
9
22
|
private readonly name;
|
|
10
23
|
constructor(name: string);
|
|
@@ -24,6 +37,21 @@ declare function _periodForDate(d: Date, when: 'daily' | 'midnight' | 'weekly'):
|
|
|
24
37
|
* formatted line directly to stderr. Idempotent — safe to call repeatedly.
|
|
25
38
|
*/
|
|
26
39
|
export declare function emitRunSummary(): void;
|
|
40
|
+
/** Clean, machine-readable form of an error for the JSON audit / UI tables. */
|
|
41
|
+
declare function buildExcStructured(err: Error): ExcStructured;
|
|
42
|
+
/**
|
|
43
|
+
* Neat, aligned, stdlib-only trace for --debug console output. Internal
|
|
44
|
+
* runspec frames are dropped from the *display* (full trace still hits the
|
|
45
|
+
* file). Falls back to the full list if filtering empties it.
|
|
46
|
+
*/
|
|
47
|
+
declare function formatCompactTrace(err: Error, frames: ExcFrame[]): string;
|
|
48
|
+
/**
|
|
49
|
+
* Uniform handling for an uncaught error: always write a structured record to
|
|
50
|
+
* the audit file, feed the run summary (when on), and show a neat compact
|
|
51
|
+
* trace on the console only with --debug (otherwise a single concise line).
|
|
52
|
+
* Exported for tests so they can exercise it without triggering process.exit.
|
|
53
|
+
*/
|
|
54
|
+
export declare function _handleUncaught(err: Error): void;
|
|
27
55
|
export interface ConfigureLoggingOptions {
|
|
28
56
|
logCfg: LoggingConfig | undefined;
|
|
29
57
|
runnableName: string;
|
|
@@ -63,5 +91,5 @@ export interface ConfigureLoggingOptions {
|
|
|
63
91
|
*/
|
|
64
92
|
export declare function configureLogging(opts: ConfigureLoggingOptions): void;
|
|
65
93
|
export declare function _resetForTest(): void;
|
|
66
|
-
export { _periodForDate, RUN_SUMMARY_LOGGER };
|
|
94
|
+
export { _periodForDate, RUN_SUMMARY_LOGGER, EXCEPTION_LOGGER, buildExcStructured, formatCompactTrace };
|
|
67
95
|
//# sourceMappingURL=logging_setup.d.ts.map
|
|
@@ -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;
|
|
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"}
|
package/dist/logging_setup.js
CHANGED
|
@@ -38,12 +38,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
};
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.RUN_SUMMARY_LOGGER = exports.Logger = void 0;
|
|
41
|
+
exports.EXCEPTION_LOGGER = exports.RUN_SUMMARY_LOGGER = exports.Logger = void 0;
|
|
42
42
|
exports.getLogger = getLogger;
|
|
43
43
|
exports.emitRunSummary = emitRunSummary;
|
|
44
|
+
exports._handleUncaught = _handleUncaught;
|
|
44
45
|
exports.configureLogging = configureLogging;
|
|
45
46
|
exports._resetForTest = _resetForTest;
|
|
46
47
|
exports._periodForDate = _periodForDate;
|
|
48
|
+
exports.buildExcStructured = buildExcStructured;
|
|
49
|
+
exports.formatCompactTrace = formatCompactTrace;
|
|
47
50
|
const fs = __importStar(require("fs"));
|
|
48
51
|
const path = __importStar(require("path"));
|
|
49
52
|
const os = __importStar(require("os"));
|
|
@@ -53,6 +56,15 @@ const _loggers = new Map();
|
|
|
53
56
|
const _handlers = [];
|
|
54
57
|
const RUN_SUMMARY_LOGGER = 'runspec.runsummary';
|
|
55
58
|
exports.RUN_SUMMARY_LOGGER = RUN_SUMMARY_LOGGER;
|
|
59
|
+
// Uncaught exceptions are emitted on this dedicated logger so the file handler
|
|
60
|
+
// records them while the console handlers drop them by name — console display is
|
|
61
|
+
// handled explicitly in _handleUncaught (debug-gated).
|
|
62
|
+
const EXCEPTION_LOGGER = 'runspec.exception';
|
|
63
|
+
exports.EXCEPTION_LOGGER = EXCEPTION_LOGGER;
|
|
64
|
+
// Directory of the installed runspec-node package — used to filter internal
|
|
65
|
+
// library frames out of the *displayed* compact trace (full trace still hits the file).
|
|
66
|
+
const RUNSPEC_PKG_DIR = __dirname;
|
|
67
|
+
let _debug = false; // mirrors the --debug flag; read by _handleUncaught for console rendering
|
|
56
68
|
let _summaryState = null;
|
|
57
69
|
let _exitHooksInstalled = false;
|
|
58
70
|
// ── level map ─────────────────────────────────────────────────────────────────
|
|
@@ -140,6 +152,8 @@ function formatJson(record) {
|
|
|
140
152
|
};
|
|
141
153
|
if (record.error)
|
|
142
154
|
obj['exc'] = record.error.stack ?? record.error.message;
|
|
155
|
+
if (record.excStructured)
|
|
156
|
+
obj['exc_structured'] = record.excStructured;
|
|
143
157
|
if (record.extra)
|
|
144
158
|
obj['extra'] = record.extra;
|
|
145
159
|
return JSON.stringify(obj);
|
|
@@ -184,7 +198,7 @@ class StdoutHandler {
|
|
|
184
198
|
emit(record) {
|
|
185
199
|
if (record.levelNum >= 30)
|
|
186
200
|
return; // WARNING+ belongs on stderr
|
|
187
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER)
|
|
201
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER)
|
|
188
202
|
return;
|
|
189
203
|
try {
|
|
190
204
|
process.stdout.write(formatConsole(record, this.showTracebacks) + '\n');
|
|
@@ -208,7 +222,7 @@ class StderrHandler {
|
|
|
208
222
|
emit(record) {
|
|
209
223
|
if (record.levelNum < 30)
|
|
210
224
|
return;
|
|
211
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER)
|
|
225
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER)
|
|
212
226
|
return;
|
|
213
227
|
try {
|
|
214
228
|
process.stderr.write(formatConsole(record, this.showTracebacks) + '\n');
|
|
@@ -229,8 +243,8 @@ class RunSummaryCounter {
|
|
|
229
243
|
DEBUG: 0, INFO: 0, WARNING: 0, ERROR: 0, CRITICAL: 0,
|
|
230
244
|
};
|
|
231
245
|
emit(record) {
|
|
232
|
-
// Don't count
|
|
233
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER)
|
|
246
|
+
// Don't count runspec's own bookkeeping records (summary + uncaught-exception).
|
|
247
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER)
|
|
234
248
|
return;
|
|
235
249
|
const label = LEVEL_LABEL[record.levelNum];
|
|
236
250
|
if (label && label in this.counts) {
|
|
@@ -471,6 +485,95 @@ function emitRunSummary() {
|
|
|
471
485
|
// never disrupt shutdown
|
|
472
486
|
}
|
|
473
487
|
}
|
|
488
|
+
// ── uncaught exceptions ────────────────────────────────────────────────────────
|
|
489
|
+
const STACK_FRAME_RE = /^\s*at (?:(.+?) \()?(.+?):(\d+):(\d+)\)?$/;
|
|
490
|
+
/**
|
|
491
|
+
* Parse a V8 stack string into frames, innermost LAST (mirroring Python's
|
|
492
|
+
* traceback.extract_tb order). `code` is unavailable from a stack string.
|
|
493
|
+
*/
|
|
494
|
+
function parseStackFrames(stack) {
|
|
495
|
+
const frames = [];
|
|
496
|
+
for (const lineStr of stack.split('\n')) {
|
|
497
|
+
const m = STACK_FRAME_RE.exec(lineStr);
|
|
498
|
+
if (!m)
|
|
499
|
+
continue;
|
|
500
|
+
frames.push({ func: m[1] ?? '<anonymous>', file: m[2], line: parseInt(m[3], 10), code: null });
|
|
501
|
+
}
|
|
502
|
+
frames.reverse();
|
|
503
|
+
return frames;
|
|
504
|
+
}
|
|
505
|
+
/** Clean, machine-readable form of an error for the JSON audit / UI tables. */
|
|
506
|
+
function buildExcStructured(err) {
|
|
507
|
+
const frames = parseStackFrames(err.stack ?? '');
|
|
508
|
+
const last = frames.length ? frames[frames.length - 1] : null;
|
|
509
|
+
const module = last ? path.basename(last.file).replace(/\.[^.]+$/, '') : null;
|
|
510
|
+
return { type: err.name || 'Error', message: err.message || String(err), module, frames };
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Neat, aligned, stdlib-only trace for --debug console output. Internal
|
|
514
|
+
* runspec frames are dropped from the *display* (full trace still hits the
|
|
515
|
+
* file). Falls back to the full list if filtering empties it.
|
|
516
|
+
*/
|
|
517
|
+
function formatCompactTrace(err, frames) {
|
|
518
|
+
const shown = frames.filter((f) => !f.file.includes(RUNSPEC_PKG_DIR));
|
|
519
|
+
const use = shown.length ? shown : frames;
|
|
520
|
+
const locs = use.map((f) => `${path.basename(f.file)}:${f.line}`);
|
|
521
|
+
const width = Math.max(0, ...locs.map((l) => l.length));
|
|
522
|
+
const lines = [`${err.name || 'Error'}: ${err.message}`, ''];
|
|
523
|
+
use.forEach((f, i) => {
|
|
524
|
+
lines.push(` ${locs[i].padEnd(width)} ${f.func}`.trimEnd());
|
|
525
|
+
});
|
|
526
|
+
return lines.join('\n');
|
|
527
|
+
}
|
|
528
|
+
/** Emit the structured exception record straight to the handlers (file keeps it). */
|
|
529
|
+
function emitExceptionRecord(err, structured) {
|
|
530
|
+
if (_handlers.length === 0)
|
|
531
|
+
return;
|
|
532
|
+
const record = {
|
|
533
|
+
ts: new Date(),
|
|
534
|
+
levelNum: 50,
|
|
535
|
+
loggerName: EXCEPTION_LOGGER,
|
|
536
|
+
message: 'uncaught exception',
|
|
537
|
+
error: err,
|
|
538
|
+
excStructured: structured,
|
|
539
|
+
};
|
|
540
|
+
for (const h of _handlers) {
|
|
541
|
+
try {
|
|
542
|
+
if (record.levelNum >= h.level)
|
|
543
|
+
h.emit(record);
|
|
544
|
+
}
|
|
545
|
+
catch {
|
|
546
|
+
// never disrupt
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Uniform handling for an uncaught error: always write a structured record to
|
|
552
|
+
* the audit file, feed the run summary (when on), and show a neat compact
|
|
553
|
+
* trace on the console only with --debug (otherwise a single concise line).
|
|
554
|
+
* Exported for tests so they can exercise it without triggering process.exit.
|
|
555
|
+
*/
|
|
556
|
+
function _handleUncaught(err) {
|
|
557
|
+
const structured = buildExcStructured(err);
|
|
558
|
+
// Always to the audit file (independent of --debug and of the summary toggle).
|
|
559
|
+
emitExceptionRecord(err, structured);
|
|
560
|
+
if (_summaryState) {
|
|
561
|
+
_summaryState.exception = { type: structured.type, message: structured.message, traceback: err.stack ?? '' };
|
|
562
|
+
_summaryState.exitCode = 1;
|
|
563
|
+
}
|
|
564
|
+
// Console: full compact trace only with --debug, else a one-liner.
|
|
565
|
+
try {
|
|
566
|
+
if (_debug) {
|
|
567
|
+
process.stderr.write(formatCompactTrace(err, structured.frames) + '\n');
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
process.stderr.write(`ERROR: ${structured.type}: ${structured.message} (run with --debug for traceback)\n`);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
catch {
|
|
574
|
+
process.stderr.write((err.stack ?? String(err)) + '\n'); // safety fallback
|
|
575
|
+
}
|
|
576
|
+
}
|
|
474
577
|
function installExitHooks() {
|
|
475
578
|
if (_exitHooksInstalled)
|
|
476
579
|
return;
|
|
@@ -478,42 +581,24 @@ function installExitHooks() {
|
|
|
478
581
|
process.on('exit', (code) => {
|
|
479
582
|
if (_summaryState && !_summaryState.emitted) {
|
|
480
583
|
// process.exitCode wins over the explicit exception capture only if
|
|
481
|
-
// it's non-zero —
|
|
584
|
+
// it's non-zero — _handleUncaught already set state.exitCode=1.
|
|
482
585
|
if (code !== 0 && _summaryState.exitCode === 0)
|
|
483
586
|
_summaryState.exitCode = code;
|
|
484
587
|
emitRunSummary();
|
|
485
588
|
}
|
|
486
589
|
});
|
|
487
590
|
// Skip the crash-handlers under jest — they call process.exit(1), which
|
|
488
|
-
// would tear down the test runner
|
|
489
|
-
//
|
|
591
|
+
// would tear down the test runner. _handleUncaught is unit-tested directly.
|
|
592
|
+
// The 'exit' hook above is harmless and still runs.
|
|
490
593
|
if (process.env['JEST_WORKER_ID'] !== undefined)
|
|
491
594
|
return;
|
|
492
595
|
process.on('uncaughtException', (err) => {
|
|
493
|
-
|
|
494
|
-
_summaryState.exception = {
|
|
495
|
-
type: err.name || 'Error',
|
|
496
|
-
message: err.message || String(err),
|
|
497
|
-
traceback: err.stack ?? '',
|
|
498
|
-
};
|
|
499
|
-
_summaryState.exitCode = 1;
|
|
500
|
-
}
|
|
501
|
-
// Preserve default Node behaviour: print and exit non-zero. The 'exit'
|
|
502
|
-
// hook above will fire and run emitRunSummary().
|
|
503
|
-
process.stderr.write((err.stack ?? String(err)) + '\n');
|
|
596
|
+
_handleUncaught(err);
|
|
504
597
|
process.exit(1);
|
|
505
598
|
});
|
|
506
599
|
process.on('unhandledRejection', (reason) => {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
_summaryState.exception = {
|
|
510
|
-
type: err.name || 'Error',
|
|
511
|
-
message: err.message || String(reason),
|
|
512
|
-
traceback: err.stack ?? '',
|
|
513
|
-
};
|
|
514
|
-
_summaryState.exitCode = 1;
|
|
515
|
-
}
|
|
516
|
-
process.stderr.write(`Unhandled rejection: ${reason instanceof Error ? (reason.stack ?? reason.message) : String(reason)}\n`);
|
|
600
|
+
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
601
|
+
_handleUncaught(err);
|
|
517
602
|
process.exit(1);
|
|
518
603
|
});
|
|
519
604
|
}
|
|
@@ -548,6 +633,7 @@ function configureLogging(opts) {
|
|
|
548
633
|
if (!opts.logCfg || _configured)
|
|
549
634
|
return;
|
|
550
635
|
const debug = opts.debug ?? false;
|
|
636
|
+
_debug = debug;
|
|
551
637
|
const floor = debug ? LEVEL_NUM['debug'] : LEVEL_NUM['info'];
|
|
552
638
|
_handlers.push(new StdoutHandler(floor, debug));
|
|
553
639
|
_handlers.push(new StderrHandler(debug));
|
|
@@ -577,13 +663,17 @@ function configureLogging(opts) {
|
|
|
577
663
|
user,
|
|
578
664
|
userTarget,
|
|
579
665
|
};
|
|
580
|
-
installExitHooks();
|
|
581
666
|
}
|
|
667
|
+
// Uncaught-exception handling is always installed (independent of the summary
|
|
668
|
+
// toggle) so the structured exception record reaches the audit file even when
|
|
669
|
+
// summary is off. The exit hook only flushes a summary when _summaryState is set.
|
|
670
|
+
installExitHooks();
|
|
582
671
|
_configured = true;
|
|
583
672
|
}
|
|
584
673
|
// ── test helper ───────────────────────────────────────────────────────────────
|
|
585
674
|
function _resetForTest() {
|
|
586
675
|
_configured = false;
|
|
676
|
+
_debug = false;
|
|
587
677
|
_loggers.clear();
|
|
588
678
|
_handlers.length = 0;
|
|
589
679
|
_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/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { parse, loadSpec } from './parser';
|
|
2
2
|
export { registerType, listTypes } from './types';
|
|
3
|
+
export { tsTypeOf } from './inference';
|
|
3
4
|
export { RunSpecError, MissingRequiredArg, InvalidChoice, OutOfRange, UnknownArg, GroupViolation, AutonomyViolation } from './errors';
|
|
4
5
|
export { findConfig } from './finder';
|
|
5
6
|
export { loadRaw } from './loader';
|
package/src/inference.ts
CHANGED
|
@@ -4,6 +4,31 @@ import { RunSpecError } from './errors';
|
|
|
4
4
|
export const AUTONOMY_LEVELS = ['autonomous', 'confirm', 'supervised', 'manual'] as const;
|
|
5
5
|
export const AUTONOMY_RANK = Object.fromEntries(AUTONOMY_LEVELS.map((l, i) => [l, i]));
|
|
6
6
|
|
|
7
|
+
// Item-type name → its TypeScript type. Mirrors the JSON-Schema type map used
|
|
8
|
+
// by emit; custom (register_type) names fall back to `unknown`.
|
|
9
|
+
const TS_TYPE_NAMES: Record<string, string> = {
|
|
10
|
+
str: 'string',
|
|
11
|
+
int: 'number',
|
|
12
|
+
float: 'number',
|
|
13
|
+
bool: 'boolean',
|
|
14
|
+
flag: 'boolean',
|
|
15
|
+
path: 'string',
|
|
16
|
+
choice: 'string',
|
|
17
|
+
rest: 'string[]',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** The TypeScript type of an arg's parsed value: the item type, suffixed `[]`
|
|
21
|
+
* when the arg is `multiple` (`rest` is always `string[]`). `arg.type` itself
|
|
22
|
+
* stays the item type — it drives per-item coercion. Pure helper, computed on
|
|
23
|
+
* demand from a (typically inferred) ArgSpec; custom registered types fall
|
|
24
|
+
* back to `"unknown"`. e.g. `tsTypeOf({type:"str", multiple:true})` → `"string[]"`. */
|
|
25
|
+
export function tsTypeOf(arg: ArgSpec): string {
|
|
26
|
+
const type = arg.type ?? 'str';
|
|
27
|
+
if (type === 'rest') return 'string[]';
|
|
28
|
+
const base = TS_TYPE_NAMES[type] ?? 'unknown';
|
|
29
|
+
return arg.multiple ? `${base}[]` : base;
|
|
30
|
+
}
|
|
31
|
+
|
|
7
32
|
export function inferArg(raw: ArgSpec): ArgSpec {
|
|
8
33
|
const result = { ...raw };
|
|
9
34
|
const def = result.default;
|
package/src/logging_setup.ts
CHANGED
|
@@ -16,6 +16,16 @@ const _loggers = new Map<string, Logger>();
|
|
|
16
16
|
const _handlers: Handler[] = [];
|
|
17
17
|
|
|
18
18
|
const RUN_SUMMARY_LOGGER = 'runspec.runsummary';
|
|
19
|
+
// Uncaught exceptions are emitted on this dedicated logger so the file handler
|
|
20
|
+
// records them while the console handlers drop them by name — console display is
|
|
21
|
+
// handled explicitly in _handleUncaught (debug-gated).
|
|
22
|
+
const EXCEPTION_LOGGER = 'runspec.exception';
|
|
23
|
+
|
|
24
|
+
// Directory of the installed runspec-node package — used to filter internal
|
|
25
|
+
// library frames out of the *displayed* compact trace (full trace still hits the file).
|
|
26
|
+
const RUNSPEC_PKG_DIR = __dirname;
|
|
27
|
+
|
|
28
|
+
let _debug = false; // mirrors the --debug flag; read by _handleUncaught for console rendering
|
|
19
29
|
|
|
20
30
|
interface CapturedException {
|
|
21
31
|
type: string;
|
|
@@ -23,6 +33,20 @@ interface CapturedException {
|
|
|
23
33
|
traceback: string;
|
|
24
34
|
}
|
|
25
35
|
|
|
36
|
+
interface ExcFrame {
|
|
37
|
+
func: string;
|
|
38
|
+
file: string;
|
|
39
|
+
line: number | null;
|
|
40
|
+
code: string | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface ExcStructured {
|
|
44
|
+
type: string;
|
|
45
|
+
message: string;
|
|
46
|
+
module: string | null;
|
|
47
|
+
frames: ExcFrame[];
|
|
48
|
+
}
|
|
49
|
+
|
|
26
50
|
interface SummaryState {
|
|
27
51
|
counter: RunSummaryCounter;
|
|
28
52
|
start: bigint;
|
|
@@ -83,6 +107,7 @@ interface LogRecord {
|
|
|
83
107
|
message: string;
|
|
84
108
|
error?: Error;
|
|
85
109
|
extra?: Record<string, unknown>;
|
|
110
|
+
excStructured?: Record<string, unknown>;
|
|
86
111
|
}
|
|
87
112
|
|
|
88
113
|
interface Handler {
|
|
@@ -145,6 +170,7 @@ function formatJson(record: LogRecord): string {
|
|
|
145
170
|
message: record.message,
|
|
146
171
|
};
|
|
147
172
|
if (record.error) obj['exc'] = record.error.stack ?? record.error.message;
|
|
173
|
+
if (record.excStructured) obj['exc_structured'] = record.excStructured;
|
|
148
174
|
if (record.extra) obj['extra'] = record.extra;
|
|
149
175
|
return JSON.stringify(obj);
|
|
150
176
|
}
|
|
@@ -183,7 +209,7 @@ class StdoutHandler implements Handler {
|
|
|
183
209
|
|
|
184
210
|
emit(record: LogRecord): void {
|
|
185
211
|
if (record.levelNum >= 30) return; // WARNING+ belongs on stderr
|
|
186
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER) return;
|
|
212
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER) return;
|
|
187
213
|
try {
|
|
188
214
|
process.stdout.write(formatConsole(record, this.showTracebacks) + '\n');
|
|
189
215
|
} catch {
|
|
@@ -204,7 +230,7 @@ class StderrHandler implements Handler {
|
|
|
204
230
|
|
|
205
231
|
emit(record: LogRecord): void {
|
|
206
232
|
if (record.levelNum < 30) return;
|
|
207
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER) return;
|
|
233
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER) return;
|
|
208
234
|
try {
|
|
209
235
|
process.stderr.write(formatConsole(record, this.showTracebacks) + '\n');
|
|
210
236
|
} catch {
|
|
@@ -226,8 +252,8 @@ class RunSummaryCounter implements Handler {
|
|
|
226
252
|
};
|
|
227
253
|
|
|
228
254
|
emit(record: LogRecord): void {
|
|
229
|
-
// Don't count
|
|
230
|
-
if (record.loggerName === RUN_SUMMARY_LOGGER) return;
|
|
255
|
+
// Don't count runspec's own bookkeeping records (summary + uncaught-exception).
|
|
256
|
+
if (record.loggerName === RUN_SUMMARY_LOGGER || record.loggerName === EXCEPTION_LOGGER) return;
|
|
231
257
|
const label = LEVEL_LABEL[record.levelNum];
|
|
232
258
|
if (label && label in this.counts) {
|
|
233
259
|
this.counts[label]++;
|
|
@@ -462,6 +488,99 @@ export function emitRunSummary(): void {
|
|
|
462
488
|
}
|
|
463
489
|
}
|
|
464
490
|
|
|
491
|
+
// ── uncaught exceptions ────────────────────────────────────────────────────────
|
|
492
|
+
|
|
493
|
+
const STACK_FRAME_RE = /^\s*at (?:(.+?) \()?(.+?):(\d+):(\d+)\)?$/;
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Parse a V8 stack string into frames, innermost LAST (mirroring Python's
|
|
497
|
+
* traceback.extract_tb order). `code` is unavailable from a stack string.
|
|
498
|
+
*/
|
|
499
|
+
function parseStackFrames(stack: string): ExcFrame[] {
|
|
500
|
+
const frames: ExcFrame[] = [];
|
|
501
|
+
for (const lineStr of stack.split('\n')) {
|
|
502
|
+
const m = STACK_FRAME_RE.exec(lineStr);
|
|
503
|
+
if (!m) continue;
|
|
504
|
+
frames.push({ func: m[1] ?? '<anonymous>', file: m[2], line: parseInt(m[3], 10), code: null });
|
|
505
|
+
}
|
|
506
|
+
frames.reverse();
|
|
507
|
+
return frames;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/** Clean, machine-readable form of an error for the JSON audit / UI tables. */
|
|
511
|
+
function buildExcStructured(err: Error): ExcStructured {
|
|
512
|
+
const frames = parseStackFrames(err.stack ?? '');
|
|
513
|
+
const last = frames.length ? frames[frames.length - 1] : null;
|
|
514
|
+
const module = last ? path.basename(last.file).replace(/\.[^.]+$/, '') : null;
|
|
515
|
+
return { type: err.name || 'Error', message: err.message || String(err), module, frames };
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Neat, aligned, stdlib-only trace for --debug console output. Internal
|
|
520
|
+
* runspec frames are dropped from the *display* (full trace still hits the
|
|
521
|
+
* file). Falls back to the full list if filtering empties it.
|
|
522
|
+
*/
|
|
523
|
+
function formatCompactTrace(err: Error, frames: ExcFrame[]): string {
|
|
524
|
+
const shown = frames.filter((f) => !f.file.includes(RUNSPEC_PKG_DIR));
|
|
525
|
+
const use = shown.length ? shown : frames;
|
|
526
|
+
const locs = use.map((f) => `${path.basename(f.file)}:${f.line}`);
|
|
527
|
+
const width = Math.max(0, ...locs.map((l) => l.length));
|
|
528
|
+
const lines = [`${err.name || 'Error'}: ${err.message}`, ''];
|
|
529
|
+
use.forEach((f, i) => {
|
|
530
|
+
lines.push(` ${locs[i].padEnd(width)} ${f.func}`.trimEnd());
|
|
531
|
+
});
|
|
532
|
+
return lines.join('\n');
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/** Emit the structured exception record straight to the handlers (file keeps it). */
|
|
536
|
+
function emitExceptionRecord(err: Error, structured: ExcStructured): void {
|
|
537
|
+
if (_handlers.length === 0) return;
|
|
538
|
+
const record: LogRecord = {
|
|
539
|
+
ts: new Date(),
|
|
540
|
+
levelNum: 50,
|
|
541
|
+
loggerName: EXCEPTION_LOGGER,
|
|
542
|
+
message: 'uncaught exception',
|
|
543
|
+
error: err,
|
|
544
|
+
excStructured: structured as unknown as Record<string, unknown>,
|
|
545
|
+
};
|
|
546
|
+
for (const h of _handlers) {
|
|
547
|
+
try {
|
|
548
|
+
if (record.levelNum >= h.level) h.emit(record);
|
|
549
|
+
} catch {
|
|
550
|
+
// never disrupt
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Uniform handling for an uncaught error: always write a structured record to
|
|
557
|
+
* the audit file, feed the run summary (when on), and show a neat compact
|
|
558
|
+
* trace on the console only with --debug (otherwise a single concise line).
|
|
559
|
+
* Exported for tests so they can exercise it without triggering process.exit.
|
|
560
|
+
*/
|
|
561
|
+
export function _handleUncaught(err: Error): void {
|
|
562
|
+
const structured = buildExcStructured(err);
|
|
563
|
+
|
|
564
|
+
// Always to the audit file (independent of --debug and of the summary toggle).
|
|
565
|
+
emitExceptionRecord(err, structured);
|
|
566
|
+
|
|
567
|
+
if (_summaryState) {
|
|
568
|
+
_summaryState.exception = { type: structured.type, message: structured.message, traceback: err.stack ?? '' };
|
|
569
|
+
_summaryState.exitCode = 1;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// Console: full compact trace only with --debug, else a one-liner.
|
|
573
|
+
try {
|
|
574
|
+
if (_debug) {
|
|
575
|
+
process.stderr.write(formatCompactTrace(err, structured.frames) + '\n');
|
|
576
|
+
} else {
|
|
577
|
+
process.stderr.write(`ERROR: ${structured.type}: ${structured.message} (run with --debug for traceback)\n`);
|
|
578
|
+
}
|
|
579
|
+
} catch {
|
|
580
|
+
process.stderr.write((err.stack ?? String(err)) + '\n'); // safety fallback
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
465
584
|
function installExitHooks(): void {
|
|
466
585
|
if (_exitHooksInstalled) return;
|
|
467
586
|
_exitHooksInstalled = true;
|
|
@@ -469,43 +588,25 @@ function installExitHooks(): void {
|
|
|
469
588
|
process.on('exit', (code) => {
|
|
470
589
|
if (_summaryState && !_summaryState.emitted) {
|
|
471
590
|
// process.exitCode wins over the explicit exception capture only if
|
|
472
|
-
// it's non-zero —
|
|
591
|
+
// it's non-zero — _handleUncaught already set state.exitCode=1.
|
|
473
592
|
if (code !== 0 && _summaryState.exitCode === 0) _summaryState.exitCode = code;
|
|
474
593
|
emitRunSummary();
|
|
475
594
|
}
|
|
476
595
|
});
|
|
477
596
|
|
|
478
597
|
// Skip the crash-handlers under jest — they call process.exit(1), which
|
|
479
|
-
// would tear down the test runner
|
|
480
|
-
//
|
|
598
|
+
// would tear down the test runner. _handleUncaught is unit-tested directly.
|
|
599
|
+
// The 'exit' hook above is harmless and still runs.
|
|
481
600
|
if (process.env['JEST_WORKER_ID'] !== undefined) return;
|
|
482
601
|
|
|
483
602
|
process.on('uncaughtException', (err: Error) => {
|
|
484
|
-
|
|
485
|
-
_summaryState.exception = {
|
|
486
|
-
type: err.name || 'Error',
|
|
487
|
-
message: err.message || String(err),
|
|
488
|
-
traceback: err.stack ?? '',
|
|
489
|
-
};
|
|
490
|
-
_summaryState.exitCode = 1;
|
|
491
|
-
}
|
|
492
|
-
// Preserve default Node behaviour: print and exit non-zero. The 'exit'
|
|
493
|
-
// hook above will fire and run emitRunSummary().
|
|
494
|
-
process.stderr.write((err.stack ?? String(err)) + '\n');
|
|
603
|
+
_handleUncaught(err);
|
|
495
604
|
process.exit(1);
|
|
496
605
|
});
|
|
497
606
|
|
|
498
607
|
process.on('unhandledRejection', (reason: unknown) => {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
_summaryState.exception = {
|
|
502
|
-
type: err.name || 'Error',
|
|
503
|
-
message: err.message || String(reason),
|
|
504
|
-
traceback: err.stack ?? '',
|
|
505
|
-
};
|
|
506
|
-
_summaryState.exitCode = 1;
|
|
507
|
-
}
|
|
508
|
-
process.stderr.write(`Unhandled rejection: ${reason instanceof Error ? (reason.stack ?? reason.message) : String(reason)}\n`);
|
|
608
|
+
const err = reason instanceof Error ? reason : new Error(String(reason));
|
|
609
|
+
_handleUncaught(err);
|
|
509
610
|
process.exit(1);
|
|
510
611
|
});
|
|
511
612
|
}
|
|
@@ -554,6 +655,7 @@ export function configureLogging(opts: ConfigureLoggingOptions): void {
|
|
|
554
655
|
if (!opts.logCfg || _configured) return;
|
|
555
656
|
|
|
556
657
|
const debug = opts.debug ?? false;
|
|
658
|
+
_debug = debug;
|
|
557
659
|
const floor = debug ? LEVEL_NUM['debug'] : LEVEL_NUM['info'];
|
|
558
660
|
|
|
559
661
|
_handlers.push(new StdoutHandler(floor, debug));
|
|
@@ -589,9 +691,13 @@ export function configureLogging(opts: ConfigureLoggingOptions): void {
|
|
|
589
691
|
user,
|
|
590
692
|
userTarget,
|
|
591
693
|
};
|
|
592
|
-
installExitHooks();
|
|
593
694
|
}
|
|
594
695
|
|
|
696
|
+
// Uncaught-exception handling is always installed (independent of the summary
|
|
697
|
+
// toggle) so the structured exception record reaches the audit file even when
|
|
698
|
+
// summary is off. The exit hook only flushes a summary when _summaryState is set.
|
|
699
|
+
installExitHooks();
|
|
700
|
+
|
|
595
701
|
_configured = true;
|
|
596
702
|
}
|
|
597
703
|
|
|
@@ -599,6 +705,7 @@ export function configureLogging(opts: ConfigureLoggingOptions): void {
|
|
|
599
705
|
|
|
600
706
|
export function _resetForTest(): void {
|
|
601
707
|
_configured = false;
|
|
708
|
+
_debug = false;
|
|
602
709
|
_loggers.clear();
|
|
603
710
|
_handlers.length = 0;
|
|
604
711
|
_summaryState = null;
|
|
@@ -606,4 +713,4 @@ export function _resetForTest(): void {
|
|
|
606
713
|
// they no-op when _summaryState is null, which is the test-time state.
|
|
607
714
|
}
|
|
608
715
|
|
|
609
|
-
export { _periodForDate, RUN_SUMMARY_LOGGER };
|
|
716
|
+
export { _periodForDate, RUN_SUMMARY_LOGGER, EXCEPTION_LOGGER, buildExcStructured, formatCompactTrace };
|
|
@@ -30,3 +30,19 @@ slug = {type = "str", pattern = "[a-z]+-[0-9]+", min-length = 3, max-length = 10
|
|
|
30
30
|
expect(slug['minLength']).toBe(3);
|
|
31
31
|
expect(slug['maxLength']).toBe(10);
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
test('multiple arg emits array with per-item constraints inside items', () => {
|
|
35
|
+
const schema = schemaFor(
|
|
36
|
+
`
|
|
37
|
+
[deploy]
|
|
38
|
+
[deploy.args]
|
|
39
|
+
ticket = {type = "str", multiple = true, pattern = "[A-Z]+-[0-9]+"}
|
|
40
|
+
`,
|
|
41
|
+
'deploy',
|
|
42
|
+
);
|
|
43
|
+
const props = (schema['inputSchema'] as Record<string, Record<string, unknown>>)['properties'];
|
|
44
|
+
const ticket = (props as Record<string, Record<string, unknown>>)['ticket'];
|
|
45
|
+
expect(ticket['type']).toBe('array');
|
|
46
|
+
// The per-item constraint validates each element, so it belongs in items.
|
|
47
|
+
expect(ticket['items']).toEqual({ type: 'string', pattern: '[A-Z]+-[0-9]+' });
|
|
48
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { inferArg, inferScript, effectiveAutonomy, isMoreRestrictive } from '../src/inference';
|
|
1
|
+
import { inferArg, inferScript, effectiveAutonomy, isMoreRestrictive, tsTypeOf } from '../src/inference';
|
|
2
2
|
import { RunSpecError } from '../src/errors';
|
|
3
3
|
import type { ArgSpec, ScriptSpec } from '../src/models';
|
|
4
4
|
|
|
@@ -151,3 +151,31 @@ test('manual is more restrictive than confirm', () => {
|
|
|
151
151
|
test('autonomous is not more restrictive than confirm', () => {
|
|
152
152
|
expect(isMoreRestrictive('autonomous', 'confirm')).toBe(false);
|
|
153
153
|
});
|
|
154
|
+
|
|
155
|
+
// ── tsTypeOf (derived value type, computed on demand) ──────────────────────────
|
|
156
|
+
|
|
157
|
+
test('tsTypeOf: scalar types', () => {
|
|
158
|
+
expect(tsTypeOf(makeArg({ type: 'str' }))).toBe('string');
|
|
159
|
+
expect(tsTypeOf(makeArg({ type: 'int' }))).toBe('number');
|
|
160
|
+
expect(tsTypeOf(makeArg({ type: 'flag' }))).toBe('boolean');
|
|
161
|
+
expect(tsTypeOf(makeArg({ type: 'path' }))).toBe('string');
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test('tsTypeOf: multiple suffixes []', () => {
|
|
165
|
+
expect(tsTypeOf(makeArg({ type: 'str', multiple: true }))).toBe('string[]');
|
|
166
|
+
expect(tsTypeOf(makeArg({ type: 'int', multiple: true }))).toBe('number[]');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test('tsTypeOf: rest is string[]', () => {
|
|
170
|
+
expect(tsTypeOf(makeArg({ type: 'rest' }))).toBe('string[]');
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test('tsTypeOf: custom type falls back to unknown', () => {
|
|
174
|
+
expect(tsTypeOf(makeArg({ type: 'json-file', multiple: true }))).toBe('unknown[]');
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test('tsTypeOf works on an inferred ArgSpec; type stays the item type', () => {
|
|
178
|
+
const arg = inferArg(makeArg({ type: 'str', multiple: true }));
|
|
179
|
+
expect(arg.type).toBe('str');
|
|
180
|
+
expect(tsTypeOf(arg)).toBe('string[]');
|
|
181
|
+
});
|
|
@@ -6,7 +6,11 @@ import {
|
|
|
6
6
|
getLogger,
|
|
7
7
|
emitRunSummary,
|
|
8
8
|
_resetForTest,
|
|
9
|
+
_handleUncaught,
|
|
10
|
+
buildExcStructured,
|
|
11
|
+
formatCompactTrace,
|
|
9
12
|
RUN_SUMMARY_LOGGER,
|
|
13
|
+
EXCEPTION_LOGGER,
|
|
10
14
|
} from '../src/logging_setup';
|
|
11
15
|
|
|
12
16
|
function tmpDir(): string {
|
|
@@ -260,3 +264,98 @@ test('sudo user_target written to audit record', () => {
|
|
|
260
264
|
expect(summary.extra.user).toBe('alice');
|
|
261
265
|
expect(summary.extra.user_target).toBe('root');
|
|
262
266
|
});
|
|
267
|
+
|
|
268
|
+
// ── uncaught exceptions ────────────────────────────────────────────────────────
|
|
269
|
+
|
|
270
|
+
function readExcRecord(dir: string): Record<string, any> | undefined {
|
|
271
|
+
const content = fs.readFileSync(path.join(dir, 'logs', 'myscript.log'), 'utf-8');
|
|
272
|
+
return content.trim().split('\n').map(l => JSON.parse(l)).find(o => o.logger === EXCEPTION_LOGGER);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
test('uncaught exception writes a structured record even with summary off', () => {
|
|
276
|
+
const dir = tmpDir();
|
|
277
|
+
configureLogging(makeCfg(dir, { summary: false }));
|
|
278
|
+
const cap = captureStderr();
|
|
279
|
+
_handleUncaught(new TypeError('invalid quality 200'));
|
|
280
|
+
cap.restore();
|
|
281
|
+
const rec = readExcRecord(dir);
|
|
282
|
+
expect(rec).toBeDefined();
|
|
283
|
+
expect(rec!.level).toBe('CRITICAL');
|
|
284
|
+
expect(rec!.exc_structured.type).toBe('TypeError');
|
|
285
|
+
expect(rec!.exc_structured.message).toBe('invalid quality 200');
|
|
286
|
+
expect(Array.isArray(rec!.exc_structured.frames)).toBe(true);
|
|
287
|
+
expect(rec!.exc).toBeDefined(); // full stack string also present
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test('without --debug the console shows a one-liner, not a traceback', () => {
|
|
291
|
+
const dir = tmpDir();
|
|
292
|
+
configureLogging(makeCfg(dir, { debug: false }));
|
|
293
|
+
const cap = captureStderr();
|
|
294
|
+
_handleUncaught(new Error('boom'));
|
|
295
|
+
cap.restore();
|
|
296
|
+
const joined = cap.lines.join('');
|
|
297
|
+
expect(joined).toContain('ERROR: Error: boom');
|
|
298
|
+
expect(joined).toContain('run with --debug');
|
|
299
|
+
expect(joined).not.toContain('\n at '); // no raw V8 stack dump
|
|
300
|
+
expect(readExcRecord(dir)).toBeDefined();
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test('with --debug the console shows a compact aligned trace', () => {
|
|
304
|
+
const dir = tmpDir();
|
|
305
|
+
configureLogging(makeCfg(dir, { debug: true }));
|
|
306
|
+
const cap = captureStderr();
|
|
307
|
+
_handleUncaught(new Error('boom'));
|
|
308
|
+
cap.restore();
|
|
309
|
+
const joined = cap.lines.join('');
|
|
310
|
+
expect(joined).toContain('Error: boom');
|
|
311
|
+
expect(joined).not.toContain('run with --debug'); // hint only in quiet mode
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
test('the exception record is not echoed to the console handlers', () => {
|
|
315
|
+
const dir = tmpDir();
|
|
316
|
+
const stdoutLines: string[] = [];
|
|
317
|
+
const stderrLines: string[] = [];
|
|
318
|
+
const o = jest.spyOn(process.stdout, 'write').mockImplementation((c) => { stdoutLines.push(String(c)); return true; });
|
|
319
|
+
const e = jest.spyOn(process.stderr, 'write').mockImplementation((c) => { stderrLines.push(String(c)); return true; });
|
|
320
|
+
configureLogging(makeCfg(dir, { debug: false }));
|
|
321
|
+
_handleUncaught(new Error('boom'));
|
|
322
|
+
o.mockRestore();
|
|
323
|
+
e.mockRestore();
|
|
324
|
+
// The structured JSON record is file-only; only our one-liner hits stderr.
|
|
325
|
+
expect(stdoutLines.join('')).not.toContain('uncaught exception');
|
|
326
|
+
expect(stderrLines.join('')).not.toContain('"logger":"runspec.exception"');
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
test('buildExcStructured parses frames innermost-last with module', () => {
|
|
330
|
+
const err = new Error('x');
|
|
331
|
+
err.stack = [
|
|
332
|
+
'Error: x',
|
|
333
|
+
' at inner (/app/deep.js:5:10)',
|
|
334
|
+
' at outer (/app/main.js:20:3)',
|
|
335
|
+
].join('\n');
|
|
336
|
+
const es = buildExcStructured(err);
|
|
337
|
+
expect(es.type).toBe('Error');
|
|
338
|
+
expect(es.frames.map(f => f.func)).toEqual(['outer', 'inner']); // innermost last
|
|
339
|
+
expect(es.module).toBe('deep');
|
|
340
|
+
expect(es.frames[0]).toEqual({ func: 'outer', file: '/app/main.js', line: 20, code: null });
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test('formatCompactTrace drops internal runspec frames but keeps user frames', () => {
|
|
344
|
+
const err = new Error('x');
|
|
345
|
+
// RUNSPEC_PKG_DIR is the dir of the logging_setup module (the package source).
|
|
346
|
+
const pkgDir = path.resolve(__dirname, '..', 'src');
|
|
347
|
+
const frames = [
|
|
348
|
+
{ func: 'parse', file: path.join(pkgDir, 'parser.ts'), line: 10, code: null },
|
|
349
|
+
{ func: 'main', file: '/app/deploy.js', line: 42, code: null },
|
|
350
|
+
];
|
|
351
|
+
const out = formatCompactTrace(err, frames);
|
|
352
|
+
expect(out).toContain('deploy.js:42');
|
|
353
|
+
expect(out).not.toContain('parser.ts:10');
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('formatCompactTrace falls back to full list when every frame is internal', () => {
|
|
357
|
+
const err = new Error('x');
|
|
358
|
+
const pkgDir = path.resolve(__dirname, '..', 'src');
|
|
359
|
+
const frames = [{ func: 'parse', file: path.join(pkgDir, 'parser.ts'), line: 10, code: null }];
|
|
360
|
+
expect(formatCompactTrace(err, frames)).toContain('parser.ts:10');
|
|
361
|
+
});
|