@mahdy-gribkov/arcana 2.2.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.
Files changed (181) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +219 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/audit.d.ts +17 -0
  6. package/dist/commands/audit.d.ts.map +1 -0
  7. package/dist/commands/audit.js +157 -0
  8. package/dist/commands/audit.js.map +1 -0
  9. package/dist/commands/audit.test.d.ts +2 -0
  10. package/dist/commands/audit.test.d.ts.map +1 -0
  11. package/dist/commands/audit.test.js +217 -0
  12. package/dist/commands/audit.test.js.map +1 -0
  13. package/dist/commands/clean.d.ts +5 -0
  14. package/dist/commands/clean.d.ts.map +1 -0
  15. package/dist/commands/clean.js +125 -0
  16. package/dist/commands/clean.js.map +1 -0
  17. package/dist/commands/config.d.ts +4 -0
  18. package/dist/commands/config.d.ts.map +1 -0
  19. package/dist/commands/config.js +135 -0
  20. package/dist/commands/config.js.map +1 -0
  21. package/dist/commands/create.d.ts +2 -0
  22. package/dist/commands/create.d.ts.map +1 -0
  23. package/dist/commands/create.js +100 -0
  24. package/dist/commands/create.js.map +1 -0
  25. package/dist/commands/doctor.d.ts +6 -0
  26. package/dist/commands/doctor.d.ts.map +1 -0
  27. package/dist/commands/doctor.js +213 -0
  28. package/dist/commands/doctor.js.map +1 -0
  29. package/dist/commands/info.d.ts +5 -0
  30. package/dist/commands/info.d.ts.map +1 -0
  31. package/dist/commands/info.js +114 -0
  32. package/dist/commands/info.js.map +1 -0
  33. package/dist/commands/init.d.ts +13 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +216 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/install.d.ts +8 -0
  38. package/dist/commands/install.d.ts.map +1 -0
  39. package/dist/commands/install.js +404 -0
  40. package/dist/commands/install.js.map +1 -0
  41. package/dist/commands/list.d.ts +8 -0
  42. package/dist/commands/list.d.ts.map +1 -0
  43. package/dist/commands/list.js +100 -0
  44. package/dist/commands/list.js.map +1 -0
  45. package/dist/commands/providers.d.ts +6 -0
  46. package/dist/commands/providers.d.ts.map +1 -0
  47. package/dist/commands/providers.js +103 -0
  48. package/dist/commands/providers.js.map +1 -0
  49. package/dist/commands/scan.d.ts +5 -0
  50. package/dist/commands/scan.d.ts.map +1 -0
  51. package/dist/commands/scan.js +110 -0
  52. package/dist/commands/scan.js.map +1 -0
  53. package/dist/commands/search.d.ts +6 -0
  54. package/dist/commands/search.d.ts.map +1 -0
  55. package/dist/commands/search.js +58 -0
  56. package/dist/commands/search.js.map +1 -0
  57. package/dist/commands/stats.d.ts +4 -0
  58. package/dist/commands/stats.d.ts.map +1 -0
  59. package/dist/commands/stats.js +143 -0
  60. package/dist/commands/stats.js.map +1 -0
  61. package/dist/commands/uninstall.d.ts +6 -0
  62. package/dist/commands/uninstall.d.ts.map +1 -0
  63. package/dist/commands/uninstall.js +163 -0
  64. package/dist/commands/uninstall.js.map +1 -0
  65. package/dist/commands/update.d.ts +7 -0
  66. package/dist/commands/update.d.ts.map +1 -0
  67. package/dist/commands/update.js +348 -0
  68. package/dist/commands/update.js.map +1 -0
  69. package/dist/commands/validate.d.ts +6 -0
  70. package/dist/commands/validate.d.ts.map +1 -0
  71. package/dist/commands/validate.js +140 -0
  72. package/dist/commands/validate.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +39 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/interactive.d.ts +2 -0
  78. package/dist/interactive.d.ts.map +1 -0
  79. package/dist/interactive.js +812 -0
  80. package/dist/interactive.js.map +1 -0
  81. package/dist/providers/arcana.d.ts +5 -0
  82. package/dist/providers/arcana.d.ts.map +1 -0
  83. package/dist/providers/arcana.js +11 -0
  84. package/dist/providers/arcana.js.map +1 -0
  85. package/dist/providers/base.d.ts +11 -0
  86. package/dist/providers/base.d.ts.map +1 -0
  87. package/dist/providers/base.js +10 -0
  88. package/dist/providers/base.js.map +1 -0
  89. package/dist/providers/github.d.ts +25 -0
  90. package/dist/providers/github.d.ts.map +1 -0
  91. package/dist/providers/github.js +146 -0
  92. package/dist/providers/github.js.map +1 -0
  93. package/dist/registry.d.ts +9 -0
  94. package/dist/registry.d.ts.map +1 -0
  95. package/dist/registry.js +71 -0
  96. package/dist/registry.js.map +1 -0
  97. package/dist/types.d.ts +67 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +2 -0
  100. package/dist/types.js.map +1 -0
  101. package/dist/utils/atomic.d.ts +2 -0
  102. package/dist/utils/atomic.d.ts.map +1 -0
  103. package/dist/utils/atomic.js +20 -0
  104. package/dist/utils/atomic.js.map +1 -0
  105. package/dist/utils/atomic.test.d.ts +2 -0
  106. package/dist/utils/atomic.test.d.ts.map +1 -0
  107. package/dist/utils/atomic.test.js +31 -0
  108. package/dist/utils/atomic.test.js.map +1 -0
  109. package/dist/utils/cache.d.ts +4 -0
  110. package/dist/utils/cache.d.ts.map +1 -0
  111. package/dist/utils/cache.js +47 -0
  112. package/dist/utils/cache.js.map +1 -0
  113. package/dist/utils/config.d.ts +6 -0
  114. package/dist/utils/config.d.ts.map +1 -0
  115. package/dist/utils/config.js +90 -0
  116. package/dist/utils/config.js.map +1 -0
  117. package/dist/utils/config.test.d.ts +2 -0
  118. package/dist/utils/config.test.d.ts.map +1 -0
  119. package/dist/utils/config.test.js +38 -0
  120. package/dist/utils/config.test.js.map +1 -0
  121. package/dist/utils/errors.d.ts +6 -0
  122. package/dist/utils/errors.d.ts.map +1 -0
  123. package/dist/utils/errors.js +11 -0
  124. package/dist/utils/errors.js.map +1 -0
  125. package/dist/utils/frontmatter.d.ts +12 -0
  126. package/dist/utils/frontmatter.d.ts.map +1 -0
  127. package/dist/utils/frontmatter.js +172 -0
  128. package/dist/utils/frontmatter.js.map +1 -0
  129. package/dist/utils/frontmatter.test.d.ts +2 -0
  130. package/dist/utils/frontmatter.test.d.ts.map +1 -0
  131. package/dist/utils/frontmatter.test.js +152 -0
  132. package/dist/utils/frontmatter.test.js.map +1 -0
  133. package/dist/utils/fs.d.ts +16 -0
  134. package/dist/utils/fs.d.ts.map +1 -0
  135. package/dist/utils/fs.js +118 -0
  136. package/dist/utils/fs.js.map +1 -0
  137. package/dist/utils/fs.test.d.ts +2 -0
  138. package/dist/utils/fs.test.d.ts.map +1 -0
  139. package/dist/utils/fs.test.js +145 -0
  140. package/dist/utils/fs.test.js.map +1 -0
  141. package/dist/utils/help.d.ts +6 -0
  142. package/dist/utils/help.d.ts.map +1 -0
  143. package/dist/utils/help.js +117 -0
  144. package/dist/utils/help.js.map +1 -0
  145. package/dist/utils/help.test.d.ts +2 -0
  146. package/dist/utils/help.test.d.ts.map +1 -0
  147. package/dist/utils/help.test.js +66 -0
  148. package/dist/utils/help.test.js.map +1 -0
  149. package/dist/utils/history.d.ts +10 -0
  150. package/dist/utils/history.d.ts.map +1 -0
  151. package/dist/utils/history.js +58 -0
  152. package/dist/utils/history.js.map +1 -0
  153. package/dist/utils/http.d.ts +17 -0
  154. package/dist/utils/http.d.ts.map +1 -0
  155. package/dist/utils/http.js +165 -0
  156. package/dist/utils/http.js.map +1 -0
  157. package/dist/utils/http.test.d.ts +2 -0
  158. package/dist/utils/http.test.d.ts.map +1 -0
  159. package/dist/utils/http.test.js +55 -0
  160. package/dist/utils/http.test.js.map +1 -0
  161. package/dist/utils/parallel.d.ts +2 -0
  162. package/dist/utils/parallel.d.ts.map +1 -0
  163. package/dist/utils/parallel.js +17 -0
  164. package/dist/utils/parallel.js.map +1 -0
  165. package/dist/utils/scanner.d.ts +27 -0
  166. package/dist/utils/scanner.d.ts.map +1 -0
  167. package/dist/utils/scanner.js +195 -0
  168. package/dist/utils/scanner.js.map +1 -0
  169. package/dist/utils/ui.d.ts +27 -0
  170. package/dist/utils/ui.d.ts.map +1 -0
  171. package/dist/utils/ui.js +99 -0
  172. package/dist/utils/ui.js.map +1 -0
  173. package/dist/utils/ui.test.d.ts +2 -0
  174. package/dist/utils/ui.test.d.ts.map +1 -0
  175. package/dist/utils/ui.test.js +31 -0
  176. package/dist/utils/ui.test.js.map +1 -0
  177. package/dist/utils/validate.d.ts +2 -0
  178. package/dist/utils/validate.d.ts.map +1 -0
  179. package/dist/utils/validate.js +7 -0
  180. package/dist/utils/validate.js.map +1 -0
  181. package/package.json +62 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createCli(): Command;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,SAAS,IAAI,OAAO,CA0OnC"}
