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,56 @@
1
+ /**
2
+ * Laravel Adapter
3
+ *
4
+ * Community adapter for Laravel/PHP projects
5
+ */
6
+
7
+ import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
8
+
9
+ export const laravelAdapter = createAdapter({
10
+ name: 'laravel',
11
+ displayName: 'Laravel',
12
+
13
+ detectionSignals: [
14
+ fileSignal('composer.json'),
15
+ fileSignal('artisan'),
16
+ fileSignal('phpunit.xml'),
17
+ directorySignal('app/Http'),
18
+ directorySignal('app/Console')
19
+ ],
20
+
21
+ featureRoots: [
22
+ 'app/Http/Controllers',
23
+ 'app/Services',
24
+ 'app/Models',
25
+ 'app/Jobs',
26
+ 'app/Events',
27
+ 'app/Mail'
28
+ ],
29
+
30
+ ignoredFolders: [
31
+ 'vendor', 'node_modules', 'storage', 'bootstrap', 'config',
32
+ 'resources', 'routes', 'database', 'tests', '.git'
33
+ ],
34
+
35
+ entrypointPatterns: [
36
+ 'Controller', 'Request', 'Command', 'Job', 'Event', 'Listener',
37
+ 'Middleware', 'Notification', 'Mail', 'Handler'
38
+ ],
39
+
40
+ layerRules: [
41
+ layerRule('api', 1, ['Controller', 'Request', 'Middleware', 'Resource']),
42
+ layerRule('service', 2, ['Service', 'Job', 'Event', 'Listener', 'Notification']),
43
+ layerRule('data', 3, ['Model', 'Repository', 'Database']),
44
+ layerRule('domain', 4, ['Entity', 'ValueObject', 'Rule']),
45
+ layerRule('util', 5, ['Helper', 'Support', 'Traits'])
46
+ ],
47
+
48
+ supportedExtensions: ['.php'],
49
+
50
+ flowEntrypointPatterns: ['Controller', 'Command', 'Job', 'Request'],
51
+
52
+ flowExcludePatterns: [
53
+ 'Model', 'Migration', 'Seeder', 'Factory', 'Test',
54
+ 'Middleware', 'Request', 'Rule', 'Config'
55
+ ]
56
+ });
@@ -0,0 +1,57 @@
1
+ /**
2
+ * NestJS Adapter
3
+ *
4
+ * Community adapter for NestJS projects
5
+ */
6
+
7
+ import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
8
+
9
+ export const nestjsAdapter = createAdapter({
10
+ name: 'nestjs',
11
+ displayName: 'NestJS',
12
+
13
+ detectionSignals: [
14
+ fileSignal('package.json'),
15
+ fileSignal('nest-cli.json'),
16
+ fileSignal('tsconfig.json'),
17
+ directorySignal('src/modules'),
18
+ directorySignal('src/controllers')
19
+ ],
20
+
21
+ featureRoots: [
22
+ 'src/modules',
23
+ 'src/controllers',
24
+ 'src/services',
25
+ 'src/providers',
26
+ 'src/guards',
27
+ 'src/filters',
28
+ 'src/interceptors'
29
+ ],
30
+
31
+ ignoredFolders: [
32
+ 'node_modules', 'dist', 'build', 'coverage', '.git',
33
+ 'test', 'tests', '__fixtures__'
34
+ ],
35
+
36
+ entrypointPatterns: [
37
+ 'Controller', 'Service', 'Provider', 'Guard',
38
+ 'Interceptor', 'Filter', 'Pipe', 'Module', 'Resolver'
39
+ ],
40
+
41
+ layerRules: [
42
+ layerRule('api', 1, ['Controller', 'Resolver', 'Gateway', 'Middleware']),
43
+ layerRule('service', 2, ['Service', 'Provider', 'UseCase']),
44
+ layerRule('data', 3, ['Repository', 'Entity', 'Model', 'DAO']),
45
+ layerRule('domain', 4, ['Entity', 'Domain', 'Aggregate']),
46
+ layerRule('util', 5, ['Guard', 'Interceptor', 'Filter', 'Pipe', 'Helper'])
47
+ ],
48
+
49
+ supportedExtensions: ['.ts', '.js'],
50
+
51
+ flowEntrypointPatterns: ['Controller', 'Resolver', 'Gateway', 'Service'],
52
+
53
+ flowExcludePatterns: [
54
+ 'Module', 'Guard', 'Interceptor', 'Filter', 'Pipe',
55
+ 'Entity', 'Model', 'Repository', 'Test', 'spec'
56
+ ]
57
+ });
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Phoenix Adapter
3
+ *
4
+ * Community adapter for Elixir Phoenix projects
5
+ */
6
+
7
+ import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
8
+
9
+ export const phoenixAdapter = createAdapter({
10
+ name: 'phoenix',
11
+ displayName: 'Elixir Phoenix',
12
+
13
+ detectionSignals: [
14
+ fileSignal('mix.exs'),
15
+ fileSignal('mix.lock'),
16
+ directorySignal('lib'),
17
+ directorySignal('priv')
18
+ ],
19
+
20
+ featureRoots: [
21
+ 'lib',
22
+ 'lib/*/controllers',
23
+ 'lib/*/views',
24
+ 'lib/*/contexts',
25
+ 'lib/*/schemas'
26
+ ],
27
+
28
+ ignoredFolders: [
29
+ 'node_modules', '_build', '.git', 'priv',
30
+ 'test', 'deps', 'assets'
31
+ ],
32
+
33
+ entrypointPatterns: [
34
+ 'Controller', 'View', 'Channel', 'Socket',
35
+ 'Plug', 'Endpoint', 'Context'
36
+ ],
37
+
38
+ layerRules: [
39
+ layerRule('api', 1, ['Controller', 'View', 'Channel', 'Socket', 'Plug']),
40
+ layerRule('service', 2, ['Context', 'Service', 'Worker']),
41
+ layerRule('data', 3, ['Schema', 'Repo', 'Model']),
42
+ layerRule('domain', 4, ['Schema', 'Domain', 'Entity']),
43
+ layerRule('util', 5, ['Helper', 'Util', 'HTML'])
44
+ ],
45
+
46
+ supportedExtensions: ['.ex', '.exs', '.eex', '.leex'],
47
+
48
+ flowEntrypointPatterns: ['Controller', 'Channel', 'Plug', 'Endpoint'],
49
+
50
+ flowExcludePatterns: [
51
+ 'Schema', 'Repo', 'View', 'HTML', 'Endpoint',
52
+ 'Router', 'Test', 'TestCase'
53
+ ]
54
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Spring Boot Adapter
3
+ *
4
+ * Community adapter for Java Spring Boot projects
5
+ */
6
+
7
+ import { createAdapter, fileSignal, directorySignal, layerRule } from '../sdk.js';
8
+
9
+ export const springBootAdapter = createAdapter({
10
+ name: 'springboot',
11
+ displayName: 'Spring Boot',
12
+
13
+ detectionSignals: [
14
+ fileSignal('pom.xml'),
15
+ fileSignal('build.gradle'),
16
+ fileSignal('gradlew'),
17
+ directorySignal('src/main/java'),
18
+ directorySignal('src/main/kotlin')
19
+ ],
20
+
21
+ featureRoots: [
22
+ 'src/main/java',
23
+ 'src/main/kotlin',
24
+ 'src/main/resources'
25
+ ],
26
+
27
+ ignoredFolders: [
28
+ 'node_modules', 'target', 'build', '.git', 'gradle',
29
+ '.gradle', 'src/test', 'src/test'
30
+ ],
31
+
32
+ entrypointPatterns: [
33
+ 'Controller', 'RestController', 'Service', 'Repository',
34
+ 'Component', 'Configuration', 'Bean'
35
+ ],
36
+
37
+ layerRules: [
38
+ layerRule('api', 1, ['Controller', 'RestController', 'Endpoint', 'Filter']),
39
+ layerRule('service', 2, ['Service', 'Component', 'Configuration']),
40
+ layerRule('data', 3, ['Repository', 'Entity', 'DAO', 'JdbcTemplate']),
41
+ layerRule('domain', 4, ['Entity', 'Domain', 'Model', 'ValueObject']),
42
+ layerRule('util', 5, ['Util', 'Helper', 'Configuration', 'Properties'])
43
+ ],
44
+
45
+ supportedExtensions: ['.java', '.kt', '.groovy'],
46
+
47
+ flowEntrypointPatterns: ['Controller', 'RestController', 'Service', 'CommandLineRunner'],
48
+
49
+ flowExcludePatterns: [
50
+ 'Repository', 'Entity', 'Configuration', 'Properties',
51
+ 'Application', 'Test', 'TestCase'
52
+ ]
53
+ });
@@ -0,0 +1,104 @@
1
+ import { AnalysisAdapter } from './baseAdapter.js';
2
+
3
+ /**
4
+ * .NET Adapter
5
+ *
6
+ * Supports:
7
+ * - ASP.NET Core
8
+ * - .NET Framework
9
+ * - Blazor
10
+ * - Xamarin
11
+ */
12
+ export const dotnetAdapter: AnalysisAdapter = {
13
+ name: 'dotnet',
14
+ displayName: '.NET',
15
+
16
+ detectionSignals: [
17
+ { type: 'file', pattern: '*.csproj' },
18
+ { type: 'file', pattern: '*.sln' },
19
+ { type: 'file', pattern: '*.fsproj' },
20
+ { type: 'file', pattern: 'Program.cs' },
21
+ { type: 'file', pattern: 'Startup.cs' },
22
+ { type: 'file', pattern: 'appsettings.json' }
23
+ ],
24
+
25
+ featureRoots: ['src', 'app', 'Services', 'Controllers', 'Models', 'ViewModels', 'Components'],
26
+
27
+ ignoredFolders: [
28
+ 'bin', 'obj', 'Properties', 'wwwroot', 'Test', 'Tests',
29
+ 'node_modules', '.git', 'packages', '.vs', '.idea'
30
+ ],
31
+
32
+ entrypointPatterns: [
33
+ 'Controller', 'ApiController', 'Endpoint', 'Handler',
34
+ 'Service', 'Command', 'Query', 'Middleware', 'Component'
35
+ ],
36
+
37
+ layerRules: [
38
+ { name: 'api', priority: 1, patterns: ['Controller', 'ApiController', 'Endpoint', 'Handler', 'Middleware', 'Filter'] },
39
+ { name: 'service', priority: 2, patterns: ['Service', 'Services', 'Command', 'Query', 'Handler', 'Mediator'] },
40
+ { name: 'data', priority: 3, patterns: ['Repository', 'Repo', 'DbContext', 'Data', 'Entity'] },
41
+ { name: 'domain', priority: 4, patterns: ['Model', 'Entity', 'Domain', 'ValueObject', 'Aggregate'] },
42
+ { name: 'util', priority: 5, patterns: ['Helper', 'Util', 'Common', 'Extensions'] }
43
+ ],
44
+
45
+ supportedExtensions: ['.cs', '.fs', '.vb', '.razor', '.cshtml', '.xaml'],
46
+
47
+ flowEntrypointPatterns: ['Controller', 'ApiController', 'Endpoint', 'Handler', 'Command', 'Page'],
48
+
49
+ flowExcludePatterns: [
50
+ 'Repository', 'Service', 'Model', 'Entity', 'Dto',
51
+ 'ViewModel', 'Mapping', 'Configuration', 'Middleware',
52
+ 'Test', 'Tests', 'Helper', 'Util', 'Extensions'
53
+ ]
54
+ };
55
+
56
+ /**
57
+ * ASP.NET Core specific
58
+ */
59
+ export const aspnetCoreAdapter: AnalysisAdapter = {
60
+ ...dotnetAdapter,
61
+ name: 'aspnetcore',
62
+ displayName: 'ASP.NET Core',
63
+
64
+ detectionSignals: [
65
+ { type: 'file', pattern: '*.csproj' },
66
+ { type: 'content', pattern: 'Microsoft.AspNetCore', contentPattern: '' },
67
+ { type: 'file', pattern: 'Program.cs' },
68
+ { type: 'file', pattern: 'Startup.cs' }
69
+ ],
70
+
71
+ featureRoots: ['Controllers', 'Services', 'Models', 'Views', 'Pages', 'Components', 'Areas'],
72
+
73
+ entrypointPatterns: [
74
+ 'Controller', 'ApiController', 'Endpoint', 'MinimalApi',
75
+ 'Middleware', 'Filter', 'Service'
76
+ ]
77
+ };
78
+
79
+ /**
80
+ * Blazor specific
81
+ */
82
+ export const blazorAdapter: AnalysisAdapter = {
83
+ ...dotnetAdapter,
84
+ name: 'blazor',
85
+ displayName: 'Blazor',
86
+
87
+ detectionSignals: [
88
+ { type: 'file', pattern: '*.csproj' },
89
+ { type: 'file', pattern: '_Imports.razor' },
90
+ { type: 'content', pattern: '@page', contentPattern: '' }
91
+ ],
92
+
93
+ featureRoots: ['Components', 'Pages', 'Shared', 'Services'],
94
+
95
+ entrypointPatterns: ['Component', 'Page', 'Layout', 'Service', 'Controller'],
96
+
97
+ layerRules: [
98
+ { name: 'ui', priority: 1, patterns: ['Component', 'Page', 'Layout', 'Razor'] },
99
+ { name: 'service', priority: 2, patterns: ['Service', 'Services', 'State', 'Store'] },
100
+ { name: 'data', priority: 3, patterns: ['Repository', 'DbContext', 'Model', 'Entity'] },
101
+ { name: 'domain', priority: 4, patterns: ['Entity', 'Domain', 'Model'] },
102
+ { name: 'util', priority: 5, patterns: ['Helper', 'Util', 'Extensions'] }
103
+ ]
104
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Analysis Adapters
3
+ *
4
+ * Language and framework-specific adapters for customizing
5
+ * feature and flow detection.
6
+ */
7
+
8
+ export { AnalysisAdapter, DetectionSignal, LayerRule, DEFAULT_ADAPTER } from './baseAdapter.js';
9
+ export { javascriptAdapter } from './javascriptAdapter.js';
10
+ export { pythonAdapter, djangoAdapter, flaskAdapter } from './pythonAdapter.js';
11
+ export { railsAdapter, rubyAdapter } from './railsAdapter.js';
12
+ export { salesforceAdapter, sfdxAdapter } from './salesforceAdapter.js';
13
+ export { dotnetAdapter, aspnetCoreAdapter, blazorAdapter } from './dotnetAdapter.js';
14
+
15
+ // SDK exports
16
+ export { createAdapter, validateAdapter, fileSignal, directorySignal, contentSignal, layerRule } from './sdk.js';
17
+ export type { AdapterConfig } from './sdk.js';
18
+
19
+ // Community adapters
20
+ export { laravelAdapter, nestjsAdapter, springBootAdapter, phoenixAdapter, fastapiAdapter } from './community/index.js';
21
+
22
+ // Registry
23
+ export { detectAdapter, detectAllAdapters, getAdapter, listAdapters, ADAPTERS } from './adapterRegistry.js';
24
+ export type { AdapterDetectionResult } from './adapterRegistry.js';
@@ -0,0 +1,56 @@
1
+ import { AnalysisAdapter, DetectionSignal, LayerRule } from './baseAdapter.js';
2
+
3
+ /**
4
+ * JavaScript/TypeScript Adapter
5
+ *
6
+ * Supports:
7
+ * - Node.js projects
8
+ * - React/Vue/Angular apps
9
+ * - TypeScript projects
10
+ */
11
+ export const javascriptAdapter: AnalysisAdapter = {
12
+ name: 'javascript',
13
+ displayName: 'JavaScript / TypeScript',
14
+
15
+ detectionSignals: [
16
+ { type: 'file', pattern: 'package.json' },
17
+ { type: 'file', pattern: 'tsconfig.json' },
18
+ { type: 'file', pattern: 'jest.config.js' },
19
+ { type: 'file', pattern: 'vite.config.ts' },
20
+ { type: 'file', pattern: 'webpack.config.js' },
21
+ { type: 'file', pattern: 'next.config.js' },
22
+ { type: 'file', pattern: 'angular.json' }
23
+ ],
24
+
25
+ featureRoots: ['src', 'app', 'packages', 'services', 'modules', 'features', 'pages', 'components'],
26
+
27
+ ignoredFolders: [
28
+ 'utils', 'helpers', 'types', 'interfaces', 'constants', 'config',
29
+ 'dto', 'models', 'common', 'shared', 'node_modules', '.git',
30
+ 'dist', 'build', 'coverage', '__tests__', 'test', 'tests',
31
+ '.next', '.nuxt', '.vite'
32
+ ],
33
+
34
+ entrypointPatterns: [
35
+ 'controller', 'route', 'router', 'handler', 'command',
36
+ 'service', 'middleware', 'endpoint', 'api'
37
+ ],
38
+
39
+ layerRules: [
40
+ { name: 'api', priority: 1, patterns: ['controller', 'handler', 'route', 'router', 'api', 'endpoint', 'middleware'] },
41
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'business'] },
42
+ { name: 'data', priority: 3, patterns: ['repository', 'repo', 'dal', 'dao', 'data', 'persistence', 'db'] },
43
+ { name: 'domain', priority: 4, patterns: ['model', 'entity', 'schema', 'domain', 'type'] },
44
+ { name: 'util', priority: 5, patterns: ['util', 'helper', 'lib', 'common', 'static'] }
45
+ ],
46
+
47
+ supportedExtensions: ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.vue', '.svelte'],
48
+
49
+ flowEntrypointPatterns: ['controller', 'route', 'handler', 'command', 'router', 'api'],
50
+
51
+ flowExcludePatterns: [
52
+ 'repository', 'repo', 'utils', 'helper', 'model', 'entity',
53
+ 'dto', 'type', 'interface', 'constant', 'config', 'schema',
54
+ 'middleware', 'util', 'lib', 'test', 'spec'
55
+ ]
56
+ };
@@ -0,0 +1,118 @@
1
+ import { AnalysisAdapter } from './baseAdapter.js';
2
+
3
+ /**
4
+ * Python Adapter
5
+ *
6
+ * Supports:
7
+ * - Django projects
8
+ * - Flask projects
9
+ * - FastAPI projects
10
+ * - Generic Python packages
11
+ */
12
+ export const pythonAdapter: AnalysisAdapter = {
13
+ name: 'python',
14
+ displayName: 'Python',
15
+
16
+ detectionSignals: [
17
+ { type: 'file', pattern: 'pyproject.toml' },
18
+ { type: 'file', pattern: 'requirements.txt' },
19
+ { type: 'file', pattern: 'Pipfile' },
20
+ { type: 'file', pattern: 'setup.py' },
21
+ { type: 'file', pattern: 'setup.cfg' },
22
+ { type: 'directory', pattern: 'venv' },
23
+ { type: 'directory', pattern: '.venv' },
24
+ { type: 'file', pattern: 'manage.py' }
25
+ ],
26
+
27
+ featureRoots: ['src', 'app', 'apps', 'modules', 'services', 'api', 'core'],
28
+
29
+ ignoredFolders: [
30
+ 'utils', 'helpers', 'types', 'constants', 'config',
31
+ 'migrations', '__pycache__', '.git', 'venv', '.venv',
32
+ 'tests', 'test', '.pytest_cache', 'docs', 'scripts'
33
+ ],
34
+
35
+ entrypointPatterns: [
36
+ 'view', 'views', 'controller', 'endpoint', 'api',
37
+ 'service', 'task', 'celery', 'command', 'management'
38
+ ],
39
+
40
+ layerRules: [
41
+ { name: 'api', priority: 1, patterns: ['view', 'views', 'controller', 'endpoint', 'api', 'route', 'resource'] },
42
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'business', 'logic'] },
43
+ { name: 'data', priority: 3, patterns: ['repository', 'repo', 'model', 'dao', 'data', 'persistence', 'db'] },
44
+ { name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain', 'core'] },
45
+ { name: 'util', priority: 5, patterns: ['util', 'helper', 'lib', 'common'] }
46
+ ],
47
+
48
+ supportedExtensions: ['.py'],
49
+
50
+ flowEntrypointPatterns: ['view', 'controller', 'endpoint', 'api', 'command', 'task'],
51
+
52
+ flowExcludePatterns: [
53
+ 'model', 'entity', 'utils', 'helper', 'migration',
54
+ 'test', 'tests', '__pycache__', 'conftest', 'schema'
55
+ ]
56
+ };
57
+
58
+ /**
59
+ * Django-specific adapter
60
+ */
61
+ export const djangoAdapter: AnalysisAdapter = {
62
+ ...pythonAdapter,
63
+ name: 'django',
64
+ displayName: 'Django',
65
+
66
+ detectionSignals: [
67
+ { type: 'file', pattern: 'manage.py' },
68
+ { type: 'file', pattern: 'settings.py' },
69
+ { type: 'file', pattern: 'wsgi.py' },
70
+ { type: 'content', pattern: 'DJANGO_SETTINGS_MODULE', contentPattern: '' }
71
+ ],
72
+
73
+ featureRoots: ['apps', 'modules', 'api', 'core'],
74
+
75
+ entrypointPatterns: [
76
+ 'view', 'views', 'api_view', 'controller', 'endpoint',
77
+ 'serializer', 'service', 'task', 'management'
78
+ ],
79
+
80
+ layerRules: [
81
+ { name: 'api', priority: 1, patterns: ['view', 'views', 'api_view', 'controller', 'endpoint', 'resource', 'serializer'] },
82
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'business', 'logic'] },
83
+ { name: 'data', priority: 3, patterns: ['model', 'models', 'repository', 'dao', 'manager'] },
84
+ { name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain', 'signals'] },
85
+ { name: 'util', priority: 5, patterns: ['util', 'helpers', 'lib', 'common', 'middleware'] }
86
+ ]
87
+ };
88
+
89
+ /**
90
+ * Flask/FastAPI adapter
91
+ */
92
+ export const flaskAdapter: AnalysisAdapter = {
93
+ ...pythonAdapter,
94
+ name: 'flask',
95
+ displayName: 'Flask / FastAPI',
96
+
97
+ detectionSignals: [
98
+ { type: 'file', pattern: 'app.py' },
99
+ { type: 'file', pattern: 'main.py' },
100
+ { type: 'content', pattern: 'from flask import', contentPattern: '' },
101
+ { type: 'content', pattern: 'from fastapi import', contentPattern: '' }
102
+ ],
103
+
104
+ featureRoots: ['src', 'app', 'api', 'routes', 'services', 'models'],
105
+
106
+ entrypointPatterns: [
107
+ 'route', 'routes', 'endpoint', 'api', 'view',
108
+ 'service', 'command', 'blueprint'
109
+ ],
110
+
111
+ layerRules: [
112
+ { name: 'api', priority: 1, patterns: ['route', 'routes', 'endpoint', 'api', 'blueprint', 'view'] },
113
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'business'] },
114
+ { name: 'data', priority: 3, patterns: ['model', 'models', 'repository', 'dao'] },
115
+ { name: 'domain', priority: 4, patterns: ['entity', 'schema', 'domain'] },
116
+ { name: 'util', priority: 5, patterns: ['util', 'helpers', 'lib'] }
117
+ ]
118
+ };
@@ -0,0 +1,65 @@
1
+ import { AnalysisAdapter } from './baseAdapter.js';
2
+
3
+ /**
4
+ * Ruby on Rails Adapter
5
+ */
6
+ export const railsAdapter: AnalysisAdapter = {
7
+ name: 'rails',
8
+ displayName: 'Ruby on Rails',
9
+
10
+ detectionSignals: [
11
+ { type: 'file', pattern: 'Gemfile' },
12
+ { type: 'file', pattern: 'config.ru' },
13
+ { type: 'file', pattern: 'Rakefile' },
14
+ { type: 'directory', pattern: 'app/controllers' },
15
+ { type: 'directory', pattern: 'app/models' }
16
+ ],
17
+
18
+ featureRoots: ['app', 'modules', 'lib', 'engines'],
19
+
20
+ ignoredFolders: [
21
+ 'assets', 'javascripts', 'stylesheets', 'images', 'fonts',
22
+ 'helpers', 'views', 'mailers', 'jobs', 'channels',
23
+ 'node_modules', '.git', 'log', 'tmp', 'coverage', 'spec', 'test'
24
+ ],
25
+
26
+ entrypointPatterns: [
27
+ 'controller', 'endpoint', 'api', 'service', 'job',
28
+ 'channel', 'mailer', 'serializer'
29
+ ],
30
+
31
+ layerRules: [
32
+ { name: 'api', priority: 1, patterns: ['controller', 'endpoint', 'api', 'channel', 'mailer'] },
33
+ { name: 'service', priority: 2, patterns: ['service', 'services', 'usecase', 'interactor', 'operation'] },
34
+ { name: 'data', priority: 3, patterns: ['model', 'repository', 'record', 'concern'] },
35
+ { name: 'domain', priority: 4, patterns: ['entity', 'domain', 'value_object'] },
36
+ { name: 'util', priority: 5, patterns: ['helper', 'lib', 'concern', 'middleware'] }
37
+ ],
38
+
39
+ supportedExtensions: ['.rb', '.erb', '.rake'],
40
+
41
+ flowEntrypointPatterns: ['controller', 'endpoint', 'api', 'job', 'channel'],
42
+
43
+ flowExcludePatterns: [
44
+ 'model', 'helper', 'view', 'mailer', 'channel',
45
+ 'serializer', 'concern', 'lib', 'config', 'spec', 'test'
46
+ ]
47
+ };
48
+
49
+ /**
50
+ * Ruby Gem adapter
51
+ */
52
+ export const rubyAdapter: AnalysisAdapter = {
53
+ ...railsAdapter,
54
+ name: 'ruby',
55
+ displayName: 'Ruby',
56
+
57
+ detectionSignals: [
58
+ { type: 'file', pattern: '*.gemspec' },
59
+ { type: 'file', pattern: 'Gemfile' }
60
+ ],
61
+
62
+ featureRoots: ['lib', 'app'],
63
+
64
+ ignoredFolders: ['spec', 'test', 'examples', 'node_modules', '.git']
65
+ };
@@ -0,0 +1,76 @@
1
+ import { AnalysisAdapter } from './baseAdapter.js';
2
+
3
+ /**
4
+ * Salesforce Adapter
5
+ *
6
+ * Supports:
7
+ * - Salesforce DX projects
8
+ * - Aura components
9
+ * - Lightning Web Components (LWC)
10
+ * - Apex classes
11
+ */
12
+ export const salesforceAdapter: AnalysisAdapter = {
13
+ name: 'salesforce',
14
+ displayName: 'Salesforce',
15
+
16
+ detectionSignals: [
17
+ { type: 'file', pattern: 'sfdx-project.json' },
18
+ { type: 'file', pattern: 'project-scratch-def.json' },
19
+ { type: 'directory', pattern: 'force-app' },
20
+ { type: 'directory', pattern: 'src/classes' },
21
+ { type: 'file', pattern: 'package.xml' }
22
+ ],
23
+
24
+ featureRoots: [
25
+ 'force-app/main/default',
26
+ 'src',
27
+ 'src/classes',
28
+ 'src/objects',
29
+ 'src/triggers'
30
+ ],
31
+
32
+ ignoredFolders: [
33
+ 'node_modules', '.git', 'dist', 'build', 'coverage',
34
+ 'test', 'tests', 'mdapi', 'deploy', 'package.xml'
35
+ ],
36
+
37
+ entrypointPatterns: [
38
+ 'Controller', 'Trigger', 'Batch', 'Queueable', 'Schedulable',
39
+ 'AuraEnabled', 'RestResource', 'FlowAction', 'FlowConnector',
40
+ 'LWC', 'Component', 'App', 'Event', 'Interface'
41
+ ],
42
+
43
+ layerRules: [
44
+ { name: 'api', priority: 1, patterns: ['Controller', 'Trigger', 'RestResource', 'AuraEnabled', 'FlowAction'] },
45
+ { name: 'service', priority: 2, patterns: ['Service', 'Selector', 'Domain', 'UnitOfWork'] },
46
+ { name: 'data', priority: 3, patterns: ['Repository', 'DAO', 'Selector', 'Model'] },
47
+ { name: 'domain', priority: 4, patterns: ['Entity', 'SObject', 'Schema', 'Object'] },
48
+ { name: 'util', priority: 5, patterns: ['Util', 'Helper', 'Constants', 'Exception'] }
49
+ ],
50
+
51
+ supportedExtensions: ['.cls', '.trigger', '.apex', '.js', '.html', '.css', '.xml', '.meta.xml'],
52
+
53
+ flowEntrypointPatterns: ['Controller', 'Trigger', 'Batch', 'Queueable', 'RestResource', 'AuraEnabled', 'LWC'],
54
+
55
+ flowExcludePatterns: [
56
+ 'Test', 'TestSuite', 'Settings', 'PermissionSet', 'Profile',
57
+ 'SharingRule', 'ValidationRule', 'Workflow', 'Flow', 'ProcessBuilder'
58
+ ]
59
+ };
60
+
61
+ /**
62
+ * Salesforce DX specific
63
+ */
64
+ export const sfdxAdapter: AnalysisAdapter = {
65
+ ...salesforceAdapter,
66
+ name: 'sfdx',
67
+ displayName: 'Salesforce DX',
68
+
69
+ detectionSignals: [
70
+ { type: 'file', pattern: 'sfdx-project.json' },
71
+ { type: 'file', pattern: 'project-scratch-def.json' },
72
+ { type: 'file', pattern: '.forceignore' }
73
+ ],
74
+
75
+ featureRoots: ['force-app', 'src', 'unpackaged', 'mdapi']
76
+ };