@senior-skills/cli 1.0.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.
Files changed (47) hide show
  1. package/README.md +21 -0
  2. package/bin/senior-skills.mjs +4 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +272 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/authoring.d.ts +20 -0
  8. package/dist/commands/authoring.d.ts.map +1 -0
  9. package/dist/commands/authoring.js +136 -0
  10. package/dist/commands/authoring.js.map +1 -0
  11. package/dist/commands/discovery.d.ts +12 -0
  12. package/dist/commands/discovery.d.ts.map +1 -0
  13. package/dist/commands/discovery.js +188 -0
  14. package/dist/commands/discovery.js.map +1 -0
  15. package/dist/commands/install.d.ts +11 -0
  16. package/dist/commands/install.d.ts.map +1 -0
  17. package/dist/commands/install.js +99 -0
  18. package/dist/commands/install.js.map +1 -0
  19. package/dist/commands/lifecycle.d.ts +13 -0
  20. package/dist/commands/lifecycle.d.ts.map +1 -0
  21. package/dist/commands/lifecycle.js +189 -0
  22. package/dist/commands/lifecycle.js.map +1 -0
  23. package/dist/commands/system.d.ts +22 -0
  24. package/dist/commands/system.d.ts.map +1 -0
  25. package/dist/commands/system.js +170 -0
  26. package/dist/commands/system.js.map +1 -0
  27. package/dist/container.d.ts +29 -0
  28. package/dist/container.d.ts.map +1 -0
  29. package/dist/container.js +101 -0
  30. package/dist/container.js.map +1 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +10 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/options.d.ts +25 -0
  36. package/dist/options.d.ts.map +1 -0
  37. package/dist/options.js +39 -0
  38. package/dist/options.js.map +1 -0
  39. package/dist/ui.d.ts +42 -0
  40. package/dist/ui.d.ts.map +1 -0
  41. package/dist/ui.js +136 -0
  42. package/dist/ui.js.map +1 -0
  43. package/dist/update-notifications.d.ts +19 -0
  44. package/dist/update-notifications.d.ts.map +1 -0
  45. package/dist/update-notifications.js +142 -0
  46. package/dist/update-notifications.js.map +1 -0
  47. package/package.json +53 -0
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # senior-skills
2
+
3
+ Install and manage feature engineering skills and their dependencies for Claude Code and Codex.
4
+
5
+ Package: `@senior-skills/cli`. Executable: `senior-skills`. Requires Node.js 22.18 or newer.
6
+
7
+ ```bash
8
+ senior-skills --help
9
+ senior-skills install feature-engineering --agent all --project --dry-run
10
+ senior-skills install feature-engineering --agent all --project
11
+ senior-skills info collaborative-feature-definition
12
+ senior-skills list
13
+ ```
14
+
15
+ Dependencies install automatically. `--with-suggests` adds direct suggestions of the requested
16
+ skills. Use `--global` for user-wide installation or `--project` for the current project.
17
+
18
+ Configuration lives in `~/.senior-skills`, or the directory set by `SENIOR_SKILLS_HOME`.
19
+ Use `--no-update-check` or `SENIOR_SKILLS_NO_UPDATE_NOTIFIER=1` to disable update notices.
20
+
21
+ Source and development instructions: [senior-skills](https://github.com/robsonkades/senior-skills).
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../dist/cli.js';
3
+
4
+ process.exitCode = await run(process.argv.slice(2));
package/dist/cli.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /** Kept equal to packages/cli/package.json by a test; the two ship as one artefact. */
2
+ export declare const VERSION = "1.0.0";
3
+ /**
4
+ * Builds the command tree.
5
+ *
6
+ * Every action does the same three things: read options, call an application service, hand
7
+ * the result to a renderer. Anything more than that in here would be business logic escaping
8
+ * into the presentation layer.
9
+ */
10
+ export declare function run(argv: readonly string[]): Promise<number>;
11
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAkBA,uFAAuF;AACvF,eAAO,MAAM,OAAO,UAAU,CAAC;AAoB/B;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoPlE"}
package/dist/cli.js ADDED
@@ -0,0 +1,272 @@
1
+ import { Command, CommanderError } from 'commander';
2
+ import { ExitCode, exitCodeFor } from '@senior-skills/core';
3
+ import { createContainer } from "./container.js";
4
+ import { shouldCheckUpdates, showUpdateNotifications } from "./update-notifications.js";
5
+ import { configureUi, renderError } from "./ui.js";
6
+ import { collect } from "./options.js";
7
+ import { runInstall } from "./commands/install.js";
8
+ import { runUninstall, runUpdate } from "./commands/lifecycle.js";
9
+ import { runInfo, runList, runSearch } from "./commands/discovery.js";
10
+ import { runCreate, runPublish, runValidate } from "./commands/authoring.js";
11
+ import { runAgents, runDoctor, runRegistryAdd, runRegistryList, runRegistryRemove, } from "./commands/system.js";
12
+ /** Kept equal to packages/cli/package.json by a test; the two ship as one artefact. */
13
+ export const VERSION = '1.0.0';
14
+ const DESCRIPTION = `Install, update and publish AI coding-agent skills.
15
+
16
+ Skills are installed into every detected agent by default. Use --agent to pick one,
17
+ --agent all for every known agent, and --project to install into the current repository
18
+ instead of your user configuration.`;
19
+ const EXAMPLES = `
20
+ Examples:
21
+ $ senior-skills install java-performance
22
+ $ senior-skills install java-performance --agent codex
23
+ $ senior-skills install java-performance@1.2.0 --project
24
+ $ senior-skills search jvm
25
+ $ senior-skills info java-performance
26
+ $ senior-skills update
27
+ $ senior-skills doctor
28
+
29
+ Documentation: https://github.com/robsonkades/senior-skills`;
30
+ /**
31
+ * Builds the command tree.
32
+ *
33
+ * Every action does the same three things: read options, call an application service, hand
34
+ * the result to a renderer. Anything more than that in here would be business logic escaping
35
+ * into the presentation layer.
36
+ */
37
+ export async function run(argv) {
38
+ const program = new Command();
39
+ let exitCode = ExitCode.OK;
40
+ let context;
41
+ const boot = async (command, options) => {
42
+ context ??= await createContext(command, options);
43
+ return context;
44
+ };
45
+ program
46
+ .name('senior-skills')
47
+ .description(DESCRIPTION)
48
+ .version(VERSION, '-V, --version', 'Print the CLI version')
49
+ .addHelpText('after', EXAMPLES)
50
+ .option('--json', 'Machine-readable output')
51
+ .option('-v, --verbose', 'Verbose logging')
52
+ .option('-q, --quiet', 'Only print results')
53
+ .option('--no-color', 'Disable coloured output')
54
+ .option('--no-update-check', 'Skip update checks and interactive notices')
55
+ .option('--allow-insecure', 'Permit plain-HTTP registries (development only)')
56
+ .showHelpAfterError()
57
+ // Without this, commander exits the process itself and our exit-code mapping never runs.
58
+ .exitOverride()
59
+ .configureOutput({
60
+ outputError: (message, write) => write(message),
61
+ });
62
+ /** Options every install-shaped command shares. */
63
+ const withTargeting = (command) => command
64
+ .option('-a, --agent <id...>', 'Target agent: claude, codex, or all', collect)
65
+ .option('-g, --global', "Install into the user's agent configuration")
66
+ .option('-p, --project', 'Install into the current project')
67
+ .option('--project-root <path>', 'Project directory (implies --project)')
68
+ .option('--dry-run', 'Show what would happen without writing anything');
69
+ withTargeting(program
70
+ .command('install')
71
+ .alias('i')
72
+ .argument('<skill...>', 'Skills to install, e.g. java-performance or java-performance@1.2.0')
73
+ .description('Install one or more skills')
74
+ .option('-r, --registry <name>', 'Restrict resolution to one configured registry')
75
+ .option('-f, --force', 'Replace an install whose files were modified')
76
+ .option('--with-suggests', 'Include direct suggestions of the requested skills and their dependencies')
77
+ .option('--no-deps', 'Skip transitive dependencies')).action(async (refs, options) => {
78
+ const context = await boot(program, options);
79
+ // Commander maps `--no-deps` to `deps: false`.
80
+ await runInstall(context.ctx, refs, {
81
+ ...merge(program, options),
82
+ ...(options.deps === false ? { noDeps: true } : {}),
83
+ });
84
+ });
85
+ withTargeting(program
86
+ .command('uninstall')
87
+ .alias('remove')
88
+ .argument('<skill...>', 'Skills to remove')
89
+ .description('Remove skills that senior-skills installed')
90
+ .option('-f, --force', 'Delete files even if they were modified after installation')).action(async (names, options) => {
91
+ const context = await boot(program, options);
92
+ await runUninstall(context.ctx, names, merge(program, options));
93
+ });
94
+ withTargeting(program
95
+ .command('update')
96
+ .argument('[skill...]', 'Skills to update. Omit to update everything installed')
97
+ .description('Update installed skills to the newest compatible version')
98
+ .option('-r, --registry <name>', 'Restrict resolution to one configured registry')
99
+ .option('--major', 'Allow updates that cross a major version')
100
+ .option('--with-suggests', 'Include direct suggestions of explicitly named skills')
101
+ .option('-f, --force', 'Replace installs whose files were modified')).action(async (names, options) => {
102
+ const context = await boot(program, options);
103
+ await runUpdate(context.ctx, names, merge(program, options));
104
+ });
105
+ program
106
+ .command('list')
107
+ .alias('ls')
108
+ .description('List installed skills')
109
+ .option('-a, --agent <id...>', 'Only this agent', collect)
110
+ .option('-g, --global', 'Only global installs')
111
+ .option('-p, --project', 'Only project installs')
112
+ .option('--project-root <path>', 'Project directory')
113
+ .action(async (options) => {
114
+ const context = await boot(program, options);
115
+ await runList(context.ctx, merge(program, options));
116
+ });
117
+ program
118
+ .command('search')
119
+ .argument('<query>', 'Text to search for')
120
+ .description('Search the configured registries')
121
+ .option('-r, --registry <name>', 'Search only this registry')
122
+ .option('-n, --limit <count>', 'Maximum results', '25')
123
+ .action(async (query, options) => {
124
+ const context = await boot(program, options);
125
+ await runSearch(context.ctx, query, merge(program, options));
126
+ });
127
+ program
128
+ .command('info')
129
+ .alias('show')
130
+ .argument('<skill>', 'Skill name, optionally with @version')
131
+ .description('Show a skill’s metadata, versions and install state')
132
+ .option('-r, --registry <name>', 'Look only in this registry')
133
+ .action(async (ref, options) => {
134
+ const context = await boot(program, options);
135
+ await runInfo(context.ctx, ref, merge(program, options));
136
+ });
137
+ program
138
+ .command('validate')
139
+ .argument('[path]', 'Skill package directory', '.')
140
+ .description('Validate a skill package')
141
+ .option('--strict', 'Treat unknown manifest fields as errors')
142
+ .action(async (target, options) => {
143
+ const context = await boot(program, options);
144
+ exitCode = await runValidate(context.ctx, target, merge(program, options));
145
+ });
146
+ program
147
+ .command('create')
148
+ .alias('new')
149
+ .argument('<name>', 'Package name, e.g. java-performance')
150
+ .description('Scaffold a new skill or command package')
151
+ .option('-k, --kind <kind>', 'Package kind: skill, command or workflow', 'skill')
152
+ .option('-d, --directory <path>', 'Parent directory (default: current directory)')
153
+ .option('--description <text>', 'Initial description')
154
+ .option('--license <spdx>', 'SPDX licence identifier', 'Apache-2.0')
155
+ .option('--author <name>', 'Author name')
156
+ .option('--dry-run', 'Show what would be created')
157
+ .action(async (name, options) => {
158
+ const context = await boot(program, options);
159
+ await runCreate(context.ctx, name, merge(program, options));
160
+ });
161
+ program
162
+ .command('publish')
163
+ .argument('[path]', 'Skill package directory', '.')
164
+ .description('Validate a package and emit its registry entry')
165
+ .option('-r, --registry <name>', 'Registry the version is destined for')
166
+ .action(async (target, options) => {
167
+ const context = await boot(program, options);
168
+ await runPublish(context.ctx, context.hasher, target, merge(program, options));
169
+ });
170
+ program
171
+ .command('doctor')
172
+ .description('Diagnose the installation, agents and registries')
173
+ .option('--offline', 'Skip registry connectivity checks')
174
+ .action(async (options) => {
175
+ const context = await boot(program, options);
176
+ exitCode = await runDoctor(context.ctx, merge(program, options));
177
+ });
178
+ program
179
+ .command('agents')
180
+ .description('Show which coding agents were detected')
181
+ .action(async (options) => {
182
+ const context = await boot(program, options);
183
+ await runAgents(context.ctx, merge(program, options));
184
+ });
185
+ const registry = program.command('registry').description('Manage skill registries');
186
+ registry
187
+ .command('list')
188
+ .alias('ls')
189
+ .description('List configured registries in precedence order')
190
+ .action(async (options) => {
191
+ const context = await boot(program, options);
192
+ await runRegistryList(context.ctx, merge(program, options));
193
+ });
194
+ registry
195
+ .command('add')
196
+ .argument('<name>', 'Short name, e.g. company')
197
+ .argument('<url>', 'Git URL, HTTPS index URL, or local path')
198
+ .description('Add a registry')
199
+ .option('--kind <kind>', 'local, git or http (inferred from the URL by default)')
200
+ .option('--ref <ref>', 'Git branch or tag')
201
+ .option('--first', 'Give it precedence over existing registries')
202
+ .option('--untrusted', 'Mark the registry as untrusted')
203
+ .action(async (name, url, options) => {
204
+ const context = await boot(program, options);
205
+ await runRegistryAdd(context.ctx, context.configStore, name, url, merge(program, options));
206
+ });
207
+ registry
208
+ .command('remove')
209
+ .alias('rm')
210
+ .argument('<name>', 'Registry name')
211
+ .description('Remove a registry')
212
+ .action(async (name, options) => {
213
+ const context = await boot(program, options);
214
+ await runRegistryRemove(context.configStore, name, merge(program, options));
215
+ });
216
+ try {
217
+ program.hook('preAction', async (_command, action) => {
218
+ if (action.parent !== program)
219
+ return;
220
+ const options = action.optsWithGlobals();
221
+ if (!shouldCheckUpdates(action.name(), options, {
222
+ stdin: process.stdin.isTTY === true,
223
+ stdout: process.stdout.isTTY === true,
224
+ stderr: process.stderr.isTTY === true,
225
+ }, process.env))
226
+ return;
227
+ const container = await boot(program, options);
228
+ if (await showUpdateNotifications(container.notifications, action.name(), options)) {
229
+ throw new CommanderError(0, 'senior-skills.updated', 'CLI updated');
230
+ }
231
+ });
232
+ await program.parseAsync([...argv], { from: 'user' });
233
+ return exitCode;
234
+ }
235
+ catch (error) {
236
+ if (error instanceof CommanderError) {
237
+ // `--help` and `--version` arrive here as "errors"; they are successful exits.
238
+ return error.exitCode === 0 ? ExitCode.OK : ExitCode.USAGE;
239
+ }
240
+ renderError(error, program.opts()['verbose'] === true);
241
+ return exitCodeFor(error);
242
+ }
243
+ }
244
+ /** Merges root-level flags into the command's own options, so `--json` works anywhere. */
245
+ function merge(program, options) {
246
+ const root = program.opts();
247
+ return {
248
+ ...options,
249
+ json: options.json ?? root['json'] === true,
250
+ verbose: options.verbose ?? root['verbose'] === true,
251
+ quiet: options.quiet ?? root['quiet'] === true,
252
+ };
253
+ }
254
+ async function createContext(program, options) {
255
+ const root = program.opts();
256
+ const verbose = options.verbose === true || root['verbose'] === true;
257
+ const quiet = options.quiet === true || root['quiet'] === true;
258
+ const wantsJson = options.json === true || root['json'] === true;
259
+ configureUi({
260
+ // NO_COLOR is respected without a flag; --no-color and non-TTY output also disable it.
261
+ color: root['color'] !== false &&
262
+ process.env['NO_COLOR'] === undefined &&
263
+ process.stdout.isTTY === true,
264
+ quiet: quiet || wantsJson,
265
+ });
266
+ return createContainer({
267
+ version: VERSION,
268
+ logLevel: verbose ? 'debug' : quiet ? 'error' : 'info',
269
+ allowInsecure: root['allowInsecure'] === true,
270
+ });
271
+ }
272
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type ApplicationContext, type Hasher } from '@senior-skills/core';
2
+ import type { GlobalOptions } from '../options.ts';
3
+ export interface CreateCommandOptions extends GlobalOptions {
4
+ readonly kind?: string;
5
+ readonly description?: string;
6
+ readonly license?: string;
7
+ readonly author?: string;
8
+ readonly directory?: string;
9
+ }
10
+ export declare function runCreate(ctx: ApplicationContext, name: string, options: CreateCommandOptions): Promise<void>;
11
+ export interface ValidateCommandOptions extends GlobalOptions {
12
+ readonly strict?: boolean;
13
+ }
14
+ /** Returns the process exit code, so `validate` can fail CI without throwing. */
15
+ export declare function runValidate(ctx: ApplicationContext, target: string, options: ValidateCommandOptions): Promise<number>;
16
+ export interface PublishCommandOptions extends GlobalOptions {
17
+ readonly directory?: string;
18
+ }
19
+ export declare function runPublish(ctx: ApplicationContext, hasher: Hasher, target: string | undefined, options: PublishCommandOptions): Promise<void>;
20
+ //# sourceMappingURL=authoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/commands/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAIZ,MAAM,qBAAqB,CAAC;AAa7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAWD,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,iFAAiF;AACjF,wBAAsB,WAAW,CAC/B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAkBjB;AA4BD,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAaf"}
@@ -0,0 +1,136 @@
1
+ import { AgentSkillsError, CreateSkill, ErrorCode, ExitCode, PACKAGE_KINDS, PublishSkill, stringifyRegistryIndex, validateDirectory, } from '@senior-skills/core';
2
+ import { glyph, heading, info, json, out, plural, renderIssues, style, success, warn, } from "../ui.js";
3
+ export async function runCreate(ctx, name, options) {
4
+ const report = await new CreateSkill(ctx).execute({
5
+ name,
6
+ kind: parseKind(options.kind),
7
+ ...(options.directory === undefined ? {} : { directory: options.directory }),
8
+ ...(options.description === undefined ? {} : { description: options.description }),
9
+ ...(options.license === undefined ? {} : { license: options.license }),
10
+ ...(options.author === undefined ? {} : { author: options.author }),
11
+ ...(options.dryRun === undefined ? {} : { dryRun: options.dryRun }),
12
+ });
13
+ if (options.json === true) {
14
+ json(report);
15
+ return;
16
+ }
17
+ heading(report.dryRun ? `Dry run — would create ${report.name}` : `Created ${report.name}`);
18
+ out(` ${style.dim(report.directory)}`);
19
+ out();
20
+ for (const file of report.files)
21
+ out(` ${style.green(glyph.ok)} ${file}`);
22
+ if (report.kind === 'skill') {
23
+ out(` ${style.green(glyph.ok)} examples/`);
24
+ out(` ${style.green(glyph.ok)} scripts/`);
25
+ }
26
+ out();
27
+ out(style.bold(' Next'));
28
+ if (report.kind === 'command') {
29
+ out(` 1. Write the prompt in ${style.cyan('COMMAND.md')} — it runs when /${report.name} is typed`);
30
+ }
31
+ else if (report.kind === 'workflow') {
32
+ out(` 1. Write the script in ${style.cyan('WORKFLOW.js')} — phase(), agent(), parallel(), log()`);
33
+ }
34
+ else {
35
+ out(` 1. Write the skill in ${style.cyan('SKILL.md')} — purpose, workflow, rules`);
36
+ }
37
+ out(report.kind === 'workflow'
38
+ ? ` 2. Sharpen the ${style.cyan('description')}: it is what search and info show`
39
+ : ` 2. Sharpen the ${style.cyan('description')}: agents route on it alone`);
40
+ out(` 3. ${style.cyan(`senior-skills validate ${report.name}`)}`);
41
+ out(` 4. ${style.cyan(`senior-skills install ./${report.name} --agent all`)} to try it locally`);
42
+ out();
43
+ }
44
+ function parseKind(value) {
45
+ if (value === undefined)
46
+ return 'skill';
47
+ if (PACKAGE_KINDS.includes(value))
48
+ return value;
49
+ throw new AgentSkillsError(ErrorCode.USAGE, `Unknown package kind "${value}"`, {
50
+ hints: [`--kind accepts: ${PACKAGE_KINDS.join(', ')}`],
51
+ data: { kind: value },
52
+ });
53
+ }
54
+ /** Returns the process exit code, so `validate` can fail CI without throwing. */
55
+ export async function runValidate(ctx, target, options) {
56
+ const report = await validateDirectory(ctx, target, {
57
+ ...(options.strict === undefined ? {} : { strict: options.strict }),
58
+ });
59
+ if (options.json === true) {
60
+ json({
61
+ ok: report.ok,
62
+ directory: report.directory,
63
+ name: report.pkg.manifest.name,
64
+ version: report.pkg.manifest.version,
65
+ issues: report.issues,
66
+ });
67
+ return report.ok ? ExitCode.OK : ExitCode.VALIDATION;
68
+ }
69
+ render(report);
70
+ return report.ok ? ExitCode.OK : ExitCode.VALIDATION;
71
+ }
72
+ function render(report) {
73
+ const { manifest } = report.pkg;
74
+ heading(`${manifest.name}@${manifest.version}`);
75
+ out(` ${style.dim(report.directory)}`);
76
+ out(` ${style.dim(plural(report.pkg.files.length, 'file'))}`);
77
+ out();
78
+ if (report.issues.length === 0) {
79
+ success('Valid — no issues found');
80
+ out();
81
+ return;
82
+ }
83
+ renderIssues(report.issues);
84
+ out();
85
+ if (report.ok) {
86
+ success(`Valid, with ${plural(report.warnings.length, 'warning')}`);
87
+ }
88
+ else {
89
+ out(`${style.red(glyph.fail)} ${plural(report.errors.length, 'error')}, ${plural(report.warnings.length, 'warning')}`);
90
+ }
91
+ out();
92
+ }
93
+ export async function runPublish(ctx, hasher, target, options) {
94
+ const report = await new PublishSkill(ctx, hasher).execute({
95
+ ...(target === undefined ? {} : { directory: target }),
96
+ ...(options.registry === undefined ? {} : { registry: options.registry }),
97
+ ...(options.dryRun === undefined ? {} : { dryRun: options.dryRun }),
98
+ });
99
+ if (options.json === true) {
100
+ json(report);
101
+ return;
102
+ }
103
+ render_publish(report);
104
+ }
105
+ function render_publish(report) {
106
+ heading(`Ready to publish ${report.name}@${report.version}`);
107
+ out(` ${style.dim(report.directory)}`);
108
+ out(` ${style.dim(plural(report.files.length, 'file'))}`);
109
+ out(` ${style.dim(report.integrity)}`);
110
+ if (report.warnings.length > 0) {
111
+ out();
112
+ for (const warning of report.warnings)
113
+ warn(warning);
114
+ }
115
+ out();
116
+ out(style.bold(' Add this to the registry index (registry/skills.yaml):'));
117
+ out();
118
+ for (const line of stringifyRegistryIndex({
119
+ schemaVersion: 1,
120
+ name: report.registry ?? 'official',
121
+ skills: [report.skillEntry],
122
+ })
123
+ .trimEnd()
124
+ .split('\n')) {
125
+ out(` ${style.dim(line)}`);
126
+ }
127
+ out();
128
+ out(style.bold(' Then'));
129
+ out(` 1. Copy the package to ${style.cyan(`skills/${report.name}/`)} in the registry repository`);
130
+ out(` 2. Merge the entry above into ${style.cyan('registry/skills.yaml')}`);
131
+ out(` 3. Open a pull request`);
132
+ out();
133
+ info('Publishing goes through review because a skill becomes instructions an agent follows.');
134
+ out();
135
+ }
136
+ //# sourceMappingURL=authoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/commands/authoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type ApplicationContext } from '@senior-skills/core';
2
+ import { warn } from '../ui.ts';
3
+ import type { GlobalOptions } from '../options.ts';
4
+ export declare function runList(ctx: ApplicationContext, options: GlobalOptions & {
5
+ all?: boolean;
6
+ }): Promise<void>;
7
+ export declare function runSearch(ctx: ApplicationContext, query: string, options: GlobalOptions & {
8
+ limit?: string;
9
+ }): Promise<void>;
10
+ export declare function runInfo(ctx: ApplicationContext, ref: string, options: GlobalOptions): Promise<void>;
11
+ export { warn };
12
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/commands/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EAIxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAyD,IAAI,EAAE,MAAM,UAAU,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAsB,OAAO,CAC3B,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAgDD,wBAAsB,SAAS,CAC7B,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAef;AAwBD,wBAAsB,OAAO,CAC3B,GAAG,EAAE,kBAAkB,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAiBf;AA0GD,OAAO,EAAE,IAAI,EAAE,CAAC"}