@ai-dossier/cli 0.14.0 → 0.18.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/README.md +155 -0
- package/dist/cache-resolver.d.ts.map +1 -1
- package/dist/cache-resolver.js +2 -11
- package/dist/cache-resolver.js.map +1 -1
- package/dist/cap-log.d.ts +31 -0
- package/dist/cap-log.d.ts.map +1 -0
- package/dist/cap-log.js +30 -0
- package/dist/cap-log.js.map +1 -0
- package/dist/capability.d.ts +108 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +407 -0
- package/dist/capability.js.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/cap.d.ts +13 -0
- package/dist/commands/cap.d.ts.map +1 -0
- package/dist/commands/cap.js +105 -0
- package/dist/commands/cap.js.map +1 -0
- package/dist/commands/plan.d.ts +20 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +323 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/runstate.d.ts.map +1 -1
- package/dist/commands/runstate.js +51 -290
- package/dist/commands/runstate.js.map +1 -1
- package/dist/commands/sched.d.ts +11 -0
- package/dist/commands/sched.d.ts.map +1 -0
- package/dist/commands/sched.js +402 -0
- package/dist/commands/sched.js.map +1 -0
- package/dist/gh.d.ts +155 -0
- package/dist/gh.d.ts.map +1 -0
- package/dist/gh.js +357 -0
- package/dist/gh.js.map +1 -0
- package/dist/helpers.d.ts +7 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +19 -0
- package/dist/helpers.js.map +1 -1
- package/dist/issue-selection.js +2 -2
- package/dist/issue-selection.js.map +1 -1
- package/dist/jsonl-log.d.ts +14 -0
- package/dist/jsonl-log.d.ts.map +1 -0
- package/dist/jsonl-log.js +32 -0
- package/dist/jsonl-log.js.map +1 -0
- package/dist/plan-artifact.d.ts +123 -0
- package/dist/plan-artifact.d.ts.map +1 -0
- package/dist/plan-artifact.js +213 -0
- package/dist/plan-artifact.js.map +1 -0
- package/dist/run-log.d.ts.map +1 -1
- package/dist/run-log.js +2 -9
- package/dist/run-log.js.map +1 -1
- package/dist/runstate.d.ts +0 -2
- package/dist/runstate.d.ts.map +1 -1
- package/dist/runstate.js +2 -5
- package/dist/runstate.js.map +1 -1
- package/dist/version.d.ts +10 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +23 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Capability manifest engine (RFC-0001 capabilities, issue #463).
|
|
4
|
+
*
|
|
5
|
+
* A repo declares its deterministic, recurring operations (test, lint, build,
|
|
6
|
+
* dependency install, worktree prep, …) in `.dossier/automation/manifest.yaml`.
|
|
7
|
+
* `ai-dossier cap list` inspects the manifest; `ai-dossier cap run <id>` executes
|
|
8
|
+
* one capability and reports one of exactly four outcomes, distinguishable by
|
|
9
|
+
* exit code and by a JSON envelope printed as the final stdout line:
|
|
10
|
+
*
|
|
11
|
+
* ok exit 0 — command ran, exit 0
|
|
12
|
+
* task-failed exit 1 — command ran, nonzero exit (e.g. red tests)
|
|
13
|
+
* automation-broken exit 2 — assumption probe failed, command missing,
|
|
14
|
+
* abnormal termination, timeout, or an
|
|
15
|
+
* invalid manifest
|
|
16
|
+
* capability-unavailable exit 3 — id not in the manifest (or lifecycle=shadow)
|
|
17
|
+
*
|
|
18
|
+
* The engine is pure logic (no CLI dependencies) so the scheduler's slot-cycle
|
|
19
|
+
* fast path (#464) can consume it directly later.
|
|
20
|
+
*/
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.CapManifestError = exports.CAPABILITY_EXIT_CODES = exports.MANIFEST_FILE = exports.AUTOMATION_DIR = void 0;
|
|
26
|
+
exports.loadCapabilityManifest = loadCapabilityManifest;
|
|
27
|
+
exports.parseCapabilityManifest = parseCapabilityManifest;
|
|
28
|
+
exports.evaluateProbe = evaluateProbe;
|
|
29
|
+
exports.shellQuote = shellQuote;
|
|
30
|
+
exports.runCapabilityFromCwd = runCapabilityFromCwd;
|
|
31
|
+
exports.runCapability = runCapability;
|
|
32
|
+
const node_child_process_1 = require("node:child_process");
|
|
33
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
34
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
35
|
+
const yaml_1 = require("yaml");
|
|
36
|
+
const version_1 = require("./version");
|
|
37
|
+
/** Directory (relative to the run directory) that holds the automation manifest. */
|
|
38
|
+
exports.AUTOMATION_DIR = '.dossier/automation';
|
|
39
|
+
/** File name of the manifest inside {@link AUTOMATION_DIR}. */
|
|
40
|
+
exports.MANIFEST_FILE = 'manifest.yaml';
|
|
41
|
+
/** The four-way outcome contract, as process exit codes. */
|
|
42
|
+
exports.CAPABILITY_EXIT_CODES = {
|
|
43
|
+
ok: 0,
|
|
44
|
+
'task-failed': 1,
|
|
45
|
+
'automation-broken': 2,
|
|
46
|
+
'capability-unavailable': 3,
|
|
47
|
+
};
|
|
48
|
+
// Shell exit-code semantics: 126 = found but not executable, 127 = not found,
|
|
49
|
+
// 128+N = the command was killed by signal N (as reported by sh).
|
|
50
|
+
const SHELL_EXIT_NOT_EXECUTABLE = 126;
|
|
51
|
+
const SHELL_EXIT_COMMAND_NOT_FOUND = 127;
|
|
52
|
+
const SHELL_SIGNAL_EXIT_BASE = 128;
|
|
53
|
+
/** Fixed cap on any single `<tool> --version` probe so a hung tool cannot hang `cap run`. */
|
|
54
|
+
const PROBE_TIMEOUT_MS = 10_000;
|
|
55
|
+
/** Default per-entry command timeout when the manifest does not set `timeout_ms`. */
|
|
56
|
+
const DEFAULT_COMMAND_TIMEOUT_MS = 5 * 60_000;
|
|
57
|
+
/** Supported tool-version comparison operators (single source of truth). */
|
|
58
|
+
const TOOL_VERSION_OPS = ['>=', '>', '<=', '<', '==', '='];
|
|
59
|
+
const TOOL_VERSION_OPS_DISPLAY = [...TOOL_VERSION_OPS].sort().join(' ');
|
|
60
|
+
const TOOL_VERSION_RE = new RegExp(`^([A-Za-z0-9._/-]+)\\s*(${[...TOOL_VERSION_OPS].sort((a, b) => b.length - a.length).join('|')})\\s*(.+)$`);
|
|
61
|
+
const OP_SATISFIED = {
|
|
62
|
+
'>=': (c) => c >= 0,
|
|
63
|
+
'>': (c) => c > 0,
|
|
64
|
+
'<=': (c) => c <= 0,
|
|
65
|
+
'<': (c) => c < 0,
|
|
66
|
+
'=': (c) => c === 0,
|
|
67
|
+
'==': (c) => c === 0,
|
|
68
|
+
};
|
|
69
|
+
/** The manifest exists but does not conform to the schema. */
|
|
70
|
+
class CapManifestError extends Error {
|
|
71
|
+
constructor(message) {
|
|
72
|
+
super(message);
|
|
73
|
+
this.name = 'CapManifestError';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.CapManifestError = CapManifestError;
|
|
77
|
+
const CAPABILITY_ID_RE = /^[a-z0-9][a-z0-9-]*(\.[a-z0-9][a-z0-9-]*)*$/;
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Manifest loading and validation
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/**
|
|
82
|
+
* Load the capability manifest for a directory. Absent `.dossier/automation/`
|
|
83
|
+
* is the normal portable state: returns an empty manifest with `path: null`.
|
|
84
|
+
* A present-but-invalid manifest throws {@link CapManifestError} whose message
|
|
85
|
+
* names the file.
|
|
86
|
+
*/
|
|
87
|
+
function loadCapabilityManifest(cwd) {
|
|
88
|
+
const manifestPath = node_path_1.default.resolve(cwd, exports.AUTOMATION_DIR, exports.MANIFEST_FILE);
|
|
89
|
+
if (!node_fs_1.default.existsSync(manifestPath)) {
|
|
90
|
+
return { path: null, capabilities: {} };
|
|
91
|
+
}
|
|
92
|
+
let text;
|
|
93
|
+
try {
|
|
94
|
+
text = node_fs_1.default.readFileSync(manifestPath, 'utf-8');
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
throw new CapManifestError(`${manifestPath}: cannot read: ${err.message}`);
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const capabilities = parseCapabilityManifest(text);
|
|
101
|
+
return { path: manifestPath, capabilities };
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
if (err instanceof CapManifestError) {
|
|
105
|
+
throw new CapManifestError(`${manifestPath}: ${err.message}`);
|
|
106
|
+
}
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Parse and validate manifest YAML into the capability map. */
|
|
111
|
+
function parseCapabilityManifest(text) {
|
|
112
|
+
let doc;
|
|
113
|
+
try {
|
|
114
|
+
doc = (0, yaml_1.parse)(text);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
throw new CapManifestError(`not valid YAML: ${err.message}`);
|
|
118
|
+
}
|
|
119
|
+
if (doc === null || doc === undefined) {
|
|
120
|
+
return {};
|
|
121
|
+
}
|
|
122
|
+
if (typeof doc !== 'object' || Array.isArray(doc)) {
|
|
123
|
+
throw new CapManifestError('root must be a mapping');
|
|
124
|
+
}
|
|
125
|
+
const root = doc;
|
|
126
|
+
if (root.version !== undefined && root.version !== 1) {
|
|
127
|
+
throw new CapManifestError(`unsupported manifest version ${JSON.stringify(root.version)} — expected 1`);
|
|
128
|
+
}
|
|
129
|
+
if (root.capabilities === undefined) {
|
|
130
|
+
throw new CapManifestError("must have a 'capabilities:' mapping of id → entry");
|
|
131
|
+
}
|
|
132
|
+
if (typeof root.capabilities !== 'object' ||
|
|
133
|
+
root.capabilities === null ||
|
|
134
|
+
Array.isArray(root.capabilities)) {
|
|
135
|
+
throw new CapManifestError("'capabilities:' must be a mapping of id → entry");
|
|
136
|
+
}
|
|
137
|
+
const capabilities = {};
|
|
138
|
+
for (const [id, raw] of Object.entries(root.capabilities)) {
|
|
139
|
+
capabilities[id] = parseCapabilityEntry(id, raw);
|
|
140
|
+
}
|
|
141
|
+
return capabilities;
|
|
142
|
+
}
|
|
143
|
+
function parseCapabilityEntry(id, raw) {
|
|
144
|
+
if (!CAPABILITY_ID_RE.test(id)) {
|
|
145
|
+
throw new CapManifestError(`capability id '${id}' is invalid — use dotted lowercase words, e.g. 'test.focused'`);
|
|
146
|
+
}
|
|
147
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
148
|
+
throw new CapManifestError(`capability '${id}' must be a mapping with a 'command'`);
|
|
149
|
+
}
|
|
150
|
+
const entry = raw;
|
|
151
|
+
if (typeof entry.command !== 'string' || entry.command.trim() === '') {
|
|
152
|
+
throw new CapManifestError(`capability '${id}' requires a non-empty 'command' string`);
|
|
153
|
+
}
|
|
154
|
+
let lifecycle = 'active';
|
|
155
|
+
if (entry.lifecycle !== undefined) {
|
|
156
|
+
if (entry.lifecycle !== 'active' && entry.lifecycle !== 'shadow') {
|
|
157
|
+
throw new CapManifestError(`capability '${id}': lifecycle must be 'active' or 'shadow', got '${String(entry.lifecycle)}'`);
|
|
158
|
+
}
|
|
159
|
+
lifecycle = entry.lifecycle;
|
|
160
|
+
}
|
|
161
|
+
let description;
|
|
162
|
+
if (entry.description !== undefined) {
|
|
163
|
+
if (typeof entry.description !== 'string') {
|
|
164
|
+
throw new CapManifestError(`capability '${id}': description must be a string`);
|
|
165
|
+
}
|
|
166
|
+
description = entry.description;
|
|
167
|
+
}
|
|
168
|
+
let timeoutMs;
|
|
169
|
+
if (entry.timeout_ms !== undefined) {
|
|
170
|
+
if (typeof entry.timeout_ms !== 'number' ||
|
|
171
|
+
!Number.isFinite(entry.timeout_ms) ||
|
|
172
|
+
entry.timeout_ms <= 0) {
|
|
173
|
+
throw new CapManifestError(`capability '${id}': timeout_ms must be a positive number of milliseconds`);
|
|
174
|
+
}
|
|
175
|
+
timeoutMs = entry.timeout_ms;
|
|
176
|
+
}
|
|
177
|
+
let assumptions;
|
|
178
|
+
if (entry.assumptions !== undefined) {
|
|
179
|
+
if (!Array.isArray(entry.assumptions)) {
|
|
180
|
+
throw new CapManifestError(`capability '${id}': assumptions must be a list of probes`);
|
|
181
|
+
}
|
|
182
|
+
assumptions = entry.assumptions.map((probe, i) => parseAssumption(id, i, probe));
|
|
183
|
+
}
|
|
184
|
+
return { command: entry.command, lifecycle, assumptions, description, timeoutMs };
|
|
185
|
+
}
|
|
186
|
+
function parseAssumption(id, index, raw) {
|
|
187
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
188
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1} must be a single-key probe, e.g. { file-exists: package.json }`);
|
|
189
|
+
}
|
|
190
|
+
const keys = Object.keys(raw);
|
|
191
|
+
if (keys.length !== 1) {
|
|
192
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1} must have exactly one key (file-exists or tool-version)`);
|
|
193
|
+
}
|
|
194
|
+
const kind = keys[0];
|
|
195
|
+
const value = raw[kind];
|
|
196
|
+
if (kind === 'file-exists') {
|
|
197
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
198
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1}: file-exists requires a path string`);
|
|
199
|
+
}
|
|
200
|
+
return { kind: 'file-exists', target: value };
|
|
201
|
+
}
|
|
202
|
+
if (kind === 'tool-version') {
|
|
203
|
+
if (typeof value !== 'string') {
|
|
204
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1}: tool-version requires '<tool><op><version>', e.g. node>=20`);
|
|
205
|
+
}
|
|
206
|
+
return parseToolVersionProbe(id, index, value);
|
|
207
|
+
}
|
|
208
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1}: unknown probe kind '${kind}' (expected file-exists or tool-version)`);
|
|
209
|
+
}
|
|
210
|
+
function parseToolVersionProbe(id, index, value) {
|
|
211
|
+
const match = TOOL_VERSION_RE.exec(value.trim());
|
|
212
|
+
if (!match) {
|
|
213
|
+
throw new CapManifestError(`capability '${id}' assumption #${index + 1}: tool-version requires '<tool><op><version>', e.g. node>=20 (ops: ${TOOL_VERSION_OPS_DISPLAY})`);
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
kind: 'tool-version',
|
|
217
|
+
tool: match[1],
|
|
218
|
+
op: match[2],
|
|
219
|
+
version: match[3].trim(),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/** Evaluate one assumption probe against the run directory. */
|
|
223
|
+
function evaluateProbe(probe, cwd) {
|
|
224
|
+
if (probe.kind === 'file-exists') {
|
|
225
|
+
const target = node_path_1.default.resolve(cwd, probe.target);
|
|
226
|
+
if (node_fs_1.default.existsSync(target)) {
|
|
227
|
+
return { ok: true, reason: '' };
|
|
228
|
+
}
|
|
229
|
+
return { ok: false, reason: `file-exists: '${probe.target}' not found` };
|
|
230
|
+
}
|
|
231
|
+
// tool-version: run `<tool> --version` in the capability's cwd and compare
|
|
232
|
+
// the first version-like token
|
|
233
|
+
const res = (0, node_child_process_1.spawnSync)(`${probe.tool} --version`, {
|
|
234
|
+
shell: true,
|
|
235
|
+
cwd,
|
|
236
|
+
encoding: 'utf-8',
|
|
237
|
+
timeout: PROBE_TIMEOUT_MS,
|
|
238
|
+
windowsHide: true,
|
|
239
|
+
});
|
|
240
|
+
const output = `${res.stdout ?? ''}${res.stderr ?? ''}`;
|
|
241
|
+
if (res.error || res.status !== 0) {
|
|
242
|
+
return {
|
|
243
|
+
ok: false,
|
|
244
|
+
reason: `tool-version: '${probe.tool}' is not runnable (${res.error?.message ?? `exit ${res.status}`})`,
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
const versionMatch = /\d+(\.\d+){0,3}/.exec(output);
|
|
248
|
+
if (!versionMatch) {
|
|
249
|
+
return {
|
|
250
|
+
ok: false,
|
|
251
|
+
reason: `tool-version: no version found in '${probe.tool} --version' output`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
const actual = versionMatch[0];
|
|
255
|
+
const cmp = (0, version_1.compareVersions)(actual, probe.version);
|
|
256
|
+
if (!OP_SATISFIED[probe.op](cmp)) {
|
|
257
|
+
return {
|
|
258
|
+
ok: false,
|
|
259
|
+
reason: `tool-version: ${probe.tool} ${actual} does not satisfy ${probe.tool}${probe.op}${probe.version}`,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
return { ok: true, reason: '' };
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Quote one argv element so the shell receives it verbatim as a single word.
|
|
266
|
+
* POSIX single-quote scheme (the only fully safe one); args are data, not
|
|
267
|
+
* shell syntax — put syntax in the manifest `command`, not in run args.
|
|
268
|
+
*/
|
|
269
|
+
function shellQuote(arg) {
|
|
270
|
+
return `'${arg.replace(/'/g, `'\\''`)}'`;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Resolve and execute one capability for a directory. Never throws for
|
|
274
|
+
* manifest/permission/exec problems — they are reported as outcomes — but a
|
|
275
|
+
* malformed manifest still surfaces as `automation-broken`, not a crash, so
|
|
276
|
+
* callers (the scheduler) can fall back to reasoning.
|
|
277
|
+
*/
|
|
278
|
+
function runCapabilityFromCwd(id, args, cwd) {
|
|
279
|
+
let manifest;
|
|
280
|
+
try {
|
|
281
|
+
manifest = loadCapabilityManifest(cwd);
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
if (err instanceof CapManifestError) {
|
|
285
|
+
return broken(id, null, `manifest invalid: ${err.message}`, 0);
|
|
286
|
+
}
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
289
|
+
return runCapability(manifest, id, args, cwd);
|
|
290
|
+
}
|
|
291
|
+
/** Execute a capability from an already-loaded manifest. */
|
|
292
|
+
function runCapability(manifest, id, args, cwd) {
|
|
293
|
+
const start = Date.now();
|
|
294
|
+
const entry = manifest.capabilities[id];
|
|
295
|
+
if (!entry) {
|
|
296
|
+
return {
|
|
297
|
+
outcome: 'capability-unavailable',
|
|
298
|
+
capability: id,
|
|
299
|
+
command: null,
|
|
300
|
+
exit_code: null,
|
|
301
|
+
signal: null,
|
|
302
|
+
duration_ms: 0,
|
|
303
|
+
reason: manifest.path
|
|
304
|
+
? `capability '${id}' is not in ${manifest.path}`
|
|
305
|
+
: `no capability manifest at ${exports.AUTOMATION_DIR}/${exports.MANIFEST_FILE}`,
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
if (entry.lifecycle !== 'active') {
|
|
309
|
+
return {
|
|
310
|
+
outcome: 'capability-unavailable',
|
|
311
|
+
capability: id,
|
|
312
|
+
command: entry.command,
|
|
313
|
+
exit_code: null,
|
|
314
|
+
signal: null,
|
|
315
|
+
duration_ms: 0,
|
|
316
|
+
reason: `capability '${id}' has lifecycle=shadow — only active entries execute`,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
for (const probe of entry.assumptions ?? []) {
|
|
320
|
+
const result = evaluateProbe(probe, cwd);
|
|
321
|
+
if (!result.ok) {
|
|
322
|
+
return broken(id, entry.command, `assumption failed — ${result.reason}; command not run`, Date.now() - start);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const commandLine = [entry.command, ...args.map(shellQuote)].join(' ');
|
|
326
|
+
const timeoutMs = entry.timeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS;
|
|
327
|
+
const res = (0, node_child_process_1.spawnSync)(commandLine, {
|
|
328
|
+
shell: true,
|
|
329
|
+
cwd,
|
|
330
|
+
stdio: 'inherit',
|
|
331
|
+
timeout: timeoutMs,
|
|
332
|
+
});
|
|
333
|
+
return classifySpawnResult(res, id, commandLine, Date.now() - start, cwd, timeoutMs);
|
|
334
|
+
}
|
|
335
|
+
/** Map a finished spawn to one of the three executed outcomes (ok / task-failed / automation-broken). */
|
|
336
|
+
function classifySpawnResult(res, id, commandLine, durationMs, cwd, timeoutMs) {
|
|
337
|
+
if (res.error) {
|
|
338
|
+
const code = res.error.code;
|
|
339
|
+
if (code === 'ETIMEDOUT') {
|
|
340
|
+
return broken(id, commandLine, `command timed out after ${timeoutMs}ms`, durationMs);
|
|
341
|
+
}
|
|
342
|
+
const hint = code === 'ENOENT' ? ' — is the command on PATH from that directory?' : '';
|
|
343
|
+
return broken(id, commandLine, `command failed to start: ${res.error.message} (cwd: ${cwd})${hint}`, durationMs);
|
|
344
|
+
}
|
|
345
|
+
if (res.status === SHELL_EXIT_COMMAND_NOT_FOUND) {
|
|
346
|
+
return broken(id, commandLine, `command not found (exit ${SHELL_EXIT_COMMAND_NOT_FOUND})`, durationMs);
|
|
347
|
+
}
|
|
348
|
+
if (res.status === SHELL_EXIT_NOT_EXECUTABLE) {
|
|
349
|
+
return broken(id, commandLine, `command not executable (exit ${SHELL_EXIT_NOT_EXECUTABLE})`, durationMs);
|
|
350
|
+
}
|
|
351
|
+
if (res.signal !== null) {
|
|
352
|
+
// A timeout kill surfaces here (SIGTERM after the timeout) or as exit 128+N below
|
|
353
|
+
return {
|
|
354
|
+
outcome: 'automation-broken',
|
|
355
|
+
capability: id,
|
|
356
|
+
command: commandLine,
|
|
357
|
+
exit_code: null,
|
|
358
|
+
signal: res.signal,
|
|
359
|
+
duration_ms: durationMs,
|
|
360
|
+
reason: `abnormal termination: killed by ${res.signal}`,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
// sh reports a child killed by signal N as exit 128+N
|
|
364
|
+
if (res.status !== null && res.status > SHELL_SIGNAL_EXIT_BASE) {
|
|
365
|
+
return {
|
|
366
|
+
outcome: 'automation-broken',
|
|
367
|
+
capability: id,
|
|
368
|
+
command: commandLine,
|
|
369
|
+
exit_code: res.status,
|
|
370
|
+
signal: null,
|
|
371
|
+
duration_ms: durationMs,
|
|
372
|
+
reason: `abnormal termination: exit ${res.status} (killed by signal ${res.status - SHELL_SIGNAL_EXIT_BASE})`,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
if (res.status === 0) {
|
|
376
|
+
return {
|
|
377
|
+
outcome: 'ok',
|
|
378
|
+
capability: id,
|
|
379
|
+
command: commandLine,
|
|
380
|
+
exit_code: 0,
|
|
381
|
+
signal: null,
|
|
382
|
+
duration_ms: durationMs,
|
|
383
|
+
reason: null,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
return {
|
|
387
|
+
outcome: 'task-failed',
|
|
388
|
+
capability: id,
|
|
389
|
+
command: commandLine,
|
|
390
|
+
exit_code: res.status,
|
|
391
|
+
signal: null,
|
|
392
|
+
duration_ms: durationMs,
|
|
393
|
+
reason: null,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
function broken(id, command, reason, durationMs, overrides) {
|
|
397
|
+
return {
|
|
398
|
+
outcome: 'automation-broken',
|
|
399
|
+
capability: id,
|
|
400
|
+
command,
|
|
401
|
+
exit_code: overrides?.exit_code ?? null,
|
|
402
|
+
signal: overrides?.signal ?? null,
|
|
403
|
+
duration_ms: durationMs,
|
|
404
|
+
reason,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../src/capability.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -8,6 +8,7 @@ const commander_1 = require("commander");
|
|
|
8
8
|
// Package info
|
|
9
9
|
const pkg = require('../package.json');
|
|
10
10
|
const cache_1 = require("./commands/cache");
|
|
11
|
+
const cap_1 = require("./commands/cap");
|
|
11
12
|
const checksum_1 = require("./commands/checksum");
|
|
12
13
|
const commands_1 = require("./commands/commands");
|
|
13
14
|
const config_cmd_1 = require("./commands/config-cmd");
|
|
@@ -26,6 +27,7 @@ const lint_1 = require("./commands/lint");
|
|
|
26
27
|
const list_1 = require("./commands/list");
|
|
27
28
|
const login_1 = require("./commands/login");
|
|
28
29
|
const logout_1 = require("./commands/logout");
|
|
30
|
+
const plan_1 = require("./commands/plan");
|
|
29
31
|
const prompt_hook_1 = require("./commands/prompt-hook");
|
|
30
32
|
const publish_1 = require("./commands/publish");
|
|
31
33
|
const pull_1 = require("./commands/pull");
|
|
@@ -33,6 +35,7 @@ const remove_1 = require("./commands/remove");
|
|
|
33
35
|
const reset_hooks_1 = require("./commands/reset-hooks");
|
|
34
36
|
const run_1 = require("./commands/run");
|
|
35
37
|
const runstate_1 = require("./commands/runstate");
|
|
38
|
+
const sched_1 = require("./commands/sched");
|
|
36
39
|
const search_1 = require("./commands/search");
|
|
37
40
|
const sign_1 = require("./commands/sign");
|
|
38
41
|
const skill_export_1 = require("./commands/skill-export");
|
|
@@ -97,6 +100,9 @@ Agent-friendly: Run \`ai-dossier --agent\` for machine-readable capabilities.`);
|
|
|
97
100
|
(0, doctor_1.registerDoctorCommand)(commander_1.program);
|
|
98
101
|
(0, traces_1.registerTracesCommand)(commander_1.program);
|
|
99
102
|
(0, runstate_1.registerRunstateCommand)(commander_1.program);
|
|
103
|
+
(0, plan_1.registerPlanCommand)(commander_1.program);
|
|
104
|
+
(0, sched_1.registerSchedCommand)(commander_1.program);
|
|
105
|
+
(0, cap_1.registerCapCommand)(commander_1.program);
|
|
100
106
|
// Hidden
|
|
101
107
|
(0, prompt_hook_1.registerPromptHookCommand)(commander_1.program);
|
|
102
108
|
(0, reset_hooks_1.registerResetHooksCommand)(commander_1.program);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,yCAAoC;AAEpC,eAAe;AACf,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,4CAAwD;AACxD,kDAA8D;AAC9D,kDAA8D;AAC9D,sDAA8D;AAC9D,8CAA0D;AAC1D,8CAA0D;AAC1D,8CAA0D;AAC1D,8CAA0D;AAC1D,oDAA+D;AAC/D,wCAAoD;AACpD,gDAA4D;AAC5D,0CAAsD;AACtD,0CAAsD;AACtD,4DAAuE;AACvE,0CAAsD;AACtD,0CAAsD;AACtD,0CAAsD;AACtD,4CAAwD;AACxD,8CAA0D;AAC1D,wDAAmE;AACnE,gDAA4D;AAC5D,0CAAsD;AACtD,8CAA0D;AAC1D,wDAAmE;AACnE,wCAAoD;AACpD,kDAA8D;AAC9D,8CAA0D;AAC1D,0CAAsD;AACtD,0DAAqE;AACrE,wDAAmE;AACnE,8CAA0D;AAC1D,kDAA8D;AAC9D,8CAA0D;AAC1D,8CAA0D;AAC1D,iCAA2C;AAE3C,gBAAgB;AAChB,mBAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,qJAAqJ,CACtJ;KACA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,SAAS,EAAE,iEAAiE,CAAC;KACpF,aAAa,CAAC,EAAE,UAAU,EAAE,wBAAiB,EAAE,CAAC;KAChD,WAAW,CACV,OAAO,EACP;;;;;;;;;8EAS0E,CAC3E,CAAC;AAEJ,8CAA8C;AAE9C,kBAAkB;AAClB,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,mCAAuB,EAAC,mBAAO,CAAC,CAAC;AAEjC,eAAe;AACf,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,wBAAkB,EAAC,mBAAO,CAAC,CAAC;AAC5B,IAAA,kCAAuB,EAAC,mBAAO,CAAC,CAAC;AACjC,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAE/B,WAAW;AACX,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,wBAAkB,EAAC,mBAAO,CAAC,CAAC;AAC5B,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,gCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAE/B,SAAS;AACT,IAAA,2CAA2B,EAAC,mBAAO,CAAC,CAAC;AACrC,IAAA,yCAA0B,EAAC,mBAAO,CAAC,CAAC;AACpC,IAAA,uCAAyB,EAAC,mBAAO,CAAC,CAAC;AAEnC,WAAW;AACX,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,kCAAuB,EAAC,mBAAO,CAAC,CAAC;AACjC,IAAA,0BAAmB,EAAC,mBAAO,CAAC,CAAC;AAE7B,gBAAgB;AAChB,IAAA,4BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,kCAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,4BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,gCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,8BAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,kCAAuB,EAAC,mBAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ai-dossier cap` — capability manifest operations (RFC-0001, issue #463).
|
|
3
|
+
*
|
|
4
|
+
* cap list [--json] inspect .dossier/automation/manifest.yaml
|
|
5
|
+
* cap run <id> [-- args] execute one capability
|
|
6
|
+
*
|
|
7
|
+
* `cap run` owns its exit codes (the four-way outcome contract):
|
|
8
|
+
* 0 ok · 1 task-failed · 2 automation-broken · 3 capability-unavailable
|
|
9
|
+
* The JSON envelope is the LAST stdout line — machine consumers read that line.
|
|
10
|
+
*/
|
|
11
|
+
import type { Command } from 'commander';
|
|
12
|
+
export declare function registerCapCommand(program: Command): void;
|
|
13
|
+
//# sourceMappingURL=cap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cap.d.ts","sourceRoot":"","sources":["../../src/commands/cap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2CzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+EzD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `ai-dossier cap` — capability manifest operations (RFC-0001, issue #463).
|
|
4
|
+
*
|
|
5
|
+
* cap list [--json] inspect .dossier/automation/manifest.yaml
|
|
6
|
+
* cap run <id> [-- args] execute one capability
|
|
7
|
+
*
|
|
8
|
+
* `cap run` owns its exit codes (the four-way outcome contract):
|
|
9
|
+
* 0 ok · 1 task-failed · 2 automation-broken · 3 capability-unavailable
|
|
10
|
+
* The JSON envelope is the LAST stdout line — machine consumers read that line.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.registerCapCommand = registerCapCommand;
|
|
14
|
+
const cap_log_1 = require("../cap-log");
|
|
15
|
+
const capability_1 = require("../capability");
|
|
16
|
+
const helpers_1 = require("../helpers");
|
|
17
|
+
const table_1 = require("../table");
|
|
18
|
+
function loadOrFail() {
|
|
19
|
+
try {
|
|
20
|
+
return (0, capability_1.loadCapabilityManifest)(process.cwd());
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
if (err instanceof capability_1.CapManifestError) {
|
|
24
|
+
(0, helpers_1.fail)([`Capability manifest is invalid: ${err.message}`]);
|
|
25
|
+
}
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** The JSON envelope for `cap run` — nulls, never undefined, for a stable shape. */
|
|
30
|
+
function envelope(result) {
|
|
31
|
+
return JSON.stringify({
|
|
32
|
+
capability: result.capability,
|
|
33
|
+
outcome: result.outcome,
|
|
34
|
+
command: result.command,
|
|
35
|
+
exit_code: result.exit_code,
|
|
36
|
+
signal: result.signal,
|
|
37
|
+
duration_ms: result.duration_ms,
|
|
38
|
+
reason: result.reason,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function registerCapCommand(program) {
|
|
42
|
+
const cap = program
|
|
43
|
+
.command('cap')
|
|
44
|
+
.description(`Capability manifest operations — deterministic execution of recurring repo operations (${capability_1.AUTOMATION_DIR}/${capability_1.MANIFEST_FILE})`);
|
|
45
|
+
cap
|
|
46
|
+
.command('list')
|
|
47
|
+
.description('List available capabilities and their lifecycle (empty + exit 0 when no manifest)')
|
|
48
|
+
.option('--json', 'Output the capability list as JSON')
|
|
49
|
+
.action((opts) => {
|
|
50
|
+
const manifest = loadOrFail();
|
|
51
|
+
if (opts.json) {
|
|
52
|
+
console.log(JSON.stringify({
|
|
53
|
+
manifest: manifest.path,
|
|
54
|
+
capabilities: Object.entries(manifest.capabilities).map(([id, entry]) => ({
|
|
55
|
+
id,
|
|
56
|
+
lifecycle: entry.lifecycle,
|
|
57
|
+
command: entry.command,
|
|
58
|
+
description: entry.description ?? null,
|
|
59
|
+
})),
|
|
60
|
+
}));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (manifest.path === null) {
|
|
64
|
+
console.log(`No capability manifest (${capability_1.AUTOMATION_DIR}/${capability_1.MANIFEST_FILE}) — capabilities: (none)`);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const rows = Object.entries(manifest.capabilities).map(([id, entry]) => [
|
|
68
|
+
id,
|
|
69
|
+
entry.lifecycle,
|
|
70
|
+
entry.command,
|
|
71
|
+
entry.description ?? '-',
|
|
72
|
+
]);
|
|
73
|
+
if (rows.length === 0) {
|
|
74
|
+
console.log(`Capability manifest ${manifest.path} declares no capabilities.`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
console.log(`Capabilities (${manifest.path}):`);
|
|
78
|
+
console.log((0, table_1.renderTable)(['capability', 'lifecycle', 'command', 'description'], rows));
|
|
79
|
+
});
|
|
80
|
+
cap
|
|
81
|
+
.command('run <id> [args...]')
|
|
82
|
+
.description('Execute one capability; extra args after -- are shell-quoted and appended to the command. ' +
|
|
83
|
+
'Exit codes: 0 ok, 1 task-failed, 2 automation-broken, 3 capability-unavailable')
|
|
84
|
+
.allowUnknownOption(true)
|
|
85
|
+
.action((id, args) => {
|
|
86
|
+
const cwd = process.cwd();
|
|
87
|
+
const result = (0, capability_1.runCapabilityFromCwd)(id, args, cwd);
|
|
88
|
+
(0, cap_log_1.appendCapLog)({
|
|
89
|
+
timestamp: new Date().toISOString(),
|
|
90
|
+
capability: result.capability,
|
|
91
|
+
outcome: result.outcome,
|
|
92
|
+
exit_code: result.exit_code,
|
|
93
|
+
duration_ms: result.duration_ms,
|
|
94
|
+
reason: result.reason,
|
|
95
|
+
signal: result.signal,
|
|
96
|
+
cwd,
|
|
97
|
+
});
|
|
98
|
+
// Leading newline: a child whose last write had no trailing newline must
|
|
99
|
+
// not end up on the same line as the envelope — the envelope is the
|
|
100
|
+
// machine-readable LAST stdout line, so it has to stand alone.
|
|
101
|
+
console.log(`\n${envelope(result)}`);
|
|
102
|
+
process.exit(capability_1.CAPABILITY_EXIT_CODES[result.outcome]);
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=cap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cap.js","sourceRoot":"","sources":["../../src/commands/cap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ai-dossier plan` — post, read, and validate `plan:v1` artifacts on a GitHub issue.
|
|
3
|
+
*
|
|
4
|
+
* One canonical per-issue plan (#462, RFC-0001 C.6): posting is append-only (a new post
|
|
5
|
+
* supersedes — readers always take the LAST plan:v1 comment), reading is `get`, and
|
|
6
|
+
* `validate` runs the deterministic checks — referenced files exist at HEAD, head-distance,
|
|
7
|
+
* risk-floor path scan — with no model call anywhere.
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
/** One finding of `validate`, machine-parseable by design. */
|
|
11
|
+
export interface PlanValidationReason {
|
|
12
|
+
/** Which check produced the finding. */
|
|
13
|
+
check: 'artifact' | 'sections' | 'missing-file' | 'head-distance' | 'risk-floor' | 'git';
|
|
14
|
+
/** `error` fails validity; `warn`/`info` are carried for the caller to act on. */
|
|
15
|
+
severity: 'error' | 'warn' | 'info';
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
/** Registers the `plan` command tree (post, get, validate). */
|
|
19
|
+
export declare function registerPlanCommand(program: Command): void;
|
|
20
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CzC,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,wCAAwC;IACxC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,YAAY,GAAG,KAAK,CAAC;IACzF,kFAAkF;IAClF,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAoVD,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQ1D"}
|