@nocobase/app-cli-client 0.1.0-beta.0 → 0.1.0-beta.10

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.
Files changed (73) hide show
  1. package/README.md +13 -1
  2. package/dist/acp-service.d.ts +39 -0
  3. package/dist/acp-service.d.ts.map +1 -0
  4. package/dist/acp-service.js +257 -0
  5. package/dist/acp-service.js.map +1 -0
  6. package/dist/acp.d.ts +28 -0
  7. package/dist/acp.d.ts.map +1 -0
  8. package/dist/acp.js +395 -0
  9. package/dist/acp.js.map +1 -0
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +10 -0
  12. package/dist/commands.js.map +1 -1
  13. package/dist/dynamic/index.d.ts +3 -1
  14. package/dist/dynamic/index.d.ts.map +1 -1
  15. package/dist/dynamic/index.js +48 -12
  16. package/dist/dynamic/index.js.map +1 -1
  17. package/dist/dynamic/manifest.d.ts.map +1 -1
  18. package/dist/dynamic/manifest.js +10 -0
  19. package/dist/dynamic/manifest.js.map +1 -1
  20. package/dist/dynamic/output.d.ts +2 -2
  21. package/dist/dynamic/output.d.ts.map +1 -1
  22. package/dist/dynamic/output.js +23 -8
  23. package/dist/dynamic/output.js.map +1 -1
  24. package/dist/dynamic/rest.d.ts.map +1 -1
  25. package/dist/dynamic/rest.js +24 -0
  26. package/dist/dynamic/rest.js.map +1 -1
  27. package/dist/dynamic/session.d.ts +1 -0
  28. package/dist/dynamic/session.d.ts.map +1 -1
  29. package/dist/dynamic/session.js +29 -1
  30. package/dist/dynamic/session.js.map +1 -1
  31. package/dist/install.d.ts +75 -5
  32. package/dist/install.d.ts.map +1 -1
  33. package/dist/install.js +256 -13
  34. package/dist/install.js.map +1 -1
  35. package/dist/lib/command.d.ts.map +1 -1
  36. package/dist/lib/command.js +14 -4
  37. package/dist/lib/command.js.map +1 -1
  38. package/dist/lib/credentials.d.ts +2 -0
  39. package/dist/lib/credentials.d.ts.map +1 -1
  40. package/dist/lib/credentials.js +7 -3
  41. package/dist/lib/credentials.js.map +1 -1
  42. package/dist/lib/envelope.d.ts +2 -0
  43. package/dist/lib/envelope.d.ts.map +1 -1
  44. package/dist/lib/envelope.js +16 -2
  45. package/dist/lib/envelope.js.map +1 -1
  46. package/dist/lib/http.d.ts.map +1 -1
  47. package/dist/lib/http.js +1 -0
  48. package/dist/lib/http.js.map +1 -1
  49. package/dist/parse/arguments.d.ts.map +1 -1
  50. package/dist/parse/arguments.js +9 -0
  51. package/dist/parse/arguments.js.map +1 -1
  52. package/dist/parse/distance.d.ts +22 -0
  53. package/dist/parse/distance.d.ts.map +1 -0
  54. package/dist/parse/distance.js +82 -0
  55. package/dist/parse/distance.js.map +1 -0
  56. package/dist/parse/manifest.d.ts +10 -0
  57. package/dist/parse/manifest.d.ts.map +1 -1
  58. package/dist/run.d.ts.map +1 -1
  59. package/dist/run.js +36 -5
  60. package/dist/run.js.map +1 -1
  61. package/dist/skills.d.ts +60 -0
  62. package/dist/skills.d.ts.map +1 -0
  63. package/dist/skills.js +558 -0
  64. package/dist/skills.js.map +1 -0
  65. package/dist/update.d.ts +6 -0
  66. package/dist/update.d.ts.map +1 -1
  67. package/dist/update.js +33 -14
  68. package/dist/update.js.map +1 -1
  69. package/dist/whoami.d.ts +2 -0
  70. package/dist/whoami.d.ts.map +1 -1
  71. package/dist/whoami.js +10 -3
  72. package/dist/whoami.js.map +1 -1
  73. package/package.json +6 -5
