@magic-ingredients/tiny-brain-local 0.13.1 → 0.14.11

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 (258) hide show
  1. package/dist/agents/formatters/claude-code-formatter.js +0 -1
  2. package/dist/agents/formatters/formatter-factory.js +0 -1
  3. package/dist/agents/types.js +0 -1
  4. package/dist/core/console-logger.js +0 -1
  5. package/dist/core/file-logger.js +0 -1
  6. package/dist/core/mcp-server.js +0 -1
  7. package/dist/index.d.ts +22 -8
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +20 -151
  10. package/dist/prompts/index.js +0 -1
  11. package/dist/prompts/persona/persona.prompt.js +0 -1
  12. package/dist/prompts/planning/planning.prompt.js +0 -1
  13. package/dist/prompts/prompt-registry.js +0 -1
  14. package/dist/prompts/rules/rules.prompt.js +0 -1
  15. package/dist/prompts/thinking/thinking.prompt.js +0 -1
  16. package/dist/services/UpdateService.js +0 -1
  17. package/dist/services/agent-installation-service.js +0 -1
  18. package/dist/services/agent-manager.js +0 -1
  19. package/dist/services/agent-service.js +0 -1
  20. package/dist/services/analyse-service.d.ts +52 -8
  21. package/dist/services/analyse-service.d.ts.map +1 -1
  22. package/dist/services/analyse-service.js +325 -66
  23. package/dist/services/credential-storage.service.js +0 -1
  24. package/dist/services/dashboard-launcher.service.js +0 -1
  25. package/dist/services/persona-enhancer.js +0 -1
  26. package/dist/services/persona-service.js +0 -1
  27. package/dist/services/remote/auth-token-service.js +0 -1
  28. package/dist/services/remote/persona-sync-service.js +0 -1
  29. package/dist/services/remote/system-persona-service.js +0 -1
  30. package/dist/services/repo-service.d.ts.map +1 -1
  31. package/dist/services/repo-service.js +31 -25
  32. package/dist/services/versioning-service.js +0 -1
  33. package/dist/storage/local-filesystem-adapter.js +0 -1
  34. package/dist/storage/platform-config-adapter.js +0 -1
  35. package/dist/storage/platform-path-builder.js +0 -1
  36. package/dist/storage/storage-path-builder.js +0 -1
  37. package/dist/tools/analyse-request/analyse-request.tool.js +0 -1
  38. package/dist/tools/analyse.tool.d.ts +4 -0
  39. package/dist/tools/analyse.tool.d.ts.map +1 -1
  40. package/dist/tools/analyse.tool.js +34 -3
  41. package/dist/tools/config/config.tool.d.ts +3 -0
  42. package/dist/tools/config/config.tool.d.ts.map +1 -1
  43. package/dist/tools/config/config.tool.js +139 -70
  44. package/dist/tools/config/index.js +0 -1
  45. package/dist/tools/index.d.ts +4 -4
  46. package/dist/tools/index.js +0 -1
  47. package/dist/tools/persona/as.tool.js +0 -1
  48. package/dist/tools/persona/persona.tool.js +0 -1
  49. package/dist/tools/plan/plan.tool.d.ts +4 -0
  50. package/dist/tools/plan/plan.tool.d.ts.map +1 -1
  51. package/dist/tools/plan/plan.tool.js +144 -32
  52. package/dist/tools/rules/rules.tool.js +0 -1
  53. package/dist/tools/strategy/strategy.tool.js +0 -1
  54. package/dist/tools/thinking/thinking.tool.js +0 -1
  55. package/dist/tools/tool-registry.js +0 -1
  56. package/dist/tools/update/update.tool.js +0 -1
  57. package/dist/tools/validate-response/validate-response.tool.js +0 -1
  58. package/dist/types/local-context.js +0 -1
  59. package/dist/types/request-context.d.ts +1 -1
  60. package/dist/types/request-context.d.ts.map +1 -1
  61. package/dist/types/request-context.js +0 -1
  62. package/dist/utils/package-version.js +0 -1
  63. package/dist/utils/repo-utils.js +0 -1
  64. package/package.json +7 -26
  65. package/LICENSE +0 -21
  66. package/README.md +0 -260
  67. package/dist/agents/formatters/claude-code-formatter.js.map +0 -1
  68. package/dist/agents/formatters/formatter-factory.js.map +0 -1
  69. package/dist/agents/types.js.map +0 -1
  70. package/dist/analyser/analyzers/script-analyzer.d.ts +0 -10
  71. package/dist/analyser/analyzers/script-analyzer.d.ts.map +0 -1
  72. package/dist/analyser/analyzers/script-analyzer.js +0 -205
  73. package/dist/analyser/analyzers/script-analyzer.js.map +0 -1
  74. package/dist/analyser/detectors/base-detector.d.ts +0 -12
  75. package/dist/analyser/detectors/base-detector.d.ts.map +0 -1
  76. package/dist/analyser/detectors/base-detector.js +0 -50
  77. package/dist/analyser/detectors/base-detector.js.map +0 -1
  78. package/dist/analyser/detectors/javascript-detector.d.ts +0 -19
  79. package/dist/analyser/detectors/javascript-detector.d.ts.map +0 -1
  80. package/dist/analyser/detectors/javascript-detector.js +0 -347
  81. package/dist/analyser/detectors/javascript-detector.js.map +0 -1
  82. package/dist/analyser/index.d.ts +0 -5
  83. package/dist/analyser/index.d.ts.map +0 -1
  84. package/dist/analyser/index.js +0 -315
  85. package/dist/analyser/index.js.map +0 -1
  86. package/dist/analyser/types.d.ts +0 -2
  87. package/dist/analyser/types.d.ts.map +0 -1
  88. package/dist/analyser/types.js +0 -2
  89. package/dist/analyser/types.js.map +0 -1
  90. package/dist/analyser/utils.d.ts +0 -5
  91. package/dist/analyser/utils.d.ts.map +0 -1
  92. package/dist/analyser/utils.js +0 -24
  93. package/dist/analyser/utils.js.map +0 -1
  94. package/dist/cli/cli-factory.d.ts +0 -3
  95. package/dist/cli/cli-factory.d.ts.map +0 -1
  96. package/dist/cli/cli-factory.js +0 -235
  97. package/dist/cli/cli-factory.js.map +0 -1
  98. package/dist/cli/commands/analyse.command.d.ts +0 -18
  99. package/dist/cli/commands/analyse.command.d.ts.map +0 -1
  100. package/dist/cli/commands/analyse.command.js +0 -161
  101. package/dist/cli/commands/analyse.command.js.map +0 -1
  102. package/dist/cli/commands/config.command.d.ts +0 -25
  103. package/dist/cli/commands/config.command.d.ts.map +0 -1
  104. package/dist/cli/commands/config.command.js +0 -285
  105. package/dist/cli/commands/config.command.js.map +0 -1
  106. package/dist/cli/commands/install.command.d.ts +0 -23
  107. package/dist/cli/commands/install.command.d.ts.map +0 -1
  108. package/dist/cli/commands/install.command.js +0 -189
  109. package/dist/cli/commands/install.command.js.map +0 -1
  110. package/dist/cli/commands/list.command.d.ts +0 -15
  111. package/dist/cli/commands/list.command.d.ts.map +0 -1
  112. package/dist/cli/commands/list.command.js +0 -90
  113. package/dist/cli/commands/list.command.js.map +0 -1
  114. package/dist/cli/commands/status.command.d.ts +0 -25
  115. package/dist/cli/commands/status.command.d.ts.map +0 -1
  116. package/dist/cli/commands/status.command.js +0 -367
  117. package/dist/cli/commands/status.command.js.map +0 -1
  118. package/dist/cli/commands/track-commit.command.d.ts +0 -52
  119. package/dist/cli/commands/track-commit.command.d.ts.map +0 -1
  120. package/dist/cli/commands/track-commit.command.js +0 -239
  121. package/dist/cli/commands/track-commit.command.js.map +0 -1
  122. package/dist/cli/commands/uninstall.command.d.ts +0 -23
  123. package/dist/cli/commands/uninstall.command.d.ts.map +0 -1
  124. package/dist/cli/commands/uninstall.command.js +0 -176
  125. package/dist/cli/commands/uninstall.command.js.map +0 -1
  126. package/dist/cli/commands/validate-commit-message.command.d.ts +0 -47
  127. package/dist/cli/commands/validate-commit-message.command.d.ts.map +0 -1
  128. package/dist/cli/commands/validate-commit-message.command.js +0 -223
  129. package/dist/cli/commands/validate-commit-message.command.js.map +0 -1
  130. package/dist/cli/installers/base-installer.d.ts +0 -20
  131. package/dist/cli/installers/base-installer.d.ts.map +0 -1
  132. package/dist/cli/installers/base-installer.js +0 -3
  133. package/dist/cli/installers/base-installer.js.map +0 -1
  134. package/dist/cli/installers/chatgpt-installer.d.ts +0 -18
  135. package/dist/cli/installers/chatgpt-installer.d.ts.map +0 -1
  136. package/dist/cli/installers/chatgpt-installer.js +0 -45
  137. package/dist/cli/installers/chatgpt-installer.js.map +0 -1
  138. package/dist/cli/installers/claude-code-installer.d.ts +0 -23
  139. package/dist/cli/installers/claude-code-installer.d.ts.map +0 -1
  140. package/dist/cli/installers/claude-code-installer.js +0 -127
  141. package/dist/cli/installers/claude-code-installer.js.map +0 -1
  142. package/dist/cli/installers/claude-desktop-installer.d.ts +0 -18
  143. package/dist/cli/installers/claude-desktop-installer.d.ts.map +0 -1
  144. package/dist/cli/installers/claude-desktop-installer.js +0 -48
  145. package/dist/cli/installers/claude-desktop-installer.js.map +0 -1
  146. package/dist/cli/installers/cursor-installer.d.ts +0 -18
  147. package/dist/cli/installers/cursor-installer.d.ts.map +0 -1
  148. package/dist/cli/installers/cursor-installer.js +0 -45
  149. package/dist/cli/installers/cursor-installer.js.map +0 -1
  150. package/dist/cli/installers/installer-factory.d.ts +0 -30
  151. package/dist/cli/installers/installer-factory.d.ts.map +0 -1
  152. package/dist/cli/installers/installer-factory.js +0 -90
  153. package/dist/cli/installers/installer-factory.js.map +0 -1
  154. package/dist/cli/utils/node-resolver.d.ts +0 -53
  155. package/dist/cli/utils/node-resolver.d.ts.map +0 -1
  156. package/dist/cli/utils/node-resolver.js +0 -200
  157. package/dist/cli/utils/node-resolver.js.map +0 -1
  158. package/dist/cli/utils/package-locator.d.ts +0 -9
  159. package/dist/cli/utils/package-locator.d.ts.map +0 -1
  160. package/dist/cli/utils/package-locator.js +0 -81
  161. package/dist/cli/utils/package-locator.js.map +0 -1
  162. package/dist/cli/utils/system-info.d.ts +0 -20
  163. package/dist/cli/utils/system-info.d.ts.map +0 -1
  164. package/dist/cli/utils/system-info.js +0 -90
  165. package/dist/cli/utils/system-info.js.map +0 -1
  166. package/dist/cli.d.ts +0 -3
  167. package/dist/cli.d.ts.map +0 -1
  168. package/dist/cli.js +0 -27
  169. package/dist/cli.js.map +0 -1
  170. package/dist/core/console-logger.js.map +0 -1
  171. package/dist/core/file-logger.js.map +0 -1
  172. package/dist/core/mcp-server.js.map +0 -1
  173. package/dist/index.js.map +0 -1
  174. package/dist/prompts/index.js.map +0 -1
  175. package/dist/prompts/persona/persona.prompt.js.map +0 -1
  176. package/dist/prompts/planning/planning.prompt.js.map +0 -1
  177. package/dist/prompts/prompt-registry.js.map +0 -1
  178. package/dist/prompts/rules/rules.prompt.js.map +0 -1
  179. package/dist/prompts/thinking/thinking.prompt.js.map +0 -1
  180. package/dist/services/UpdateService.js.map +0 -1
  181. package/dist/services/adr-service.d.ts +0 -70
  182. package/dist/services/adr-service.d.ts.map +0 -1
  183. package/dist/services/adr-service.js +0 -242
  184. package/dist/services/adr-service.js.map +0 -1
  185. package/dist/services/agent-installation-service.js.map +0 -1
  186. package/dist/services/agent-manager.js.map +0 -1
  187. package/dist/services/agent-service.js.map +0 -1
  188. package/dist/services/analyse-service.js.map +0 -1
  189. package/dist/services/credential-storage.service.js.map +0 -1
  190. package/dist/services/dashboard-launcher.service.js.map +0 -1
  191. package/dist/services/persona-enhancer.js.map +0 -1
  192. package/dist/services/persona-grouper.d.ts +0 -29
  193. package/dist/services/persona-grouper.d.ts.map +0 -1
  194. package/dist/services/persona-grouper.js +0 -111
  195. package/dist/services/persona-grouper.js.map +0 -1
  196. package/dist/services/persona-service.js.map +0 -1
  197. package/dist/services/remote/auth-token-service.js.map +0 -1
  198. package/dist/services/remote/persona-sync-service.js.map +0 -1
  199. package/dist/services/remote/system-persona-service.js.map +0 -1
  200. package/dist/services/repo-service.js.map +0 -1
  201. package/dist/services/types/persona-types.d.ts +0 -84
  202. package/dist/services/types/persona-types.d.ts.map +0 -1
  203. package/dist/services/types/persona-types.js +0 -5
  204. package/dist/services/types/persona-types.js.map +0 -1
  205. package/dist/services/versioning-service.js.map +0 -1
  206. package/dist/storage/local-filesystem-adapter.js.map +0 -1
  207. package/dist/storage/platform-config-adapter.js.map +0 -1
  208. package/dist/storage/platform-path-builder.js.map +0 -1
  209. package/dist/storage/storage-path-builder.js.map +0 -1
  210. package/dist/test-setup.d.ts +0 -2
  211. package/dist/test-setup.d.ts.map +0 -1
  212. package/dist/test-setup.js +0 -12
  213. package/dist/test-setup.js.map +0 -1
  214. package/dist/tools/analyse-request/analyse-request.tool.js.map +0 -1
  215. package/dist/tools/analyse.tool.js.map +0 -1
  216. package/dist/tools/config/config.tool.js.map +0 -1
  217. package/dist/tools/config/index.js.map +0 -1
  218. package/dist/tools/index.js.map +0 -1
  219. package/dist/tools/persona/as.tool.js.map +0 -1
  220. package/dist/tools/persona/persona.tool.js.map +0 -1
  221. package/dist/tools/plan/plan.tool.js.map +0 -1
  222. package/dist/tools/rules/rules.tool.js.map +0 -1
  223. package/dist/tools/strategy/strategy.tool.js.map +0 -1
  224. package/dist/tools/thinking/thinking.tool.js.map +0 -1
  225. package/dist/tools/tool-registry.js.map +0 -1
  226. package/dist/tools/update/update.tool.js.map +0 -1
  227. package/dist/tools/validate-response/validate-response.tool.js.map +0 -1
  228. package/dist/types/local-context.js.map +0 -1
  229. package/dist/types/request-context.js.map +0 -1
  230. package/dist/utils/adr-pattern-detector.d.ts +0 -38
  231. package/dist/utils/adr-pattern-detector.d.ts.map +0 -1
  232. package/dist/utils/adr-pattern-detector.js +0 -158
  233. package/dist/utils/adr-pattern-detector.js.map +0 -1
  234. package/dist/utils/adr-suggestion-generator.d.ts +0 -50
  235. package/dist/utils/adr-suggestion-generator.d.ts.map +0 -1
  236. package/dist/utils/adr-suggestion-generator.js +0 -63
  237. package/dist/utils/adr-suggestion-generator.js.map +0 -1
  238. package/dist/utils/commit-parser.d.ts +0 -25
  239. package/dist/utils/commit-parser.d.ts.map +0 -1
  240. package/dist/utils/commit-parser.js +0 -46
  241. package/dist/utils/commit-parser.js.map +0 -1
  242. package/dist/utils/package-version.js.map +0 -1
  243. package/dist/utils/repo-utils.js.map +0 -1
  244. package/templates/adr/README.md +0 -243
  245. package/templates/adr/_template/0001-record-architecture-decisions.md +0 -223
  246. package/templates/adr/_template/ADR_CREATION_INSTRUCTIONS.md +0 -234
  247. package/templates/adr/_template/adr-schema.json +0 -74
  248. package/templates/adr/_template/adr-template.md +0 -136
  249. package/templates/prd/PRD_CREATION_INSTRUCTIONS.md +0 -268
  250. package/templates/prd/README.md +0 -252
  251. package/templates/prd/_template/feature-template.md +0 -105
  252. package/templates/prd/_template/prd-template.md +0 -126
  253. package/templates/prd/example-task-management/features/task-collaboration.md +0 -84
  254. package/templates/prd/example-task-management/features/task-crud.md +0 -222
  255. package/templates/prd/example-task-management/features/task-workflow.md +0 -62
  256. package/templates/prd/example-task-management/prd.md +0 -177
  257. package/templates/prd/feature-schema.json +0 -54
  258. package/templates/prd/prd-schema.json +0 -60
