@take-out/cli 0.1.12 → 0.1.14

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 (38) hide show
  1. package/README.md +5 -5
  2. package/dist/cjs/cli.cjs +2 -1
  3. package/dist/cjs/cli.js +2 -0
  4. package/dist/cjs/cli.js.map +1 -1
  5. package/dist/cjs/commands/docs.cjs +1 -167
  6. package/dist/cjs/commands/docs.js +1 -138
  7. package/dist/cjs/commands/docs.js.map +1 -1
  8. package/dist/cjs/commands/skills.cjs +355 -0
  9. package/dist/cjs/commands/skills.js +277 -0
  10. package/dist/cjs/commands/skills.js.map +6 -0
  11. package/dist/cjs/utils/script-listing.cjs +1 -1
  12. package/dist/cjs/utils/script-listing.js +1 -1
  13. package/dist/cjs/utils/script-listing.js.map +1 -1
  14. package/dist/esm/cli.js +2 -0
  15. package/dist/esm/cli.js.map +1 -1
  16. package/dist/esm/cli.mjs +2 -1
  17. package/dist/esm/cli.mjs.map +1 -1
  18. package/dist/esm/commands/docs.js +3 -150
  19. package/dist/esm/commands/docs.js.map +1 -1
  20. package/dist/esm/commands/docs.mjs +3 -169
  21. package/dist/esm/commands/docs.mjs.map +1 -1
  22. package/dist/esm/commands/skills.js +273 -0
  23. package/dist/esm/commands/skills.js.map +6 -0
  24. package/dist/esm/commands/skills.mjs +320 -0
  25. package/dist/esm/commands/skills.mjs.map +1 -0
  26. package/dist/esm/utils/script-listing.js +1 -1
  27. package/dist/esm/utils/script-listing.js.map +1 -1
  28. package/dist/esm/utils/script-listing.mjs +1 -1
  29. package/dist/esm/utils/script-listing.mjs.map +1 -1
  30. package/package.json +4 -4
  31. package/src/cli.ts +2 -0
  32. package/src/commands/docs.ts +2 -288
  33. package/src/commands/skills.ts +528 -0
  34. package/src/utils/script-listing.ts +1 -0
  35. package/types/commands/docs.d.ts.map +1 -1
  36. package/types/commands/skills.d.ts +5 -0
  37. package/types/commands/skills.d.ts.map +1 -0
  38. package/types/utils/script-listing.d.ts.map +1 -1
