@sporesec/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.
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +219 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/audit.d.ts +17 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +157 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/audit.test.d.ts +2 -0
- package/dist/commands/audit.test.d.ts.map +1 -0
- package/dist/commands/audit.test.js +217 -0
- package/dist/commands/audit.test.js.map +1 -0
- package/dist/commands/clean.d.ts +5 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +125 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +135 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +100 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +213 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +5 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +114 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +216 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +8 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +404 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +100 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/providers.d.ts +6 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +103 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/scan.d.ts +5 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +110 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/search.d.ts +6 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +58 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/stats.d.ts +4 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +143 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/uninstall.d.ts +6 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +163 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +348 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +6 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +140 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +2 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +812 -0
- package/dist/interactive.js.map +1 -0
- package/dist/providers/arcana.d.ts +5 -0
- package/dist/providers/arcana.d.ts.map +1 -0
- package/dist/providers/arcana.js +11 -0
- package/dist/providers/arcana.js.map +1 -0
- package/dist/providers/base.d.ts +11 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +10 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/github.d.ts +25 -0
- package/dist/providers/github.d.ts.map +1 -0
- package/dist/providers/github.js +146 -0
- package/dist/providers/github.js.map +1 -0
- package/dist/registry.d.ts +9 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +71 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/atomic.d.ts +2 -0
- package/dist/utils/atomic.d.ts.map +1 -0
- package/dist/utils/atomic.js +20 -0
- package/dist/utils/atomic.js.map +1 -0
- package/dist/utils/atomic.test.d.ts +2 -0
- package/dist/utils/atomic.test.d.ts.map +1 -0
- package/dist/utils/atomic.test.js +31 -0
- package/dist/utils/atomic.test.js.map +1 -0
- package/dist/utils/cache.d.ts +4 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +47 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/config.d.ts +6 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +90 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/config.test.d.ts +2 -0
- package/dist/utils/config.test.d.ts.map +1 -0
- package/dist/utils/config.test.js +38 -0
- package/dist/utils/config.test.js.map +1 -0
- package/dist/utils/errors.d.ts +6 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +11 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +12 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +172 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/frontmatter.test.d.ts +2 -0
- package/dist/utils/frontmatter.test.d.ts.map +1 -0
- package/dist/utils/frontmatter.test.js +152 -0
- package/dist/utils/frontmatter.test.js.map +1 -0
- package/dist/utils/fs.d.ts +16 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +118 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/fs.test.d.ts +2 -0
- package/dist/utils/fs.test.d.ts.map +1 -0
- package/dist/utils/fs.test.js +145 -0
- package/dist/utils/fs.test.js.map +1 -0
- package/dist/utils/help.d.ts +6 -0
- package/dist/utils/help.d.ts.map +1 -0
- package/dist/utils/help.js +117 -0
- package/dist/utils/help.js.map +1 -0
- package/dist/utils/help.test.d.ts +2 -0
- package/dist/utils/help.test.d.ts.map +1 -0
- package/dist/utils/help.test.js +66 -0
- package/dist/utils/help.test.js.map +1 -0
- package/dist/utils/history.d.ts +10 -0
- package/dist/utils/history.d.ts.map +1 -0
- package/dist/utils/history.js +58 -0
- package/dist/utils/history.js.map +1 -0
- package/dist/utils/http.d.ts +17 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +165 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/http.test.d.ts +2 -0
- package/dist/utils/http.test.d.ts.map +1 -0
- package/dist/utils/http.test.js +55 -0
- package/dist/utils/http.test.js.map +1 -0
- package/dist/utils/parallel.d.ts +2 -0
- package/dist/utils/parallel.d.ts.map +1 -0
- package/dist/utils/parallel.js +17 -0
- package/dist/utils/parallel.js.map +1 -0
- package/dist/utils/scanner.d.ts +27 -0
- package/dist/utils/scanner.d.ts.map +1 -0
- package/dist/utils/scanner.js +195 -0
- package/dist/utils/scanner.js.map +1 -0
- package/dist/utils/ui.d.ts +27 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +99 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/ui.test.d.ts +2 -0
- package/dist/utils/ui.test.d.ts.map +1 -0
- package/dist/utils/ui.test.js +31 -0
- package/dist/utils/ui.test.js.map +1 -0
- package/dist/utils/validate.d.ts +2 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +7 -0
- package/dist/utils/validate.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mkdtempSync, writeFileSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { auditSkill } from "./audit.js";
|
|
6
|
+
function makeTempSkill(name, content, extraDirs = []) {
|
|
7
|
+
const base = mkdtempSync(join(tmpdir(), "arcana-test-"));
|
|
8
|
+
const skillDir = join(base, name);
|
|
9
|
+
mkdirSync(skillDir, { recursive: true });
|
|
10
|
+
writeFileSync(join(skillDir, "SKILL.md"), content, "utf-8");
|
|
11
|
+
for (const dir of extraDirs) {
|
|
12
|
+
mkdirSync(join(skillDir, dir), { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
return skillDir;
|
|
15
|
+
}
|
|
16
|
+
describe("auditSkill", () => {
|
|
17
|
+
it("returns WEAK with score 0 when SKILL.md doesn't exist", () => {
|
|
18
|
+
const base = mkdtempSync(join(tmpdir(), "arcana-test-"));
|
|
19
|
+
const skillDir = join(base, "empty");
|
|
20
|
+
mkdirSync(skillDir, { recursive: true });
|
|
21
|
+
const result = auditSkill(skillDir, "empty");
|
|
22
|
+
expect(result.rating).toBe("WEAK");
|
|
23
|
+
expect(result.score).toBe(0);
|
|
24
|
+
expect(result.checks).toHaveLength(1);
|
|
25
|
+
expect(result.checks[0].passed).toBe(false);
|
|
26
|
+
expect(result.checks[0].name).toBe("SKILL.md exists");
|
|
27
|
+
});
|
|
28
|
+
it("returns low score when SKILL.md has only frontmatter, no body", () => {
|
|
29
|
+
const content = "---\nname: test-skill\ndescription: " + "A".repeat(100) + "\n---\n";
|
|
30
|
+
const skillDir = makeTempSkill("test-skill", content);
|
|
31
|
+
const result = auditSkill(skillDir, "test-skill");
|
|
32
|
+
expect(result.score).toBeLessThan(40);
|
|
33
|
+
expect(result.rating).toBe("WEAK");
|
|
34
|
+
const headingCheck = result.checks.find(c => c.name.includes("headings"));
|
|
35
|
+
expect(headingCheck?.passed).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
it("scores correctly for description length check (80-1024 chars)", () => {
|
|
38
|
+
const shortDesc = "A".repeat(50);
|
|
39
|
+
const goodDesc = "A".repeat(100);
|
|
40
|
+
const longDesc = "A".repeat(2000);
|
|
41
|
+
const shortContent = `---\nname: short\ndescription: ${shortDesc}\n---\n## Heading\n${"Body line\n".repeat(60)}`;
|
|
42
|
+
const goodContent = `---\nname: good\ndescription: ${goodDesc}\n---\n## Heading\n${"Body line\n".repeat(60)}`;
|
|
43
|
+
const longContent = `---\nname: long\ndescription: ${longDesc}\n---\n## Heading\n${"Body line\n".repeat(60)}`;
|
|
44
|
+
const shortDir = makeTempSkill("short", shortContent);
|
|
45
|
+
const goodDir = makeTempSkill("good", goodContent);
|
|
46
|
+
const longDir = makeTempSkill("long", longContent);
|
|
47
|
+
const shortResult = auditSkill(shortDir, "short");
|
|
48
|
+
const goodResult = auditSkill(goodDir, "good");
|
|
49
|
+
const longResult = auditSkill(longDir, "long");
|
|
50
|
+
const shortDescCheck = shortResult.checks.find(c => c.name.includes("Description length"));
|
|
51
|
+
const goodDescCheck = goodResult.checks.find(c => c.name.includes("Description length"));
|
|
52
|
+
const longDescCheck = longResult.checks.find(c => c.name.includes("Description length"));
|
|
53
|
+
expect(shortDescCheck?.passed).toBe(false);
|
|
54
|
+
expect(goodDescCheck?.passed).toBe(true);
|
|
55
|
+
expect(longDescCheck?.passed).toBe(false);
|
|
56
|
+
});
|
|
57
|
+
it("counts ## headings correctly", () => {
|
|
58
|
+
const noHeadings = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n${"Body\n".repeat(60)}`;
|
|
59
|
+
const twoHeadings = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## First\nContent\n## Second\nContent\n${"Body\n".repeat(50)}`;
|
|
60
|
+
const threeHeadings = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## First\n## Second\n## Third\n${"Body\n".repeat(50)}`;
|
|
61
|
+
const noDir = makeTempSkill("no", noHeadings);
|
|
62
|
+
const twoDir = makeTempSkill("two", twoHeadings);
|
|
63
|
+
const threeDir = makeTempSkill("three", threeHeadings);
|
|
64
|
+
const noResult = auditSkill(noDir, "no");
|
|
65
|
+
const twoResult = auditSkill(twoDir, "two");
|
|
66
|
+
const threeResult = auditSkill(threeDir, "three");
|
|
67
|
+
const noCheck = noResult.checks.find(c => c.name.includes("headings"));
|
|
68
|
+
const twoCheck = twoResult.checks.find(c => c.name.includes("headings"));
|
|
69
|
+
const threeCheck = threeResult.checks.find(c => c.name.includes("headings"));
|
|
70
|
+
expect(noCheck?.passed).toBe(false);
|
|
71
|
+
expect(noCheck?.detail).toBe("0 headings");
|
|
72
|
+
expect(twoCheck?.passed).toBe(true);
|
|
73
|
+
expect(twoCheck?.detail).toBe("2 headings");
|
|
74
|
+
expect(threeCheck?.passed).toBe(true);
|
|
75
|
+
expect(threeCheck?.detail).toBe("3 headings");
|
|
76
|
+
});
|
|
77
|
+
it("counts code blocks correctly", () => {
|
|
78
|
+
const noCode = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n${"Body\n".repeat(60)}`;
|
|
79
|
+
const oneBlock = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`js\ncode\n\`\`\`\n${"Body\n".repeat(50)}`;
|
|
80
|
+
const twoBlocks = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`js\ncode\n\`\`\`\n## Second\n\`\`\`ts\nmore\n\`\`\`\n${"Body\n".repeat(50)}`;
|
|
81
|
+
const noDir = makeTempSkill("no", noCode);
|
|
82
|
+
const oneDir = makeTempSkill("one", oneBlock);
|
|
83
|
+
const twoDir = makeTempSkill("two", twoBlocks);
|
|
84
|
+
const noResult = auditSkill(noDir, "no");
|
|
85
|
+
const oneResult = auditSkill(oneDir, "one");
|
|
86
|
+
const twoResult = auditSkill(twoDir, "two");
|
|
87
|
+
const noCheck = noResult.checks.find(c => c.name.includes("code examples"));
|
|
88
|
+
const oneCheck = oneResult.checks.find(c => c.name.includes("code examples"));
|
|
89
|
+
const twoCheck = twoResult.checks.find(c => c.name.includes("code examples"));
|
|
90
|
+
expect(noCheck?.passed).toBe(false);
|
|
91
|
+
expect(noCheck?.detail).toBe("0 blocks");
|
|
92
|
+
expect(oneCheck?.passed).toBe(false);
|
|
93
|
+
expect(oneCheck?.detail).toBe("1 blocks");
|
|
94
|
+
expect(twoCheck?.passed).toBe(true);
|
|
95
|
+
expect(twoCheck?.detail).toBe("2 blocks");
|
|
96
|
+
});
|
|
97
|
+
it("detects BAD/GOOD patterns", () => {
|
|
98
|
+
const noPairs = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n${"Body\n".repeat(60)}`;
|
|
99
|
+
const withBAD = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\nBAD example:\n\`\`\`\ncode\n\`\`\`\nGOOD example:\n\`\`\`\ncode\n\`\`\`\n${"Body\n".repeat(50)}`;
|
|
100
|
+
const withBEFORE = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\nBEFORE:\n\`\`\`\ncode\n\`\`\`\nAFTER:\n\`\`\`\ncode\n\`\`\`\n${"Body\n".repeat(50)}`;
|
|
101
|
+
const withDO = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\nDON'T do this:\n\`\`\`\ncode\n\`\`\`\nDO this instead:\n\`\`\`\ncode\n\`\`\`\n${"Body\n".repeat(50)}`;
|
|
102
|
+
const noDir = makeTempSkill("no", noPairs);
|
|
103
|
+
const badDir = makeTempSkill("bad", withBAD);
|
|
104
|
+
const beforeDir = makeTempSkill("before", withBEFORE);
|
|
105
|
+
const doDir = makeTempSkill("do", withDO);
|
|
106
|
+
const noResult = auditSkill(noDir, "no");
|
|
107
|
+
const badResult = auditSkill(badDir, "bad");
|
|
108
|
+
const beforeResult = auditSkill(beforeDir, "before");
|
|
109
|
+
const doResult = auditSkill(doDir, "do");
|
|
110
|
+
const noCheck = noResult.checks.find(c => c.name.includes("BAD/GOOD"));
|
|
111
|
+
const badCheck = badResult.checks.find(c => c.name.includes("BAD/GOOD"));
|
|
112
|
+
const beforeCheck = beforeResult.checks.find(c => c.name.includes("BAD/GOOD"));
|
|
113
|
+
const doCheck = doResult.checks.find(c => c.name.includes("BAD/GOOD"));
|
|
114
|
+
expect(noCheck?.passed).toBe(false);
|
|
115
|
+
expect(badCheck?.passed).toBe(true);
|
|
116
|
+
expect(beforeCheck?.passed).toBe(true);
|
|
117
|
+
expect(doCheck?.passed).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
it("detects capabilities list anti-pattern (>20 bullets, <3 code blocks)", () => {
|
|
120
|
+
const goodList = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n${Array(10).fill("- Item\n").join("")}\`\`\`\ncode\n\`\`\`\n\`\`\`\ncode\n\`\`\`\n${"Body\n".repeat(40)}`;
|
|
121
|
+
const capList = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Capabilities\n${Array(25).fill("- Feature\n").join("")}\`\`\`\ncode\n\`\`\`\n${"Body\n".repeat(30)}`;
|
|
122
|
+
const goodDir = makeTempSkill("good", goodList);
|
|
123
|
+
const capDir = makeTempSkill("cap", capList);
|
|
124
|
+
const goodResult = auditSkill(goodDir, "good");
|
|
125
|
+
const capResult = auditSkill(capDir, "cap");
|
|
126
|
+
const goodCheck = goodResult.checks.find(c => c.name.includes("capabilities list"));
|
|
127
|
+
const capCheck = capResult.checks.find(c => c.name.includes("capabilities list"));
|
|
128
|
+
expect(goodCheck?.passed).toBe(true);
|
|
129
|
+
expect(capCheck?.passed).toBe(false);
|
|
130
|
+
expect(capCheck?.detail).toContain("25 bullets");
|
|
131
|
+
expect(capCheck?.detail).toContain("1 code blocks");
|
|
132
|
+
});
|
|
133
|
+
it("returns PERFECT for well-structured skill with all checks passing", () => {
|
|
134
|
+
const perfectSkill = `---
|
|
135
|
+
name: perfect-skill
|
|
136
|
+
description: ${" ".repeat(0)}This is a well-structured skill description that meets all the length requirements and provides clear information about what the skill does. It's detailed enough to be useful but not so long that it becomes unwieldy.
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Overview
|
|
140
|
+
|
|
141
|
+
This skill demonstrates best practices.
|
|
142
|
+
|
|
143
|
+
\`\`\`js
|
|
144
|
+
// Example 1
|
|
145
|
+
function good() {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
\`\`\`
|
|
149
|
+
|
|
150
|
+
## Usage Patterns
|
|
151
|
+
|
|
152
|
+
BAD example:
|
|
153
|
+
\`\`\`js
|
|
154
|
+
const x = 1;
|
|
155
|
+
\`\`\`
|
|
156
|
+
|
|
157
|
+
GOOD example:
|
|
158
|
+
\`\`\`js
|
|
159
|
+
const meaningfulName = 1;
|
|
160
|
+
\`\`\`
|
|
161
|
+
|
|
162
|
+
## Additional Details
|
|
163
|
+
|
|
164
|
+
More content here to ensure we have enough lines.
|
|
165
|
+
${Array(30).fill("Content line for length.\n").join("")}
|
|
166
|
+
`;
|
|
167
|
+
const skillDir = makeTempSkill("perfect-skill", perfectSkill, ["scripts", "references"]);
|
|
168
|
+
const result = auditSkill(skillDir, "perfect-skill");
|
|
169
|
+
expect(result.rating).toBe("PERFECT");
|
|
170
|
+
expect(result.score).toBeGreaterThanOrEqual(85);
|
|
171
|
+
for (const check of result.checks) {
|
|
172
|
+
expect(check.passed).toBe(true);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
it("checks reasonable length (50-500 lines)", () => {
|
|
176
|
+
const shortSkill = `---\nname: short\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`\ncode\n\`\`\`\n\`\`\`\ncode\n\`\`\`\n${Array(10).fill("Line\n").join("")}`;
|
|
177
|
+
const goodSkill = `---\nname: good\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`\ncode\n\`\`\`\n\`\`\`\ncode\n\`\`\`\n${Array(80).fill("Line\n").join("")}`;
|
|
178
|
+
const longSkill = `---\nname: long\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`\ncode\n\`\`\`\n\`\`\`\ncode\n\`\`\`\n${Array(550).fill("Line\n").join("")}`;
|
|
179
|
+
const shortDir = makeTempSkill("short", shortSkill);
|
|
180
|
+
const goodDir = makeTempSkill("good", goodSkill);
|
|
181
|
+
const longDir = makeTempSkill("long", longSkill);
|
|
182
|
+
const shortResult = auditSkill(shortDir, "short");
|
|
183
|
+
const goodResult = auditSkill(goodDir, "good");
|
|
184
|
+
const longResult = auditSkill(longDir, "long");
|
|
185
|
+
const shortCheck = shortResult.checks.find(c => c.name.includes("Reasonable length"));
|
|
186
|
+
const goodCheck = goodResult.checks.find(c => c.name.includes("Reasonable length"));
|
|
187
|
+
const longCheck = longResult.checks.find(c => c.name.includes("Reasonable length"));
|
|
188
|
+
expect(shortCheck?.passed).toBe(false);
|
|
189
|
+
expect(goodCheck?.passed).toBe(true);
|
|
190
|
+
expect(longCheck?.passed).toBe(false);
|
|
191
|
+
});
|
|
192
|
+
it("detects scripts/ and references/ directories", () => {
|
|
193
|
+
const content = `---\nname: test\ndescription: ${"A".repeat(100)}\n---\n## Heading\n\`\`\`\ncode\n\`\`\`\n\`\`\`\ncode\n\`\`\`\n${Array(60).fill("Line\n").join("")}`;
|
|
194
|
+
const noExtras = makeTempSkill("no-extras", content);
|
|
195
|
+
const withScripts = makeTempSkill("with-scripts", content, ["scripts"]);
|
|
196
|
+
const withRefs = makeTempSkill("with-refs", content, ["references"]);
|
|
197
|
+
const withBoth = makeTempSkill("with-both", content, ["scripts", "references"]);
|
|
198
|
+
const noResult = auditSkill(noExtras, "no-extras");
|
|
199
|
+
const scriptsResult = auditSkill(withScripts, "with-scripts");
|
|
200
|
+
const refsResult = auditSkill(withRefs, "with-refs");
|
|
201
|
+
const bothResult = auditSkill(withBoth, "with-both");
|
|
202
|
+
const noCheck = noResult.checks.find(c => c.name.includes("scripts/ or references/"));
|
|
203
|
+
const scriptsCheck = scriptsResult.checks.find(c => c.name.includes("scripts/ or references/"));
|
|
204
|
+
const refsCheck = refsResult.checks.find(c => c.name.includes("scripts/ or references/"));
|
|
205
|
+
const bothCheck = bothResult.checks.find(c => c.name.includes("scripts/ or references/"));
|
|
206
|
+
expect(noCheck?.passed).toBe(false);
|
|
207
|
+
expect(noCheck?.detail).toBe("none");
|
|
208
|
+
expect(scriptsCheck?.passed).toBe(true);
|
|
209
|
+
expect(scriptsCheck?.detail).toBe("scripts");
|
|
210
|
+
expect(refsCheck?.passed).toBe(true);
|
|
211
|
+
expect(refsCheck?.detail).toBe("references");
|
|
212
|
+
expect(bothCheck?.passed).toBe(true);
|
|
213
|
+
expect(bothCheck?.detail).toContain("scripts");
|
|
214
|
+
expect(bothCheck?.detail).toContain("references");
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=audit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.test.js","sourceRoot":"","sources":["../../src/commands/audit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G5F"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { existsSync, readdirSync, rmSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { ui, banner } from "../utils/ui.js";
|
|
5
|
+
import { getDirSize, listSymlinks } from "../utils/fs.js";
|
|
6
|
+
import { clearHistory } from "../utils/history.js";
|
|
7
|
+
export async function cleanCommand(opts) {
|
|
8
|
+
if (!opts.json)
|
|
9
|
+
banner();
|
|
10
|
+
const dryRun = opts.dryRun ?? false;
|
|
11
|
+
if (dryRun && !opts.json)
|
|
12
|
+
console.log(ui.warn(" DRY RUN - no files will be deleted\n"));
|
|
13
|
+
let totalReclaimed = 0;
|
|
14
|
+
let actions = 0;
|
|
15
|
+
const removedSymlinks = [];
|
|
16
|
+
const removedProjects = [];
|
|
17
|
+
const removedCacheFiles = [];
|
|
18
|
+
// 1. Clean broken symlinks
|
|
19
|
+
const failedSymlinks = [];
|
|
20
|
+
for (const link of listSymlinks().filter(s => s.broken)) {
|
|
21
|
+
if (!dryRun) {
|
|
22
|
+
try {
|
|
23
|
+
rmSync(link.fullPath);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
if (!opts.json)
|
|
27
|
+
console.log(` ${ui.warn("Could not remove symlink:")} ${link.name} ${ui.dim(`(${err instanceof Error ? err.message : "unknown error"})`)}`);
|
|
28
|
+
failedSymlinks.push(link.name);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (!opts.json)
|
|
33
|
+
console.log(` ${ui.dim("Remove broken symlink:")} ${link.name}`);
|
|
34
|
+
removedSymlinks.push(link.name);
|
|
35
|
+
actions++;
|
|
36
|
+
}
|
|
37
|
+
// 2. Clean orphaned Claude project dirs
|
|
38
|
+
const projectsDir = join(homedir(), ".claude", "projects");
|
|
39
|
+
if (existsSync(projectsDir)) {
|
|
40
|
+
for (const entry of readdirSync(projectsDir)) {
|
|
41
|
+
const projDir = join(projectsDir, entry);
|
|
42
|
+
if (!statSync(projDir).isDirectory())
|
|
43
|
+
continue;
|
|
44
|
+
// Skip memory/ and other special dirs
|
|
45
|
+
if (entry === "memory" || entry.startsWith("."))
|
|
46
|
+
continue;
|
|
47
|
+
// Check for session data staleness (no files modified in 90+ days)
|
|
48
|
+
let newest = 0;
|
|
49
|
+
try {
|
|
50
|
+
for (const file of readdirSync(projDir)) {
|
|
51
|
+
const stat = statSync(join(projDir, file));
|
|
52
|
+
if (stat.mtimeMs > newest)
|
|
53
|
+
newest = stat.mtimeMs;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const daysOld = (Date.now() - newest) / (1000 * 60 * 60 * 24);
|
|
60
|
+
if (daysOld > 90) {
|
|
61
|
+
const size = getDirSize(projDir);
|
|
62
|
+
totalReclaimed += size;
|
|
63
|
+
const mb = (size / (1024 * 1024)).toFixed(1);
|
|
64
|
+
if (!dryRun)
|
|
65
|
+
rmSync(projDir, { recursive: true, force: true });
|
|
66
|
+
if (!opts.json)
|
|
67
|
+
console.log(` ${ui.dim("Remove stale project data:")} ${entry} ${ui.dim(`(${mb} MB, ${Math.floor(daysOld)}d old)`)}`);
|
|
68
|
+
removedProjects.push({ name: entry, sizeMB: mb, daysOld: Math.floor(daysOld) });
|
|
69
|
+
actions++;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 3. Clear action history
|
|
74
|
+
if (!dryRun)
|
|
75
|
+
clearHistory();
|
|
76
|
+
if (!opts.json)
|
|
77
|
+
console.log(` ${ui.dim("Clear action history")}`);
|
|
78
|
+
actions++;
|
|
79
|
+
// 4. Clean disk cache
|
|
80
|
+
const cacheDir = join(homedir(), ".arcana", "cache");
|
|
81
|
+
if (existsSync(cacheDir)) {
|
|
82
|
+
for (const file of readdirSync(cacheDir)) {
|
|
83
|
+
if (!dryRun) {
|
|
84
|
+
try {
|
|
85
|
+
rmSync(join(cacheDir, file), { force: true });
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (!opts.json)
|
|
92
|
+
console.log(` ${ui.dim("Remove cached data:")} ${file}`);
|
|
93
|
+
removedCacheFiles.push(file);
|
|
94
|
+
actions++;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (opts.json) {
|
|
98
|
+
const result = {
|
|
99
|
+
dryRun,
|
|
100
|
+
actions,
|
|
101
|
+
reclaimedMB: Number((totalReclaimed / (1024 * 1024)).toFixed(1)),
|
|
102
|
+
removedSymlinks,
|
|
103
|
+
removedProjects,
|
|
104
|
+
removedCacheFiles,
|
|
105
|
+
};
|
|
106
|
+
if (failedSymlinks.length > 0)
|
|
107
|
+
result.failedSymlinks = failedSymlinks;
|
|
108
|
+
console.log(JSON.stringify(result));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
console.log();
|
|
112
|
+
if (actions > 0) {
|
|
113
|
+
const mb = (totalReclaimed / (1024 * 1024)).toFixed(1);
|
|
114
|
+
const verb = dryRun ? "Would reclaim" : "Reclaimed";
|
|
115
|
+
console.log(ui.success(` ${actions} items cleaned. ${verb} ${mb} MB.`));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log(ui.dim(" Checked:"));
|
|
119
|
+
console.log(ui.dim(` - Broken symlinks in ~/.claude/skills/: ${removedSymlinks.length} found`));
|
|
120
|
+
console.log(ui.dim(` - Stale project data in ~/.claude/projects/: ${removedProjects.length} found`));
|
|
121
|
+
console.log(ui.success(" Nothing to clean."));
|
|
122
|
+
}
|
|
123
|
+
console.log();
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=clean.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAgIf"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { existsSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { loadConfig, saveConfig } from "../utils/config.js";
|
|
5
|
+
import { ui, banner, table } from "../utils/ui.js";
|
|
6
|
+
import { clearProviderCache } from "../registry.js";
|
|
7
|
+
const VALID_KEYS = ["defaultProvider", "installDir"];
|
|
8
|
+
export async function configCommand(action, value, opts) {
|
|
9
|
+
if (!opts?.json) {
|
|
10
|
+
banner();
|
|
11
|
+
}
|
|
12
|
+
// arcana config list (or no args)
|
|
13
|
+
if (!action || action === "list") {
|
|
14
|
+
const config = loadConfig();
|
|
15
|
+
if (opts?.json) {
|
|
16
|
+
console.log(JSON.stringify({ config }));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
console.log(ui.bold(" Configuration\n"));
|
|
20
|
+
const envInstallDir = process.env.ARCANA_INSTALL_DIR;
|
|
21
|
+
const envProvider = process.env.ARCANA_DEFAULT_PROVIDER;
|
|
22
|
+
const rows = [
|
|
23
|
+
[ui.dim("defaultProvider"), config.defaultProvider + (envProvider ? ` ${ui.warn("(overridden by ARCANA_DEFAULT_PROVIDER)")}` : "")],
|
|
24
|
+
[ui.dim("installDir"), config.installDir + (envInstallDir ? ` ${ui.warn("(overridden by ARCANA_INSTALL_DIR)")}` : "")],
|
|
25
|
+
[ui.dim("providers"), config.providers.map(p => p.name).join(", ")],
|
|
26
|
+
];
|
|
27
|
+
table(rows);
|
|
28
|
+
console.log();
|
|
29
|
+
const configPath = join(homedir(), ".arcana", "config.json");
|
|
30
|
+
console.log(ui.dim(` Config file: ${configPath}`));
|
|
31
|
+
console.log(ui.dim(` ${existsSync(configPath) ? "Custom config" : "Using defaults"}`));
|
|
32
|
+
console.log();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// arcana config path
|
|
36
|
+
if (action === "path") {
|
|
37
|
+
if (value && !opts?.json) {
|
|
38
|
+
console.log(ui.warn(` 'path' does not take a value (ignoring "${value}")`));
|
|
39
|
+
}
|
|
40
|
+
const configPath = join(homedir(), ".arcana", "config.json");
|
|
41
|
+
if (opts?.json) {
|
|
42
|
+
console.log(JSON.stringify({ path: configPath, exists: existsSync(configPath) }));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(` ${configPath}`);
|
|
46
|
+
console.log(ui.dim(` ${existsSync(configPath) ? "Custom config" : "Using defaults (file does not exist)"}`));
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// arcana config reset
|
|
52
|
+
if (action === "reset") {
|
|
53
|
+
const configPath = join(homedir(), ".arcana", "config.json");
|
|
54
|
+
const existed = existsSync(configPath);
|
|
55
|
+
if (existed) {
|
|
56
|
+
try {
|
|
57
|
+
rmSync(configPath, { force: true });
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
if (opts?.json) {
|
|
61
|
+
console.log(JSON.stringify({ action: "reset", success: false, error: err instanceof Error ? err.message : "Failed to remove config" }));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log(ui.error(` Failed to reset config: ${err instanceof Error ? err.message : "unknown error"}`));
|
|
65
|
+
console.log();
|
|
66
|
+
}
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
clearProviderCache();
|
|
70
|
+
}
|
|
71
|
+
if (opts?.json) {
|
|
72
|
+
console.log(JSON.stringify({ action: "reset", success: true, existed }));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log(existed ? ui.success(" Config reset to defaults") : ui.dim(" Already using defaults"));
|
|
76
|
+
console.log();
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// arcana config <key> [value]
|
|
81
|
+
if (!VALID_KEYS.includes(action)) {
|
|
82
|
+
if (opts?.json) {
|
|
83
|
+
console.log(JSON.stringify({ error: `Unknown config key: ${action}`, validKeys: [...VALID_KEYS] }));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(ui.error(` Unknown config key: ${action}`));
|
|
87
|
+
console.log(ui.dim(` Valid keys: ${VALID_KEYS.join(", ")}`));
|
|
88
|
+
console.log();
|
|
89
|
+
}
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const config = loadConfig();
|
|
93
|
+
const key = action;
|
|
94
|
+
if (value === undefined) {
|
|
95
|
+
// Get value
|
|
96
|
+
if (opts?.json) {
|
|
97
|
+
console.log(JSON.stringify({ action: "get", key, value: config[key] }));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(` ${key} = ${config[key]}`);
|
|
101
|
+
console.log();
|
|
102
|
+
}
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Set value
|
|
106
|
+
if (key === "installDir") {
|
|
107
|
+
if (value === "") {
|
|
108
|
+
console.log(ui.error(" installDir cannot be empty"));
|
|
109
|
+
console.log();
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
const { isAbsolute } = await import("node:path");
|
|
113
|
+
if (!isAbsolute(value)) {
|
|
114
|
+
console.log(ui.warn(` Warning: "${value}" is not an absolute path`));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (key === "defaultProvider") {
|
|
118
|
+
const providerNames = config.providers.map(p => p.name);
|
|
119
|
+
if (!providerNames.includes(value)) {
|
|
120
|
+
console.log(ui.error(` Provider '${value}' not configured. Add it first with: arcana providers --add owner/repo`));
|
|
121
|
+
console.log();
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
config[key] = value;
|
|
126
|
+
saveConfig(config);
|
|
127
|
+
if (opts?.json) {
|
|
128
|
+
console.log(JSON.stringify({ action: "set", key, value }));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(ui.success(` Set ${key} = ${value}`));
|
|
132
|
+
console.log();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AA+CA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D/D"}
|