@mikulgohil/ai-kit 1.7.0 → 1.8.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/README.md CHANGED
@@ -7,7 +7,7 @@ One command. Project-aware AI from the first conversation.
7
7
  [![npm downloads](https://img.shields.io/npm/dm/@mikulgohil/ai-kit.svg)](https://www.npmjs.com/package/@mikulgohil/ai-kit)
8
8
  [![license](https://img.shields.io/npm/l/@mikulgohil/ai-kit.svg)](https://github.com/mikulgohil/ai-kit/blob/main/LICENSE)
9
9
 
10
- > **[Read the full documentation](https://ai-kit-docs-beta.vercel.app/docs)** | [Getting Started](https://ai-kit-docs-beta.vercel.app/docs/getting-started) | [CLI Reference](https://ai-kit-docs-beta.vercel.app/docs/cli-reference) | [Skills & Commands](https://ai-kit-docs-beta.vercel.app/docs/slash-commands) | [Hooks](https://ai-kit-docs-beta.vercel.app/docs/hooks) | [Agents](https://ai-kit-docs-beta.vercel.app/docs/agents) | [Changelog](https://ai-kit-docs-beta.vercel.app/docs/changelog)
10
+ > **[Read the full documentation](https://ai-kit.mikul.me)** | [Getting Started](https://ai-kit.mikul.me/getting-started) | [CLI Reference](https://ai-kit.mikul.me/cli-reference) | [Skills & Commands](https://ai-kit.mikul.me/slash-commands) | [Hooks](https://ai-kit.mikul.me/hooks) | [Agents](https://ai-kit.mikul.me/agents) | [Changelog](https://ai-kit.mikul.me/changelog)
11
11
 
12
12
  ```bash
13
13
  npx @mikulgohil/ai-kit init
@@ -242,17 +242,17 @@ Only content between `AI-KIT:START/END` markers is refreshed. Your custom rules
242
242
 
243
243
  ## Documentation
244
244
 
245
- **[ai-kit-docs-beta.vercel.app/docs](https://ai-kit-docs-beta.vercel.app/docs)**
245
+ **[ai-kit.mikul.me](https://ai-kit.mikul.me)**
246
246
 
247
247
  | Page | What You'll Learn |
248
248
  |---|---|
249
- | [Getting Started](https://ai-kit-docs-beta.vercel.app/docs/getting-started) | Step-by-step setup walkthrough |
250
- | [CLI Reference](https://ai-kit-docs-beta.vercel.app/docs/cli-reference) | All 13 commands with examples |
251
- | [Skills & Commands](https://ai-kit-docs-beta.vercel.app/docs/slash-commands) | All 46 skills with usage guides |
252
- | [What Gets Generated](https://ai-kit-docs-beta.vercel.app/docs/what-gets-generated) | Detailed breakdown of every generated file |
253
- | [Hooks](https://ai-kit-docs-beta.vercel.app/docs/hooks) | Hook profiles, mistakes auto-capture |
254
- | [Agents](https://ai-kit-docs-beta.vercel.app/docs/agents) | 10 specialized agents |
255
- | [Changelog](https://ai-kit-docs-beta.vercel.app/docs/changelog) | Version history and release notes |
249
+ | [Getting Started](https://ai-kit.mikul.me/getting-started) | Step-by-step setup walkthrough |
250
+ | [CLI Reference](https://ai-kit.mikul.me/cli-reference) | All 13 commands with examples |
251
+ | [Skills & Commands](https://ai-kit.mikul.me/slash-commands) | All 46 skills with usage guides |
252
+ | [What Gets Generated](https://ai-kit.mikul.me/what-gets-generated) | Detailed breakdown of every generated file |
253
+ | [Hooks](https://ai-kit.mikul.me/hooks) | Hook profiles, mistakes auto-capture |
254
+ | [Agents](https://ai-kit.mikul.me/agents) | 10 specialized agents |
255
+ | [Changelog](https://ai-kit.mikul.me/changelog) | Version history and release notes |
256
256
 
257
257
  ---
258
258
 
@@ -0,0 +1,284 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://ai-kit.mikul.me/schema/ai-kit.config.schema.json",
4
+ "title": "AI Kit Configuration",
5
+ "description": "Configuration file generated by @mikulgohil/ai-kit. Auto-detected project settings, templates, commands, and tooling preferences.",
6
+ "type": "object",
7
+ "required": [
8
+ "version",
9
+ "scanResult",
10
+ "generatedAt",
11
+ "templates",
12
+ "commands",
13
+ "guides",
14
+ "agents",
15
+ "contexts",
16
+ "hooks",
17
+ "hookProfile",
18
+ "strictness",
19
+ "customFragments",
20
+ "tools"
21
+ ],
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "$schema": {
25
+ "type": "string",
26
+ "description": "Pointer to the JSON Schema for editor validation and autocompletion."
27
+ },
28
+ "version": {
29
+ "type": "string",
30
+ "description": "The ai-kit version that generated this configuration."
31
+ },
32
+ "scanResult": {
33
+ "$ref": "#/definitions/ProjectScan",
34
+ "description": "Auto-detected project metadata from the scan phase."
35
+ },
36
+ "generatedAt": {
37
+ "type": "string",
38
+ "description": "ISO 8601 timestamp of when this configuration was generated."
39
+ },
40
+ "templates": {
41
+ "type": "array",
42
+ "items": { "type": "string" },
43
+ "description": "List of template identifiers selected for this project."
44
+ },
45
+ "commands": {
46
+ "type": "array",
47
+ "items": { "type": "string" },
48
+ "description": "Slash commands generated for the project."
49
+ },
50
+ "guides": {
51
+ "type": "array",
52
+ "items": { "type": "string" },
53
+ "description": "Developer guides generated for the project."
54
+ },
55
+ "agents": {
56
+ "type": "array",
57
+ "items": { "type": "string" },
58
+ "description": "AI agent configurations generated for the project."
59
+ },
60
+ "contexts": {
61
+ "type": "array",
62
+ "items": { "type": "string" },
63
+ "description": "Context mode files generated for the project."
64
+ },
65
+ "hooks": {
66
+ "type": "boolean",
67
+ "description": "Whether Claude Code hooks are enabled."
68
+ },
69
+ "hookProfile": {
70
+ "type": "string",
71
+ "enum": ["minimal", "standard", "strict"],
72
+ "description": "The hook strictness profile controlling which hooks are generated."
73
+ },
74
+ "strictness": {
75
+ "type": "string",
76
+ "enum": ["strict", "standard", "relaxed"],
77
+ "description": "Overall strictness level for generated rules and guidelines."
78
+ },
79
+ "teamProfile": {
80
+ "type": "string",
81
+ "enum": ["solo-dev", "small-team", "enterprise"],
82
+ "description": "Optional team size profile that tailors generated content."
83
+ },
84
+ "customFragments": {
85
+ "type": "array",
86
+ "items": { "type": "string" },
87
+ "description": "User-provided custom rule fragments merged into generated output."
88
+ },
89
+ "tools": {
90
+ "type": "object",
91
+ "description": "Which AI coding tools to generate configuration files for.",
92
+ "required": ["claude", "cursor"],
93
+ "properties": {
94
+ "claude": {
95
+ "type": "boolean",
96
+ "description": "Generate CLAUDE.md and related Claude Code configuration."
97
+ },
98
+ "cursor": {
99
+ "type": "boolean",
100
+ "description": "Generate .cursorrules and related Cursor configuration."
101
+ }
102
+ }
103
+ }
104
+ },
105
+ "definitions": {
106
+ "ProjectScan": {
107
+ "type": "object",
108
+ "description": "Result of the automatic project scan, capturing framework, CMS, styling, tooling, and other detected metadata.",
109
+ "required": [
110
+ "framework",
111
+ "cms",
112
+ "styling",
113
+ "typescript",
114
+ "monorepo",
115
+ "figma",
116
+ "designTokens",
117
+ "staticSite",
118
+ "aiIgnorePatterns",
119
+ "tools",
120
+ "mcpServers",
121
+ "packageManager",
122
+ "projectName",
123
+ "projectPath",
124
+ "scripts"
125
+ ],
126
+ "properties": {
127
+ "framework": {
128
+ "type": "string",
129
+ "enum": ["nextjs", "react", "unknown"]
130
+ },
131
+ "nextjsVersion": {
132
+ "type": "string"
133
+ },
134
+ "routerType": {
135
+ "type": "string",
136
+ "enum": ["app", "pages", "hybrid"]
137
+ },
138
+ "cms": {
139
+ "type": "string",
140
+ "enum": ["sitecore-xmc-v2", "sitecore-xmc", "sitecore-jss", "none"]
141
+ },
142
+ "sitecorejssVersion": {
143
+ "type": "string"
144
+ },
145
+ "sitecoreContentSdkVersion": {
146
+ "type": "string"
147
+ },
148
+ "styling": {
149
+ "type": "array",
150
+ "items": {
151
+ "type": "string",
152
+ "enum": ["tailwind", "css-modules", "styled-components", "scss"]
153
+ }
154
+ },
155
+ "tailwindVersion": {
156
+ "type": "string"
157
+ },
158
+ "typescript": {
159
+ "type": "boolean"
160
+ },
161
+ "typescriptStrict": {
162
+ "type": "boolean"
163
+ },
164
+ "monorepo": {
165
+ "type": "boolean"
166
+ },
167
+ "monorepoTool": {
168
+ "type": "string",
169
+ "enum": ["turborepo", "nx", "lerna", "pnpm-workspaces"]
170
+ },
171
+ "figma": {
172
+ "type": "object",
173
+ "required": ["detected", "figmaMcp", "figmaCodeCli", "designTokens", "tokenFormat", "visualTests"],
174
+ "properties": {
175
+ "detected": { "type": "boolean" },
176
+ "figmaMcp": { "type": "boolean" },
177
+ "figmaCodeCli": { "type": "boolean" },
178
+ "designTokens": { "type": "boolean" },
179
+ "tokenFormat": {
180
+ "type": "string",
181
+ "enum": ["tailwind-v4", "tailwind-v3", "css-variables", "none"]
182
+ },
183
+ "visualTests": { "type": "boolean" }
184
+ }
185
+ },
186
+ "designTokens": {
187
+ "type": "object",
188
+ "required": ["detected", "colors", "spacing", "fonts", "breakpoints", "source"],
189
+ "properties": {
190
+ "detected": { "type": "boolean" },
191
+ "colors": {
192
+ "type": "array",
193
+ "items": { "type": "string" }
194
+ },
195
+ "spacing": {
196
+ "type": "array",
197
+ "items": { "type": "string" }
198
+ },
199
+ "fonts": {
200
+ "type": "array",
201
+ "items": { "type": "string" }
202
+ },
203
+ "breakpoints": {
204
+ "type": "array",
205
+ "items": { "type": "string" }
206
+ },
207
+ "source": {
208
+ "type": "string",
209
+ "enum": ["tailwind-config", "css-variables", "theme-inline", "none"]
210
+ }
211
+ }
212
+ },
213
+ "staticSite": {
214
+ "type": "object",
215
+ "required": ["isStatic", "hasGenerateStaticParams", "hasRevalidate", "hasStaticExport"],
216
+ "properties": {
217
+ "isStatic": { "type": "boolean" },
218
+ "outputMode": {
219
+ "type": "string",
220
+ "enum": ["export", "isr", "ssr", "hybrid"]
221
+ },
222
+ "hasGenerateStaticParams": { "type": "boolean" },
223
+ "hasRevalidate": { "type": "boolean" },
224
+ "hasStaticExport": { "type": "boolean" }
225
+ }
226
+ },
227
+ "aiIgnorePatterns": {
228
+ "type": "array",
229
+ "items": { "type": "string" }
230
+ },
231
+ "tools": {
232
+ "type": "object",
233
+ "required": [
234
+ "playwright",
235
+ "storybook",
236
+ "eslint",
237
+ "prettier",
238
+ "biome",
239
+ "axeCore",
240
+ "snyk",
241
+ "knip",
242
+ "bundleAnalyzer"
243
+ ],
244
+ "properties": {
245
+ "playwright": { "type": "boolean" },
246
+ "storybook": { "type": "boolean" },
247
+ "eslint": { "type": "boolean" },
248
+ "prettier": { "type": "boolean" },
249
+ "biome": { "type": "boolean" },
250
+ "axeCore": { "type": "boolean" },
251
+ "snyk": { "type": "boolean" },
252
+ "knip": { "type": "boolean" },
253
+ "bundleAnalyzer": { "type": "boolean" }
254
+ }
255
+ },
256
+ "mcpServers": {
257
+ "type": "object",
258
+ "required": ["playwright", "figma", "github", "context7", "perplexity"],
259
+ "properties": {
260
+ "playwright": { "type": "boolean" },
261
+ "figma": { "type": "boolean" },
262
+ "github": { "type": "boolean" },
263
+ "context7": { "type": "boolean" },
264
+ "perplexity": { "type": "boolean" }
265
+ }
266
+ },
267
+ "packageManager": {
268
+ "type": "string",
269
+ "enum": ["npm", "pnpm", "yarn", "bun"]
270
+ },
271
+ "projectName": {
272
+ "type": "string"
273
+ },
274
+ "projectPath": {
275
+ "type": "string"
276
+ },
277
+ "scripts": {
278
+ "type": "object",
279
+ "additionalProperties": { "type": "string" }
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ var GUIDES_DIR = path.join(PACKAGE_ROOT, "guides");
15
15
  var DOCS_SCAFFOLDS_DIR = path.join(PACKAGE_ROOT, "docs-scaffolds");
16
16
  var AGENTS_DIR = path.join(PACKAGE_ROOT, "agents");
17
17
  var CONTEXTS_DIR = path.join(PACKAGE_ROOT, "contexts");
18
- var VERSION = "1.6.1";
18
+ var VERSION = "1.8.0";
19
19
  var AI_KIT_CONFIG_FILE = "ai-kit.config.json";
20
20
  var GENERATED_FILES = {
21
21
  claudeMd: "CLAUDE.md",
@@ -1010,6 +1010,7 @@ ${replaced}`
1010
1010
  // src/generator/config.ts
1011
1011
  function generateConfig(scan, templates, commands, guides, options) {
1012
1012
  return {
1013
+ $schema: "https://ai-kit.mikul.me/schema/ai-kit.config.schema.json",
1013
1014
  version: VERSION,
1014
1015
  scanResult: scan,
1015
1016
  generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -4494,164 +4495,73 @@ function generateRegistryMarkdown(registry) {
4494
4495
  return lines.join("\n");
4495
4496
  }
4496
4497
 
4497
- // src/index.ts
4498
- var program = new Command();
4499
- program.name("ai-kit").description(
4500
- "AI-powered project setup \u2014 generates CLAUDE.md, .cursorrules, slash commands, and guides tailored to your stack."
4501
- ).version(VERSION);
4502
- program.command("init").description("Scan your project and generate AI configs").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4503
- try {
4504
- await initCommand(targetPath);
4505
- } catch (err) {
4506
- if (err.name === "ExitPromptError") {
4507
- process.exit(0);
4498
+ // src/cli/error-handler.ts
4499
+ function withErrorHandler(fn) {
4500
+ const wrapped = async (...args) => {
4501
+ try {
4502
+ await fn(...args);
4503
+ } catch (err) {
4504
+ if (err.name === "ExitPromptError") {
4505
+ process.exit(0);
4506
+ }
4507
+ console.error(err);
4508
+ process.exit(1);
4508
4509
  }
4509
- console.error(err);
4510
- process.exit(1);
4511
- }
4512
- });
4513
- program.command("update").description("Re-scan and update all generated AI configs").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4514
- try {
4510
+ };
4511
+ return wrapped;
4512
+ }
4513
+
4514
+ // src/cli/register-commands.ts
4515
+ function registerCommands(program2) {
4516
+ program2.command("init").description("Scan your project and generate AI configs").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4517
+ await initCommand(targetPath);
4518
+ }));
4519
+ program2.command("update").description("Re-scan and update all generated AI configs").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4515
4520
  await updateCommand(targetPath);
4516
- } catch (err) {
4517
- if (err.name === "ExitPromptError") {
4518
- process.exit(0);
4519
- }
4520
- console.error(err);
4521
- process.exit(1);
4522
- }
4523
- });
4524
- program.command("reset").description("Remove all AI Kit generated files").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4525
- try {
4521
+ }));
4522
+ program2.command("reset").description("Remove all AI Kit generated files").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4526
4523
  await resetCommand(targetPath);
4527
- } catch (err) {
4528
- if (err.name === "ExitPromptError") {
4529
- process.exit(0);
4530
- }
4531
- console.error(err);
4532
- process.exit(1);
4533
- }
4534
- });
4535
- program.command("tokens").description("Show token usage summary and cost estimates").option("--export", "Export data and open HTML dashboard").option("--csv", "Export daily usage to CSV file").option("--budget <amount>", "Monthly budget in USD (default: $20)", parseFloat).action(async (opts) => {
4536
- try {
4524
+ }));
4525
+ program2.command("tokens").description("Show token usage summary and cost estimates").option("--export", "Export data and open HTML dashboard").option("--csv", "Export daily usage to CSV file").option("--budget <amount>", "Monthly budget in USD (default: $20)", parseFloat).action(withErrorHandler(async (opts) => {
4537
4526
  await tokensCommand(opts);
4538
- } catch (err) {
4539
- if (err.name === "ExitPromptError") {
4540
- process.exit(0);
4541
- }
4542
- console.error(err);
4543
- process.exit(1);
4544
- }
4545
- });
4546
- program.command("doctor").description("Diagnose AI Kit setup and check for issues").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4547
- try {
4527
+ }));
4528
+ program2.command("doctor").description("Diagnose AI Kit setup and check for issues").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4548
4529
  await doctorCommand(targetPath);