@@ -0,0 +1,273 @@
1
+ import {
2
+ existsSync,
3
+ lstatSync,
4
+ mkdirSync,
5
+ readdirSync,
6
+ readFileSync,
7
+ rmSync,
8
+ symlinkSync,
9
+ unlinkSync,
10
+ writeFileSync
11
+ } from "node:fs";
12
+ import { createRequire } from "node:module";
13
+ import { dirname, join, relative } from "node:path";
14
+ import { fileURLToPath } from "node:url";
15
+ import { defineCommand } from "citty";
16
+ import pc from "picocolors";
17
+ import {
18
+ discoverScripts,
19
+ getAllScriptMetadata,
20
+ getLocalScriptsDir
21
+ } from "../utils/script-utils";
22
+ const BUILTIN_COMMANDS = [
23
+ { name: "onboard", description: "setup wizard for new projects" },
24
+ { name: "docs", description: "view documentation" },
25
+ { name: "env:setup", description: "setup environment variables" },
26
+ { name: "run", description: "run scripts in parallel" },
27
+ { name: "script", description: "manage and run scripts" },
28
+ { name: "sync", description: "sync fork with upstream takeout" },
29
+ { name: "changed", description: "show changes since last sync" },
30
+ { name: "skills", description: "manage claude code skills" },
31
+ { name: "completion", description: "shell completion setup" }
32
+ ];
33
+ function findScriptsPackageRoot() {
34
+ try {
35
+ const resolved = import.meta.resolve("@take-out/scripts/package.json"), packageJsonPath = fileURLToPath(new URL(resolved));
36
+ return join(packageJsonPath, "..", "src");
37
+ } catch {
38
+ return null;
39
+ }
40
+ }
41
+ function buildSummaryDescription(localScripts, builtInScripts) {
42
+ const categories = /* @__PURE__ */ new Set(), keywords = /* @__PURE__ */ new Set();
43
+ for (const [name] of [...localScripts, ...builtInScripts])
44
+ keywords.add(name), name.includes("/") && categories.add(name.split("/")[0]);
45
+ for (const cmd of BUILTIN_COMMANDS)
46
+ keywords.add(cmd.name);
47
+ return `CLI scripts and commands reference for the tko (takeout) CLI. Use when the user asks to run scripts, manage the project, or needs to know what commands are available. tko, takeout, CLI, scripts, commands, bun tko, project tasks, automation, ${[...categories].sort().join(", ")}, ${[...keywords].sort().join(", ")}`.slice(0, 2048);
48
+ }
49
+ function buildSummaryContent(localScripts, builtInScripts, metadata) {
50
+ const description = buildSummaryDescription(localScripts, builtInScripts), lines = [];
51
+ lines.push("---"), lines.push("name: tko-scripts"), lines.push(`description: ${description}`), lines.push("---"), lines.push(""), lines.push("# tko CLI - scripts & commands"), lines.push(""), lines.push("run with `bun tko <command>` or `bun tko <script-name>`."), lines.push(""), lines.push("## built-in commands"), lines.push("");
52
+ for (const cmd of BUILTIN_COMMANDS)
53
+ lines.push(` ${cmd.name} - ${cmd.description}`);
54
+ lines.push("");
55
+ const formatSection = (title, scripts) => {
56
+ if (scripts.size === 0) return;
57
+ const categories = /* @__PURE__ */ new Map(), rootScripts = [];
58
+ for (const [name] of scripts)
59
+ if (name.includes("/")) {
60
+ const category = name.split("/")[0];
61
+ categories.has(category) || categories.set(category, []), categories.get(category).push(name);
62
+ } else
63
+ rootScripts.push(name);
64
+ lines.push(`## ${title}`), lines.push("");
65
+ for (const name of rootScripts) {
66
+ const meta = metadata.get(name), desc = meta?.description ? ` - ${meta.description}` : "", args = meta?.args?.length ? ` [${meta.args.join(", ")}]` : "";
67
+ lines.push(` ${name}${desc}${args}`);
68
+ }
69
+ for (const [category, categoryScripts] of categories) {
70
+ lines.push(""), lines.push(` ${category}/`);
71
+ for (const name of categoryScripts) {
72
+ const shortName = name.substring(category.length + 1), meta = metadata.get(name), desc = meta?.description ? ` - ${meta.description}` : "", args = meta?.args?.length ? ` [${meta.args.join(", ")}]` : "";
73
+ lines.push(` ${shortName}${desc}${args}`);
74
+ }
75
+ }
76
+ lines.push("");
77
+ };
78
+ return formatSection("local scripts", localScripts), formatSection("built-in scripts", builtInScripts), lines.push("## usage"), lines.push(""), lines.push("```bash"), lines.push("bun tko <command> # run a built-in command"), lines.push("bun tko <script-name> # execute direct script"), lines.push(
79
+ "bun tko <group> <script> # execute nested script (e.g. bun tko aws health)"
80
+ ), lines.push("bun tko run s1 s2 s3 # run multiple scripts in parallel"), lines.push("bun tko script new <path> # create a new script"), lines.push("```"), lines.push(""), lines.join(`
81
+ `);
82
+ }
83
+ async function generateSummary(cwd) {
84
+ const skillsDir = join(cwd, ".claude", "skills"), skillDir = join(skillsDir, "tko-scripts"), skillFile = join(skillDir, "SKILL.md"), localScripts = discoverScripts(getLocalScriptsDir()), builtInDir = findScriptsPackageRoot(), builtInScripts = builtInDir ? discoverScripts(builtInDir) : /* @__PURE__ */ new Map(), allScripts = new Map([...localScripts, ...builtInScripts]), metadata = await getAllScriptMetadata(allScripts), totalScripts = localScripts.size + builtInScripts.size;
85
+ console.info(
86
+ pc.dim(
87
+ `found ${totalScripts} scripts (${localScripts.size} local, ${builtInScripts.size} built-in) + ${BUILTIN_COMMANDS.length} commands`
88
+ )
89
+ );
90
+ const content = buildSummaryContent(localScripts, builtInScripts, metadata);
91
+ try {
92
+ if (readFileSync(skillFile, "utf-8") === content)
93
+ return console.info(` ${pc.dim("tko-scripts")} ${pc.dim("unchanged")}`), !1;
94
+ } catch {
95
+ }
96
+ return existsSync(skillDir) || mkdirSync(skillDir, { recursive: !0 }), writeFileSync(skillFile, content), console.info(` ${pc.green("\u2713")} tko-scripts`), !0;
97
+ }
98
+ const require2 = createRequire(import.meta.url);
99
+ let DOCS_DIR;
100
+ try {
101
+ DOCS_DIR = dirname(require2.resolve("@take-out/docs/package.json"));
102
+ } catch {
103
+ DOCS_DIR = "";
104
+ }
105
+ const SKILL_PREFIX = "takeout-";
106
+ function hasSkillFrontmatter(content) {
107
+ if (!content.startsWith("---")) return !1;
108
+ const endIndex = content.indexOf("---", 3);
109
+ if (endIndex === -1) return !1;
110
+ const frontmatter = content.slice(3, endIndex);
111
+ return frontmatter.includes("name:") && frontmatter.includes("description:");
112
+ }
113
+ function isDevOnly(content) {
114
+ if (!content.startsWith("---")) return !1;
115
+ const endIndex = content.indexOf("---", 3);
116
+ if (endIndex === -1) return !1;
117
+ const frontmatter = content.slice(3, endIndex);
118
+ return /\bdev:\s*true\b/.test(frontmatter);
119
+ }
120
+ function extractDocMeta(content) {
121
+ const lines = content.split(`
122
+ `);
123
+ let title = "", description = "", startLine = 0;
124
+ if (lines[0]?.trim() === "---") {
125
+ for (let i = 1; i < lines.length; i++)
126
+ if (lines[i]?.trim() === "---") {
127
+ startLine = i + 1;
128
+ break;
129
+ }
130
+ }
131
+ for (let i = startLine; i < lines.length; i++) {
132
+ const trimmed = lines[i]?.trim() || "";
133
+ if (!title && trimmed.startsWith("# ")) {
134
+ title = trimmed.slice(2).trim();
135
+ continue;
136
+ }
137
+ if (title && trimmed && !trimmed.startsWith("#")) {
138
+ description = trimmed;
139
+ break;
140
+ }
141
+ }
142
+ return { title, description };
143
+ }
144
+ function toSkillName(name) {
145
+ return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
146
+ }
147
+ function collectAllDocs(cwd) {
148
+ const docs = [], seen = /* @__PURE__ */ new Set(), localDocsDir = join(cwd, "docs");
149
+ if (existsSync(localDocsDir)) {
150
+ const files = readdirSync(localDocsDir).filter((f) => f.endsWith(".md"));
151
+ for (const file of files) {
152
+ const name = file.replace(/\.md$/, "");
153
+ docs.push({ name, path: join(localDocsDir, file), source: "local" }), seen.add(name);
154
+ }
155
+ }
156
+ if (DOCS_DIR && existsSync(DOCS_DIR)) {
157
+ const files = readdirSync(DOCS_DIR).filter((f) => f.endsWith(".md"));
158
+ for (const file of files) {
159
+ const name = file.replace(/\.md$/, "");
160
+ seen.has(name) || docs.push({ name, path: join(DOCS_DIR, file), source: "package" });
161
+ }
162
+ }
163
+ return docs;
164
+ }
165
+ async function generateDocSkills(cwd, clean) {
166
+ const skillsDir = join(cwd, ".claude", "skills"), docs = collectAllDocs(cwd);
167
+ if (docs.length === 0)
168
+ return console.info(pc.yellow("no documentation files found")), { symlinked: 0, generated: 0, unchanged: 0 };
169
+ if (console.info(pc.dim(`found ${docs.length} documentation files`)), clean && existsSync(skillsDir)) {
170
+ const existing = readdirSync(skillsDir);
171
+ for (const dir of existing)
172
+ dir.startsWith(SKILL_PREFIX) && rmSync(join(skillsDir, dir), { recursive: !0 });
173
+ }
174
+ existsSync(skillsDir) || mkdirSync(skillsDir, { recursive: !0 });
175
+ let symlinked = 0, generated = 0, unchanged = 0;
176
+ const isDev = !!process.env.IS_TAMAGUI_DEV;
177
+ for (const doc of docs) {
178
+ const content = readFileSync(doc.path, "utf-8");
179
+ if (isDevOnly(content) && !isDev) continue;
180
+ if (hasSkillFrontmatter(content)) {
181
+ const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
182
+ if (!nameMatch) continue;
183
+ const skillName = nameMatch[1].trim(), skillDir = join(skillsDir, skillName), skillFile = join(skillDir, "SKILL.md");
184
+ existsSync(skillDir) || mkdirSync(skillDir, { recursive: !0 });
185
+ const relativePath = relative(skillDir, doc.path);
186
+ let shouldCreate = !0;
187
+ try {
188
+ lstatSync(skillFile).isSymbolicLink() && existsSync(skillFile) && readFileSync(skillFile, "utf-8") === content && (unchanged++, shouldCreate = !1), shouldCreate && unlinkSync(skillFile);
189
+ } catch {
190
+ }
191
+ if (!shouldCreate) continue;
192
+ symlinkSync(relativePath, skillFile), symlinked++;
193
+ const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
194
+ console.info(
195
+ ` ${pc.green("\u27F7")} ${skillName} ${sourceLabel} ${pc.dim("(symlink)")}`
196
+ );
197
+ } else {
198
+ const baseName = toSkillName(doc.name), skillName = `${SKILL_PREFIX}${baseName}`, skillDir = join(skillsDir, skillName), skillFile = join(skillDir, "SKILL.md");
199
+ existsSync(skillDir) || mkdirSync(skillDir, { recursive: !0 });
200
+ const { title, description } = extractDocMeta(content), skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024), skillContent = `---
201
+ name: ${skillName}
202
+ description: ${skillDescription}
203
+ ---
204
+
205
+ ${content}
206
+ `;
207
+ let shouldWrite = !0;
208
+ try {
209
+ lstatSync(skillFile).isSymbolicLink() ? unlinkSync(skillFile) : readFileSync(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
210
+ } catch {
211
+ }
212
+ if (!shouldWrite) continue;
213
+ writeFileSync(skillFile, skillContent), generated++;
214
+ const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
215
+ console.info(
216
+ ` ${pc.green("\u2713")} ${skillName} ${sourceLabel} ${pc.dim("(generated)")}`
217
+ );
218
+ }
219
+ }
220
+ return { symlinked, generated, unchanged };
221
+ }
222
+ const scriptsCommand = defineCommand({
223
+ meta: {
224
+ name: "scripts",
225
+ description: "Generate a skill summarizing all tko scripts and commands"
226
+ },
227
+ async run() {
228
+ const cwd = process.cwd();
229
+ console.info(), console.info(pc.bold(pc.cyan("Generate scripts skill"))), console.info(), await generateSummary(cwd), console.info();
230
+ }
231
+ }), generateCommand = defineCommand({
232
+ meta: {
233
+ name: "generate",
234
+ description: "Generate all Claude Code skills (doc skills + summary)"
235
+ },
236
+ args: {
237
+ clean: {
238
+ type: "boolean",
239
+ description: "Remove existing takeout-* skills before generating",
240
+ default: !1
241
+ },
242
+ "skip-internal-docs": {
243
+ type: "boolean",
244
+ description: "Skip generating skills from internal documentation files",
245
+ default: !1
246
+ }
247
+ },
248
+ async run({ args }) {
249
+ const cwd = process.cwd(), skillsDir = join(cwd, ".claude", "skills");
250
+ console.info(), console.info(pc.bold(pc.cyan("Generate all skills"))), console.info();
251
+ let symlinked = 0, generated = 0, unchanged = 0;
252
+ if (!args["skip-internal-docs"]) {
253
+ const docStats = await generateDocSkills(cwd, args.clean);
254
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, console.info();
255
+ }
256
+ await generateSummary(cwd), console.info(), console.info(pc.bold("summary:")), symlinked > 0 && console.info(` ${pc.green(`${symlinked} symlinked`)}`), generated > 0 && console.info(
257
+ ` ${pc.yellow(`${generated} generated`)} ${pc.dim("(add frontmatter to enable symlink)")}`
258
+ ), unchanged > 0 && console.info(` ${pc.dim(`${unchanged} unchanged`)}`), console.info(pc.dim(` skills in ${skillsDir}`)), console.info();
259
+ }
260
+ }), skillsCommand = defineCommand({
261
+ meta: {
262
+ name: "skills",
263
+ description: "Manage Claude Code skills"
264
+ },
265
+ subCommands: {
266
+ generate: generateCommand,
267
+ scripts: scriptsCommand
268
+ }
269
+ });
270
+ export {
271
+ skillsCommand
272
+ };
273
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/commands/skills.ts"],
4
+ "mappings": "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",
5
+ "names": ["require"]
6
+ }
@@ -0,0 +1,320 @@
1
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join, relative } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { defineCommand } from "citty";
6
+ import pc from "picocolors";
7
+ import { discoverScripts, getAllScriptMetadata, getLocalScriptsDir } from "../utils/script-utils.mjs";
8
+ const BUILTIN_COMMANDS = [{
9
+ name: "onboard",
10
+ description: "setup wizard for new projects"
11
+ }, {
12
+ name: "docs",
13
+ description: "view documentation"
14
+ }, {
15
+ name: "env:setup",
16
+ description: "setup environment variables"
17
+ }, {
18
+ name: "run",
19
+ description: "run scripts in parallel"
20
+ }, {
21
+ name: "script",
22
+ description: "manage and run scripts"
23
+ }, {
24
+ name: "sync",
25
+ description: "sync fork with upstream takeout"
26
+ }, {
27
+ name: "changed",
28
+ description: "show changes since last sync"
29
+ }, {
30
+ name: "skills",
31
+ description: "manage claude code skills"
32
+ }, {
33
+ name: "completion",
34
+ description: "shell completion setup"
35
+ }];
36
+ function findScriptsPackageRoot() {
37
+ try {
38
+ const resolved = import.meta.resolve("@take-out/scripts/package.json"),
39
+ packageJsonPath = fileURLToPath(new URL(resolved));
40
+ return join(packageJsonPath, "..", "src");
41
+ } catch {
42
+ return null;
43
+ }
44
+ }
45
+ function buildSummaryDescription(localScripts, builtInScripts) {
46
+ const categories = /* @__PURE__ */new Set(),
47
+ keywords = /* @__PURE__ */new Set();
48
+ for (const [name] of [...localScripts, ...builtInScripts]) keywords.add(name), name.includes("/") && categories.add(name.split("/")[0]);
49
+ for (const cmd of BUILTIN_COMMANDS) keywords.add(cmd.name);
50
+ return `CLI scripts and commands reference for the tko (takeout) CLI. Use when the user asks to run scripts, manage the project, or needs to know what commands are available. tko, takeout, CLI, scripts, commands, bun tko, project tasks, automation, ${[...categories].sort().join(", ")}, ${[...keywords].sort().join(", ")}`.slice(0, 2048);
51
+ }
52
+ function buildSummaryContent(localScripts, builtInScripts, metadata) {
53
+ const description = buildSummaryDescription(localScripts, builtInScripts),
54
+ lines = [];
55
+ lines.push("---"), lines.push("name: tko-scripts"), lines.push(`description: ${description}`), lines.push("---"), lines.push(""), lines.push("# tko CLI - scripts & commands"), lines.push(""), lines.push("run with `bun tko <command>` or `bun tko <script-name>`."), lines.push(""), lines.push("## built-in commands"), lines.push("");
56
+ for (const cmd of BUILTIN_COMMANDS) lines.push(` ${cmd.name} - ${cmd.description}`);
57
+ lines.push("");
58
+ const formatSection = (title, scripts) => {
59
+ if (scripts.size === 0) return;
60
+ const categories = /* @__PURE__ */new Map(),
61
+ rootScripts = [];
62
+ for (const [name] of scripts) if (name.includes("/")) {
63
+ const category = name.split("/")[0];
64
+ categories.has(category) || categories.set(category, []), categories.get(category).push(name);
65
+ } else rootScripts.push(name);
66
+ lines.push(`## ${title}`), lines.push("");
67
+ for (const name of rootScripts) {
68
+ const meta = metadata.get(name),
69
+ desc = meta?.description ? ` - ${meta.description}` : "",
70
+ args = meta?.args?.length ? ` [${meta.args.join(", ")}]` : "";
71
+ lines.push(` ${name}${desc}${args}`);
72
+ }
73
+ for (const [category, categoryScripts] of categories) {
74
+ lines.push(""), lines.push(` ${category}/`);
75
+ for (const name of categoryScripts) {
76
+ const shortName = name.substring(category.length + 1),
77
+ meta = metadata.get(name),
78
+ desc = meta?.description ? ` - ${meta.description}` : "",
79
+ args = meta?.args?.length ? ` [${meta.args.join(", ")}]` : "";
80
+ lines.push(` ${shortName}${desc}${args}`);
81
+ }
82
+ }
83
+ lines.push("");
84
+ };
85
+ return formatSection("local scripts", localScripts), formatSection("built-in scripts", builtInScripts), lines.push("## usage"), lines.push(""), lines.push("```bash"), lines.push("bun tko <command> # run a built-in command"), lines.push("bun tko <script-name> # execute direct script"), lines.push("bun tko <group> <script> # execute nested script (e.g. bun tko aws health)"), lines.push("bun tko run s1 s2 s3 # run multiple scripts in parallel"), lines.push("bun tko script new <path> # create a new script"), lines.push("```"), lines.push(""), lines.join(`
86
+ `);
87
+ }
88
+ async function generateSummary(cwd) {
89
+ const skillsDir = join(cwd, ".claude", "skills"),
90
+ skillDir = join(skillsDir, "tko-scripts"),
91
+ skillFile = join(skillDir, "SKILL.md"),
92
+ localScripts = discoverScripts(getLocalScriptsDir()),
93
+ builtInDir = findScriptsPackageRoot(),
94
+ builtInScripts = builtInDir ? discoverScripts(builtInDir) : /* @__PURE__ */new Map(),
95
+ allScripts = new Map([...localScripts, ...builtInScripts]),
96
+ metadata = await getAllScriptMetadata(allScripts),
97
+ totalScripts = localScripts.size + builtInScripts.size;
98
+ console.info(pc.dim(`found ${totalScripts} scripts (${localScripts.size} local, ${builtInScripts.size} built-in) + ${BUILTIN_COMMANDS.length} commands`));
99
+ const content = buildSummaryContent(localScripts, builtInScripts, metadata);
100
+ try {
101
+ if (readFileSync(skillFile, "utf-8") === content) return console.info(` ${pc.dim("tko-scripts")} ${pc.dim("unchanged")}`), !1;
102
+ } catch {}
103
+ return existsSync(skillDir) || mkdirSync(skillDir, {
104
+ recursive: !0
105
+ }), writeFileSync(skillFile, content), console.info(` ${pc.green("\u2713")} tko-scripts`), !0;
106
+ }
107
+ const require2 = createRequire(import.meta.url);
108
+ let DOCS_DIR;
109
+ try {
110
+ DOCS_DIR = dirname(require2.resolve("@take-out/docs/package.json"));
111
+ } catch {
112
+ DOCS_DIR = "";
113
+ }
114
+ const SKILL_PREFIX = "takeout-";
115
+ function hasSkillFrontmatter(content) {
116
+ if (!content.startsWith("---")) return !1;
117
+ const endIndex = content.indexOf("---", 3);
118
+ if (endIndex === -1) return !1;
119
+ const frontmatter = content.slice(3, endIndex);
120
+ return frontmatter.includes("name:") && frontmatter.includes("description:");
121
+ }
122
+ function isDevOnly(content) {
123
+ if (!content.startsWith("---")) return !1;
124
+ const endIndex = content.indexOf("---", 3);
125
+ if (endIndex === -1) return !1;
126
+ const frontmatter = content.slice(3, endIndex);
127
+ return /\bdev:\s*true\b/.test(frontmatter);
128
+ }
129
+ function extractDocMeta(content) {
130
+ const lines = content.split(`
131
+ `);
132
+ let title = "",
133
+ description = "",
134
+ startLine = 0;
135
+ if (lines[0]?.trim() === "---") {
136
+ for (let i = 1; i < lines.length; i++) if (lines[i]?.trim() === "---") {
137
+ startLine = i + 1;
138
+ break;
139
+ }
140
+ }
141
+ for (let i = startLine; i < lines.length; i++) {
142
+ const trimmed = lines[i]?.trim() || "";
143
+ if (!title && trimmed.startsWith("# ")) {
144
+ title = trimmed.slice(2).trim();
145
+ continue;
146
+ }
147
+ if (title && trimmed && !trimmed.startsWith("#")) {
148
+ description = trimmed;
149
+ break;
150
+ }
151
+ }
152
+ return {
153
+ title,
154
+ description
155
+ };
156
+ }
157
+ function toSkillName(name) {
158
+ return name.toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").slice(0, 64);
159
+ }
160
+ function collectAllDocs(cwd) {
161
+ const docs = [],
162
+ seen = /* @__PURE__ */new Set(),
163
+ localDocsDir = join(cwd, "docs");
164
+ if (existsSync(localDocsDir)) {
165
+ const files = readdirSync(localDocsDir).filter(f => f.endsWith(".md"));
166
+ for (const file of files) {
167
+ const name = file.replace(/\.md$/, "");
168
+ docs.push({
169
+ name,
170
+ path: join(localDocsDir, file),
171
+ source: "local"
172
+ }), seen.add(name);
173
+ }
174
+ }
175
+ if (DOCS_DIR && existsSync(DOCS_DIR)) {
176
+ const files = readdirSync(DOCS_DIR).filter(f => f.endsWith(".md"));
177
+ for (const file of files) {
178
+ const name = file.replace(/\.md$/, "");
179
+ seen.has(name) || docs.push({
180
+ name,
181
+ path: join(DOCS_DIR, file),
182
+ source: "package"
183
+ });
184
+ }
185
+ }
186
+ return docs;
187
+ }
188
+ async function generateDocSkills(cwd, clean) {
189
+ const skillsDir = join(cwd, ".claude", "skills"),
190
+ docs = collectAllDocs(cwd);
191
+ if (docs.length === 0) return console.info(pc.yellow("no documentation files found")), {
192
+ symlinked: 0,
193
+ generated: 0,
194
+ unchanged: 0
195
+ };
196
+ if (console.info(pc.dim(`found ${docs.length} documentation files`)), clean && existsSync(skillsDir)) {
197
+ const existing = readdirSync(skillsDir);
198
+ for (const dir of existing) dir.startsWith(SKILL_PREFIX) && rmSync(join(skillsDir, dir), {
199
+ recursive: !0
200
+ });
201
+ }
202
+ existsSync(skillsDir) || mkdirSync(skillsDir, {
203
+ recursive: !0
204
+ });
205
+ let symlinked = 0,
206
+ generated = 0,
207
+ unchanged = 0;
208
+ const isDev = !!process.env.IS_TAMAGUI_DEV;
209
+ for (const doc of docs) {
210
+ const content = readFileSync(doc.path, "utf-8");
211
+ if (isDevOnly(content) && !isDev) continue;
212
+ if (hasSkillFrontmatter(content)) {
213
+ const nameMatch = content.match(/^---\s*\nname:\s*([^\n]+)/m);
214
+ if (!nameMatch) continue;
215
+ const skillName = nameMatch[1].trim(),
216
+ skillDir = join(skillsDir, skillName),
217
+ skillFile = join(skillDir, "SKILL.md");
218
+ existsSync(skillDir) || mkdirSync(skillDir, {
219
+ recursive: !0
220
+ });
221
+ const relativePath = relative(skillDir, doc.path);
222
+ let shouldCreate = !0;
223
+ try {
224
+ lstatSync(skillFile).isSymbolicLink() && existsSync(skillFile) && readFileSync(skillFile, "utf-8") === content && (unchanged++, shouldCreate = !1), shouldCreate && unlinkSync(skillFile);
225
+ } catch {}
226
+ if (!shouldCreate) continue;
227
+ symlinkSync(relativePath, skillFile), symlinked++;
228
+ const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
229
+ console.info(` ${pc.green("\u27F7")} ${skillName} ${sourceLabel} ${pc.dim("(symlink)")}`);
230
+ } else {
231
+ const baseName = toSkillName(doc.name),
232
+ skillName = `${SKILL_PREFIX}${baseName}`,
233
+ skillDir = join(skillsDir, skillName),
234
+ skillFile = join(skillDir, "SKILL.md");
235
+ existsSync(skillDir) || mkdirSync(skillDir, {
236
+ recursive: !0
237
+ });
238
+ const {
239
+ title,
240
+ description
241
+ } = extractDocMeta(content),
242
+ skillDescription = description ? `${title}. ${description}`.slice(0, 1024) : title.slice(0, 1024),
243
+ skillContent = `---
244
+ name: ${skillName}
245
+ description: ${skillDescription}
246
+ ---
247
+
248
+ ${content}
249
+ `;
250
+ let shouldWrite = !0;
251
+ try {
252
+ lstatSync(skillFile).isSymbolicLink() ? unlinkSync(skillFile) : readFileSync(skillFile, "utf-8") === skillContent && (unchanged++, shouldWrite = !1);
253
+ } catch {}
254
+ if (!shouldWrite) continue;
255
+ writeFileSync(skillFile, skillContent), generated++;
256
+ const sourceLabel = doc.source === "local" ? pc.blue("local") : pc.dim("package");
257
+ console.info(` ${pc.green("\u2713")} ${skillName} ${sourceLabel} ${pc.dim("(generated)")}`);
258
+ }
259
+ }
260
+ return {
261
+ symlinked,
262
+ generated,
263
+ unchanged
264
+ };
265
+ }
266
+ const scriptsCommand = defineCommand({
267
+ meta: {
268
+ name: "scripts",
269
+ description: "Generate a skill summarizing all tko scripts and commands"
270
+ },
271
+ async run() {
272
+ const cwd = process.cwd();
273
+ console.info(), console.info(pc.bold(pc.cyan("Generate scripts skill"))), console.info(), await generateSummary(cwd), console.info();
274
+ }
275
+ }),
276
+ generateCommand = defineCommand({
277
+ meta: {
278
+ name: "generate",
279
+ description: "Generate all Claude Code skills (doc skills + summary)"
280
+ },
281
+ args: {
282
+ clean: {
283
+ type: "boolean",
284
+ description: "Remove existing takeout-* skills before generating",
285
+ default: !1
286
+ },
287
+ "skip-internal-docs": {
288
+ type: "boolean",
289
+ description: "Skip generating skills from internal documentation files",
290
+ default: !1
291
+ }
292
+ },
293
+ async run({
294
+ args
295
+ }) {
296
+ const cwd = process.cwd(),
297
+ skillsDir = join(cwd, ".claude", "skills");
298
+ console.info(), console.info(pc.bold(pc.cyan("Generate all skills"))), console.info();
299
+ let symlinked = 0,
300
+ generated = 0,
301
+ unchanged = 0;
302
+ if (!args["skip-internal-docs"]) {
303
+ const docStats = await generateDocSkills(cwd, args.clean);
304
+ symlinked = docStats.symlinked, generated = docStats.generated, unchanged = docStats.unchanged, console.info();
305
+ }
306
+ await generateSummary(cwd), 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`)}`), console.info(pc.dim(` skills in ${skillsDir}`)), console.info();
307
+ }
308
+ }),
309
+ skillsCommand = defineCommand({
310
+ meta: {
311
+ name: "skills",
312
+ description: "Manage Claude Code skills"
313
+ },
314
+ subCommands: {
315
+ generate: generateCommand,
316
+ scripts: scriptsCommand
317
+ }
318
+ });
319
+ export { skillsCommand };
320
+ //# sourceMappingURL=skills.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["existsSync","lstatSync","mkdirSync","readdirSync","readFileSync","rmSync","symlinkSync","unlinkSync","writeFileSync","createRequire","dirname","join","relative","fileURLToPath","defineCommand","pc","discoverScripts","getAllScriptMetadata","getLocalScriptsDir","BUILTIN_COMMANDS","name","description","findScriptsPackageRoot","resolved","import","meta","resolve","packageJsonPath","URL","buildSummaryDescription","localScripts","builtInScripts","categories","Set","keywords","add","includes","split","cmd","sort","slice","buildSummaryContent","metadata","lines","push","formatSection","title","scripts","size","Map","rootScripts","category","has","set","get","desc","args","length","categoryScripts","shortName","substring","generateSummary","cwd","skillsDir","skillDir","skillFile","builtInDir","allScripts","totalScripts","console","info","dim","content","recursive","green","require2","url","DOCS_DIR","SKILL_PREFIX","hasSkillFrontmatter","startsWith","endIndex","indexOf","frontmatter","isDevOnly","test","extractDocMeta","startLine","trim","i","trimmed","toSkillName","toLowerCase","replace","collectAllDocs","docs","seen","localDocsDir","files","filter","f","endsWith","file","path","source","generateDocSkills","clean","yellow","symlinked","generated","unchanged","existing","dir","isDev","process","env","IS_TAMAGUI_DEV","doc","nameMatch","match","skillName","relativePath","shouldCreate","isSymbolicLink","sourceLabel","blue","baseName","skillDescription","skillContent","shouldWrite","scriptsCommand","run","bold","cyan","generateCommand","type","default","docStats","skillsCommand","subCommands","generate"],"sources":["../../../src/commands/skills.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -42,7 +42,7 @@ function formatScriptList(title, scripts, metadata) {
42
42
  }
