@take-out/cli 0.1.46 → 0.1.47

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
@@ -88,8 +88,8 @@ takeout skills generate --clean # clean and regenerate
88
88
  The `skills generate` command generates Claude Code skills from your documentation:
89
89
 
90
90
  1. scans docs from both `./docs/` (local) and package docs
91
- 2. for docs with YAML frontmatter, creates symlinks to `.claude/skills/`
92
- 3. for docs without frontmatter, generates skill files with auto-extracted metadata
91
+ 2. only docs with YAML frontmatter containing `name` and `description` become skills
92
+ 3. those docs are symlinked into `.claude/skills/`
93
93
 
94
94
  **adding frontmatter to docs (recommended):**
95
95
 
@@ -104,8 +104,8 @@ description: What this skill does. Keywords for when Claude should use it.
104
104
  content here...
105
105
  ```
106
106
 
107
- docs with frontmatter get symlinked directly - edit the source and the skill
108
- updates automatically. docs without frontmatter get generated copies.
107
+ docs with frontmatter get symlinked directly, so edits to the source doc update
108
+ the skill automatically. docs without that frontmatter are skipped.
109
109
 
110
110
  **regenerating skills:**
111
111
 
@@ -62,37 +62,6 @@ function isDevOnly(content) {
62
62
  const frontmatter = content.slice(3, endIndex);
63
63
  return /\bdev:\s*true\b/.test(frontmatter);
64
64
  }
65
- function extractDocMeta(content) {
66
- const lines = content.split(`
67
- `);
68
- let title = "",
69
- description = "",
70
- startLine = 0;
71
- if (lines[0]?.trim() === "---") {
72
- for (let i = 1; i < lines.length; i++) if (lines[i]?.trim() === "---") {
73
- startLine = i + 1;
74
- break;
75
- }
76
- }
77
- for (let i = startLine; i < lines.length; i++) {
78
- const trimmed = lines[i]?.trim() || "";
79
- if (!title && trimmed.startsWith("# ")) {
80
- title = trimmed.slice(2).trim();
81
- continue;
82
- }
83
- if (title && trimmed && !trimmed.startsWith("#")) {
84
- description = trimmed;
85
- break;
86
- }
87
- }
88
- return {
89
- title,
90
- description
91
- };
92
- }
93
- function toSkillName(name) {
94
- return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
95
- }
96
65
  function collectAllDocs(cwd) {
97
66
  const docs = [],
98
67
  seen = /* @__PURE__ */new Set(),
@@ -138,12 +107,14 @@ async function generateDocSkills(cwd, clean) {
138
107
  let symlinked = 0,
139
108
  generated = 0,
140
109
  unchanged = 0,
141
- removed = 0;
110
+ removed = 0,
111
+ skipped = 0;
142
112
  const isDev = !!process.env.IS_TAMAGUI_DEV;
143
113
  for (const doc of docs) {
144
114
  const content = (0, import_node_fs.readFileSync)(doc.path, "utf-8");
145
115
  if (isDevOnly(content) && !isDev) continue;
146
- if (hasSkillFrontmatter(content)) {
116
+ const hasFrontmatter = hasSkillFrontmatter(content);
117
+ if (hasFrontmatter) {
147
118
  const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
148
119
  if (!nameMatch) continue;
149
120
  const skillName = nameMatch[1].trim();
@@ -162,41 +133,22 @@ async function generateDocSkills(cwd, clean) {
162
133
  (0, import_node_fs.symlinkSync)(relativePath, skillFile), symlinked++;
163
134
  const sourceLabel = doc.source === "local" ? import_picocolors.default.blue("local") : import_picocolors.default.dim("package");
164
135
  console.info(` ${import_picocolors.default.green("\u27F7")} ${skillName} ${sourceLabel} ${import_picocolors.default.dim("(symlink)")}`);
165
- } else {
166
- const baseName = toSkillName(doc.name),
167
- skillName = `${SKILL_PREFIX}${baseName}`;
168
- expectedSkillNames.add(skillName);
169
- const skillDir = (0, import_node_path.join)(skillsDir, skillName),
170
- skillFile = (0, import_node_path.join)(skillDir, "SKILL.md");
171
- (0, import_node_fs.existsSync)(skillDir) || (0, import_node_fs.mkdirSync)(skillDir, {
172
- recursive: !0
173
- });
174
- const {
175
- title,
176
- description
177
- } = extractDocMeta(content),
178
- skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024),
179
- skillContent = `---
180
- name: ${skillName}
181
- description: ${skillDescription}
182
- ---
183
-
184
- ${content}
185
- `;
186
- let shouldWrite = !0;
187
- try {
188
- (0, import_node_fs.lstatSync)(skillFile).isSymbolicLink() ? (0, import_node_fs.unlinkSync)(skillFile) : (0, import_node_fs.readFileSync)(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
189
- } catch {}
190
- if (!shouldWrite) continue;
191
- (0, import_node_fs.writeFileSync)(skillFile, skillContent), generated++;
192
- const sourceLabel = doc.source === "local" ? import_picocolors.default.blue("local") : import_picocolors.default.dim("package");
193
- console.info(` ${import_picocolors.default.green("\u2713")} ${skillName} ${sourceLabel} ${import_picocolors.default.dim("(generated)")}`);
136
+ } else if (!hasFrontmatter) {
137
+ skipped++, console.info(` ${import_picocolors.default.yellow("!")} skipped ${import_picocolors.default.dim(doc.name)} ${import_picocolors.default.dim("(missing skill frontmatter)")}`);
138
+ continue;
194
139
  }
195
140
  }
196
141
  for (const dir of (0, import_node_fs.readdirSync)(skillsDir)) {
197
142
  if (expectedSkillNames.has(dir)) continue;
198
143
  const skillDir = (0, import_node_path.join)(skillsDir, dir),
199
144
  skillFile = (0, import_node_path.join)(skillDir, "SKILL.md");
145
+ if (dir.startsWith(SKILL_PREFIX)) {
146
+ (0, import_node_fs.rmSync)(skillDir, {
147
+ recursive: !0,
148
+ force: !0
149
+ }), removed++, console.info(` ${import_picocolors.default.red("\u2715")} ${dir} ${import_picocolors.default.dim("(removed stale generated skill)")}`);
150
+ continue;
151
+ }
200
152
  let shouldUnlink = !1;
201
153
  try {
202
154
  if ((0, import_node_fs.lstatSync)(skillFile).isSymbolicLink()) {
@@ -211,7 +163,8 @@ ${content}
211
163
  symlinked,
212
164
  generated,
213
165
  unchanged,
214
- removed
166
+ removed,
167
+ skipped
215
168
  };
216
169
  }
217
170
  const generateCommand = (0, import_citty.defineCommand)({
@@ -240,12 +193,13 @@ const generateCommand = (0, import_citty.defineCommand)({
240
193
  let symlinked = 0,
241
194
  generated = 0,
242
195
  unchanged = 0,
243
- removed = 0;
196
+ removed = 0,
197
+ skipped = 0;
244
198
  if (!args["skip-internal-docs"]) {
245
199
  const docStats = await generateDocSkills(cwd, args.clean);
246
- symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, console.info();
200
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, skipped = docStats.skipped, console.info();
247
201
  }
248
- console.info(), console.info(import_picocolors.default.bold("summary:")), symlinked > 0 && console.info(` ${import_picocolors.default.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(` ${import_picocolors.default.yellow(`${generated} generated`)} ${import_picocolors.default.dim("(add frontmatter to enable symlink)")}`), unchanged > 0 && console.info(` ${import_picocolors.default.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${import_picocolors.default.red(`${removed} removed`)}`), console.info(import_picocolors.default.dim(` skills in ${skillsDir}`)), console.info();
202
+ console.info(), console.info(import_picocolors.default.bold("summary:")), symlinked > 0 && console.info(` ${import_picocolors.default.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(` ${import_picocolors.default.yellow(`${generated} generated`)} ${import_picocolors.default.dim("(add frontmatter to enable symlink)")}`), skipped > 0 && console.info(` ${import_picocolors.default.yellow(`${skipped} skipped`)} ${import_picocolors.default.dim("(missing skill frontmatter)")}`), unchanged > 0 && console.info(` ${import_picocolors.default.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${import_picocolors.default.red(`${removed} removed`)}`), console.info(import_picocolors.default.dim(` skills in ${skillsDir}`)), console.info();
249
203
  }
250
204
  }),
251
205
  skillsCommand = (0, import_citty.defineCommand)({
@@ -48,33 +48,6 @@ function isDevOnly(content) {
48
48
  const frontmatter = content.slice(3, endIndex);
49
49
  return /\bdev:\s*true\b/.test(frontmatter);
50
50
  }
51
- function extractDocMeta(content) {
52
- const lines = content.split(`
53
- `);
54
- let title = "", description = "", startLine = 0;
55
- if (lines[0]?.trim() === "---") {
56
- for (let i = 1; i < lines.length; i++)
57
- if (lines[i]?.trim() === "---") {
58
- startLine = i + 1;
59
- break;
60
- }
61
- }
62
- for (let i = startLine; i < lines.length; i++) {
63
- const trimmed = lines[i]?.trim() || "";
64
- if (!title && trimmed.startsWith("# ")) {
65
- title = trimmed.slice(2).trim();
66
- continue;
67
- }
68
- if (title && trimmed && !trimmed.startsWith("#")) {
69
- description = trimmed;
70
- break;
71
- }
72
- }
73
- return { title, description };
74
- }
75
- function toSkillName(name) {
76
- return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
77
- }
78
51
  function collectAllDocs(cwd) {
79
52
  const docs = [], seen = /* @__PURE__ */ new Set(), localDocsDir = (0, import_node_path.join)(cwd, "docs");
80
53
  if ((0, import_node_fs.existsSync)(localDocsDir)) {
@@ -101,12 +74,13 @@ async function generateDocSkills(cwd, clean) {
101
74
  dir.startsWith(SKILL_PREFIX) && (0, import_node_fs.rmSync)((0, import_node_path.join)(skillsDir, dir), { recursive: !0 });
102
75
  }
103
76
  (0, import_node_fs.existsSync)(skillsDir) || (0, import_node_fs.mkdirSync)(skillsDir, { recursive: !0 });
104
- let symlinked = 0, generated = 0, unchanged = 0, removed = 0;
77
+ let symlinked = 0, generated = 0, unchanged = 0, removed = 0, skipped = 0;
105
78
  const isDev = !!process.env.IS_TAMAGUI_DEV;
106
79
  for (const doc of docs) {
107
80
  const content = (0, import_node_fs.readFileSync)(doc.path, "utf-8");
108
81
  if (isDevOnly(content) && !isDev) continue;
109
- if (hasSkillFrontmatter(content)) {
82
+ const hasFrontmatter = hasSkillFrontmatter(content);
83
+ if (hasFrontmatter) {
110
84
  const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
111
85
  if (!nameMatch) continue;
112
86
  const skillName = nameMatch[1].trim();
@@ -125,34 +99,20 @@ async function generateDocSkills(cwd, clean) {
125
99
  console.info(
126
100
  ` ${import_picocolors.default.green("\u27F7")} ${skillName} ${sourceLabel} ${import_picocolors.default.dim("(symlink)")}`
127
101
  );
128
- } else {
129
- const baseName = toSkillName(doc.name), skillName = `${SKILL_PREFIX}${baseName}`;
130
- expectedSkillNames.add(skillName);
131
- const skillDir = (0, import_node_path.join)(skillsDir, skillName), skillFile = (0, import_node_path.join)(skillDir, "SKILL.md");
132
- (0, import_node_fs.existsSync)(skillDir) || (0, import_node_fs.mkdirSync)(skillDir, { recursive: !0 });
133
- const { title, description } = extractDocMeta(content), skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024), skillContent = `---
134
- name: ${skillName}
135
- description: ${skillDescription}
136
- ---
137
-
138
- ${content}
139
- `;
140
- let shouldWrite = !0;
141
- try {
142
- (0, import_node_fs.lstatSync)(skillFile).isSymbolicLink() ? (0, import_node_fs.unlinkSync)(skillFile) : (0, import_node_fs.readFileSync)(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
143
- } catch {
144
- }
145
- if (!shouldWrite) continue;
146
- (0, import_node_fs.writeFileSync)(skillFile, skillContent), generated++;
147
- const sourceLabel = doc.source === "local" ? import_picocolors.default.blue("local") : import_picocolors.default.dim("package");
148
- console.info(
149
- ` ${import_picocolors.default.green("\u2713")} ${skillName} ${sourceLabel} ${import_picocolors.default.dim("(generated)")}`
102
+ } else if (!hasFrontmatter) {
103
+ skipped++, console.info(
104
+ ` ${import_picocolors.default.yellow("!")} skipped ${import_picocolors.default.dim(doc.name)} ${import_picocolors.default.dim("(missing skill frontmatter)")}`
150
105
  );
106
+ continue;
151
107
  }
152
108
  }
153
109
  for (const dir of (0, import_node_fs.readdirSync)(skillsDir)) {
154
110
  if (expectedSkillNames.has(dir)) continue;
155
111
  const skillDir = (0, import_node_path.join)(skillsDir, dir), skillFile = (0, import_node_path.join)(skillDir, "SKILL.md");
112
+ if (dir.startsWith(SKILL_PREFIX)) {
113
+ (0, import_node_fs.rmSync)(skillDir, { recursive: !0, force: !0 }), removed++, console.info(` ${import_picocolors.default.red("\u2715")} ${dir} ${import_picocolors.default.dim("(removed stale generated skill)")}`);
114
+ continue;
115
+ }
156
116
  let shouldUnlink = !1;
157
117
  try {
158
118
  if ((0, import_node_fs.lstatSync)(skillFile).isSymbolicLink()) {
@@ -163,7 +123,7 @@ ${content}
163
123
  }
164
124
  shouldUnlink && ((0, import_node_fs.unlinkSync)(skillFile), (0, import_node_fs.readdirSync)(skillDir).length === 0 && (0, import_node_fs.rmdirSync)(skillDir), removed++, console.info(` ${import_picocolors.default.red("\u2715")} ${dir} ${import_picocolors.default.dim("(removed stale symlink)")}`));
165
125
  }
166
- return { symlinked, generated, unchanged, removed };
126
+ return { symlinked, generated, unchanged, removed, skipped };
167
127
  }
168
128
  const generateCommand = (0, import_citty.defineCommand)({
169
129
  meta: {
@@ -185,13 +145,15 @@ const generateCommand = (0, import_citty.defineCommand)({
185
145
  async run({ args }) {
186
146
  const cwd = process.cwd(), skillsDir = (0, import_node_path.join)(cwd, ".claude", "skills");
187
147
  console.info(), console.info(import_picocolors.default.bold(import_picocolors.default.cyan("Generate all skills"))), console.info();
188
- let symlinked = 0, generated = 0, unchanged = 0, removed = 0;
148
+ let symlinked = 0, generated = 0, unchanged = 0, removed = 0, skipped = 0;
189
149
  if (!args["skip-internal-docs"]) {
190
150
  const docStats = await generateDocSkills(cwd, args.clean);
191
- symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, console.info();
151
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, skipped = docStats.skipped, console.info();
192
152
  }
193
153
  console.info(), console.info(import_picocolors.default.bold("summary:")), symlinked > 0 && console.info(` ${import_picocolors.default.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(
194
154
  ` ${import_picocolors.default.yellow(`${generated} generated`)} ${import_picocolors.default.dim("(add frontmatter to enable symlink)")}`
155
+ ), skipped > 0 && console.info(
156
+ ` ${import_picocolors.default.yellow(`${skipped} skipped`)} ${import_picocolors.default.dim("(missing skill frontmatter)")}`
195
157
  ), unchanged > 0 && console.info(` ${import_picocolors.default.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${import_picocolors.default.red(`${removed} removed`)}`), console.info(import_picocolors.default.dim(` skills in ${skillsDir}`)), console.info();
196
158
  }
197
159
  }), skillsCommand = (0, import_citty.defineCommand)({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/commands/skills.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["require", "pc"]
6
6
  }
@@ -8,8 +8,7 @@ import {
8
8
  rmSync,
9
9
  rmdirSync,
10
10
  symlinkSync,
11
- unlinkSync,
12
- writeFileSync
11
+ unlinkSync
13
12
  } from "node:fs";
14
13
  import { createRequire } from "node:module";
15
14
  import { dirname, join, relative, resolve } from "node:path";
@@ -37,33 +36,6 @@ function isDevOnly(content) {
37
36
  const frontmatter = content.slice(3, endIndex);
38
37
  return /\bdev:\s*true\b/.test(frontmatter);
39
38
  }
40
- function extractDocMeta(content) {
41
- const lines = content.split(`
42
- `);
43
- let title = "", description = "", startLine = 0;
44
- if (lines[0]?.trim() === "---") {
45
- for (let i = 1; i < lines.length; i++)
46
- if (lines[i]?.trim() === "---") {
47
- startLine = i + 1;
48
- break;
49
- }
50
- }
51
- for (let i = startLine; i < lines.length; i++) {
52
- const trimmed = lines[i]?.trim() || "";
53
- if (!title && trimmed.startsWith("# ")) {
54
- title = trimmed.slice(2).trim();
55
- continue;
56
- }
57
- if (title && trimmed && !trimmed.startsWith("#")) {
58
- description = trimmed;
59
- break;
60
- }
61
- }
62
- return { title, description };
63
- }
64
- function toSkillName(name) {
65
- return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
66
- }
67
39
  function collectAllDocs(cwd) {
68
40
  const docs = [], seen = /* @__PURE__ */ new Set(), localDocsDir = join(cwd, "docs");
69
41
  if (existsSync(localDocsDir)) {
@@ -90,12 +62,13 @@ async function generateDocSkills(cwd, clean) {
90
62
  dir.startsWith(SKILL_PREFIX) && rmSync(join(skillsDir, dir), { recursive: !0 });
91
63
  }
92
64
  existsSync(skillsDir) || mkdirSync(skillsDir, { recursive: !0 });
93
- let symlinked = 0, generated = 0, unchanged = 0, removed = 0;
65
+ let symlinked = 0, generated = 0, unchanged = 0, removed = 0, skipped = 0;
94
66
  const isDev = !!process.env.IS_TAMAGUI_DEV;
95
67
  for (const doc of docs) {
96
68
  const content = readFileSync(doc.path, "utf-8");
97
69
  if (isDevOnly(content) && !isDev) continue;
98
- if (hasSkillFrontmatter(content)) {
70
+ const hasFrontmatter = hasSkillFrontmatter(content);
71
+ if (hasFrontmatter) {
99
72
  const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
100
73
  if (!nameMatch) continue;
101
74
  const skillName = nameMatch[1].trim();
@@ -114,34 +87,20 @@ async function generateDocSkills(cwd, clean) {
114
87
  console.info(
115
88
  ` ${pc.green("\u27F7")} ${skillName} ${sourceLabel} ${pc.dim("(symlink)")}`
116
89
  );
117
- } else {
118
- const baseName = toSkillName(doc.name), skillName = `${SKILL_PREFIX}${baseName}`;
119
- expectedSkillNames.add(skillName);
120
- const skillDir = join(skillsDir, skillName), skillFile = join(skillDir, "SKILL.md");
121
- existsSync(skillDir) || mkdirSync(skillDir, { recursive: !0 });
122
- const { title, description } = extractDocMeta(content), skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024), skillContent = `---
123
- name: ${skillName}
124
- description: ${skillDescription}
125
- ---
126
-
127
- ${content}
128
- `;
129
- let shouldWrite = !0;
130
- try {
131
- lstatSync(skillFile).isSymbolicLink() ? unlinkSync(skillFile) : readFileSync(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
132
- } catch {
133
- }
134
- if (!shouldWrite) continue;
135
- writeFileSync(skillFile, skillContent), generated++;
136
- const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
137
- console.info(
138
- ` ${pc.green("\u2713")} ${skillName} ${sourceLabel} ${pc.dim("(generated)")}`
90
+ } else if (!hasFrontmatter) {
91
+ skipped++, console.info(
92
+ ` ${pc.yellow("!")} skipped ${pc.dim(doc.name)} ${pc.dim("(missing skill frontmatter)")}`
139
93
  );
94
+ continue;
140
95
  }
141
96
  }
142
97
  for (const dir of readdirSync(skillsDir)) {
143
98
  if (expectedSkillNames.has(dir)) continue;
144
99
  const skillDir = join(skillsDir, dir), skillFile = join(skillDir, "SKILL.md");
100
+ if (dir.startsWith(SKILL_PREFIX)) {
101
+ rmSync(skillDir, { recursive: !0, force: !0 }), removed++, console.info(` ${pc.red("\u2715")} ${dir} ${pc.dim("(removed stale generated skill)")}`);
102
+ continue;
103
+ }
145
104
  let shouldUnlink = !1;
146
105
  try {
147
106
  if (lstatSync(skillFile).isSymbolicLink()) {
@@ -152,7 +111,7 @@ ${content}
152
111
  }
153
112
  shouldUnlink && (unlinkSync(skillFile), readdirSync(skillDir).length === 0 && rmdirSync(skillDir), removed++, console.info(` ${pc.red("\u2715")} ${dir} ${pc.dim("(removed stale symlink)")}`));
154
113
  }
155
- return { symlinked, generated, unchanged, removed };
114
+ return { symlinked, generated, unchanged, removed, skipped };
156
115
  }
157
116
  const generateCommand = defineCommand({
158
117
  meta: {
@@ -174,13 +133,15 @@ const generateCommand = defineCommand({
174
133
  async run({ args }) {
175
134
  const cwd = process.cwd(), skillsDir = join(cwd, ".claude", "skills");
176
135
  console.info(), console.info(pc.bold(pc.cyan("Generate all skills"))), console.info();
177
- let symlinked = 0, generated = 0, unchanged = 0, removed = 0;
136
+ let symlinked = 0, generated = 0, unchanged = 0, removed = 0, skipped = 0;
178
137
  if (!args["skip-internal-docs"]) {
179
138
  const docStats = await generateDocSkills(cwd, args.clean);
180
- symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, console.info();
139
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, skipped = docStats.skipped, console.info();
181
140
  }
182
141
  console.info(), console.info(pc.bold("summary:")), symlinked > 0 && console.info(` ${pc.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(
183
142
  ` ${pc.yellow(`${generated} generated`)} ${pc.dim("(add frontmatter to enable symlink)")}`
143
+ ), skipped > 0 && console.info(
144
+ ` ${pc.yellow(`${skipped} skipped`)} ${pc.dim("(missing skill frontmatter)")}`
184
145
  ), unchanged > 0 && console.info(` ${pc.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${pc.red(`${removed} removed`)}`), console.info(pc.dim(` skills in ${skillsDir}`)), console.info();
185
146
  }
186
147
  }), skillsCommand = defineCommand({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/commands/skills.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["require"]
6
6
  }
@@ -1,4 +1,4 @@
1
- import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, rmdirSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
1
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, rmdirSync, symlinkSync, unlinkSync } from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import { dirname, join, relative, resolve } from "node:path";
4
4
  import { defineCommand } from "citty";
@@ -25,37 +25,6 @@ function isDevOnly(content) {
25
25
  const frontmatter = content.slice(3, endIndex);
26
26
  return /\bdev:\s*true\b/.test(frontmatter);
27
27
  }
28
- function extractDocMeta(content) {
29
- const lines = content.split(`
30
- `);
31
- let title = "",
32
- description = "",
33
- startLine = 0;
34
- if (lines[0]?.trim() === "---") {
35
- for (let i = 1; i < lines.length; i++) if (lines[i]?.trim() === "---") {
36
- startLine = i + 1;
37
- break;
38
- }
39
- }
40
- for (let i = startLine; i < lines.length; i++) {
41
- const trimmed = lines[i]?.trim() || "";
42
- if (!title && trimmed.startsWith("# ")) {
43
- title = trimmed.slice(2).trim();
44
- continue;
45
- }
46
- if (title && trimmed && !trimmed.startsWith("#")) {
47
- description = trimmed;
48
- break;
49
- }
50
- }
51
- return {
52
- title,
53
- description
54
- };
55
- }
56
- function toSkillName(name) {
57
- return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
58
- }
59
28
  function collectAllDocs(cwd) {
60
29
  const docs = [],
61
30
  seen = /* @__PURE__ */new Set(),
@@ -101,12 +70,14 @@ async function generateDocSkills(cwd, clean) {
101
70
  let symlinked = 0,
102
71
  generated = 0,
103
72
  unchanged = 0,
104
- removed = 0;
73
+ removed = 0,
74
+ skipped = 0;
105
75
  const isDev = !!process.env.IS_TAMAGUI_DEV;
106
76
  for (const doc of docs) {
107
77
  const content = readFileSync(doc.path, "utf-8");
108
78
  if (isDevOnly(content) && !isDev) continue;
109
- if (hasSkillFrontmatter(content)) {
79
+ const hasFrontmatter = hasSkillFrontmatter(content);
80
+ if (hasFrontmatter) {
110
81
  const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
111
82
  if (!nameMatch) continue;
112
83
  const skillName = nameMatch[1].trim();
@@ -125,41 +96,22 @@ async function generateDocSkills(cwd, clean) {
125
96
  symlinkSync(relativePath, skillFile), symlinked++;
126
97
  const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
127
98
  console.info(` ${pc.green("\u27F7")} ${skillName} ${sourceLabel} ${pc.dim("(symlink)")}`);
128
- } else {
129
- const baseName = toSkillName(doc.name),
130
- skillName = `${SKILL_PREFIX}${baseName}`;
131
- expectedSkillNames.add(skillName);
132
- const skillDir = join(skillsDir, skillName),
133
- skillFile = join(skillDir, "SKILL.md");
134
- existsSync(skillDir) || mkdirSync(skillDir, {
135
- recursive: !0
136
- });
137
- const {
138
- title,
139
- description
140
- } = extractDocMeta(content),
141
- skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024),
142
- skillContent = `---
143
- name: ${skillName}
144
- description: ${skillDescription}
145
- ---
146
-
147
- ${content}
148
- `;
149
- let shouldWrite = !0;
150
- try {
151
- lstatSync(skillFile).isSymbolicLink() ? unlinkSync(skillFile) : readFileSync(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
152
- } catch {}
153
- if (!shouldWrite) continue;
154
- writeFileSync(skillFile, skillContent), generated++;
155
- const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
156
- console.info(` ${pc.green("\u2713")} ${skillName} ${sourceLabel} ${pc.dim("(generated)")}`);
99
+ } else if (!hasFrontmatter) {
100
+ skipped++, console.info(` ${pc.yellow("!")} skipped ${pc.dim(doc.name)} ${pc.dim("(missing skill frontmatter)")}`);
101
+ continue;
157
102
  }
158
103
  }
159
104
  for (const dir of readdirSync(skillsDir)) {
160
105
  if (expectedSkillNames.has(dir)) continue;
161
106
  const skillDir = join(skillsDir, dir),
162
107
  skillFile = join(skillDir, "SKILL.md");
108
+ if (dir.startsWith(SKILL_PREFIX)) {
109
+ rmSync(skillDir, {
110
+ recursive: !0,
111
+ force: !0
112
+ }), removed++, console.info(` ${pc.red("\u2715")} ${dir} ${pc.dim("(removed stale generated skill)")}`);
113
+ continue;
114
+ }
163
115
  let shouldUnlink = !1;
164
116
  try {
165
117
  if (lstatSync(skillFile).isSymbolicLink()) {
@@ -174,7 +126,8 @@ ${content}
174
126
  symlinked,
175
127
  generated,
176
128
  unchanged,
177
- removed
129
+ removed,
130
+ skipped
178
131
  };
179
132
  }
180
133
  const generateCommand = defineCommand({
@@ -203,12 +156,13 @@ const generateCommand = defineCommand({
203
156
  let symlinked = 0,
204
157
  generated = 0,
205
158
  unchanged = 0,
206
- removed = 0;
159
+ removed = 0,
160
+ skipped = 0;
207
161
  if (!args["skip-internal-docs"]) {
208
162
  const docStats = await generateDocSkills(cwd, args.clean);
209
- symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, console.info();
163
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, removed = docStats.removed, skipped = docStats.skipped, console.info();
210
164
  }
211
- console.info(), console.info(pc.bold("summary:")), symlinked > 0 && console.info(` ${pc.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(` ${pc.yellow(`${generated} generated`)} ${pc.dim("(add frontmatter to enable symlink)")}`), unchanged > 0 && console.info(` ${pc.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${pc.red(`${removed} removed`)}`), console.info(pc.dim(` skills in ${skillsDir}`)), console.info();
165
+ console.info(), console.info(pc.bold("summary:")), symlinked > 0 && console.info(` ${pc.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(` ${pc.yellow(`${generated} generated`)} ${pc.dim("(add frontmatter to enable symlink)")}`), skipped > 0 && console.info(` ${pc.yellow(`${skipped} skipped`)} ${pc.dim("(missing skill frontmatter)")}`), unchanged > 0 && console.info(` ${pc.dim(`${unchanged} unchanged`)}`), removed > 0 && console.info(` ${pc.red(`${removed} removed`)}`), console.info(pc.dim(` skills in ${skillsDir}`)), console.info();
212
166
  }
213
167
  }),
214
168
  skillsCommand = defineCommand({
@@ -1 +1 @@
1
- {"version":3,"names":["existsSync","lstatSync","mkdirSync","readdirSync","readFileSync","readlinkSync","rmSync","rmdirSync","symlinkSync","unlinkSync","writeFileSync","createRequire","dirname","join","relative","resolve","defineCommand","pc","require2","import","meta","url","DOCS_DIR","SKILL_PREFIX","hasSkillFrontmatter","content","startsWith","endIndex","indexOf","frontmatter","slice","includes","isDevOnly","test","extractDocMeta","lines","split","title","description","startLine","trim","i","length","trimmed","toSkillName","name","toLowerCase","replace","collectAllDocs","cwd","docs","seen","Set","localDocsDir","files","filter","f","endsWith","file","push","path","source","add","has","generateDocSkills","clean","skillsDir","expectedSkillNames","console","info","yellow","dim","existing","dir","recursive","symlinked","generated","unchanged","removed","isDev","process","env","IS_TAMAGUI_DEV","doc","nameMatch","match","skillName","skillDir","skillFile","relativePath","shouldCreate","isSymbolicLink","sourceLabel","blue","green","baseName","skillDescription","skillContent","shouldWrite","shouldUnlink","linkTarget","resolvedTarget","red","generateCommand","args","type","default","run","bold","cyan","docStats","skillsCommand","subCommands","generate"],"sources":["../../../src/commands/skills.ts"],"sourcesContent":[null],"mappings":"AAIA,SACEA,UAAA,EACAC,SAAA,EACAC,SAAA,EACAC,WAAA,EACAC,YAAA,EACAC,YAAA,EACAC,MAAA,EACAC,SAAA,EACAC,WAAA,EACAC,UAAA,EACAC,aAAA,QACK;AACP,SAASC,aAAA,QAAqB;AAC9B,SAASC,OAAA,EAASC,IAAA,EAAMC,QAAA,EAAUC,OAAA,QAAe;AAEjD,SAASC,aAAA,QAAqB;AAC9B,OAAOC,EAAA,MAAQ;AAIf,MAAMC,QAAA,GAAUP,aAAA,CAAcQ,MAAA,CAAAC,IAAA,CAAYC,GAAG;AAC7C,IAAIC,QAAA;AACJ,IAAI;EACFA,QAAA,GAAWV,OAAA,CAAQM,QAAA,CAAQH,OAAA,CAAQ,6BAA6B,CAAC;AACnE,QAAQ;EACNO,QAAA,GAAW;AACb;AAEA,MAAMC,YAAA,GAAe;AAErB,SAASC,oBAAoBC,OAAA,EAA0B;EACrD,IAAI,CAACA,OAAA,CAAQC,UAAA,CAAW,KAAK,GAAG,OAAO;EACvC,MAAMC,QAAA,GAAWF,OAAA,CAAQG,OAAA,CAAQ,OAAO,CAAC;EACzC,IAAID,QAAA,KAAa,IAAI,OAAO;EAC5B,MAAME,WAAA,GAAcJ,OAAA,CAAQK,KAAA,CAAM,GAAGH,QAAQ;EAC7C,OAAOE,WAAA,CAAYE,QAAA,CAAS,OAAO,KAAKF,WAAA,CAAYE,QAAA,CAAS,cAAc;AAC7E;AAEA,SAASC,UAAUP,OAAA,EAA0B;EAC3C,IAAI,CAACA,OAAA,CAAQC,UAAA,CAAW,KAAK,GAAG,OAAO;EACvC,MAAMC,QAAA,GAAWF,OAAA,CAAQG,OAAA,CAAQ,OAAO,CAAC;EACzC,IAAID,QAAA,KAAa,IAAI,OAAO;EAC5B,MAAME,WAAA,GAAcJ,OAAA,CAAQK,KAAA,CAAM,GAAGH,QAAQ;EAC7C,OAAO,kBAAkBM,IAAA,CAAKJ,WAAW;AAC3C;AAEA,SAASK,eAAeT,OAAA,EAAyD;EAC/E,MAAMU,KAAA,GAAQV,OAAA,CAAQW,KAAA,CAAM;AAAA,CAAI;EAChC,IAAIC,KAAA,GAAQ;IACRC,WAAA,GAAc;IAEdC,SAAA,GAAY;EAChB,IAAIJ,KAAA,CAAM,CAAC,GAAGK,IAAA,CAAK,MAAM;IACvB,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIN,KAAA,CAAMO,MAAA,EAAQD,CAAA,IAChC,IAAIN,KAAA,CAAMM,CAAC,GAAGD,IAAA,CAAK,MAAM,OAAO;MAC9BD,SAAA,GAAYE,CAAA,GAAI;MAChB;IACF;EAAA;EAIJ,SAASA,CAAA,GAAIF,SAAA,EAAWE,CAAA,GAAIN,KAAA,CAAMO,MAAA,EAAQD,CAAA,IAAK;IAC7C,MAAME,OAAA,GAAUR,KAAA,CAAMM,CAAC,GAAGD,IAAA,CAAK,KAAK;IACpC,IAAI,CAACH,KAAA,IAASM,OAAA,CAAQjB,UAAA,CAAW,IAAI,GAAG;MACtCW,KAAA,GAAQM,OAAA,CAAQb,KAAA,CAAM,CAAC,EAAEU,IAAA,CAAK;MAC9B;IACF;IACA,IAAIH,KAAA,IAASM,OAAA,IAAW,CAACA,OAAA,CAAQjB,UAAA,CAAW,GAAG,GAAG;MAChDY,WAAA,GAAcK,OAAA;MACd;IACF;EACF;EAEA,OAAO;IAAEN,KAAA;IAAOC;EAAY;AAC9B;AAEA,SAASM,YAAYC,IAAA,EAAsB;EACzC,OAAOA,IAAA,CACJC,WAAA,CAAY,EACZC,OAAA,CAAQ,eAAe,GAAG,EAC1BA,OAAA,CAAQ,OAAO,GAAG,EAClBA,OAAA,CAAQ,UAAU,EAAE,EACpBjB,KAAA,CAAM,GAAG,EAAE;AAChB;AAEA,SAASkB,eACPC,GAAA,EACoE;EACpE,MAAMC,IAAA,GAA2E,EAAC;IAC5EC,IAAA,GAAO,mBAAIC,GAAA,CAAY;IAEvBC,YAAA,GAAexC,IAAA,CAAKoC,GAAA,EAAK,MAAM;EACrC,IAAIjD,UAAA,CAAWqD,YAAY,GAAG;IAC5B,MAAMC,KAAA,GAAQnD,WAAA,CAAYkD,YAAY,EAAEE,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,QAAA,CAAS,KAAK,CAAC;IACvE,WAAWC,IAAA,IAAQJ,KAAA,EAAO;MACxB,MAAMT,IAAA,GAAOa,IAAA,CAAKX,OAAA,CAAQ,SAAS,EAAE;MACrCG,IAAA,CAAKS,IAAA,CAAK;QAAEd,IAAA;QAAMe,IAAA,EAAM/C,IAAA,CAAKwC,YAAA,EAAcK,IAAI;QAAGG,MAAA,EAAQ;MAAQ,CAAC,GACnEV,IAAA,CAAKW,GAAA,CAAIjB,IAAI;IACf;EACF;EAEA,IAAIvB,QAAA,IAAYtB,UAAA,CAAWsB,QAAQ,GAAG;IACpC,MAAMgC,KAAA,GAAQnD,WAAA,CAAYmB,QAAQ,EAAEiC,MAAA,CAAQC,CAAA,IAAMA,CAAA,CAAEC,QAAA,CAAS,KAAK,CAAC;IACnE,WAAWC,IAAA,IAAQJ,KAAA,EAAO;MACxB,MAAMT,IAAA,GAAOa,IAAA,CAAKX,OAAA,CAAQ,SAAS,EAAE;MAChCI,IAAA,CAAKY,GAAA,CAAIlB,IAAI,KAChBK,IAAA,CAAKS,IAAA,CAAK;QAAEd,IAAA;QAAMe,IAAA,EAAM/C,IAAA,CAAKS,QAAA,EAAUoC,IAAI;QAAGG,MAAA,EAAQ;MAAU,CAAC;IAErE;EACF;EAEA,OAAOX,IAAA;AACT;AAEA,eAAec,kBACbf,GAAA,EACAgB,KAAA,EACuF;EACvF,MAAMC,SAAA,GAAYrD,IAAA,CAAKoC,GAAA,EAAK,WAAW,QAAQ;IACzCC,IAAA,GAAOF,cAAA,CAAeC,GAAG;IACzBI,YAAA,GAAexC,IAAA,CAAKoC,GAAA,EAAK,MAAM;IAC/BkB,kBAAA,GAAqB,mBAAIf,GAAA,CAAY;EAQ3C,IANIF,IAAA,CAAKR,MAAA,KAAW,IAClB0B,OAAA,CAAQC,IAAA,CAAKpD,EAAA,CAAGqD,MAAA,CAAO,8BAA8B,CAAC,IAEtDF,OAAA,CAAQC,IAAA,CAAKpD,EAAA,CAAGsD,GAAA,CAAI,SAASrB,IAAA,CAAKR,MAAM,sBAAsB,CAAC,GAG7DuB,KAAA,IAASjE,UAAA,CAAWkE,SAAS,GAAG;IAClC,MAAMM,QAAA,GAAWrE,WAAA,CAAY+D,SAAS;IACtC,WAAWO,GAAA,IAAOD,QAAA,EACZC,GAAA,CAAI/C,UAAA,CAAWH,YAAY,KAC7BjB,MAAA,CAAOO,IAAA,CAAKqD,SAAA,EAAWO,GAAG,GAAG;MAAEC,SAAA,EAAW;IAAK,CAAC;EAGtD;EAEK1E,UAAA,CAAWkE,SAAS,KACvBhE,SAAA,CAAUgE,SAAA,EAAW;IAAEQ,SAAA,EAAW;EAAK,CAAC;EAG1C,IAAIC,SAAA,GAAY;IACZC,SAAA,GAAY;IACZC,SAAA,GAAY;IACZC,OAAA,GAAU;EACd,MAAMC,KAAA,GAAQ,CAAC,CAACC,OAAA,CAAQC,GAAA,CAAIC,cAAA;EAE5B,WAAWC,GAAA,IAAOjC,IAAA,EAAM;IACtB,MAAMzB,OAAA,GAAUrB,YAAA,CAAa+E,GAAA,CAAIvB,IAAA,EAAM,OAAO;IAC9C,IAAI5B,SAAA,CAAUP,OAAO,KAAK,CAACsD,KAAA,EAAO;IAIlC,IAFuBvD,mBAAA,CAAoBC,OAAO,GAE9B;MAClB,MAAM2D,SAAA,GAAY3D,OAAA,CAAQ4D,KAAA,CAAM,4BAA4B;MAC5D,IAAI,CAACD,SAAA,EAAW;MAEhB,MAAME,SAAA,GAAYF,SAAA,CAAU,CAAC,EAAG5C,IAAA,CAAK;MACrC2B,kBAAA,CAAmBL,GAAA,CAAIwB,SAAS;MAChC,MAAMC,QAAA,GAAW1E,IAAA,CAAKqD,SAAA,EAAWoB,SAAS;QACpCE,SAAA,GAAY3E,IAAA,CAAK0E,QAAA,EAAU,UAAU;MAEtCvF,UAAA,CAAWuF,QAAQ,KACtBrF,SAAA,CAAUqF,QAAA,EAAU;QAAEb,SAAA,EAAW;MAAK,CAAC;MAGzC,MAAMe,YAAA,GAAe3E,QAAA,CAASyE,QAAA,EAAUJ,GAAA,CAAIvB,IAAI;MAEhD,IAAI8B,YAAA,GAAe;MACnB,IAAI;QACWzF,SAAA,CAAUuF,SAAS,EACvBG,cAAA,CAAe,KAAK3F,UAAA,CAAWwF,SAAS,KACvBpF,YAAA,CAAaoF,SAAA,EAAW,OAAO,MAC/B/D,OAAA,KACtBoD,SAAA,IACAa,YAAA,GAAe,KAGfA,YAAA,IACFjF,UAAA,CAAW+E,SAAS;MAExB,QAAQ,CAER;MAEA,IAAI,CAACE,YAAA,EAAc;MAEnBlF,WAAA,CAAYiF,YAAA,EAAcD,SAAS,GACnCb,SAAA;MAEA,MAAMiB,WAAA,GAAcT,GAAA,CAAItB,MAAA,KAAW,UAAU5C,EAAA,CAAG4E,IAAA,CAAK,OAAO,IAAI5E,EAAA,CAAGsD,GAAA,CAAI,SAAS;MAChFH,OAAA,CAAQC,IAAA,CACN,KAAKpD,EAAA,CAAG6E,KAAA,CAAM,QAAG,CAAC,IAAIR,SAAS,IAAIM,WAAW,IAAI3E,EAAA,CAAGsD,GAAA,CAAI,WAAW,CAAC,EACvE;IACF,OAAO;MACL,MAAMwB,QAAA,GAAWnD,WAAA,CAAYuC,GAAA,CAAItC,IAAI;QAC/ByC,SAAA,GAAY,GAAG/D,YAAY,GAAGwE,QAAQ;MAC5C5B,kBAAA,CAAmBL,GAAA,CAAIwB,SAAS;MAChC,MAAMC,QAAA,GAAW1E,IAAA,CAAKqD,SAAA,EAAWoB,SAAS;QACpCE,SAAA,GAAY3E,IAAA,CAAK0E,QAAA,EAAU,UAAU;MAEtCvF,UAAA,CAAWuF,QAAQ,KACtBrF,SAAA,CAAUqF,QAAA,EAAU;QAAEb,SAAA,EAAW;MAAK,CAAC;MAGzC,MAAM;UAAErC,KAAA;UAAOC;QAAY,IAAIJ,cAAA,CAAeT,OAAO;QAC/CuE,gBAAA,GAAmB1D,WAAA,GACrB,GAAGD,KAAK,KAAKC,WAAW,GAAGR,KAAA,CAAM,GAAG,IAAI,IACxCO,KAAA,CAAMP,KAAA,CAAM,GAAG,IAAI;QAEjBmE,YAAA,GAAe;AAAA,QACnBX,SAAS;AAAA,eACFU,gBAAgB;AAAA;AAAA;AAAA,EAG7BvE,OAAO;AAAA;MAGH,IAAIyE,WAAA,GAAc;MAClB,IAAI;QACWjG,SAAA,CAAUuF,SAAS,EACvBG,cAAA,CAAe,IACtBlF,UAAA,CAAW+E,SAAS,IAEHpF,YAAA,CAAaoF,SAAA,EAAW,OAAO,MAC/BS,YAAA,KACfpB,SAAA,IACAqB,WAAA,GAAc;MAGpB,QAAQ,CAER;MAEA,IAAI,CAACA,WAAA,EAAa;MAElBxF,aAAA,CAAc8E,SAAA,EAAWS,YAAY,GACrCrB,SAAA;MAEA,MAAMgB,WAAA,GAAcT,GAAA,CAAItB,MAAA,KAAW,UAAU5C,EAAA,CAAG4E,IAAA,CAAK,OAAO,IAAI5E,EAAA,CAAGsD,GAAA,CAAI,SAAS;MAChFH,OAAA,CAAQC,IAAA,CACN,KAAKpD,EAAA,CAAG6E,KAAA,CAAM,QAAG,CAAC,IAAIR,SAAS,IAAIM,WAAW,IAAI3E,EAAA,CAAGsD,GAAA,CAAI,aAAa,CAAC,EACzE;IACF;EACF;EAEA,WAAWE,GAAA,IAAOtE,WAAA,CAAY+D,SAAS,GAAG;IACxC,IAAIC,kBAAA,CAAmBJ,GAAA,CAAIU,GAAG,GAAG;IAEjC,MAAMc,QAAA,GAAW1E,IAAA,CAAKqD,SAAA,EAAWO,GAAG;MAC9Be,SAAA,GAAY3E,IAAA,CAAK0E,QAAA,EAAU,UAAU;IAC3C,IAAIY,YAAA,GAAe;IAEnB,IAAI;MAEF,IADalG,SAAA,CAAUuF,SAAS,EACvBG,cAAA,CAAe,GAAG;QACzB,MAAMS,UAAA,GAAa/F,YAAA,CAAamF,SAAS;UACnCa,cAAA,GAAiBtF,OAAA,CAAQwE,QAAA,EAAUa,UAAU;QACnDD,YAAA,GACEE,cAAA,CAAe3E,UAAA,CAAW,GAAG2B,YAAY,GAAG,KAC3C,CAAC,CAAC/B,QAAA,IAAY+E,cAAA,CAAe3E,UAAA,CAAW,GAAGJ,QAAQ,GAAG;MAC3D;IACF,QAAQ,CAER;IAEK6E,YAAA,KAEL1F,UAAA,CAAW+E,SAAS,GAChBrF,WAAA,CAAYoF,QAAQ,EAAE7C,MAAA,KAAW,KACnCnC,SAAA,CAAUgF,QAAQ,GAEpBT,OAAA,IACAV,OAAA,CAAQC,IAAA,CAAK,KAAKpD,EAAA,CAAGqF,GAAA,CAAI,QAAG,CAAC,IAAI7B,GAAG,IAAIxD,EAAA,CAAGsD,GAAA,CAAI,yBAAyB,CAAC,EAAE;EAC7E;EAEA,OAAO;IAAEI,SAAA;IAAWC,SAAA;IAAWC,SAAA;IAAWC;EAAQ;AACpD;AAIA,MAAMyB,eAAA,GAAkBvF,aAAA,CAAc;IACpCI,IAAA,EAAM;MACJyB,IAAA,EAAM;MACNP,WAAA,EAAa;IACf;IACAkE,IAAA,EAAM;MACJvC,KAAA,EAAO;QACLwC,IAAA,EAAM;QACNnE,WAAA,EAAa;QACboE,OAAA,EAAS;MACX;MACA,sBAAsB;QACpBD,IAAA,EAAM;QACNnE,WAAA,EAAa;QACboE,OAAA,EAAS;MACX;IACF;IACA,MAAMC,IAAI;MAAEH;IAAK,GAAG;MAClB,MAAMvD,GAAA,GAAM+B,OAAA,CAAQ/B,GAAA,CAAI;QAClBiB,SAAA,GAAYrD,IAAA,CAAKoC,GAAA,EAAK,WAAW,QAAQ;MAE/CmB,OAAA,CAAQC,IAAA,CAAK,GACbD,OAAA,CAAQC,IAAA,CAAKpD,EAAA,CAAG2F,IAAA,CAAK3F,EAAA,CAAG4F,IAAA,CAAK,qBAAqB,CAAC,CAAC,GACpDzC,OAAA,CAAQC,IAAA,CAAK;MAEb,IAAIM,SAAA,GAAY;QACZC,SAAA,GAAY;QACZC,SAAA,GAAY;QACZC,OAAA,GAAU;MAGd,IAAI,CAAC0B,IAAA,CAAK,oBAAoB,GAAG;QAC/B,MAAMM,QAAA,GAAW,MAAM9C,iBAAA,CAAkBf,GAAA,EAAKuD,IAAA,CAAKvC,KAAK;QACxDU,SAAA,GAAYmC,QAAA,CAASnC,SAAA,EACrBC,SAAA,GAAYkC,QAAA,CAASlC,SAAA,EACrBC,SAAA,GAAYiC,QAAA,CAASjC,SAAA,EACrBC,OAAA,GAAUgC,QAAA,CAAShC,OAAA,EACnBV,OAAA,CAAQC,IAAA,CAAK;MACf;MAGAD,OAAA,CAAQC,IAAA,CAAK,GACbD,OAAA,CAAQC,IAAA,CAAKpD,EAAA,CAAG2F,IAAA,CAAK,UAAU,CAAC,GAC5BjC,SAAA,GAAY,KAAGP,OAAA,CAAQC,IAAA,CAAK,KAAKpD,EAAA,CAAG6E,KAAA,CAAM,GAAGnB,SAAS,YAAY,CAAC,EAAE,GACrEC,SAAA,GAAY,KACdR,OAAA,CAAQC,IAAA,CACN,KAAKpD,EAAA,CAAGqD,MAAA,CAAO,GAAGM,SAAS,YAAY,CAAC,IAAI3D,EAAA,CAAGsD,GAAA,CAAI,qCAAqC,CAAC,EAC3F,GACEM,SAAA,GAAY,KAAGT,OAAA,CAAQC,IAAA,CAAK,KAAKpD,EAAA,CAAGsD,GAAA,CAAI,GAAGM,SAAS,YAAY,CAAC,EAAE,GACnEC,OAAA,GAAU,KAAGV,OAAA,CAAQC,IAAA,CAAK,KAAKpD,EAAA,CAAGqF,GAAA,CAAI,GAAGxB,OAAO,UAAU,CAAC,EAAE,GACjEV,OAAA,CAAQC,IAAA,CAAKpD,EAAA,CAAGsD,GAAA,CAAI,eAAeL,SAAS,EAAE,CAAC,GAC/CE,OAAA,CAAQC,IAAA,CAAK;IACf;EACF,CAAC;EAEY0C,aAAA,GAAgB/F,aAAA,CAAc;IACzCI,IAAA,EAAM;MACJyB,IAAA,EAAM;MACNP,WAAA,EAAa;IACf;IACA0E,WAAA,EAAa;MACXC,QAAA,EAAUV;IACZ;EACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["existsSync","lstatSync","mkdirSync","readdirSync","readFileSync","readlinkSync","rmSync","rmdirSync","symlinkSync","unlinkSync","createRequire","dirname","join","relative","resolve","defineCommand","pc","require2","import","meta","url","DOCS_DIR","SKILL_PREFIX","hasSkillFrontmatter","content","startsWith","endIndex","indexOf","frontmatter","slice","includes","isDevOnly","test","collectAllDocs","cwd","docs","seen","Set","localDocsDir","files","filter","f","endsWith","file","name","replace","push","path","source","add","has","generateDocSkills","clean","skillsDir","expectedSkillNames","length","console","info","yellow","dim","existing","dir","recursive","symlinked","generated","unchanged","removed","skipped","isDev","process","env","IS_TAMAGUI_DEV","doc","hasFrontmatter","nameMatch","match","skillName","trim","skillDir","skillFile","relativePath","shouldCreate","isSymbolicLink","sourceLabel","blue","green","force","red","shouldUnlink","linkTarget","resolvedTarget","generateCommand","description","args","type","default","run","bold","cyan","docStats","skillsCommand","subCommands","generate"],"sources":["../../../src/commands/skills.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@take-out/cli",
3
- "version": "0.1.46",
3
+ "version": "0.1.47",
4
4
  "description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -51,9 +51,9 @@
51
51
  },
52
52
  "dependencies": {
53
53
  "@clack/prompts": "^0.8.2",
54
- "@take-out/docs": "0.1.46",
55
- "@take-out/run": "0.1.46",
56
- "@take-out/scripts": "0.1.46",
54
+ "@take-out/docs": "0.1.47",
55
+ "@take-out/run": "0.1.47",
56
+ "@take-out/scripts": "0.1.47",
57
57
  "citty": "^0.1.6",
58
58
  "picocolors": "^1.1.1"
59
59
  },
@@ -49,36 +49,6 @@ function isDevOnly(content: string): boolean {
49
49
  return /\bdev:\s*true\b/.test(frontmatter)
50
50
  }
51
51
 
52
- function extractDocMeta(content: string): { title: string; description: string } {
53
- const lines = content.split('\n')
54
- let title = ''
55
- let description = ''
56
-
57
- let startLine = 0
58
- if (lines[0]?.trim() === '---') {
59
- for (let i = 1; i < lines.length; i++) {
60
- if (lines[i]?.trim() === '---') {
61
- startLine = i + 1
62
- break
63
- }
64
- }
65
- }
66
-
67
- for (let i = startLine; i < lines.length; i++) {
68
- const trimmed = lines[i]?.trim() || ''
69
- if (!title && trimmed.startsWith('# ')) {
70
- title = trimmed.slice(2).trim()
71
- continue
72
- }
73
- if (title && trimmed && !trimmed.startsWith('#')) {
74
- description = trimmed
75
- break
76
- }
77
- }
78
-
79
- return { title, description }
80
- }
81
-
82
52
  function toSkillName(name: string): string {
83
53
  return name
84
54
  .toLowerCase()
@@ -120,7 +90,13 @@ function collectAllDocs(
120
90
  async function generateDocSkills(
121
91
  cwd: string,
122
92
  clean: boolean
123
- ): Promise<{ symlinked: number; generated: number; unchanged: number; removed: number }> {
93
+ ): Promise<{
94
+ symlinked: number
95
+ generated: number
96
+ unchanged: number
97
+ removed: number
98
+ skipped: number
99
+ }> {
124
100
  const skillsDir = join(cwd, '.claude', 'skills')
125
101
  const docs = collectAllDocs(cwd)
126
102
  const localDocsDir = join(cwd, 'docs')
@@ -149,6 +125,7 @@ async function generateDocSkills(
149
125
  let generated = 0
150
126
  let unchanged = 0
151
127
  let removed = 0
128
+ let skipped = 0
152
129
  const isDev = !!process.env.IS_TAMAGUI_DEV
153
130
 
154
131
  for (const doc of docs) {
@@ -199,54 +176,13 @@ async function generateDocSkills(
199
176
  ` ${pc.green('⟷')} ${skillName} ${sourceLabel} ${pc.dim('(symlink)')}`
200
177
  )
201
178
  } else {
202
- const baseName = toSkillName(doc.name)
203
- const skillName = `${SKILL_PREFIX}${baseName}`
204
- expectedSkillNames.add(skillName)
205
- const skillDir = join(skillsDir, skillName)
206
- const skillFile = join(skillDir, 'SKILL.md')
207
-
208
- if (!existsSync(skillDir)) {
209
- mkdirSync(skillDir, { recursive: true })
210
- }
211
-
212
- const { title, description } = extractDocMeta(content)
213
- const skillDescription = description
214
- ? `${title}. ${description}`.slice(0, 1024)
215
- : title.slice(0, 1024)
216
-
217
- const skillContent = `---
218
- name: ${skillName}
219
- description: ${skillDescription}
220
- ---
221
-
222
- ${content}
223
- `
224
-
225
- let shouldWrite = true
226
- try {
227
- const stat = lstatSync(skillFile)
228
- if (stat.isSymbolicLink()) {
229
- unlinkSync(skillFile)
230
- } else {
231
- const existing = readFileSync(skillFile, 'utf-8')
232
- if (existing === skillContent) {
233
- unchanged++
234
- shouldWrite = false
235
- }
236
- }
237
- } catch {
238
- // nothing exists
179
+ if (!hasFrontmatter) {
180
+ skipped++
181
+ console.info(
182
+ ` ${pc.yellow('!')} skipped ${pc.dim(doc.name)} ${pc.dim('(missing skill frontmatter)')}`
183
+ )
184
+ continue
239
185
  }
240
-
241
- if (!shouldWrite) continue
242
-
243
- writeFileSync(skillFile, skillContent)
244
- generated++
245
-
246
- const sourceLabel = doc.source === 'local' ? pc.blue('local') : pc.dim('package')
247
- console.info(
248
- ` ${pc.green('✓')} ${skillName} ${sourceLabel} ${pc.dim('(generated)')}`
249
- )
250
186
  }
251
187
  }
252
188
 
@@ -255,6 +191,14 @@ ${content}
255
191
 
256
192
  const skillDir = join(skillsDir, dir)
257
193
  const skillFile = join(skillDir, 'SKILL.md')
194
+
195
+ if (dir.startsWith(SKILL_PREFIX)) {
196
+ rmSync(skillDir, { recursive: true, force: true })
197
+ removed++
198
+ console.info(` ${pc.red('✕')} ${dir} ${pc.dim('(removed stale generated skill)')}`)
199
+ continue
200
+ }
201
+
258
202
  let shouldUnlink = false
259
203
 
260
204
  try {
@@ -280,7 +224,7 @@ ${content}
280
224
  console.info(` ${pc.red('✕')} ${dir} ${pc.dim('(removed stale symlink)')}`)
281
225
  }
282
226
 
283
- return { symlinked, generated, unchanged, removed }
227
+ return { symlinked, generated, unchanged, removed, skipped }
284
228
  }
285
229
 
286
230
  // --- commands ---
@@ -314,6 +258,7 @@ const generateCommand = defineCommand({
314
258
  let generated = 0
315
259
  let unchanged = 0
316
260
  let removed = 0
261
+ let skipped = 0
317
262
 
318
263
  // 1. doc skills (unless skipped)
319
264
  if (!args['skip-internal-docs']) {
@@ -322,6 +267,7 @@ const generateCommand = defineCommand({
322
267
  generated = docStats.generated
323
268
  unchanged = docStats.unchanged
324
269
  removed = docStats.removed
270
+ skipped = docStats.skipped
325
271
  console.info()
326
272
  }
327
273
 
@@ -333,6 +279,10 @@ const generateCommand = defineCommand({
333
279
  console.info(
334
280
  ` ${pc.yellow(`${generated} generated`)} ${pc.dim('(add frontmatter to enable symlink)')}`
335
281
  )
282
+ if (skipped > 0)
283
+ console.info(
284
+ ` ${pc.yellow(`${skipped} skipped`)} ${pc.dim('(missing skill frontmatter)')}`
285
+ )
336
286
  if (unchanged > 0) console.info(` ${pc.dim(`${unchanged} unchanged`)}`)
337
287
  if (removed > 0) console.info(` ${pc.red(`${removed} removed`)}`)
338
288
  console.info(pc.dim(` skills in ${skillsDir}`))
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoVH,eAAO,MAAM,aAAa,qDAQxB,CAAA"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkSH,eAAO,MAAM,aAAa,qDAQxB,CAAA"}