runspec-node 0.7.0 → 0.9.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/loader.js CHANGED
@@ -51,10 +51,43 @@ function loadRaw(configPath) {
51
51
  };
52
52
  }
53
53
  function normaliseConfig(raw) {
54
+ const rawHosts = (raw['jump-hosts'] ?? {});
55
+ const jumpHosts = {};
56
+ for (const [name, cfg] of Object.entries(rawHosts)) {
57
+ jumpHosts[name] = normaliseJumpHost(cfg);
58
+ }
54
59
  return {
55
60
  autonomyDefault: raw['autonomy-default'] ?? 'confirm',
56
61
  lang: raw['lang'],
57
62
  version: String(raw['version'] ?? '1'),
63
+ jumpHosts,
64
+ logging: normaliseLogging(raw['logging']),
65
+ };
66
+ }
67
+ const VALID_LOG_LEVELS = new Set(['debug', 'info', 'warning', 'error', 'critical']);
68
+ function normaliseLogging(raw) {
69
+ if (raw === undefined)
70
+ return undefined;
71
+ const level = String(raw['level'] ?? 'info').toLowerCase();
72
+ if (!VALID_LOG_LEVELS.has(level)) {
73
+ const sorted = [...VALID_LOG_LEVELS].sort().join(', ');
74
+ throw new Error(`✗ [config.logging] level must be one of: ${sorted}. Got: ${JSON.stringify(level)}`);
75
+ }
76
+ return {
77
+ level,
78
+ rotate: String(raw['rotate'] ?? 'midnight'),
79
+ keep: Number(raw['keep'] ?? 7),
80
+ };
81
+ }
82
+ function normaliseJumpHost(raw) {
83
+ return {
84
+ host: raw['host'],
85
+ user: raw['user'],
86
+ port: raw['port'],
87
+ sshKey: raw['ssh-key'],
88
+ bin: raw['bin'],
89
+ useSshConfig: raw['use-ssh-config'],
90
+ sshOptions: raw['ssh-options'],
58
91
  };
59
92
  }
