class-ai-agent 1.4.1 → 1.5.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 (130) hide show
  1. package/.agent/README.md +10 -5
  2. package/.agent/rules/agent-continuity.md +44 -0
  3. package/.agent/rules/antigravity-overview.md +38 -0
  4. package/.agent/rules/api-conventions.md +85 -0
  5. package/.agent/rules/clean-code.md +211 -0
  6. package/.agent/rules/code-style.md +92 -0
  7. package/.agent/rules/codegraph.md +47 -0
  8. package/.agent/rules/database.md +66 -0
  9. package/.agent/rules/error-handling.md +98 -0
  10. package/.agent/rules/git-workflow.md +83 -0
  11. package/.agent/rules/monitoring.md +317 -0
  12. package/.agent/rules/naming-conventions.md +266 -0
  13. package/.agent/rules/project-structure.md +71 -0
  14. package/.agent/rules/security.md +95 -0
  15. package/.agent/rules/system-design.md +168 -0
  16. package/.agent/rules/tech-stack.md +463 -0
  17. package/.agent/rules/testing.md +110 -0
  18. package/.agents/agents/backend.md +395 -0
  19. package/.agents/agents/business-analyst.md +380 -0
  20. package/.agents/agents/code-reviewer.md +110 -0
  21. package/.agents/agents/copywriter-seo.md +236 -0
  22. package/.agents/agents/frontend.md +384 -0
  23. package/.agents/agents/project-manager.md +201 -0
  24. package/.agents/agents/qa.md +221 -0
  25. package/.agents/agents/security-auditor.md +143 -0
  26. package/.agents/agents/systems-architect.md +211 -0
  27. package/.agents/agents/test-engineer.md +123 -0
  28. package/.agents/agents/ui-ux-designer.md +210 -0
  29. package/.agents/references/accessibility-checklist.md +174 -0
  30. package/.agents/references/agent-continuity.md +42 -0
  31. package/.agents/references/codegraph.md +90 -0
  32. package/.agents/references/mcp-antigravity.md +71 -0
  33. package/.agents/references/performance-checklist.md +150 -0
  34. package/.agents/references/security-checklist.md +94 -0
  35. package/.agents/references/supabase.md +55 -0
  36. package/.agents/references/testing-patterns.md +183 -0
  37. package/.agents/skills/agent-continuity/SKILL.md +70 -0
  38. package/.agents/skills/code-review/SKILL.md +208 -0
  39. package/.agents/skills/deploy/SKILL.md +68 -0
  40. package/.agents/skills/deploy/deploy.md +735 -0
  41. package/.agents/skills/incremental-implementation/SKILL.md +210 -0
  42. package/.agents/skills/security-review/SKILL.md +71 -0
  43. package/.agents/skills/supabase/SKILL.md +135 -0
  44. package/.agents/skills/supabase/UPSTREAM.md +16 -0
  45. package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
  46. package/.agents/skills/supabase/references/skill-feedback.md +17 -0
  47. package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  48. package/.agents/skills/supabase-postgres-best-practices/UPSTREAM.md +16 -0
  49. package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
  50. package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
  51. package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
  52. package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
  53. package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
  54. package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
  55. package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
  56. package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
  57. package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
  58. package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
  59. package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
  60. package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
  61. package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
  62. package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
  63. package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
  64. package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
  65. package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
  66. package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
  67. package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
  68. package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
  69. package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
  70. package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
  71. package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
  72. package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
  73. package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
  74. package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
  75. package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
  76. package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
  77. package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
  78. package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
  79. package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
  80. package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
  81. package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
  82. package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
  83. package/.agents/skills/tdd/SKILL.md +217 -0
  84. package/.agents/skills/ui-ux-pro-max/SKILL.md +288 -0
  85. package/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
  86. package/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
  87. package/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
  88. package/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
  89. package/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
  90. package/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  91. package/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  92. package/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  93. package/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  94. package/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  95. package/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  96. package/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  97. package/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  98. package/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  99. package/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  100. package/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  101. package/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  102. package/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  103. package/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  104. package/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
  105. package/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
  106. package/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  107. package/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  108. package/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  109. package/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
  110. package/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  111. package/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
  112. package/.agents/workflows/build.md +132 -0
  113. package/.agents/workflows/debug.md +242 -0
  114. package/.agents/workflows/deploy.md +43 -0
  115. package/.agents/workflows/fix-issue.md +45 -0
  116. package/.agents/workflows/handoff.md +93 -0
  117. package/.agents/workflows/plan.md +125 -0
  118. package/.agents/workflows/publish-npm.md +122 -0
  119. package/.agents/workflows/resume.md +106 -0
  120. package/.agents/workflows/review.md +53 -0
  121. package/.agents/workflows/simplify.md +221 -0
  122. package/.agents/workflows/spec.md +95 -0
  123. package/.agents/workflows/test.md +213 -0
  124. package/.cursor/rules/cursor-overview.mdc +3 -2
  125. package/.kiro/steering/kiro-overview.md +2 -2
  126. package/AGENTS.md +4 -1
  127. package/GEMINI.md +152 -0
  128. package/README.md +52 -15
  129. package/bin/class-ai-agent.cjs +85 -9
  130. package/package.json +9 -4
