class-ai-agent 1.4.0 → 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.
- package/.agent/README.md +10 -5
- package/.agent/SESSION.md +18 -13
- package/.agent/rules/agent-continuity.md +44 -0
- package/.agent/rules/antigravity-overview.md +38 -0
- package/.agent/rules/api-conventions.md +85 -0
- package/.agent/rules/clean-code.md +211 -0
- package/.agent/rules/code-style.md +92 -0
- package/.agent/rules/codegraph.md +47 -0
- package/.agent/rules/database.md +66 -0
- package/.agent/rules/error-handling.md +98 -0
- package/.agent/rules/git-workflow.md +83 -0
- package/.agent/rules/monitoring.md +317 -0
- package/.agent/rules/naming-conventions.md +266 -0
- package/.agent/rules/project-structure.md +71 -0
- package/.agent/rules/security.md +95 -0
- package/.agent/rules/system-design.md +168 -0
- package/.agent/rules/tech-stack.md +463 -0
- package/.agent/rules/testing.md +110 -0
- package/.agents/agents/backend.md +395 -0
- package/.agents/agents/business-analyst.md +380 -0
- package/.agents/agents/code-reviewer.md +110 -0
- package/.agents/agents/copywriter-seo.md +236 -0
- package/.agents/agents/frontend.md +384 -0
- package/.agents/agents/project-manager.md +201 -0
- package/.agents/agents/qa.md +221 -0
- package/.agents/agents/security-auditor.md +143 -0
- package/.agents/agents/systems-architect.md +211 -0
- package/.agents/agents/test-engineer.md +123 -0
- package/.agents/agents/ui-ux-designer.md +210 -0
- package/.agents/references/accessibility-checklist.md +174 -0
- package/.agents/references/agent-continuity.md +42 -0
- package/.agents/references/codegraph.md +90 -0
- package/.agents/references/mcp-antigravity.md +71 -0
- package/.agents/references/performance-checklist.md +150 -0
- package/.agents/references/security-checklist.md +94 -0
- package/.agents/references/supabase.md +55 -0
- package/.agents/references/testing-patterns.md +183 -0
- package/.agents/skills/agent-continuity/SKILL.md +70 -0
- package/.agents/skills/code-review/SKILL.md +208 -0
- package/.agents/skills/deploy/SKILL.md +68 -0
- package/.agents/skills/deploy/deploy.md +735 -0
- package/.agents/skills/incremental-implementation/SKILL.md +210 -0
- package/.agents/skills/security-review/SKILL.md +71 -0
- package/.agents/skills/supabase/SKILL.md +135 -0
- package/.agents/skills/supabase/UPSTREAM.md +16 -0
- package/.agents/skills/supabase/assets/feedback-issue-template.md +17 -0
- package/.agents/skills/supabase/references/skill-feedback.md +17 -0
- package/.agents/skills/supabase-postgres-best-practices/SKILL.md +64 -0
- package/.agents/skills/supabase-postgres-best-practices/UPSTREAM.md +16 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_contributing.md +170 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/.agents/skills/supabase-postgres-best-practices/references/_template.md +34 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/.agents/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/.agents/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/.agents/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/.agents/skills/supabase-postgres-best-practices/references/security-rls-performance.md +63 -0
- package/.agents/skills/tdd/SKILL.md +217 -0
- package/.agents/skills/ui-ux-pro-max/SKILL.md +288 -0
- package/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/.agents/workflows/build.md +132 -0
- package/.agents/workflows/debug.md +242 -0
- package/.agents/workflows/deploy.md +43 -0
- package/.agents/workflows/fix-issue.md +45 -0
- package/.agents/workflows/handoff.md +93 -0
- package/.agents/workflows/plan.md +125 -0
- package/.agents/workflows/publish-npm.md +122 -0
- package/.agents/workflows/resume.md +106 -0
- package/.agents/workflows/review.md +53 -0
- package/.agents/workflows/simplify.md +221 -0
- package/.agents/workflows/spec.md +95 -0
- package/.agents/workflows/test.md +213 -0
- package/.claude/CLAUDE.md +23 -0
- package/.claude/agents/business-analyst.md +380 -0
- package/.claude/references/codegraph.md +26 -14
- package/.claude/rules/agent-continuity.md +3 -2
- package/.claude/rules/api-conventions.md +1 -0
- package/.claude/rules/clean-code.md +1 -0
- package/.claude/rules/code-style.md +1 -0
- package/.claude/rules/codegraph.md +43 -0
- package/.claude/rules/database.md +2 -1
- package/.claude/rules/error-handling.md +1 -0
- package/.claude/rules/git-workflow.md +1 -0
- package/.claude/rules/monitoring.md +1 -0
- package/.claude/rules/naming-conventions.md +1 -0
- package/.claude/rules/project-structure.md +1 -0
- package/.claude/rules/security.md +1 -0
- package/.claude/rules/system-design.md +1 -0
- package/.claude/rules/tech-stack.md +1 -0
- package/.claude/rules/testing.md +1 -0
- package/.claude/settings.json +3 -1
- package/.claude/skills/ui-ux-pro-max/SKILL.md +1 -90
- package/.cursor/CURSOR.md +1 -1
- package/.cursor/agents/business-analyst.md +380 -0
- package/.cursor/rules/cursor-overview.mdc +4 -3
- package/.cursor/rules/database.mdc +2 -2
- package/.kiro/KIRO.md +3 -3
- package/.kiro/agents/business-analyst.md +380 -0
- package/.kiro/steering/database.md +2 -2
- package/.kiro/steering/kiro-overview.md +2 -2
- package/AGENTS.md +23 -1
- package/GEMINI.md +152 -0
- package/README.md +65 -19
- package/bin/class-ai-agent.cjs +85 -9
- package/package.json +11 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AI Agent Project
|
|
2
2
|
|
|
3
|
-
**Production-grade configuration for [Claude Code](https://code.claude.com/docs), [Cursor](https://cursor.com),
|
|
3
|
+
**Production-grade configuration for [Claude Code](https://code.claude.com/docs), [Cursor](https://cursor.com), [Kiro](https://kiro.dev), and [Antigravity](https://antigravity.google)** — shared rules, specialized agents, workflow prompts, and checklists you can drop into any repository.
|
|
4
4
|
|
|
5
5
|
<div align="center">
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ Open-source AI agent scaffolding by **Royal Solution** — use it in your own pr
|
|
|
18
18
|
<a href="https://www.npmjs.com/package/class-ai-agent"><img src="https://img.shields.io/npm/v/class-ai-agent?label=npm&logo=npm&style=flat-square" alt="npm version" /></a>
|
|
19
19
|
<img src="https://img.shields.io/badge/node-%3E%3D16.7-339933?logo=node.js&logoColor=white&style=flat-square" alt="Node.js 16.7+" />
|
|
20
20
|
<img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License MIT" />
|
|
21
|
-
<img src="https://img.shields.io/badge/version-1.
|
|
21
|
+
<img src="https://img.shields.io/badge/version-1.5.0-blue?style=flat-square" alt="Version" />
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
24
|
</div>
|
|
@@ -51,15 +51,15 @@ Open-source AI agent scaffolding by **Royal Solution** — use it in your own pr
|
|
|
51
51
|
|
|
52
52
|
| You get | Details |
|
|
53
53
|
|--------|---------|
|
|
54
|
-
| **
|
|
54
|
+
| **Four layouts** | **`.claude/`** (Claude Code), **`.cursor/`** (Cursor), **`.kiro/`** (Kiro), **`.agents/`** + **`GEMINI.md`** (Antigravity) |
|
|
55
55
|
| **One workflow** | Spec → Plan → Build → Test → Review → Ship |
|
|
56
|
-
| **
|
|
56
|
+
| **11 agent personas** | Frontend, backend, architect, review, QA, security, BA, PM, UX, SEO, test engineer |
|
|
57
57
|
| **13 topic rules** | Code style, security, API, DB, testing, git, and more (same ideas in both trees) |
|
|
58
58
|
| **`npx` installer** | Copies the folders into your project in one command |
|
|
59
|
-
| **CodeGraph** | MCP + usage rules for Cursor and Kiro; local index via [CodeGraph](https://github.com/colbymchenry/codegraph) |
|
|
60
|
-
| **Agent continuity** | Committed **`.agent/SESSION.md`** — `/resume` and `/handoff` across Cursor, Claude Code, and
|
|
59
|
+
| **CodeGraph** | MCP + usage rules for Cursor and Kiro; Antigravity via user `mcp_config.json`; local index via [CodeGraph](https://github.com/colbymchenry/codegraph) |
|
|
60
|
+
| **Agent continuity** | Committed **`.agent/SESSION.md`** — `/resume` and `/handoff` across Cursor, Claude Code, Kiro, and Antigravity |
|
|
61
61
|
|
|
62
|
-
Root **`AGENTS.md`** links hubs: **`.cursor/CURSOR.md`**, **`.kiro/KIRO.md`**, **`.claude/CLAUDE.md`**.
|
|
62
|
+
Root **`AGENTS.md`** links hubs: **`.cursor/CURSOR.md`**, **`.kiro/KIRO.md`**, **`.claude/CLAUDE.md`**, **`GEMINI.md`**.
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
@@ -74,7 +74,7 @@ When one agent stops and another starts (new chat, different IDE, or teammate),
|
|
|
74
74
|
|
|
75
75
|
**Read order:** `.agent/SESSION.md` → `tasks/todo.md` → `SPEC.md` (from SESSION pointers).
|
|
76
76
|
|
|
77
|
-
Rules: `.cursor/rules/agent-continuity.mdc`, `.claude/rules/agent-continuity.md`, `.kiro/steering/agent-continuity.md`. Reference: `.cursor/references/agent-continuity.md`.
|
|
77
|
+
Rules: `.cursor/rules/agent-continuity.mdc`, `.claude/rules/agent-continuity.md`, `.kiro/steering/agent-continuity.md`, `.agent/rules/agent-continuity.md`. Reference: `.cursor/references/agent-continuity.md`.
|
|
78
78
|
|
|
79
79
|
Do **not** put secrets or PII in `SESSION.md`. See [`.agent/README.md`](.agent/README.md).
|
|
80
80
|
|
|
@@ -103,6 +103,7 @@ npx class-ai-agent --dir /path/to/your/project
|
|
|
103
103
|
npx class-ai-agent --claude
|
|
104
104
|
npx class-ai-agent --cursor
|
|
105
105
|
npx class-ai-agent --kiro
|
|
106
|
+
npx class-ai-agent --antigravity
|
|
106
107
|
npx class-ai-agent --force # overwrite existing
|
|
107
108
|
npx class-ai-agent --help
|
|
108
109
|
```
|
|
@@ -116,7 +117,7 @@ npm exec -- class-ai-agent --dir /path/to/your/project
|
|
|
116
117
|
# or: node bin/class-ai-agent.cjs --dir /path/to/your/project
|
|
117
118
|
```
|
|
118
119
|
|
|
119
|
-
**Manual copy:** copy **`.agent/`**, **`.claude/`**, **`.cursor/`**, **`.kiro/`**, and **`
|
|
120
|
+
**Manual copy:** copy **`.agent/`**, **`.agents/`**, **`.claude/`**, **`.cursor/`**, **`.kiro/`**, **`AGENTS.md`**, and **`GEMINI.md`** into your project root. Copy `.agent/SESSION.template.md` → `.agent/SESSION.md` if needed. Then run `npx @colbymchenry/codegraph init -i` and reload Cursor / restart Kiro / configure Antigravity MCP.
|
|
120
121
|
|
|
121
122
|
---
|
|
122
123
|
|
|
@@ -130,34 +131,36 @@ npm exec -- class-ai-agent --dir /path/to/your/project
|
|
|
130
131
|
| **Cursor** | `.cursor/mcp.json`, `.cursor/rules/codegraph.mdc` — reload window after install |
|
|
131
132
|
| **Kiro** | `.kiro/settings/mcp.json`, `.kiro/steering/codegraph.md` — restart Kiro after install |
|
|
132
133
|
| **Claude Code** | Not wired by this package — `codegraph install --target=claude` (see `.claude/references/codegraph.md`) |
|
|
134
|
+
| **Antigravity** | User `~/.gemini/antigravity/mcp_config.json`, `.agent/rules/codegraph.md` — see `.agents/references/mcp-antigravity.md` |
|
|
133
135
|
| **Manual index** | `npx @colbymchenry/codegraph init -i` if auto-init failed |
|
|
134
|
-
| **Opt-out** | `CODEGRAPH_SKIP_INIT=1` when running `npx class-ai-agent` |
|
|
135
136
|
| **Troubleshooting** | [CodeGraph README](https://github.com/colbymchenry/codegraph#troubleshooting) · `.cursor/references/codegraph.md` |
|
|
137
|
+
| **Opt-out** | `CODEGRAPH_SKIP_INIT=1` when running `npx class-ai-agent` |
|
|
136
138
|
|
|
137
139
|
---
|
|
138
140
|
|
|
139
141
|
## Overview
|
|
140
142
|
|
|
141
|
-
This repo ships **
|
|
143
|
+
This repo ships **four parallel layouts** so you can use the same habits in Claude Code, Cursor, Kiro, and Antigravity:
|
|
142
144
|
|
|
143
145
|
| Layout | Tool | What you use |
|
|
144
146
|
|--------|------|----------------|
|
|
145
147
|
| **`.claude/`** | Claude Code | Slash commands, **`CLAUDE.md`**, rules as **`.md`** |
|
|
146
148
|
| **`.cursor/`** | Cursor | Project rules as **`.mdc`**, hub **`CURSOR.md`**, **`@`** file mentions |
|
|
147
149
|
| **`.kiro/`** | Kiro | **Steering** as **`.md`** in `.kiro/steering/`, hub **`KIRO.md`**, **`.kiro/settings/mcp.json`** |
|
|
150
|
+
| **`.agents/`** + **`GEMINI.md`** | Antigravity | **Workflows** in `.agents/workflows/` (slash commands), **`.agent/rules/`**, root **`AGENTS.md`** |
|
|
148
151
|
|
|
149
152
|
What is inside:
|
|
150
153
|
|
|
151
154
|
- **Structured workflow** (Spec → Plan → Build → Test → Review → Ship)
|
|
152
155
|
- **10 specialized agents** (markdown personas under `agents/`)
|
|
153
|
-
- **13 mandatory topic rules** (plus **`cursor-overview.mdc`** under `.cursor/rules/`)
|
|
156
|
+
- **13 mandatory topic rules** (plus **`cursor-overview.mdc`**, **`codegraph.mdc`**, and **`agent-continuity.mdc`** under `.cursor/rules/`)
|
|
154
157
|
- **11 workflow prompts** under `commands/` (includes `handoff`, `resume`)
|
|
155
158
|
- **9 skills** (TDD, code review, incremental implementation, deploy, security review, agent continuity, UI/UX Pro Max, **supabase**, **supabase-postgres-best-practices**)
|
|
156
159
|
- **7 reference docs** (security, testing, performance, accessibility, codegraph, agent-continuity, **supabase**)
|
|
157
160
|
- **`.agent/SESSION.md`** for cross-tool session handoff
|
|
158
|
-
- **CodeGraph + Supabase MCP** for Cursor and Kiro (`.cursor/mcp.json`, `.kiro/settings/mcp.json`)
|
|
161
|
+
- **CodeGraph + Supabase MCP** for Cursor and Kiro (`.cursor/mcp.json`, `.kiro/settings/mcp.json`); Antigravity via user `mcp_config.json` (example in `.agents/references/mcp-antigravity.md`)
|
|
159
162
|
|
|
160
|
-
Keep **`.claude/`**, **`.cursor/`**,
|
|
163
|
+
Keep **`.claude/`**, **`.cursor/`**, **`.kiro/`**, and the Antigravity layout in sync when you change standards. After editing `.cursor/` (canonical), run **`npm run sync:all`** to refresh `.claude/`, `.kiro/`, `.agents/`, `.agent/rules/`, and `GEMINI.md`.
|
|
161
164
|
|
|
162
165
|
---
|
|
163
166
|
|
|
@@ -193,9 +196,32 @@ At session boundaries, use **`/handoff`** before switching tools and **`/resume`
|
|
|
193
196
|
.agent/
|
|
194
197
|
├── README.md
|
|
195
198
|
├── SESSION.md # Live handoff (committed; seeded on install)
|
|
196
|
-
|
|
199
|
+
├── SESSION.template.md # Schema reference
|
|
200
|
+
└── rules/ # Antigravity supplement rules (synced from .cursor/rules/)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### `.agents/` + `GEMINI.md` (Antigravity)
|
|
204
|
+
|
|
205
|
+
Mirrors `.cursor/` for skills, agents, and references. Commands become **workflows** (slash commands):
|
|
206
|
+
|
|
207
|
+
| Item | Role |
|
|
208
|
+
|------|------|
|
|
209
|
+
| **`GEMINI.md`** | Hub (Antigravity-specific; overrides `AGENTS.md` when rules conflict) |
|
|
210
|
+
| **`workflows/*.md`** | Slash-command workflows (`/build`, `/resume`, …) |
|
|
211
|
+
| **`skills/`**, **`agents/`**, **`references/`** | Same content as `.cursor/` (path-rewritten) |
|
|
212
|
+
| **`.agent/rules/`** | Supplement rules (`trigger: always_on` / `glob`) |
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
.agents/
|
|
216
|
+
├── workflows/ # 12 workflows (from .cursor/commands/)
|
|
217
|
+
├── agents/
|
|
218
|
+
├── skills/
|
|
219
|
+
└── references/ # includes mcp-antigravity.md
|
|
220
|
+
GEMINI.md # Antigravity hub (repo root)
|
|
197
221
|
```
|
|
198
222
|
|
|
223
|
+
MCP is **user-level**: `~/.gemini/antigravity/mcp_config.json` — see `.agents/references/mcp-antigravity.md`.
|
|
224
|
+
|
|
199
225
|
### `.claude/` (Claude Code)
|
|
200
226
|
|
|
201
227
|
```
|
|
@@ -203,7 +229,7 @@ At session boundaries, use **`/handoff`** before switching tools and **`/resume`
|
|
|
203
229
|
├── CLAUDE.md # Main configuration
|
|
204
230
|
├── commands/ # 11 workflow prompts (spec, plan, build, handoff, resume, …)
|
|
205
231
|
├── agents/ # 10 personas
|
|
206
|
-
├── rules/ #
|
|
232
|
+
├── rules/ # 15 mandatory topic rules (.md, synced from .cursor/)
|
|
207
233
|
├── skills/ # TDD, review, deploy, …
|
|
208
234
|
├── references/ # Checklists + codegraph.md
|
|
209
235
|
└── settings.json
|
|
@@ -259,7 +285,7 @@ Mirrors `.cursor/` for `commands/`, `agents/`, `skills/`, `references/`. Kiro us
|
|
|
259
285
|
└── references/
|
|
260
286
|
```
|
|
261
287
|
|
|
262
|
-
Regenerate from `.cursor/` after rule changes: `npm run sync:
|
|
288
|
+
Regenerate from `.cursor/` after rule changes: `npm run sync:all`.
|
|
263
289
|
|
|
264
290
|
### Skill notes
|
|
265
291
|
|
|
@@ -330,7 +356,11 @@ Use **`.claude/rules/*.md`** or **`.cursor/rules/*.mdc`** (paired content; Curso
|
|
|
330
356
|
|
|
331
357
|
**Cursor** — prompts live under **`.cursor/commands/`**. Open the file, copy the section you need, or **`@`** it (e.g. `@.cursor/commands/spec.md`).
|
|
332
358
|
|
|
333
|
-
**
|
|
359
|
+
**Kiro** — prompts live under **`.kiro/commands/`**. Open the file, paste or attach in chat, or reference it when running a slash workflow. Restart Kiro after install so MCP (CodeGraph, Supabase) connects.
|
|
360
|
+
|
|
361
|
+
**Antigravity** — use slash workflows (`/build`, `/spec`, …) or open **`.agents/workflows/*.md`**. Read **`GEMINI.md`** for the hub. Configure MCP via **Manage MCP Servers** (see `.agents/references/mcp-antigravity.md`).
|
|
362
|
+
|
|
363
|
+
**Agents** — describe the role in natural language, or **`@`** (Cursor) / reference (Claude, Kiro, Antigravity) an agent file, e.g. `@.cursor/agents/code-reviewer.md` or `.agents/agents/code-reviewer.md`.
|
|
334
364
|
|
|
335
365
|
---
|
|
336
366
|
|
|
@@ -364,6 +394,22 @@ Ship thin end-to-end slices (DB + API + UI), not “all models first, then all r
|
|
|
364
394
|
|
|
365
395
|
## Release notes
|
|
366
396
|
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
### 1.5.0 — 2026-06-17
|
|
402
|
+
|
|
403
|
+
- Add Google Antigravity IDE support: `GEMINI.md` hub, `.agents/` workflows/skills/agents, `.agent/rules/` supplement rules
|
|
404
|
+
- New `sync-antigravity-from-cursor.mjs` wired into `npm run sync:all` with parity checks
|
|
405
|
+
- CLI `--antigravity` flag; safe merge of `.agent/rules/` without overwriting `SESSION.md`
|
|
406
|
+
- MCP setup reference at `.agents/references/mcp-antigravity.md` (user-level `mcp_config.json`)
|
|
407
|
+
|
|
408
|
+
### 1.4.1 — 2026-06-17
|
|
409
|
+
|
|
410
|
+
- Add **Business Analyst** agent persona (BABOK v3) for Cursor, Claude Code, and Kiro
|
|
411
|
+
- Document Business Analyst in hub agent tables (`.cursor/CURSOR.md`, `.claude/CLAUDE.md`, `.kiro/KIRO.md`)
|
|
412
|
+
|
|
367
413
|
### 1.4.0 — 2026-06-02
|
|
368
414
|
|
|
369
415
|
- Bundle official **Supabase Agent Skills** (`supabase`, `supabase-postgres-best-practices`) for Cursor, Claude Code, and Kiro
|
|
@@ -384,7 +430,7 @@ Ship thin end-to-end slices (DB + API + UI), not “all models first, then all r
|
|
|
384
430
|
2. Keep tests green.
|
|
385
431
|
3. Run **`/review`** before opening a PR.
|
|
386
432
|
4. Use [conventional commits](https://www.conventionalcommits.org/).
|
|
387
|
-
5. Update **`.
|
|
433
|
+
5. Update **`.cursor/`** when rules or workflows change, then run **`npm run sync:all`** to refresh `.claude/`, `.kiro/`, and Antigravity layout; run **`npm run sync:supabase-skills`** to refresh vendored Supabase skills.
|
|
388
434
|
|
|
389
435
|
---
|
|
390
436
|
|
package/bin/class-ai-agent.cjs
CHANGED
|
@@ -13,7 +13,7 @@ function readPkg() {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
function printHelp() {
|
|
16
|
-
console.log(`class-ai-agent — Install Claude Code, Cursor &
|
|
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)
|
|
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 =
|
|
212
|
-
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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
|
-
"description": "Production-grade AI agent configuration for Claude Code, Cursor &
|
|
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,17 +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",
|
|
47
|
+
"sync:claude": "node scripts/sync-claude-from-cursor.mjs",
|
|
48
|
+
"sync:antigravity": "node scripts/sync-antigravity-from-cursor.mjs",
|
|
49
|
+
"sync:all": "node scripts/sync-all.mjs",
|
|
43
50
|
"sync:supabase-skills": "node scripts/sync-supabase-skills.mjs",
|
|
44
51
|
"release:readme": "node scripts/update-readme-release.mjs",
|
|
45
|
-
"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('.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');\""
|
|
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"
|
|
46
53
|
}
|
|
47
54
|
}
|