60
93
  function normaliseRunnables(raw) {
@@ -92,6 +125,7 @@ function normaliseArg(name, raw) {
92
125
  multiple: raw['multiple'] ?? false,
93
126
  delimiter: raw['delimiter'],
94
127
  short: raw['short'],
128
+ position: raw['position'],
95
129
  env: raw['env'],
96
130
  deprecated: raw['deprecated'],
97
131
  autonomy: raw['autonomy'],
@@ -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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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Configure a lightweight logger from [config.logging]. Zero new deps — uses
3
+ * only Node stdlib (fs, path, os). Call configureLogging() once from parse();
4
+ * runnables call getLogger(name) to obtain a named Logger.
5
+ */
6
+ import type { LoggingConfig } from './models';
7
+ export declare class Logger {
8
+ private readonly name;
9
+ constructor(name: string);
10
+ debug(msg: string, error?: Error): void;
11
+ info(msg: string, error?: Error): void;
12
+ warning(msg: string, error?: Error): void;
13
+ warn(msg: string, error?: Error): void;
14
+ error(msg: string, error?: Error): void;
15
+ critical(msg: string, error?: Error): void;
16
+ private _emit;
17
+ }
18
+ export declare function getLogger(name: string): Logger;
19
+ declare function _periodForDate(d: Date, when: 'daily' | 'midnight' | 'weekly'): string;
20
+ export interface ConfigureLoggingOptions {
21
+ logCfg: LoggingConfig | undefined;
22
+ agent: boolean;
23
+ runnableName: string;
24
+ configPath: string;
25
+ logLevelOverride?: string;
26
+ }
27
+ export declare function configureLogging(opts: ConfigureLoggingOptions): void;
28
+ export declare function _resetForTest(): void;
29
+ export { _periodForDate };
30
+ //# sourceMappingURL=logging_setup.d.ts.map
@@ -0,0 +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;AAyD9C,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAEzC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IACvC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IACtC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAE1C,OAAO,CAAC,KAAK;CAOd;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C;AAkFD,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAU9E;AAyED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAepE;AAID,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * Configure a lightweight logger from [config.logging]. Zero new deps — uses
4
+ * only Node stdlib (fs, path, os). Call configureLogging() once from parse();
5
+ * runnables call getLogger(name) to obtain a named Logger.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.Logger = void 0;
42
+ exports.getLogger = getLogger;
43
+ exports.configureLogging = configureLogging;
44
+ exports._resetForTest = _resetForTest;
45
+ exports._periodForDate = _periodForDate;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const os = __importStar(require("os"));
49
+ // ── internal state ────────────────────────────────────────────────────────────
50
+ let _configured = false;
51
+ const _loggers = new Map();
52
+ const _handlers = [];
53
+ // ── level map ─────────────────────────────────────────────────────────────────
54
+ const LEVEL_NUM = {
55
+ debug: 10, info: 20, warning: 30, error: 40, critical: 50,
56
+ };
57
+ const LEVEL_LABEL = {
58
+ 10: 'DEBUG', 20: 'INFO', 30: 'WARNING', 40: 'ERROR', 50: 'CRITICAL',
59
+ };
60
+ // ── sensitive data redaction ──────────────────────────────────────────────────
61
+ const SENSITIVE = [
62
+ [/(password|passwd|pwd)\s*[=:]\s*\S+/gi, '$1=[REDACTED]'],
63
+ [/(token|api[_-]?key|secret)\s*[=:]\s*\S+/gi, '$1=[REDACTED]'],
64
+ [/Authorization:\s*(Bearer|Basic)\s+\S+/gi, 'Authorization: $1 [REDACTED]'],
65
+ [/https?:\/\/[^:@\s]+:[^@\s]+@/g, 'https://[REDACTED]@'],
66
+ [/"(password|token|api_key|secret)"\s*:\s*"[^"]*"/gi, '"$1": "[REDACTED]"'],
67
+ [/(password|passwd|token)=([^&\s"]+)/gi, '$1=[REDACTED]'],
68
+ ];
69
+ function redact(msg) {
70
+ try {
71
+ for (const [pattern, replacement] of SENSITIVE) {
72
+ msg = msg.replace(pattern, replacement);
73
+ }
74
+ }
75
+ catch {
76
+ // never disrupt logging on redaction errors
77
+ }
78
+ return msg;
79
+ }
80
+ // ── Logger ────────────────────────────────────────────────────────────────────
81
+ class Logger {
82
+ name;
83
+ constructor(name) {
84
+ this.name = name;
85
+ }
86
+ debug(msg, error) { this._emit(10, msg, error); }
87
+ info(msg, error) { this._emit(20, msg, error); }
88
+ warning(msg, error) { this._emit(30, msg, error); }
89
+ warn(msg, error) { this._emit(30, msg, error); }
90
+ error(msg, error) { this._emit(40, msg, error); }
91
+ critical(msg, error) { this._emit(50, msg, error); }
92
+ _emit(levelNum, message, error) {
93
+ if (_handlers.length === 0)
94
+ return;
95
+ const record = { ts: new Date(), levelNum, loggerName: this.name, message: redact(message), error };
96
+ for (const h of _handlers) {
97
+ if (levelNum >= h.level)
98
+ h.emit(record);
99
+ }
100
+ }
101
+ }
102
+ exports.Logger = Logger;
103
+ function getLogger(name) {
104
+ let logger = _loggers.get(name);
105
+ if (!logger) {
106
+ logger = new Logger(name);
107
+ _loggers.set(name, logger);
108
+ }
109
+ return logger;
110
+ }
111
+ // ── formatters ────────────────────────────────────────────────────────────────
112
+ function formatJson(record) {
113
+ const obj = {
114
+ ts: record.ts.toISOString(),
115
+ level: LEVEL_LABEL[record.levelNum] ?? String(record.levelNum),
116
+ logger: record.loggerName,
117
+ message: record.message,
118
+ };
119
+ if (record.error)
120
+ obj['exc'] = record.error.stack ?? record.error.message;
121
+ return JSON.stringify(obj);
122
+ }
123
+ function formatHuman(record, showTracebacks) {
124
+ const hh = String(record.ts.getHours()).padStart(2, '0');
125
+ const mm = String(record.ts.getMinutes()).padStart(2, '0');
126
+ const ss = String(record.ts.getSeconds()).padStart(2, '0');
127
+ const time = `${hh}:${mm}:${ss}`;
128
+ const label = (LEVEL_LABEL[record.levelNum] ?? String(record.levelNum)).padEnd(8);
129
+ let line = `${time} ${label} ${record.loggerName}: ${record.message}`;
130
+ if (showTracebacks && record.error)
131
+ line += `\n${record.error.stack ?? record.error.message}`;
132
+ return line;
133
+ }
134
+ // ── console handler ───────────────────────────────────────────────────────────
135
+ class ConsoleHandler {
136
+ level;
137
+ showTracebacks;
138
+ constructor(level, showTracebacks) {
139
+ this.level = level;
140
+ this.showTracebacks = showTracebacks;
141
+ }
142
+ emit(record) {
143
+ try {
144
+ process.stderr.write(formatHuman(record, this.showTracebacks) + '\n');
145
+ }
146
+ catch {
147
+ // never disrupt
148
+ }
149
+ }
150
+ }
151
+ // ── rotating file handlers ────────────────────────────────────────────────────
152
+ function doRotate(logPath, keep) {
153
+ for (let i = keep; i >= 1; i--) {
154
+ const src = `${logPath}.${i}`;
155
+ if (i === keep) {
156
+ try {
157
+ fs.unlinkSync(src);
158
+ }
159
+ catch { /* already gone */ }
160
+ }
161
+ else {
162
+ try {
163
+ fs.renameSync(src, `${logPath}.${i + 1}`);
164
+ }
165
+ catch { /* missing backup */ }
166
+ }
167
+ }
168
+ try {
169
+ fs.renameSync(logPath, `${logPath}.1`);
170
+ }
171
+ catch { /* current file missing */ }
172
+ }
173
+ class SizeRotatingFileHandler {
174
+ logPath;
175
+ maxBytes;
176
+ keep;
177
+ level = 10; // always DEBUG
178
+ constructor(logPath, maxBytes, keep) {
179
+ this.logPath = logPath;
180
+ this.maxBytes = maxBytes;
181
+ this.keep = keep;
182
+ }
183
+ emit(record) {
184
+ try {
185
+ this._rotateIfNeeded();
186
+ fs.appendFileSync(this.logPath, formatJson(record) + '\n', 'utf-8');
187
+ }
188
+ catch {
189
+ // never disrupt
190
+ }
191
+ }
192
+ _rotateIfNeeded() {
193
+ try {
194
+ if (fs.statSync(this.logPath).size < this.maxBytes)
195
+ return;
196
+ }
197
+ catch {
198
+ return; // file doesn't exist yet
199
+ }
200
+ doRotate(this.logPath, this.keep);
201
+ }
202
+ }
203
+ function _periodForDate(d, when) {
204
+ if (when === 'weekly') {
205
+ const tmp = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
206
+ const day = tmp.getUTCDay() || 7;
207
+ tmp.setUTCDate(tmp.getUTCDate() + 4 - day);
208
+ const yearStart = new Date(Date.UTC(tmp.getUTCFullYear(), 0, 1));
209
+ const week = Math.ceil(((tmp.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
210
+ return `${tmp.getUTCFullYear()}-W${week}`;
211
+ }
212
+ return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
213
+ }
214
+ class TimedRotatingFileHandler {
215
+ logPath;
216
+ when;
217
+ keep;
218
+ level = 10;
219
+ constructor(logPath, when, keep) {
220
+ this.logPath = logPath;
221
+ this.when = when;
222
+ this.keep = keep;
223
+ }
224
+ emit(record) {
225
+ try {
226
+ this._rotateIfNeeded();
227
+ fs.appendFileSync(this.logPath, formatJson(record) + '\n', 'utf-8');
228
+ }
229
+ catch {
230
+ // never disrupt
231
+ }
232
+ }
233
+ _rotateIfNeeded() {
234
+ let filePeriod;
235
+ try {
236
+ filePeriod = _periodForDate(fs.statSync(this.logPath).mtime, this.when);
237
+ }
238
+ catch {
239
+ return; // file doesn't exist yet
240
+ }
241
+ if (filePeriod === _periodForDate(new Date(), this.when))
242
+ return;
243
+ doRotate(this.logPath, this.keep);
244
+ }
245
+ }
246
+ // ── size/rotate parser ────────────────────────────────────────────────────────
247
+ const SIZE_RE = /^(\d+(?:\.\d+)?)\s*(KB|MB|GB)$/i;
248
+ const SIZE_MULT = { KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };
249
+ const TIMED_KEYS = new Set(['daily', 'midnight', 'weekly']);
250
+ function makeFileHandler(logPath, rotate, keep) {
251
+ const sizeMatch = SIZE_RE.exec(rotate);
252
+ if (sizeMatch) {
253
+ const maxBytes = Math.round(parseFloat(sizeMatch[1]) * SIZE_MULT[sizeMatch[2].toUpperCase()]);
254
+ return new SizeRotatingFileHandler(logPath, maxBytes, keep);
255
+ }
256
+ const when = rotate.toLowerCase();
257
+ if (TIMED_KEYS.has(when)) {
258
+ return new TimedRotatingFileHandler(logPath, when, keep);
259
+ }
260
+ throw new Error(`✗ [config.logging] rotate ${JSON.stringify(rotate)} not recognised.\n` +
261
+ ` Valid: '10 MB', '100 KB', '1 GB', 'daily', 'midnight', 'weekly'`);
262
+ }
263
+ // ── log dir resolution ────────────────────────────────────────────────────────
264
+ function resolveLogDir(configPath) {
265
+ const candidate = path.join(path.dirname(configPath), 'logs');
266
+ try {
267
+ fs.mkdirSync(candidate, { recursive: true });
268
+ const probe = path.join(candidate, '.wtest');
269
+ fs.writeFileSync(probe, '');
270
+ fs.unlinkSync(probe);
271
+ return candidate;
272
+ }
273
+ catch {
274
+ const fallback = path.join(os.homedir(), 'logs');
275
+ fs.mkdirSync(fallback, { recursive: true });
276
+ return fallback;
277
+ }
278
+ }
279
+ function configureLogging(opts) {
280
+ if (!opts.logCfg || _configured)
281
+ return;
282
+ const effectiveLevelName = opts.logLevelOverride ?? opts.logCfg.level;
283
+ const effectiveLevel = LEVEL_NUM[effectiveLevelName] ?? LEVEL_NUM['info'];
284
+ if (!opts.agent) {
285
+ _handlers.push(new ConsoleHandler(effectiveLevel, effectiveLevelName === 'debug'));
286
+ }
287
+ const logDir = resolveLogDir(opts.configPath);
288
+ const logPath = path.join(logDir, `${opts.runnableName}.log`);
289
+ _handlers.push(makeFileHandler(logPath, opts.logCfg.rotate, opts.logCfg.keep));
290
+ _configured = true;
291
+ }
292
+ // ── test helper ───────────────────────────────────────────────────────────────
293
+ function _resetForTest() {
294
+ _configured = false;
295
+ _loggers.clear();
296
+ _handlers.length = 0;
297
+ }
298
+ //# sourceMappingURL=logging_setup.js.map
@@ -0,0 +1 @@
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
@@ -1,7 +1,23 @@
1
+ export interface JumpHostConfig {
2
+ host: string;
3
+ user?: string;
4
+ port?: number;
5
+ sshKey?: string;
6
+ bin?: string;
7
+ useSshConfig?: boolean;
8
+ sshOptions?: string[];
9
+ }
10
+ export interface LoggingConfig {
11
+ level: string;
12
+ rotate: string;
13
+ keep: number;
14
+ }
1
15
  export interface RawConfig {
2
16
  autonomyDefault: string;
3
17
  lang?: string;
4
18
  version: string;
19
+ jumpHosts: Record<string, JumpHostConfig>;
20
+ logging?: LoggingConfig;
5
21
  }
6
22
  export interface ArgSpec {
7
23
  name: string;
@@ -14,6 +30,7 @@ export interface ArgSpec {
14
30
  multiple?: boolean;
15
31
  delimiter?: string;
16
32
  short?: string;
33
+ position?: number;
17
34
  env?: string;
18
35
  deprecated?: string;
19
36
  autonomy?: string;
@@ -46,11 +63,14 @@ export interface RawSpec {
46
63
  }
47
64
  export interface ParsedArgs {
48
65
  [key: string]: unknown;
49
- readonly __agent__: boolean;
50
- readonly __script__: string;
51
- readonly __command__: string | undefined;
52
- readonly __autonomy__: string;
53
- readonly __source__: string;
54
- readonly __spec__: ScriptSpec;
66
+ readonly __runspec_agent__: boolean;
67
+ readonly __runspec_script__: string;
68
+ readonly __runspec_command_path__: string[];
69
+ readonly __runspec_autonomy__: string;
70
+ readonly __runspec_source__: string;
71
+ readonly __runspec_spec__: ScriptSpec;
72
+ readonly runspec_command: string | undefined;
73
+ readonly runspec_command_path: string[];
74
+ readonly runspec_prefix: string;
55
75
  }
56
76
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts CHANGED
@@ -3,6 +3,7 @@ export interface ParseOptions {
3
3
  scriptName?: string;
4
4
  argv?: string[];
5
5
  cwd?: string;
6
+ configPath?: string;
6
7
  }
7
8
  export declare function parse(opts?: ParseOptions): ParsedArgs;
8
9
  export declare function loadSpec(opts?: ParseOptions): ParsedArgs;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAW,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,KAAK,CAAC,IAAI,GAAE,YAAiB,GAAG,UAAU,CA4DzD;AAED,wBAAgB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,UAAU,CAE5D;AAsHD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAyClF"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAW,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,KAAK,CAAC,IAAI,GAAE,YAAiB,GAAG,UAAU,CAmGzD;AAED,wBAAgB,QAAQ,CAAC,IAAI,GAAE,YAAiB,GAAG,UAAU,CAE5D;AA0ID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAyClF"}
package/dist/parser.js CHANGED
@@ -43,9 +43,10 @@ const inference_1 = require("./inference");
43
43
  const types_1 = require("./types");
44
44
  const validator_1 = require("./validator");
45
45
  const errors_1 = require("./errors");
46
+ const logging_setup_1 = require("./logging_setup");
46
47
  function parse(opts = {}) {
47
- const { scriptName, argv: argvOverride, cwd } = opts;
48
- const { configPath } = (0, finder_1.findConfig)(cwd);
48
+ const { scriptName, argv: argvOverride, cwd, configPath: configPathOverride } = opts;
49
+ const { configPath } = configPathOverride ? { configPath: configPathOverride } : (0, finder_1.findConfig)(cwd);
49
50
  const raw = (0, loader_1.loadRaw)(configPath);
50
51
  const config = raw.config;
51
52
  const name = scriptName ?? inferFromArgv();
@@ -57,18 +58,37 @@ function parse(opts = {}) {
57
58
  const available = Object.keys(raw.runnables).join(', ') || '(none)';
58
59
  throw new errors_1.RunSpecError(`✗ Runnable '${name}' not found.\n Available: ${available}\n Config: ${configPath}`);
59
60
  }
60
- const rawScript = (0, inference_1.inferScript)(raw.runnables[name], config.autonomyDefault);
61
+ let rawScript = (0, inference_1.inferScript)(raw.runnables[name], config.autonomyDefault);
62
+ // Auto-inject --log-level when [config.logging] is present
63
+ if (config.logging && !('log-level' in rawScript.args)) {
64
+ rawScript = {
65
+ ...rawScript,
66
+ args: {
67
+ ...rawScript.args,
68
+ 'log-level': {
69
+ name: 'log-level',
70
+ type: 'choice',
71
+ options: ['debug', 'info', 'warning', 'error', 'critical'],
72
+ default: config.logging.level,
73
+ required: false,
74
+ description: 'Override the console log level for this invocation.',
75
+ multiple: false,
76
+ env: 'RUNSPEC_LOG_LEVEL',
77
+ },
78
+ },
79
+ };
80
+ }
61
81
  let argv = argvOverride ?? process.argv.slice(2);
62
82
  let activeScript = rawScript;
63
- let activeCommand;
83
+ let commandPath = [];
64
84
  const commands = rawScript.commands ?? {};
65
85
  if (Object.keys(commands).length > 0 && argv.length > 0 && argv[0] in commands) {
66
- activeCommand = argv[0];
86
+ commandPath = [argv[0]];
67
87
  activeScript = commands[argv[0]];
68
88
  argv = argv.slice(1);
69
89
  }
70
90
  if (argv.includes('--help') || argv.includes('-h')) {
71
- printHelp(name, activeScript, activeCommand);
91
+ printHelp(name, activeScript, commandPath.length > 0 ? commandPath[commandPath.length - 1] : undefined);
72
92
  process.exit(0);
73
93
  }
74
94
  let parsedValues = parseArgv(argv, activeScript.args ?? {});
@@ -79,14 +99,32 @@ function parse(opts = {}) {
79
99
  const coercedValues = coerceValues(parsedValues, activeScript.args ?? {});
80
100
  const autonomy = (0, inference_1.effectiveAutonomy)(activeScript.autonomy ?? config.autonomyDefault, parsedValues, activeScript.args ?? {});
81
101
  const agent = ['1', 'true', 'yes'].includes((process.env['RUNSPEC_AGENT'] ?? '').toLowerCase());
102
+ const logLevelOverride = config.logging
103
+ ? coercedValues['log_level'] ?? undefined
104
+ : undefined;
105
+ try {
106
+ (0, logging_setup_1.configureLogging)({
107
+ logCfg: config.logging,
108
+ agent,
109
+ runnableName: name,
110
+ configPath,
111
+ logLevelOverride,
112
+ });
113
+ }
114
+ catch (e) {
115
+ throw new errors_1.RunSpecError(e.message);
116
+ }
82
117
  return {
83
118
  ...coercedValues,
84
- __agent__: agent,
85
- __script__: name,
86
- __command__: activeCommand,
87
- __autonomy__: autonomy,
88
- __source__: configPath,
89
- __spec__: activeScript,
119
+ __runspec_agent__: agent,
120
+ __runspec_script__: name,
121
+ __runspec_command_path__: commandPath,
122
+ __runspec_autonomy__: autonomy,
123
+ __runspec_source__: configPath,
124
+ __runspec_spec__: activeScript,
125
+ get runspec_command() { return commandPath.length > 0 ? commandPath[commandPath.length - 1] : undefined; },
126
+ get runspec_command_path() { return commandPath; },
127
+ get runspec_prefix() { return path.dirname(configPath); },
90
128
  };
91
129
  }
92
130
  function loadSpec(opts = {}) {
@@ -106,13 +144,26 @@ function parseArgv(argv, argSpecs) {
106
144
  if (spec.short)
107
145
  shortMap[spec.short] = norm;
108
146
  }
147
+ // Positional args sorted by position index; rest arg (type='rest') collects post-'--' tokens
148
+ const positionalArgs = Object.entries(argSpecs)
149
+ .filter(([, s]) => s.position !== undefined)
150
+ .sort(([, a], [, b]) => (a.position ?? 0) - (b.position ?? 0))
151
+ .map(([name]) => name.replace(/-/g, '_'));
152
+ const restArgNorm = Object.entries(argSpecs).find(([, s]) => s.type === 'rest')?.[0]?.replace(/-/g, '_');
109
153
  const result = {};
110
154
  for (const name of Object.keys(argSpecs)) {
111
155
  result[name.replace(/-/g, '_')] = undefined;
112
156
  }
157
+ let positionalIndex = 0;
113
158
  let i = 0;
114
159
  while (i < argv.length) {
115
160
  const token = argv[i];
161
+ // '--' separator: remaining tokens go to the rest arg
162
+ if (token === '--') {
163
+ if (restArgNorm !== undefined)
164
+ result[restArgNorm] = argv.slice(i + 1);
165
+ break;
166
+ }
116
167
  if (token.startsWith('--') && token.includes('=')) {
117
168
  const eqIdx = token.indexOf('=');
118
169
  const key = token.slice(0, eqIdx);
@@ -148,6 +199,11 @@ function parseArgv(argv, argSpecs) {
148
199
  }
149
200
  continue;
150
201
  }
202
+ // Unrecognized non-flag token: assign to next positional arg
203
+ if (!token.startsWith('-') && positionalIndex < positionalArgs.length) {
204
+ result[positionalArgs[positionalIndex]] = token;
205
+ positionalIndex++;
206
+ }
151
207
  i++;
152
208
  }
153
209
  return result;