superkit-mcp-server 1.2.1 → 1.2.3

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 (170) hide show
  1. package/ARCHITECTURE.md +102 -102
  2. package/README.md +71 -71
  3. package/SUPERKIT.md +168 -168
  4. package/agents/code-archaeologist.md +106 -106
  5. package/agents/coder.md +90 -90
  6. package/agents/data-engineer.md +28 -28
  7. package/agents/devops-engineer.md +242 -242
  8. package/agents/git-manager.md +203 -203
  9. package/agents/orchestrator.md +420 -420
  10. package/agents/penetration-tester.md +188 -188
  11. package/agents/performance-optimizer.md +187 -187
  12. package/agents/planner.md +270 -270
  13. package/agents/qa-automation-engineer.md +103 -103
  14. package/agents/quant-developer.md +32 -32
  15. package/agents/reviewer.md +100 -100
  16. package/agents/scout.md +222 -222
  17. package/agents/security-auditor.md +3 -2
  18. package/agents/tester.md +274 -274
  19. package/agents/ui-designer.md +208 -208
  20. package/build/index.js +21 -2
  21. package/build/tools/__tests__/loggerTools.test.js +5 -5
  22. package/build/tools/archTools.js +2 -19
  23. package/build/tools/autoPreview.js +2 -2
  24. package/build/tools/compoundTools.js +4 -4
  25. package/build/tools/docsTools.js +5 -10
  26. package/build/tools/loggerTools.js +1 -1
  27. package/build/tools/todoTools.js +39 -39
  28. package/build/tools/validators/__tests__/apiSchema.test.js +23 -23
  29. package/build/tools/validators/__tests__/convertRules.test.js +5 -5
  30. package/build/tools/validators/__tests__/frontendDesign.test.js +12 -12
  31. package/build/tools/validators/__tests__/geoChecker.test.js +19 -19
  32. package/build/tools/validators/__tests__/mobileAudit.test.js +12 -12
  33. package/build/tools/validators/__tests__/reactPerformanceChecker.test.js +17 -17
  34. package/build/tools/validators/__tests__/securityScan.test.js +6 -6
  35. package/build/tools/validators/__tests__/seoChecker.test.js +16 -16
  36. package/build/tools/validators/__tests__/typeCoverage.test.js +14 -14
  37. package/build/tools/validators/convertRules.js +2 -2
  38. package/commands/README.md +122 -122
  39. package/commands/ask.toml +72 -72
  40. package/commands/brainstorm.toml +119 -119
  41. package/commands/chat.toml +77 -77
  42. package/commands/code-preview.toml +37 -37
  43. package/commands/code.toml +28 -28
  44. package/commands/content.toml +200 -200
  45. package/commands/cook.toml +77 -77
  46. package/commands/copywrite.toml +131 -131
  47. package/commands/db.toml +192 -192
  48. package/commands/debug.toml +166 -166
  49. package/commands/design.toml +158 -158
  50. package/commands/dev-rules.toml +14 -14
  51. package/commands/do.toml +117 -117
  52. package/commands/doc-rules.toml +14 -14
  53. package/commands/docs.toml +148 -148
  54. package/commands/fix.toml +440 -440
  55. package/commands/fullstack.toml +175 -175
  56. package/commands/git.toml +235 -235
  57. package/commands/help.toml +84 -84
  58. package/commands/integrate.toml +127 -127
  59. package/commands/journal.toml +136 -136
  60. package/commands/kit-setup.toml +40 -40
  61. package/commands/mcp.toml +183 -183
  62. package/commands/orchestration.toml +15 -15
  63. package/commands/plan.toml +171 -171
  64. package/commands/pm.toml +148 -148
  65. package/commands/pr.toml +50 -50
  66. package/commands/project.toml +32 -32
  67. package/commands/research.toml +117 -117
  68. package/commands/review-pr.toml +63 -63
  69. package/commands/review.toml +190 -190
  70. package/commands/scout-ext.toml +97 -97
  71. package/commands/scout.toml +79 -79
  72. package/commands/screenshot.toml +65 -65
  73. package/commands/session.toml +102 -102
  74. package/commands/skill.toml +384 -384
  75. package/commands/status.toml +22 -22
  76. package/commands/team.toml +56 -56
  77. package/commands/test.toml +164 -164
  78. package/commands/ticket.toml +70 -70
  79. package/commands/use.toml +106 -106
  80. package/commands/video.toml +83 -83
  81. package/commands/watzup.toml +71 -71
  82. package/commands/workflow.toml +14 -14
  83. package/package.json +35 -35
  84. package/skills/meta/README.md +30 -30
  85. package/skills/meta/api-design/SKILL.md +134 -134
  86. package/skills/meta/code-review/SKILL.md +44 -44
  87. package/skills/meta/code-review/checklists/pre-merge.md +25 -25
  88. package/skills/meta/code-review/workflows/architecture-pass.md +26 -26
  89. package/skills/meta/code-review/workflows/performance-pass.md +27 -27
  90. package/skills/meta/code-review/workflows/security-pass.md +29 -29
  91. package/skills/meta/compound-docs/SKILL.md +133 -133
  92. package/skills/meta/debug/SKILL.md +40 -40
  93. package/skills/meta/debug/templates/bug-report.template.md +31 -31
  94. package/skills/meta/debug/workflows/reproduce-issue.md +20 -20
  95. package/skills/meta/docker/SKILL.md +126 -126
  96. package/skills/meta/examples/supabase/SKILL.md +46 -46
  97. package/skills/meta/examples/supabase/references/best-practices.md +319 -319
  98. package/skills/meta/examples/supabase/references/common-patterns.md +373 -373
  99. package/skills/meta/examples/supabase/templates/migration-template.sql +49 -49
  100. package/skills/meta/examples/supabase/templates/rls-policy-template.sql +77 -77
  101. package/skills/meta/examples/supabase/workflows/debugging.md +260 -260
  102. package/skills/meta/examples/supabase/workflows/migration-workflow.md +211 -211
  103. package/skills/meta/examples/supabase/workflows/rls-policies.md +244 -244
  104. package/skills/meta/examples/supabase/workflows/schema-design.md +321 -321
  105. package/skills/meta/file-todos/SKILL.md +88 -88
  106. package/skills/meta/mobile/SKILL.md +140 -140
  107. package/skills/meta/nextjs/SKILL.md +101 -101
  108. package/skills/meta/performance/SKILL.md +130 -130
  109. package/skills/meta/react-patterns/SKILL.md +83 -83
  110. package/skills/meta/security/SKILL.md +114 -114
  111. package/skills/meta/session-resume/SKILL.md +96 -96
  112. package/skills/meta/tailwind/SKILL.md +139 -139
  113. package/skills/meta/testing/SKILL.md +43 -43
  114. package/skills/meta/testing/references/vitest-patterns.md +45 -45
  115. package/skills/meta/testing/templates/component-test.template.tsx +37 -37
  116. package/skills/tech/alpha-vantage/SKILL.md +142 -142
  117. package/skills/tech/alpha-vantage/references/commodities.md +153 -153
  118. package/skills/tech/alpha-vantage/references/economic-indicators.md +158 -158
  119. package/skills/tech/alpha-vantage/references/forex-crypto.md +154 -154
  120. package/skills/tech/alpha-vantage/references/fundamentals.md +223 -223
  121. package/skills/tech/alpha-vantage/references/intelligence.md +138 -138
  122. package/skills/tech/alpha-vantage/references/options.md +93 -93
  123. package/skills/tech/alpha-vantage/references/technical-indicators.md +374 -374
  124. package/skills/tech/alpha-vantage/references/time-series.md +157 -157
  125. package/skills/tech/doc.md +6 -6
  126. package/skills/tech/financial-modeling/SKILL.md +18 -18
  127. package/skills/tech/financial-modeling/skills/3-statements/SKILL.md +368 -368
  128. package/skills/tech/financial-modeling/skills/3-statements/references/formatting.md +118 -118
  129. package/skills/tech/financial-modeling/skills/3-statements/references/formulas.md +292 -292
  130. package/skills/tech/financial-modeling/skills/3-statements/references/sec-filings.md +125 -125
  131. package/skills/tech/financial-modeling/skills/dcf-model/SKILL.md +1210 -1210
  132. package/skills/tech/financial-modeling/skills/dcf-model/TROUBLESHOOTING.md +40 -40
  133. package/skills/tech/financial-modeling/skills/dcf-model/requirements.txt +8 -8
  134. package/skills/tech/financial-modeling/skills/dcf-model/scripts/validate_dcf.py +292 -292
  135. package/skills/tech/financial-modeling/skills/lbo-model/SKILL.md +236 -236
  136. package/skills/tech/financial-modeling/skills/merger-model/SKILL.md +108 -108
  137. package/skills/workflows/README.md +203 -203
  138. package/skills/workflows/adr.md +174 -174
  139. package/skills/workflows/changelog.md +74 -74
  140. package/skills/workflows/compound.md +323 -323
  141. package/skills/workflows/compound_health.md +74 -74
  142. package/skills/workflows/create-agent-skill.md +138 -139
  143. package/skills/workflows/cycle.md +144 -144
  144. package/skills/workflows/deploy-docs.md +84 -84
  145. package/skills/workflows/development-rules.md +42 -42
  146. package/skills/workflows/doc.md +95 -95
  147. package/skills/workflows/documentation-management.md +34 -34
  148. package/skills/workflows/explore.md +146 -146
  149. package/skills/workflows/generate_command.md +106 -106
  150. package/skills/workflows/heal-skill.md +97 -97
  151. package/skills/workflows/housekeeping.md +229 -229
  152. package/skills/workflows/kit-setup.md +102 -102
  153. package/skills/workflows/map-codebase.md +78 -78
  154. package/skills/workflows/orchestration-protocol.md +43 -43
  155. package/skills/workflows/plan-compound.md +439 -439
  156. package/skills/workflows/plan_review.md +269 -269
  157. package/skills/workflows/primary-workflow.md +37 -37
  158. package/skills/workflows/promote_pattern.md +86 -86
  159. package/skills/workflows/release-docs.md +82 -82
  160. package/skills/workflows/report-bug.md +135 -135
  161. package/skills/workflows/reproduce-bug.md +118 -118
  162. package/skills/workflows/resolve_pr.md +133 -133
  163. package/skills/workflows/resolve_todo.md +128 -128
  164. package/skills/workflows/review-compound.md +376 -376
  165. package/skills/workflows/skill-review.md +127 -127
  166. package/skills/workflows/specs.md +257 -257
  167. package/skills/workflows/triage-sprint.md +102 -102
  168. package/skills/workflows/triage.md +152 -152
  169. package/skills/workflows/work.md +399 -399
  170. package/skills/workflows/xcode-test.md +93 -93
