@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;KACxE,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;KACzD,MAAM,CAAC,SAAS,EAAE,0CAA0C,CAAC;KAC7D,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ProjectType } from './project.js';
|
|
2
|
+
export interface Guideline {
|
|
3
|
+
id: string;
|
|
4
|
+
category: string;
|
|
5
|
+
content: string;
|
|
6
|
+
applicableTo: ProjectType[];
|
|
7
|
+
}
|
|
8
|
+
export interface UserPreference {
|
|
9
|
+
id: string;
|
|
10
|
+
rule: string;
|
|
11
|
+
source: 'manual' | 'extracted';
|
|
12
|
+
sourceProject?: string;
|
|
13
|
+
dateAdded: string;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=guideline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guideline.d.ts","sourceRoot":"","sources":["../../src/models/guideline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guideline.js","sourceRoot":"","sources":["../../src/models/guideline.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preference.d.ts","sourceRoot":"","sources":["../../src/models/preference.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preference.js","sourceRoot":"","sources":["../../src/models/preference.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/models/profile.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/models/profile.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ProjectType = 'typescript' | 'javascript' | 'react' | 'nextjs' | 'express' | 'nest' | 'unknown';
|
|
2
|
+
export interface ProjectInfo {
|
|
3
|
+
path: string;
|
|
4
|
+
name: string;
|
|
5
|
+
type: ProjectType;
|
|
6
|
+
language: 'typescript' | 'javascript';
|
|
7
|
+
frameworks: string[];
|
|
8
|
+
dependencies: Record<string, string>;
|
|
9
|
+
srcDir: string | null;
|
|
10
|
+
testDir: string | null;
|
|
11
|
+
hasExistingConfig: boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5G,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,GAAG,YAAY,CAAC;IACtC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function initializeAnthropic(apiKey: string): void;
|
|
2
|
+
export declare function isAnthropicAvailable(): Promise<boolean>;
|
|
3
|
+
export declare function generateWithAnthropic(prompt: string, options?: {
|
|
4
|
+
maxTokens?: number;
|
|
5
|
+
temperature?: number;
|
|
6
|
+
}): Promise<string>;
|
|
7
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/services/ai/anthropic.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU7D;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACzD,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { AIProviderError } from '../../utils/errors.js';
|
|
3
|
+
let client = null;
|
|
4
|
+
export function initializeAnthropic(apiKey) {
|
|
5
|
+
client = new Anthropic({ apiKey });
|
|
6
|
+
}
|
|
7
|
+
export async function isAnthropicAvailable() {
|
|
8
|
+
if (client)
|
|
9
|
+
return true;
|
|
10
|
+
const envKey = process.env.ANTHROPIC_API_KEY;
|
|
11
|
+
if (envKey) {
|
|
12
|
+
initializeAnthropic(envKey);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
export async function generateWithAnthropic(prompt, options = {}) {
|
|
18
|
+
if (!client) {
|
|
19
|
+
throw new AIProviderError('Anthropic client not initialized', 'anthropic');
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const message = await client.messages.create({
|
|
23
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
24
|
+
max_tokens: options.maxTokens || 4096,
|
|
25
|
+
temperature: options.temperature || 1.0,
|
|
26
|
+
messages: [{ role: 'user', content: prompt }]
|
|
27
|
+
});
|
|
28
|
+
const textBlock = message.content.find(block => block.type === 'text');
|
|
29
|
+
if (!textBlock || textBlock.type !== 'text') {
|
|
30
|
+
throw new AIProviderError('No text content in response', 'anthropic');
|
|
31
|
+
}
|
|
32
|
+
return textBlock.text;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
36
|
+
throw new AIProviderError(message, 'anthropic');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/services/ai/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,IAAI,MAAM,GAAqB,IAAI,CAAC;AAEpC,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,IAAI,MAAM,EAAE,CAAC;QACX,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,UAAwD,EAAE;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,eAAe,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3C,KAAK,EAAE,4BAA4B;YACnC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACrC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;YACvC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,eAAe,CAAC,6BAA6B,EAAE,WAAW,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/services/generator.ts"],"names":[],"mappings":"AAAA,wBAAsB,eAAe,kBAEpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/services/generator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learner.d.ts","sourceRoot":"","sources":["../../src/services/learner.ts"],"names":[],"mappings":"AAAA,wBAAsB,gBAAgB,kBAErC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learner.js","sourceRoot":"","sources":["../../src/services/learner.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/services/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAIhE,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyB3E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { exists, readJSON } from '../utils/file.js';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
export async function scanProject(projectPath) {
|
|
4
|
+
const packageJsonPath = join(projectPath, 'package.json');
|
|
5
|
+
const pkg = await exists(packageJsonPath)
|
|
6
|
+
? await readJSON(packageJsonPath)
|
|
7
|
+
: { dependencies: {}, devDependencies: {} };
|
|
8
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
9
|
+
const type = await detectProjectType(projectPath, allDeps);
|
|
10
|
+
const language = await exists(join(projectPath, 'tsconfig.json')) ? 'typescript' : 'javascript';
|
|
11
|
+
const frameworks = extractFrameworks(allDeps);
|
|
12
|
+
const srcDir = await findDirectory(projectPath, ['src', 'source', 'lib', 'app']);
|
|
13
|
+
const testDir = await findDirectory(projectPath, ['test', 'tests', '__tests__', 'spec']);
|
|
14
|
+
const hasExistingConfig = await exists(join(projectPath, '.aicgen'));
|
|
15
|
+
return {
|
|
16
|
+
path: projectPath,
|
|
17
|
+
name: pkg.name || 'unknown',
|
|
18
|
+
type,
|
|
19
|
+
language,
|
|
20
|
+
frameworks,
|
|
21
|
+
dependencies: pkg.dependencies || {},
|
|
22
|
+
srcDir,
|
|
23
|
+
testDir,
|
|
24
|
+
hasExistingConfig
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function detectProjectType(projectPath, deps) {
|
|
28
|
+
if (deps['next'])
|
|
29
|
+
return 'nextjs';
|
|
30
|
+
if (deps['react'])
|
|
31
|
+
return 'react';
|
|
32
|
+
if (deps['@nestjs/core'])
|
|
33
|
+
return 'nest';
|
|
34
|
+
if (deps['express'])
|
|
35
|
+
return 'express';
|
|
36
|
+
if (await exists(join(projectPath, 'tsconfig.json')))
|
|
37
|
+
return 'typescript';
|
|
38
|
+
if (await exists(join(projectPath, 'package.json')))
|
|
39
|
+
return 'javascript';
|
|
40
|
+
return 'unknown';
|
|
41
|
+
}
|
|
42
|
+
async function findDirectory(projectPath, candidates) {
|
|
43
|
+
for (const dir of candidates) {
|
|
44
|
+
if (await exists(join(projectPath, dir))) {
|
|
45
|
+
return dir;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
function extractFrameworks(deps) {
|
|
51
|
+
const frameworkKeys = ['react', 'vue', 'angular', 'svelte', 'next', 'nuxt', 'express', '@nestjs/core'];
|
|
52
|
+
return frameworkKeys.filter(key => deps[key]);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/services/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class AicgenError extends Error {
|
|
2
|
+
code: string;
|
|
3
|
+
details?: unknown | undefined;
|
|
4
|
+
constructor(message: string, code: string, details?: unknown | undefined);
|
|
5
|
+
}
|
|
6
|
+
export declare class ProjectNotFoundError extends AicgenError {
|
|
7
|
+
constructor(path: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class ConfigExistsError extends AicgenError {
|
|
10
|
+
constructor(path: string);
|
|
11
|
+
}
|
|
12
|
+
export declare class AIProviderError extends AicgenError {
|
|
13
|
+
constructor(message: string, provider: string);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,YAAA;CAM3B;AAED,qBAAa,oBAAqB,SAAQ,WAAW;gBACvC,IAAI,EAAE,MAAM;CAGzB;AAED,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,IAAI,EAAE,MAAM;CAOzB;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAG9C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class AicgenError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
details;
|
|
4
|
+
constructor(message, code, details) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.details = details;
|
|
8
|
+
this.name = this.constructor.name;
|
|
9
|
+
Error.captureStackTrace(this, this.constructor);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class ProjectNotFoundError extends AicgenError {
|
|
13
|
+
constructor(path) {
|
|
14
|
+
super(`Project not found at: ${path}`, 'PROJECT_NOT_FOUND', { path });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ConfigExistsError extends AicgenError {
|
|
18
|
+
constructor(path) {
|
|
19
|
+
super(`Configuration already exists at: ${path}. Use --force to overwrite.`, 'CONFIG_EXISTS', { path });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class AIProviderError extends AicgenError {
|
|
23
|
+
constructor(message, provider) {
|
|
24
|
+
super(`AI Provider Error (${provider}): ${message}`, 'AI_PROVIDER_ERROR', { provider });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAG3B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAiB;QAExB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAU;QAGxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,YAAY,IAAY;QACtB,KAAK,CAAC,yBAAyB,IAAI,EAAE,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAChD,YAAY,IAAY;QACtB,KAAK,CACH,oCAAoC,IAAI,6BAA6B,EACrE,eAAe,EACf,EAAE,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CAAC,sBAAsB,QAAQ,MAAM,OAAO,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function exists(path: string): Promise<boolean>;
|
|
2
|
+
export declare function readFile(path: string): Promise<string>;
|
|
3
|
+
export declare function writeFile(path: string, content: string): Promise<void>;
|
|
4
|
+
export declare function ensureDir(path: string): Promise<void>;
|
|
5
|
+
export declare function readJSON<T>(path: string): Promise<T>;
|
|
6
|
+
export declare function writeJSON<T>(path: string, data: T): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE5D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5E;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAG1D;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
export async function exists(path) {
|
|
4
|
+
try {
|
|
5
|
+
await fs.access(path);
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function readFile(path) {
|
|
13
|
+
return fs.readFile(path, 'utf-8');
|
|
14
|
+
}
|
|
15
|
+
export async function writeFile(path, content) {
|
|
16
|
+
await ensureDir(dirname(path));
|
|
17
|
+
const tempPath = `${path}.tmp`;
|
|
18
|
+
await fs.writeFile(tempPath, content, 'utf-8');
|
|
19
|
+
await fs.rename(tempPath, path);
|
|
20
|
+
}
|
|
21
|
+
export async function ensureDir(path) {
|
|
22
|
+
await fs.mkdir(path, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
export async function readJSON(path) {
|
|
25
|
+
const content = await readFile(path);
|
|
26
|
+
return JSON.parse(content);
|
|
27
|
+
}
|
|
28
|
+
export async function writeJSON(path, data) {
|
|
29
|
+
const content = JSON.stringify(data, null, 2);
|
|
30
|
+
await writeFile(path, content);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAY;IACzC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,OAAe;IAC3D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC;IAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,IAAY;IAC5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,IAAY,EAAE,IAAO;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function logInfo(message: string): void;
|
|
2
|
+
export declare function logSuccess(message: string): void;
|
|
3
|
+
export declare function logWarning(message: string): void;
|
|
4
|
+
export declare function logError(message: string): void;
|
|
5
|
+
export declare function logGray(message: string): void;
|
|
6
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function logInfo(message) {
|
|
3
|
+
console.log(chalk.blue(message));
|
|
4
|
+
}
|
|
5
|
+
export function logSuccess(message) {
|
|
6
|
+
console.log(chalk.green(message));
|
|
7
|
+
}
|
|
8
|
+
export function logWarning(message) {
|
|
9
|
+
console.log(chalk.yellow(message));
|
|
10
|
+
}
|
|
11
|
+
export function logError(message) {
|
|
12
|
+
console.log(chalk.red(message));
|
|
13
|
+
}
|
|
14
|
+
export function logGray(message) {
|
|
15
|
+
console.log(chalk.gray(message));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const AICGEN_HOME: string;
|
|
2
|
+
export declare const AICGEN_PROJECT_DIR = ".aicgen";
|
|
3
|
+
export declare function getAicgenHome(...parts: string[]): string;
|
|
4
|
+
export declare function getProjectConfigDir(projectPath: string): string;
|
|
5
|
+
export declare function toUnixPath(path: string): string;
|
|
6
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/utils/path.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAA6B,CAAC;AACtD,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,wBAAgB,aAAa,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { join, normalize } from 'path';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
export const AICGEN_HOME = join(homedir(), '.aicgen');
|
|
4
|
+
export const AICGEN_PROJECT_DIR = '.aicgen';
|
|
5
|
+
export function getAicgenHome(...parts) {
|
|
6
|
+
return join(AICGEN_HOME, ...parts);
|
|
7
|
+
}
|
|
8
|
+
export function getProjectConfigDir(projectPath) {
|
|
9
|
+
return join(projectPath, AICGEN_PROJECT_DIR);
|
|
10
|
+
}
|
|
11
|
+
export function toUnixPath(path) {
|
|
12
|
+
return normalize(path).replace(/\\/g, '/');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/utils/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,MAAM,UAAU,aAAa,CAAC,GAAG,KAAe;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Memory Lane - aicgen Project Context
|
|
2
|
+
|
|
3
|
+
## Last Updated
|
|
4
|
+
2024-12-16
|
|
5
|
+
|
|
6
|
+
## Project Overview
|
|
7
|
+
**aicgen** - CLI tool that generates AI coding assistant configuration files (CLAUDE.md, copilot-instructions.md, etc.) with embedded guidelines.
|
|
8
|
+
|
|
9
|
+
## Current Objective
|
|
10
|
+
Preparing v1.0 release - improving dataset coverage with basic-level guidelines.
|
|
11
|
+
|
|
12
|
+
## Recent Progress
|
|
13
|
+
|
|
14
|
+
### Completed
|
|
15
|
+
- ✅ Fixed CLAUDE.md location (now at project root, not `.claude/`)
|
|
16
|
+
- ✅ Fixed README guideline count claims (now accurate: 77 mappings)
|
|
17
|
+
- ✅ Added testing guidelines for Go, Rust, Java, C#, Ruby, JavaScript
|
|
18
|
+
- ✅ Added architecture depth for event-driven (messaging.md) and serverless (best-practices.md)
|
|
19
|
+
- ✅ Created `data/version.json` with accurate counts
|
|
20
|
+
- ✅ Created `data/README.md` contribution guide
|
|
21
|
+
- ✅ Added datasource selection (SQL/NoSQL/None) to wizard
|
|
22
|
+
- ✅ Created NoSQL database guidelines
|
|
23
|
+
- ✅ Added datasource filtering to guideline loader
|
|
24
|
+
- ✅ Fixed network permission gating by level (expert/full only)
|
|
25
|
+
- ✅ Added download safeguards (timeout, size limits)
|
|
26
|
+
- ✅ Added destructive regeneration warning in quick-add
|
|
27
|
+
- ✅ **Added 5 new basic-level guidelines (2024-12-16)**:
|
|
28
|
+
- `testing-basics.md` - First unit test, assertions, running tests
|
|
29
|
+
- `error-handling-basics.md` - Try/catch, throw, logging
|
|
30
|
+
- `api-basics.md` - HTTP methods, status codes
|
|
31
|
+
- `database-basics.md` - CRUD operations, SQL basics
|
|
32
|
+
- `performance-basics.md` - Data structures, N+1 queries, indexing
|
|
33
|
+
|
|
34
|
+
### In Progress
|
|
35
|
+
- 🔄 No active work
|
|
36
|
+
|
|
37
|
+
### Pending
|
|
38
|
+
- ⏳ Consider project type expansion (frontend vs fullstack)
|
|
39
|
+
|
|
40
|
+
## Key Decisions
|
|
41
|
+
1. **Datasource dimension** - Users choose SQL, NoSQL, or None; database guidelines filtered accordingly
|
|
42
|
+
2. **Assistant-aware filtering** - Intentionally NOT implemented; all assistants share same guidelines (no assistant-specific content)
|
|
43
|
+
3. **Architecture options** - Added clean-architecture, ddd, serverless, hexagonal to wizard
|
|
44
|
+
4. **Level permissions** - Only expert/full levels get internet access (WebFetch, WebSearch)
|
|
45
|
+
|
|
46
|
+
## Important Files
|
|
47
|
+
- `src/commands/init.ts` - Main wizard flow
|
|
48
|
+
- `src/services/guideline-loader.ts` - Guideline filtering logic
|
|
49
|
+
- `src/models/profile.ts` - ProfileSelection interface with all dimensions
|
|
50
|
+
- `data/guideline-mappings.yml` - All guideline mappings
|
|
51
|
+
- `data/version.json` - Counts and metadata
|
|
52
|
+
|
|
53
|
+
## Technical Context
|
|
54
|
+
- Runtime: Bun
|
|
55
|
+
- Language: TypeScript (strict mode)
|
|
56
|
+
- CLI framework: Commander.js + @inquirer/prompts
|
|
57
|
+
- Embedded data pattern for binary distribution
|
|
58
|
+
- Auto-generated `src/embedded-data.ts` from `scripts/embed-data.ts`
|
|
59
|
+
|
|
60
|
+
## Architect Findings Status
|
|
61
|
+
| Issue | Status |
|
|
62
|
+
|-------|--------|
|
|
63
|
+
| guideline-loader ignores assistant | Documented as intentional |
|
|
64
|
+
| quick-add destructive without warning | ✅ Fixed |
|
|
65
|
+
| Download no timeout/size guards | ✅ Fixed |
|
|
66
|
+
| Default settings enable internet for all | ✅ Fixed (expert/full only) |
|
|
67
|
+
| Architecture wizard/data mismatch | ✅ Fixed |
|
|
68
|
+
| Language gaps outside TS/Python | ✅ Improved (basics + testing for 6 languages) |
|
|
69
|
+
| README claim mismatch | ✅ Fixed |
|
|
70
|
+
| Level imbalance | ✅ Fixed (basic: 12 → 17, +42% coverage) |
|
|
71
|
+
|
|
72
|
+
## Stats
|
|
73
|
+
- Total guidelines: 82 (up from 77)
|
|
74
|
+
- Languages: 8 (TS, Python, Go, Rust, Java, C#, Ruby, JS)
|
|
75
|
+
- Architectures: 8 (layered, modular-monolith, microservices, event-driven, hexagonal, clean-architecture, ddd, serverless)
|
|
76
|
+
- Levels: basic (17), standard (62), expert (76), full (82)
|
|
77
|
+
- Datasources: sql (3), nosql (1)
|
|
78
|
+
- Categories: Testing (4), Error Handling (2), API Design (4), Database (5), Performance (4)
|
|
79
|
+
|
|
80
|
+
## Next Session
|
|
81
|
+
1. Consider project type expansion (split "web" into "frontend" and "fullstack")
|
|
82
|
+
2. Consider running integration tests manually to verify wizard flow
|
|
83
|
+
3. Version bump for release
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aicgen/aicgen",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"description": "AI Config Generator - Automated AI assistant configuration for your projects",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"cli",
|
|
8
|
+
"code-generator",
|
|
9
|
+
"claude",
|
|
10
|
+
"config",
|
|
11
|
+
"assistant"
|
|
12
|
+
],
|
|
13
|
+
"author": "Lahiru Sandaruwan <lpsandaruwan@gmail.com>",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/aicgen/aicgen.git"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"aicgen": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"engines": {
|
|
24
|
+
"bun": ">=1.0.0"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"generate-version": "bun run scripts/generate-version.ts",
|
|
28
|
+
"embed": "bun run generate-version && bun run scripts/embed-data.ts",
|
|
29
|
+
"prebuild": "bun run embed",
|
|
30
|
+
"build": "bun build src/index.ts --outdir dist --target node",
|
|
31
|
+
"build:binary": "bun run embed && bun run scripts/build-binary.ts current",
|
|
32
|
+
"build:binary:windows": "bun run embed && bun run scripts/build-binary.ts windows",
|
|
33
|
+
"build:binary:linux": "bun run embed && bun run scripts/build-binary.ts linux",
|
|
34
|
+
"build:binary:macos": "bun run embed && bun run scripts/build-binary.ts macos",
|
|
35
|
+
"build:all": "bun run build:binary:windows && bun run build:binary:linux && bun run build:binary:macos",
|
|
36
|
+
"dev": "bun --watch src/index.ts",
|
|
37
|
+
"start": "bun src/index.ts",
|
|
38
|
+
"test": "bun test",
|
|
39
|
+
"typecheck": "tsc --noEmit",
|
|
40
|
+
"lint": "eslint src --ext .ts",
|
|
41
|
+
"format": "prettier --write src"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@inquirer/checkbox": "^5.0.2",
|
|
45
|
+
"@inquirer/prompts": "^6.0.1",
|
|
46
|
+
"chalk": "^5.3.0",
|
|
47
|
+
"commander": "^12.1.0",
|
|
48
|
+
"decompress": "^4.2.1",
|
|
49
|
+
"decompress-targz": "^4.1.1",
|
|
50
|
+
"ora": "^8.1.1",
|
|
51
|
+
"winston": "^3.19.0",
|
|
52
|
+
"yaml": "^2.6.1"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@types/bun": "^1.1.13",
|
|
56
|
+
"@types/decompress": "^4.2.7",
|
|
57
|
+
"@types/node": "^20.17.9",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
59
|
+
"@typescript-eslint/parser": "^6.21.0",
|
|
60
|
+
"eslint": "^8.57.1",
|
|
61
|
+
"prettier": "^3.4.2",
|
|
62
|
+
"typescript": "^5.7.2"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Name: aicgen
|
|
2
|
+
Version: 1.0.0
|
|
3
|
+
Release: 1%{?dist}
|
|
4
|
+
Summary: AI Config Generator
|
|
5
|
+
License: MIT
|
|
6
|
+
URL: https://github.com/lpsandaruwan/aicgen
|
|
7
|
+
Source0: aicgen-linux
|
|
8
|
+
|
|
9
|
+
%description
|
|
10
|
+
AI-assisted configuration generator for better coding.
|
|
11
|
+
Automatically analyzes your project and suggests optimal configurations.
|
|
12
|
+
|
|
13
|
+
%install
|
|
14
|
+
mkdir -p %{buildroot}/usr/bin
|
|
15
|
+
cp %{SOURCE0} %{buildroot}/usr/bin/aicgen
|
|
16
|
+
chmod 755 %{buildroot}/usr/bin/aicgen
|
|
17
|
+
|
|
18
|
+
%files
|
|
19
|
+
/usr/bin/aicgen
|
|
20
|
+
|
|
21
|
+
%changelog
|
|
22
|
+
* Thu Dec 11 2025 Lahiru Sandaruwan <lpsandaruwan@gmail.com> - 1.0.0-1
|
|
23
|
+
- Initial release
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Package: aicgen
|
|
2
|
+
Version: 1.0.0
|
|
3
|
+
Section: devel
|
|
4
|
+
Priority: optional
|
|
5
|
+
Architecture: amd64
|
|
6
|
+
Maintainer: lpsandaruwan
|
|
7
|
+
Description: AI Config Generator
|
|
8
|
+
AI-assisted configuration generator for better coding.
|
|
9
|
+
Automatically analyzes your project and suggests optimal configurations.
|