ai-devkit 0.12.0 → 0.13.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 (98) hide show
  1. package/README.md +49 -198
  2. package/dist/cli.js +8 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +1 -0
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +111 -12
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/lint.d.ts +4 -0
  9. package/dist/commands/lint.d.ts.map +1 -0
  10. package/dist/commands/lint.js +53 -0
  11. package/dist/commands/lint.js.map +1 -0
  12. package/dist/commands/memory.d.ts.map +1 -1
  13. package/dist/commands/memory.js +19 -0
  14. package/dist/commands/memory.js.map +1 -1
  15. package/dist/lib/InitTemplate.d.ts +13 -0
  16. package/dist/lib/InitTemplate.d.ts.map +1 -0
  17. package/dist/lib/InitTemplate.js +169 -0
  18. package/dist/lib/InitTemplate.js.map +1 -0
  19. package/dist/lib/SkillManager.d.ts.map +1 -1
  20. package/dist/lib/SkillManager.js +9 -0
  21. package/dist/lib/SkillManager.js.map +1 -1
  22. package/dist/services/lint/constants.d.ts +14 -0
  23. package/dist/services/lint/constants.d.ts.map +1 -0
  24. package/dist/services/lint/constants.js +17 -0
  25. package/dist/services/lint/constants.js.map +1 -0
  26. package/dist/services/lint/lint.service.d.ts +6 -0
  27. package/dist/services/lint/lint.service.d.ts.map +1 -0
  28. package/dist/services/lint/lint.service.js +100 -0
  29. package/dist/services/lint/lint.service.js.map +1 -0
  30. package/dist/services/lint/rules/base-docs.rule.d.ts +3 -0
  31. package/dist/services/lint/rules/base-docs.rule.d.ts.map +1 -0
  32. package/dist/services/lint/rules/base-docs.rule.js +17 -0
  33. package/dist/services/lint/rules/base-docs.rule.js.map +1 -0
  34. package/dist/services/lint/rules/check-factories.d.ts +5 -0
  35. package/dist/services/lint/rules/check-factories.d.ts.map +1 -0
  36. package/dist/services/lint/rules/check-factories.js +36 -0
  37. package/dist/services/lint/rules/check-factories.js.map +1 -0
  38. package/dist/services/lint/rules/feature-docs.rule.d.ts +3 -0
  39. package/dist/services/lint/rules/feature-docs.rule.d.ts.map +1 -0
  40. package/dist/services/lint/rules/feature-docs.rule.js +16 -0
  41. package/dist/services/lint/rules/feature-docs.rule.js.map +1 -0
  42. package/dist/services/lint/rules/feature-name.rule.d.ts +7 -0
  43. package/dist/services/lint/rules/feature-name.rule.d.ts.map +1 -0
  44. package/dist/services/lint/rules/feature-name.rule.js +26 -0
  45. package/dist/services/lint/rules/feature-name.rule.js.map +1 -0
  46. package/dist/services/lint/rules/git-worktree.rule.d.ts +3 -0
  47. package/dist/services/lint/rules/git-worktree.rule.d.ts.map +1 -0
  48. package/dist/services/lint/rules/git-worktree.rule.js +26 -0
  49. package/dist/services/lint/rules/git-worktree.rule.js.map +1 -0
  50. package/dist/services/lint/rules/phase-docs.rule.d.ts +13 -0
  51. package/dist/services/lint/rules/phase-docs.rule.d.ts.map +1 -0
  52. package/dist/services/lint/rules/phase-docs.rule.js +54 -0
  53. package/dist/services/lint/rules/phase-docs.rule.js.map +1 -0
  54. package/dist/services/lint/types.d.ts +39 -0
  55. package/dist/services/lint/types.d.ts.map +1 -0
  56. package/dist/services/lint/types.js +3 -0
  57. package/dist/services/lint/types.js.map +1 -0
  58. package/dist/templates/commands/capture-knowledge.md +7 -45
  59. package/dist/templates/commands/check-implementation.md +4 -19
  60. package/dist/templates/commands/code-review.md +7 -81
  61. package/dist/templates/commands/debug.md +7 -45
  62. package/dist/templates/commands/execute-plan.md +6 -70
  63. package/dist/templates/commands/new-requirement.md +15 -128
  64. package/dist/templates/commands/remember.md +4 -21
  65. package/dist/templates/commands/review-design.md +1 -2
  66. package/dist/templates/commands/review-requirements.md +2 -3
  67. package/dist/templates/commands/simplify-implementation.md +6 -144
  68. package/dist/templates/commands/update-planning.md +6 -61
  69. package/dist/templates/commands/writing-test.md +6 -42
  70. package/dist/templates/templates/commands/capture-knowledge.md +7 -45
  71. package/dist/templates/templates/commands/check-implementation.md +4 -19
  72. package/dist/templates/templates/commands/code-review.md +7 -81
  73. package/dist/templates/templates/commands/debug.md +7 -45
  74. package/dist/templates/templates/commands/execute-plan.md +6 -70
  75. package/dist/templates/templates/commands/new-requirement.md +15 -128
  76. package/dist/templates/templates/commands/remember.md +4 -21
  77. package/dist/templates/templates/commands/review-design.md +1 -2
  78. package/dist/templates/templates/commands/review-requirements.md +2 -3
  79. package/dist/templates/templates/commands/simplify-implementation.md +6 -144
  80. package/dist/templates/templates/commands/update-planning.md +6 -61
  81. package/dist/templates/templates/commands/writing-test.md +6 -42
  82. package/dist/util/git.d.ts +8 -0
  83. package/dist/util/git.d.ts.map +1 -1
  84. package/dist/util/git.js +69 -0
  85. package/dist/util/git.js.map +1 -1
  86. package/package.json +2 -2
  87. package/templates/commands/capture-knowledge.md +7 -45
  88. package/templates/commands/check-implementation.md +4 -19
  89. package/templates/commands/code-review.md +7 -81
  90. package/templates/commands/debug.md +7 -45
  91. package/templates/commands/execute-plan.md +6 -70
  92. package/templates/commands/new-requirement.md +15 -128
  93. package/templates/commands/remember.md +4 -21
  94. package/templates/commands/review-design.md +1 -2
  95. package/templates/commands/review-requirements.md +2 -3
  96. package/templates/commands/simplify-implementation.md +6 -144
  97. package/templates/commands/update-planning.md +6 -61
  98. package/templates/commands/writing-test.md +6 -42