4549
- } catch (err) {
4550
- if (err.name === "ExitPromptError") {
4551
- process.exit(0);
4552
- }
4553
- console.error(err);
4554
- process.exit(1);
4555
- }
4556
- });
4557
- program.command("diff").description("Show what would change on update (dry run)").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4558
- try {
4530
+ }));
4531
+ program2.command("diff").description("Show what would change on update (dry run)").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4559
4532
  await diffCommand(targetPath);
4560
- } catch (err) {
4561
- if (err.name === "ExitPromptError") {
4562
- process.exit(0);
4563
- }
4564
- console.error(err);
4565
- process.exit(1);
4566
- }
4567
- });
4568
- program.command("export").description("Export rules to other AI tools (Windsurf, Aider, Cline)").argument("[path]", "Project directory (defaults to current directory)").option("--format <format>", "Export format: windsurf, aider, cline, or all").action(async (targetPath, opts) => {
4569
- try {
4533
+ }));
4534
+ program2.command("export").description("Export rules to other AI tools (Windsurf, Aider, Cline)").argument("[path]", "Project directory (defaults to current directory)").option("--format <format>", "Export format: windsurf, aider, cline, or all").action(withErrorHandler(async (targetPath, opts) => {
4570
4535
  await exportCommand(targetPath, opts);
4571
- } catch (err) {
4572
- if (err.name === "ExitPromptError") {
4573
- process.exit(0);
4574
- }
4575
- console.error(err);
4576
- process.exit(1);
4577
- }
4578
- });
4579
- program.command("stats").description("Show project setup statistics and complexity").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4580
- try {
4536
+ }));
4537
+ program2.command("stats").description("Show project setup statistics and complexity").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4581
4538
  await statsCommand(targetPath);
