ai-first-cli 1.1.1 → 1.1.2

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 (192) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.es.md +137 -1
  3. package/README.md +136 -4
  4. package/ai/ai_context.md +2 -2
  5. package/ai/architecture.md +3 -3
  6. package/ai/cache.json +85 -57
  7. package/ai/ccp/jira-123/context.json +7 -0
  8. package/ai/context/repo.json +56 -0
  9. package/ai/context/utils.json +7 -0
  10. package/ai/dependencies.json +51 -1026
  11. package/ai/files.json +195 -3
  12. package/ai/git/commit-activity.json +8646 -0
  13. package/ai/git/recent-features.json +1 -0
  14. package/ai/git/recent-files.json +52 -0
  15. package/ai/git/recent-flows.json +1 -0
  16. package/ai/graph/knowledge-graph.json +43643 -0
  17. package/ai/graph/module-graph.json +4 -0
  18. package/ai/graph/symbol-graph.json +3307 -879
  19. package/ai/graph/symbol-references.json +119 -32
  20. package/ai/index-state.json +843 -188
  21. package/ai/index.db +0 -0
  22. package/ai/modules.json +4 -0
  23. package/ai/repo-map.json +81 -17
  24. package/ai/repo_map.json +81 -17
  25. package/ai/repo_map.md +21 -7
  26. package/ai/summary.md +5 -5
  27. package/ai/symbols.json +1 -20287
  28. package/dist/analyzers/androidResources.d.ts +23 -0
  29. package/dist/analyzers/androidResources.d.ts.map +1 -0
  30. package/dist/analyzers/androidResources.js +93 -0
  31. package/dist/analyzers/androidResources.js.map +1 -0
  32. package/dist/analyzers/dependencies.d.ts.map +1 -1
  33. package/dist/analyzers/dependencies.js +37 -0
  34. package/dist/analyzers/dependencies.js.map +1 -1
  35. package/dist/analyzers/entrypoints.d.ts.map +1 -1
  36. package/dist/analyzers/entrypoints.js +71 -1
  37. package/dist/analyzers/entrypoints.js.map +1 -1
  38. package/dist/analyzers/gradleModules.d.ts +22 -0
  39. package/dist/analyzers/gradleModules.d.ts.map +1 -0
  40. package/dist/analyzers/gradleModules.js +75 -0
  41. package/dist/analyzers/gradleModules.js.map +1 -0
  42. package/dist/analyzers/techStack.d.ts +7 -0
  43. package/dist/analyzers/techStack.d.ts.map +1 -1
  44. package/dist/analyzers/techStack.js +44 -1
  45. package/dist/analyzers/techStack.js.map +1 -1
  46. package/dist/commands/ai-first.d.ts.map +1 -1
  47. package/dist/commands/ai-first.js +311 -1
  48. package/dist/commands/ai-first.js.map +1 -1
  49. package/dist/core/adapters/adapterRegistry.d.ts +39 -0
  50. package/dist/core/adapters/adapterRegistry.d.ts.map +1 -0
  51. package/dist/core/adapters/adapterRegistry.js +155 -0
  52. package/dist/core/adapters/adapterRegistry.js.map +1 -0
  53. package/dist/core/adapters/baseAdapter.d.ts +49 -0
  54. package/dist/core/adapters/baseAdapter.d.ts.map +1 -0
  55. package/dist/core/adapters/baseAdapter.js +28 -0
  56. package/dist/core/adapters/baseAdapter.js.map +1 -0
  57. package/dist/core/adapters/community/fastapiAdapter.d.ts +7 -0
  58. package/dist/core/adapters/community/fastapiAdapter.d.ts.map +1 -0
  59. package/dist/core/adapters/community/fastapiAdapter.js +40 -0
  60. package/dist/core/adapters/community/fastapiAdapter.js.map +1 -0
  61. package/dist/core/adapters/community/index.d.ts +11 -0
  62. package/dist/core/adapters/community/index.d.ts.map +1 -0
  63. package/dist/core/adapters/community/index.js +11 -0
  64. package/dist/core/adapters/community/index.js.map +1 -0
  65. package/dist/core/adapters/community/laravelAdapter.d.ts +7 -0
  66. package/dist/core/adapters/community/laravelAdapter.d.ts.map +1 -0
  67. package/dist/core/adapters/community/laravelAdapter.js +47 -0
  68. package/dist/core/adapters/community/laravelAdapter.js.map +1 -0
  69. package/dist/core/adapters/community/nestjsAdapter.d.ts +7 -0
  70. package/dist/core/adapters/community/nestjsAdapter.d.ts.map +1 -0
  71. package/dist/core/adapters/community/nestjsAdapter.js +48 -0
  72. package/dist/core/adapters/community/nestjsAdapter.js.map +1 -0
  73. package/dist/core/adapters/community/phoenixAdapter.d.ts +7 -0
  74. package/dist/core/adapters/community/phoenixAdapter.d.ts.map +1 -0
  75. package/dist/core/adapters/community/phoenixAdapter.js +45 -0
  76. package/dist/core/adapters/community/phoenixAdapter.js.map +1 -0
  77. package/dist/core/adapters/community/springBootAdapter.d.ts +7 -0
  78. package/dist/core/adapters/community/springBootAdapter.d.ts.map +1 -0
  79. package/dist/core/adapters/community/springBootAdapter.js +44 -0
  80. package/dist/core/adapters/community/springBootAdapter.js.map +1 -0
  81. package/dist/core/adapters/dotnetAdapter.d.ts +20 -0
  82. package/dist/core/adapters/dotnetAdapter.d.ts.map +1 -0
  83. package/dist/core/adapters/dotnetAdapter.js +86 -0
  84. package/dist/core/adapters/dotnetAdapter.js.map +1 -0
  85. package/dist/core/adapters/index.d.ts +18 -0
  86. package/dist/core/adapters/index.d.ts.map +1 -0
  87. package/dist/core/adapters/index.js +19 -0
  88. package/dist/core/adapters/index.js.map +1 -0
  89. package/dist/core/adapters/javascriptAdapter.d.ts +11 -0
  90. package/dist/core/adapters/javascriptAdapter.d.ts.map +1 -0
  91. package/dist/core/adapters/javascriptAdapter.js +47 -0
  92. package/dist/core/adapters/javascriptAdapter.js.map +1 -0
  93. package/dist/core/adapters/pythonAdapter.d.ts +20 -0
  94. package/dist/core/adapters/pythonAdapter.d.ts.map +1 -0
  95. package/dist/core/adapters/pythonAdapter.js +99 -0
  96. package/dist/core/adapters/pythonAdapter.js.map +1 -0
  97. package/dist/core/adapters/railsAdapter.d.ts +10 -0
  98. package/dist/core/adapters/railsAdapter.d.ts.map +1 -0
  99. package/dist/core/adapters/railsAdapter.js +52 -0
  100. package/dist/core/adapters/railsAdapter.js.map +1 -0
  101. package/dist/core/adapters/salesforceAdapter.d.ts +16 -0
  102. package/dist/core/adapters/salesforceAdapter.d.ts.map +1 -0
  103. package/dist/core/adapters/salesforceAdapter.js +64 -0
  104. package/dist/core/adapters/salesforceAdapter.js.map +1 -0
  105. package/dist/core/adapters/sdk.d.ts +83 -0
  106. package/dist/core/adapters/sdk.d.ts.map +1 -0
  107. package/dist/core/adapters/sdk.js +114 -0
  108. package/dist/core/adapters/sdk.js.map +1 -0
  109. package/dist/core/ccp.d.ts +37 -0
  110. package/dist/core/ccp.d.ts.map +1 -0
  111. package/dist/core/ccp.js +184 -0
  112. package/dist/core/ccp.js.map +1 -0
  113. package/dist/core/gitAnalyzer.d.ts +74 -0
  114. package/dist/core/gitAnalyzer.d.ts.map +1 -0
  115. package/dist/core/gitAnalyzer.js +298 -0
  116. package/dist/core/gitAnalyzer.js.map +1 -0
  117. package/dist/core/incrementalAnalyzer.d.ts +28 -0
  118. package/dist/core/incrementalAnalyzer.d.ts.map +1 -0
  119. package/dist/core/incrementalAnalyzer.js +343 -0
  120. package/dist/core/incrementalAnalyzer.js.map +1 -0
  121. package/dist/core/knowledgeGraphBuilder.d.ts +31 -0
  122. package/dist/core/knowledgeGraphBuilder.d.ts.map +1 -0
  123. package/dist/core/knowledgeGraphBuilder.js +197 -0
  124. package/dist/core/knowledgeGraphBuilder.js.map +1 -0
  125. package/dist/core/lazyAnalyzer.d.ts +57 -0
  126. package/dist/core/lazyAnalyzer.d.ts.map +1 -0
  127. package/dist/core/lazyAnalyzer.js +204 -0
  128. package/dist/core/lazyAnalyzer.js.map +1 -0
  129. package/dist/core/schema.d.ts +57 -0
  130. package/dist/core/schema.d.ts.map +1 -0
  131. package/dist/core/schema.js +131 -0
  132. package/dist/core/schema.js.map +1 -0
  133. package/dist/core/semanticContexts.d.ts +40 -0
  134. package/dist/core/semanticContexts.d.ts.map +1 -0
  135. package/dist/core/semanticContexts.js +454 -0
  136. package/dist/core/semanticContexts.js.map +1 -0
  137. package/docs/es/guide/adapters.md +143 -0
  138. package/docs/es/guide/ai-repository-schema.md +119 -0
  139. package/docs/es/guide/features.md +67 -0
  140. package/docs/es/guide/flows.md +134 -0
  141. package/docs/es/guide/git-intelligence.md +170 -0
  142. package/docs/es/guide/incremental-analysis.md +131 -0
  143. package/docs/es/guide/knowledge-graph.md +135 -0
  144. package/docs/es/guide/lazy-indexing.md +144 -0
  145. package/docs/es/guide/performance.md +125 -0
  146. package/docs/guide/adapters.md +225 -0
  147. package/docs/guide/ai-repository-schema.md +119 -0
  148. package/docs/guide/architecture.md +69 -1
  149. package/docs/guide/flows.md +134 -0
  150. package/docs/guide/git-intelligence.md +170 -0
  151. package/docs/guide/incremental-analysis.md +131 -0
  152. package/docs/guide/knowledge-graph.md +135 -0
  153. package/docs/guide/lazy-indexing.md +144 -0
  154. package/docs/guide/performance.md +125 -0
  155. package/package.json +5 -2
  156. package/src/analyzers/androidResources.ts +113 -0
  157. package/src/analyzers/dependencies.ts +41 -0
  158. package/src/analyzers/entrypoints.ts +80 -1
  159. package/src/analyzers/gradleModules.ts +100 -0
  160. package/src/analyzers/techStack.ts +56 -0
  161. package/src/commands/ai-first.ts +342 -1
  162. package/src/core/adapters/adapterRegistry.ts +187 -0
  163. package/src/core/adapters/baseAdapter.ts +82 -0
  164. package/src/core/adapters/community/fastapiAdapter.ts +50 -0
  165. package/src/core/adapters/community/index.ts +11 -0
  166. package/src/core/adapters/community/laravelAdapter.ts +56 -0
  167. package/src/core/adapters/community/nestjsAdapter.ts +57 -0
  168. package/src/core/adapters/community/phoenixAdapter.ts +54 -0
  169. package/src/core/adapters/community/springBootAdapter.ts +53 -0
  170. package/src/core/adapters/dotnetAdapter.ts +104 -0
  171. package/src/core/adapters/index.ts +24 -0
  172. package/src/core/adapters/javascriptAdapter.ts +56 -0
  173. package/src/core/adapters/pythonAdapter.ts +118 -0
  174. package/src/core/adapters/railsAdapter.ts +65 -0
  175. package/src/core/adapters/salesforceAdapter.ts +76 -0
  176. package/src/core/adapters/sdk.ts +172 -0
  177. package/src/core/ccp.ts +240 -0
  178. package/src/core/gitAnalyzer.ts +391 -0
  179. package/src/core/incrementalAnalyzer.ts +382 -0
  180. package/src/core/knowledgeGraphBuilder.ts +181 -0
  181. package/src/core/lazyAnalyzer.ts +261 -0
  182. package/src/core/schema.ts +157 -0
  183. package/src/core/semanticContexts.ts +575 -0
  184. package/tests/adapters.test.ts +159 -0
  185. package/tests/gitAnalyzer.test.ts +133 -0
  186. package/tests/incrementalAnalyzer.test.ts +83 -0
  187. package/tests/knowledgeGraph.test.ts +146 -0
  188. package/tests/lazyAnalyzer.test.ts +230 -0
  189. package/tests/schema.test.ts +203 -0
  190. package/tests/semanticContexts.test.ts +435 -0
  191. package/ai/context/analyzers.Symbol.json +0 -19
  192. package/ai/context/analyzers.extractSymbols.json +0 -19
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Adapter SDK - Create custom adapters easily
3
+ *
4
+ * This module provides a developer-friendly API for creating
5
+ * ecosystem adapters for AI-First.
6
+ */
7
+ /**
8
+ * Default layer rules for common architectures
9
+ */
10
+ export const DEFAULT_LAYER_RULES = [
11
+ { name: 'api', priority: 1, patterns: ['controller', 'handler', 'route', 'router', 'api', 'endpoint'] },
12
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor'] },
13
+ { name: 'data', priority: 3, patterns: ['repository', 'repo', 'dal', 'dao', 'data', 'persistence'] },
14
+ { name: 'domain', priority: 4, patterns: ['model', 'entity', 'schema', 'domain'] },
15
+ { name: 'util', priority: 5, patterns: ['util', 'helper', 'lib', 'common'] }
16
+ ];
17
+ /**
18
+ * Default ignored folders
19
+ */
20
+ export const DEFAULT_IGNORED_FOLDERS = [
21
+ 'utils', 'helpers', 'types', 'interfaces', 'constants', 'config',
22
+ 'dto', 'models', 'common', 'shared', 'node_modules', '.git',
23
+ 'dist', 'build', 'coverage', '__tests__', 'test', 'tests',
24
+ '.next', '.nuxt', '.vite'
25
+ ];
26
+ /**
27
+ * Create a new adapter with sensible defaults
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import { createAdapter } from './adapters/sdk.js';
32
+ *
33
+ * export const myAdapter = createAdapter('laravel', {
34
+ * displayName: 'Laravel',
35
+ * detectionSignals: [
36
+ * { type: 'file', pattern: 'composer.json' },
37
+ * { type: 'file', pattern: 'artisan' }
38
+ * ],
39
+ * featureRoots: ['app/Http', 'app/Services', 'app/Models'],
40
+ * entrypointPatterns: ['Controller', 'Request', 'Command']
41
+ * });
42
+ * ```
43
+ */
44
+ export function createAdapter(config) {
45
+ return {
46
+ name: config.name,
47
+ displayName: config.displayName,
48
+ detectionSignals: config.detectionSignals || [],
49
+ featureRoots: config.featureRoots || ['src', 'app', 'lib'],
50
+ ignoredFolders: config.ignoredFolders || DEFAULT_IGNORED_FOLDERS,
51
+ entrypointPatterns: config.entrypointPatterns || ['controller', 'service', 'handler'],
52
+ layerRules: config.layerRules || DEFAULT_LAYER_RULES,
53
+ supportedExtensions: config.supportedExtensions || ['.ts', '.js', '.php', '.rb', '.py'],
54
+ flowEntrypointPatterns: config.flowEntrypointPatterns || ['controller', 'route', 'handler', 'command'],
55
+ flowExcludePatterns: config.flowExcludePatterns || [
56
+ 'repository', 'model', 'utils', 'helper', 'test', 'spec', 'config'
57
+ ]
58
+ };
59
+ }
60
+ /**
61
+ * Create a file-based detection signal
62
+ */
63
+ export function fileSignal(pattern) {
64
+ return { type: 'file', pattern };
65
+ }
66
+ /**
67
+ * Create a directory-based detection signal
68
+ */
69
+ export function directorySignal(pattern) {
70
+ return { type: 'directory', pattern };
71
+ }
72
+ /**
73
+ * Create a content-based detection signal
74
+ */
75
+ export function contentSignal(pattern, contentPattern) {
76
+ return { type: 'content', pattern, contentPattern };
77
+ }
78
+ /**
79
+ * Create a layer rule
80
+ */
81
+ export function layerRule(name, priority, patterns) {
82
+ return { name, priority, patterns };
83
+ }
84
+ /**
85
+ * Validate an adapter configuration
86
+ */
87
+ export function validateAdapter(adapter) {
88
+ const errors = [];
89
+ if (!adapter.name || adapter.name.trim() === '') {
90
+ errors.push('Adapter name is required');
91
+ }
92
+ if (!adapter.displayName || adapter.displayName.trim() === '') {
93
+ errors.push('Adapter displayName is required');
94
+ }
95
+ if (!adapter.featureRoots || adapter.featureRoots.length === 0) {
96
+ errors.push('At least one featureRoot is required');
97
+ }
98
+ if (!adapter.layerRules || adapter.layerRules.length === 0) {
99
+ errors.push('At least one layerRule is required');
100
+ }
101
+ // Check for duplicate layer names
102
+ const layerNames = new Set();
103
+ for (const rule of adapter.layerRules || []) {
104
+ if (layerNames.has(rule.name)) {
105
+ errors.push(`Duplicate layer name: ${rule.name}`);
106
+ }
107
+ layerNames.add(rule.name);
108
+ }
109
+ return {
110
+ valid: errors.length === 0,
111
+ errors
112
+ };
113
+ }
114
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../src/core/adapters/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export interface ContextModule {
2
+ name: string;
3
+ description: string;
4
+ files: string[];
5
+ symbols?: string[];
6
+ entrypoints?: string[];
7
+ dependencies?: string[];
8
+ }
9
+ export interface CCPContext {
10
+ task: string;
11
+ description: string;
12
+ includes: string[];
13
+ }
14
+ /**
15
+ * Generate context modules from repository analysis
16
+ */
17
+ export declare function generateContextModules(rootDir: string, aiDir: string): ContextModule[];
18
+ /**
19
+ * Create a new CCP (Context Control Pack)
20
+ */
21
+ export declare function createCCP(rootDir: string, name: string, options?: {
22
+ description?: string;
23
+ include?: string[];
24
+ }): {
25
+ success: boolean;
26
+ path: string;
27
+ error?: string;
28
+ };
29
+ /**
30
+ * List all CCPs
31
+ */
32
+ export declare function listCCPs(rootDir: string): string[];
33
+ /**
34
+ * Get CCP details
35
+ */
36
+ export declare function getCCP(rootDir: string, name: string): CCPContext | null;
37
+ //# sourceMappingURL=ccp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ccp.d.ts","sourceRoot":"","sources":["../../src/core/ccp.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAWD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,aAAa,EAAE,CAwEjB;AAgCD;;GAEG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACf,GACL;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsDpD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAWlD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAgBvE"}
@@ -0,0 +1,184 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { ensureDir, writeFile, readJsonFile } from "../utils/fileUtils.js";
4
+ /**
5
+ * Generate context modules from repository analysis
6
+ */
7
+ export function generateContextModules(rootDir, aiDir) {
8
+ const modules = [];
9
+ const contextDir = path.join(aiDir, "context");
10
+ // Try to read existing data
11
+ let symbolsData = [];
12
+ let depsData = {};
13
+ let repoFiles = [];
14
+ try {
15
+ const symbolsPath = path.join(aiDir, "symbols.json");
16
+ if (fs.existsSync(symbolsPath)) {
17
+ symbolsData = readJsonFile(symbolsPath);
18
+ }
19
+ }
20
+ catch { }
21
+ try {
22
+ const depsPath = path.join(aiDir, "dependencies.json");
23
+ if (fs.existsSync(depsPath)) {
24
+ depsData = readJsonFile(depsPath);
25
+ }
26
+ }
27
+ catch { }
28
+ try {
29
+ const filesPath = path.join(aiDir, "repo_map.json");
30
+ if (fs.existsSync(filesPath)) {
31
+ const repoMap = readJsonFile(filesPath);
32
+ repoFiles = (repoMap.files || []).map((f) => f.path);
33
+ }
34
+ }
35
+ catch { }
36
+ // 1. Generate base repo.json
37
+ const repoModule = {
38
+ name: "repo",
39
+ description: "Base repository context with overall structure",
40
+ files: repoFiles.slice(0, 50),
41
+ };
42
+ modules.push(repoModule);
43
+ // 2. Try to detect feature modules based on directory structure
44
+ const featureDirs = detectFeatureDirectories(repoFiles);
45
+ for (const feature of featureDirs) {
46
+ const featureFiles = repoFiles.filter(f => f.startsWith(feature));
47
+ const featureSymbols = (Array.isArray(symbolsData) ? symbolsData : []).filter((s) => s.file?.startsWith(feature));
48
+ const byFile = depsData.byFile || {};
49
+ const featureDeps = Object.keys(byFile)
50
+ .filter(f => f.startsWith(feature))
51
+ .reduce((acc, f) => {
52
+ acc[f] = byFile[f];
53
+ return acc;
54
+ }, {});
55
+ modules.push({
56
+ name: feature.replace(/[\/\\]/g, "-"),
57
+ description: `Context for ${feature} feature`,
58
+ files: featureFiles,
59
+ symbols: featureSymbols.slice(0, 20).map((s) => s.id || s.name),
60
+ dependencies: Object.values(featureDeps).flat().slice(0, 20),
61
+ });
62
+ }
63
+ // Ensure context directory exists
64
+ ensureDir(contextDir);
65
+ // Write each context module
66
+ for (const mod of modules) {
67
+ const modPath = path.join(contextDir, `${mod.name}.json`);
68
+ writeFile(modPath, JSON.stringify(mod, null, 2));
69
+ }
70
+ return modules;
71
+ }
72
+ /**
73
+ * Detect feature directories from file structure
74
+ */
75
+ function detectFeatureDirectories(files) {
76
+ const dirs = new Set();
77
+ for (const file of files) {
78
+ const parts = file.split("/");
79
+ for (let i = 0; i < parts.length - 1; i++) {
80
+ const dir = parts[i];
81
+ const lowerDir = dir.toLowerCase();
82
+ // Common feature patterns
83
+ if (["auth", "authentication", "login", "users", "security",
84
+ "payments", "billing", "checkout", "subscription",
85
+ "search", "find", "query",
86
+ "api", "services", "endpoints",
87
+ "models", "entities", "schemas",
88
+ "utils", "helpers", "lib",
89
+ "components", "ui", "views", "pages",
90
+ "hooks", "store", "state",
91
+ "config", "settings"].includes(lowerDir)) {
92
+ dirs.add(dir);
93
+ }
94
+ }
95
+ }
96
+ return Array.from(dirs).slice(0, 10);
97
+ }
98
+ /**
99
+ * Create a new CCP (Context Control Pack)
100
+ */
101
+ export function createCCP(rootDir, name, options = {}) {
102
+ const aiDir = path.join(rootDir, "ai");
103
+ const ccpDir = path.join(aiDir, "ccp", name);
104
+ try {
105
+ if (!fs.existsSync(aiDir)) {
106
+ return {
107
+ success: false,
108
+ path: ccpDir,
109
+ error: "AI directory not found. Run 'ai-first init' first.",
110
+ };
111
+ }
112
+ const contextDir = path.join(aiDir, "context");
113
+ if (!fs.existsSync(contextDir)) {
114
+ generateContextModules(rootDir, aiDir);
115
+ }
116
+ const contextFiles = fs.readdirSync(contextDir).filter(f => f.endsWith(".json"));
117
+ const availableModules = contextFiles.map(f => `../../context/${f}`);
118
+ let includes;
119
+ if (options.include && options.include.length > 0) {
120
+ includes = options.include.map(m => {
121
+ if (m.startsWith("../../context/"))
122
+ return m;
123
+ if (m.startsWith("context/"))
124
+ return `../../${m}`;
125
+ return `../../context/${m}.json`;
126
+ });
127
+ }
128
+ else {
129
+ includes = ["../../context/repo.json"];
130
+ }
131
+ ensureDir(ccpDir);
132
+ const ccpContent = {
133
+ task: name,
134
+ description: options.description || "",
135
+ includes,
136
+ };
137
+ const contextPath = path.join(ccpDir, "context.json");
138
+ writeFile(contextPath, JSON.stringify(ccpContent, null, 2));
139
+ return {
140
+ success: true,
141
+ path: ccpDir,
142
+ };
143
+ }
144
+ catch (error) {
145
+ return {
146
+ success: false,
147
+ path: ccpDir,
148
+ error: error.message,
149
+ };
150
+ }
151
+ }
152
+ /**
153
+ * List all CCPs
154
+ */
155
+ export function listCCPs(rootDir) {
156
+ const ccpDir = path.join(rootDir, "ai", "ccp");
157
+ if (!fs.existsSync(ccpDir)) {
158
+ return [];
159
+ }
160
+ return fs.readdirSync(ccpDir).filter(stat => {
161
+ const fullPath = path.join(ccpDir, stat);
162
+ return fs.statSync(fullPath).isDirectory();
163
+ });
164
+ }
165
+ /**
166
+ * Get CCP details
167
+ */
168
+ export function getCCP(rootDir, name) {
169
+ const contextPath = path.join(rootDir, "ai", "ccp", name, "context.json");
170
+ if (!fs.existsSync(contextPath)) {
171
+ return null;
172
+ }
173
+ try {
174
+ const data = readJsonFile(contextPath);
175
+ if (data.task && data.includes) {
176
+ return data;
177
+ }
178
+ return null;
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ //# sourceMappingURL=ccp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ccp.js","sourceRoot":"","sources":["../../src/core/ccp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Git Intelligence Analyzer
3
+ *
4
+ * Analyzes recent git activity to provide AI agents with context about
5
+ * recently changed files, features, and flows.
6
+ */
7
+ export interface GitCommit {
8
+ hash: string;
9
+ date: string;
10
+ message: string;
11
+ author: string;
12
+ files: string[];
13
+ }
14
+ export interface RecentFile {
15
+ path: string;
16
+ commitCount: number;
17
+ lastChanged: string;
18
+ }
19
+ export interface GitActivity {
20
+ totalCommits: number;
21
+ dateRange: {
22
+ start: string;
23
+ end: string;
24
+ };
25
+ files: Record<string, number>;
26
+ features: Record<string, number>;
27
+ flows: Record<string, number>;
28
+ }
29
+ export interface GitAnalyzerOptions {
30
+ /** Number of commits to analyze (default: 50) */
31
+ commitLimit?: number;
32
+ /** Ignore commits older than N days (default: 30) */
33
+ maxAgeDays?: number;
34
+ /** Maximum number of files to track (default: 50) */
35
+ maxFiles?: number;
36
+ }
37
+ /**
38
+ * Check if a directory is a git repository
39
+ */
40
+ export declare function detectGitRepository(rootDir: string): boolean;
41
+ /**
42
+ * Get recent commits from git repository
43
+ */
44
+ export declare function getRecentCommits(rootDir: string, limit?: number): GitCommit[];
45
+ /**
46
+ * Extract changed files from commits
47
+ */
48
+ export declare function extractChangedFiles(commits: GitCommit[]): RecentFile[];
49
+ /**
50
+ * Get list of changed files
51
+ */
52
+ export declare function getRecentFiles(rootDir: string): string[];
53
+ /**
54
+ * Map changed files to features
55
+ */
56
+ export declare function mapFilesToFeatures(rootDir: string, files: string[]): string[];
57
+ /**
58
+ * Map changed files to flows
59
+ */
60
+ export declare function mapFilesToFlows(rootDir: string, files: string[]): string[];
61
+ /**
62
+ * Analyze git activity
63
+ */
64
+ export declare function analyzeGitActivity(rootDir: string, options?: GitAnalyzerOptions): GitActivity | null;
65
+ /**
66
+ * Generate git context files
67
+ */
68
+ export declare function generateGitContext(rootDir: string, aiDir?: string): {
69
+ recentFiles: string[];
70
+ recentFeatures: string[];
71
+ recentFlows: string[];
72
+ activity: GitActivity | null;
73
+ };
74
+ //# sourceMappingURL=gitAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/gitAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG5D;AAiBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,SAAS,EAAE,CA4CjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CA8BtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxD;AAwED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsB7E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsB1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,WAAW,GAAG,IAAI,CAkDxG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;CAC9B,CAmCA"}