package/README.md CHANGED
@@ -1,22 +1,21 @@
1
- The official command-line interface for **AI DevKit**.
1
+ # AI DevKit CLI
2
2
 
3
- This tool orchestrates the setup and management of AI-assisted development environments, ensuring your project is ready for agents like Cursor, Claude Code, Antigravity, and more.
3
+ The command-line interface for **AI DevKit** — set up and manage AI-assisted development environments in your project.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/ai-devkit.svg)](https://www.npmjs.com/package/ai-devkit)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
8
  ## Features
9
9
 
10
- - 🎯 **Phase-based Development**: Structured templates for each stage of the software development lifecycle
11
- - 🤖 **AI Environment Setup**: Automatic configuration for Cursor and Claude Code
12
- - 📝 **Customizable Templates**: Markdown-based templates with YAML frontmatter
13
- - 🚀 **Interactive CLI**: User-friendly prompts with flag override support
14
- - ⚙️ **State Management**: Tracks initialized phases and configuration
10
+ - 🎯 **Phase-based Development** Structured templates for requirements, design, planning, implementation, testing, and more
11
+ - 🤖 **AI Environment Setup** One-command configuration for Cursor, Claude Code, Gemini CLI, and other agents
12
+ - 🧠 **Skill Management** Install and manage reusable AI skills from registries
13
+ - 📝 **Customizable Templates** — Markdown-based templates with YAML frontmatter
15
14
 
16
15
  ## Installation
17
16
 
18
17
  ```bash
19
- # Using npx (no installation needed)
18
+ # Run directly (no install needed)
20
19
  npx ai-devkit init
21
20
 
22
21
  # Or install globally
@@ -25,221 +24,73 @@ npm install -g ai-devkit
25
24
 
26
25
  ## Quick Start
27
26
 
28
- Initialize AI DevKit in your project:
29
-
30
27
  ```bash
31
- # Interactive mode (recommended)
28
+ # Set up your project interactively
32
29
  ai-devkit init
30
+
31
+ # Set up from template (no step-by-step prompts when template is complete)
32
+ ai-devkit init --template ./ai-devkit.init.yaml
33
33
  ```
34
34
 
35
35
  This will:
36
36
  1. Create a `.ai-devkit.json` configuration file
37
- 2. Set up your AI development environment (Cursor/Claude Code)
37
+ 2. Set up your AI development environment (e.g., Cursor, Claude Code)
38
38
  3. Generate phase templates in `docs/ai/`
39
39
 
40
- Detailed user guide can be found [here](https://ai-devkit.com/docs/).
41
-
42
- ## Available Phases
43
-
44
- - **Requirements**: Problem understanding, requirements gathering, and success criteria
45
- - **Design**: System architecture, data models, and technical design (include mermaid diagrams for architecture/data flow)
46
- - **Planning**: Task breakdown, milestones, and project timeline
47
- - **Implementation**: Technical implementation notes and code guidelines
48
- - **Testing**: Testing strategy, test cases, and quality assurance
49
- - **Deployment**: Deployment process, infrastructure, and release procedures
50
- - **Monitoring**: Monitoring strategy, metrics, alerts, and observability
51
-
52
- ## Commands
53
-
54
- ### `ai-devkit init`
55
-
56
- Initialize AI DevKit in your project.
57
-
58
- **Options:**
59
- - `-e, --environment <env>`: Specify environment (cursor|claude|both)
60
- - `-a, --all`: Initialize all phases at once
61
- - `-p, --phases <phases>`: Comma-separated list of specific phases
40
+ ## Common Commands
62
41
 
63
42
  ```bash
64
- # Interactive mode
43
+ # Initialize project
65
44
  ai-devkit init
66
45
 
67
- # Initialize for Cursor with all phases
68
- ai-devkit init --environment cursor --all
46
+ # Initialize project from YAML/JSON template
47
+ ai-devkit init --template ./ai-devkit.init.yaml
69
48
 
70
- # Initialize specific phases
71
- ai-devkit init --phases requirements,design,implementation
72
- ```
73
-
74
- ### `ai-devkit phase [name]`
75
-
76
- Add or update a specific phase template.
49
+ # Add a development phase
50
+ ai-devkit phase requirements
77
51
 
78
- **Examples:**
79
- ```bash
80
- # Interactive selection
81
- ai-devkit phase
52
+ # Validate workspace docs readiness
53
+ ai-devkit lint
82
54
 
83
- # Add specific phase
84
- ai-devkit phase requirements
85
- ai-devkit phase testing
86
- ```
55
+ # Validate a feature's docs and git branch/worktree conventions
56
+ ai-devkit lint --feature lint-command
87
57
 
88
- ## Generated Structure
58
+ # Emit machine-readable output for CI
59
+ ai-devkit lint --feature lint-command --json
89
60
 
90
- After initialization, your project will have:
61
+ # Install a skill
62
+ ai-devkit skill add <skill-registry> <skill-name>
91
63
 
92
- ```
93
- your-project/
94
- ├── .ai-devkit.json # Configuration and state
95
- ├── docs/
96
- │ └── ai/
97
- │ ├── requirements/
98
- │ │ └── README.md
99
- │ ├── design/
100
- │ │ └── README.md
101
- │ ├── planning/
102
- │ │ └── README.md
103
- │ ├── implementation/
104
- │ │ └── README.md
105
- │ ├── testing/
106
- │ │ └── README.md
107
- │ ├── deployment/
108
- │ │ └── README.md
109
- │ └── monitoring/
110
- │ └── README.md
111
- └── [Environment-specific files]
64
+ # Store a memory
65
+ ai-devkit memory store
112
66
  ```
113
67
 
114
- Supported Tools & Agents:
115
- | Agent | Support | Notes |
116
- |-----------------------------------------------------------|---------|---------------------------------------------------|
117
- | [Claude Code](https://www.anthropic.com/claude-code) | ✅ | |
118
- | [GitHub Copilot](https://code.visualstudio.com/) | ✅ | VSCode only |
119
- | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | ✅ | |
120
- | [Cursor](https://cursor.sh/) | ✅ | |
121
- | [opencode](https://opencode.ai/) | ✅ | |
122
- | [Antigravity](https://antigravity.google/) | ✅ | |
123
- | [Windsurf](https://windsurf.com/) | 🚧 | Testing |
124
- | [Kilo Code](https://github.com/Kilo-Org/kilocode) | 🚧 | Testing |
125
- | [Roo Code](https://roocode.com/) | 🚧 | Testing |
126
- | [Codex CLI](https://github.com/openai/codex) | ✅ | Only Global |
127
- | [Amp](https://ampcode.com/) | 🚧 | Testing |
128
-
129
- Templates are designed to provide structure while remaining concise and AI-friendly.
130
-
131
- ## Workflow Examples
132
-
133
- ### Initial Project Setup
134
-
135
- 1. **Initialize your project:**
136
- ```bash
137
- ai-devkit init
138
- ```
139
-
140
- 2. **Start with requirements:**
141
- - Use slash command to start filling the requirement `/new-requerement`
142
- - Your AI assistant will help clarify and document requirements
143
- - Use slash command to review the requirement `/review-requirement`
144
-
145
- 3. **Design your system:**
146
- - Review `docs/ai/design/` and feature-specific files
147
- - Use slash command to review the design `/review-design`
148
- - Your AI assistant will help clarify and document design
149
-
150
- 4. **Plan your work:**
151
- - Review `docs/ai/planning/` and feature-specific plans
152
- - Clarify and document plan with AI assistant
153
-
154
- 5. **Implement with guidance:**
155
- - When the plan is ready, your AI assistant will help you implement the code
156
- - You can start the execution of the plan with the command `/execute-plan`
157
- - AI assistant will help you to review the code and update the implementation notes
158
- - After executing each task, you can check the implementation and compare it with the design with AI support by using the command `/check-implementation`
159
- - Once the implementation is good, you can review the code with AI support by using the command `/code-review`
160
-
161
- 6. **Test thoroughly:**
162
- - After implementation is done, you can start testing
163
- - Use `docs/ai/testing/` as your testing guide
164
- - Use slash command to start writing test `/writing-test`
165
-
166
- 7. **Deploy confidently:**
167
- - Follow deployment procedures in `docs/ai/deployment/`
168
-
169
- 8. **Monitor and iterate:**
170
- - Set up monitoring per `docs/ai/monitoring/`
171
-
172
- ## Use Cases
173
-
174
- - **New Projects**: Scaffold complete development documentation
175
- - **Existing Projects**: Add structured documentation gradually
176
- - **Team Collaboration**: Share common development practices
177
- - **AI Pair Programming**: Provide context for AI assistants
178
- - **Knowledge Management**: Document decisions and patterns
179
-
180
- ## Best Practices
181
-
182
- 1. **Keep templates updated**: As your project evolves, update phase documentation
183
- 2. **Reference across phases**: Link requirements to design, design to implementation
184
- 3. **Use with AI assistants**: Templates are designed to work well with AI code assistants
185
- 4. **Customize for your needs**: Templates are starting points, not rigid requirements
186
- 5. **Track decisions**: Document architectural decisions and their rationale
187
-
188
- ## Configuration File
189
-
190
- The `.ai-devkit.json` file tracks your setup:
191
-
192
- ```json
193
- {
194
- "version": "0.2.0",
195
- "environment": "cursor",
196
- "initializedPhases": ["requirements", "design", "planning"],
197
- "createdAt": "2025-10-14T...",
198
- "updatedAt": "2025-10-14T..."
199
- }
68
+ Template example:
69
+
70
+ ```yaml
71
+ version: 1
72
+ environments:
73
+ - codex
74
+ - claude
75
+ phases:
76
+ - requirements
77
+ - design
78
+ - planning
79
+ - implementation
80
+ - testing
81
+ skills:
82
+ - registry: codeaholicguy/ai-devkit
83
+ skill: debug
84
+ - registry: codeaholicguy/ai-devkit
85
+ skill: memory
200
86
  ```
201
87
 
202
- ## Development
88
+ ## Documentation
203
89
 
204
- To work on the CLI package:
90
+ 📖 **For the full user guide, workflow examples, and best practices, visit:**
205
91
 
206
- ```bash
207
- # Clone the repository
208
- git clone <repository-url>
209
- cd ai-devkit
210
-
211
- # Install dependencies for the monorepo
212
- npm install
213
-
214
- # Navigate to CLI package
215
- cd packages/cli
216
-
217
- # Run in development mode
218
- npm run dev -- init
219
-
220
- # Build
221
- npm run build
222
-
223
- # Test locally
224
- npm link
225
- ai-devkit init
226
- ```
227
-
228
- ## Contributing
229
-
230
- Contributions are welcome! Please feel free to submit issues and pull requests.
92
+ **[ai-devkit.com/docs](https://ai-devkit.com/docs/)**
231
93
 
232
94
  ## License
233
95
 
234
96
  MIT
235
-
236
- ---
237
-
238
- **Happy building with AI! 🚀**
239
-
240
- ## Quick Reference
241
-
242
- | Quick links | Description |
243
- |-------------|-------------|
244
- | [CHANGELOG.md](CHANGELOG.md) | Recent changes and release notes |
245
-
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ const commander_1 = require("commander");
5
5
  const init_1 = require("./commands/init");
6
6
  const phase_1 = require("./commands/phase");
7
7
  const setup_1 = require("./commands/setup");
8
+ const lint_1 = require("./commands/lint");
8
9
  const memory_1 = require("./commands/memory");
9
10
  const skill_1 = require("./commands/skill");
10
11
  const agent_1 = require("./commands/agent");
@@ -19,6 +20,7 @@ program
19
20
  .option('-e, --environment <env>', 'Development environment (cursor|claude|both)')
20
21
  .option('-a, --all', 'Initialize all phases')
21
22
  .option('-p, --phases <phases>', 'Comma-separated list of phases to initialize')
23
+ .option('-t, --template <path>', 'Initialize from template file (.yaml, .yml, .json)')
22
24
  .action(init_1.initCommand);
23
25
  program
24
26
  .command('phase [name]')
@@ -29,6 +31,12 @@ program
29
31
  .description('Set up AI DevKit commands globally')
30
32
  .option('-g, --global', 'Install commands to global environment folders')
31
33
  .action(setup_1.setupCommand);
34
+ program
35
+ .command('lint')
36
+ .description('Validate workspace readiness for AI DevKit workflows')
37
+ .option('-f, --feature <name>', 'Validate docs and git worktree conventions for a feature')
38
+ .option('--json', 'Output lint results as JSON')
39
+ .action(lint_1.lintCommand);
32
40
  (0, memory_1.registerMemoryCommand)(program);
33
41
  (0, skill_1.registerSkillCommand)(program);
34
42
  (0, agent_1.registerAgentCommand)(program);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAChD,4CAAgD;AAChD,8CAA0D;AAC1D,4CAAwD;AACxD,4CAAwD;AAExD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,yBAAyB,EAAE,8CAA8C,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,CAAC;KAC/E,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2GAA2G,CAAC;KACxH,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,cAAc,EAAE,gDAAgD,CAAC;KACxE,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,4CAAgD;AAChD,4CAAgD;AAChD,0CAA8C;AAC9C,8CAA0D;AAC1D,4CAAwD;AACxD,4CAAwD;AAExD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,yBAAyB,EAAE,8CAA8C,CAAC;KACjF,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,CAAC;KAC/E,MAAM,CAAC,uBAAuB,EAAE,oDAAoD,CAAC;KACrF,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,2GAA2G,CAAC;KACxH,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,cAAc,EAAE,gDAAgD,CAAC;KACxE,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,sBAAsB,EAAE,0DAA0D,CAAC;KAC1F,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;KAC/C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -3,6 +3,7 @@ interface InitOptions {
3
3
  environment?: EnvironmentCode[] | string;
4
4
  all?: boolean;
5
5
  phases?: string;
6
+ template?: string;
6
7
  }
7
8
  export declare function initCommand(options: InitOptions): Promise<void>;
8
9
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAuB,MAAM,UAAU,CAAC;AAmChE,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAqHrD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAA8B,MAAM,UAAU,CAAC;AAmCvE,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBAoLrD"}
@@ -10,6 +10,8 @@ const Config_1 = require("../lib/Config");
10
10
  const TemplateManager_1 = require("../lib/TemplateManager");
11
11
  const EnvironmentSelector_1 = require("../lib/EnvironmentSelector");
12
12
  const PhaseSelector_1 = require("../lib/PhaseSelector");
13
+ const SkillManager_1 = require("../lib/SkillManager");
14
+ const InitTemplate_1 = require("../lib/InitTemplate");
13
15
  const types_1 = require("../types");
14
16
  const env_1 = require("../util/env");
15
17
  const terminal_ui_1 = require("../util/terminal-ui");
@@ -52,13 +54,60 @@ function normalizeEnvironmentOption(environment) {
52
54
  .map(value => value.trim())
53
55
  .filter((value) => value.length > 0);
54
56
  }
57
+ async function installTemplateSkills(skillManager, skills) {
58
+ const seen = new Set();
59
+ const results = [];
60
+ for (const entry of skills) {
61
+ const dedupeKey = `${entry.registry}::${entry.skill}`;
62
+ if (seen.has(dedupeKey)) {
63
+ results.push({
64
+ registry: entry.registry,
65
+ skill: entry.skill,
66
+ status: 'skipped',
67
+ reason: 'Duplicate skill entry in template'
68
+ });
69
+ continue;
70
+ }
71
+ seen.add(dedupeKey);
72
+ try {
73
+ await skillManager.addSkill(entry.registry, entry.skill);
74
+ results.push({
75
+ registry: entry.registry,
76
+ skill: entry.skill,
77
+ status: 'installed'
78
+ });
79
+ }
80
+ catch (error) {
81
+ results.push({
82
+ registry: entry.registry,
83
+ skill: entry.skill,
84
+ status: 'failed',
85
+ reason: error instanceof Error ? error.message : String(error)
86
+ });
87
+ }
88
+ }
89
+ return results;
90
+ }
55
91
  async function initCommand(options) {
56
92
  const configManager = new Config_1.ConfigManager();
57
93
  const templateManager = new TemplateManager_1.TemplateManager();
58
94
  const environmentSelector = new EnvironmentSelector_1.EnvironmentSelector();
59
95
  const phaseSelector = new PhaseSelector_1.PhaseSelector();
96
+ const skillManager = new SkillManager_1.SkillManager(configManager, environmentSelector);
97
+ const templatePath = options.template?.trim();
98
+ const hasTemplate = Boolean(templatePath);
99
+ const templateConfig = hasTemplate
100
+ ? await (0, InitTemplate_1.loadInitTemplate)(templatePath).catch(error => {
101
+ terminal_ui_1.ui.error(error instanceof Error ? error.message : String(error));
102
+ process.exitCode = 1;
103
+ return null;
104
+ })
105
+ : null;
106
+ if (hasTemplate && !templateConfig) {
107
+ return;
108
+ }
60
109
  ensureGitRepository();
61
- if (await configManager.exists()) {
110
+ if (await configManager.exists() && !hasTemplate) {
62
111
  const { shouldContinue } = await inquirer_1.default.prompt([
63
112
  {
64
113
  type: 'confirm',
@@ -72,7 +121,13 @@ async function initCommand(options) {
72
121
  return;
73
122
  }
74
123
  }
124
+ else if (await configManager.exists() && hasTemplate) {
125
+ terminal_ui_1.ui.warning('AI DevKit is already initialized. Reconfiguring from template.');
126
+ }
75
127
  let selectedEnvironments = normalizeEnvironmentOption(options.environment);
128
+ if (selectedEnvironments.length === 0 && templateConfig?.environments?.length) {
129
+ selectedEnvironments = templateConfig.environments;
130
+ }
76
131
  if (selectedEnvironments.length === 0) {
77
132
  terminal_ui_1.ui.info('AI Environment Setup');
78
133
  selectedEnvironments = await environmentSelector.selectEnvironments();
@@ -96,13 +151,27 @@ async function initCommand(options) {
96
151
  let shouldProceedWithSetup = true;
97
152
  if (existingEnvironments.length > 0) {
98
153
  terminal_ui_1.ui.warning(`The following environments are already set up: ${existingEnvironments.join(', ')}`);
99
- shouldProceedWithSetup = await environmentSelector.confirmOverride(existingEnvironments);
154
+ if (hasTemplate) {
155
+ terminal_ui_1.ui.warning('Template mode enabled: proceeding with overwrite of selected environments.');
156
+ }
157
+ else {
158
+ shouldProceedWithSetup = await environmentSelector.confirmOverride(existingEnvironments);
159
+ }
100
160
  }
101
161
  if (!shouldProceedWithSetup) {
102
162
  terminal_ui_1.ui.warning('Environment setup cancelled.');
103
163
  return;
104
164
  }
105
- const selectedPhases = await phaseSelector.selectPhases(options.all, options.phases);
165
+ let selectedPhases = [];
166
+ if (options.all || options.phases) {
167
+ selectedPhases = await phaseSelector.selectPhases(options.all, options.phases);
168
+ }
169
+ else if (templateConfig?.phases?.length) {
170
+ selectedPhases = templateConfig.phases;
171
+ }
172
+ else {
173
+ selectedPhases = await phaseSelector.selectPhases();
174
+ }
106
175
  if (selectedPhases.length === 0) {
107
176
  terminal_ui_1.ui.warning('No phases selected. Nothing to initialize.');
108
177
  return;
@@ -117,6 +186,12 @@ async function initCommand(options) {
117
186
  terminal_ui_1.ui.success('Updated configuration with selected environments');
118
187
  environmentSelector.displaySelectionSummary(selectedEnvironments);
119
188
  phaseSelector.displaySelectionSummary(selectedPhases);
189
+ if (hasTemplate && templateConfig) {
190
+ terminal_ui_1.ui.info(`Template mode: ${templatePath}`);
191
+ if (templateConfig.skills?.length) {
192
+ terminal_ui_1.ui.info(`Template skills to install: ${templateConfig.skills.length}`);
193
+ }
194
+ }
120
195
  terminal_ui_1.ui.text('Setting up environment templates...', { breakline: true });
121
196
  const envFiles = await templateManager.setupMultipleEnvironments(selectedEnvironments);
122
197
  envFiles.forEach(file => {
@@ -126,15 +201,20 @@ async function initCommand(options) {
126
201
  const exists = await templateManager.fileExists(phase);
127
202
  let shouldCopy = true;
128
203
  if (exists) {
129
- const { overwrite } = await inquirer_1.default.prompt([
130
- {
131
- type: 'confirm',
132
- name: 'overwrite',
133
- message: `${types_1.PHASE_DISPLAY_NAMES[phase]} already exists. Overwrite?`,
134
- default: false
135
- }
136
- ]);
137
- shouldCopy = overwrite;
204
+ if (hasTemplate) {
205
+ terminal_ui_1.ui.warning(`${types_1.PHASE_DISPLAY_NAMES[phase]} already exists. Overwriting in template mode.`);
206
+ }
207
+ else {
208
+ const { overwrite } = await inquirer_1.default.prompt([
209
+ {
210
+ type: 'confirm',
211
+ name: 'overwrite',
212
+ message: `${types_1.PHASE_DISPLAY_NAMES[phase]} already exists. Overwrite?`,
213
+ default: false
214
+ }
215
+ ]);
216
+ shouldCopy = overwrite;
217
+ }
138
218
  }
139
219
  if (shouldCopy) {
140
220
  await templateManager.copyPhaseTemplate(phase);
@@ -145,6 +225,25 @@ async function initCommand(options) {
145
225
  terminal_ui_1.ui.warning(`Skipped ${phase} phase`);
146
226
  }
147
227
  }
228
+ if (templateConfig?.skills?.length) {
229
+ terminal_ui_1.ui.text('Installing skills from template...', { breakline: true });
230
+ const skillResults = await installTemplateSkills(skillManager, templateConfig.skills);
231
+ const installedCount = skillResults.filter(result => result.status === 'installed').length;
232
+ const skippedCount = skillResults.filter(result => result.status === 'skipped').length;
233
+ const failedResults = skillResults.filter(result => result.status === 'failed');
234
+ if (installedCount > 0) {
235
+ terminal_ui_1.ui.success(`Installed ${installedCount} skill(s) from template.`);
236
+ }
237
+ if (skippedCount > 0) {
238
+ terminal_ui_1.ui.warning(`Skipped ${skippedCount} duplicate skill entry(ies) from template.`);
239
+ }
240
+ if (failedResults.length > 0) {
241
+ terminal_ui_1.ui.warning(`${failedResults.length} skill install(s) failed. Continuing with warnings as configured.`);
242
+ failedResults.forEach(result => {
243
+ terminal_ui_1.ui.warning(`${result.registry}/${result.skill}: ${result.reason || 'Unknown error'}`);
244
+ });
245
+ }
246
+ }
148
247
  terminal_ui_1.ui.text('AI DevKit initialized successfully!', { breakline: true });
149
248
  terminal_ui_1.ui.info('Next steps:');
150
249
  terminal_ui_1.ui.text(' • Review and customize templates in docs/ai/');
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { LintOptions, LintReport } from '../services/lint/lint.service';
2
+ export declare function lintCommand(options: LintOptions): Promise<void>;
3
+ export declare function renderLintReport(report: LintReport, options?: LintOptions): void;
4
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,WAAW,EAAE,UAAU,EAAiB,MAAM,+BAA+B,CAAC;AAExG,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI,CAkCpF"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lintCommand = lintCommand;
4
+ exports.renderLintReport = renderLintReport;
5
+ const terminal_ui_1 = require("../util/terminal-ui");
6
+ const constants_1 = require("../services/lint/constants");
7
+ const lint_service_1 = require("../services/lint/lint.service");
8
+ async function lintCommand(options) {
9
+ const report = (0, lint_service_1.runLintChecks)(options);
10
+ renderLintReport(report, options);
11
+ process.exitCode = report.exitCode;
12
+ }
13
+ function renderLintReport(report, options = {}) {
14
+ if (options.json) {
15
+ terminal_ui_1.ui.text(JSON.stringify(report, null, 2));
16
+ return;
17
+ }
18
+ const sections = [
19
+ { title: '=== Base Structure ===', category: 'base-docs' }
20
+ ];
21
+ if (report.feature) {
22
+ sections.push({ title: `=== Feature: ${report.feature.normalizedName} ===`, category: 'feature-docs' }, { title: `=== Git: ${report.feature.branchName} ===`, category: 'git-worktree' });
23
+ }
24
+ sections.forEach((section, index) => {
25
+ if (index > 0) {
26
+ terminal_ui_1.ui.text('');
27
+ }
28
+ printSection(section.title, section.category, report);
29
+ });
30
+ terminal_ui_1.ui.text('');
31
+ if (report.pass) {
32
+ terminal_ui_1.ui.text('All checks passed.');
33
+ }
34
+ else {
35
+ terminal_ui_1.ui.text(`${report.summary.requiredFailures} required check(s) failed.`);
36
+ }
37
+ if (report.summary.warn > 0) {
38
+ terminal_ui_1.ui.text(`${report.summary.warn} warning(s) reported.`);
39
+ }
40
+ }
41
+ function printSection(title, category, report) {
42
+ terminal_ui_1.ui.text(title);
43
+ printRows(report.checks.filter(check => check.category === category));
44
+ }
45
+ function printRows(checks) {
46
+ for (const check of checks) {
47
+ terminal_ui_1.ui.text(`${constants_1.LINT_STATUS_LABEL[check.level]} ${check.message}`);
48
+ if (check.fix) {
49
+ terminal_ui_1.ui.text(` ${check.fix}`);
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/commands/lint.ts"],"names":[],"mappings":";;AAIA,kCAIC;AAED,4CAkCC;AA5CD,qDAAyC;AACzC,0DAA+D;AAC/D,gEAAwG;AAEjG,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,IAAA,4BAAa,EAAC,OAAO,CAAC,CAAC;IACtC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACrC,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAkB,EAAE,UAAuB,EAAE;IAC5E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,gBAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAoE;QAChF,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,WAAW,EAAE;KAC3D,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,gBAAgB,MAAM,CAAC,OAAO,CAAC,cAAc,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EACxF,EAAE,KAAK,EAAE,YAAY,MAAM,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,CACjF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAClC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,gBAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,gBAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,gBAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,gBAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,4BAA4B,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5B,gBAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,QAAqC,EAAE,MAAkB;IAC5F,gBAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,MAAyB;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,gBAAE,CAAC,IAAI,CAAC,GAAG,6BAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,gBAAE,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+D5D"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF5D"}