@micar-tsp/skillhub 0.2.0 → 0.2.1

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
@@ -8,16 +8,23 @@ Frontend page: `https://pre-skillhub.tsp.mioffice.cn`
8
8
 
9
9
  Contact: `luozhilin@xiaomi.com`
10
10
 
11
- ## Development
11
+ ## Release
12
+
13
+ Use these commands from the repository root unless noted otherwise:
12
14
 
13
15
  ```bash
14
- pnpm install
15
- pnpm build
16
- pnpm test
17
- pnpm dev -- --help
16
+ pnpm --dir skillhub-cli test
17
+ pnpm --dir skillhub-cli typecheck
18
+ pnpm --dir skillhub-cli build
19
+ npm publish "D:\Projects\6CC\SkillHub\skillhub-cli" --access public
18
20
  ```
19
21
 
20
- ## Examples
22
+ Release notes:
23
+
24
+ - Update `skillhub-cli/package.json` version before publishing.
25
+ - Publish from the `skillhub-cli` package directory, not the repo root.
26
+ - The package must pass tests and typecheck before `npm publish`.
27
+
21
28
 
22
29
  ```bash
23
30
  skillhub login --token sk_xxx
@@ -1,40 +1,46 @@
1
1
  import { createReadStream, existsSync } from 'node:fs';
2
- import { basename } from 'node:path';
3
2
  import { createContext } from '../lib/context.js';
4
3
  import { CliError } from '../lib/errors.js';
4
+ import { preparePublishPackage } from '../lib/publish-package.js';
5
5
  import { printResult } from '../format/output.js';
6
6
  import { formatPublish } from '../format/publish.js';
7
7
  import { assertRecommendedLabel } from './skills.js';
8
8
  const VISIBILITIES = new Set(['PUBLIC', 'PRIVATE', 'NAMESPACE_ONLY']);
9
9
  export function registerPublishCommand(program) {
10
10
  program
11
- .command('publish <namespace> <packageFile>')
12
- .description('Publish a skill package')
11
+ .command('publish <namespace> <skillPath>')
12
+ .description('Publish a skill folder or .zip package')
13
13
  .requiredOption('--visibility <visibility>', '(required) PUBLIC, PRIVATE, or NAMESPACE_ONLY')
14
14
  .requiredOption('--display-name <name>', '(required) Skill display name')
15
15
  .option('--summary <summary>', '(optional) Skill summary')
16
16
  .option('--label <slug>', '(required, repeatable) Recommended label slug. At least one recommended label is required.', collect, [])
17
- .action(async (namespace, packageFile, options) => {
17
+ .action(async (namespace, skillPath, options) => {
18
18
  const visibility = options.visibility.toUpperCase();
19
19
  if (!VISIBILITIES.has(visibility))
20
20
  throw new CliError('Invalid visibility. Expected PUBLIC, PRIVATE, or NAMESPACE_ONLY.');
21
- if (!existsSync(packageFile))
22
- throw new CliError(`Package file not found: ${packageFile}`);
23
21
  if (options.label.length === 0)
24
22
  throw new CliError('At least one recommended --label is required.\nUse "skillhub labels" to view available recommended labels.', { code: 'PUBLISH_RECOMMENDED_LABEL_REQUIRED' });
25
- const context = await createContext(program.opts());
26
- await assertRecommendedLabel(context.client, options.label);
27
- const form = new FormData();
28
- const file = new Blob([await streamToArrayBuffer(createReadStream(packageFile))]);
29
- form.set('file', file, basename(packageFile));
30
- form.set('visibility', visibility);
31
- if (options.summary)
32
- form.set('summary', options.summary);
33
- form.set('displayName', options.displayName);
34
- for (const label of options.label)
35
- form.append('labelSlugs', label);
36
- const result = await context.client.uploadMultipart(`/skills/${encodeURIComponent(namespace)}/publish`, form);
37
- printResult(context.json ? result : formatPublish(result), context.json);
23
+ if (!existsSync(skillPath))
24
+ throw new CliError(`Skill path not found: ${skillPath}`);
25
+ const prepared = await preparePublishPackage(skillPath);
26
+ try {
27
+ const context = await createContext(program.opts());
28
+ await assertRecommendedLabel(context.client, options.label);
29
+ const form = new FormData();
30
+ const file = new Blob([await streamToArrayBuffer(createReadStream(prepared.archivePath))]);
31
+ form.set('file', file, prepared.fileName);
32
+ form.set('visibility', visibility);
33
+ if (options.summary)
34
+ form.set('summary', options.summary);
35
+ form.set('displayName', options.displayName);
36
+ for (const label of options.label)
37
+ form.append('labelSlugs', label);
38
+ const result = await context.client.uploadMultipart(`/skills/${encodeURIComponent(namespace)}/publish`, form);
39
+ printResult(context.json ? result : formatPublish(result), context.json);
40
+ }
41
+ finally {
42
+ await prepared.cleanup();
43
+ }
38
44
  });
39
45
  }
40
46
  function collect(value, previous) {
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAErE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,mCAAmC,CAAC;SAC5C,WAAW,CAAC,yBAAyB,CAAC;SACtC,cAAc,CAAC,2BAA2B,EAAE,+CAA+C,CAAC;SAC5F,cAAc,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;SACxE,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;SACzD,MAAM,CAAC,gBAAgB,EAAE,4FAA4F,EAAE,OAAO,EAAE,EAAE,CAAC;SACnI,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,WAAmB,EAAE,OAAuB,EAAE,EAAE;QAChF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAA;QACnD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,kEAAkE,CAAC,CAAA;QACzH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAA;QAC1F,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,4GAA4G,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAA;QAEhN,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,sBAAsB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAE3D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;QACjF,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QAClC,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB,WAAW,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC9H,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACN,CAAC;AASD,SAAS,OAAO,CAAC,KAAa,EAAE,QAAkB;IAChD,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAA6B;IAC9D,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
package/dist/lib/api.d.ts CHANGED
@@ -5,7 +5,8 @@ export interface RequestOptions {
5
5
  }
6
6
  export interface ApiEnvelope<T> {
7
7
  code: number;
8
- message: string;
8
+ msg?: string;
9
+ message?: string;
9
10
  data: T;
10
11
  timestamp?: string;
11
12
  requestId?: string;
package/dist/lib/api.js CHANGED
@@ -38,11 +38,12 @@ export class SkillHubApiClient {
38
38
  await this.throwHttpError(response, method, request);
39
39
  const envelope = (await response.json());
40
40
  if (envelope.code !== 0) {
41
- throw new CliError(envelope.message || 'SkillHub request failed.', {
41
+ const backendMessage = extractBackendMessage(envelope);
42
+ throw new CliError(backendMessage || 'SkillHub request failed.', {
42
43
  request: `${method} ${request}`,
43
44
  status: response.status,
44
45
  requestId: envelope.requestId,
45
- backendMessage: envelope.message
46
+ backendMessage
46
47
  });
47
48
  }
48
49
  return envelope.data;
@@ -76,7 +77,7 @@ export class SkillHubApiClient {
76
77
  let requestId;
77
78
  try {
78
79
  const body = (await response.json());
79
- backendMessage = body.message;
80
+ backendMessage = extractBackendMessage(body);
80
81
  requestId = body.requestId;
81
82
  }
82
83
  catch {
@@ -105,4 +106,7 @@ function parseContentDispositionFileName(value) {
105
106
  const match = /filename="?([^";]+)"?/i.exec(value);
106
107
  return match?.[1];
107
108
  }
109
+ function extractBackendMessage(body) {
110
+ return body.msg ?? body.message;
111
+ }
108
112
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAgBtC,MAAM,OAAO,iBAAiB;IACC;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,MAA+D;QAC5F,OAAO,IAAI,CAAC,WAAW,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,IAAY,EAAE,IAAc;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,MAA+D;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QACrE,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;QAChD,OAAO;YACL,KAAK,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC;YAClC,QAAQ,EAAE,+BAA+B,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACtF,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS;SAC/D,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAI,IAAY,EAAE,IAAc;QACnD,OAAO,IAAI,CAAC,WAAW,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc,EAAE,MAA+D;QACxI,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;QACvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YACpC,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC9F,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;QAC1D,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,EAAE;gBACjE,OAAO,EAAE,GAAG,MAAM,IAAI,OAAO,EAAE;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,cAAc,EAAE,QAAQ,CAAC,OAAO;aACjC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAA;IACtB,CAAC;IAEO,OAAO,CAAC,WAAoB;QAClC,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;QACtE,IAAI,WAAW;YAAE,OAAO,CAAC,cAAc,CAAC,GAAG,WAAW,CAAA;QACtD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAC9E,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,QAAQ,CAAC,IAAY,EAAE,MAA+D;QAC5F,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC,CAAA;QAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC9D,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;IACvB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,MAAc,EAAE,OAAe;QAC9E,IAAI,cAAkC,CAAA;QACtC,IAAI,SAA6B,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkC,CAAA;YACrE,cAAc,GAAG,IAAI,CAAC,OAAO,CAAA;YAC7B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAA;QACtC,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,wEAAwE,CAAC,CAAC,CAAC,SAAS,CAAA;QAClI,MAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,cAAc,IAAI,uCAAuC,QAAQ,CAAC,MAAM,GAAG,EAAE;YAC7G,OAAO,EAAE,GAAG,MAAM,IAAI,OAAO,EAAE;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,SAAS;YACT,cAAc;SACf,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,KAAyB;IACpD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,QAAQ,CAAC,2EAA2E,CAAC,CAAA;IAC3G,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,+BAA+B,CAAC,KAAoB;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,SAAS,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1D,IAAI,SAAS;QAAE,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface PreparedPublishPackage {
2
+ archivePath: string;
3
+ fileName: string;
4
+ cleanup: () => Promise<void>;
5
+ }
6
+ export declare function preparePublishPackage(packagePath: string): Promise<PreparedPublishPackage>;
7
+ export declare function parseSkillFrontmatter(content: string): Record<string, string> | null;
8
+ export declare function validateSkillFrontmatter(frontmatter: Record<string, string> | null): void;
@@ -0,0 +1,144 @@
1
+ import AdmZip from 'adm-zip';
2
+ import { promises as fs } from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { assertSafeEntries, listArchiveEntries } from './archive.js';
6
+ import { CliError } from './errors.js';
7
+ const REQUIRED_FRONTMATTER_FIELDS = ['name', 'description', 'version'];
8
+ export async function preparePublishPackage(packagePath) {
9
+ const resolvedPath = path.resolve(packagePath);
10
+ const stats = await stat(resolvedPath);
11
+ if (!stats)
12
+ throw new CliError(`Package file not found: ${packagePath}`);
13
+ const workspace = await fs.mkdtemp(path.join(os.tmpdir(), 'skillhub-publish-'));
14
+ let cleaned = false;
15
+ const cleanup = async () => {
16
+ if (cleaned)
17
+ return;
18
+ cleaned = true;
19
+ await fs.rm(workspace, { recursive: true, force: true });
20
+ };
21
+ try {
22
+ if (stats.isDirectory()) {
23
+ await validateDirectoryPackage(resolvedPath);
24
+ const archivePath = path.join(workspace, `${path.basename(resolvedPath)}.zip`);
25
+ await createZipFromDirectory(resolvedPath, archivePath);
26
+ return { archivePath, fileName: path.basename(archivePath), cleanup };
27
+ }
28
+ if (stats.isFile() && resolvedPath.toLowerCase().endsWith('.zip')) {
29
+ await validateZipPackage(resolvedPath, workspace);
30
+ return { archivePath: resolvedPath, fileName: path.basename(resolvedPath), cleanup };
31
+ }
32
+ throw new CliError(`Unsupported package input: ${packagePath}. Expected a directory or .zip file.`);
33
+ }
34
+ catch (error) {
35
+ await cleanup();
36
+ throw error;
37
+ }
38
+ }
39
+ export function parseSkillFrontmatter(content) {
40
+ const normalized = content.replace(/^/, '');
41
+ const lines = normalized.split(/\r?\n/);
42
+ if (lines[0] !== '---')
43
+ return null;
44
+ const frontmatterLines = [];
45
+ let index = 1;
46
+ while (index < lines.length) {
47
+ const line = lines[index];
48
+ if (line === '---')
49
+ break;
50
+ frontmatterLines.push(line);
51
+ index += 1;
52
+ }
53
+ if (index >= lines.length)
54
+ return null;
55
+ const frontmatter = {};
56
+ for (const line of frontmatterLines) {
57
+ const separator = line.indexOf(':');
58
+ if (separator <= 0)
59
+ continue;
60
+ const key = line.slice(0, separator).trim();
61
+ const value = line.slice(separator + 1).trim().replace(/^['\"]|['\"]$/g, '');
62
+ if (key)
63
+ frontmatter[key] = value;
64
+ }
65
+ return frontmatter;
66
+ }
67
+ export function validateSkillFrontmatter(frontmatter) {
68
+ if (!frontmatter)
69
+ throw new CliError('SKILL.md must include frontmatter.');
70
+ for (const field of REQUIRED_FRONTMATTER_FIELDS) {
71
+ if (!frontmatter[field]?.trim()) {
72
+ throw new CliError(`SKILL.md frontmatter is missing required field: ${field}.`);
73
+ }
74
+ }
75
+ }
76
+ async function validateDirectoryPackage(directoryPath) {
77
+ await validateSkillMarkdown(path.join(directoryPath, 'SKILL.md'));
78
+ }
79
+ async function validateZipPackage(archivePath, workspace) {
80
+ const entries = await listArchiveEntries(archivePath);
81
+ assertSafeEntries(entries);
82
+ const extractedDir = path.join(workspace, 'extracted');
83
+ await fs.mkdir(extractedDir, { recursive: true });
84
+ const zip = new AdmZip(archivePath);
85
+ zip.extractAllTo(extractedDir, true);
86
+ const packageRoot = await resolvePackageRoot(extractedDir);
87
+ await validateSkillMarkdown(path.join(packageRoot, 'SKILL.md'));
88
+ }
89
+ async function validateSkillMarkdown(skillMdPath) {
90
+ if (!(await exists(skillMdPath))) {
91
+ throw new CliError('Skill package must contain SKILL.md.');
92
+ }
93
+ const content = await fs.readFile(skillMdPath, 'utf8');
94
+ validateSkillFrontmatter(parseSkillFrontmatter(content));
95
+ }
96
+ async function resolvePackageRoot(extractedDir) {
97
+ const rootSkillPath = path.join(extractedDir, 'SKILL.md');
98
+ if (await exists(rootSkillPath))
99
+ return extractedDir;
100
+ const entries = await fs.readdir(extractedDir, { withFileTypes: true });
101
+ const visibleEntries = entries.filter((entry) => entry.name !== '__MACOSX');
102
+ if (visibleEntries.length === 1 && visibleEntries[0].isDirectory()) {
103
+ const nestedRoot = path.join(extractedDir, visibleEntries[0].name);
104
+ if (await exists(path.join(nestedRoot, 'SKILL.md')))
105
+ return nestedRoot;
106
+ }
107
+ throw new CliError('Invalid zip package structure. Expected SKILL.md at the package root.');
108
+ }
109
+ async function createZipFromDirectory(directoryPath, archivePath) {
110
+ const zip = new AdmZip();
111
+ await addDirectoryContents(zip, directoryPath, directoryPath);
112
+ zip.writeZip(archivePath);
113
+ }
114
+ async function addDirectoryContents(zip, baseDir, currentDir) {
115
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
116
+ for (const entry of entries) {
117
+ const fullPath = path.join(currentDir, entry.name);
118
+ const relativePath = path.relative(baseDir, fullPath).split(path.sep).join('/');
119
+ if (entry.isDirectory()) {
120
+ await addDirectoryContents(zip, baseDir, fullPath);
121
+ continue;
122
+ }
123
+ const content = await fs.readFile(fullPath);
124
+ zip.addFile(relativePath, content);
125
+ }
126
+ }
127
+ async function exists(filePath) {
128
+ try {
129
+ await fs.access(filePath);
130
+ return true;
131
+ }
132
+ catch {
133
+ return false;
134
+ }
135
+ }
136
+ async function stat(filePath) {
137
+ try {
138
+ return await fs.stat(filePath);
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ //# sourceMappingURL=publish-package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish-package.js","sourceRoot":"","sources":["../../src/lib/publish-package.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micar-tsp/skillhub",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Local SkillHub CLI for token-authenticated skill management",
5
5
  "keywords": [
6
6
  "skillhub",