@ai-dossier/cli 0.80.0 → 0.82.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/commands/install-skill.d.ts.map +1 -1
- package/dist/commands/install-skill.js +287 -77
- package/dist/commands/install-skill.js.map +1 -1
- package/dist/commands/runstate.d.ts.map +1 -1
- package/dist/commands/runstate.js +39 -8
- package/dist/commands/runstate.js.map +1 -1
- package/dist/commands/sched.d.ts.map +1 -1
- package/dist/commands/sched.js +5 -1
- package/dist/commands/sched.js.map +1 -1
- package/dist/opencode-sync.d.ts +2 -2
- package/dist/opencode-sync.d.ts.map +1 -1
- package/dist/opencode-sync.js +9 -3
- package/dist/opencode-sync.js.map +1 -1
- package/dist/plan-artifact.d.ts +25 -0
- package/dist/plan-artifact.d.ts.map +1 -1
- package/dist/plan-artifact.js +38 -0
- package/dist/plan-artifact.js.map +1 -1
- package/dist/skill-sync.d.ts +67 -0
- package/dist/skill-sync.d.ts.map +1 -0
- package/dist/skill-sync.js +162 -0
- package/dist/skill-sync.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,EACL,oBAAoB,EAOrB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,OAAO,EACL,oBAAoB,EAOrB,MAAM,kBAAkB,CAAC;AA2R1B,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwRlE;AAGD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -16,8 +16,218 @@ Object.defineProperty(exports, "isDossierFrontmatter", { enumerable: true, get:
|
|
|
16
16
|
const registry_client_1 = require("../registry-client");
|
|
17
17
|
const skill_collision_1 = require("../skill-collision");
|
|
18
18
|
const skill_frontmatter_1 = require("../skill-frontmatter");
|
|
19
|
+
const skill_sync_1 = require("../skill-sync");
|
|
19
20
|
/** Valid values for --for. Anything else is rejected up front. */
|
|
20
21
|
const VALID_TARGETS = new Set(['claude', 'opencode', 'both']);
|
|
22
|
+
/**
|
|
23
|
+
* Fetch one dossier and write it as a skill (claude and/or opencode copy), recording its
|
|
24
|
+
* registry path as `x_source`. Throws on any failure; callers decide how to report it.
|
|
25
|
+
*/
|
|
26
|
+
async function installOne(dossierName, version, ctx) {
|
|
27
|
+
const skillName = dossierName.split('/').pop() ?? dossierName;
|
|
28
|
+
const skillDir = node_path_1.default.join(ctx.skillsDir, skillName);
|
|
29
|
+
const skillFile = node_path_1.default.join(skillDir, 'SKILL.md');
|
|
30
|
+
let resolvedVersion = version;
|
|
31
|
+
// For versionless installs: resolve which version to use via the TTL'd resolver.
|
|
32
|
+
if (!version) {
|
|
33
|
+
const maxAgeSeconds = (0, cache_resolver_1.parseMaxAgeOption)(ctx.maxAge);
|
|
34
|
+
const resolved = await (0, cache_resolver_1.resolveCachedVersion)(dossierName, {
|
|
35
|
+
fresh: ctx.fresh,
|
|
36
|
+
maxAgeSeconds,
|
|
37
|
+
});
|
|
38
|
+
resolvedVersion = resolved.version;
|
|
39
|
+
}
|
|
40
|
+
let content = null;
|
|
41
|
+
let fromCache = false;
|
|
42
|
+
if (!ctx.fresh) {
|
|
43
|
+
const cached = (0, cache_resolver_1.readCachedContent)(dossierName, resolvedVersion);
|
|
44
|
+
if (cached !== null) {
|
|
45
|
+
content = cached;
|
|
46
|
+
fromCache = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (!content) {
|
|
50
|
+
const { result: fetchedContent } = await (0, multi_registry_1.multiRegistryGetContent)(dossierName, resolvedVersion);
|
|
51
|
+
if (!fetchedContent) {
|
|
52
|
+
throw { statusCode: 404, message: `Not found: ${dossierName}` };
|
|
53
|
+
}
|
|
54
|
+
content = fetchedContent.content;
|
|
55
|
+
// Write to cache so future installs hit it.
|
|
56
|
+
if (!ctx.fresh) {
|
|
57
|
+
(0, cache_resolver_1.writeCachedContent)(dossierName, resolvedVersion, content, fetchedContent._registry);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Write the primary claude skill. Always true today; the flag exists so
|
|
61
|
+
// future flows (e.g. opencode-only refreshes via sync-skills) can opt out.
|
|
62
|
+
if (ctx.targets.writeClaude) {
|
|
63
|
+
node_fs_1.default.mkdirSync(skillDir, { recursive: true });
|
|
64
|
+
// Emit YAML frontmatter so the runtime can read `name`/`description`.
|
|
65
|
+
// The signed payload is unchanged — see skill-frontmatter.ts.
|
|
66
|
+
node_fs_1.default.writeFileSync(skillFile, (0, skill_frontmatter_1.toSkillFrontmatter)(content, dossierName), 'utf8');
|
|
67
|
+
}
|
|
68
|
+
// Dual-write the opencode wrapper when requested. YAML-native sources are
|
|
69
|
+
// skipped because opencode reads them directly from ~/.claude/skills/.
|
|
70
|
+
let opencode = 'off';
|
|
71
|
+
if (ctx.targets.writeOpencode) {
|
|
72
|
+
opencode = (0, opencode_sync_1.writeOpencodeWrapper)(skillName, content, dossierName);
|
|
73
|
+
}
|
|
74
|
+
let summary = '';
|
|
75
|
+
try {
|
|
76
|
+
const parsed = (0, core_1.parseDossierContent)(content);
|
|
77
|
+
const fm = parsed.frontmatter;
|
|
78
|
+
summary = fm.objective || '';
|
|
79
|
+
if (!summary) {
|
|
80
|
+
const firstLine = parsed.body.split('\n').find((l) => l.trim().length > 0);
|
|
81
|
+
summary = firstLine?.replace(/^#+\s*/, '').trim() || '';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Could not parse — skip summary
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
skillName,
|
|
89
|
+
skillFile,
|
|
90
|
+
source: dossierName,
|
|
91
|
+
version: resolvedVersion || null,
|
|
92
|
+
fileSize: Buffer.byteLength(content, 'utf8'),
|
|
93
|
+
summary,
|
|
94
|
+
cached: fromCache,
|
|
95
|
+
opencode,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const LIST_PAGE_SIZE = 500;
|
|
99
|
+
const LIST_MAX_PAGES = 20;
|
|
100
|
+
/**
|
|
101
|
+
* Every dossier the configured registries list, paginated. Throws when nothing could be
|
|
102
|
+
* listed at all; partial registry failures are returned so the caller can warn.
|
|
103
|
+
*/
|
|
104
|
+
async function fetchRegistryDossiers() {
|
|
105
|
+
const seen = new Map();
|
|
106
|
+
const errors = [];
|
|
107
|
+
for (let page = 1; page <= LIST_MAX_PAGES; page++) {
|
|
108
|
+
const res = await (0, multi_registry_1.multiRegistryList)({ page, perPage: LIST_PAGE_SIZE });
|
|
109
|
+
for (const e of res.errors) {
|
|
110
|
+
if (!errors.some((x) => x.registry === e.registry))
|
|
111
|
+
errors.push(e);
|
|
112
|
+
}
|
|
113
|
+
let added = 0;
|
|
114
|
+
for (const d of res.dossiers) {
|
|
115
|
+
if (seen.has(d.name))
|
|
116
|
+
continue;
|
|
117
|
+
seen.set(d.name, {
|
|
118
|
+
name: d.name,
|
|
119
|
+
version: d.version,
|
|
120
|
+
tags: d.tags,
|
|
121
|
+
});
|
|
122
|
+
added++;
|
|
123
|
+
}
|
|
124
|
+
if (added === 0 || res.dossiers.length < LIST_PAGE_SIZE)
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
if (seen.size === 0 && errors.length > 0) {
|
|
128
|
+
throw new Error(errors.map((e) => `${e.registry}: ${e.error}`).join('; '));
|
|
129
|
+
}
|
|
130
|
+
return { dossiers: [...seen.values()], errors };
|
|
131
|
+
}
|
|
132
|
+
/** `--all` / `--outdated`: plan against the registry, install what the plan says, report each. */
|
|
133
|
+
async function runBatchInstall(opts, ctx) {
|
|
134
|
+
const fail = (message) => {
|
|
135
|
+
if (opts.json)
|
|
136
|
+
console.log(JSON.stringify({ success: false, error: message }, null, 2));
|
|
137
|
+
else
|
|
138
|
+
console.error(`\n❌ ${message}\n`);
|
|
139
|
+
process.exit(1);
|
|
140
|
+
};
|
|
141
|
+
let registry;
|
|
142
|
+
try {
|
|
143
|
+
const listed = await fetchRegistryDossiers();
|
|
144
|
+
registry = listed.dossiers;
|
|
145
|
+
if (!opts.json) {
|
|
146
|
+
for (const e of listed.errors)
|
|
147
|
+
console.error(`⚠️ Registry ${e.registry}: ${e.error}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
return fail(`Could not list registry: ${err.message}`);
|
|
152
|
+
}
|
|
153
|
+
const plan = (0, skill_sync_1.planSync)({
|
|
154
|
+
registry,
|
|
155
|
+
installed: (0, skill_sync_1.readInstalledSkills)(ctx.skillsDir),
|
|
156
|
+
skillsDir: ctx.skillsDir,
|
|
157
|
+
owner: opts.owner,
|
|
158
|
+
all: !!opts.all,
|
|
159
|
+
outdated: !!opts.outdated,
|
|
160
|
+
force: opts.force,
|
|
161
|
+
});
|
|
162
|
+
const rows = [];
|
|
163
|
+
for (const item of plan) {
|
|
164
|
+
const base = {
|
|
165
|
+
name: item.name,
|
|
166
|
+
skill: item.skill,
|
|
167
|
+
installedVersion: item.installedVersion ?? null,
|
|
168
|
+
version: item.latestVersion ?? null,
|
|
169
|
+
};
|
|
170
|
+
if (item.action === 'collision') {
|
|
171
|
+
rows.push({ ...base, status: 'collision', message: item.reason });
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (item.action === 'skip') {
|
|
175
|
+
rows.push({ ...base, status: 'skipped', message: item.reason });
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
const r = await installOne(item.name, item.latestVersion, ctx);
|
|
180
|
+
rows.push({ ...base, version: r.version, status: 'ok' });
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
const e = err;
|
|
184
|
+
rows.push({
|
|
185
|
+
...base,
|
|
186
|
+
status: 'failed',
|
|
187
|
+
message: e.statusCode === 404 ? 'not found in registry' : (e.message ?? String(err)),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const count = (s) => rows.filter((r) => r.status === s).length;
|
|
192
|
+
const summary = {
|
|
193
|
+
ok: count('ok'),
|
|
194
|
+
skipped: count('skipped'),
|
|
195
|
+
failed: count('failed'),
|
|
196
|
+
collisions: count('collision'),
|
|
197
|
+
};
|
|
198
|
+
const success = summary.failed === 0 && summary.collisions === 0;
|
|
199
|
+
if (opts.json) {
|
|
200
|
+
console.log(JSON.stringify({ success, summary, results: rows }, null, 2));
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
console.log('');
|
|
204
|
+
if (rows.length === 0)
|
|
205
|
+
console.log('No matching skills.');
|
|
206
|
+
for (const r of rows) {
|
|
207
|
+
const ver = r.installedVersion && r.version && r.installedVersion !== r.version
|
|
208
|
+
? `${r.installedVersion} -> ${r.version}`
|
|
209
|
+
: (r.version ?? '');
|
|
210
|
+
const tail = r.message ? ` — ${r.message}` : '';
|
|
211
|
+
const tag = r.status === 'ok'
|
|
212
|
+
? 'ok'
|
|
213
|
+
: r.status === 'skipped'
|
|
214
|
+
? 'skip'
|
|
215
|
+
: r.status === 'failed'
|
|
216
|
+
? 'FAIL'
|
|
217
|
+
: 'COLLISION';
|
|
218
|
+
console.log(` ${tag.padEnd(9)} ${r.name}${ver ? ` (${ver})` : ''}${tail}`);
|
|
219
|
+
}
|
|
220
|
+
console.log(`\n${summary.ok} installed, ${summary.skipped} skipped, ${summary.failed} failed, ${summary.collisions} collisions\n`);
|
|
221
|
+
}
|
|
222
|
+
process.exit(success ? 0 : 1);
|
|
223
|
+
}
|
|
224
|
+
/** Installed vs latest for one installed skill. */
|
|
225
|
+
function describeDrift(s, latestByName) {
|
|
226
|
+
if (!s.source)
|
|
227
|
+
return { status: 'unknown-source' };
|
|
228
|
+
const latest = latestByName?.get(s.source)?.version;
|
|
229
|
+
return { status: (0, skill_sync_1.classify)(s.version, latest), latest };
|
|
230
|
+
}
|
|
21
231
|
function registerInstallSkillCommand(program) {
|
|
22
232
|
program
|
|
23
233
|
.command('install-skill')
|
|
@@ -26,7 +236,10 @@ function registerInstallSkillCommand(program) {
|
|
|
26
236
|
.option('--force', 'Overwrite if skill already exists')
|
|
27
237
|
.option('--fresh', 'Skip cache, fetch fresh from registry')
|
|
28
238
|
.option('--max-age <seconds>', 'Max age of cached version resolution before re-checking the registry (default: 300, 0 = always check)')
|
|
29
|
-
.option('--list', 'List currently installed skills')
|
|
239
|
+
.option('--list', 'List currently installed skills (with installed vs latest version)')
|
|
240
|
+
.option('--all', 'Install/refresh every registry skill (a dossier named *-skill or tagged skill)')
|
|
241
|
+
.option('--outdated', 'Reinstall only skills whose registry version is newer (alone: installed skills with a recorded source)')
|
|
242
|
+
.option('--owner <owner>', 'Limit --all / --outdated / --list to one registry owner')
|
|
30
243
|
.option('--remove <skill>', 'Remove an installed skill')
|
|
31
244
|
.option('--for <target>', 'Install targets: claude | opencode | both (default: claude + auto-detect opencode)')
|
|
32
245
|
.option('--json', 'Output as JSON')
|
|
@@ -39,24 +252,28 @@ function registerInstallSkillCommand(program) {
|
|
|
39
252
|
}
|
|
40
253
|
const targets = (0, opencode_sync_1.resolveTargets)(options.for);
|
|
41
254
|
if (options.list) {
|
|
42
|
-
|
|
43
|
-
|
|
255
|
+
const installedAll = (0, skill_sync_1.readInstalledSkills)(skillsDir).filter((sk) => !options.owner || sk.source?.split('/')[0] === options.owner);
|
|
256
|
+
if (installedAll.length === 0) {
|
|
257
|
+
if (options.json)
|
|
258
|
+
console.log(JSON.stringify({ skills: [] }, null, 2));
|
|
259
|
+
else
|
|
260
|
+
console.log('\nNo installed skills.\n');
|
|
44
261
|
process.exit(0);
|
|
45
262
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
263
|
+
// Latest versions need the registry; if it is unreachable, --list still works offline.
|
|
264
|
+
let latestByName = null;
|
|
265
|
+
let registryError;
|
|
266
|
+
try {
|
|
267
|
+
const listed = await fetchRegistryDossiers();
|
|
268
|
+
latestByName = new Map(listed.dossiers.map((d) => [d.name, d]));
|
|
269
|
+
}
|
|
270
|
+
catch (err) {
|
|
271
|
+
registryError = err.message;
|
|
53
272
|
}
|
|
54
273
|
// Cross-reference opencode installs so we can badge dual-installed skills.
|
|
55
274
|
const opencodeInstalled = new Set((0, opencode_sync_1.listOpencodeSkills)());
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const skillFile = node_path_1.default.join(skillsDir, e.name, 'SKILL.md');
|
|
59
|
-
const content = node_fs_1.default.readFileSync(skillFile, 'utf8');
|
|
275
|
+
const rows = installedAll.map((sk) => {
|
|
276
|
+
const content = node_fs_1.default.readFileSync(node_path_1.default.join(skillsDir, sk.dir, 'SKILL.md'), 'utf8');
|
|
60
277
|
let description = '';
|
|
61
278
|
const yamlMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
62
279
|
if (yamlMatch) {
|
|
@@ -64,10 +281,40 @@ function registerInstallSkillCommand(program) {
|
|
|
64
281
|
if (descMatch)
|
|
65
282
|
description = descMatch[1].trim();
|
|
66
283
|
}
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
284
|
+
const drift = describeDrift(sk, latestByName);
|
|
285
|
+
return {
|
|
286
|
+
skill: sk.dir,
|
|
287
|
+
source: sk.source ?? null,
|
|
288
|
+
installedVersion: sk.version ?? null,
|
|
289
|
+
latestVersion: drift.latest ?? null,
|
|
290
|
+
status: drift.status,
|
|
291
|
+
targets: opencodeInstalled.has(sk.dir) ? ['claude', 'opencode'] : ['claude'],
|
|
292
|
+
description,
|
|
293
|
+
};
|
|
294
|
+
});
|
|
295
|
+
if (options.json) {
|
|
296
|
+
console.log(JSON.stringify({ skills: rows, registryError: registryError ?? null }, null, 2));
|
|
297
|
+
process.exit(0);
|
|
298
|
+
}
|
|
299
|
+
console.log(`\n📋 Installed skills (${rows.length}):\n`);
|
|
300
|
+
if (registryError) {
|
|
301
|
+
console.log(` (registry unreachable — latest versions unknown: ${registryError})\n`);
|
|
302
|
+
}
|
|
303
|
+
for (const r of rows) {
|
|
304
|
+
const badge = r.targets.length > 1 ? ' [claude, opencode]' : ' [claude]';
|
|
305
|
+
let drift = '';
|
|
306
|
+
if (r.status === 'unknown-source')
|
|
307
|
+
drift = ' — unknown source';
|
|
308
|
+
else if (r.installedVersion || r.latestVersion) {
|
|
309
|
+
drift = ` v${r.installedVersion ?? '?'}`;
|
|
310
|
+
if (r.status === 'behind')
|
|
311
|
+
drift += ` (latest ${r.latestVersion}) BEHIND`;
|
|
312
|
+
else if (r.status === 'ahead')
|
|
313
|
+
drift += ` (registry has ${r.latestVersion}) AHEAD`;
|
|
314
|
+
}
|
|
315
|
+
console.log(` ${r.skill}${badge}${drift}`);
|
|
316
|
+
if (r.description) {
|
|
317
|
+
const snippet = r.description.length > 80 ? `${r.description.slice(0, 80)}...` : r.description;
|
|
71
318
|
console.log(` ${snippet}`);
|
|
72
319
|
}
|
|
73
320
|
console.log('');
|
|
@@ -94,8 +341,20 @@ function registerInstallSkillCommand(program) {
|
|
|
94
341
|
console.log(`\n✅ Removed skill: ${options.remove} (${parts.join(', ')})\n`);
|
|
95
342
|
process.exit(0);
|
|
96
343
|
}
|
|
344
|
+
if (options.all || options.outdated) {
|
|
345
|
+
if (name) {
|
|
346
|
+
console.error('\n❌ --all / --outdated install by registry listing; do not pass a name\n');
|
|
347
|
+
process.exit(1);
|
|
348
|
+
}
|
|
349
|
+
await runBatchInstall({ ...options }, { skillsDir, targets, fresh: options.fresh, maxAge: options.maxAge });
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
if (options.owner) {
|
|
353
|
+
console.error('\n❌ --owner only applies with --all, --outdated or --list\n');
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
97
356
|
if (!name) {
|
|
98
|
-
console.error('\n❌ Please provide a dossier name to install, or use --list / --remove\n');
|
|
357
|
+
console.error('\n❌ Please provide a dossier name to install, or use --all / --outdated / --list / --remove\n');
|
|
99
358
|
process.exit(1);
|
|
100
359
|
}
|
|
101
360
|
const [dossierName, version] = (0, registry_client_1.parseNameVersion)(name);
|
|
@@ -115,64 +374,15 @@ function registerInstallSkillCommand(program) {
|
|
|
115
374
|
}
|
|
116
375
|
}
|
|
117
376
|
try {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
let content = null;
|
|
129
|
-
let fromCache = false;
|
|
130
|
-
if (!options.fresh) {
|
|
131
|
-
const cached = (0, cache_resolver_1.readCachedContent)(dossierName, resolvedVersion);
|
|
132
|
-
if (cached !== null) {
|
|
133
|
-
content = cached;
|
|
134
|
-
fromCache = true;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (!content) {
|
|
138
|
-
const { result: fetchedContent } = await (0, multi_registry_1.multiRegistryGetContent)(dossierName, resolvedVersion);
|
|
139
|
-
if (!fetchedContent) {
|
|
140
|
-
throw { statusCode: 404, message: `Not found: ${dossierName}` };
|
|
141
|
-
}
|
|
142
|
-
content = fetchedContent.content;
|
|
143
|
-
// Write to cache so future installs hit it.
|
|
144
|
-
if (!options.fresh) {
|
|
145
|
-
(0, cache_resolver_1.writeCachedContent)(dossierName, resolvedVersion, content, fetchedContent._registry);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// Write the primary claude skill. Always true today; the flag exists so
|
|
149
|
-
// future flows (e.g. opencode-only refreshes via sync-skills) can opt out.
|
|
150
|
-
if (targets.writeClaude) {
|
|
151
|
-
node_fs_1.default.mkdirSync(skillDir, { recursive: true });
|
|
152
|
-
// Emit YAML frontmatter so the runtime can read `name`/`description`.
|
|
153
|
-
// The signed payload is unchanged — see skill-frontmatter.ts.
|
|
154
|
-
node_fs_1.default.writeFileSync(skillFile, (0, skill_frontmatter_1.toSkillFrontmatter)(content, dossierName), 'utf8');
|
|
155
|
-
}
|
|
156
|
-
// Dual-write the opencode wrapper when requested. YAML-native sources are
|
|
157
|
-
// skipped because opencode reads them directly from ~/.claude/skills/.
|
|
158
|
-
let opencodeResult = 'off';
|
|
159
|
-
if (targets.writeOpencode) {
|
|
160
|
-
opencodeResult = (0, opencode_sync_1.writeOpencodeWrapper)(skillName, content);
|
|
161
|
-
}
|
|
162
|
-
const fileSize = Buffer.byteLength(content, 'utf8');
|
|
163
|
-
let summary = '';
|
|
164
|
-
try {
|
|
165
|
-
const parsed = (0, core_1.parseDossierContent)(content);
|
|
166
|
-
const fm = parsed.frontmatter;
|
|
167
|
-
summary = fm.objective || '';
|
|
168
|
-
if (!summary) {
|
|
169
|
-
const firstLine = parsed.body.split('\n').find((l) => l.trim().length > 0);
|
|
170
|
-
summary = firstLine?.replace(/^#+\s*/, '').trim() || '';
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
// Could not parse — skip summary
|
|
175
|
-
}
|
|
377
|
+
const r = await installOne(dossierName, version ?? undefined, {
|
|
378
|
+
skillsDir,
|
|
379
|
+
targets,
|
|
380
|
+
fresh: options.fresh,
|
|
381
|
+
maxAge: options.maxAge,
|
|
382
|
+
});
|
|
383
|
+
const { fileSize, summary, opencode: opencodeResult } = r;
|
|
384
|
+
const resolvedVersion = r.version;
|
|
385
|
+
const fromCache = r.cached;
|
|
176
386
|
if (options.json) {
|
|
177
387
|
console.log(JSON.stringify({
|
|
178
388
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/commands/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runstate.d.ts","sourceRoot":"","sources":["../../src/commands/runstate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"runstate.d.ts","sourceRoot":"","sources":["../../src/commands/runstate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmiBzC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAi3ClC,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY9D"}
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.FENCED_EXIT_CODE = void 0;
|
|
15
15
|
exports.registerRunstateCommand = registerRunstateCommand;
|
|
16
16
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
17
|
+
const core_1 = require("@ai-dossier/core");
|
|
17
18
|
const sched_1 = require("@ai-dossier/sched");
|
|
18
19
|
const duration_1 = require("../duration");
|
|
19
20
|
const gh_1 = require("../gh");
|
|
@@ -105,6 +106,23 @@ function tryFetchMilestones(issue, repo) {
|
|
|
105
106
|
const bodies = result.comments.map((c) => (typeof c?.body === 'string' ? c.body : ''));
|
|
106
107
|
return { ok: true, milestones: (0, runstate_1.parseMilestones)(bodies) };
|
|
107
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* The trusted-only trail (#932) — what a scheduler that ACTS on a milestone must read.
|
|
111
|
+
* Same rule as {@link tryFetchTrustedMilestones} (fails closed on a missing association),
|
|
112
|
+
* plus a stderr note when a NEWER milestone from an untrusted author was passed over, so
|
|
113
|
+
* the operator can see a forged `batch-review done` was ignored rather than wonder why
|
|
114
|
+
* nothing advanced.
|
|
115
|
+
*/
|
|
116
|
+
function fetchTrustedMilestones(issue, repo) {
|
|
117
|
+
const result = (0, gh_1.tryFetchComments)(issue, repo);
|
|
118
|
+
if (!result.ok)
|
|
119
|
+
(0, gh_1.fail)([result.error]);
|
|
120
|
+
const { milestones, ignored } = (0, plan_artifact_1.readTrustedMilestones)(result.comments);
|
|
121
|
+
if (ignored.length > 0) {
|
|
122
|
+
console.error(`⚠ Issue #${issue}: ${(0, plan_artifact_1.ignoredMilestoneWarning)(ignored)}`);
|
|
123
|
+
}
|
|
124
|
+
return milestones;
|
|
125
|
+
}
|
|
108
126
|
/** Fetch every runstate milestone on an issue, oldest first, or exit 1 explaining why. */
|
|
109
127
|
function fetchMilestones(issue, repo) {
|
|
110
128
|
const result = tryFetchMilestones(issue, repo);
|
|
@@ -342,7 +360,8 @@ exports.FENCED_EXIT_CODE = 3;
|
|
|
342
360
|
* the issue. `groundtruth.ts`'s `parseSetupInfo` already applies exactly this rule for
|
|
343
361
|
* the same reason, and `gh issue view --json comments` already returns the field.
|
|
344
362
|
*
|
|
345
|
-
*
|
|
363
|
+
* `verify` is filtered too (#932): its `resume_from` decides which phases a resumed run
|
|
364
|
+
* skips. Reporting reads that opt out with `--all` (`last`/`list`/`stats`) stay unfiltered — they
|
|
346
365
|
* describe the trail rather than act on it, and hiding comments there would make an
|
|
347
366
|
* operator's picture disagree with the issue they are looking at.
|
|
348
367
|
*/
|
|
@@ -644,9 +663,13 @@ function registerReadSubcommands(cmd) {
|
|
|
644
663
|
.option('--repo <owner/name>', 'Target repository (defaults to the current one)')
|
|
645
664
|
.option('--since <iso>', "Only milestones at or after this ISO-8601 timestamp — e.g. a dispatch's spawned_at")
|
|
646
665
|
.option('--json', 'Output the parsed milestones as a JSON array')
|
|
666
|
+
.option('--trusted', 'Only count milestones from a repo owner / org member / collaborator (#932) — the default; accepted so a supervisor can state it (an older CLI rejects it, failing closed)')
|
|
667
|
+
.option('--all', 'Include milestones from ANY author (operator reporting only; never act on this)')
|
|
647
668
|
.action((options) => {
|
|
648
669
|
(0, gh_1.requireIssueTarget)(options);
|
|
649
|
-
let milestones =
|
|
670
|
+
let milestones = options.all && !options.trusted
|
|
671
|
+
? fetchMilestones(options.issue, options.repo)
|
|
672
|
+
: fetchTrustedMilestones(options.issue, options.repo);
|
|
650
673
|
// #622: `last` is not enough for a consumer that must decide what a
|
|
651
674
|
// DISPATCH produced. A member posting `review done` and then a
|
|
652
675
|
// catch-up `implement done` fifteen seconds later buries its own
|
|
@@ -690,9 +713,13 @@ function registerReadSubcommands(cmd) {
|
|
|
690
713
|
.requiredOption('--issue <number>', 'GitHub issue number')
|
|
691
714
|
.option('--repo <owner/name>', 'Target repository (defaults to the current one)')
|
|
692
715
|
.option('--json', 'Output the parsed milestone as JSON')
|
|
716
|
+
.option('--trusted', 'Only count milestones from a repo owner / org member / collaborator (#932) — the default; accepted so a supervisor can state it (an older CLI rejects it, failing closed)')
|
|
717
|
+
.option('--all', 'Include milestones from ANY author (operator reporting only; never act on this)')
|
|
693
718
|
.action((options) => {
|
|
694
719
|
(0, gh_1.requireIssueTarget)(options);
|
|
695
|
-
const milestones =
|
|
720
|
+
const milestones = options.all && !options.trusted
|
|
721
|
+
? fetchMilestones(options.issue, options.repo)
|
|
722
|
+
: fetchTrustedMilestones(options.issue, options.repo);
|
|
696
723
|
if (milestones.length === 0) {
|
|
697
724
|
if (options.json) {
|
|
698
725
|
console.log(JSON.stringify(null));
|
|
@@ -724,7 +751,7 @@ function registerVerifySubcommand(cmd) {
|
|
|
724
751
|
.action((options) => {
|
|
725
752
|
(0, gh_1.requireIssueTarget)(options);
|
|
726
753
|
const dispatchedAt = requireDispatchedAt(options.dispatchedAt);
|
|
727
|
-
const milestones =
|
|
754
|
+
const milestones = fetchTrustedMilestones(options.issue, options.repo);
|
|
728
755
|
const warnings = [];
|
|
729
756
|
const result = (0, runstate_1.computeResume)(milestones, makeProbe(options.issue, options.repo, warnings), dispatchedAt);
|
|
730
757
|
if (options.json) {
|
|
@@ -1008,7 +1035,7 @@ function printStatsHuman(report, multiIssue) {
|
|
|
1008
1035
|
* round trip already spent and reports nothing — so a failure becomes a per-issue fact
|
|
1009
1036
|
* here, and only a selection where EVERY issue failed is a failure of the command.
|
|
1010
1037
|
*/
|
|
1011
|
-
function readTrails(issues, repo) {
|
|
1038
|
+
function readTrails(issues, repo, all = false) {
|
|
1012
1039
|
const trails = [];
|
|
1013
1040
|
const failed = [];
|
|
1014
1041
|
// Progress on stderr: 200 serial gh calls are otherwise indistinguishable from a hang,
|
|
@@ -1020,7 +1047,9 @@ function readTrails(issues, repo) {
|
|
|
1020
1047
|
if (showProgress) {
|
|
1021
1048
|
process.stderr.write(`\rstats: reading issue #${issue} (${i + 1}/${issues.length})…`);
|
|
1022
1049
|
}
|
|
1023
|
-
const result =
|
|
1050
|
+
const result = all
|
|
1051
|
+
? tryFetchMilestones(String(issue), repo)
|
|
1052
|
+
: tryFetchTrustedMilestones(String(issue), repo);
|
|
1024
1053
|
if (result.ok)
|
|
1025
1054
|
trails.push({ issue, milestones: result.milestones });
|
|
1026
1055
|
else
|
|
@@ -1045,9 +1074,10 @@ function registerStatsSubcommand(cmd) {
|
|
|
1045
1074
|
.option('--issues <list>', 'Issue list or range to aggregate, e.g. 1,2,5..8')
|
|
1046
1075
|
.option('--repo <owner/name>', 'Target repository (defaults to the current one)')
|
|
1047
1076
|
.option('--json', 'Output the report as JSON')
|
|
1077
|
+
.option('--all', 'Include milestones from ANY author (default: repo owner / org member / collaborator only)')
|
|
1048
1078
|
.action((options) => {
|
|
1049
1079
|
const issues = resolveStatsIssues(options);
|
|
1050
|
-
const { trails, failed } = readTrails(issues, options.repo);
|
|
1080
|
+
const { trails, failed } = readTrails(issues, options.repo, options.all === true);
|
|
1051
1081
|
// Every issue unreadable is a genuine failure, not a degraded read — there is no
|
|
1052
1082
|
// report to hand back, so say why rather than printing an empty one and exiting 0.
|
|
1053
1083
|
if (trails.length === 0 && failed.length > 0) {
|
|
@@ -1341,7 +1371,8 @@ function abortCommentBody(run, gen, fence, owner = { pid: null, alive: null }) {
|
|
|
1341
1371
|
*/
|
|
1342
1372
|
function alreadyAborted(issue, repo, marker) {
|
|
1343
1373
|
const comments = (0, gh_1.tryFetchComments)(issue, repo);
|
|
1344
|
-
return comments.ok &&
|
|
1374
|
+
return (comments.ok &&
|
|
1375
|
+
comments.comments.some((c) => (0, core_1.isTrustedAuthorAssociation)(c?.authorAssociation) && String(c?.body ?? '').includes(marker)));
|
|
1345
1376
|
}
|
|
1346
1377
|
/**
|
|
1347
1378
|
* `runstate check` — the agent-side checkpoint (#504 AC2): has this run been superseded?
|