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.
- package/README.md +49 -198
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +111 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/lint.d.ts +4 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +53 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/memory.d.ts.map +1 -1
- package/dist/commands/memory.js +19 -0
- package/dist/commands/memory.js.map +1 -1
- package/dist/lib/InitTemplate.d.ts +13 -0
- package/dist/lib/InitTemplate.d.ts.map +1 -0
- package/dist/lib/InitTemplate.js +169 -0
- package/dist/lib/InitTemplate.js.map +1 -0
- package/dist/lib/SkillManager.d.ts.map +1 -1
- package/dist/lib/SkillManager.js +9 -0
- package/dist/lib/SkillManager.js.map +1 -1
- package/dist/services/lint/constants.d.ts +14 -0
- package/dist/services/lint/constants.d.ts.map +1 -0
- package/dist/services/lint/constants.js +17 -0
- package/dist/services/lint/constants.js.map +1 -0
- package/dist/services/lint/lint.service.d.ts +6 -0
- package/dist/services/lint/lint.service.d.ts.map +1 -0
- package/dist/services/lint/lint.service.js +100 -0
- package/dist/services/lint/lint.service.js.map +1 -0
- package/dist/services/lint/rules/base-docs.rule.d.ts +3 -0
- package/dist/services/lint/rules/base-docs.rule.d.ts.map +1 -0
- package/dist/services/lint/rules/base-docs.rule.js +17 -0
- package/dist/services/lint/rules/base-docs.rule.js.map +1 -0
- package/dist/services/lint/rules/check-factories.d.ts +5 -0
- package/dist/services/lint/rules/check-factories.d.ts.map +1 -0
- package/dist/services/lint/rules/check-factories.js +36 -0
- package/dist/services/lint/rules/check-factories.js.map +1 -0
- package/dist/services/lint/rules/feature-docs.rule.d.ts +3 -0
- package/dist/services/lint/rules/feature-docs.rule.d.ts.map +1 -0
- package/dist/services/lint/rules/feature-docs.rule.js +16 -0
- package/dist/services/lint/rules/feature-docs.rule.js.map +1 -0
- package/dist/services/lint/rules/feature-name.rule.d.ts +7 -0
- package/dist/services/lint/rules/feature-name.rule.d.ts.map +1 -0
- package/dist/services/lint/rules/feature-name.rule.js +26 -0
- package/dist/services/lint/rules/feature-name.rule.js.map +1 -0
- package/dist/services/lint/rules/git-worktree.rule.d.ts +3 -0
- package/dist/services/lint/rules/git-worktree.rule.d.ts.map +1 -0
- package/dist/services/lint/rules/git-worktree.rule.js +26 -0
- package/dist/services/lint/rules/git-worktree.rule.js.map +1 -0
- package/dist/services/lint/rules/phase-docs.rule.d.ts +13 -0
- package/dist/services/lint/rules/phase-docs.rule.d.ts.map +1 -0
- package/dist/services/lint/rules/phase-docs.rule.js +54 -0
- package/dist/services/lint/rules/phase-docs.rule.js.map +1 -0
- package/dist/services/lint/types.d.ts +39 -0
- package/dist/services/lint/types.d.ts.map +1 -0
- package/dist/services/lint/types.js +3 -0
- package/dist/services/lint/types.js.map +1 -0
- package/dist/templates/commands/capture-knowledge.md +7 -45
- package/dist/templates/commands/check-implementation.md +4 -19
- package/dist/templates/commands/code-review.md +7 -81
- package/dist/templates/commands/debug.md +7 -45
- package/dist/templates/commands/execute-plan.md +6 -70
- package/dist/templates/commands/new-requirement.md +15 -128
- package/dist/templates/commands/remember.md +4 -21
- package/dist/templates/commands/review-design.md +1 -2
- package/dist/templates/commands/review-requirements.md +2 -3
- package/dist/templates/commands/simplify-implementation.md +6 -144
- package/dist/templates/commands/update-planning.md +6 -61
- package/dist/templates/commands/writing-test.md +6 -42
- package/dist/templates/templates/commands/capture-knowledge.md +7 -45
- package/dist/templates/templates/commands/check-implementation.md +4 -19
- package/dist/templates/templates/commands/code-review.md +7 -81
- package/dist/templates/templates/commands/debug.md +7 -45
- package/dist/templates/templates/commands/execute-plan.md +6 -70
- package/dist/templates/templates/commands/new-requirement.md +15 -128
- package/dist/templates/templates/commands/remember.md +4 -21
- package/dist/templates/templates/commands/review-design.md +1 -2
- package/dist/templates/templates/commands/review-requirements.md +2 -3
- package/dist/templates/templates/commands/simplify-implementation.md +6 -144
- package/dist/templates/templates/commands/update-planning.md +6 -61
- package/dist/templates/templates/commands/writing-test.md +6 -42
- package/dist/util/git.d.ts +8 -0
- package/dist/util/git.d.ts.map +1 -1
- package/dist/util/git.js +69 -0
- package/dist/util/git.js.map +1 -1
- package/package.json +2 -2
- package/templates/commands/capture-knowledge.md +7 -45
- package/templates/commands/check-implementation.md +4 -19
- package/templates/commands/code-review.md +7 -81
- package/templates/commands/debug.md +7 -45
- package/templates/commands/execute-plan.md +6 -70
- package/templates/commands/new-requirement.md +15 -128
- package/templates/commands/remember.md +4 -21
- package/templates/commands/review-design.md +1 -2
- package/templates/commands/review-requirements.md +2 -3
- package/templates/commands/simplify-implementation.md +6 -144
- package/templates/commands/update-planning.md +6 -61
- package/templates/commands/writing-test.md +6 -42
package/README.md
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
# AI DevKit CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The command-line interface for **AI DevKit** — set up and manage AI-assisted development environments in your project.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/ai-devkit)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
8
|
## Features
|
|
9
9
|
|
|
10
|
-
- 🎯 **Phase-based Development
|
|
11
|
-
- 🤖 **AI Environment Setup
|
|
12
|
-
-
|
|
13
|
-
-
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
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
|
-
|
|
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
|
-
#
|
|
43
|
+
# Initialize project
|
|
65
44
|
ai-devkit init
|
|
66
45
|
|
|
67
|
-
# Initialize
|
|
68
|
-
ai-devkit init --
|
|
46
|
+
# Initialize project from YAML/JSON template
|
|
47
|
+
ai-devkit init --template ./ai-devkit.init.yaml
|
|
69
48
|
|
|
70
|
-
#
|
|
71
|
-
ai-devkit
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
# Interactive selection
|
|
81
|
-
ai-devkit phase
|
|
52
|
+
# Validate workspace docs readiness
|
|
53
|
+
ai-devkit lint
|
|
82
54
|
|
|
83
|
-
#
|
|
84
|
-
ai-devkit
|
|
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
|
-
|
|
58
|
+
# Emit machine-readable output for CI
|
|
59
|
+
ai-devkit lint --feature lint-command --json
|
|
89
60
|
|
|
90
|
-
|
|
61
|
+
# Install a skill
|
|
62
|
+
ai-devkit skill add <skill-registry> <skill-name>
|
|
91
63
|
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
##
|
|
88
|
+
## Documentation
|
|
203
89
|
|
|
204
|
-
|
|
90
|
+
📖 **For the full user guide, workflow examples, and best practices, visit:**
|
|
205
91
|
|
|
206
|
-
|
|
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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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":";;;;;
|
|
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,
|
|
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"}
|