package/dist/cli.js ADDED
@@ -0,0 +1,219 @@
1
+ import { createRequire } from "node:module";
2
+ import { Command } from "commander";
3
+ import { ui } from "./utils/ui.js";
4
+ const require = createRequire(import.meta.url);
5
+ const pkg = require("../package.json");
6
+ export function createCli() {
7
+ const program = new Command();
8
+ program
9
+ .name("arcana")
10
+ .description("Universal AI development CLI")
11
+ .version(pkg.version);
12
+ // Store default help formatter before overriding
13
+ const defaultFormatHelp = program.createHelp().formatHelp.bind(program.createHelp());
14
+ program.configureHelp({
15
+ formatHelp: (cmd, helper) => {
16
+ if (cmd.name() === "arcana") {
17
+ // Lazy import to avoid loading help.ts at startup for subcommands
18
+ const { buildCustomHelp } = require("./utils/help.js");
19
+ return buildCustomHelp(pkg.version);
20
+ }
21
+ return defaultFormatHelp(cmd, helper);
22
+ },
23
+ });
24
+ program.addHelpCommand(false);
25
+ program.showSuggestionAfterError(true);
26
+ program.configureOutput({
27
+ outputError: (str) => {
28
+ const cleaned = str.replace(/^error: /, "");
29
+ console.error();
30
+ console.error(ui.error(" Error: ") + cleaned.trim());
31
+ console.error(ui.dim(" Run arcana <command> --help for usage"));
32
+ console.error();
33
+ },
34
+ });
35
+ program.argument("[command]", "", "").action(async (cmd) => {
36
+ if (cmd) {
37
+ console.error();
38
+ console.error(ui.error(" Error: ") + `unknown command '${cmd}'`);
39
+ const commands = ["list", "install", "info", "search", "providers", "create", "validate", "update", "uninstall", "init", "doctor", "clean", "stats", "config", "audit", "scan"];
40
+ const match = commands.find(c => c.startsWith(cmd.slice(0, 3)));
41
+ if (match) {
42
+ console.error(ui.dim(` Did you mean '${match}'?`));
43
+ }
44
+ console.error(ui.dim(" Run arcana --help for all commands"));
45
+ console.error();
46
+ process.exit(1);
47
+ }
48
+ const { isFirstRun, showWelcome, markInitialized, buildCustomHelp } = await import("./utils/help.js");
49
+ // Non-TTY (CI, pipes): print static help
50
+ if (!process.stdout.isTTY) {
51
+ console.log(buildCustomHelp(pkg.version));
52
+ return;
53
+ }
54
+ if (isFirstRun()) {
55
+ showWelcome(pkg.version);
56
+ markInitialized();
57
+ }
58
+ const { showInteractiveMenu } = await import("./interactive.js");
59
+ await showInteractiveMenu(pkg.version);
60
+ });
61
+ program
62
+ .command("list")
63
+ .description("List available skills")
64
+ .option("-p, --provider <name>", "Provider to list from")
65
+ .option("-a, --all", "List from all providers")
66
+ .option("--installed", "Show only installed skills")
67
+ .option("--no-cache", "Bypass skill cache")
68
+ .option("-j, --json", "Output as JSON")
69
+ .addHelpText("after", "\nExamples:\n arcana list\n arcana list --installed\n arcana list --all --no-cache")
70
+ .action(async (opts) => {
71
+ const { listCommand } = await import("./commands/list.js");
72
+ return listCommand(opts);
73
+ });
74
+ program
75
+ .command("install [skills...]")
76
+ .description("Install one or more skills")
77
+ .option("-p, --provider <name>", "Provider to install from")
78
+ .option("-a, --all", "Install all skills")
79
+ .option("-f, --force", "Reinstall even if already installed")
80
+ .option("--dry-run", "Show what would be installed without installing")
81
+ .option("-j, --json", "Output as JSON")
82
+ .addHelpText("after", "\nExamples:\n arcana install code-reviewer\n arcana install skill1 skill2 skill3\n arcana install --all --force")
83
+ .action(async (skills, opts) => {
84
+ const { installCommand } = await import("./commands/install.js");
85
+ return installCommand(skills, opts);
86
+ });
87
+ program
88
+ .command("info <skill>")
89
+ .description("Show skill details")
90
+ .option("-p, --provider <name>", "Provider to search")
91
+ .option("-j, --json", "Output as JSON")
92
+ .action(async (skill, opts) => {
93
+ const { infoCommand } = await import("./commands/info.js");
94
+ return infoCommand(skill, opts);
95
+ });
96
+ program
97
+ .command("search <query>")
98
+ .description("Search for skills across providers")
99
+ .option("-p, --provider <name>", "Limit search to provider")
100
+ .option("--no-cache", "Bypass skill cache")
101
+ .option("-j, --json", "Output as JSON")
102
+ .addHelpText("after", "\nExamples:\n arcana search testing\n arcana search \"code review\"")
103
+ .action(async (query, opts) => {
104
+ const { searchCommand } = await import("./commands/search.js");
105
+ return searchCommand(query, opts);
106
+ });
107
+ program
108
+ .command("providers")
109
+ .description("Manage skill providers")
110
+ .option("--add <owner/repo>", "Add a GitHub provider")
111
+ .option("--remove <name>", "Remove a provider")
112
+ .option("--json", "Output as JSON")
113
+ .action(async (opts) => {
114
+ const { providersCommand } = await import("./commands/providers.js");
115
+ return providersCommand(opts);
116
+ });
117
+ program
118
+ .command("create <name>")
119
+ .description("Create a new skill from template")
120
+ .action(async (name) => {
121
+ const { createCommand } = await import("./commands/create.js");
122
+ return createCommand(name);
123
+ });
124
+ program
125
+ .command("validate [skill]")
126
+ .description("Validate skill structure and metadata")
127
+ .option("-a, --all", "Validate all installed skills")
128
+ .option("-f, --fix", "Auto-fix common issues")
129
+ .option("-j, --json", "Output as JSON")
130
+ .action(async (skill, opts) => {
131
+ const { validateCommand } = await import("./commands/validate.js");
132
+ return validateCommand(skill, opts);
133
+ });
134
+ program
135
+ .command("update [skills...]")
136
+ .description("Update installed skills")
137
+ .option("-a, --all", "Update all installed skills")
138
+ .option("-p, --provider <name>", "Update from specific provider")
139
+ .option("-n, --dry-run", "Show what would be updated without updating")
140
+ .option("-j, --json", "Output as JSON")
141
+ .addHelpText("after", "\nExamples:\n arcana update code-reviewer\n arcana update skill1 skill2\n arcana update --all --dry-run")
142
+ .action(async (skills, opts) => {
143
+ const { updateCommand } = await import("./commands/update.js");
144
+ return updateCommand(skills, opts);
145
+ });
146
+ program
147
+ .command("uninstall [skills...]")
148
+ .description("Uninstall one or more skills")
149
+ .option("-y, --yes", "Skip confirmation prompt")
150
+ .option("-j, --json", "Output as JSON")
151
+ .addHelpText("after", "\nExamples:\n arcana uninstall code-reviewer\n arcana uninstall skill1 skill2 --yes")
152
+ .action(async (skills, opts) => {
153
+ const { uninstallCommand } = await import("./commands/uninstall.js");
154
+ return uninstallCommand(skills, opts);
155
+ });
156
+ program
157
+ .command("init")
158
+ .description("Initialize arcana in current project")
159
+ .option("-t, --tool <name>", "Target tool (claude, cursor, codex, gemini, antigravity, windsurf, aider, all)")
160
+ .action(async (opts) => {
161
+ const { initCommand } = await import("./commands/init.js");
162
+ return initCommand(opts);
163
+ });
164
+ program
165
+ .command("doctor")
166
+ .description("Check environment and diagnose issues")
167
+ .option("-j, --json", "Output as JSON")
168
+ .action(async (opts) => {
169
+ const { doctorCommand } = await import("./commands/doctor.js");
170
+ return doctorCommand(opts);
171
+ });
172
+ program
173
+ .command("clean")
174
+ .description("Remove orphaned data and temp files")
175
+ .option("-n, --dry-run", "Show what would be removed without deleting")
176
+ .option("--json", "Output as JSON")
177
+ .action(async (opts) => {
178
+ const { cleanCommand } = await import("./commands/clean.js");
179
+ return cleanCommand(opts);
180
+ });
181
+ program
182
+ .command("stats")
183
+ .description("Show session analytics and token usage")
184
+ .option("-j, --json", "Output as JSON")
185
+ .action(async (opts) => {
186
+ const { statsCommand } = await import("./commands/stats.js");
187
+ return statsCommand(opts);
188
+ });
189
+ program
190
+ .command("config [action] [value]")
191
+ .description("View or modify arcana configuration")
192
+ .option("-j, --json", "Output as JSON")
193
+ .addHelpText("after", "\nExamples:\n arcana config\n arcana config path\n arcana config defaultProvider arcana\n arcana config reset")
194
+ .action(async (action, value, opts) => {
195
+ const { configCommand } = await import("./commands/config.js");
196
+ return configCommand(action, value, opts);
197
+ });
198
+ program
199
+ .command("audit [skill]")
200
+ .description("Audit skill quality (code examples, BAD/GOOD pairs, structure)")
201
+ .option("-a, --all", "Audit all installed skills")
202
+ .option("-j, --json", "Output as JSON")
203
+ .action(async (skill, opts) => {
204
+ const { auditCommand } = await import("./commands/audit.js");
205
+ return auditCommand(skill, opts);
206
+ });
207
+ program
208
+ .command("scan [skill]")
209
+ .description("Scan skills for security threats (prompt injection, malware, credential theft)")
210
+ .option("-a, --all", "Scan all installed skills")
211
+ .option("-j, --json", "Output as JSON")
212
+ .addHelpText("after", "\nExamples:\n arcana scan code-reviewer\n arcana scan --all\n arcana scan --all --json")
213
+ .action(async (skill, opts) => {
214
+ const { scanCommand } = await import("./commands/scan.js");
215
+ return scanCommand(skill, opts);
216
+ });
217
+ return program;
218
+ }
219
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ interface AuditResult {
2
+ skill: string;
3
+ rating: "PERFECT" | "STRONG" | "ADEQUATE" | "WEAK";
4
+ score: number;
5
+ checks: {
6
+ name: string;
7
+ passed: boolean;
8
+ detail?: string;
9
+ }[];
10
+ }
11
+ export declare function auditSkill(skillDir: string, skillName: string): AuditResult;
12
+ export declare function auditCommand(skill: string | undefined, opts: {
13
+ all?: boolean;
14
+ json?: boolean;
15
+ }): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CA2E3E;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
@@ -0,0 +1,157 @@
1
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { getInstallDir } from "../utils/fs.js";
4
+ import { extractFrontmatter, parseFrontmatter } from "../utils/frontmatter.js";
5
+ import { ui, banner } from "../utils/ui.js";
6
+ export function auditSkill(skillDir, skillName) {
7
+ const checks = [];
8
+ let score = 0;
9
+ const skillMd = join(skillDir, "SKILL.md");
10
+ if (!existsSync(skillMd)) {
11
+ return { skill: skillName, rating: "WEAK", score: 0, checks: [{ name: "SKILL.md exists", passed: false }] };
12
+ }
13
+ let content;
14
+ try {
15
+ content = readFileSync(skillMd, "utf-8");
16
+ }
17
+ catch {
18
+ return { skill: skillName, rating: "WEAK", score: 0, checks: [{ name: "SKILL.md readable", passed: false }] };
19
+ }
20
+ const extracted = extractFrontmatter(content);
21
+ const parsed = extracted ? parseFrontmatter(extracted.raw) : null;
22
+ const body = extracted?.body || "";
23
+ const lines = body.split("\n");
24
+ const lineCount = lines.length;
25
+ // 1. Has frontmatter with name and description
26
+ const hasFrontmatter = !!parsed?.name && !!parsed?.description;
27
+ checks.push({ name: "Valid frontmatter", passed: hasFrontmatter });
28
+ if (hasFrontmatter)
29
+ score += 10;
30
+ // 2. Description length (80-1024)
31
+ const descLen = parsed?.description?.length || 0;
32
+ const goodDesc = descLen >= 80 && descLen <= 1024;
33
+ checks.push({ name: "Description length (80-1024)", passed: goodDesc, detail: `${descLen} chars` });
34
+ if (goodDesc)
35
+ score += 10;
36
+ // 3. Has ## headings
37
+ const headingCount = (body.match(/^## /gm) || []).length;
38
+ const hasHeadings = headingCount >= 2;
39
+ checks.push({ name: "Has ## headings (2+)", passed: hasHeadings, detail: `${headingCount} headings` });
40
+ if (hasHeadings)
41
+ score += 10;
42
+ // 4. Has code examples
43
+ const codeBlockCount = (body.match(/```/g) || []).length / 2;
44
+ const hasCode = codeBlockCount >= 2;
45
+ checks.push({ name: "Has code examples (2+)", passed: hasCode, detail: `${Math.floor(codeBlockCount)} blocks` });
46
+ if (hasCode)
47
+ score += 20;
48
+ // 5. Has BAD/GOOD or BEFORE/AFTER patterns
49
+ const hasBadGood = /\b(BAD|GOOD|BEFORE|AFTER|DON'T|DO)\b/i.test(body);
50
+ checks.push({ name: "Has BAD/GOOD or BEFORE/AFTER pairs", passed: hasBadGood });
51
+ if (hasBadGood)
52
+ score += 15;
53
+ // 6. Not a capabilities list (detects pattern of many "- " lines with no code between them)
54
+ const bulletLines = (body.match(/^- /gm) || []).length;
55
+ const isCapabilityList = bulletLines > 20 && codeBlockCount < 3;
56
+ checks.push({ name: "Not a capabilities list", passed: !isCapabilityList, detail: isCapabilityList ? `${bulletLines} bullets, ${Math.floor(codeBlockCount)} code blocks` : undefined });
57
+ if (!isCapabilityList)
58
+ score += 15;
59
+ // 7. Reasonable length (50-500 lines)
60
+ const goodLength = lineCount >= 50 && lineCount <= 500;
61
+ checks.push({ name: "Reasonable length (50-500 lines)", passed: goodLength, detail: `${lineCount} lines` });
62
+ if (goodLength)
63
+ score += 10;
64
+ // 8. Has scripts/ or references/ directory (bonus)
65
+ const hasScripts = existsSync(join(skillDir, "scripts"));
66
+ const hasRefs = existsSync(join(skillDir, "references")) || existsSync(join(skillDir, "rules"));
67
+ const hasExtras = hasScripts || hasRefs;
68
+ checks.push({ name: "Has scripts/ or references/", passed: hasExtras, detail: hasExtras ? [hasScripts && "scripts", hasRefs && "references"].filter(Boolean).join(", ") : "none" });
69
+ if (hasExtras)
70
+ score += 10;
71
+ // Rating
72
+ let rating;
73
+ if (score >= 85)
74
+ rating = "PERFECT";
75
+ else if (score >= 65)
76
+ rating = "STRONG";
77
+ else if (score >= 40)
78
+ rating = "ADEQUATE";
79
+ else
80
+ rating = "WEAK";
81
+ return { skill: skillName, rating, score, checks };
82
+ }
83
+ export async function auditCommand(skill, opts) {
84
+ if (!opts.json)
85
+ banner();
86
+ const installDir = getInstallDir();
87
+ if (!existsSync(installDir)) {
88
+ if (opts.json) {
89
+ console.log(JSON.stringify({ results: [] }));
90
+ }
91
+ else {
92
+ console.log(ui.dim(" No skills installed."));
93
+ console.log();
94
+ }
95
+ return;
96
+ }
97
+ let skills;
98
+ if (opts.all) {
99
+ skills = readdirSync(installDir).filter((d) => statSync(join(installDir, d)).isDirectory());
100
+ }
101
+ else if (skill) {
102
+ skills = [skill];
103
+ }
104
+ else {
105
+ if (opts.json) {
106
+ console.log(JSON.stringify({ error: "Specify a skill name or use --all" }));
107
+ }
108
+ else {
109
+ console.log(ui.error(" Specify a skill name or use --all"));
110
+ console.log(ui.dim(" Usage: arcana audit <skill>"));
111
+ console.log(ui.dim(" arcana audit --all [--json]"));
112
+ console.log();
113
+ }
114
+ process.exit(1);
115
+ }
116
+ const results = [];
117
+ for (const name of skills.sort()) {
118
+ const skillDir = join(installDir, name);
119
+ if (!existsSync(skillDir)) {
120
+ results.push({ skill: name, rating: "WEAK", score: 0, checks: [{ name: "Exists", passed: false }] });
121
+ continue;
122
+ }
123
+ results.push(auditSkill(skillDir, name));
124
+ }
125
+ if (opts.json) {
126
+ console.log(JSON.stringify({ results }, null, 2));
127
+ return;
128
+ }
129
+ const counts = { PERFECT: 0, STRONG: 0, ADEQUATE: 0, WEAK: 0 };
130
+ for (const r of results) {
131
+ counts[r.rating]++;
132
+ const ratingColor = r.rating === "PERFECT" ? ui.success
133
+ : r.rating === "STRONG" ? ui.cyan
134
+ : r.rating === "ADEQUATE" ? ui.warn
135
+ : ui.error;
136
+ console.log(` ${ratingColor(`[${r.rating}]`)} ${ui.bold(r.skill)} ${ui.dim(`(${r.score}/100)`)}`);
137
+ for (const check of r.checks) {
138
+ if (!check.passed) {
139
+ const detail = check.detail ? ` ${ui.dim(`(${check.detail})`)}` : "";
140
+ console.log(` ${ui.error("x")} ${check.name}${detail}`);
141
+ }
142
+ }
143
+ }
144
+ console.log();
145
+ const parts = [];
146
+ if (counts.PERFECT > 0)
147
+ parts.push(ui.success(`${counts.PERFECT} perfect`));
148
+ if (counts.STRONG > 0)
149
+ parts.push(ui.cyan(`${counts.STRONG} strong`));
150
+ if (counts.ADEQUATE > 0)
151
+ parts.push(ui.warn(`${counts.ADEQUATE} adequate`));
152
+ if (counts.WEAK > 0)
153
+ parts.push(ui.error(`${counts.WEAK} weak`));
154
+ console.log(` ${parts.join(ui.dim(" | "))}`);
155
+ console.log();
156
+ }
157
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.test.d.ts","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":""}