@micar-tsp/skillhub 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,6 +17,7 @@ pnpm test
17
17
  pnpm typecheck
18
18
  pnpm build
19
19
  npm publish --access public
20
+ npm install -g @micar-tsp/skillhub
20
21
  ```
21
22
 
22
23
  Release notes:
package/dist/index.js CHANGED
@@ -18,7 +18,6 @@ async function main() {
18
18
  `Frontend page: ${FRONTEND_URL}`,
19
19
  `Contact: ${CONTACT_EMAIL}`
20
20
  ].join('\n'))
21
- .version(readPackageVersion())
22
21
  .option('--base-url <url>', 'Override configured/default base URL')
23
22
  .option('--token <token>', 'Override configured token for this command')
24
23
  .option('--json', 'Output JSON')
@@ -28,6 +27,10 @@ async function main() {
28
27
  registerUserCommands(program);
29
28
  registerSkillCommands(program);
30
29
  registerPublishCommand(program);
30
+ if (shouldPrintRootVersion(program, process.argv.slice(2))) {
31
+ console.log(readPackageVersion());
32
+ return;
33
+ }
31
34
  try {
32
35
  await program.parseAsync(process.argv);
33
36
  }
@@ -36,6 +39,9 @@ async function main() {
36
39
  process.exitCode = 1;
37
40
  }
38
41
  }
42
+ function shouldPrintRootVersion(program, args) {
43
+ return args.length === 1 && (args[0] === '--version' || args[0] === '-V') && program.commands.length > 0;
44
+ }
39
45
  function readPackageVersion() {
40
46
  const packageUrl = new URL('../package.json', import.meta.url);
41
47
  const packageJson = JSON.parse(readFileSync(packageUrl, 'utf8'));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC;QACX,8DAA8D;QAC9D,EAAE;QACF,qBAAqB,gBAAgB,EAAE;QACvC,kBAAkB,YAAY,EAAE;QAChC,YAAY,aAAa,EAAE;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAC7B,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,kBAAkB,EAAE,CAAA;IAEvB,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAE/B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAyB,CAAC,OAAO,CAAC,CAAC,CAAA;QACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAMD,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAA;IAC/E,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAA;AACvC,CAAC;AAED,KAAK,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC;QACX,8DAA8D;QAC9D,EAAE;QACF,qBAAqB,gBAAgB,EAAE;QACvC,kBAAkB,YAAY,EAAE;QAChC,YAAY,aAAa,EAAE;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACZ,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,4CAA4C,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;SAC/B,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;SACtD,kBAAkB,EAAE,CAAA;IAEvB,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAE/B,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAA;QACjC,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAyB,CAAC,OAAO,CAAC,CAAC,CAAA;QACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC;AAMD,SAAS,sBAAsB,CAAC,OAAgB,EAAE,IAAc;IAC9D,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;AAC1G,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAA;IAC/E,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAA;AACvC,CAAC;AAED,KAAK,IAAI,EAAE,CAAA"}
@@ -2,6 +2,7 @@ export interface SkillTarget {
2
2
  raw: string;
3
3
  slug: string;
4
4
  namespace?: string;
5
+ source?: string;
5
6
  }
6
7
  export declare function parseSkillTarget(value: string): SkillTarget;
7
8
  export declare function formatSkillTarget(target: SkillTarget): string;
@@ -3,26 +3,24 @@ import { CliError } from './errors.js';
3
3
  const segmentSchema = z.string().min(1).regex(/^[A-Za-z0-9._-]+$/);
4
4
  export function parseSkillTarget(value) {
5
5
  const parts = value.split('/');
6
- if (parts.length === 1) {
7
- const slug = segmentSchema.safeParse(parts[0]);
8
- if (!slug.success)
9
- throw new CliError(`Invalid skill target: ${value}. Expected slug or namespace/slug.`);
10
- return { raw: value, slug: slug.data };
6
+ if (parts.length < 1 || parts.length > 3 || parts.some((part) => !segmentSchema.safeParse(part).success)) {
7
+ throw new CliError(`Invalid skill target: ${value}. Expected slug, namespace/slug, or source/namespace/slug.`);
11
8
  }
12
- if (parts.length === 2) {
13
- const namespace = segmentSchema.safeParse(parts[0]);
14
- const slug = segmentSchema.safeParse(parts[1]);
15
- if (!namespace.success || !slug.success)
16
- throw new CliError(`Invalid skill target: ${value}. Expected slug or namespace/slug.`);
17
- return { raw: value, namespace: namespace.data, slug: slug.data };
18
- }
19
- throw new CliError(`Invalid skill target: ${value}. Expected slug or namespace/slug.`);
9
+ if (parts.length === 1)
10
+ return { raw: value, slug: parts[0] };
11
+ if (parts.length === 2)
12
+ return { raw: value, namespace: parts[0], slug: parts[1] };
13
+ return { raw: value, source: parts[0], namespace: parts[1], slug: parts[2] };
20
14
  }
21
15
  export function formatSkillTarget(target) {
16
+ if (target.source)
17
+ return `${target.source}/${target.namespace}/${target.slug}`;
22
18
  return target.namespace ? `${target.namespace}/${target.slug}` : target.slug;
23
19
  }
24
20
  export function encodeTargetPath(target) {
25
21
  const slug = encodeURIComponent(target.slug);
22
+ if (target.source)
23
+ return `/sources/${encodeURIComponent(target.source)}/skills/${encodeURIComponent(target.namespace)}/${slug}`;
26
24
  if (!target.namespace)
27
25
  return `/skills/${slug}`;
28
26
  return `/skills/${encodeURIComponent(target.namespace)}/${slug}`;
@@ -1 +1 @@
1
- {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/lib/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAQtC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAElE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,yBAAyB,KAAK,oCAAoC,CAAC,CAAA;QACzG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,yBAAyB,KAAK,oCAAoC,CAAC,CAAA;QAC/H,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACnE,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,yBAAyB,KAAK,oCAAoC,CAAC,CAAA;AACxF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,WAAW,IAAI,EAAE,CAAA;IAC/C,OAAO,WAAW,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/lib/target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAStC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAElE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,QAAQ,CAAC,yBAAyB,KAAK,4DAA4D,CAAC,CAAA;IAChH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAA;IAC/E,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,YAAY,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,SAAU,CAAC,IAAI,IAAI,EAAE,CAAA;IACjI,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,WAAW,IAAI,EAAE,CAAA;IAC/C,OAAO,WAAW,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAA;AAClE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micar-tsp/skillhub",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Local SkillHub CLI for token-authenticated skill management",
5
5
  "keywords": [
6
6
  "skillhub",