43
43
  }
44
44
  async function listAllScripts(includeCommands = !0) {
45
- console.info(), console.info(pc.bold(pc.cyan("Takeout CLI - Project Scripts & Commands"))), console.info(), console.info(pc.dim(" Manage scripts, run tasks, and configure your project")), console.info(), includeCommands && (console.info(pc.bold(pc.cyan("Built-in Commands"))), console.info(), console.info(` ${pc.green("onboard")} - Setup wizard for new projects`), console.info(` ${pc.green("docs")} - View documentation`), console.info(` ${pc.green("env:setup")} - Setup environment variables`), console.info(` ${pc.green("run")} - Run scripts in parallel`), console.info(` ${pc.green("script")} - Manage and run scripts`), console.info(` ${pc.green("sync")} - Sync fork with upstream Takeout`), console.info(` ${pc.green("changed")} - Show changes since last sync`), console.info(` ${pc.green("completion")} - Shell completion setup`));
45
+ console.info(), console.info(pc.bold(pc.cyan("Takeout CLI - Project Scripts & Commands"))), console.info(), console.info(pc.dim(" Manage scripts, run tasks, and configure your project")), console.info(), includeCommands && (console.info(pc.bold(pc.cyan("Built-in Commands"))), console.info(), console.info(` ${pc.green("onboard")} - Setup wizard for new projects`), console.info(` ${pc.green("docs")} - View documentation`), console.info(` ${pc.green("env:setup")} - Setup environment variables`), console.info(` ${pc.green("run")} - Run scripts in parallel`), console.info(` ${pc.green("script")} - Manage and run scripts`), console.info(` ${pc.green("skills")} - Manage Claude Code skills`), console.info(` ${pc.green("sync")} - Sync fork with upstream Takeout`), console.info(` ${pc.green("changed")} - Show changes since last sync`), console.info(` ${pc.green("completion")} - Shell completion setup`));
46
46
  const localScripts = discoverScripts(getLocalScriptsDir()), builtInDir = findScriptsPackageRoot(), builtInScripts = builtInDir ? discoverScripts(builtInDir) : /* @__PURE__ */ new Map(), allScripts = new Map([...localScripts, ...builtInScripts]), metadata = await getAllScriptMetadata(allScripts);
47
47
  localScripts.size > 0 && formatScriptList("Local Scripts", localScripts, metadata), builtInScripts.size > 0 && formatScriptList("Built-in Scripts", builtInScripts, metadata), localScripts.size === 0 && builtInScripts.size === 0 && (console.info(), console.info(pc.yellow("No scripts found")), console.info(), console.info(
48
48
  pc.dim(`Create scripts in ${relative(process.cwd(), getLocalScriptsDir())}/`)