@@ -13,7 +13,7 @@ function readPkg() {
13
13
  }
14
14
 
15
15
  function printHelp() {
16
- console.log(`class-ai-agent — Install Claude Code, Cursor & Kiro AI agent scaffolding
16
+ console.log(`class-ai-agent — Install Claude Code, Cursor, Kiro & Antigravity AI agent scaffolding
17
17
 
18
18
  Usage:
19
19
  npx class-ai-agent [init] [options]
@@ -23,15 +23,17 @@ Options:
23
23
  --claude Install only .claude/
24
24
  --cursor Install only .cursor/
25
25
  --kiro Install only .kiro/
26
+ --antigravity Install only .agents/, .agent/rules/, GEMINI.md
26
27
  -f, --force Overwrite existing files or directories
27
28
  -h, --help Show help
28
29
  -v, --version Print version
29
30
 
30
- AGENTS.md is installed with --cursor, --kiro, or a full install (no --*-only flags).
31
+ AGENTS.md is installed with --cursor, --kiro, --antigravity, or a full install (no --*-only flags).
31
32
 
32
33
  .agent/:
33
34
  Cross-tool session handoff (.agent/SESSION.md). Seeded from template on install;
34
35
  existing SESSION.md is never overwritten unless you use --force on .agent/.
36
+ Antigravity supplement rules live in .agent/rules/ (merged on install).
35
37
 
36
38
  CodeGraph:
37
39
  After install, runs "npx @colbymchenry/codegraph init -i" in the target directory
@@ -40,11 +42,13 @@ CodeGraph:
40
42
  Supabase:
41
43
  Bundled skills under skills/supabase/ and skills/supabase-postgres-best-practices/.
42
44
  MCP: https://mcp.supabase.com/mcp (OAuth on first use). Reload Cursor / restart Kiro after install.
45
+ Antigravity: configure ~/.gemini/antigravity/mcp_config.json (see .agents/references/mcp-antigravity.md).
43
46
 
44
47
  Examples:
45
48
  npx class-ai-agent
46
49
  npx class-ai-agent --dir ./my-app
47
50
  npx class-ai-agent --kiro --force
51
+ npx class-ai-agent --antigravity
48
52
  CODEGRAPH_SKIP_INIT=1 npx class-ai-agent
49
53
  `);
50
54
  }
@@ -56,6 +60,7 @@ function parseArgs(argv) {
56
60
  claudeOnly: false,
57
61
  cursorOnly: false,
58
62
  kiroOnly: false,
63
+ antigravityOnly: false,
59
64
  force: false,
60
65
  help: false,
61
66
  version: false,
@@ -92,6 +97,10 @@ function parseArgs(argv) {
92
97
  opts.kiroOnly = true;
93
98
  continue;
94
99
  }
100
+ if (a === '--antigravity') {
101
+ opts.antigravityOnly = true;
102
+ continue;
103
+ }
95
104
  if (a === '-d' || a === '--dir') {
96
105
  const v = argv[++i];
97
106
  if (!v) {
@@ -129,6 +138,27 @@ function copyDir(src, dest, { force }) {
129
138
  fs.cpSync(src, dest, { recursive: true });
130
139
  }
131
140
 
141
+ function mergeDir(src, dest, { force }) {
142
+ if (!fs.existsSync(src)) {
143
+ console.error(`Error: template missing from package: ${src}`);
144
+ process.exit(1);
145
+ }
146
+ fs.mkdirSync(dest, { recursive: true });
147
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
148
+ const srcPath = path.join(src, entry.name);
149
+ const destPath = path.join(dest, entry.name);
150
+ if (entry.isDirectory()) {
151
+ mergeDir(srcPath, destPath, { force });
152
+ } else if (entry.isFile()) {
153
+ if (fs.existsSync(destPath) && !force) {
154
+ continue;
155
+ }
156
+ ensureParentDir(destPath);
157
+ fs.copyFileSync(srcPath, destPath);
158
+ }
159
+ }
160
+ }
161
+
132
162
  function copyFile(src, dest, { force }) {
133
163
  if (!fs.existsSync(src)) {
134
164
  console.error(`Error: template missing from package: ${src}`);
@@ -183,7 +213,7 @@ function runCodegraphInit(targetDir) {
183
213
  if (result.status === 0) {
184
214
  console.log(`CodeGraph: index ready under ${path.join(targetDir, '.codegraph')}`);
185
215
  console.log(
186
- 'CodeGraph: reload Cursor (.cursor/mcp.json) and/or restart Kiro (.kiro/settings/mcp.json).'
216
+ 'CodeGraph: reload Cursor (.cursor/mcp.json), restart Kiro (.kiro/settings/mcp.json), or configure Antigravity MCP.'
187
217
  );
188
218
  return;
189
219
  }
@@ -201,15 +231,33 @@ function shouldInstallTarget(target, opts) {
201
231
  claude: opts.claudeOnly,
202
232
  cursor: opts.cursorOnly,
203
233
  kiro: opts.kiroOnly,
234
+ antigravity: opts.antigravityOnly,
204
235
  };
205
- const anyOnly = only.claude || only.cursor || only.kiro;
236
+ const anyOnly = only.claude || only.cursor || only.kiro || only.antigravity;
206
237
  if (!anyOnly) return true;
207
238
  return only[target];
208
239
  }
209
240
 
210
241
  function shouldInstallAgentDir(opts) {
211
- const anyOnly = opts.claudeOnly || opts.cursorOnly || opts.kiroOnly;
212
- return !anyOnly;
242
+ const anyOnly =
243
+ opts.claudeOnly || opts.cursorOnly || opts.kiroOnly || opts.antigravityOnly;
244
+ if (!anyOnly) return true;
245
+ return opts.antigravityOnly;
246
+ }
247
+
248
+ function shouldInstallAgentsMd(opts) {
249
+ const anyOnly =
250
+ opts.claudeOnly || opts.cursorOnly || opts.kiroOnly || opts.antigravityOnly;
251
+ if (!anyOnly) return true;
252
+ return opts.cursorOnly || opts.kiroOnly || opts.antigravityOnly;
253
+ }
254
+
255
+ function installAgentRules(targetDir, { force }) {
256
+ const srcRules = path.join(PKG_ROOT, '.agent', 'rules');
257
+ const destRules = path.join(targetDir, '.agent', 'rules');
258
+ if (!fs.existsSync(srcRules)) return;
259
+ mergeDir(srcRules, destRules, { force: true });
260
+ console.log(`Installed: ${destRules}`);
213
261
  }
214
262
 
215
263
  function installAgentContinuity(targetDir, { force }) {
@@ -225,9 +273,15 @@ function installAgentContinuity(targetDir, { force }) {
225
273
 
226
274
  if (fs.existsSync(destDir)) {
227
275
  if (force) {
276
+ const sessionBackup =
277
+ fs.existsSync(sessionDest) ? fs.readFileSync(sessionDest, 'utf8') : null;
228
278
  fs.rmSync(destDir, { recursive: true, force: true });
229
279
  fs.cpSync(srcDir, destDir, { recursive: true });
230
- console.log(`Installed: ${destDir} (overwritten)`);
280
+ if (sessionBackup !== null) {
281
+ fs.writeFileSync(sessionDest, sessionBackup);
282
+ console.log(`Preserved: ${sessionDest} (existing session handoff)`);
283
+ }
284
+ console.log(`Installed: ${destDir} (overwritten; SESSION.md preserved if present)`);
231
285
  } else {
232
286
  const readmeSrc = path.join(srcDir, 'README.md');
233
287
  const readmeDest = path.join(destDir, 'README.md');
@@ -261,7 +315,8 @@ function run(opts) {
261
315
  const installClaude = shouldInstallTarget('claude', opts);
262
316
  const installCursor = shouldInstallTarget('cursor', opts);
263
317
  const installKiro = shouldInstallTarget('kiro', opts);
264
- const installAgents = installCursor || installKiro;
318
+ const installAntigravity = shouldInstallTarget('antigravity', opts);
319
+ const installAgentsMd = shouldInstallAgentsMd(opts);
265
320
 
266
321
  fs.mkdirSync(opts.dir, { recursive: true });
267
322
 
@@ -288,7 +343,19 @@ function run(opts) {
288
343
  console.log(`Installed: ${dest}`);
289
344
  }
290
345
 
291
- if (installAgents) {
346
+ if (installAntigravity) {
347
+ const src = path.join(PKG_ROOT, '.agents');
348
+ const dest = path.join(opts.dir, '.agents');
349
+ copyDir(src, dest, copyOpts);
350
+ console.log(`Installed: ${dest}`);
351
+
352
+ const geminiSrc = path.join(PKG_ROOT, 'GEMINI.md');
353
+ const geminiDest = path.join(opts.dir, 'GEMINI.md');
354
+ copyFile(geminiSrc, geminiDest, copyOpts);
355
+ console.log(`Installed: ${geminiDest}`);
356
+ }
357
+
358
+ if (installAgentsMd) {
292
359
  const src = path.join(PKG_ROOT, 'AGENTS.md');
293
360
  const dest = path.join(opts.dir, 'AGENTS.md');
294
361
  copyFile(src, dest, copyOpts);
@@ -299,6 +366,10 @@ function run(opts) {
299
366
  installAgentContinuity(opts.dir, copyOpts);
300
367
  }
301
368
 
369
+ if (installAntigravity || shouldInstallAgentDir(opts)) {
370
+ installAgentRules(opts.dir, copyOpts);
371
+ }
372
+
302
373
  ensureCodegraphGitignore(opts.dir);
303
374
  runCodegraphInit(opts.dir);
304
375
 
@@ -306,6 +377,7 @@ function run(opts) {
306
377
  if (installClaude) hints.push('.claude/CLAUDE.md');
307
378
  if (installCursor) hints.push('.cursor/CURSOR.md');
308
379
  if (installKiro) hints.push('.kiro/KIRO.md');
380
+ if (installAntigravity) hints.push('GEMINI.md');
309
381
  console.log(`\nDone. Next steps: read ${hints.join(', ')}.`);
310
382
  if (installCursor) {
311
383
  console.log(' Cursor: reload the window so MCP loads (.cursor/mcp.json — CodeGraph + Supabase).');
@@ -315,6 +387,10 @@ function run(opts) {
315
387
  console.log(' Kiro: restart IDE/CLI so MCP loads (.kiro/settings/mcp.json — CodeGraph + Supabase).');
316
388
  console.log(' Supabase: complete OAuth when you first use Supabase MCP tools.');
317
389
  }
390
+ if (installAntigravity) {
391
+ console.log(' Antigravity: configure ~/.gemini/antigravity/mcp_config.json (.agents/references/mcp-antigravity.md).');
392
+ console.log(' Antigravity: use /build, /resume, /handoff workflows; read GEMINI.md for the full hub.');
393
+ }
318
394
  if (shouldInstallAgentDir(opts)) {
319
395
  console.log(' Continuity: edit .agent/SESSION.md at session end (/handoff); read at start (/resume).');
320
396
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "class-ai-agent",
3
- "version": "1.4.1",
4
- "description": "Production-grade AI agent configuration for Claude Code, Cursor & Kiro",
3
+ "version": "1.5.0",
4
+ "description": "Production-grade AI agent configuration for Claude Code, Cursor, Kiro & Antigravity",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -16,6 +16,8 @@
16
16
  "claude-code",
17
17
  "cursor",
18
18
  "kiro",
19
+ "antigravity",
20
+ "gemini",
19
21
  "codegraph",
20
22
  "supabase",
21
23
  "ai",
@@ -31,19 +33,22 @@
31
33
  "files": [
32
34
  "bin",
33
35
  ".agent",
36
+ ".agents",
34
37
  ".claude",
35
38
  ".cursor",
36
39
  ".kiro",
37
40
  "AGENTS.md",
41
+ "GEMINI.md",
38
42
  "royal-solution-logo-v2.svg"
39
43
  ],
40
44
  "scripts": {
41
- "prepack": "node -e \"const fs=require('fs');['.agent','.claude','.cursor','.kiro','AGENTS.md'].forEach(p=>{if(!fs.existsSync(p))process.exit(1)})\"",
45
+ "prepack": "node -e \"const fs=require('fs');['.agent','.agents','.claude','.cursor','.kiro','AGENTS.md','GEMINI.md'].forEach(p=>{if(!fs.existsSync(p))process.exit(1)})\"",
42
46
  "sync:kiro": "node scripts/sync-kiro-from-cursor.mjs",
43
47
  "sync:claude": "node scripts/sync-claude-from-cursor.mjs",
48
+ "sync:antigravity": "node scripts/sync-antigravity-from-cursor.mjs",
44
49
  "sync:all": "node scripts/sync-all.mjs",
45
50
  "sync:supabase-skills": "node scripts/sync-supabase-skills.mjs",
46
51
  "release:readme": "node scripts/update-readme-release.mjs",
47
- "test:cli": "node bin/class-ai-agent.cjs --help && node bin/class-ai-agent.cjs --version && node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('.cursor/mcp.json','utf8'));const k=JSON.parse(fs.readFileSync('.kiro/settings/mcp.json','utf8'));if(!c.mcpServers?.codegraph||!k.mcpServers?.codegraph)throw new Error('missing codegraph MCP');if(!c.mcpServers?.supabase?.url?.includes('mcp.supabase.com')||!k.mcpServers?.supabase?.url?.includes('mcp.supabase.com'))throw new Error('missing supabase MCP');if(!fs.existsSync('.cursor/skills/supabase/SKILL.md')||!fs.existsSync('.cursor/skills/supabase-postgres-best-practices/SKILL.md'))throw new Error('missing supabase skills');if(!fs.existsSync('.claude/skills/supabase/SKILL.md'))throw new Error('missing claude supabase skill');if(!fs.existsSync('.cursor/references/supabase.md'))throw new Error('missing supabase reference');if(!fs.existsSync('scripts/sync-supabase-skills.mjs'))throw new Error('missing sync-supabase-skills');if(!fs.existsSync('.cursor/rules/codegraph.mdc'))throw new Error('missing codegraph.mdc');if(!fs.existsSync('.claude/rules/codegraph.md'))throw new Error('missing claude codegraph rule');if(!fs.existsSync('.kiro/steering/codegraph.md'))throw new Error('missing kiro codegraph steering');if(!fs.existsSync('.agent/SESSION.template.md'))throw new Error('missing SESSION.template');if(!fs.existsSync('.cursor/rules/agent-continuity.mdc'))throw new Error('missing agent-continuity.mdc');if(!fs.existsSync('.kiro/steering/agent-continuity.md'))throw new Error('missing kiro agent-continuity steering');if(!fs.existsSync('.cursor/commands/handoff.md')||!fs.existsSync('.cursor/commands/resume.md'))throw new Error('missing handoff/resume commands');\" && node scripts/check-parity.mjs"
52
+ "test:cli": "node bin/class-ai-agent.cjs --help && node bin/class-ai-agent.cjs --version && node -e \"const fs=require('fs');const c=JSON.parse(fs.readFileSync('.cursor/mcp.json','utf8'));const k=JSON.parse(fs.readFileSync('.kiro/settings/mcp.json','utf8'));if(!c.mcpServers?.codegraph||!k.mcpServers?.codegraph)throw new Error('missing codegraph MCP');if(!c.mcpServers?.supabase?.url?.includes('mcp.supabase.com')||!k.mcpServers?.supabase?.url?.includes('mcp.supabase.com'))throw new Error('missing supabase MCP');if(!fs.existsSync('.cursor/skills/supabase/SKILL.md')||!fs.existsSync('.cursor/skills/supabase-postgres-best-practices/SKILL.md'))throw new Error('missing supabase skills');if(!fs.existsSync('.claude/skills/supabase/SKILL.md'))throw new Error('missing claude supabase skill');if(!fs.existsSync('.agents/skills/supabase/SKILL.md'))throw new Error('missing antigravity supabase skill');if(!fs.existsSync('.cursor/references/supabase.md'))throw new Error('missing supabase reference');if(!fs.existsSync('.agents/references/mcp-antigravity.md'))throw new Error('missing mcp-antigravity reference');if(!fs.existsSync('scripts/sync-supabase-skills.mjs'))throw new Error('missing sync-supabase-skills');if(!fs.existsSync('.cursor/rules/codegraph.mdc'))throw new Error('missing codegraph.mdc');if(!fs.existsSync('.claude/rules/codegraph.md'))throw new Error('missing claude codegraph rule');if(!fs.existsSync('.kiro/steering/codegraph.md'))throw new Error('missing kiro codegraph steering');if(!fs.existsSync('.agent/rules/codegraph.md'))throw new Error('missing antigravity codegraph rule');if(!fs.existsSync('.agent/SESSION.template.md'))throw new Error('missing SESSION.template');if(!fs.existsSync('.cursor/rules/agent-continuity.mdc'))throw new Error('missing agent-continuity.mdc');if(!fs.existsSync('.kiro/steering/agent-continuity.md'))throw new Error('missing kiro agent-continuity steering');if(!fs.existsSync('.agent/rules/agent-continuity.md'))throw new Error('missing antigravity agent-continuity rule');if(!fs.existsSync('.cursor/commands/handoff.md')||!fs.existsSync('.cursor/commands/resume.md'))throw new Error('missing handoff/resume commands');if(!fs.existsSync('.agents/workflows/handoff.md')||!fs.existsSync('.agents/workflows/resume.md'))throw new Error('missing antigravity handoff/resume workflows');if(!fs.existsSync('GEMINI.md'))throw new Error('missing GEMINI.md');if(!fs.existsSync('scripts/sync-antigravity-from-cursor.mjs'))throw new Error('missing sync-antigravity script');\" && node scripts/check-parity.mjs"
48
53
  }
49
54
  }