skilld 1.3.0 → 1.4.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.
@@ -9,11 +9,42 @@ import "./sources.mjs";
9
9
  import "./detect.mjs";
10
10
  import "./prompts.mjs";
11
11
  import { g as sharedArgs } from "./cli-helpers.mjs";
12
- import { i as iterateSkills } from "./skills.mjs";
12
+ import { i as iterateSkills, t as getProjectState } from "./skills.mjs";
13
13
  import { c as timeAgo, i as formatSource } from "./formatting.mjs";
14
14
  import { defineCommand } from "citty";
15
15
  //#region src/commands/list.ts
16
- function listCommand(opts = {}) {
16
+ async function listCommand(opts = {}) {
17
+ if (opts.outdated) {
18
+ const entries = (await getProjectState()).outdated.map((skill) => ({
19
+ name: skill.name,
20
+ version: skill.info?.version || "",
21
+ latest: skill.latestVersion || "",
22
+ source: formatSource(skill.info?.source),
23
+ synced: timeAgo(skill.info?.syncedAt)
24
+ }));
25
+ if (opts.json) {
26
+ process.stdout.write(`${JSON.stringify(entries)}\n`);
27
+ return;
28
+ }
29
+ if (entries.length === 0) {
30
+ process.stdout.write("All skills are up to date\n");
31
+ return;
32
+ }
33
+ const nameW = Math.max(...entries.map((e) => e.name.length));
34
+ const verW = Math.max(...entries.map((e) => e.version.length));
35
+ const latW = Math.max(...entries.map((e) => (e.latest || "").length));
36
+ const srcW = Math.max(...entries.map((e) => e.source.length));
37
+ for (const e of entries) {
38
+ const line = [
39
+ e.name.padEnd(nameW),
40
+ `${e.version.padEnd(verW)} → ${(e.latest || "").padEnd(latW)}`,
41
+ e.source.padEnd(srcW),
42
+ e.synced
43
+ ].join(" ");
44
+ process.stdout.write(`${line}\n`);
45
+ }
46
+ return;
47
+ }
17
48
  const skills = [...iterateSkills({ scope: opts.global ? "global" : "all" })];
18
49
  const seen = /* @__PURE__ */ new Set();
19
50
  const entries = [];
@@ -60,12 +91,19 @@ const listCommandDef = defineCommand({
60
91
  type: "boolean",
61
92
  description: "Output as JSON",
62
93
  default: false
94
+ },
95
+ outdated: {
96
+ type: "boolean",
97
+ alias: "o",
98
+ description: "Show only outdated skills",
99
+ default: false
63
100
  }
64
101
  },
65
102
  run({ args }) {
66
103
  return listCommand({
67
104
  global: args.global,
68
- json: args.json
105
+ json: args.json,
106
+ outdated: args.outdated
69
107
  });
70
108
  }
71
109
  });
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","names":[],"sources":["../../src/commands/list.ts"],"sourcesContent":["import { defineCommand } from 'citty'\nimport { sharedArgs } from '../cli-helpers.ts'\nimport { formatSource, timeAgo } from '../core/formatting.ts'\nimport { iterateSkills } from '../core/skills.ts'\n\nexport interface ListOptions {\n global?: boolean\n json?: boolean\n}\n\ninterface ListEntry {\n name: string\n version: string\n source: string\n synced: string\n}\n\nexport function listCommand(opts: ListOptions = {}): void {\n const scope = opts.global ? 'global' : 'all'\n const skills = [...iterateSkills({ scope })]\n\n // Deduplicate by package identity\n const seen = new Set<string>()\n const entries: ListEntry[] = []\n\n for (const skill of skills) {\n const key = skill.info?.packageName || skill.name\n if (seen.has(key))\n continue\n seen.add(key)\n entries.push({\n name: skill.name,\n version: skill.info?.version || '',\n source: formatSource(skill.info?.source),\n synced: timeAgo(skill.info?.syncedAt),\n })\n }\n\n if (opts.json) {\n process.stdout.write(`${JSON.stringify(entries)}\\n`)\n return\n }\n\n if (entries.length === 0) {\n process.stdout.write('No skills installed\\n')\n return\n }\n\n // Column widths\n const nameW = Math.max(...entries.map(e => e.name.length))\n const verW = Math.max(...entries.map(e => e.version.length))\n const srcW = Math.max(...entries.map(e => e.source.length))\n\n for (const e of entries) {\n const line = [\n e.name.padEnd(nameW),\n e.version.padEnd(verW),\n e.source.padEnd(srcW),\n e.synced,\n ].join(' ')\n process.stdout.write(`${line}\\n`)\n }\n}\n\nexport const listCommandDef = defineCommand({\n meta: { name: 'list', description: 'List installed skills' },\n args: {\n global: sharedArgs.global,\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n },\n run({ args }) {\n return listCommand({ global: args.global, json: args.json })\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,SAAgB,YAAY,OAAoB,EAAE,EAAQ;CAExD,MAAM,SAAS,CAAC,GAAG,cAAc,EAAE,OADrB,KAAK,SAAS,WAAW,OACG,CAAC,CAAC;CAG5C,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAM,UAAuB,EAAE;AAE/B,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,MAAM,MAAM,MAAM,eAAe,MAAM;AAC7C,MAAI,KAAK,IAAI,IAAI,CACf;AACF,OAAK,IAAI,IAAI;AACb,UAAQ,KAAK;GACX,MAAM,MAAM;GACZ,SAAS,MAAM,MAAM,WAAW;GAChC,QAAQ,aAAa,MAAM,MAAM,OAAO;GACxC,QAAQ,QAAQ,MAAM,MAAM,SAAA;GAC7B,CAAC;;AAGJ,KAAI,KAAK,MAAM;AACb,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,CAAC,IAAI;AACpD;;AAGF,KAAI,QAAQ,WAAW,GAAG;AACxB,UAAQ,OAAO,MAAM,wBAAwB;AAC7C;;CAIF,MAAM,QAAQ,KAAK,IAAI,GAAG,QAAQ,KAAI,MAAK,EAAE,KAAK,OAAO,CAAC;CAC1D,MAAM,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAI,MAAK,EAAE,QAAQ,OAAO,CAAC;CAC5D,MAAM,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAI,MAAK,EAAE,OAAO,OAAO,CAAC;AAE3D,MAAK,MAAM,KAAK,SAAS;EACvB,MAAM,OAAO;GACX,EAAE,KAAK,OAAO,MAAM;GACpB,EAAE,QAAQ,OAAO,KAAK;GACtB,EAAE,OAAO,OAAO,KAAK;GACrB,EAAE;GACH,CAAC,KAAK,KAAK;AACZ,UAAQ,OAAO,MAAM,GAAG,KAAK,IAAI;;;AAIrC,MAAa,iBAAiB,cAAc;CAC1C,MAAM;EAAE,MAAM;EAAQ,aAAa;EAAyB;CAC5D,MAAM;EACJ,QAAQ,WAAW;EACnB,MAAM;GACJ,MAAM;GACN,aAAa;GACb,SAAS;;EAEZ;CACD,IAAI,EAAE,QAAQ;AACZ,SAAO,YAAY;GAAE,QAAQ,KAAK;GAAQ,MAAM,KAAK;GAAM,CAAC;;CAE/D,CAAC"}
1
+ {"version":3,"file":"list.mjs","names":[],"sources":["../../src/commands/list.ts"],"sourcesContent":["import { defineCommand } from 'citty'\nimport { sharedArgs } from '../cli-helpers.ts'\nimport { formatSource, timeAgo } from '../core/formatting.ts'\nimport { getProjectState, iterateSkills } from '../core/skills.ts'\n\nexport interface ListOptions {\n global?: boolean\n json?: boolean\n outdated?: boolean\n}\n\ninterface ListEntry {\n name: string\n version: string\n source: string\n synced: string\n latest?: string\n}\n\nexport async function listCommand(opts: ListOptions = {}): Promise<void> {\n if (opts.outdated) {\n const state = await getProjectState()\n const entries: ListEntry[] = state.outdated.map(skill => ({\n name: skill.name,\n version: skill.info?.version || '',\n latest: skill.latestVersion || '',\n source: formatSource(skill.info?.source),\n synced: timeAgo(skill.info?.syncedAt),\n }))\n\n if (opts.json) {\n process.stdout.write(`${JSON.stringify(entries)}\\n`)\n return\n }\n\n if (entries.length === 0) {\n process.stdout.write('All skills are up to date\\n')\n return\n }\n\n const nameW = Math.max(...entries.map(e => e.name.length))\n const verW = Math.max(...entries.map(e => e.version.length))\n const latW = Math.max(...entries.map(e => (e.latest || '').length))\n const srcW = Math.max(...entries.map(e => e.source.length))\n\n for (const e of entries) {\n const line = [\n e.name.padEnd(nameW),\n `${e.version.padEnd(verW)} → ${(e.latest || '').padEnd(latW)}`,\n e.source.padEnd(srcW),\n e.synced,\n ].join(' ')\n process.stdout.write(`${line}\\n`)\n }\n return\n }\n\n const scope = opts.global ? 'global' : 'all'\n const skills = [...iterateSkills({ scope })]\n\n // Deduplicate by package identity\n const seen = new Set<string>()\n const entries: ListEntry[] = []\n\n for (const skill of skills) {\n const key = skill.info?.packageName || skill.name\n if (seen.has(key))\n continue\n seen.add(key)\n entries.push({\n name: skill.name,\n version: skill.info?.version || '',\n source: formatSource(skill.info?.source),\n synced: timeAgo(skill.info?.syncedAt),\n })\n }\n\n if (opts.json) {\n process.stdout.write(`${JSON.stringify(entries)}\\n`)\n return\n }\n\n if (entries.length === 0) {\n process.stdout.write('No skills installed\\n')\n return\n }\n\n // Column widths\n const nameW = Math.max(...entries.map(e => e.name.length))\n const verW = Math.max(...entries.map(e => e.version.length))\n const srcW = Math.max(...entries.map(e => e.source.length))\n\n for (const e of entries) {\n const line = [\n e.name.padEnd(nameW),\n e.version.padEnd(verW),\n e.source.padEnd(srcW),\n e.synced,\n ].join(' ')\n process.stdout.write(`${line}\\n`)\n }\n}\n\nexport const listCommandDef = defineCommand({\n meta: { name: 'list', description: 'List installed skills' },\n args: {\n global: sharedArgs.global,\n json: {\n type: 'boolean' as const,\n description: 'Output as JSON',\n default: false,\n },\n outdated: {\n type: 'boolean' as const,\n alias: 'o',\n description: 'Show only outdated skills',\n default: false,\n },\n },\n run({ args }) {\n return listCommand({ global: args.global, json: args.json, outdated: args.outdated })\n },\n})\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "skilld",
3
3
  "type": "module",
4
- "version": "1.3.0",
4
+ "version": "1.4.0",
5
5
  "description": "Generate AI agent skills from npm package documentation",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -45,8 +45,8 @@
45
45
  "dependencies": {
46
46
  "@clack/prompts": "^1.1.0",
47
47
  "@huggingface/transformers": "^3.8.1",
48
- "@mariozechner/pi-ai": "^0.58.4",
49
- "@mdream/crawl": "^1.0.0",
48
+ "@mariozechner/pi-ai": "^0.62.0",
49
+ "@mdream/crawl": "^1.0.3",
50
50
  "citty": "^0.2.1",
51
51
  "consola": "^3.4.2",
52
52
  "giget": "^3.1.2",
@@ -54,9 +54,9 @@
54
54
  "mdast-util-from-markdown": "^2.0.3",
55
55
  "mdast-util-frontmatter": "^2.0.1",
56
56
  "mdast-util-to-string": "^4.0.0",
57
- "mdream": "^1.0.0",
57
+ "mdream": "^1.0.3",
58
58
  "micromark-extension-frontmatter": "^2.0.0",
59
- "mlly": "^1.8.1",
59
+ "mlly": "^1.8.2",
60
60
  "ofetch": "^1.5.1",
61
61
  "oxc-parser": "^0.121.0",
62
62
  "p-limit": "^7.3.0",