@aicgen/aicgen 1.0.0-beta.1
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/.claude/agents/architecture-reviewer.md +88 -0
- package/.claude/agents/guideline-checker.md +73 -0
- package/.claude/agents/security-auditor.md +108 -0
- package/.claude/guidelines/api-design.md +645 -0
- package/.claude/guidelines/architecture.md +2503 -0
- package/.claude/guidelines/best-practices.md +618 -0
- package/.claude/guidelines/code-style.md +304 -0
- package/.claude/guidelines/design-patterns.md +573 -0
- package/.claude/guidelines/devops.md +226 -0
- package/.claude/guidelines/error-handling.md +413 -0
- package/.claude/guidelines/language.md +782 -0
- package/.claude/guidelines/performance.md +706 -0
- package/.claude/guidelines/security.md +583 -0
- package/.claude/guidelines/testing.md +568 -0
- package/.claude/settings.json +98 -0
- package/.claude/settings.local.json +8 -0
- package/.env.example +23 -0
- package/.eslintrc.json +28 -0
- package/.github/workflows/release.yml +180 -0
- package/.github/workflows/test.yml +81 -0
- package/.gitmodules +3 -0
- package/.vs/ProjectSettings.json +3 -0
- package/.vs/VSWorkspaceState.json +16 -0
- package/.vs/aicgen.slnx/FileContentIndex/5f0ce2a3-fd68-4863-9e23-e428cf1794e3.vsidx +0 -0
- package/.vs/aicgen.slnx/v18/.wsuo +0 -0
- package/.vs/aicgen.slnx/v18/DocumentLayout.json +54 -0
- package/.vs/slnx.sqlite +0 -0
- package/AGENTS.md +121 -0
- package/CLAUDE.md +36 -0
- package/CONTRIBUTING.md +821 -0
- package/LICENSE +21 -0
- package/README.md +199 -0
- package/assets/icon.svg +34 -0
- package/assets/logo.svg +41 -0
- package/bun.lock +848 -0
- package/data/LICENSE +21 -0
- package/data/README.md +203 -0
- package/data/api/basics.md +292 -0
- package/data/api/index.md +8 -0
- package/data/api/pagination.md +142 -0
- package/data/api/rest.md +137 -0
- package/data/api/versioning.md +60 -0
- package/data/architecture/clean-architecture/index.md +7 -0
- package/data/architecture/clean-architecture/layers.md +111 -0
- package/data/architecture/ddd/index.md +8 -0
- package/data/architecture/ddd/strategic.md +89 -0
- package/data/architecture/ddd/tactical.md +132 -0
- package/data/architecture/event-driven/index.md +7 -0
- package/data/architecture/event-driven/messaging.md +242 -0
- package/data/architecture/event-driven/patterns.md +129 -0
- package/data/architecture/feature-toggles/index.md +7 -0
- package/data/architecture/feature-toggles/patterns.md +73 -0
- package/data/architecture/gui/index.md +7 -0
- package/data/architecture/gui/patterns.md +132 -0
- package/data/architecture/hexagonal/ports-adapters.md +132 -0
- package/data/architecture/index.md +12 -0
- package/data/architecture/layered/index.md +7 -0
- package/data/architecture/layered/layers.md +100 -0
- package/data/architecture/microservices/api-gateway.md +56 -0
- package/data/architecture/microservices/boundaries.md +80 -0
- package/data/architecture/microservices/communication.md +97 -0
- package/data/architecture/microservices/data.md +92 -0
- package/data/architecture/microservices/index.md +11 -0
- package/data/architecture/microservices/resilience.md +111 -0
- package/data/architecture/modular-monolith/boundaries.md +133 -0
- package/data/architecture/modular-monolith/structure.md +131 -0
- package/data/architecture/serverless/best-practices.md +322 -0
- package/data/architecture/serverless/index.md +7 -0
- package/data/architecture/serverless/patterns.md +80 -0
- package/data/architecture/solid/index.md +7 -0
- package/data/architecture/solid/principles.md +187 -0
- package/data/database/basics.md +365 -0
- package/data/database/design-patterns.md +68 -0
- package/data/database/index.md +8 -0
- package/data/database/indexing.md +136 -0
- package/data/database/nosql.md +223 -0
- package/data/database/schema.md +137 -0
- package/data/devops/ci-cd.md +66 -0
- package/data/devops/index.md +8 -0
- package/data/devops/observability.md +73 -0
- package/data/devops/practices.md +77 -0
- package/data/error-handling/basics.md +222 -0
- package/data/error-handling/index.md +7 -0
- package/data/error-handling/strategy.md +185 -0
- package/data/guideline-mappings.yml +1077 -0
- package/data/index.md +3 -0
- package/data/language/csharp/basics.md +210 -0
- package/data/language/csharp/testing.md +252 -0
- package/data/language/go/basics.md +158 -0
- package/data/language/go/testing.md +192 -0
- package/data/language/index.md +14 -0
- package/data/language/java/basics.md +184 -0
- package/data/language/java/testing.md +273 -0
- package/data/language/javascript/basics.md +217 -0
- package/data/language/javascript/testing.md +269 -0
- package/data/language/python/async.md +100 -0
- package/data/language/python/basics.md +100 -0
- package/data/language/python/index.md +10 -0
- package/data/language/python/testing.md +125 -0
- package/data/language/python/types.md +99 -0
- package/data/language/ruby/basics.md +227 -0
- package/data/language/ruby/testing.md +267 -0
- package/data/language/rust/basics.md +175 -0
- package/data/language/rust/testing.md +219 -0
- package/data/language/typescript/async.md +103 -0
- package/data/language/typescript/basics.md +87 -0
- package/data/language/typescript/config.md +95 -0
- package/data/language/typescript/error-handling.md +98 -0
- package/data/language/typescript/generics.md +85 -0
- package/data/language/typescript/index.md +14 -0
- package/data/language/typescript/interfaces-types.md +83 -0
- package/data/language/typescript/performance.md +103 -0
- package/data/language/typescript/testing.md +98 -0
- package/data/patterns/base-patterns.md +105 -0
- package/data/patterns/concurrency.md +87 -0
- package/data/patterns/data-access.md +83 -0
- package/data/patterns/distribution.md +86 -0
- package/data/patterns/domain-logic.md +81 -0
- package/data/patterns/gof.md +109 -0
- package/data/patterns/index.md +12 -0
- package/data/performance/async.md +148 -0
- package/data/performance/basics.md +324 -0
- package/data/performance/caching-strategies.md +68 -0
- package/data/performance/caching.md +152 -0
- package/data/performance/index.md +8 -0
- package/data/practices/code-review.md +52 -0
- package/data/practices/documentation.md +260 -0
- package/data/practices/index.md +11 -0
- package/data/practices/planning.md +142 -0
- package/data/practices/refactoring.md +91 -0
- package/data/practices/version-control.md +55 -0
- package/data/security/auth-jwt.md +159 -0
- package/data/security/headers.md +143 -0
- package/data/security/index.md +10 -0
- package/data/security/injection.md +119 -0
- package/data/security/secrets.md +148 -0
- package/data/style/index.md +8 -0
- package/data/style/naming.md +136 -0
- package/data/style/organization.md +162 -0
- package/data/templates/agents/architecture-reviewer.md +88 -0
- package/data/templates/agents/guideline-checker.md +73 -0
- package/data/templates/agents/security-auditor.md +108 -0
- package/data/templates/antigravity/rules/architecture.md.hbs +5 -0
- package/data/templates/antigravity/rules/code-style.md.hbs +5 -0
- package/data/templates/antigravity/rules/language.md.hbs +5 -0
- package/data/templates/antigravity/rules/performance.md.hbs +5 -0
- package/data/templates/antigravity/rules/security.md.hbs +5 -0
- package/data/templates/antigravity/rules/testing.md.hbs +5 -0
- package/data/templates/antigravity/workflows/add-documentation.md.hbs +23 -0
- package/data/templates/antigravity/workflows/generate-integration-tests.md.hbs +17 -0
- package/data/templates/antigravity/workflows/generate-unit-tests.md.hbs +20 -0
- package/data/templates/antigravity/workflows/performance-audit.md.hbs +24 -0
- package/data/templates/antigravity/workflows/refactor-extract-module.md.hbs +17 -0
- package/data/templates/antigravity/workflows/security-audit.md.hbs +20 -0
- package/data/templates/hooks/formatting.json +26 -0
- package/data/templates/hooks/security.json +35 -0
- package/data/templates/hooks/testing.json +17 -0
- package/data/testing/basics.md +151 -0
- package/data/testing/index.md +9 -0
- package/data/testing/integration.md +159 -0
- package/data/testing/unit-fundamentals.md +128 -0
- package/data/testing/unit-mocking.md +116 -0
- package/data/version.json +49 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/config/profiles.d.ts +4 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +30 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/config/settings.d.ts +7 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +7 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58489 -0
- package/dist/index.js.map +1 -0
- package/dist/models/guideline.d.ts +15 -0
- package/dist/models/guideline.d.ts.map +1 -0
- package/dist/models/guideline.js +2 -0
- package/dist/models/guideline.js.map +1 -0
- package/dist/models/preference.d.ts +9 -0
- package/dist/models/preference.d.ts.map +1 -0
- package/dist/models/preference.js +2 -0
- package/dist/models/preference.js.map +1 -0
- package/dist/models/profile.d.ts +9 -0
- package/dist/models/profile.d.ts.map +1 -0
- package/dist/models/profile.js +2 -0
- package/dist/models/profile.js.map +1 -0
- package/dist/models/project.d.ts +13 -0
- package/dist/models/project.d.ts.map +1 -0
- package/dist/models/project.js +2 -0
- package/dist/models/project.js.map +1 -0
- package/dist/services/ai/anthropic.d.ts +7 -0
- package/dist/services/ai/anthropic.d.ts.map +1 -0
- package/dist/services/ai/anthropic.js +39 -0
- package/dist/services/ai/anthropic.js.map +1 -0
- package/dist/services/generator.d.ts +2 -0
- package/dist/services/generator.d.ts.map +1 -0
- package/dist/services/generator.js +4 -0
- package/dist/services/generator.js.map +1 -0
- package/dist/services/learner.d.ts +2 -0
- package/dist/services/learner.d.ts.map +1 -0
- package/dist/services/learner.js +4 -0
- package/dist/services/learner.js.map +1 -0
- package/dist/services/scanner.d.ts +3 -0
- package/dist/services/scanner.d.ts.map +1 -0
- package/dist/services/scanner.js +54 -0
- package/dist/services/scanner.js.map +1 -0
- package/dist/utils/errors.d.ts +15 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +27 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file.d.ts +7 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +32 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +17 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/path.d.ts +6 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +14 -0
- package/dist/utils/path.js.map +1 -0
- package/docs/planning/memory-lane.md +83 -0
- package/package.json +64 -0
- package/packaging/linux/aicgen.spec +23 -0
- package/packaging/linux/control +9 -0
- package/packaging/macos/scripts/postinstall +12 -0
- package/packaging/windows/setup.nsi +92 -0
- package/planning/BRANDING-SUMMARY.md +194 -0
- package/planning/BRANDING.md +174 -0
- package/planning/BUILD.md +186 -0
- package/planning/CHUNK-IMPLEMENTATION-PLAN.md +87 -0
- package/planning/CHUNK-TAXONOMY.md +375 -0
- package/planning/CHUNKS-COMPLETE.md +382 -0
- package/planning/DESIGN.md +313 -0
- package/planning/DYNAMIC-GUIDELINES-DESIGN.md +265 -0
- package/planning/ENTERPRISE-UX-COMPLETE.md +281 -0
- package/planning/IMPLEMENTATION-PLAN.md +20 -0
- package/planning/PHASE1-COMPLETE.md +211 -0
- package/planning/PHASE2-COMPLETE.md +350 -0
- package/planning/PHASE3-COMPLETE.md +399 -0
- package/planning/PHASE4-COMPLETE.md +361 -0
- package/planning/PHASE4.5-CHUNKS.md +462 -0
- package/planning/STRUCTURE.md +170 -0
- package/scripts/add-categories.ts +87 -0
- package/scripts/build-binary.ts +46 -0
- package/scripts/embed-data.ts +105 -0
- package/scripts/generate-version.ts +150 -0
- package/scripts/test-decompress.ts +27 -0
- package/scripts/test-extract.ts +31 -0
- package/src/__tests__/services/assistant-file-writer.test.ts +400 -0
- package/src/__tests__/services/guideline-loader.test.ts +281 -0
- package/src/__tests__/services/tarball-extraction.test.ts +125 -0
- package/src/commands/add-guideline.ts +296 -0
- package/src/commands/clear.ts +61 -0
- package/src/commands/guideline-selector.ts +123 -0
- package/src/commands/init.ts +645 -0
- package/src/commands/quick-add.ts +586 -0
- package/src/commands/remove-guideline.ts +152 -0
- package/src/commands/stats.ts +49 -0
- package/src/commands/update.ts +240 -0
- package/src/config.ts +82 -0
- package/src/embedded-data.ts +1492 -0
- package/src/index.ts +67 -0
- package/src/models/profile.ts +24 -0
- package/src/models/project.ts +43 -0
- package/src/services/assistant-file-writer.ts +612 -0
- package/src/services/config-generator.ts +150 -0
- package/src/services/config-manager.ts +70 -0
- package/src/services/data-source.ts +248 -0
- package/src/services/first-run-init.ts +148 -0
- package/src/services/guideline-loader.ts +311 -0
- package/src/services/hook-generator.ts +178 -0
- package/src/services/subagent-generator.ts +310 -0
- package/src/utils/banner.ts +66 -0
- package/src/utils/errors.ts +27 -0
- package/src/utils/file.ts +67 -0
- package/src/utils/formatting.ts +172 -0
- package/src/utils/logger.ts +89 -0
- package/src/utils/path.ts +17 -0
- package/src/utils/wizard-state.ts +132 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Dynamic Guidelines System Design
|
|
2
|
+
|
|
3
|
+
## Problem
|
|
4
|
+
|
|
5
|
+
Current system embeds all guidelines at build time. Users can't:
|
|
6
|
+
- Add new guidelines without rebuilding
|
|
7
|
+
- Update existing guidelines
|
|
8
|
+
- Contribute custom guidelines
|
|
9
|
+
- Download community guidelines
|
|
10
|
+
|
|
11
|
+
## Proposed Solution: Hybrid System
|
|
12
|
+
|
|
13
|
+
### Architecture
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Priority (highest to lowest):
|
|
17
|
+
1. ~/.aicgen/guidelines/ (user custom)
|
|
18
|
+
2. ~/.aicgen/cache/latest/ (downloaded updates)
|
|
19
|
+
3. Embedded data (bundled fallback)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Directory Structure
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
~/.aicgen/
|
|
26
|
+
├── config.yml # User config
|
|
27
|
+
├── guidelines/ # User custom guidelines
|
|
28
|
+
│ ├── custom-mappings.yml # User-added mappings
|
|
29
|
+
│ └── custom/
|
|
30
|
+
│ ├── my-react-guide.md
|
|
31
|
+
│ └── my-nextjs-guide.md
|
|
32
|
+
│
|
|
33
|
+
└── cache/
|
|
34
|
+
└── latest/ # Downloaded official updates
|
|
35
|
+
├── guideline-mappings.yml
|
|
36
|
+
└── guidelines/*.md
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Implementation Plan
|
|
40
|
+
|
|
41
|
+
#### 1. Data Source Layer (`src/services/data-source.ts`)
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
interface DataSource {
|
|
45
|
+
getMappings(): Promise<Record<string, GuidelineMapping>>;
|
|
46
|
+
getGuideline(path: string): Promise<string>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
class EmbeddedDataSource implements DataSource {
|
|
50
|
+
// Uses EMBEDDED_DATA (current implementation)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
class FileSystemDataSource implements DataSource {
|
|
54
|
+
constructor(private basePath: string) {}
|
|
55
|
+
// Reads from filesystem
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
class HybridDataSource implements DataSource {
|
|
59
|
+
constructor(
|
|
60
|
+
private userPath: string, // ~/.aicgen/guidelines
|
|
61
|
+
private cachePath: string, // ~/.aicgen/cache/latest
|
|
62
|
+
private embedded: DataSource // Fallback
|
|
63
|
+
) {}
|
|
64
|
+
|
|
65
|
+
async getMappings() {
|
|
66
|
+
// Merge: user > cache > embedded
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async getGuideline(path: string) {
|
|
70
|
+
// Try: user > cache > embedded
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
#### 2. Updated GuidelineLoader
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
export class GuidelineLoader {
|
|
79
|
+
private dataSource: DataSource;
|
|
80
|
+
|
|
81
|
+
constructor(dataSource?: DataSource) {
|
|
82
|
+
this.dataSource = dataSource || this.createDefaultDataSource();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private createDefaultDataSource(): DataSource {
|
|
86
|
+
const userDir = join(homedir(), '.aicgen', 'guidelines');
|
|
87
|
+
const cacheDir = join(homedir(), '.aicgen', 'cache', 'latest');
|
|
88
|
+
|
|
89
|
+
return new HybridDataSource(
|
|
90
|
+
userDir,
|
|
91
|
+
cacheDir,
|
|
92
|
+
new EmbeddedDataSource()
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Rest of implementation uses dataSource
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### 3. New Commands
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Update official guidelines from GitHub
|
|
104
|
+
aicgen update
|
|
105
|
+
|
|
106
|
+
# Add custom guideline
|
|
107
|
+
aicgen add-guideline <path> --category <cat> --language <lang>
|
|
108
|
+
|
|
109
|
+
# List all available guidelines
|
|
110
|
+
aicgen list-guidelines [--source user|cache|embedded|all]
|
|
111
|
+
|
|
112
|
+
# Remove guideline
|
|
113
|
+
aicgen remove-guideline <id>
|
|
114
|
+
|
|
115
|
+
# Reset to embedded (clear cache and user)
|
|
116
|
+
aicgen reset-guidelines
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Update Command Flow
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// src/commands/update.ts
|
|
123
|
+
export async function updateCommand() {
|
|
124
|
+
const spinner = ora('Checking for updates...').start();
|
|
125
|
+
|
|
126
|
+
// 1. Fetch latest from GitHub
|
|
127
|
+
const latest = await fetchLatestGuidelines();
|
|
128
|
+
|
|
129
|
+
// 2. Compare versions
|
|
130
|
+
const currentVersion = getEmbeddedVersion();
|
|
131
|
+
if (latest.version <= currentVersion) {
|
|
132
|
+
spinner.succeed('Already up to date');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// 3. Download and extract
|
|
137
|
+
const cachePath = join(homedir(), '.aicgen', 'cache', 'latest');
|
|
138
|
+
await downloadAndExtract(latest.url, cachePath);
|
|
139
|
+
|
|
140
|
+
spinner.succeed(`Updated to v${latest.version}`);
|
|
141
|
+
console.log(chalk.cyan(`\n📦 New guidelines available:`));
|
|
142
|
+
latest.changes.forEach(change => {
|
|
143
|
+
console.log(` ${chalk.gray('•')} ${change}`);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Custom Guideline Format
|
|
149
|
+
|
|
150
|
+
```yaml
|
|
151
|
+
# ~/.aicgen/guidelines/custom-mappings.yml
|
|
152
|
+
my-react-hooks:
|
|
153
|
+
path: custom/react-hooks-guide.md
|
|
154
|
+
category: Best Practices
|
|
155
|
+
languages: [typescript, javascript]
|
|
156
|
+
levels: [standard, expert, full]
|
|
157
|
+
architectures: [layered, modular-monolith]
|
|
158
|
+
tags: [react, hooks, frontend]
|
|
159
|
+
|
|
160
|
+
my-nextjs-patterns:
|
|
161
|
+
path: custom/nextjs-patterns.md
|
|
162
|
+
category: Architecture
|
|
163
|
+
languages: [typescript]
|
|
164
|
+
levels: [expert, full]
|
|
165
|
+
tags: [nextjs, react, ssr]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Benefits
|
|
169
|
+
|
|
170
|
+
### For Users
|
|
171
|
+
- ✅ Add custom guidelines without rebuild
|
|
172
|
+
- ✅ Update official guidelines via `aicgen update`
|
|
173
|
+
- ✅ Works offline (embedded fallback)
|
|
174
|
+
- ✅ Customize for their tech stack
|
|
175
|
+
|
|
176
|
+
### For Maintainers
|
|
177
|
+
- ✅ Push guideline updates without new releases
|
|
178
|
+
- ✅ Faster iteration on guidelines
|
|
179
|
+
- ✅ Community contributions easier
|
|
180
|
+
|
|
181
|
+
### For Teams
|
|
182
|
+
- ✅ Share team-specific guidelines
|
|
183
|
+
- ✅ Enforce company standards
|
|
184
|
+
- ✅ Version control custom guidelines
|
|
185
|
+
|
|
186
|
+
## Migration Path
|
|
187
|
+
|
|
188
|
+
### Phase 1: Keep Current System
|
|
189
|
+
- No breaking changes
|
|
190
|
+
- Embedded data still works
|
|
191
|
+
|
|
192
|
+
### Phase 2: Add Hybrid Support
|
|
193
|
+
- Implement data source layer
|
|
194
|
+
- Add filesystem loading
|
|
195
|
+
- Merge logic for multiple sources
|
|
196
|
+
|
|
197
|
+
### Phase 3: Add Update Command
|
|
198
|
+
- GitHub integration
|
|
199
|
+
- Version checking
|
|
200
|
+
- Download and cache
|
|
201
|
+
|
|
202
|
+
### Phase 4: Add Custom Guidelines
|
|
203
|
+
- CLI commands for adding/removing
|
|
204
|
+
- Validation and linting
|
|
205
|
+
- Documentation
|
|
206
|
+
|
|
207
|
+
## Implementation Checklist
|
|
208
|
+
|
|
209
|
+
- [ ] Create `DataSource` interface
|
|
210
|
+
- [ ] Implement `EmbeddedDataSource`
|
|
211
|
+
- [ ] Implement `FileSystemDataSource`
|
|
212
|
+
- [ ] Implement `HybridDataSource`
|
|
213
|
+
- [ ] Update `GuidelineLoader` to use data sources
|
|
214
|
+
- [ ] Create `~/.aicgen/` directory structure
|
|
215
|
+
- [ ] Implement `update` command
|
|
216
|
+
- [ ] Implement `add-guideline` command
|
|
217
|
+
- [ ] Implement `list-guidelines` command
|
|
218
|
+
- [ ] Add version tracking
|
|
219
|
+
- [ ] GitHub integration for updates
|
|
220
|
+
- [ ] Validation for custom guidelines
|
|
221
|
+
- [ ] Documentation and examples
|
|
222
|
+
|
|
223
|
+
## Alternative: Remote-First Approach
|
|
224
|
+
|
|
225
|
+
If internet is always available:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// Fetch from CDN/GitHub on every run (with cache)
|
|
229
|
+
const guidelines = await fetch('https://cdn.aicgen.dev/guidelines/latest.json');
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Pros**: Always latest
|
|
233
|
+
**Cons**: Requires internet, slower startup
|
|
234
|
+
|
|
235
|
+
**Verdict**: Hybrid approach is better - works offline, updates when available.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Questions for Implementation
|
|
240
|
+
|
|
241
|
+
1. **Should we implement this now or later?**
|
|
242
|
+
- Now: Full flexibility from day 1
|
|
243
|
+
- Later: Ship faster, add when needed
|
|
244
|
+
|
|
245
|
+
2. **Update frequency?**
|
|
246
|
+
- Manual: `aicgen update` when user wants
|
|
247
|
+
- Auto-check: Check on init, download in background
|
|
248
|
+
- Both: Auto-check + manual command
|
|
249
|
+
|
|
250
|
+
3. **Custom guideline validation?**
|
|
251
|
+
- Strict: Must match schema, linting required
|
|
252
|
+
- Loose: Any markdown file works
|
|
253
|
+
- Medium: Basic validation, warnings for issues
|
|
254
|
+
|
|
255
|
+
4. **Storage location?**
|
|
256
|
+
- `~/.aicgen/` (Unix-style)
|
|
257
|
+
- Platform-specific config dirs
|
|
258
|
+
- Both with fallback
|
|
259
|
+
|
|
260
|
+
5. **Versioning?**
|
|
261
|
+
- Semantic versioning (1.0.0)
|
|
262
|
+
- Date-based (2025-12-08)
|
|
263
|
+
- Git commit hash
|
|
264
|
+
|
|
265
|
+
My recommendation: **Implement Phase 1-2 now** (hybrid system), **Phase 3-4 later** (update commands).
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Enterprise UX Implementation Complete ✅
|
|
2
|
+
|
|
3
|
+
## What Was Implemented
|
|
4
|
+
|
|
5
|
+
### 1. Box Formatting Utility (`src/utils/formatting.ts`)
|
|
6
|
+
|
|
7
|
+
**Functions:**
|
|
8
|
+
- `drawBox()` - Draw bordered boxes with titles and padding
|
|
9
|
+
- `drawSeparator()` - Horizontal separators
|
|
10
|
+
- `drawTable()` - Full bordered tables with headers
|
|
11
|
+
- `createSummaryBox()` - Formatted key-value summary boxes
|
|
12
|
+
- `createMetricsBox()` - Metrics display with custom styling
|
|
13
|
+
- `padLeft()`, `padRight()`, `center()` - Text alignment helpers
|
|
14
|
+
|
|
15
|
+
**Example:**
|
|
16
|
+
```
|
|
17
|
+
╭──────────────────────────────── 📁 Project Detection ─────────────────────────────────╮
|
|
18
|
+
│ │
|
|
19
|
+
│ Name: my-project │
|
|
20
|
+
│ Language: typescript │
|
|
21
|
+
│ │
|
|
22
|
+
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 2. Wizard State Management (`src/utils/wizard-state.ts`)
|
|
26
|
+
|
|
27
|
+
**Features:**
|
|
28
|
+
- Full state tracking for wizard flow
|
|
29
|
+
- History management for back navigation
|
|
30
|
+
- Step validation and conditional skipping
|
|
31
|
+
- Helper functions for back navigation
|
|
32
|
+
|
|
33
|
+
**Key Classes/Functions:**
|
|
34
|
+
- `WizardStateManager` - Manages wizard state and navigation
|
|
35
|
+
- `addBackOption()` - Adds "← Back" to choice lists
|
|
36
|
+
- `isBackSelected()` - Checks if back was selected
|
|
37
|
+
- Constants: `BACK_OPTION`, `BACK_VALUE`
|
|
38
|
+
|
|
39
|
+
### 3. Complete Wizard Refactor (`src/commands/init.ts`)
|
|
40
|
+
|
|
41
|
+
**Implemented:**
|
|
42
|
+
- ✅ State-based wizard flow
|
|
43
|
+
- ✅ Back navigation on every prompt
|
|
44
|
+
- ✅ Box-formatted output
|
|
45
|
+
- ✅ Summary preview before generation
|
|
46
|
+
- ✅ Profile metrics in level descriptions
|
|
47
|
+
- ✅ Smart navigation (skip steps based on setup type)
|
|
48
|
+
|
|
49
|
+
**Flow:**
|
|
50
|
+
1. Project Detection → Box-formatted display
|
|
51
|
+
2. Language Selection → Confirm detected or select
|
|
52
|
+
3. Project Type → With back option
|
|
53
|
+
4. AI Assistant → With back option
|
|
54
|
+
5. Setup Type (Quick/Custom) → With back option
|
|
55
|
+
6. Architecture → With back option
|
|
56
|
+
7. Level → **Shows metrics in description!**
|
|
57
|
+
8. Guidelines (if custom) → With back option
|
|
58
|
+
9. **Summary Preview** → Box-formatted with back option
|
|
59
|
+
10. Generation → Progress indicators
|
|
60
|
+
|
|
61
|
+
### 4. Smart Guideline Selector (`src/commands/guideline-selector.ts`)
|
|
62
|
+
|
|
63
|
+
**Features:**
|
|
64
|
+
- ✅ Category-child synchronization
|
|
65
|
+
- ✅ Back navigation support
|
|
66
|
+
- ✅ Clear instructions
|
|
67
|
+
- ✅ Selection summary
|
|
68
|
+
|
|
69
|
+
**Behavior:**
|
|
70
|
+
- Check category → All children checked
|
|
71
|
+
- Uncheck category → Can still select individual children
|
|
72
|
+
- Shows "Selected X of Y guidelines" summary
|
|
73
|
+
|
|
74
|
+
### 5. Enhanced Banner Display
|
|
75
|
+
|
|
76
|
+
**Updates:**
|
|
77
|
+
- ✅ Redesigned ASCII art to match SVG
|
|
78
|
+
- ✅ Shows on main CLI entry (not just init)
|
|
79
|
+
- ✅ Navigation instructions displayed
|
|
80
|
+
- ✅ Professional formatting
|
|
81
|
+
|
|
82
|
+
## Visual Examples
|
|
83
|
+
|
|
84
|
+
### Main CLI Banner
|
|
85
|
+
```
|
|
86
|
+
◉ ╭──────────╮
|
|
87
|
+
◉ ╲ │ ───── │
|
|
88
|
+
◉ ╲ ──► ◆ ─► │ ──── │
|
|
89
|
+
◉ ╱ │ ───── │
|
|
90
|
+
◉ ╱ │ ──── │
|
|
91
|
+
◉ ╰──────────╯
|
|
92
|
+
✓
|
|
93
|
+
aicgen ─ AI Config Generator
|
|
94
|
+
v0.1.0 · MIT License
|
|
95
|
+
|
|
96
|
+
Navigation:
|
|
97
|
+
↑↓ arrows - Navigate options
|
|
98
|
+
Space - Select/deselect (checkboxes)
|
|
99
|
+
Enter - Confirm selection
|
|
100
|
+
Ctrl+C - Cancel anytime
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Level Selection with Metrics
|
|
104
|
+
```
|
|
105
|
+
? Instruction detail level?
|
|
106
|
+
← Back
|
|
107
|
+
────────────────────────────────────────
|
|
108
|
+
❯ Basic - Essential guidelines for quick projects
|
|
109
|
+
(12 guidelines, 1 hook, 1 agent, ~30 KB)
|
|
110
|
+
|
|
111
|
+
Standard - Production-ready practices
|
|
112
|
+
(28 guidelines, 3 hooks, 2 agents, ~70 KB)
|
|
113
|
+
|
|
114
|
+
Expert - Advanced patterns for scaling
|
|
115
|
+
(45 guidelines, 4 hooks, 3 agents, ~110 KB)
|
|
116
|
+
|
|
117
|
+
Full - Everything - all guidelines
|
|
118
|
+
(57 guidelines, 4 hooks, 3 agents, ~140 KB)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Summary Preview
|
|
122
|
+
```
|
|
123
|
+
╭─────────────────────── 📋 Configuration Summary ───────────────────────╮
|
|
124
|
+
│ │
|
|
125
|
+
│ Assistant: Claude Code │
|
|
126
|
+
│ Language: TypeScript │
|
|
127
|
+
│ Project Type: Web Application │
|
|
128
|
+
│ Architecture: Modular Monolith │
|
|
129
|
+
│ Level: Standard │
|
|
130
|
+
│ │
|
|
131
|
+
╰────────────────────────────────────────────────────────────────────────╯
|
|
132
|
+
|
|
133
|
+
╭────────────────────── 📊 Configuration Preview ───────────────────────╮
|
|
134
|
+
│ │
|
|
135
|
+
│ • 28 guidelines │
|
|
136
|
+
│ • 3 hooks │
|
|
137
|
+
│ • 2 sub-agents │
|
|
138
|
+
│ • ~70 KB estimated size │
|
|
139
|
+
│ │
|
|
140
|
+
╰────────────────────────────────────────────────────────────────────────╯
|
|
141
|
+
|
|
142
|
+
? Proceed with generation?
|
|
143
|
+
❯ Yes, generate configuration
|
|
144
|
+
← Back (modify settings)
|
|
145
|
+
Cancel
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Guideline Selection
|
|
149
|
+
```
|
|
150
|
+
📚 Select Guidelines
|
|
151
|
+
|
|
152
|
+
💡 Tip: Uncheck a category to uncheck all items in that category
|
|
153
|
+
Use Space to toggle, Enter to confirm
|
|
154
|
+
|
|
155
|
+
? Select guidelines to include:
|
|
156
|
+
← Back to previous step
|
|
157
|
+
──────────────────────────────────────────────────
|
|
158
|
+
◉ Language (8 guidelines)
|
|
159
|
+
◉ TypeScript basics
|
|
160
|
+
◉ TypeScript advanced types
|
|
161
|
+
◉ TypeScript decorators
|
|
162
|
+
...
|
|
163
|
+
|
|
164
|
+
◉ Architecture (5 guidelines)
|
|
165
|
+
◉ Layered architecture patterns
|
|
166
|
+
◉ Modular monolith structure
|
|
167
|
+
...
|
|
168
|
+
|
|
169
|
+
◯ Testing (3 guidelines)
|
|
170
|
+
◯ Unit testing standards
|
|
171
|
+
◯ Integration testing
|
|
172
|
+
◯ E2E testing
|
|
173
|
+
|
|
174
|
+
✓ Selected 28 of 57 guidelines
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Files Created
|
|
178
|
+
|
|
179
|
+
1. `src/utils/formatting.ts` - Box formatting utilities
|
|
180
|
+
2. `src/utils/wizard-state.ts` - Wizard state management
|
|
181
|
+
3. `src/commands/guideline-selector.ts` - Smart guideline selector
|
|
182
|
+
4. `src/commands/init-old-backup.ts` - Backup of old init.ts
|
|
183
|
+
5. `ENTERPRISE-UX-COMPLETE.md` - This file
|
|
184
|
+
|
|
185
|
+
## Files Modified
|
|
186
|
+
|
|
187
|
+
1. `src/commands/init.ts` - Complete refactor with enterprise UX
|
|
188
|
+
2. `src/utils/banner.ts` - Redesigned ASCII art
|
|
189
|
+
3. `src/index.ts` - Added banner to main CLI
|
|
190
|
+
|
|
191
|
+
## TypeScript Compilation
|
|
192
|
+
|
|
193
|
+
✅ All code compiles successfully
|
|
194
|
+
```bash
|
|
195
|
+
npx tsc --noEmit
|
|
196
|
+
# No errors
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Testing
|
|
200
|
+
|
|
201
|
+
To test the enterprise UX:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# Build binary
|
|
205
|
+
bun run build:binary:windows
|
|
206
|
+
|
|
207
|
+
# Run init wizard
|
|
208
|
+
./aicgen.exe init
|
|
209
|
+
|
|
210
|
+
# Or just run main CLI to see banner
|
|
211
|
+
./aicgen.exe
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## User Experience Improvements
|
|
215
|
+
|
|
216
|
+
### Before
|
|
217
|
+
- No back navigation (had to Ctrl+C and restart)
|
|
218
|
+
- No metrics preview (guessing what each level includes)
|
|
219
|
+
- No summary (can't review before generating)
|
|
220
|
+
- Simple text output
|
|
221
|
+
- Category selection didn't affect children
|
|
222
|
+
- No banner on main CLI
|
|
223
|
+
|
|
224
|
+
### After
|
|
225
|
+
- ✅ Back navigation on every step
|
|
226
|
+
- ✅ Real-time metrics in level descriptions
|
|
227
|
+
- ✅ Box-formatted summary with preview
|
|
228
|
+
- ✅ Professional box formatting throughout
|
|
229
|
+
- ✅ Smart category-child sync
|
|
230
|
+
- ✅ Beautiful banner on main CLI
|
|
231
|
+
- ✅ Clear navigation instructions
|
|
232
|
+
- ✅ State management for robust flow
|
|
233
|
+
|
|
234
|
+
## Architecture Decisions
|
|
235
|
+
|
|
236
|
+
### State Management Pattern
|
|
237
|
+
Used explicit WizardStateManager class instead of inline state for:
|
|
238
|
+
- Better testability
|
|
239
|
+
- Clear state transitions
|
|
240
|
+
- Easier debugging
|
|
241
|
+
- Type safety
|
|
242
|
+
|
|
243
|
+
### Back Navigation Implementation
|
|
244
|
+
Used "← Back" option in prompts instead of global listener because:
|
|
245
|
+
- More intuitive for users
|
|
246
|
+
- Works with all terminal types
|
|
247
|
+
- Consistent with prompt flow
|
|
248
|
+
- Easier to implement
|
|
249
|
+
|
|
250
|
+
### Box Formatting
|
|
251
|
+
Used custom utility instead of library because:
|
|
252
|
+
- Full control over styling
|
|
253
|
+
- No external dependencies
|
|
254
|
+
- Optimized for our color scheme
|
|
255
|
+
- Custom functions for our use cases
|
|
256
|
+
|
|
257
|
+
## What Users Get
|
|
258
|
+
|
|
259
|
+
1. **Professional First Impression** - Beautiful banner and formatting
|
|
260
|
+
2. **Confidence** - See exactly what they're getting (metrics)
|
|
261
|
+
3. **Control** - Back navigation, review before generation
|
|
262
|
+
4. **Clarity** - Box formatting makes information easy to scan
|
|
263
|
+
5. **Efficiency** - Smart category selection, skip unnecessary steps
|
|
264
|
+
6. **Guidance** - Clear instructions at every step
|
|
265
|
+
|
|
266
|
+
## Next Steps (Optional Enhancements)
|
|
267
|
+
|
|
268
|
+
1. **Loading Animations** - Better progress indicators with sub-tasks
|
|
269
|
+
2. **Error Recovery** - Graceful error handling with recovery options
|
|
270
|
+
3. **Keyboard Shortcuts** - Advanced navigation (Ctrl+B for back, etc.)
|
|
271
|
+
4. **Theme Support** - User-configurable color schemes
|
|
272
|
+
5. **Saved Preferences** - Remember last selections
|
|
273
|
+
6. **Interactive Preview** - Show example generated files
|
|
274
|
+
7. **Validation Hints** - Real-time feedback on selections
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
**Status**: ✅ Complete and production-ready
|
|
279
|
+
**Date**: 2025-12-08
|
|
280
|
+
**Version**: 0.1.0
|
|
281
|
+
**Impact**: Enterprise-grade CLI experience
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Dynamic Guidelines Implementation Plan
|
|
2
|
+
|
|
3
|
+
See DYNAMIC-GUIDELINES-DESIGN.md for full details.
|
|
4
|
+
|
|
5
|
+
## Quick Summary
|
|
6
|
+
|
|
7
|
+
**Storage:**
|
|
8
|
+
- Official: GitHub repo `aicgen/guidelines`
|
|
9
|
+
- Cache: `~/.aicgen/cache/official/`
|
|
10
|
+
- User custom: `~/.aicgen/data/`
|
|
11
|
+
- Embedded: Binary fallback
|
|
12
|
+
|
|
13
|
+
**Commands:**
|
|
14
|
+
- `aicgen update` - Download latest from GitHub
|
|
15
|
+
- `aicgen add-guideline` - Interactive guideline creator
|
|
16
|
+
- Auto-check on `aicgen init`
|
|
17
|
+
|
|
18
|
+
**Priority:** User data > Official cache > Embedded
|
|
19
|
+
|
|
20
|
+
Ready to implement!
|