package/dist/skills.js ADDED
@@ -0,0 +1,558 @@
1
+ // Local installation of the one Studio Skill shipped by a branded CLI. No session, credential, or network is read.
2
+ import { createHash } from 'node:crypto';
3
+ import { constants, existsSync } from 'node:fs';
4
+ import { access, lstat, stat as followStat, mkdir, mkdtemp, open, readFile, readdir, rename, rm, writeFile, } from 'node:fs/promises';
5
+ import os from 'node:os';
6
+ import path from 'node:path';
7
+ import { Flags } from '@oclif/core';
8
+ import { EXIT_CODES } from '@nocobase/agent-protocol';
9
+ import { appCliHome } from "./config.js";
10
+ import { AppCommand } from "./lib/command.js";
11
+ import { findRunCredentials } from "./lib/credentials.js";
12
+ import { CliCommandError } from "./lib/envelope.js";
13
+ const SKILL = 'nb-studio-cli';
14
+ const TOOLS = ['claude', 'codex'];
15
+ function sourceOf(environment) {
16
+ return path.resolve(environment.packageRoot, 'skills', SKILL);
17
+ }
18
+ /** Only packages shipping this Skill expose the two commands. */
19
+ export function hasStudioSkill(config) {
20
+ return (config.selfUpdate !== undefined &&
21
+ existsSync(path.join(config.selfUpdate.packageRoot, 'skills', SKILL, 'SKILL.md')));
22
+ }
23
+ export function skillsEnvironment(config) {
24
+ if (config.selfUpdate === undefined)
25
+ throw new Error('This CLI has no packaged Skill.');
26
+ return {
27
+ packageRoot: config.selfUpdate.packageRoot,
28
+ cliVersion: config.version ?? 'unknown',
29
+ bin: config.bin,
30
+ stateHome: appCliHome(config),
31
+ };
32
+ }
33
+ function locations(environment) {
34
+ const home = environment.home ?? os.homedir();
35
+ const env = environment.env ?? process.env;
36
+ const configs = {
37
+ claude: path.resolve(env.CLAUDE_CONFIG_DIR || path.join(home, '.claude')),
38
+ codex: path.resolve(env.CODEX_HOME || path.join(home, '.codex')),
39
+ };
40
+ return {
41
+ configs,
42
+ defaults: [
43
+ { tool: 'claude', path: path.join(configs.claude, 'skills', SKILL) },
44
+ { tool: 'codex', path: path.resolve(home, '.agents', 'skills', SKILL) },
45
+ ],
46
+ legacy: { tool: 'codex', path: path.join(configs.codex, 'skills', SKILL) },
47
+ };
48
+ }
49
+ async function detected(tool, environment) {
50
+ const env = environment.env ?? process.env;
51
+ if (env[tool === 'claude' ? 'CLAUDE_CONFIG_DIR' : 'CODEX_HOME'])
52
+ return true;
53
+ if ((await stat(locations(environment).configs[tool]))?.isDirectory())
54
+ return true;
55
+ const names = process.platform === 'win32' ? ['', '.exe', '.cmd', '.bat'] : [''];
56
+ for (const dir of (env.PATH ?? '').split(path.delimiter).filter(Boolean)) {
57
+ for (const suffix of names) {
58
+ const executable = path.join(dir, `${tool}${suffix}`);
59
+ try {
60
+ if (!(await followStat(executable)).isFile())
61
+ continue;
62
+ await access(executable, constants.X_OK);
63
+ return true;
64
+ }
65
+ catch {
66
+ /* An inaccessible executable is not evidence of a usable tool. */
67
+ }
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+ function selection(tools) {
73
+ if (tools.some((tool) => ![...TOOLS, 'all'].includes(tool)))
74
+ throw new CliCommandError('SKILLS_INVALID_TOOL', 'Choose --tool claude, codex, or all.', { exit: EXIT_CODES.validation });
75
+ return tools.includes('all')
76
+ ? [...TOOLS]
77
+ : TOOLS.filter((tool) => tools.includes(tool));
78
+ }
79
+ async function stat(file) {
80
+ try {
81
+ return await lstat(file);
82
+ }
83
+ catch (error) {
84
+ if (error.code === 'ENOENT')
85
+ return undefined;
86
+ throw error;
87
+ }
88
+ }
89
+ // Reject links at every writable component, including a dangling link. We never follow a link to replace its target.
90
+ async function safePath(file, directory = true) {
91
+ const absolute = path.resolve(file);
92
+ let current = path.parse(absolute).root;
93
+ for (const part of absolute
94
+ .slice(current.length)
95
+ .split(path.sep)
96
+ .filter(Boolean)) {
97
+ current = path.join(current, part);
98
+ const info = await stat(current);
99
+ if (info === undefined)
100
+ continue;
101
+ if (info.isSymbolicLink() ||
102
+ (directory || current !== absolute ? !info.isDirectory() : !info.isFile()))
103
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', `Refusing a symbolic link or unexpected file type: ${current}`, { exit: EXIT_CODES.validation });
104
+ }
105
+ }
106
+ async function snapshot(root) {
107
+ await safePath(root);
108
+ const entries = [];
109
+ async function visit(dir, relative) {
110
+ for (const name of (await readdir(dir)).sort()) {
111
+ const child = path.join(dir, name);
112
+ const rel = relative ? `${relative}/${name}` : name;
113
+ const info = await lstat(child);
114
+ if (info.isDirectory()) {
115
+ entries.push({ name: rel });
116
+ await visit(child, rel);
117
+ }
118
+ else if (info.isFile()) {
119
+ // O_NOFOLLOW also closes the file-link race between lstat and open on supported platforms.
120
+ const handle = await open(child, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
121
+ try {
122
+ entries.push({ name: rel, bytes: await handle.readFile() });
123
+ }
124
+ finally {
125
+ await handle.close();
126
+ }
127
+ }
128
+ else
129
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', `Refusing a symbolic link or special file inside the Skill: ${child}`, { exit: EXIT_CODES.validation });
130
+ }
131
+ }
132
+ await visit(root, '');
133
+ const hash = createHash('sha256')
134
+ .update(JSON.stringify(entries.map((entry) => [
135
+ entry.name,
136
+ entry.bytes === undefined
137
+ ? 'directory'
138
+ : createHash('sha256').update(entry.bytes).digest('hex'),
139
+ ])))
140
+ .digest('hex');
141
+ return { entries, hash };
142
+ }
143
+ async function bundled(environment) {
144
+ const result = await snapshot(sourceOf(environment));
145
+ if (!result.entries.some((entry) => entry.name === 'SKILL.md' && entry.bytes !== undefined))
146
+ throw new Error('The packaged nb-studio-cli Skill has no SKILL.md.');
147
+ return result;
148
+ }
149
+ function registryFile(environment) {
150
+ return path.resolve(environment.stateHome, 'skills.json');
151
+ }
152
+ async function readRegistry(environment) {
153
+ const file = registryFile(environment);
154
+ await safePath(file, false);
155
+ if ((await stat(file)) === undefined)
156
+ return { skill: SKILL, targets: [] };
157
+ const data = JSON.parse(await readFile(file, 'utf8'));
158
+ if (data === null ||
159
+ typeof data !== 'object' ||
160
+ data.skill !== SKILL ||
161
+ !Array.isArray(data.targets) ||
162
+ data.targets.some((target) => !target ||
163
+ !TOOLS.includes(target.tool) ||
164
+ typeof target.path !== 'string' ||
165
+ !path.isAbsolute(target.path) ||
166
+ path.basename(target.path) !== SKILL ||
167
+ path.basename(path.dirname(target.path)) !== 'skills' ||
168
+ typeof target.cliVersion !== 'string' ||
169
+ typeof target.hash !== 'string'))
170
+ throw new CliCommandError('SKILLS_INVALID_REGISTRY', `Invalid Skill installation record: ${file}`, { exit: EXIT_CODES.validation });
171
+ return data;
172
+ }
173
+ async function writeRegistry(environment, registry) {
174
+ const file = registryFile(environment);
175
+ await safePath(file, false);
176
+ const temporary = await mkdtemp(path.join(environment.stateHome, '.skills-record-'));
177
+ try {
178
+ const staged = path.join(temporary, 'skills.json');
179
+ await writeFile(staged, `${JSON.stringify(registry, null, 2)}\n`, {
180
+ mode: 0o600,
181
+ });
182
+ await rename(staged, file);
183
+ }
184
+ finally {
185
+ await rm(temporary, { recursive: true, force: true });
186
+ }
187
+ }
188
+ async function lock(file, work) {
189
+ await safePath(path.dirname(file));
190
+ await mkdir(path.dirname(file), { recursive: true });
191
+ try {
192
+ await mkdir(file);
193
+ }
194
+ catch (error) {
195
+ if (error.code === 'EEXIST')
196
+ throw new CliCommandError('SKILLS_BUSY', `Another Skill operation holds ${file}. Retry after it finishes; if it was interrupted, remove this lock directory before retrying.`, { exit: EXIT_CODES.conflict });
197
+ throw error;
198
+ }
199
+ try {
200
+ return await work();
201
+ }
202
+ finally {
203
+ await rm(file, { recursive: true, force: true });
204
+ }
205
+ }
206
+ async function statusOf(target, environment, source, registry) {
207
+ const record = registry.targets.find((record) => path.resolve(record.path) === path.resolve(target.path));
208
+ const base = {
209
+ ...target,
210
+ legacy: target.tool === 'codex' &&
211
+ target.path !== locations(environment).defaults[1].path,
212
+ registered: record !== undefined,
213
+ ...(record ? { installedCliVersion: record.cliVersion } : {}),
214
+ };
215
+ try {
216
+ await safePath(target.path);
217
+ const present = (await stat(target.path)) !== undefined;
218
+ return {
219
+ ...base,
220
+ present,
221
+ upToDate: present && (await snapshot(target.path)).hash === source.hash,
222
+ };
223
+ }
224
+ catch (error) {
225
+ return {
226
+ ...base,
227
+ present: (await stat(target.path).catch(() => undefined)) !== undefined,
228
+ upToDate: false,
229
+ error: error instanceof Error ? error.message : String(error),
230
+ };
231
+ }
232
+ }
233
+ function unique(targets) {
234
+ return [
235
+ ...new Map(targets.map((target) => {
236
+ const normalized = path.resolve(target.path);
237
+ return [normalized, { ...target, path: normalized }];
238
+ })).values(),
239
+ ];
240
+ }
241
+ /** Includes manual and legacy copies, and previously registered paths after environment variables change. */
242
+ export async function skillsStatus(environment, tools = []) {
243
+ const selected = selection(tools);
244
+ const source = await bundled(environment);
245
+ const registry = await readRegistry(environment);
246
+ const { defaults, legacy } = locations(environment);
247
+ const targets = unique([...defaults, legacy, ...registry.targets]).filter((target) => selected.length === 0 || selected.includes(target.tool));
248
+ return {
249
+ skill: SKILL,
250
+ cliVersion: environment.cliVersion,
251
+ hash: source.hash,
252
+ targets: await Promise.all(targets.map((target) => statusOf(target, environment, source, registry))),
253
+ };
254
+ }
255
+ function overlaps(first, second) {
256
+ const contains = (a, b) => b === a || b.startsWith(`${a}${path.sep}`);
257
+ return (contains(path.resolve(first), path.resolve(second)) ||
258
+ contains(path.resolve(second), path.resolve(first)));
259
+ }
260
+ // Check the complete plan before replacing any directory: replacing a parent would delete a child Skill.
261
+ function targetConflicts(targets) {
262
+ const destinations = unique(targets);
263
+ const conflicts = new Map();
264
+ for (let index = 0; index < destinations.length; index++) {
265
+ const first = destinations[index];
266
+ for (const second of destinations.slice(index + 1)) {
267
+ if (!overlaps(first.path, second.path))
268
+ continue;
269
+ const error = new CliCommandError('SKILLS_TARGET_OVERLAP', `Skill destinations contain one another: ${first.path} and ${second.path}. Choose separate tool configuration directories before installing.`, {
270
+ exit: EXIT_CODES.validation,
271
+ details: { paths: [first.path, second.path] },
272
+ });
273
+ conflicts.set(first.path, error);
274
+ conflicts.set(second.path, error);
275
+ }
276
+ }
277
+ return conflicts;
278
+ }
279
+ async function replace(target, environment, source, registry) {
280
+ if (overlaps(target.path, environment.packageRoot) ||
281
+ overlaps(target.path, environment.stateHome))
282
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', `The Skill destination overlaps its package or CLI state: ${target.path}`, { exit: EXIT_CODES.validation });
283
+ await safePath(target.path);
284
+ return lock(path.join(path.dirname(target.path), '.nb-studio-cli.lock'), async () => {
285
+ await safePath(target.path);
286
+ const before = await statusOf(target, environment, source, registry);
287
+ if (before.error)
288
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', before.error, {
289
+ exit: EXIT_CODES.validation,
290
+ });
291
+ const action = before.upToDate
292
+ ? 'unchanged'
293
+ : before.present
294
+ ? 'update'
295
+ : 'install';
296
+ const record = {
297
+ ...target,
298
+ cliVersion: environment.cliVersion,
299
+ hash: source.hash,
300
+ };
301
+ const next = {
302
+ skill: SKILL,
303
+ targets: [
304
+ ...registry.targets.filter((item) => path.resolve(item.path) !== path.resolve(target.path)),
305
+ record,
306
+ ],
307
+ };
308
+ if (action === 'unchanged')
309
+ await writeRegistry(environment, next);
310
+ else {
311
+ const temporary = await mkdtemp(path.join(path.dirname(target.path), '.nb-studio-cli-stage-'));
312
+ const staged = path.join(temporary, SKILL);
313
+ const backup = path.join(temporary, 'previous');
314
+ let moved = false;
315
+ let activated = false;
316
+ let committed = false;
317
+ try {
318
+ await mkdir(staged);
319
+ for (const entry of source.entries) {
320
+ const file = path.join(staged, ...entry.name.split('/'));
321
+ if (entry.bytes === undefined)
322
+ await mkdir(file);
323
+ else
324
+ await writeFile(file, entry.bytes);
325
+ }
326
+ await safePath(target.path);
327
+ if (before.present) {
328
+ await rename(target.path, backup);
329
+ moved = true;
330
+ }
331
+ await rename(staged, target.path);
332
+ activated = true;
333
+ await writeRegistry(environment, next);
334
+ committed = true;
335
+ }
336
+ catch (error) {
337
+ try {
338
+ if (activated)
339
+ await rm(target.path, { recursive: true, force: true });
340
+ if (moved) {
341
+ await rename(backup, target.path);
342
+ moved = false;
343
+ }
344
+ }
345
+ catch (recovery) {
346
+ throw new CliCommandError('SKILLS_RECOVERY_FAILED', `Skill replacement failed and recovery needs help. The previous copy is at ${backup}: ${recovery instanceof Error ? recovery.message : String(recovery)}`, {
347
+ details: {
348
+ cause: error instanceof Error ? error.message : String(error),
349
+ backup,
350
+ },
351
+ });
352
+ }
353
+ throw error;
354
+ }
355
+ finally {
356
+ // If rollback itself fails, keep the backup for recovery rather than deleting the old copy.
357
+ if (committed || !moved)
358
+ await rm(temporary, { recursive: true, force: true }).catch(() => undefined);
359
+ }
360
+ }
361
+ registry.targets = next.targets;
362
+ return {
363
+ ...before,
364
+ action,
365
+ present: true,
366
+ upToDate: true,
367
+ registered: true,
368
+ installedCliVersion: environment.cliVersion,
369
+ };
370
+ });
371
+ }
372
+ /** Replaces only nb-studio-cli and registers successful installations for self-update. */
373
+ export async function installSkills(environment, tools = [], dryRun = false) {
374
+ const source = await bundled(environment);
375
+ let selected = selection(tools);
376
+ if (selected.length === 0)
377
+ selected = (await Promise.all(TOOLS.map(async (tool) => (await detected(tool, environment)) ? tool : undefined))).filter((tool) => tool !== undefined);
378
+ if (selected.length === 0)
379
+ throw new CliCommandError('SKILLS_NO_TOOL', 'No Claude Code or Codex installation was detected. Choose a tool explicitly.', {
380
+ exit: EXIT_CODES.validation,
381
+ suggestions: TOOLS.map((tool) => ({
382
+ message: `Install for ${tool}.`,
383
+ run: {
384
+ command: environment.bin,
385
+ args: ['skills', 'install', '--tool', tool],
386
+ },
387
+ })),
388
+ });
389
+ const targets = unique(locations(environment).defaults.filter((target) => selected.includes(target.tool)));
390
+ const perform = async () => {
391
+ const registry = await readRegistry(environment);
392
+ const conflict = targetConflicts([...targets, ...registry.targets])
393
+ .values()
394
+ .next().value;
395
+ if (conflict !== undefined)
396
+ throw conflict;
397
+ const results = [];
398
+ for (const target of targets) {
399
+ if (overlaps(target.path, environment.packageRoot) ||
400
+ overlaps(target.path, environment.stateHome))
401
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', `The Skill destination overlaps its package or CLI state: ${target.path}`, { exit: EXIT_CODES.validation });
402
+ if (dryRun) {
403
+ const status = await statusOf(target, environment, source, registry);
404
+ if (status.error)
405
+ throw new CliCommandError('SKILLS_UNSAFE_PATH', status.error, {
406
+ exit: EXIT_CODES.validation,
407
+ });
408
+ results.push({
409
+ ...status,
410
+ action: status.upToDate
411
+ ? 'unchanged'
412
+ : status.present
413
+ ? 'update'
414
+ : 'install',
415
+ });
416
+ }
417
+ else
418
+ results.push(await replace(target, environment, source, registry));
419
+ }
420
+ return {
421
+ skill: SKILL,
422
+ cliVersion: environment.cliVersion,
423
+ hash: source.hash,
424
+ dryRun,
425
+ targets: results,
426
+ };
427
+ };
428
+ return dryRun
429
+ ? perform()
430
+ : lock(path.join(environment.stateHome, '.skills.lock'), perform);
431
+ }
432
+ /** Preserve native Skill installation for the tools with a managed destination. */
433
+ export async function prepareSessionSkill(environment, agentId) {
434
+ if (TOOLS.some((tool) => tool === agentId))
435
+ await installSkills(environment, [agentId]);
436
+ }
437
+ /** ACP text is the common fallback; it needs no agent-specific install directory. */
438
+ export async function sessionSkillInstructions(environment, agentId) {
439
+ if (TOOLS.some((tool) => tool === agentId))
440
+ return undefined;
441
+ try {
442
+ const source = await bundled(environment);
443
+ const skill = source.entries.find((entry) => entry.name === 'SKILL.md');
444
+ const text = skill.bytes.toString('utf8');
445
+ if (!text.trim())
446
+ throw new Error('The packaged Skill is empty.');
447
+ return [
448
+ '# Studio session instructions',
449
+ 'The shared nb-studio-cli Skill is supplied below for this session. Follow it directly; no Skill installation is needed.',
450
+ `Resolve any relative Skill references from ${sourceOf(environment)}.`,
451
+ 'Keep the bridge-selected profile and agent session environment. Do not switch identity or remove session context to bypass a refusal.',
452
+ text,
453
+ '# Current message',
454
+ ].join('\n\n');
455
+ }
456
+ catch (cause) {
457
+ throw new Error(`Could not load the packaged nb-studio-cli instructions. Update or reinstall ${environment.bin}, then restart the bridge and resend the message.`, { cause });
458
+ }
459
+ }
460
+ /** Called after CLI activation, reading the new package. Failures are warnings, never CLI update failures. */
461
+ export async function syncInstalledSkills(environment) {
462
+ const warnings = [];
463
+ const targets = [];
464
+ const advise = (message) => {
465
+ warnings.push(`${message} Run \`${environment.bin} skills install\` (use --tool claude or --tool codex to select explicitly).`);
466
+ };
467
+ try {
468
+ // Do not create state or tool directories on machines that never installed this Skill.
469
+ const registry = await readRegistry(environment);
470
+ const { defaults, legacy } = locations(environment);
471
+ for (const target of unique([...defaults, legacy])) {
472
+ try {
473
+ if ((await stat(target.path)) !== undefined &&
474
+ !registry.targets.some((record) => path.resolve(record.path) === path.resolve(target.path)))
475
+ advise(`An unregistered nb-studio-cli copy at ${target.path} was left unchanged.`);
476
+ }
477
+ catch (error) {
478
+ advise(`Could not inspect the Skill location ${target.path}: ${error instanceof Error ? error.message : String(error)}.`);
479
+ }
480
+ }
481
+ if (registry.targets.length > 0)
482
+ await lock(path.join(environment.stateHome, '.skills.lock'), async () => {
483
+ const current = await readRegistry(environment);
484
+ const destinations = unique(current.targets);
485
+ const conflicts = targetConflicts(destinations);
486
+ // Read the new source inside each attempt so every registered target has a failure result if it is missing.
487
+ for (const target of destinations) {
488
+ try {
489
+ const conflict = conflicts.get(target.path);
490
+ if (conflict !== undefined)
491
+ throw conflict;
492
+ const result = await replace(target, environment, await bundled(environment), current);
493
+ targets.push({
494
+ tool: target.tool,
495
+ path: target.path,
496
+ action: result.action === 'unchanged' ? 'unchanged' : 'updated',
497
+ });
498
+ }
499
+ catch (error) {
500
+ const message = error instanceof Error ? error.message : String(error);
501
+ targets.push({
502
+ tool: target.tool,
503
+ path: target.path,
504
+ action: 'failed',
505
+ error: message,
506
+ });
507
+ advise(`Could not update nb-studio-cli at ${target.path}: ${message}.`);
508
+ }
509
+ }
510
+ });
511
+ }
512
+ catch (error) {
513
+ advise(`Could not synchronize installed Skills: ${error instanceof Error ? error.message : String(error)}.`);
514
+ }
515
+ return { targets, warnings };
516
+ }
517
+ export function skillsCommands(app) {
518
+ const flags = {
519
+ tool: Flags.string({
520
+ description: 'Choose claude, codex, or all; repeat to choose multiple tools.',
521
+ options: ['claude', 'codex', 'all'],
522
+ multiple: true,
523
+ }),
524
+ };
525
+ class Install extends AppCommand {
526
+ toSuccessJson(result) {
527
+ return super.toSuccessJson({ data: result });
528
+ }
529
+ static summary = 'Install the packaged nb-studio-cli Skill in local agent tools.';
530
+ static supportsDryRun = true;
531
+ static flags = flags;
532
+ async run() {
533
+ const { flags } = await this.parse(Install);
534
+ if (findRunCredentials(process.cwd(), app) !== undefined)
535
+ throw new CliCommandError('SKILLS_RUN_FORBIDDEN', 'The runner already supplies this Skill. Install it outside an agent run.', { exit: EXIT_CODES.auth });
536
+ const result = await installSkills(skillsEnvironment(app), flags.tool, this.dryRun);
537
+ for (const target of result.targets)
538
+ this.log(`${this.dryRun ? 'Would ' : ''}${target.action}: ${target.tool} ${target.path}`);
539
+ return result;
540
+ }
541
+ }
542
+ class Status extends AppCommand {
543
+ toSuccessJson(result) {
544
+ return super.toSuccessJson({ data: result });
545
+ }
546
+ static summary = 'Compare local nb-studio-cli copies with the packaged Skill.';
547
+ static flags = flags;
548
+ async run() {
549
+ const { flags } = await this.parse(Status);
550
+ const result = await skillsStatus(skillsEnvironment(app), flags.tool);
551
+ for (const target of result.targets)
552
+ this.log(`${target.tool} ${target.path}: ${target.error ?? (target.present ? (target.upToDate ? 'up to date' : 'outdated') : 'not installed')}${target.legacy ? ' (legacy)' : ''}${target.registered ? ' (registered)' : ''}`);
553
+ return result;
554
+ }
555
+ }
556
+ return { 'skills:install': Install, 'skills:status': Status };
557
+ }
558
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
package/dist/update.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { type Command } from '@oclif/core';
2
2
  import { type AppCliConfig, type AppCliSession } from './config.ts';
3
3
  import { type Installation } from './install.ts';
4
+ import { type SkillsEnvironment, type SkillsSyncResult } from './skills.ts';
4
5
  /** How often the hint asks the server. */
5
6
  export declare const HINT_INTERVAL_MS: number;
6
7
  /** How long the hint waits for the server. */
@@ -20,6 +21,10 @@ export interface UpdateEnvironment {
20
21
  readonly cacheFile?: string;
21
22
  readonly now?: () => number;
22
23
  readonly fetch?: typeof fetch;
24
+ /** The environment npm runs in, and where it is looked for (`findNpm`), for a version installed from npm. */
25
+ readonly env?: NodeJS.ProcessEnv;
26
+ /** Local Skill installation state; only set for a CLI shipping nb-studio-cli. */
27
+ readonly skills?: SkillsEnvironment;
23
28
  }
24
29
  /** Who updates the installation `environment` describes. */
25
30
  export declare function updatedBy(environment: UpdateEnvironment): UpdatedBy;
@@ -32,6 +37,7 @@ export interface CliUpdateResult {
32
37
  readonly updated: boolean;
33
38
  /** The version it replaced, kept beside the new one for a rollback. */
34
39
  readonly previous?: string;
40
+ readonly skills?: SkillsSyncResult;
35
41
  }
36
42
  /** Updates a CLI installed alone to the newest version the session's server serves for this platform. */
37
43
  export declare function updateCli(session: AppCliSession, environment: UpdateEnvironment, options: {
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAcA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAQlD,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAGtB,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,MAAyB,CAAC;AACzD,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,MAAa,CAAC;AAE5C,wGAAwG;AACxG,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,SAAS,CAInE;AA4CD,uGAAuG;AACvG,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,yGAAyG;AACzG,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC3E,OAAO,CAAC,eAAe,CAAC,CAuD1B;AAYD,uGAAuG;AACvG,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,GACnB,iBAAiB,GAAG,SAAS,CAS/B;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAsC9D"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAeA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAQlD,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAItB,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AACrB,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,MAAyB,CAAC;AACzD,8CAA8C;AAC9C,eAAO,MAAM,eAAe,EAAE,MAAa,CAAC;AAE5C,wGAAwG;AACxG,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,6GAA6G;IAC7G,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CACrC;AAED,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,SAAS,CAInE;AA4CD,uGAAuG;AACvG,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgC7B;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAED,yGAAyG;AACzG,wBAAsB,SAAS,CAC7B,OAAO,EAAE,aAAa,EACtB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC3E,OAAO,CAAC,eAAe,CAAC,CAsE1B;AAYD,uGAAuG;AACvG,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,GACnB,iBAAiB,GAAG,SAAS,CAU/B;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CA+C9D"}