@@ -1,315 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import { JavaScriptDetector } from './detectors/javascript-detector.js';
4
- export * from './types.js';
5
- const DEFAULT_OPTIONS = {
6
- maxDepth: 5,
7
- skipDirs: ['node_modules', '.git', 'dist', 'build', '.next', '.nuxt', 'coverage', '.turbo', '.cache']
8
- };
9
- const TEST_PATTERNS = ['.test.', '.spec.', '__tests__', '.e2e.', '.integration.'];
10
- export async function analyseRepository(rootPath = process.cwd(), options) {
11
- const opts = { ...DEFAULT_OPTIONS, ...options };
12
- // Collections for analysis
13
- const languages = new Set();
14
- const frameworks = new Set();
15
- const testingTools = new Set();
16
- const buildTools = new Set();
17
- const testFiles = [];
18
- const testPatterns = new Set();
19
- const languageFileCounts = {};
20
- // Walk the directory tree and detect tech stacks
21
- await walkDirectory(rootPath, async (dirPath, files) => {
22
- // Detect tech stack in directory
23
- const stack = await detectTechInDirectory(dirPath);
24
- if (stack) {
25
- // Enhance with script analysis if it's a JS project
26
- if (stack.language === 'javascript' || stack.language === 'typescript') {
27
- const detector = new JavaScriptDetector(dirPath);
28
- const enhancedStack = await detector.analyze();
29
- if (enhancedStack) {
30
- processStack(enhancedStack);
31
- }
32
- }
33
- else {
34
- processStack(stack);
35
- }
36
- }
37
- // Detect files by extension and test files
38
- for (const file of files || []) {
39
- detectFileType(file);
40
- detectTestFile(file);
41
- }
42
- // Process other language detectors
43
- await detectOtherLanguages(dirPath, files || []);
44
- }, opts);
45
- // Helper functions to process detected information
46
- function processStack(stack) {
47
- if (stack.language) {
48
- languages.add(stack.language);
49
- languageFileCounts[stack.language] = (languageFileCounts[stack.language] || 0) + 1;
50
- }
51
- if (stack.framework)
52
- frameworks.add(stack.framework);
53
- if (stack.frontend)
54
- frameworks.add(stack.frontend);
55
- if (stack.backend)
56
- frameworks.add(stack.backend);
57
- if (stack.testing?.framework)
58
- testingTools.add(stack.testing.framework);
59
- if (stack.testing?.e2e)
60
- testingTools.add(stack.testing.e2e);
61
- if (stack.testing?.libraries) {
62
- stack.testing.libraries.forEach((lib) => testingTools.add(lib));
63
- }
64
- if (stack.bundling)
65
- buildTools.add(stack.bundling);
66
- }
67
- function detectFileType(fileName) {
68
- const ext = path.extname(fileName).toLowerCase();
69
- // Language detection by extension
70
- if (['.js', '.mjs', '.cjs', '.jsx'].includes(ext)) {
71
- languages.add('javascript');
72
- languageFileCounts.javascript = (languageFileCounts.javascript || 0) + 1;
73
- }
74
- if (['.ts', '.tsx', '.mts', '.cts'].includes(ext)) {
75
- languages.add('typescript');
76
- languageFileCounts.typescript = (languageFileCounts.typescript || 0) + 1;
77
- }
78
- if (['.py'].includes(ext)) {
79
- languages.add('python');
80
- languageFileCounts.python = (languageFileCounts.python || 0) + 1;
81
- }
82
- if (['.go'].includes(ext)) {
83
- languages.add('go');
84
- languageFileCounts.go = (languageFileCounts.go || 0) + 1;
85
- }
86
- if (['.rb'].includes(ext)) {
87
- languages.add('ruby');
88
- languageFileCounts.ruby = (languageFileCounts.ruby || 0) + 1;
89
- }
90
- if (['.java'].includes(ext)) {
91
- languages.add('java');
92
- languageFileCounts.java = (languageFileCounts.java || 0) + 1;
93
- }
94
- if (['.rs'].includes(ext)) {
95
- languages.add('rust');
96
- languageFileCounts.rust = (languageFileCounts.rust || 0) + 1;
97
- }
98
- if (['.cs'].includes(ext)) {
99
- languages.add('csharp');
100
- languageFileCounts.csharp = (languageFileCounts.csharp || 0) + 1;
101
- }
102
- }
103
- function detectTestFile(fileName) {
104
- for (const pattern of TEST_PATTERNS) {
105
- if (fileName.includes(pattern)) {
106
- testFiles.push(fileName);
107
- const ext = path.extname(fileName);
108
- if (ext) {
109
- testPatterns.add(pattern + ext.substring(1)); // e.g., '.test.ts'
110
- }
111
- break;
112
- }
113
- }
114
- }
115
- async function detectOtherLanguages(dirPath, files) {
116
- try {
117
- // Check for language-specific config files
118
- for (const file of files) {
119
- const filePath = path.join(dirPath, file);
120
- // Python detection
121
- if (file === 'requirements.txt' || file === 'setup.py' || file === 'pyproject.toml') {
122
- languages.add('python');
123
- const content = await fs.readFile(filePath, 'utf8').catch(() => '');
124
- // Detect Python frameworks and tools
125
- if (content.includes('django'))
126
- frameworks.add('django');
127
- if (content.includes('flask'))
128
- frameworks.add('flask');
129
- if (content.includes('fastapi'))
130
- frameworks.add('fastapi');
131
- if (content.includes('pytest'))
132
- testingTools.add('pytest');
133
- if (content.includes('unittest'))
134
- testingTools.add('unittest');
135
- }
136
- // Go detection
137
- if (file === 'go.mod' || file === 'go.sum') {
138
- languages.add('go');
139
- const content = await fs.readFile(filePath, 'utf8').catch(() => '');
140
- if (content.includes('testify'))
141
- testingTools.add('testify');
142
- if (content.includes('gin-gonic'))
143
- frameworks.add('gin');
144
- if (content.includes('echo'))
145
- frameworks.add('echo');
146
- }
147
- // Ruby detection
148
- if (file === 'Gemfile' || file === 'Rakefile') {
149
- languages.add('ruby');
150
- const content = await fs.readFile(filePath, 'utf8').catch(() => '');
151
- if (content.includes('rails'))
152
- frameworks.add('rails');
153
- if (content.includes('sinatra'))
154
- frameworks.add('sinatra');
155
- if (content.includes('rspec'))
156
- testingTools.add('rspec');
157
- if (content.includes('minitest'))
158
- testingTools.add('minitest');
159
- }
160
- // Build tools detection
161
- if (file === 'webpack.config.js')
162
- buildTools.add('webpack');
163
- if (file === 'rollup.config.js')
164
- buildTools.add('rollup');
165
- if (file === 'vite.config.js' || file === 'vite.config.ts')
166
- buildTools.add('vite');
167
- if (file === 'gulpfile.js')
168
- buildTools.add('gulp');
169
- if (file === 'Gruntfile.js')
170
- buildTools.add('grunt');
171
- if (file === 'Makefile')
172
- buildTools.add('make');
173
- }
174
- }
175
- catch {
176
- // Silently handle errors
177
- }
178
- }
179
- // Determine primary language (most files)
180
- let primaryLanguage;
181
- if (Object.keys(languageFileCounts).length > 0) {
182
- primaryLanguage = Object.entries(languageFileCounts)
183
- .sort((a, b) => b[1] - a[1])[0][0];
184
- }
185
- // Convert sets to arrays, sort languages by file count
186
- const sortedLanguages = Array.from(languages).sort((a, b) => {
187
- const countA = languageFileCounts[a] || 0;
188
- const countB = languageFileCounts[b] || 0;
189
- return countB - countA;
190
- });
191
- // Detect documentation pattern
192
- const documentationLocations = [];
193
- let documentationPattern;
194
- // Check for documentation
195
- const rootFiles = await fs.readdir(rootPath).catch(() => []);
196
- const hasRootReadme = rootFiles.some(f => (typeof f === 'string' ? f : f.name).toLowerCase() === 'readme.md');
197
- const hasDocsFolder = rootFiles.some(f => (typeof f === 'string' ? f : f.name).toLowerCase() === 'docs');
198
- if (hasRootReadme) {
199
- documentationLocations.push('README.md');
200
- }
201
- if (hasDocsFolder) {
202
- documentationLocations.push('docs/');
203
- }
204
- // Determine pattern
205
- if (hasDocsFolder && hasRootReadme) {
206
- documentationPattern = 'mixed';
207
- }
208
- else if (hasDocsFolder) {
209
- documentationPattern = 'docs-folder';
210
- }
211
- else if (hasRootReadme) {
212
- documentationPattern = 'single-readme';
213
- }
214
- return {
215
- // Core detected technologies
216
- languages: sortedLanguages,
217
- frameworks: Array.from(frameworks),
218
- testingTools: Array.from(testingTools),
219
- buildTools: Array.from(buildTools),
220
- // Test detection
221
- hasTests: testFiles.length > 0,
222
- testFileCount: testFiles.length,
223
- testPatterns: Array.from(testPatterns),
224
- // Polyglot detection
225
- isPolyglot: languages.size > 1,
226
- primaryLanguage,
227
- // Documentation detection
228
- documentationPattern,
229
- documentationLocations: documentationLocations.length > 0 ? documentationLocations : undefined
230
- };
231
- }
232
- async function walkDirectory(dir, callback, options, currentDepth = 0) {
233
- if (currentDepth > (options.maxDepth || 5)) {
234
- return;
235
- }
236
- try {
237
- const entries = await fs.readdir(dir, { withFileTypes: true });
238
- const files = [];
239
- const dirs = [];
240
- // Separate files and directories
241
- for (const entry of entries) {
242
- if (entry.isDirectory() && !options.skipDirs?.includes(entry.name)) {
243
- dirs.push(entry.name);
244
- }
245
- else if (!entry.isDirectory()) {
246
- files.push(entry.name);
247
- }
248
- }
249
- // Process current directory with its files
250
- await callback(dir, files);
251
- // Recursively process subdirectories
252
- for (const subdir of dirs) {
253
- const fullPath = path.join(dir, subdir);
254
- await walkDirectory(fullPath, callback, options, currentDepth + 1);
255
- }
256
- }
257
- catch {
258
- // Return empty results on error
259
- await callback(dir, []);
260
- }
261
- }
262
- async function detectTechInDirectory(dirPath) {
263
- const detectors = [
264
- new JavaScriptDetector(dirPath),
265
- // Future: Add more detectors here
266
- // new PythonDetector(dirPath),
267
- // new GoDetector(dirPath),
268
- // new DotNetDetector(dirPath),
269
- // new JavaDetector(dirPath),
270
- // new RustDetector(dirPath),
271
- ];
272
- for (const detector of detectors) {
273
- if (await detector.detect()) {
274
- return await detector.analyze();
275
- }
276
- }
277
- return null;
278
- }
279
- // Export a simple function for CLI usage
280
- export async function analyseForCLI(rootPath = process.cwd(), options) {
281
- const analysis = await analyseRepository(rootPath, options);
282
- const output = [];
283
- output.push('📊 Repository Analysis\n');
284
- // Languages
285
- if (analysis.languages.length > 0) {
286
- output.push(`Languages: ${analysis.languages.join(', ')}`);
287
- if (analysis.isPolyglot) {
288
- output.push(` (Polyglot project - primary: ${analysis.primaryLanguage})`);
289
- }
290
- }
291
- // Frameworks
292
- if (analysis.frameworks.length > 0) {
293
- output.push(`Frameworks: ${analysis.frameworks.join(', ')}`);
294
- }
295
- // Testing
296
- if (analysis.testingTools.length > 0) {
297
- output.push(`Testing: ${analysis.testingTools.join(', ')}`);
298
- if (analysis.hasTests) {
299
- output.push(` (${analysis.testFileCount} test files found)`);
300
- }
301
- }
302
- // Build tools
303
- if (analysis.buildTools.length > 0) {
304
- output.push(`Build Tools: ${analysis.buildTools.join(', ')}`);
305
- }
306
- // Documentation
307
- if (analysis.documentationPattern) {
308
- output.push(`\nDocumentation: ${analysis.documentationPattern}`);
309
- if (analysis.documentationLocations) {
310
- output.push(` Locations: ${analysis.documentationLocations.join(', ')}`);
311
- }
312
- }
313
- return output.join('\n');
314
- }
315
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,cAAc,YAAY,CAAC;AAE3B,MAAM,eAAe,GAAmB;IACtC,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;CACtG,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,OAAO,CAAC,GAAG,EAAE,EAChC,OAAwB;IAExB,MAAM,IAAI,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IAEhD,2BAA2B;IAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,kBAAkB,GAA2B,EAAE,CAAC;IAEtD,iDAAiD;IACjD,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrD,iCAAiC;QACjC,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,oDAAoD;YACpD,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBACvE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC/C,IAAI,aAAa,EAAE,CAAC;oBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,mCAAmC;QACnC,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,mDAAmD;IACnD,SAAS,YAAY,CAAC,KAAU;QAC9B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9B,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,KAAK,CAAC,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,QAAQ;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,OAAO,EAAE,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG;YAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,cAAc,CAAC,QAAgB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,kCAAkC;QAClC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5B,kBAAkB,CAAC,UAAU,GAAG,CAAC,kBAAkB,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5B,kBAAkB,CAAC,UAAU,GAAG,CAAC,kBAAkB,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,kBAAkB,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,kBAAkB,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,kBAAkB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,kBAAkB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,kBAAkB,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,kBAAkB,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,SAAS,cAAc,CAAC,QAAgB;QACtC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,GAAG,EAAE,CAAC;oBACR,YAAY,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;gBACnE,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,UAAU,oBAAoB,CAAC,OAAe,EAAE,KAAe;QAClE,IAAI,CAAC;YACH,2CAA2C;YAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAE1C,mBAAmB;gBACnB,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBACpF,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACxB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAEpE,qCAAqC;oBACrC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBAED,eAAe;gBACf,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC7D,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACvD,CAAC;gBAED,iBAAiB;gBACjB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9C,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACzD,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBAED,wBAAwB;gBACxB,IAAI,IAAI,KAAK,mBAAmB;oBAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,IAAI,KAAK,kBAAkB;oBAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1D,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,gBAAgB;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnF,IAAI,IAAI,KAAK,aAAa;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,IAAI,KAAK,cAAc;oBAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,IAAI,KAAK,UAAU;oBAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,eAAmC,CAAC;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;aACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,uDAAuD;IACvD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,sBAAsB,GAAa,EAAE,CAAC;IAC5C,IAAI,oBAA8F,CAAC;IAEnG,0BAA0B;IAC1B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;IACvH,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;IAElH,IAAI,aAAa,EAAE,CAAC;QAClB,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,oBAAoB;IACpB,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;QACnC,oBAAoB,GAAG,OAAO,CAAC;IACjC,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,oBAAoB,GAAG,aAAa,CAAC;IACvC,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,oBAAoB,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,OAAO;QACL,6BAA6B;QAC7B,SAAS,EAAE,eAAe;QAC1B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QAElC,iBAAiB;QACjB,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;QAC9B,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtC,qBAAqB;QACrB,UAAU,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC;QAC9B,eAAe;QAEf,0BAA0B;QAC1B,oBAAoB;QACpB,sBAAsB,EAAE,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;KAC/F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAW,EACX,QAA6D,EAC7D,OAAuB,EACvB,eAAuB,CAAC;IAExB,IAAI,YAAY,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,iCAAiC;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE3B,qCAAqC;QACrC,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;QAChC,MAAM,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAAe;IAClD,MAAM,SAAS,GAAG;QAChB,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAC/B,kCAAkC;QAClC,+BAA+B;QAC/B,2BAA2B;QAC3B,+BAA+B;QAC/B,6BAA6B;QAC7B,6BAA6B;KAC9B,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5B,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAmB,OAAO,CAAC,GAAG,EAAE,EAChC,OAAwB;IAExB,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAExC,YAAY;IACZ,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;IACV,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,YAAY,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,aAAa,oBAAoB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,gBAAgB;IAChB,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,gBAAgB,QAAQ,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -1,2 +0,0 @@
1
- export type { TechStack, ScriptAnalysis, RepoAnalysis, TestingRecommendation, AnalyseOptions, PackageJson } from '@magic-ingredients/tiny-brain-core';
2
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analyser/types.ts"],"names":[],"mappings":"AACA,YAAY,EACV,SAAS,EACT,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,WAAW,EACZ,MAAM,oCAAoC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analyser/types.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- /**
2
- * Find the project root by looking for .git directory
3
- */
4
- export declare function findProjectRoot(startPath: string): Promise<string>;
5
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/analyser/utils.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBxE"}
@@ -1,24 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs/promises';
3
- /**
4
- * Find the project root by looking for .git directory
5
- */
6
- export async function findProjectRoot(startPath) {
7
- let currentPath = path.resolve(startPath);
8
- while (currentPath !== '/') {
9
- try {
10
- const gitPath = path.join(currentPath, '.git');
11
- const stats = await fs.stat(gitPath);
12
- if (stats.isDirectory()) {
13
- return currentPath;
14
- }
15
- }
16
- catch {
17
- // .git doesn't exist at this level, continue
18
- }
19
- currentPath = path.dirname(currentPath);
20
- }
21
- // If no .git found, return the original path
22
- return startPath;
23
- }
24
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/analyser/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,OAAO,WAAW,KAAK,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;QAED,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,6CAA6C;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function createCLI(): Command;
3
- //# sourceMappingURL=cli-factory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-factory.d.ts","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,SAAS,IAAI,OAAO,CAgOnC"}
@@ -1,235 +0,0 @@
1
- import { Command } from 'commander';
2
- import { InstallCommand } from './commands/install.command.js';
3
- import { UninstallCommand } from './commands/uninstall.command.js';
4
- import { StatusCommand } from './commands/status.command.js';
5
- import { ListCommand } from './commands/list.command.js';
6
- import { ConfigCommand } from './commands/config.command.js';
7
- import { AnalyseCommand } from './commands/analyse.command.js';
8
- import { TrackCommitCommand } from './commands/track-commit.command.js';
9
- import { ValidateCommitMessageCommand } from './commands/validate-commit-message.command.js';
10
- import { InstallerFactory } from './installers/installer-factory.js';
11
- import { PlatformConfigAdapter } from '../storage/platform-config-adapter.js';
12
- import { CredentialStorageService } from '../services/credential-storage.service.js';
13
- import { NodeResolver } from './utils/node-resolver.js';
14
- import { PlanningService, ConfigService } from '@magic-ingredients/tiny-brain-core';
15
- import * as os from 'os';
16
- import * as path from 'path';
17
- import * as fs from 'fs';
18
- export function createCLI() {
19
- const program = new Command();
20
- // Initialize dependencies
21
- const baseDir = path.join(os.homedir(), '.tiny-brain');
22
- const configAdapter = new PlatformConfigAdapter({ baseDir, autoCreate: true });
23
- const nodeResolver = new NodeResolver();
24
- const installerFactory = new InstallerFactory(configAdapter, nodeResolver);
25
- // Initialize commands
26
- const credentialService = new CredentialStorageService();
27
- const installCommand = new InstallCommand(installerFactory);
28
- const uninstallCommand = new UninstallCommand(installerFactory);
29
- const statusCommand = new StatusCommand(installerFactory, credentialService);
30
- const listCommand = new ListCommand(installerFactory);
31
- // Create a minimal context for ConfigService
32
- const configContext = {
33
- storage: configAdapter,
34
- userId: 'cli-user',
35
- sessionId: 'cli-session',
36
- requestId: `config-${Date.now()}`,
37
- timestamp: new Date(),
38
- activePersona: { id: 'default', userContent: {} },
39
- logger: console,
40
- input: {},
41
- };
42
- const configService = new ConfigService(configContext);
43
- const configCommand = new ConfigCommand(credentialService, configService);
44
- const analyseCommand = new AnalyseCommand(configService);
45
- program
46
- .name('tiny-brain')
47
- .description('🧠 Tiny Brain MCP Server - Installation and Management CLI');
48
- // Install command
49
- program
50
- .command('install [platform]')
51
- .description('Install tiny-brain MCP server for an AI platform')
52
- .option('--all', 'Install for all supported platforms')
53
- .option('-s, --scope <scope>', 'Configuration scope (local/user/project)', 'local')
54
- .option('-n, --name <name>', 'Server name', 'tiny-brain')
55
- .option('--validate', 'Validate server startup during installation')
56
- .action(async (platform, options) => {
57
- try {
58
- await installCommand.execute({
59
- platform,
60
- all: options.all,
61
- scope: options.scope,
62
- name: options.name,
63
- validate: options.validate
64
- });
65
- }
66
- catch (error) {
67
- console.error('Installation failed:', error);
68
- process.exit(1);
69
- }
70
- });
71
- // Uninstall command
72
- program
73
- .command('uninstall [platform]')
74
- .description('Uninstall tiny-brain MCP server from an AI platform')
75
- .option('--all', 'Uninstall from all installed platforms')
76
- .option('-s, --scope <scope>', 'Configuration scope (local/user/project)', 'local')
77
- .option('-n, --name <name>', 'Server name', 'tiny-brain')
78
- .option('-f, --force', 'Skip confirmation prompt')
79
- .action(async (platform, options) => {
80
- try {
81
- await uninstallCommand.execute({
82
- platform,
83
- all: options.all,
84
- scope: options.scope,
85
- name: options.name,
86
- force: options.force
87
- });
88
- }
89
- catch (error) {
90
- console.error('Uninstallation failed:', error);
91
- process.exit(1);
92
- }
93
- });
94
- // Status command
95
- program
96
- .command('status')
97
- .description('Check installation status for all platforms')
98
- .option('-n, --name <name>', 'Server name', 'tiny-brain')
99
- .option('-s, --scope <scope>', 'Configuration scope (local/user/project)', 'local')
100
- .option('-p, --platform <platform>', 'Check specific platform')
101
- .option('-v, --verbose', 'Show detailed information')
102
- .action(async (options) => {
103
- try {
104
- await statusCommand.execute({
105
- name: options.name,
106
- scope: options.scope,
107
- platform: options.platform,
108
- verbose: options.verbose
109
- });
110
- }
111
- catch (error) {
112
- console.error('Status check failed:', error);
113
- process.exit(1);
114
- }
115
- });
116
- // List command
117
- program
118
- .command('list')
119
- .alias('ls')
120
- .description('List all supported platforms')
121
- .option('-d, --detected', 'Show which platforms are detected on the system')
122
- .action(async (options) => {
123
- try {
124
- await listCommand.execute({
125
- showDetected: options.detected
126
- });
127
- }
128
- catch (error) {
129
- console.error('List command failed:', error);
130
- process.exit(1);
131
- }
132
- });
133
- // Config command
134
- program
135
- .command('config [operation] [key] [value...]')
136
- .description('Manage tiny-brain credentials (set, show, unset)')
137
- .action(async (operation, key, valueParts) => {
138
- try {
139
- const args = [];
140
- if (operation)
141
- args.push(operation);
142
- if (key)
143
- args.push(key);
144
- if (valueParts && valueParts.length > 0) {
145
- args.push(...valueParts);
146
- }
147
- const options = configCommand.parseArgs(args);
148
- await configCommand.execute(options);
149
- }
150
- catch (error) {
151
- console.error('Config command failed:', error);
152
- process.exit(1);
153
- }
154
- });
155
- // Analyse command
156
- program
157
- .command('analyse [path]')
158
- .description('Analyse repository tech stack and suggest AI agents')
159
- .action(async (path) => {
160
- try {
161
- await analyseCommand.execute({
162
- path
163
- });
164
- }
165
- catch (error) {
166
- console.error('Analysis failed:', error);
167
- process.exit(1);
168
- }
169
- });
170
- // Track commit command (hidden - called by git hooks)
171
- program
172
- .command('track-commit <sha> <message>', { hidden: true })
173
- .description('Track commit SHA for TDD workflow (called by git hooks)')
174
- .option('-v, --verbose', 'Show detailed output')
175
- .action(async (sha, message, options) => {
176
- try {
177
- // Determine active persona (read from config or use default)
178
- const configPath = path.join(baseDir, 'config', 'active-persona.json');
179
- let activePersonaId = 'default';
180
- if (fs.existsSync(configPath)) {
181
- const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
182
- activePersonaId = config.activePersona || 'default';
183
- }
184
- // Create minimal PersonaProfile
185
- const activePersona = {
186
- id: activePersonaId,
187
- userContent: {}
188
- };
189
- const context = {
190
- storage: configAdapter,
191
- userId: 'cli-user',
192
- sessionId: 'cli-session',
193
- requestId: `track-commit-${Date.now()}`,
194
- timestamp: new Date(),
195
- activePersona,
196
- logger: console,
197
- input: {},
198
- };
199
- const planningService = new PlanningService(context);
200
- const trackCommitCommand = new TrackCommitCommand(context, planningService, configService);
201
- await trackCommitCommand.execute({
202
- sha,
203
- message,
204
- verbose: options.verbose
205
- });
206
- }
207
- catch (error) {
208
- // Fail silently to avoid blocking commits
209
- if (options.verbose) {
210
- console.error('Track commit failed:', error);
211
- }
212
- // Exit with 0 to avoid blocking commit
213
- process.exit(0);
214
- }
215
- });
216
- // Validate commit message command (hidden - called by commit-msg git hook)
217
- program
218
- .command('validate-commit-message <messageFile>', { hidden: true })
219
- .description('Validate PRD/Feature/Task references before commit (called by git hooks)')
220
- .action(async (messageFile) => {
221
- try {
222
- const validateCommand = new ValidateCommitMessageCommand();
223
- await validateCommand.execute({ messageFile });
224
- // Exit 0 on success (allow commit)
225
- process.exit(0);
226
- }
227
- catch (error) {
228
- // Exit 1 on validation failure (reject commit)
229
- console.error(error.message);
230
- process.exit(1);
231
- }
232
- });
233
- return program;
234
- }
235
- //# sourceMappingURL=cli-factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-factory.js","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"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"}