@ai-dossier/cli 0.81.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/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/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 +1 -1
|
@@ -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":";;;;;;AA+SA,kEAwRC;AAvkBD,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAC7B,2CAAuD;AAEvD,sDAK2B;AAC3B,sDAA+E;AAC/E,oDAQ0B;AAsjBjB,qGA7jBP,oCAAoB,OA6jBO;AArjB7B,wDAAsD;AACtD,wDAA2E;AAC3E,4DAA0D;AAC1D,8CAQuB;AAEvB,kEAAkE;AAClE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAoB1E;;;GAGG;AACH,KAAK,UAAU,UAAU,CACvB,WAAmB,EACnB,OAA2B,EAC3B,GAAe;IAEf,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC;IAC9D,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,eAAe,GAAG,OAAO,CAAC;IAE9B,iFAAiF;IACjF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,IAAA,kCAAiB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAoB,EAAC,WAAW,EAAE;YACvD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,aAAa;SACd,CAAC,CAAC;QACH,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,IAAA,kCAAiB,EAAC,WAAW,EAAE,eAAyB,CAAC,CAAC;QACzE,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,GAAG,MAAM,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAA,wCAAuB,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC/F,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,WAAW,EAAE,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;QACjC,4CAA4C;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,IAAA,mCAAkB,EAAC,WAAW,EAAE,eAAyB,EAAE,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5B,iBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,sEAAsE;QACtE,8DAA8D;QAC9D,iBAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAA,sCAAkB,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,IAAI,QAAQ,GAA8B,KAAK,CAAC;IAChD,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC9B,QAAQ,GAAG,IAAA,oCAAoB,EAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAsC,CAAC;QACzD,OAAO,GAAI,EAAE,CAAC,SAAoB,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3E,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,OAAO;QACL,SAAS;QACT,SAAS;QACT,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,eAAe,IAAI,IAAI;QAChC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;QAC5C,OAAO;QACP,MAAM,EAAE,SAAS;QACjB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;GAGG;AACH,KAAK,UAAU,qBAAqB;IAIlC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,MAAM,MAAM,GAA+C,EAAE,CAAC;IAC9D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,IAAA,kCAAiB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;gBACf,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;QACV,CAAC;QACD,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc;YAAE,MAAM;IACjE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC;AAqBD,kGAAkG;AAClG,KAAK,UAAU,eAAe,CAAC,IAAkB,EAAE,GAAe;IAChE,MAAM,IAAI,GAAG,CAAC,OAAe,EAAS,EAAE;QACtC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;YACnF,OAAO,CAAC,KAAK,CAAC,OAAO,OAAO,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,QAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAC7C,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,qBAAQ,EAAC;QACpB,QAAQ;QACR,SAAS,EAAE,IAAA,gCAAmB,EAAC,GAAG,CAAC,SAAS,CAAC;QAC7C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG;QACf,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;QACzB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAkB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;YAC/C,OAAO,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;SACpC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,GAAgD,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,IAAI;gBACP,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;aACrF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,MAAM,OAAO,GAAG;QACd,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC;QACf,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;QACzB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACvB,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;KAC/B,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC;IAEjE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,GAAG,GACP,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,OAAO;gBACjE,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,OAAO,CAAC,CAAC,OAAO,EAAE;gBACzC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,GAAG,GACP,CAAC,CAAC,MAAM,KAAK,IAAI;gBACf,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS;oBACtB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ;wBACrB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,WAAW,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,OAAO,CAAC,EAAE,eAAe,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,UAAU,eAAe,CACtH,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,mDAAmD;AACnD,SAAS,aAAa,CACpB,CAAiB,EACjB,YAA+C;IAE/C,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACpD,OAAO,EAAE,MAAM,EAAE,IAAA,qBAAQ,EAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC;AAED,SAAgB,2BAA2B,CAAC,OAAgB;IAC1D,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,QAAQ,CAAC,QAAQ,EAAE,iEAAiE,CAAC;SACrF,MAAM,CAAC,SAAS,EAAE,mCAAmC,CAAC;SACtD,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CACL,qBAAqB,EACrB,uGAAuG,CACxG;SACA,MAAM,CAAC,QAAQ,EAAE,oEAAoE,CAAC;SACtF,MAAM,CACL,OAAO,EACP,gFAAgF,CACjF;SACA,MAAM,CACL,YAAY,EACZ,wGAAwG,CACzG;SACA,MAAM,CAAC,iBAAiB,EAAE,yDAAyD,CAAC;SACpF,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CACL,gBAAgB,EAChB,oFAAoF,CACrF;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CACL,KAAK,EACH,IAAwB,EACxB,OAWC,EACD,EAAE;QACF,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/D,wDAAwD;QACxD,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,GAAiB,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,KAAK,CACX,4BAA4B,OAAO,CAAC,GAAG,4CAA4C,CACpF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,8BAAc,EAAC,OAAO,CAAC,GAA6B,CAAC,CAAC;QAEtE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,IAAA,gCAAmB,EAAC,SAAS,CAAC,CAAC,MAAM,CACxD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CACrE,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,IAAI,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;oBAClE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,uFAAuF;YACvF,IAAI,YAAY,GAAsC,IAAI,CAAC;YAC3D,IAAI,aAAiC,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,EAAE,CAAC;gBAC7C,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,aAAa,GAAI,GAAa,CAAC,OAAO,CAAC;YACzC,CAAC;YAED,2EAA2E;YAC3E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAA,kCAAkB,GAAE,CAAC,CAAC;YAExD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACnC,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;gBAClF,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACzD,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBACrE,IAAI,SAAS;wBAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,CAAC;gBACD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;gBAC9C,OAAO;oBACL,KAAK,EAAE,EAAE,CAAC,GAAG;oBACb,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;oBACzB,gBAAgB,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI;oBACpC,aAAa,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;oBACnC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC5E,WAAW;iBACZ,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAChF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;YACzD,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,sDAAsD,aAAa,KAAK,CAAC,CAAC;YACxF,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC;gBACzE,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,MAAM,KAAK,gBAAgB;oBAAE,KAAK,GAAG,mBAAmB,CAAC;qBAC1D,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;oBAC/C,KAAK,GAAG,KAAK,CAAC,CAAC,gBAAgB,IAAI,GAAG,EAAE,CAAC;oBACzC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;wBAAE,KAAK,IAAI,YAAY,CAAC,CAAC,aAAa,UAAU,CAAC;yBACrE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;wBAAE,KAAK,IAAI,kBAAkB,CAAC,CAAC,aAAa,SAAS,CAAC;gBACrF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAClB,MAAM,OAAO,GACX,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;oBACjF,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,aAAa,GAAG,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,eAAe,GAAG,iBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,mCAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAEtF,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,aAAa,EAAE,CAAC;gBAClB,iBAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,cAAc,GAAG,IAAA,qCAAqB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE7D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,aAAa;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,cAAc;gBAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CACX,0EAA0E,CAC3E,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,eAAe,CACnB,EAAE,GAAG,OAAO,EAAE,EACd,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACrE,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CACX,+FAA+F,CAChG,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAA,kCAAgB,EAAC,IAAI,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC;QAC9D,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElD,+EAA+E;QAC/E,gFAAgF;QAChF,iFAAiF;QACjF,+EAA+E;QAC/E,oEAAoE;QACpE,IAAI,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAA,qCAAmB,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAC9D,IAAI,SAAS,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CACX,IAAA,kCAAgB,EACd,SAAS,EACT,SAAS,CAAC,cAAwB,EAClC,WAAW,EACX,SAAS,CACV,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,IAAI,SAAS,EAAE;gBAC5D,SAAS;gBACT,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;YAClC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;YAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;oBACE,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,eAAe,IAAI,IAAI;oBAChC,QAAQ,EAAE,SAAS;oBACnB,QAAQ;oBACR,OAAO,EAAE,OAAO,IAAI,IAAI;oBACxB,MAAM,EAAE,SAAS;oBACjB,QAAQ,EAAE,cAAc;oBACxB,gBAAgB,EACd,cAAc,KAAK,KAAK,IAAI,cAAc,KAAK,SAAS;wBACtD,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,mCAAmB,EAAE,SAAS,EAAE,UAAU,CAAC;wBACvD,CAAC,CAAC,IAAI;iBACX,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,wBAAwB,SAAS,IAAI,eAAe,CAAC,CAAC,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACvF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,QAAQ,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC7E,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBACjE,OAAO,CAAC,GAAG,CACT,gBAAgB,cAAc,OAAO,mBAAI,CAAC,IAAI,CAAC,mCAAmB,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,CAC7F,CAAC;gBACJ,CAAC;qBAAM,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBACxC,oEAAoE;oBACpE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBACjE,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA+C,CAAC;YAC1D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;oBACE,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB;oBAC5D,OAAO,EAAE,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;iBACjE,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;YACJ,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,IAAI,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
|
package/dist/opencode-sync.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export declare function isDossierFrontmatter(content: string): boolean;
|
|
|
49
49
|
* `skillName` is the filesystem directory name — used as a fallback when the JSON
|
|
50
50
|
* has no `name` field (edge case: scaffold-project).
|
|
51
51
|
*/
|
|
52
|
-
export declare function buildOpencodeWrapper(rawContent: string, skillName: string): string | null;
|
|
52
|
+
export declare function buildOpencodeWrapper(rawContent: string, skillName: string, source?: string): string | null;
|
|
53
53
|
/**
|
|
54
54
|
* Write an opencode wrapper for a skill. Idempotent: no-op when content matches.
|
|
55
55
|
*
|
|
@@ -60,7 +60,7 @@ export declare function buildOpencodeWrapper(rawContent: string, skillName: stri
|
|
|
60
60
|
* 'skipped' — source is YAML-native, opencode reads it directly (no wrapper needed)
|
|
61
61
|
*/
|
|
62
62
|
export type WriteResult = 'created' | 'updated' | 'unchanged' | 'skipped';
|
|
63
|
-
export declare function writeOpencodeWrapper(skillName: string, rawContent: string): WriteResult;
|
|
63
|
+
export declare function writeOpencodeWrapper(skillName: string, rawContent: string, source?: string): WriteResult;
|
|
64
64
|
/**
|
|
65
65
|
* Remove a skill's opencode wrapper if present. Best-effort: no error when missing.
|
|
66
66
|
* Returns true if a wrapper was removed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sync.d.ts","sourceRoot":"","sources":["../src/opencode-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAE9E,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,QAAiD,CAAC;AAElF,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,CAK9E;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"opencode-sync.d.ts","sourceRoot":"","sources":["../src/opencode-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,8FAA8F;AAC9F,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAE9E,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,QAAiD,CAAC;AAElF,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAE5E,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,CAK9E;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE7D;AAkBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAqCf;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1E,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,CAiBb;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAKhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C"}
|
package/dist/opencode-sync.js
CHANGED
|
@@ -87,7 +87,7 @@ function isDelegatingSkill(body) {
|
|
|
87
87
|
* `skillName` is the filesystem directory name — used as a fallback when the JSON
|
|
88
88
|
* has no `name` field (edge case: scaffold-project).
|
|
89
89
|
*/
|
|
90
|
-
function buildOpencodeWrapper(rawContent, skillName) {
|
|
90
|
+
function buildOpencodeWrapper(rawContent, skillName, source) {
|
|
91
91
|
if (!isDossierFrontmatter(rawContent)) {
|
|
92
92
|
return null;
|
|
93
93
|
}
|
|
@@ -111,13 +111,19 @@ function buildOpencodeWrapper(rawContent, skillName) {
|
|
|
111
111
|
lines.push('allowedTools:');
|
|
112
112
|
lines.push(' - Bash(ai-dossier run *)');
|
|
113
113
|
}
|
|
114
|
+
// Provenance, so the opencode copy is as re-fetchable as the claude one.
|
|
115
|
+
if (source) {
|
|
116
|
+
lines.push(`x_source: ${source}`);
|
|
117
|
+
if (fm.version != null)
|
|
118
|
+
lines.push(`version: ${yamlSingleQuote(String(fm.version))}`);
|
|
119
|
+
}
|
|
114
120
|
lines.push('---');
|
|
115
121
|
// Ensure exactly one blank line between frontmatter and body, then the body verbatim.
|
|
116
122
|
const body = parsed.body.replace(/^\s*\n/, '');
|
|
117
123
|
return `${lines.join('\n')}\n\n${body}`;
|
|
118
124
|
}
|
|
119
|
-
function writeOpencodeWrapper(skillName, rawContent) {
|
|
120
|
-
const wrapper = buildOpencodeWrapper(rawContent, skillName);
|
|
125
|
+
function writeOpencodeWrapper(skillName, rawContent, source) {
|
|
126
|
+
const wrapper = buildOpencodeWrapper(rawContent, skillName, source);
|
|
121
127
|
if (wrapper === null)
|
|
122
128
|
return 'skipped';
|
|
123
129
|
const targetDir = node_path_1.default.join(exports.OPENCODE_SKILLS_DIR, skillName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sync.js","sourceRoot":"","sources":["../src/opencode-sync.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;AAwBH,oDAEC;AAUD,wCAKC;AAGD,oDAEC;AA2BD,
|
|
1
|
+
{"version":3,"file":"opencode-sync.js","sourceRoot":"","sources":["../src/opencode-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planning logic for `install-skill --all` / `--outdated` / `--list`.
|
|
3
|
+
*
|
|
4
|
+
* Everything here is pure or reads only the local skills directory, so the decision of
|
|
5
|
+
* WHAT to install can be tested without a registry. The command layer does the fetching.
|
|
6
|
+
*
|
|
7
|
+
* "Is a skill" has no registry-side flag today, so it is defined explicitly:
|
|
8
|
+
* a dossier is a skill when its basename ends in `-skill` (the publishing convention
|
|
9
|
+
* for trigger skills) or it carries the `skill` tag.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SKILL_SUFFIX = "-skill";
|
|
12
|
+
export interface RegistrySkill {
|
|
13
|
+
/** Full registry path, e.g. `imboard-ai/skills/full-cycle-issue-skill`. */
|
|
14
|
+
name: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
tags?: string[];
|
|
17
|
+
}
|
|
18
|
+
export interface InstalledSkill {
|
|
19
|
+
/** Directory name under the skills dir (the basename). */
|
|
20
|
+
dir: string;
|
|
21
|
+
/** Registry path recorded at install time; undefined for legacy installs. */
|
|
22
|
+
source?: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
}
|
|
25
|
+
export type SkillStatus = 'current' | 'behind' | 'ahead' | 'not-installed' | 'unknown-source';
|
|
26
|
+
export declare function skillBasename(name: string): string;
|
|
27
|
+
/** Registry owner is the first path segment (`imboard-ai/qa/x` -> `imboard-ai`). */
|
|
28
|
+
export declare function skillOwner(name: string): string;
|
|
29
|
+
export declare function isSkillDossier(d: RegistrySkill): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Compare dotted versions numerically, ignoring any pre-release/build suffix.
|
|
32
|
+
* Returns <0, 0, >0. Non-numeric segments compare as 0.
|
|
33
|
+
*/
|
|
34
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
35
|
+
export declare function classify(installed: string | undefined, latest: string | undefined): SkillStatus;
|
|
36
|
+
/** Read every installed skill's recorded source + version. Unreadable files are kept, unsourced. */
|
|
37
|
+
export declare function readInstalledSkills(skillsDir: string): InstalledSkill[];
|
|
38
|
+
export interface PlanItem {
|
|
39
|
+
name: string;
|
|
40
|
+
skill: string;
|
|
41
|
+
installedVersion?: string;
|
|
42
|
+
latestVersion?: string;
|
|
43
|
+
action: 'install' | 'skip' | 'collision';
|
|
44
|
+
/** Why the item was skipped or refused. */
|
|
45
|
+
reason?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface PlanOptions {
|
|
48
|
+
registry: RegistrySkill[];
|
|
49
|
+
installed: InstalledSkill[];
|
|
50
|
+
skillsDir: string;
|
|
51
|
+
owner?: string;
|
|
52
|
+
/** --all: consider every registry skill. Otherwise only installed skills with a source. */
|
|
53
|
+
all: boolean;
|
|
54
|
+
/** --outdated: install only what is missing or BEHIND. Otherwise refresh everything. */
|
|
55
|
+
outdated: boolean;
|
|
56
|
+
force?: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Decide, per candidate, whether to install, skip, or refuse.
|
|
60
|
+
*
|
|
61
|
+
* Refused (`collision`) means installing would silently replace a different dossier:
|
|
62
|
+
* either two candidates share a basename, or the target directory holds another source.
|
|
63
|
+
* Those are reported and never written — `--force` only overrides the second kind,
|
|
64
|
+
* because for the first there is no single right answer to force.
|
|
65
|
+
*/
|
|
66
|
+
export declare function planSync(opts: PlanOptions): PlanItem[];
|
|
67
|
+
//# sourceMappingURL=skill-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-sync.d.ts","sourceRoot":"","sources":["../src/skill-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAE9F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAc5D;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAK/F;AAED,oGAAoG;AACpG,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAsBvE;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,GAAG,EAAE,OAAO,CAAC;IACb,wFAAwF;IACxF,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,EAAE,CAgEtD"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Planning logic for `install-skill --all` / `--outdated` / `--list`.
|
|
4
|
+
*
|
|
5
|
+
* Everything here is pure or reads only the local skills directory, so the decision of
|
|
6
|
+
* WHAT to install can be tested without a registry. The command layer does the fetching.
|
|
7
|
+
*
|
|
8
|
+
* "Is a skill" has no registry-side flag today, so it is defined explicitly:
|
|
9
|
+
* a dossier is a skill when its basename ends in `-skill` (the publishing convention
|
|
10
|
+
* for trigger skills) or it carries the `skill` tag.
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.SKILL_SUFFIX = void 0;
|
|
17
|
+
exports.skillBasename = skillBasename;
|
|
18
|
+
exports.skillOwner = skillOwner;
|
|
19
|
+
exports.isSkillDossier = isSkillDossier;
|
|
20
|
+
exports.compareVersions = compareVersions;
|
|
21
|
+
exports.classify = classify;
|
|
22
|
+
exports.readInstalledSkills = readInstalledSkills;
|
|
23
|
+
exports.planSync = planSync;
|
|
24
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
25
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
26
|
+
const core_1 = require("@ai-dossier/core");
|
|
27
|
+
const skill_collision_1 = require("./skill-collision");
|
|
28
|
+
exports.SKILL_SUFFIX = '-skill';
|
|
29
|
+
function skillBasename(name) {
|
|
30
|
+
return name.split('/').pop() ?? name;
|
|
31
|
+
}
|
|
32
|
+
/** Registry owner is the first path segment (`imboard-ai/qa/x` -> `imboard-ai`). */
|
|
33
|
+
function skillOwner(name) {
|
|
34
|
+
return name.split('/')[0] ?? '';
|
|
35
|
+
}
|
|
36
|
+
function isSkillDossier(d) {
|
|
37
|
+
return skillBasename(d.name).endsWith(exports.SKILL_SUFFIX) || (d.tags ?? []).includes('skill');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Compare dotted versions numerically, ignoring any pre-release/build suffix.
|
|
41
|
+
* Returns <0, 0, >0. Non-numeric segments compare as 0.
|
|
42
|
+
*/
|
|
43
|
+
function compareVersions(a, b) {
|
|
44
|
+
const parts = (v) => v
|
|
45
|
+
.replace(/^v/, '')
|
|
46
|
+
.split(/[-+]/)[0]
|
|
47
|
+
.split('.')
|
|
48
|
+
.map((n) => Number.parseInt(n, 10) || 0);
|
|
49
|
+
const pa = parts(a);
|
|
50
|
+
const pb = parts(b);
|
|
51
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
52
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
53
|
+
if (diff !== 0)
|
|
54
|
+
return diff;
|
|
55
|
+
}
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
function classify(installed, latest) {
|
|
59
|
+
if (!installed)
|
|
60
|
+
return 'not-installed';
|
|
61
|
+
if (!latest)
|
|
62
|
+
return 'current';
|
|
63
|
+
const c = compareVersions(installed, latest);
|
|
64
|
+
return c < 0 ? 'behind' : c > 0 ? 'ahead' : 'current';
|
|
65
|
+
}
|
|
66
|
+
/** Read every installed skill's recorded source + version. Unreadable files are kept, unsourced. */
|
|
67
|
+
function readInstalledSkills(skillsDir) {
|
|
68
|
+
if (!node_fs_1.default.existsSync(skillsDir))
|
|
69
|
+
return [];
|
|
70
|
+
const out = [];
|
|
71
|
+
for (const e of node_fs_1.default.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
72
|
+
if (!e.isDirectory())
|
|
73
|
+
continue;
|
|
74
|
+
const file = node_path_1.default.join(skillsDir, e.name, 'SKILL.md');
|
|
75
|
+
if (!node_fs_1.default.existsSync(file))
|
|
76
|
+
continue;
|
|
77
|
+
const skill = { dir: e.name };
|
|
78
|
+
try {
|
|
79
|
+
const fm = (0, core_1.parseDossierContent)(node_fs_1.default.readFileSync(file, 'utf8')).frontmatter;
|
|
80
|
+
// Only a full registry path is provenance; a bare `name` (pre-x_source install) is not.
|
|
81
|
+
if (typeof fm.x_source === 'string' && fm.x_source.includes('/'))
|
|
82
|
+
skill.source = fm.x_source;
|
|
83
|
+
if (fm.version != null)
|
|
84
|
+
skill.version = String(fm.version);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// unreadable frontmatter -> treated as unknown source
|
|
88
|
+
}
|
|
89
|
+
out.push(skill);
|
|
90
|
+
}
|
|
91
|
+
return out.sort((a, b) => a.dir.localeCompare(b.dir));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Decide, per candidate, whether to install, skip, or refuse.
|
|
95
|
+
*
|
|
96
|
+
* Refused (`collision`) means installing would silently replace a different dossier:
|
|
97
|
+
* either two candidates share a basename, or the target directory holds another source.
|
|
98
|
+
* Those are reported and never written — `--force` only overrides the second kind,
|
|
99
|
+
* because for the first there is no single right answer to force.
|
|
100
|
+
*/
|
|
101
|
+
function planSync(opts) {
|
|
102
|
+
const { registry, installed, skillsDir, owner, all, outdated, force } = opts;
|
|
103
|
+
const byDir = new Map(installed.map((s) => [s.dir, s]));
|
|
104
|
+
const latestBy = new Map(registry.map((r) => [r.name, r]));
|
|
105
|
+
const inOwner = (n) => !owner || skillOwner(n) === owner;
|
|
106
|
+
let candidates;
|
|
107
|
+
if (all) {
|
|
108
|
+
candidates = registry.filter((d) => isSkillDossier(d) && inOwner(d.name));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
candidates = [];
|
|
112
|
+
for (const s of installed) {
|
|
113
|
+
if (!s.source || !inOwner(s.source))
|
|
114
|
+
continue;
|
|
115
|
+
candidates.push(latestBy.get(s.source) ?? { name: s.source });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Basename groups with more than one distinct registry path.
|
|
119
|
+
const groups = new Map();
|
|
120
|
+
for (const c of candidates) {
|
|
121
|
+
const b = skillBasename(c.name);
|
|
122
|
+
groups.set(b, [...(groups.get(b) ?? []), c.name]);
|
|
123
|
+
}
|
|
124
|
+
const items = [];
|
|
125
|
+
for (const c of candidates) {
|
|
126
|
+
const skill = skillBasename(c.name);
|
|
127
|
+
const inst = byDir.get(skill);
|
|
128
|
+
const item = {
|
|
129
|
+
name: c.name,
|
|
130
|
+
skill,
|
|
131
|
+
installedVersion: inst?.version,
|
|
132
|
+
latestVersion: c.version,
|
|
133
|
+
action: 'install',
|
|
134
|
+
};
|
|
135
|
+
const peers = (groups.get(skill) ?? []).filter((n) => n !== c.name);
|
|
136
|
+
if (peers.length > 0) {
|
|
137
|
+
item.action = 'collision';
|
|
138
|
+
item.reason = `basename collides with ${peers.join(', ')}`;
|
|
139
|
+
items.push(item);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (inst) {
|
|
143
|
+
const occupied = (0, skill_collision_1.checkSkillCollision)(node_path_1.default.join(skillsDir, skill, 'SKILL.md'), c.name);
|
|
144
|
+
if (occupied.collides && !force) {
|
|
145
|
+
item.action = 'collision';
|
|
146
|
+
item.reason = `directory holds ${occupied.existingSource ?? 'another dossier'}`;
|
|
147
|
+
items.push(item);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (outdated) {
|
|
152
|
+
const status = classify(inst?.version, c.version);
|
|
153
|
+
if (status !== 'behind' && status !== 'not-installed') {
|
|
154
|
+
item.action = 'skip';
|
|
155
|
+
item.reason = status === 'ahead' ? 'installed is newer than registry' : 'up to date';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
items.push(item);
|
|
159
|
+
}
|
|
160
|
+
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=skill-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-sync.js","sourceRoot":"","sources":["../src/skill-sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-dossier/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.82.0",
|
|
4
4
|
"description": "Create, verify, sign, publish, and run dossiers — portable, signed, versioned skills for any LLM tool. The dossier ⇄ Claude Code skill bridge (install-skill / skill-export).",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|