4582
- } catch (err) {
4583
- if (err.name === "ExitPromptError") {
4584
- process.exit(0);
4585
- }
4586
- console.error(err);
4587
- process.exit(1);
4588
- }
4589
- });
4590
- program.command("audit").description("Security and configuration audit for AI agent setup").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4591
- try {
4539
+ }));
4540
+ program2.command("audit").description("Security and configuration audit for AI agent setup").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4592
4541
  await auditCommand(targetPath);
4593
- } catch (err) {
4594
- if (err.name === "ExitPromptError") {
4595
- process.exit(0);
4596
- }
4597
- console.error(err);
4598
- process.exit(1);
4599
- }
4600
- });
4601
- program.command("health").description("One-glance project health \u2014 setup, security, stack, tools, and docs").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4602
- try {
4542
+ }));
4543
+ program2.command("health").description("One-glance project health \u2014 setup, security, stack, tools, and docs").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4603
4544
  await healthCommand(targetPath);
4604
- } catch (err) {
4605
- if (err.name === "ExitPromptError") {
4606
- process.exit(0);
4607
- }
4608
- console.error(err);
4609
- process.exit(1);
4610
- }
4611
- });
4612
- program.command("patterns").description("Generate a pattern library from recurring code patterns").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4613
- try {
4545
+ }));
4546
+ program2.command("patterns").description("Generate a pattern library from recurring code patterns").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4614
4547
  await patternsCommand(targetPath);