@@ -35,49 +35,49 @@ export async function createTodo(priority, title, problemStatement, criteriaArgs
35
35
  const filename = `${nextId}-pending-${priority}-${sanitizedDesc}.md`;
36
36
  const filePath = path.join(todosDir, filename);
37
37
  const dateStr = new Date().toISOString().split('T')[0];
38
- let content = `---
39
- status: pending
40
- priority: ${priority}
41
- issue_id: "${nextId}"
42
- tags: [generated, cleanup]
43
- dependencies: []
44
- ---
45
-
46
- # ${title}
47
-
48
- ## Problem Statement
49
-
50
- **What's broken/missing:**
51
- ${problemStatement}
52
-
53
- **Impact:**
54
- This issue currently affects the system quality or functionality and needs to be addressed.
55
-
56
- ## Findings
57
- - **Status:** Identified during workflow execution.
58
- - **Priority:** ${priority}
59
- - **System Impact:** This item is tracked to ensure continuous improvement of the codebase. Addressing it will contribute to overall system stability and feature completeness. The findings section provides context on origin and importance.
60
-
61
- ## Recommended Action
62
- Implement the solution according to the acceptance criteria below.
63
-
64
- ## Acceptance Criteria
38
+ let content = `---
39
+ status: pending
40
+ priority: ${priority}
41
+ issue_id: "${nextId}"
42
+ tags: [generated, cleanup]
43
+ dependencies: []
44
+ ---
45
+
46
+ # ${title}
47
+
48
+ ## Problem Statement
49
+
50
+ **What's broken/missing:**
51
+ ${problemStatement}
52
+
53
+ **Impact:**
54
+ This issue currently affects the system quality or functionality and needs to be addressed.
55
+
56
+ ## Findings
57
+ - **Status:** Identified during workflow execution.
58
+ - **Priority:** ${priority}
59
+ - **System Impact:** This item is tracked to ensure continuous improvement of the codebase. Addressing it will contribute to overall system stability and feature completeness. The findings section provides context on origin and importance.
60
+
61
+ ## Recommended Action
62
+ Implement the solution according to the acceptance criteria below.
63
+
64
+ ## Acceptance Criteria
65
65
  `;
66
66
  for (const criteria of criteriaArgs) {
67
67
  content += `- [ ] ${criteria}\n`;
68
68
  }
69
- content += `
70
-
71
- ## Work Log
72
-
73
- ### ${dateStr} - Created
74
-
75
- **By:** Agent
76
- **Actions:**
77
- - Auto-generated via createTodo MCP tool
78
-
79
- ## Notes
80
- Source: Workflow automation
69
+ content += `
70
+
71
+ ## Work Log
72
+
73
+ ### ${dateStr} - Created
74
+
75
+ **By:** Agent
76
+ **Actions:**
77
+ - Auto-generated via createTodo MCP tool
78
+
79
+ ## Notes
80
+ Source: Workflow automation
81
81
  `;
82
82
  await fs.writeFile(filePath, content);
83
83
  return `✅ Created todo: ${filePath}\n ID: ${nextId}\n Priority: ${priority}\n Title: ${title}`;
@@ -9,16 +9,16 @@ describe('schemaValidator', () => {
9
9
  });
10
10
  describe('validatePrismaSchema', () => {
11
11
  it('should detect bad model names and missing fields', async () => {
12
- vi.mocked(fs.readFile).mockResolvedValue(`
13
- model user {
14
- name String
15
- }
16
- model Post {
17
- id String @id
18
- userId String
19
- createdAt DateTime
20
- }
21
- enum role { ADMIN, USER }
12
+ vi.mocked(fs.readFile).mockResolvedValue(`
13
+ model user {
14
+ name String
15
+ }
16
+ model Post {
17
+ id String @id
18
+ userId String
19
+ createdAt DateTime
20
+ }
21
+ enum role { ADMIN, USER }
22
22
  `);
23
23
  const issues = await validatePrismaSchema('/mock.prisma');
24
24
  expect(issues.some(i => i.includes("Model 'user' should be PascalCase"))).toBe(true);
@@ -47,11 +47,11 @@ describe('apiValidator', () => {
47
47
  });
48
48
  describe('checkApiCode', () => {
49
49
  it('should detect missing api practices', async () => {
50
- vi.mocked(fs.readFile).mockResolvedValue(`
51
- function handler() {
52
- // no try, no status, no security check
53
- return "hello";
54
- }
50
+ vi.mocked(fs.readFile).mockResolvedValue(`
51
+ function handler() {
52
+ // no try, no status, no security check
53
+ return "hello";
54
+ }
55
55
  `);
56
56
  const res = await checkApiCode('route.ts');
57
57
  expect(res.issues.some(i => i.includes('No error handling'))).toBe(true);
@@ -59,14 +59,14 @@ describe('apiValidator', () => {
59
59
  expect(res.passed.length).toBe(0);
60
60
  });
61
61
  it('should pass good practices', async () => {
62
- vi.mocked(fs.readFile).mockResolvedValue(`
63
- import { z } from 'zod';
64
- function handler(req, res) {
65
- try {
66
- const jwtToken = "123";
67
- return res.status(200).send("hello");
68
- } catch(e) {}
69
- }
62
+ vi.mocked(fs.readFile).mockResolvedValue(`
63
+ import { z } from 'zod';
64
+ function handler(req, res) {
65
+ try {
66
+ const jwtToken = "123";
67
+ return res.status(200).send("hello");
68
+ } catch(e) {}
69
+ }
70
70
  `);
71
71
  const res = await checkApiCode('route.ts');
72
72
  expect(res.passed.some(i => i.includes('Error handling'))).toBe(true);
@@ -15,11 +15,11 @@ describe('convertRules', () => {
15
15
  it('should correctly parse frontmatter and generate rules', async () => {
16
16
  vi.mocked(fs.stat).mockResolvedValue({ isDirectory: () => true });
17
17
  vi.mocked(fs.readdir).mockResolvedValue(['async-waterfall.md']);
18
- vi.mocked(fs.readFile).mockResolvedValue(`---
19
- title: Waterfall check
20
- impact: HIGH
21
- tags: perf
22
- ---
18
+ vi.mocked(fs.readFile).mockResolvedValue(`---
19
+ title: Waterfall check
20
+ impact: HIGH
21
+ tags: perf
22
+ ---
23
23
  Content body of the rule here.`);
24
24
  vi.mocked(fs.mkdir).mockResolvedValue(undefined);
25
25
  vi.mocked(fs.writeFile).mockResolvedValue(undefined);
@@ -9,20 +9,20 @@ describe('accessibilityChecker', () => {
9
9
  });
10
10
  describe('checkAccessibility', () => {
11
11
  it('should detect input without label and img without alt', async () => {
12
- vi.mocked(fs.readFile).mockResolvedValue(`
13
- <input type="text" name="bad" />
14
- <button>Click me</button>
12
+ vi.mocked(fs.readFile).mockResolvedValue(`
13
+ <input type="text" name="bad" />
14
+ <button>Click me</button>
15
15
  `);
16
16
  const issues = await checkAccessibility('test.html');
17
17
  expect(issues.some(i => i.includes('Input without label'))).toBe(true);
18
18
  expect(issues.some(i => i.includes('Missing lang'))).toBe(false); // only checks if <html> exists
19
19
  });
20
20
  it('should pass good inputs', async () => {
21
- vi.mocked(fs.readFile).mockResolvedValue(`
22
- <html lang="en">
23
- <input type="text" aria-label="Good" />
24
- <button aria-label="Close">X</button>
25
- </html>
21
+ vi.mocked(fs.readFile).mockResolvedValue(`
22
+ <html lang="en">
23
+ <input type="text" aria-label="Good" />
24
+ <button aria-label="Close">X</button>
25
+ </html>
26
26
  `);
27
27
  const issues = await checkAccessibility('test.html');
28
28
  expect(issues).toEqual([]); // Skip link is only requested if <main> or <body> is present
@@ -39,10 +39,10 @@ describe('uxAudit', () => {
39
39
  name: 'test.tsx',
40
40
  isDirectory: () => false
41
41
  }]);
42
- vi.mocked(fs.readFile).mockResolvedValue(`
43
- <button onClick={() => {}}>Submit</button>
44
- <img src="foo.jpg">
45
- <p style="color: #000000; font-family: purple;">Hello</p>
42
+ vi.mocked(fs.readFile).mockResolvedValue(`
43
+ <button onClick={() => {}}>Submit</button>
44
+ <img src="foo.jpg">
45
+ <p style="color: #000000; font-family: purple;">Hello</p>
46
46
  `);
47
47
  const res = await runUxAudit('.');
48
48
  expect(res.passed).toBe(false);
@@ -8,21 +8,21 @@ describe('geoChecker', () => {
8
8
  });
9
9
  describe('checkGeoPage', () => {
10
10
  it('should detect structured schema and H1s', async () => {
11
- vi.mocked(fs.readFile).mockResolvedValue(`
12
- <html lang="en">
13
- <head>
14
- <script type="application/ld+json">
15
- {
16
- "@type": "Article",
17
- "author": "Test Author"
18
- }
19
- </script>
20
- </head>
21
- <body>
22
- <h1>Main Title</h1>
23
- <p>Some content with numbers like 50% and $100.</p>
24
- </body>
25
- </html>
11
+ vi.mocked(fs.readFile).mockResolvedValue(`
12
+ <html lang="en">
13
+ <head>
14
+ <script type="application/ld+json">
15
+ {
16
+ "@type": "Article",
17
+ "author": "Test Author"
18
+ }
19
+ </script>
20
+ </head>
21
+ <body>
22
+ <h1>Main Title</h1>
23
+ <p>Some content with numbers like 50% and $100.</p>
24
+ </body>
25
+ </html>
26
26
  `);
27
27
  const result = await checkGeoPage('/mock/page.html');
28
28
  expect(result.passed.some(m => m.includes('JSON-LD structured data'))).toBe(true);
@@ -31,10 +31,10 @@ describe('geoChecker', () => {
31
31
  expect(result.score).toBeGreaterThan(0);
32
32
  });
33
33
  it('should flag missing structural tags', async () => {
34
- vi.mocked(fs.readFile).mockResolvedValue(`
35
- <body>
36
- <p>No headings, no structure, no stats.</p>
37
- </body>
34
+ vi.mocked(fs.readFile).mockResolvedValue(`
35
+ <body>
36
+ <p>No headings, no structure, no stats.</p>
37
+ </body>
38
38
  `);
39
39
  const result = await checkGeoPage('/mock/bad.html');
40
40
  expect(result.issues.some(m => m.includes('No JSON-LD'))).toBe(true);
@@ -11,16 +11,16 @@ describe('mobileAudit', () => {
11
11
  name: 'Screen.tsx',
12
12
  isDirectory: () => false
13
13
  }]);
14
- vi.mocked(fs.readFile).mockResolvedValue(`
15
- import React from 'react';
16
- import { View, ScrollView } from 'react-native';
17
- export const Screen = () => {
18
- return (
19
- <ScrollView>
20
- {data.map(d => <View key={index} />)}
21
- </ScrollView>
22
- )
23
- }
14
+ vi.mocked(fs.readFile).mockResolvedValue(`
15
+ import React from 'react';
16
+ import { View, ScrollView } from 'react-native';
17
+ export const Screen = () => {
18
+ return (
19
+ <ScrollView>
20
+ {data.map(d => <View key={index} />)}
21
+ </ScrollView>
22
+ )
23
+ }
24
24
  `);
25
25
  const res = await runMobileAudit('.');
26
26
  expect(res.passed).toBe(false);
@@ -31,8 +31,8 @@ describe('mobileAudit', () => {
31
31
  name: 'regular.tsx',
32
32
  isDirectory: () => false
33
33
  }]);
34
- vi.mocked(fs.readFile).mockResolvedValue(`
35
- export const App = () => <div>Hello Web</div>
34
+ vi.mocked(fs.readFile).mockResolvedValue(`
35
+ export const App = () => <div>Hello Web</div>
36
36
  `);
37
37
  const res = await runMobileAudit('.');
38
38
  expect(res.passed).toBe(true);
@@ -11,14 +11,14 @@ describe('reactPerformanceChecker', () => {
11
11
  name: 'Home.tsx',
12
12
  isDirectory: () => false
13
13
  }]);
14
- vi.mocked(fs.readFile).mockResolvedValue(`
15
- import { something } from '@/components/index';
16
-
17
- async function loadData() {
18
- const a = await fetchA();
19
- const b = await fetchB();
20
- return { a, b };
21
- }
14
+ vi.mocked(fs.readFile).mockResolvedValue(`
15
+ import { something } from '@/components/index';
16
+
17
+ async function loadData() {
18
+ const a = await fetchA();
19
+ const b = await fetchB();
20
+ return { a, b };
21
+ }
22
22
  `);
23
23
  const res = await runReactPerformanceChecker('.');
24
24
  console.log("RPC BAD REPORT:", res.report);
@@ -31,15 +31,15 @@ describe('reactPerformanceChecker', () => {
31
31
  name: 'App.tsx',
32
32
  isDirectory: () => false
33
33
  }]);
34
- vi.mocked(fs.readFile).mockResolvedValue(`
35
- import { useQuery } from '@tanstack/react-query';
36
- import Image from 'next/image';
37
-
38
- const App = React.memo((props: Props) => {
39
- const q = useQuery('data', fetchParallel);
40
- return <Image src="foo" alt="bar" />
41
- });
42
- export default App;
34
+ vi.mocked(fs.readFile).mockResolvedValue(`
35
+ import { useQuery } from '@tanstack/react-query';
36
+ import Image from 'next/image';
37
+
38
+ const App = React.memo((props: Props) => {
39
+ const q = useQuery('data', fetchParallel);
40
+ return <Image src="foo" alt="bar" />
41
+ });
42
+ export default App;
43
43
  `);
44
44
  const res = await runReactPerformanceChecker('.');
45
45
  console.log("RPC GOOD REPORT:", res.report);
@@ -13,8 +13,8 @@ describe('securityScan', () => {
13
13
  name: 'config.json',
14
14
  isDirectory: () => false
15
15
  }]);
16
- vi.mocked(fs.readFile).mockResolvedValue(`
17
- { "aws_key": "AKIA1234567890123456" }
16
+ vi.mocked(fs.readFile).mockResolvedValue(`
17
+ { "aws_key": "AKIA1234567890123456" }
18
18
  `);
19
19
  const result = await scanSecrets('/mock');
20
20
  expect(result.findings).toBeDefined();
@@ -28,10 +28,10 @@ describe('securityScan', () => {
28
28
  name: 'bad_code.js',
29
29
  isDirectory: () => false
30
30
  }]);
31
- vi.mocked(fs.readFile).mockResolvedValue(`
32
- eval('2 + 2');
33
- import { exec } from 'child_process';
34
- child_process.exec('rm -rf /');
31
+ vi.mocked(fs.readFile).mockResolvedValue(`
32
+ eval('2 + 2');
33
+ import { exec } from 'child_process';
34
+ child_process.exec('rm -rf /');
35
35
  `);
36
36
  const result = await scanCodePatterns('/mock');
37
37
  expect(result.findings.length).toBeGreaterThan(1);
@@ -11,22 +11,22 @@ describe('seoChecker', () => {
11
11
  name: 'index.tsx', // valid page layout file
12
12
  isDirectory: () => false
13
13
  }]);
14
- vi.mocked(fs.readFile).mockResolvedValue(`
15
- export default function Index() {
16
- return (
17
- <html>
18
- <head>
19
- <title>Oops missing description and og</title>
20
- </head>
21
- <body>
22
- <h1>Title</h1>
23
- <h1>Duplicate Title</h1>
24
- <img src="foo" />
25
- <img src="bar" alt="" />
26
- </body>
27
- </html>
28
- )
29
- }
14
+ vi.mocked(fs.readFile).mockResolvedValue(`
15
+ export default function Index() {
16
+ return (
17
+ <html>
18
+ <head>
19
+ <title>Oops missing description and og</title>
20
+ </head>
21
+ <body>
22
+ <h1>Title</h1>
23
+ <h1>Duplicate Title</h1>
24
+ <img src="foo" />
25
+ <img src="bar" alt="" />
26
+ </body>
27
+ </html>
28
+ )
29
+ }
30
30
  `);
31
31
  const res = await runSeoChecker('.');
32
32
  expect(res.passed).toBe(false);
@@ -14,9 +14,9 @@ describe('typeCoverage', () => {
14
14
  isDirectory: () => false
15
15
  }]);
16
16
  // Mock readFile to return a snippet with an untyped function and an "any"
17
- vi.mocked(fs.readFile).mockResolvedValue(`
18
- function test(): any { return 1; }
19
- const test2 = (x) => console.log(x);
17
+ vi.mocked(fs.readFile).mockResolvedValue(`
18
+ function test(): any { return 1; }
19
+ const test2 = (x) => console.log(x);
20
20
  `);
21
21
  const result = await checkTypescriptCoverage('/mock/folder');
22
22
  expect(result.type).toBe('typescript');
@@ -29,8 +29,8 @@ describe('typeCoverage', () => {
29
29
  name: 'good.ts',
30
30
  isDirectory: () => false
31
31
  }]);
32
- vi.mocked(fs.readFile).mockResolvedValue(`
33
- function typedFunc(val: string): number { return val.length; }
32
+ vi.mocked(fs.readFile).mockResolvedValue(`
33
+ function typedFunc(val: string): number { return val.length; }
34
34
  `);
35
35
  const result = await checkTypescriptCoverage('/mock/good');
36
36
  expect(result.stats.any_count).toBe(0);
@@ -44,15 +44,15 @@ describe('typeCoverage', () => {
44
44
  name: 'script.py',
45
45
  isDirectory: () => false
46
46
  }]);
47
- vi.mocked(fs.readFile).mockResolvedValue(`
48
- def bad_func(arg):
49
- pass
50
-
51
- def good_func(arg: str) -> bool:
52
- return True
53
-
54
- def any_func(arg: Any) -> Any:
55
- pass
47
+ vi.mocked(fs.readFile).mockResolvedValue(`
48
+ def bad_func(arg):
49
+ pass
50
+
51
+ def good_func(arg: str) -> bool:
52
+ return True
53
+
54
+ def any_func(arg: Any) -> Any:
55
+ pass
56
56
  `);
57
57
  const result = await checkPythonCoverage('/mock/py');
58
58
  expect(result.stats.any_count).toBeGreaterThan(0);
@@ -135,12 +135,12 @@ async function generateSectionFile(sectionPrefix, rules, outputDir, getOutputOnl
135
135
  }
136
136
  export async function runConvertRules(projectPath = ".") {
137
137
  let report = `============================================================\n`;
138
- report += `CONVERSION SCRIPT: React Best Practices -> .agent Format\n`;
138
+ report += `CONVERSION SCRIPT: React Best Practices -> Skills Format\n`;
139
139
  report += `============================================================\n`;
140
140
  const baseDir = path.resolve(projectPath);
141
141
  // Mimic the python logic for paths if run from anywhere, or adapt to superkit structure
142
142
  const rulesDir = path.join(baseDir, "skills", "react-best-practices", "rules");
143
- const outputDir = path.join(baseDir, ".agent", "skills", "react-best-practices");
143
+ const outputDir = path.join(baseDir, "skills", "react-best-practices");
144
144
  report += `[*] Reading rules from: ${rulesDir}\n[*] Output to: ${outputDir}\n\n`;
145
145
  try {
146
146
  const stat = await fs.stat(rulesDir);