@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.
Files changed (287) hide show
  1. package/.claude/agents/architecture-reviewer.md +88 -0
  2. package/.claude/agents/guideline-checker.md +73 -0
  3. package/.claude/agents/security-auditor.md +108 -0
  4. package/.claude/guidelines/api-design.md +645 -0
  5. package/.claude/guidelines/architecture.md +2503 -0
  6. package/.claude/guidelines/best-practices.md +618 -0
  7. package/.claude/guidelines/code-style.md +304 -0
  8. package/.claude/guidelines/design-patterns.md +573 -0
  9. package/.claude/guidelines/devops.md +226 -0
  10. package/.claude/guidelines/error-handling.md +413 -0
  11. package/.claude/guidelines/language.md +782 -0
  12. package/.claude/guidelines/performance.md +706 -0
  13. package/.claude/guidelines/security.md +583 -0
  14. package/.claude/guidelines/testing.md +568 -0
  15. package/.claude/settings.json +98 -0
  16. package/.claude/settings.local.json +8 -0
  17. package/.env.example +23 -0
  18. package/.eslintrc.json +28 -0
  19. package/.github/workflows/release.yml +180 -0
  20. package/.github/workflows/test.yml +81 -0
  21. package/.gitmodules +3 -0
  22. package/.vs/ProjectSettings.json +3 -0
  23. package/.vs/VSWorkspaceState.json +16 -0
  24. package/.vs/aicgen.slnx/FileContentIndex/5f0ce2a3-fd68-4863-9e23-e428cf1794e3.vsidx +0 -0
  25. package/.vs/aicgen.slnx/v18/.wsuo +0 -0
  26. package/.vs/aicgen.slnx/v18/DocumentLayout.json +54 -0
  27. package/.vs/slnx.sqlite +0 -0
  28. package/AGENTS.md +121 -0
  29. package/CLAUDE.md +36 -0
  30. package/CONTRIBUTING.md +821 -0
  31. package/LICENSE +21 -0
  32. package/README.md +199 -0
  33. package/assets/icon.svg +34 -0
  34. package/assets/logo.svg +41 -0
  35. package/bun.lock +848 -0
  36. package/data/LICENSE +21 -0
  37. package/data/README.md +203 -0
  38. package/data/api/basics.md +292 -0
  39. package/data/api/index.md +8 -0
  40. package/data/api/pagination.md +142 -0
  41. package/data/api/rest.md +137 -0
  42. package/data/api/versioning.md +60 -0
  43. package/data/architecture/clean-architecture/index.md +7 -0
  44. package/data/architecture/clean-architecture/layers.md +111 -0
  45. package/data/architecture/ddd/index.md +8 -0
  46. package/data/architecture/ddd/strategic.md +89 -0
  47. package/data/architecture/ddd/tactical.md +132 -0
  48. package/data/architecture/event-driven/index.md +7 -0
  49. package/data/architecture/event-driven/messaging.md +242 -0
  50. package/data/architecture/event-driven/patterns.md +129 -0
  51. package/data/architecture/feature-toggles/index.md +7 -0
  52. package/data/architecture/feature-toggles/patterns.md +73 -0
  53. package/data/architecture/gui/index.md +7 -0
  54. package/data/architecture/gui/patterns.md +132 -0
  55. package/data/architecture/hexagonal/ports-adapters.md +132 -0
  56. package/data/architecture/index.md +12 -0
  57. package/data/architecture/layered/index.md +7 -0
  58. package/data/architecture/layered/layers.md +100 -0
  59. package/data/architecture/microservices/api-gateway.md +56 -0
  60. package/data/architecture/microservices/boundaries.md +80 -0
  61. package/data/architecture/microservices/communication.md +97 -0
  62. package/data/architecture/microservices/data.md +92 -0
  63. package/data/architecture/microservices/index.md +11 -0
  64. package/data/architecture/microservices/resilience.md +111 -0
  65. package/data/architecture/modular-monolith/boundaries.md +133 -0
  66. package/data/architecture/modular-monolith/structure.md +131 -0
  67. package/data/architecture/serverless/best-practices.md +322 -0
  68. package/data/architecture/serverless/index.md +7 -0
  69. package/data/architecture/serverless/patterns.md +80 -0
  70. package/data/architecture/solid/index.md +7 -0
  71. package/data/architecture/solid/principles.md +187 -0
  72. package/data/database/basics.md +365 -0
  73. package/data/database/design-patterns.md +68 -0
  74. package/data/database/index.md +8 -0
  75. package/data/database/indexing.md +136 -0
  76. package/data/database/nosql.md +223 -0
  77. package/data/database/schema.md +137 -0
  78. package/data/devops/ci-cd.md +66 -0
  79. package/data/devops/index.md +8 -0
  80. package/data/devops/observability.md +73 -0
  81. package/data/devops/practices.md +77 -0
  82. package/data/error-handling/basics.md +222 -0
  83. package/data/error-handling/index.md +7 -0
  84. package/data/error-handling/strategy.md +185 -0
  85. package/data/guideline-mappings.yml +1077 -0
  86. package/data/index.md +3 -0
  87. package/data/language/csharp/basics.md +210 -0
  88. package/data/language/csharp/testing.md +252 -0
  89. package/data/language/go/basics.md +158 -0
  90. package/data/language/go/testing.md +192 -0
  91. package/data/language/index.md +14 -0
  92. package/data/language/java/basics.md +184 -0
  93. package/data/language/java/testing.md +273 -0
  94. package/data/language/javascript/basics.md +217 -0
  95. package/data/language/javascript/testing.md +269 -0
  96. package/data/language/python/async.md +100 -0
  97. package/data/language/python/basics.md +100 -0
  98. package/data/language/python/index.md +10 -0
  99. package/data/language/python/testing.md +125 -0
  100. package/data/language/python/types.md +99 -0
  101. package/data/language/ruby/basics.md +227 -0
  102. package/data/language/ruby/testing.md +267 -0
  103. package/data/language/rust/basics.md +175 -0
  104. package/data/language/rust/testing.md +219 -0
  105. package/data/language/typescript/async.md +103 -0
  106. package/data/language/typescript/basics.md +87 -0
  107. package/data/language/typescript/config.md +95 -0
  108. package/data/language/typescript/error-handling.md +98 -0
  109. package/data/language/typescript/generics.md +85 -0
  110. package/data/language/typescript/index.md +14 -0
  111. package/data/language/typescript/interfaces-types.md +83 -0
  112. package/data/language/typescript/performance.md +103 -0
  113. package/data/language/typescript/testing.md +98 -0
  114. package/data/patterns/base-patterns.md +105 -0
  115. package/data/patterns/concurrency.md +87 -0
  116. package/data/patterns/data-access.md +83 -0
  117. package/data/patterns/distribution.md +86 -0
  118. package/data/patterns/domain-logic.md +81 -0
  119. package/data/patterns/gof.md +109 -0
  120. package/data/patterns/index.md +12 -0
  121. package/data/performance/async.md +148 -0
  122. package/data/performance/basics.md +324 -0
  123. package/data/performance/caching-strategies.md +68 -0
  124. package/data/performance/caching.md +152 -0
  125. package/data/performance/index.md +8 -0
  126. package/data/practices/code-review.md +52 -0
  127. package/data/practices/documentation.md +260 -0
  128. package/data/practices/index.md +11 -0
  129. package/data/practices/planning.md +142 -0
  130. package/data/practices/refactoring.md +91 -0
  131. package/data/practices/version-control.md +55 -0
  132. package/data/security/auth-jwt.md +159 -0
  133. package/data/security/headers.md +143 -0
  134. package/data/security/index.md +10 -0
  135. package/data/security/injection.md +119 -0
  136. package/data/security/secrets.md +148 -0
  137. package/data/style/index.md +8 -0
  138. package/data/style/naming.md +136 -0
  139. package/data/style/organization.md +162 -0
  140. package/data/templates/agents/architecture-reviewer.md +88 -0
  141. package/data/templates/agents/guideline-checker.md +73 -0
  142. package/data/templates/agents/security-auditor.md +108 -0
  143. package/data/templates/antigravity/rules/architecture.md.hbs +5 -0
  144. package/data/templates/antigravity/rules/code-style.md.hbs +5 -0
  145. package/data/templates/antigravity/rules/language.md.hbs +5 -0
  146. package/data/templates/antigravity/rules/performance.md.hbs +5 -0
  147. package/data/templates/antigravity/rules/security.md.hbs +5 -0
  148. package/data/templates/antigravity/rules/testing.md.hbs +5 -0
  149. package/data/templates/antigravity/workflows/add-documentation.md.hbs +23 -0
  150. package/data/templates/antigravity/workflows/generate-integration-tests.md.hbs +17 -0
  151. package/data/templates/antigravity/workflows/generate-unit-tests.md.hbs +20 -0
  152. package/data/templates/antigravity/workflows/performance-audit.md.hbs +24 -0
  153. package/data/templates/antigravity/workflows/refactor-extract-module.md.hbs +17 -0
  154. package/data/templates/antigravity/workflows/security-audit.md.hbs +20 -0
  155. package/data/templates/hooks/formatting.json +26 -0
  156. package/data/templates/hooks/security.json +35 -0
  157. package/data/templates/hooks/testing.json +17 -0
  158. package/data/testing/basics.md +151 -0
  159. package/data/testing/index.md +9 -0
  160. package/data/testing/integration.md +159 -0
  161. package/data/testing/unit-fundamentals.md +128 -0
  162. package/data/testing/unit-mocking.md +116 -0
  163. package/data/version.json +49 -0
  164. package/dist/commands/init.d.ts +8 -0
  165. package/dist/commands/init.d.ts.map +1 -0
  166. package/dist/commands/init.js +46 -0
  167. package/dist/commands/init.js.map +1 -0
  168. package/dist/config/profiles.d.ts +4 -0
  169. package/dist/config/profiles.d.ts.map +1 -0
  170. package/dist/config/profiles.js +30 -0
  171. package/dist/config/profiles.js.map +1 -0
  172. package/dist/config/settings.d.ts +7 -0
  173. package/dist/config/settings.d.ts.map +1 -0
  174. package/dist/config/settings.js +7 -0
  175. package/dist/config/settings.js.map +1 -0
  176. package/dist/index.d.ts +3 -0
  177. package/dist/index.d.ts.map +1 -0
  178. package/dist/index.js +58489 -0
  179. package/dist/index.js.map +1 -0
  180. package/dist/models/guideline.d.ts +15 -0
  181. package/dist/models/guideline.d.ts.map +1 -0
  182. package/dist/models/guideline.js +2 -0
  183. package/dist/models/guideline.js.map +1 -0
  184. package/dist/models/preference.d.ts +9 -0
  185. package/dist/models/preference.d.ts.map +1 -0
  186. package/dist/models/preference.js +2 -0
  187. package/dist/models/preference.js.map +1 -0
  188. package/dist/models/profile.d.ts +9 -0
  189. package/dist/models/profile.d.ts.map +1 -0
  190. package/dist/models/profile.js +2 -0
  191. package/dist/models/profile.js.map +1 -0
  192. package/dist/models/project.d.ts +13 -0
  193. package/dist/models/project.d.ts.map +1 -0
  194. package/dist/models/project.js +2 -0
  195. package/dist/models/project.js.map +1 -0
  196. package/dist/services/ai/anthropic.d.ts +7 -0
  197. package/dist/services/ai/anthropic.d.ts.map +1 -0
  198. package/dist/services/ai/anthropic.js +39 -0
  199. package/dist/services/ai/anthropic.js.map +1 -0
  200. package/dist/services/generator.d.ts +2 -0
  201. package/dist/services/generator.d.ts.map +1 -0
  202. package/dist/services/generator.js +4 -0
  203. package/dist/services/generator.js.map +1 -0
  204. package/dist/services/learner.d.ts +2 -0
  205. package/dist/services/learner.d.ts.map +1 -0
  206. package/dist/services/learner.js +4 -0
  207. package/dist/services/learner.js.map +1 -0
  208. package/dist/services/scanner.d.ts +3 -0
  209. package/dist/services/scanner.d.ts.map +1 -0
  210. package/dist/services/scanner.js +54 -0
  211. package/dist/services/scanner.js.map +1 -0
  212. package/dist/utils/errors.d.ts +15 -0
  213. package/dist/utils/errors.d.ts.map +1 -0
  214. package/dist/utils/errors.js +27 -0
  215. package/dist/utils/errors.js.map +1 -0
  216. package/dist/utils/file.d.ts +7 -0
  217. package/dist/utils/file.d.ts.map +1 -0
  218. package/dist/utils/file.js +32 -0
  219. package/dist/utils/file.js.map +1 -0
  220. package/dist/utils/logger.d.ts +6 -0
  221. package/dist/utils/logger.d.ts.map +1 -0
  222. package/dist/utils/logger.js +17 -0
  223. package/dist/utils/logger.js.map +1 -0
  224. package/dist/utils/path.d.ts +6 -0
  225. package/dist/utils/path.d.ts.map +1 -0
  226. package/dist/utils/path.js +14 -0
  227. package/dist/utils/path.js.map +1 -0
  228. package/docs/planning/memory-lane.md +83 -0
  229. package/package.json +64 -0
  230. package/packaging/linux/aicgen.spec +23 -0
  231. package/packaging/linux/control +9 -0
  232. package/packaging/macos/scripts/postinstall +12 -0
  233. package/packaging/windows/setup.nsi +92 -0
  234. package/planning/BRANDING-SUMMARY.md +194 -0
  235. package/planning/BRANDING.md +174 -0
  236. package/planning/BUILD.md +186 -0
  237. package/planning/CHUNK-IMPLEMENTATION-PLAN.md +87 -0
  238. package/planning/CHUNK-TAXONOMY.md +375 -0
  239. package/planning/CHUNKS-COMPLETE.md +382 -0
  240. package/planning/DESIGN.md +313 -0
  241. package/planning/DYNAMIC-GUIDELINES-DESIGN.md +265 -0
  242. package/planning/ENTERPRISE-UX-COMPLETE.md +281 -0
  243. package/planning/IMPLEMENTATION-PLAN.md +20 -0
  244. package/planning/PHASE1-COMPLETE.md +211 -0
  245. package/planning/PHASE2-COMPLETE.md +350 -0
  246. package/planning/PHASE3-COMPLETE.md +399 -0
  247. package/planning/PHASE4-COMPLETE.md +361 -0
  248. package/planning/PHASE4.5-CHUNKS.md +462 -0
  249. package/planning/STRUCTURE.md +170 -0
  250. package/scripts/add-categories.ts +87 -0
  251. package/scripts/build-binary.ts +46 -0
  252. package/scripts/embed-data.ts +105 -0
  253. package/scripts/generate-version.ts +150 -0
  254. package/scripts/test-decompress.ts +27 -0
  255. package/scripts/test-extract.ts +31 -0
  256. package/src/__tests__/services/assistant-file-writer.test.ts +400 -0
  257. package/src/__tests__/services/guideline-loader.test.ts +281 -0
  258. package/src/__tests__/services/tarball-extraction.test.ts +125 -0
  259. package/src/commands/add-guideline.ts +296 -0
  260. package/src/commands/clear.ts +61 -0
  261. package/src/commands/guideline-selector.ts +123 -0
  262. package/src/commands/init.ts +645 -0
  263. package/src/commands/quick-add.ts +586 -0
  264. package/src/commands/remove-guideline.ts +152 -0
  265. package/src/commands/stats.ts +49 -0
  266. package/src/commands/update.ts +240 -0
  267. package/src/config.ts +82 -0
  268. package/src/embedded-data.ts +1492 -0
  269. package/src/index.ts +67 -0
  270. package/src/models/profile.ts +24 -0
  271. package/src/models/project.ts +43 -0
  272. package/src/services/assistant-file-writer.ts +612 -0
  273. package/src/services/config-generator.ts +150 -0
  274. package/src/services/config-manager.ts +70 -0
  275. package/src/services/data-source.ts +248 -0
  276. package/src/services/first-run-init.ts +148 -0
  277. package/src/services/guideline-loader.ts +311 -0
  278. package/src/services/hook-generator.ts +178 -0
  279. package/src/services/subagent-generator.ts +310 -0
  280. package/src/utils/banner.ts +66 -0
  281. package/src/utils/errors.ts +27 -0
  282. package/src/utils/file.ts +67 -0
  283. package/src/utils/formatting.ts +172 -0
  284. package/src/utils/logger.ts +89 -0
  285. package/src/utils/path.ts +17 -0
  286. package/src/utils/wizard-state.ts +132 -0
  287. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=guideline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guideline.js","sourceRoot":"","sources":["../../src/models/guideline.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export interface UserPreference {
2
+ id: string;
3
+ rule: string;
4
+ source: 'manual' | 'extracted';
5
+ sourceProject?: string;
6
+ dateAdded: string;
7
+ usageCount?: number;
8
+ }
9
+ //# sourceMappingURL=preference.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=preference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference.js","sourceRoot":"","sources":["../../src/models/preference.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export interface Profile {
2
+ name: string;
3
+ description: string;
4
+ guidelines: string[];
5
+ includeADR: boolean;
6
+ includeHooks: boolean;
7
+ verbosity: 'concise' | 'detailed' | 'comprehensive';
8
+ }
9
+ //# sourceMappingURL=profile.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=profile.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project.js.map
@@ -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,2 @@
1
+ export declare function generateConfigs(): Promise<void>;
2
+ //# sourceMappingURL=generator.d.ts.map
@@ -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,4 @@
1
+ export async function generateConfigs() {
2
+ throw new Error('Not implemented yet');
3
+ }
4
+ //# sourceMappingURL=generator.js.map
@@ -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,2 @@
1
+ export declare function learnFromProject(): Promise<void>;
2
+ //# sourceMappingURL=learner.d.ts.map
@@ -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,4 @@
1
+ export async function learnFromProject() {
2
+ throw new Error('Not implemented yet');
3
+ }
4
+ //# sourceMappingURL=learner.js.map
@@ -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,3 @@
1
+ import { ProjectInfo } from '../models/project.js';
2
+ export declare function scanProject(projectPath: string): Promise<ProjectInfo>;
3
+ //# sourceMappingURL=scanner.d.ts.map
@@ -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.