4615
- } catch (err) {
4616
- if (err.name === "ExitPromptError") {
4617
- process.exit(0);
4618
- }
4619
- console.error(err);
4620
- process.exit(1);
4621
- }
4622
- });
4623
- program.command("dead-code").description("Find unused components and dead code").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4624
- try {
4548
+ }));
4549
+ program2.command("dead-code").description("Find unused components and dead code").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4625
4550
  await deadCodeCommand(targetPath);
4626
- } catch (err) {
4627
- if (err.name === "ExitPromptError") {
4628
- process.exit(0);
4629
- }
4630
- console.error(err);
4631
- process.exit(1);
4632
- }
4633
- });
4634
- program.command("drift").description("Detect drift between component code and .ai.md documentation").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4635
- try {
4551
+ }));
4552
+ program2.command("drift").description("Detect drift between component code and .ai.md documentation").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4636
4553
  await driftCommand(targetPath);
4637
- } catch (err) {
4638
- if (err.name === "ExitPromptError") {
4639
- process.exit(0);
4640
- }
4641
- console.error(err);
4642
- process.exit(1);
4643
- }
4644
- });
4645
- program.command("component-registry").description("Generate a component registry for AI agent discovery").argument("[path]", "Project directory (defaults to current directory)").action(async (targetPath) => {
4646
- try {
4554
+ }));
4555
+ program2.command("component-registry").description("Generate a component registry for AI agent discovery").argument("[path]", "Project directory (defaults to current directory)").action(withErrorHandler(async (targetPath) => {
4647
4556
  await componentRegistryCommand(targetPath);
4648
- } catch (err) {
4649
- if (err.name === "ExitPromptError") {
4650
- process.exit(0);
4651
- }
4652
- console.error(err);
4653
- process.exit(1);
4654
- }
4655
- });
4557
+ }));
4558
+ }
4559
+
4560
+ // src/index.ts
4561
+ var program = new Command();
4562
+ program.name("ai-kit").description(
4563
+ "AI-powered project setup \u2014 generates CLAUDE.md, .cursorrules, slash commands, and guides tailored to your stack."
4564
+ ).version(VERSION);
4565
+ registerCommands(program);
4656
4566
  program.parse();
4657
4567
  //# sourceMappingURL=index.js.map