@bhimudev/gnanai 0.4.0

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 (274) hide show
  1. package/README.md +270 -0
  2. package/dist/bin/cli.d.ts +3 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +188 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/commands/cleanup.d.ts +21 -0
  7. package/dist/commands/cleanup.d.ts.map +1 -0
  8. package/dist/commands/cleanup.js +380 -0
  9. package/dist/commands/cleanup.js.map +1 -0
  10. package/dist/commands/dispatch.d.ts +13 -0
  11. package/dist/commands/dispatch.d.ts.map +1 -0
  12. package/dist/commands/dispatch.js +85 -0
  13. package/dist/commands/dispatch.js.map +1 -0
  14. package/dist/commands/doctor.d.ts +2 -0
  15. package/dist/commands/doctor.d.ts.map +1 -0
  16. package/dist/commands/doctor.js +155 -0
  17. package/dist/commands/doctor.js.map +1 -0
  18. package/dist/commands/generate.d.ts +3 -0
  19. package/dist/commands/generate.d.ts.map +1 -0
  20. package/dist/commands/generate.js +167 -0
  21. package/dist/commands/generate.js.map +1 -0
  22. package/dist/commands/init.d.ts +10 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +711 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/knowledge-sync.d.ts +69 -0
  27. package/dist/commands/knowledge-sync.d.ts.map +1 -0
  28. package/dist/commands/knowledge-sync.js +661 -0
  29. package/dist/commands/knowledge-sync.js.map +1 -0
  30. package/dist/commands/knowledge.d.ts +35 -0
  31. package/dist/commands/knowledge.d.ts.map +1 -0
  32. package/dist/commands/knowledge.js +254 -0
  33. package/dist/commands/knowledge.js.map +1 -0
  34. package/dist/commands/rollback.d.ts +13 -0
  35. package/dist/commands/rollback.d.ts.map +1 -0
  36. package/dist/commands/rollback.js +186 -0
  37. package/dist/commands/rollback.js.map +1 -0
  38. package/dist/commands/setup-config.d.ts +6 -0
  39. package/dist/commands/setup-config.d.ts.map +1 -0
  40. package/dist/commands/setup-config.js +663 -0
  41. package/dist/commands/setup-config.js.map +1 -0
  42. package/dist/commands/setup-project.d.ts +6 -0
  43. package/dist/commands/setup-project.d.ts.map +1 -0
  44. package/dist/commands/setup-project.js +361 -0
  45. package/dist/commands/setup-project.js.map +1 -0
  46. package/dist/commands/setup.d.ts +3 -0
  47. package/dist/commands/setup.d.ts.map +1 -0
  48. package/dist/commands/setup.js +293 -0
  49. package/dist/commands/setup.js.map +1 -0
  50. package/dist/commands/status.d.ts +51 -0
  51. package/dist/commands/status.d.ts.map +1 -0
  52. package/dist/commands/status.js +182 -0
  53. package/dist/commands/status.js.map +1 -0
  54. package/dist/commands/uninstall.d.ts +3 -0
  55. package/dist/commands/uninstall.d.ts.map +1 -0
  56. package/dist/commands/uninstall.js +173 -0
  57. package/dist/commands/uninstall.js.map +1 -0
  58. package/dist/commands/update.d.ts +10 -0
  59. package/dist/commands/update.d.ts.map +1 -0
  60. package/dist/commands/update.js +435 -0
  61. package/dist/commands/update.js.map +1 -0
  62. package/dist/commands/worktree.d.ts +30 -0
  63. package/dist/commands/worktree.d.ts.map +1 -0
  64. package/dist/commands/worktree.js +262 -0
  65. package/dist/commands/worktree.js.map +1 -0
  66. package/dist/generator/claude-cli.d.ts +24 -0
  67. package/dist/generator/claude-cli.d.ts.map +1 -0
  68. package/dist/generator/claude-cli.js +239 -0
  69. package/dist/generator/claude-cli.js.map +1 -0
  70. package/dist/generator/prompt-builder.d.ts +7 -0
  71. package/dist/generator/prompt-builder.d.ts.map +1 -0
  72. package/dist/generator/prompt-builder.js +144 -0
  73. package/dist/generator/prompt-builder.js.map +1 -0
  74. package/dist/index.d.ts +36 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +45 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/mcp/embeddings.d.ts +53 -0
  79. package/dist/mcp/embeddings.d.ts.map +1 -0
  80. package/dist/mcp/embeddings.js +68 -0
  81. package/dist/mcp/embeddings.js.map +1 -0
  82. package/dist/mcp/hybrid-search.d.ts +25 -0
  83. package/dist/mcp/hybrid-search.d.ts.map +1 -0
  84. package/dist/mcp/hybrid-search.js +72 -0
  85. package/dist/mcp/hybrid-search.js.map +1 -0
  86. package/dist/mcp/knowledge-server.d.ts +4 -0
  87. package/dist/mcp/knowledge-server.d.ts.map +1 -0
  88. package/dist/mcp/knowledge-server.js +294 -0
  89. package/dist/mcp/knowledge-server.js.map +1 -0
  90. package/dist/mcp/knowledge-utils.d.ts +65 -0
  91. package/dist/mcp/knowledge-utils.d.ts.map +1 -0
  92. package/dist/mcp/knowledge-utils.js +207 -0
  93. package/dist/mcp/knowledge-utils.js.map +1 -0
  94. package/dist/mcp/search-factory.d.ts +9 -0
  95. package/dist/mcp/search-factory.d.ts.map +1 -0
  96. package/dist/mcp/search-factory.js +23 -0
  97. package/dist/mcp/search-factory.js.map +1 -0
  98. package/dist/mcp/search-index.d.ts +45 -0
  99. package/dist/mcp/search-index.d.ts.map +1 -0
  100. package/dist/mcp/search-index.js +2 -0
  101. package/dist/mcp/search-index.js.map +1 -0
  102. package/dist/mcp/search-minisearch.d.ts +46 -0
  103. package/dist/mcp/search-minisearch.d.ts.map +1 -0
  104. package/dist/mcp/search-minisearch.js +99 -0
  105. package/dist/mcp/search-minisearch.js.map +1 -0
  106. package/dist/mcp/search-sqlite.d.ts +30 -0
  107. package/dist/mcp/search-sqlite.d.ts.map +1 -0
  108. package/dist/mcp/search-sqlite.js +188 -0
  109. package/dist/mcp/search-sqlite.js.map +1 -0
  110. package/dist/mcp/vector-store.d.ts +52 -0
  111. package/dist/mcp/vector-store.d.ts.map +1 -0
  112. package/dist/mcp/vector-store.js +183 -0
  113. package/dist/mcp/vector-store.js.map +1 -0
  114. package/dist/scaffold/copy-core-agents.d.ts +2 -0
  115. package/dist/scaffold/copy-core-agents.d.ts.map +1 -0
  116. package/dist/scaffold/copy-core-agents.js +90 -0
  117. package/dist/scaffold/copy-core-agents.js.map +1 -0
  118. package/dist/scaffold/create-claude-settings.d.ts +40 -0
  119. package/dist/scaffold/create-claude-settings.d.ts.map +1 -0
  120. package/dist/scaffold/create-claude-settings.js +422 -0
  121. package/dist/scaffold/create-claude-settings.js.map +1 -0
  122. package/dist/scaffold/create-config.d.ts +14 -0
  123. package/dist/scaffold/create-config.d.ts.map +1 -0
  124. package/dist/scaffold/create-config.js +199 -0
  125. package/dist/scaffold/create-config.js.map +1 -0
  126. package/dist/scaffold/create-project-description.d.ts +12 -0
  127. package/dist/scaffold/create-project-description.d.ts.map +1 -0
  128. package/dist/scaffold/create-project-description.js +104 -0
  129. package/dist/scaffold/create-project-description.js.map +1 -0
  130. package/dist/scaffold/create-structure.d.ts +2 -0
  131. package/dist/scaffold/create-structure.d.ts.map +1 -0
  132. package/dist/scaffold/create-structure.js +146 -0
  133. package/dist/scaffold/create-structure.js.map +1 -0
  134. package/dist/types/dependency-analysis.d.ts +11 -0
  135. package/dist/types/dependency-analysis.d.ts.map +1 -0
  136. package/dist/types/dependency-analysis.js +2 -0
  137. package/dist/types/dependency-analysis.js.map +1 -0
  138. package/dist/types/index.d.ts +526 -0
  139. package/dist/types/index.d.ts.map +1 -0
  140. package/dist/types/index.js +3 -0
  141. package/dist/types/index.js.map +1 -0
  142. package/dist/types/task.d.ts +25 -0
  143. package/dist/types/task.d.ts.map +1 -0
  144. package/dist/types/task.js +3 -0
  145. package/dist/types/task.js.map +1 -0
  146. package/dist/utils/analyze-files.d.ts +7 -0
  147. package/dist/utils/analyze-files.d.ts.map +1 -0
  148. package/dist/utils/analyze-files.js +27 -0
  149. package/dist/utils/analyze-files.js.map +1 -0
  150. package/dist/utils/backup.d.ts +102 -0
  151. package/dist/utils/backup.d.ts.map +1 -0
  152. package/dist/utils/backup.js +352 -0
  153. package/dist/utils/backup.js.map +1 -0
  154. package/dist/utils/ci-provider.d.ts +23 -0
  155. package/dist/utils/ci-provider.d.ts.map +1 -0
  156. package/dist/utils/ci-provider.js +525 -0
  157. package/dist/utils/ci-provider.js.map +1 -0
  158. package/dist/utils/ci-status.d.ts +57 -0
  159. package/dist/utils/ci-status.d.ts.map +1 -0
  160. package/dist/utils/ci-status.js +349 -0
  161. package/dist/utils/ci-status.js.map +1 -0
  162. package/dist/utils/dependency-analysis.d.ts +34 -0
  163. package/dist/utils/dependency-analysis.d.ts.map +1 -0
  164. package/dist/utils/dependency-analysis.js +298 -0
  165. package/dist/utils/dependency-analysis.js.map +1 -0
  166. package/dist/utils/detect-git.d.ts +57 -0
  167. package/dist/utils/detect-git.d.ts.map +1 -0
  168. package/dist/utils/detect-git.js +439 -0
  169. package/dist/utils/detect-git.js.map +1 -0
  170. package/dist/utils/detect-mcp.d.ts +32 -0
  171. package/dist/utils/detect-mcp.d.ts.map +1 -0
  172. package/dist/utils/detect-mcp.js +178 -0
  173. package/dist/utils/detect-mcp.js.map +1 -0
  174. package/dist/utils/detect-project.d.ts +3 -0
  175. package/dist/utils/detect-project.d.ts.map +1 -0
  176. package/dist/utils/detect-project.js +155 -0
  177. package/dist/utils/detect-project.js.map +1 -0
  178. package/dist/utils/file-comparison.d.ts +89 -0
  179. package/dist/utils/file-comparison.d.ts.map +1 -0
  180. package/dist/utils/file-comparison.js +301 -0
  181. package/dist/utils/file-comparison.js.map +1 -0
  182. package/dist/utils/file-merger.d.ts +74 -0
  183. package/dist/utils/file-merger.d.ts.map +1 -0
  184. package/dist/utils/file-merger.js +350 -0
  185. package/dist/utils/file-merger.js.map +1 -0
  186. package/dist/utils/logger.d.ts +26 -0
  187. package/dist/utils/logger.d.ts.map +1 -0
  188. package/dist/utils/logger.js +72 -0
  189. package/dist/utils/logger.js.map +1 -0
  190. package/dist/utils/managed-process.d.ts +109 -0
  191. package/dist/utils/managed-process.d.ts.map +1 -0
  192. package/dist/utils/managed-process.js +481 -0
  193. package/dist/utils/managed-process.js.map +1 -0
  194. package/dist/utils/merge-claude-settings.d.ts +65 -0
  195. package/dist/utils/merge-claude-settings.d.ts.map +1 -0
  196. package/dist/utils/merge-claude-settings.js +133 -0
  197. package/dist/utils/merge-claude-settings.js.map +1 -0
  198. package/dist/utils/migration.d.ts +74 -0
  199. package/dist/utils/migration.d.ts.map +1 -0
  200. package/dist/utils/migration.js +345 -0
  201. package/dist/utils/migration.js.map +1 -0
  202. package/dist/utils/process-health.d.ts +51 -0
  203. package/dist/utils/process-health.d.ts.map +1 -0
  204. package/dist/utils/process-health.js +123 -0
  205. package/dist/utils/process-health.js.map +1 -0
  206. package/dist/utils/process-registry.d.ts +20 -0
  207. package/dist/utils/process-registry.d.ts.map +1 -0
  208. package/dist/utils/process-registry.js +151 -0
  209. package/dist/utils/process-registry.js.map +1 -0
  210. package/dist/utils/process-tree.d.ts +51 -0
  211. package/dist/utils/process-tree.d.ts.map +1 -0
  212. package/dist/utils/process-tree.js +499 -0
  213. package/dist/utils/process-tree.js.map +1 -0
  214. package/dist/utils/repair-mcp-config.d.ts +15 -0
  215. package/dist/utils/repair-mcp-config.d.ts.map +1 -0
  216. package/dist/utils/repair-mcp-config.js +129 -0
  217. package/dist/utils/repair-mcp-config.js.map +1 -0
  218. package/dist/utils/task-lifecycle.d.ts +60 -0
  219. package/dist/utils/task-lifecycle.d.ts.map +1 -0
  220. package/dist/utils/task-lifecycle.js +310 -0
  221. package/dist/utils/task-lifecycle.js.map +1 -0
  222. package/dist/utils/update-agent-mcp.d.ts +7 -0
  223. package/dist/utils/update-agent-mcp.d.ts.map +1 -0
  224. package/dist/utils/update-agent-mcp.js +115 -0
  225. package/dist/utils/update-agent-mcp.js.map +1 -0
  226. package/dist/utils/update-agent-templates.d.ts +6 -0
  227. package/dist/utils/update-agent-templates.d.ts.map +1 -0
  228. package/dist/utils/update-agent-templates.js +56 -0
  229. package/dist/utils/update-agent-templates.js.map +1 -0
  230. package/dist/utils/update-config-ci.d.ts +7 -0
  231. package/dist/utils/update-config-ci.d.ts.map +1 -0
  232. package/dist/utils/update-config-ci.js +72 -0
  233. package/dist/utils/update-config-ci.js.map +1 -0
  234. package/dist/utils/update-config-git.d.ts +18 -0
  235. package/dist/utils/update-config-git.d.ts.map +1 -0
  236. package/dist/utils/update-config-git.js +146 -0
  237. package/dist/utils/update-config-git.js.map +1 -0
  238. package/dist/utils/update-config-mcp.d.ts +7 -0
  239. package/dist/utils/update-config-mcp.d.ts.map +1 -0
  240. package/dist/utils/update-config-mcp.js +98 -0
  241. package/dist/utils/update-config-mcp.js.map +1 -0
  242. package/dist/utils/validate-config.d.ts +3 -0
  243. package/dist/utils/validate-config.d.ts.map +1 -0
  244. package/dist/utils/validate-config.js +109 -0
  245. package/dist/utils/validate-config.js.map +1 -0
  246. package/dist/utils/version-tracker.d.ts +130 -0
  247. package/dist/utils/version-tracker.d.ts.map +1 -0
  248. package/dist/utils/version-tracker.js +298 -0
  249. package/dist/utils/version-tracker.js.map +1 -0
  250. package/dist/utils/worktree.d.ts +68 -0
  251. package/dist/utils/worktree.d.ts.map +1 -0
  252. package/dist/utils/worktree.js +446 -0
  253. package/dist/utils/worktree.js.map +1 -0
  254. package/package.json +77 -0
  255. package/templates/ARCHAI_README.md +329 -0
  256. package/templates/CLAUDE.md +67 -0
  257. package/templates/PROMPTS.md +506 -0
  258. package/templates/core-agents/boss-agent.md +671 -0
  259. package/templates/core-agents/cleanup-agent.md +145 -0
  260. package/templates/core-agents/code-reviewer.md +175 -0
  261. package/templates/core-agents/critical-reviewer.md +117 -0
  262. package/templates/core-agents/deep-analyst.md +216 -0
  263. package/templates/core-agents/finalization-agent.md +252 -0
  264. package/templates/core-agents/git-coordinator.md +240 -0
  265. package/templates/core-agents/implementation-agent.md +151 -0
  266. package/templates/core-agents/maestro-agent.md +413 -0
  267. package/templates/core-agents/maestro-headless-agent.md +422 -0
  268. package/templates/core-agents/plan-validator.md +198 -0
  269. package/templates/core-agents/quick-fix.md +56 -0
  270. package/templates/core-agents/routing-templates.md +338 -0
  271. package/templates/core-agents/task-orchestrator.md +143 -0
  272. package/templates/core-agents/task-prep.md +202 -0
  273. package/templates/core-agents/tdd-designer.md +143 -0
  274. package/templates/specialist-meta.md +275 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-mcp.js","sourceRoot":"","sources":["../../src/utils/detect-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DetectedProject } from '../types/index.js';
2
+ export declare function detectProject(): Promise<DetectedProject>;
3
+ //# sourceMappingURL=detect-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-project.d.ts","sourceRoot":"","sources":["../../src/utils/detect-project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAmH9D"}
@@ -0,0 +1,155 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { logger } from './logger.js';
4
+ export async function detectProject() {
5
+ const detected = {
6
+ name: path.basename(process.cwd()),
7
+ languages: [],
8
+ packageManager: null,
9
+ isMonorepo: false,
10
+ frameworks: [],
11
+ testFramework: null,
12
+ platform: detectPlatform(),
13
+ shell: detectShell(),
14
+ };
15
+ // Detect package.json (Node.js projects)
16
+ if (await fs.pathExists('package.json')) {
17
+ try {
18
+ const pkg = await fs.readJson('package.json');
19
+ detected.name = pkg.name || detected.name;
20
+ // Detect languages
21
+ if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
22
+ detected.languages.push('TypeScript');
23
+ }
24
+ else {
25
+ detected.languages.push('JavaScript');
26
+ }
27
+ // Detect frameworks
28
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
29
+ if (deps.react)
30
+ detected.frameworks.push('React');
31
+ if (deps.vue)
32
+ detected.frameworks.push('Vue');
33
+ if (deps.angular)
34
+ detected.frameworks.push('Angular');
35
+ if (deps.svelte)
36
+ detected.frameworks.push('Svelte');
37
+ if (deps.next)
38
+ detected.frameworks.push('Next.js');
39
+ if (deps.express)
40
+ detected.frameworks.push('Express');
41
+ if (deps.fastify)
42
+ detected.frameworks.push('Fastify');
43
+ if (deps.nestjs || deps['@nestjs/core'])
44
+ detected.frameworks.push('NestJS');
45
+ // Detect test frameworks
46
+ if (deps.vitest)
47
+ detected.testFramework = 'vitest';
48
+ else if (deps.jest)
49
+ detected.testFramework = 'jest';
50
+ else if (deps.mocha)
51
+ detected.testFramework = 'mocha';
52
+ else if (deps.ava)
53
+ detected.testFramework = 'ava';
54
+ else if (deps.playwright || deps['@playwright/test'])
55
+ detected.testFramework = 'playwright';
56
+ else if (deps.cypress)
57
+ detected.testFramework = 'cypress';
58
+ // Detect package manager
59
+ if (await fs.pathExists('pnpm-lock.yaml')) {
60
+ detected.packageManager = 'pnpm';
61
+ }
62
+ else if (await fs.pathExists('yarn.lock')) {
63
+ detected.packageManager = 'yarn';
64
+ }
65
+ else if (await fs.pathExists('bun.lockb')) {
66
+ detected.packageManager = 'bun';
67
+ }
68
+ else if (await fs.pathExists('package-lock.json')) {
69
+ detected.packageManager = 'npm';
70
+ }
71
+ // Detect monorepo
72
+ if (pkg.workspaces || await fs.pathExists('pnpm-workspace.yaml') || await fs.pathExists('turbo.json') || await fs.pathExists('nx.json')) {
73
+ detected.isMonorepo = true;
74
+ }
75
+ }
76
+ catch (error) {
77
+ logger.debug('Failed to parse package.json', {
78
+ error: error instanceof Error ? error.message : 'Unknown error'
79
+ });
80
+ }
81
+ }
82
+ // Detect Python projects
83
+ if (await fs.pathExists('requirements.txt') || await fs.pathExists('pyproject.toml') || await fs.pathExists('setup.py')) {
84
+ detected.languages.push('Python');
85
+ detected.packageManager = 'pip';
86
+ if (await fs.pathExists('pyproject.toml')) {
87
+ try {
88
+ const content = await fs.readFile('pyproject.toml', 'utf-8');
89
+ if (content.includes('fastapi'))
90
+ detected.frameworks.push('FastAPI');
91
+ if (content.includes('django'))
92
+ detected.frameworks.push('Django');
93
+ if (content.includes('flask'))
94
+ detected.frameworks.push('Flask');
95
+ }
96
+ catch (error) {
97
+ logger.debug('Failed to read pyproject.toml', {
98
+ error: error instanceof Error ? error.message : 'Unknown error'
99
+ });
100
+ }
101
+ }
102
+ }
103
+ // Detect Go projects
104
+ if (await fs.pathExists('go.mod')) {
105
+ detected.languages.push('Go');
106
+ detected.packageManager = 'go';
107
+ }
108
+ // Detect Rust projects
109
+ if (await fs.pathExists('Cargo.toml')) {
110
+ detected.languages.push('Rust');
111
+ detected.packageManager = 'cargo';
112
+ }
113
+ // Detect Java/Kotlin projects
114
+ if (await fs.pathExists('pom.xml') || await fs.pathExists('build.gradle') || await fs.pathExists('build.gradle.kts')) {
115
+ if (await fs.pathExists('build.gradle.kts')) {
116
+ detected.languages.push('Kotlin');
117
+ }
118
+ else {
119
+ detected.languages.push('Java');
120
+ }
121
+ detected.packageManager = await fs.pathExists('pom.xml') ? 'maven' : 'gradle';
122
+ }
123
+ // Detect .NET projects
124
+ const csprojFiles = await fs.readdir('.').catch(() => []);
125
+ if (csprojFiles.some((f) => f.endsWith('.csproj') || f.endsWith('.fsproj'))) {
126
+ detected.languages.push('C#');
127
+ detected.packageManager = 'dotnet';
128
+ }
129
+ return detected;
130
+ }
131
+ function detectPlatform() {
132
+ switch (process.platform) {
133
+ case 'win32': return 'windows';
134
+ case 'darwin': return 'macos';
135
+ default: return 'linux';
136
+ }
137
+ }
138
+ function detectShell() {
139
+ const shell = process.env.SHELL || process.env.COMSPEC || '';
140
+ if (shell.includes('bash') || process.env.BASH)
141
+ return 'bash';
142
+ if (shell.includes('zsh'))
143
+ return 'zsh';
144
+ if (shell.includes('fish'))
145
+ return 'fish';
146
+ if (shell.includes('powershell') || shell.includes('pwsh'))
147
+ return 'powershell';
148
+ if (shell.includes('cmd'))
149
+ return 'cmd';
150
+ // On Windows with Git Bash, SHELL may not be set but MSYSTEM is
151
+ if (process.env.MSYSTEM)
152
+ return 'bash';
153
+ return process.platform === 'win32' ? 'cmd' : 'bash';
154
+ }
155
+ //# sourceMappingURL=detect-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-project.js","sourceRoot":"","sources":["../../src/utils/detect-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Status of a file during comparison.
3
+ */
4
+ export type FileStatus = 'new' | 'unchanged' | 'modified_by_user' | 'modified_by_archai' | 'conflict' | 'deleted_in_template' | 'generated';
5
+ /**
6
+ * Analysis result for a single file.
7
+ */
8
+ export interface FileAnalysis {
9
+ path: string;
10
+ status: FileStatus;
11
+ canAutoMerge: boolean;
12
+ baseHash: string | null;
13
+ currentHash: string | null;
14
+ templateHash: string | null;
15
+ isGenerated: boolean;
16
+ }
17
+ /**
18
+ * Three-way diff result for conflict resolution.
19
+ */
20
+ export interface ThreeWayDiff {
21
+ path: string;
22
+ base: string | null;
23
+ current: string | null;
24
+ incoming: string | null;
25
+ userChanges: string[];
26
+ archaiChanges: string[];
27
+ }
28
+ /**
29
+ * Compute SHA256 hash of a file, returning first 12 characters.
30
+ */
31
+ export declare function hashFile(filePath: string): Promise<string | null>;
32
+ /**
33
+ * Compute SHA256 hash of a string content.
34
+ */
35
+ export declare function hashContent(content: string): string;
36
+ /**
37
+ * Determine the status of a file by comparing hashes.
38
+ *
39
+ * @param baseHash - Hash when archai originally installed the file (from version.json)
40
+ * @param currentHash - Hash of file currently on disk
41
+ * @param templateHash - Hash of file in current archai templates
42
+ * @param isGenerated - Whether this is a user-generated file (specialist)
43
+ */
44
+ export declare function determineFileStatus(baseHash: string | null, currentHash: string | null, templateHash: string | null, isGenerated?: boolean): FileStatus;
45
+ /**
46
+ * Analyze a single file against its template.
47
+ */
48
+ export declare function analyzeFile(filePath: string, templatePath: string | null, baseHash: string | null, isGenerated?: boolean): Promise<FileAnalysis>;
49
+ /**
50
+ * Determine if a file can be auto-merged based on its type and status.
51
+ */
52
+ export declare function determineCanAutoMerge(filePath: string, status: FileStatus): boolean;
53
+ /**
54
+ * Check if a file is a generated specialist agent.
55
+ */
56
+ export declare function isGeneratedSpecialist(filePath: string): boolean;
57
+ /**
58
+ * Generate a simple line-based diff between two strings.
59
+ * Returns arrays of changed line numbers.
60
+ */
61
+ export declare function generateSimpleDiff(base: string, compare: string): {
62
+ added: number[];
63
+ removed: number[];
64
+ changed: number[];
65
+ };
66
+ /**
67
+ * Generate a three-way diff for conflict resolution.
68
+ */
69
+ export declare function generateThreeWayDiff(filePath: string, baseContent: string | null, templatePath: string | null): Promise<ThreeWayDiff>;
70
+ /**
71
+ * Compare all files in a directory against templates.
72
+ */
73
+ export declare function compareDirectory(localDir: string, templateDir: string, versionData?: Record<string, {
74
+ baseHash: string | null;
75
+ isGenerated: boolean;
76
+ }>): Promise<FileAnalysis[]>;
77
+ /**
78
+ * Summarize file analysis results by status.
79
+ */
80
+ export declare function summarizeAnalysis(analyses: FileAnalysis[]): Record<FileStatus, number>;
81
+ /**
82
+ * Filter analyses that need user attention.
83
+ */
84
+ export declare function getFilesNeedingAttention(analyses: FileAnalysis[]): FileAnalysis[];
85
+ /**
86
+ * Filter analyses that can be auto-processed.
87
+ */
88
+ export declare function getAutoProcessableFiles(analyses: FileAnalysis[]): FileAnalysis[];
89
+ //# sourceMappingURL=file-comparison.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-comparison.d.ts","sourceRoot":"","sources":["../../src/utils/file-comparison.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,301 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { logger } from './logger.js';
5
+ /**
6
+ * Compute SHA256 hash of a file, returning first 12 characters.
7
+ */
8
+ export async function hashFile(filePath) {
9
+ try {
10
+ if (!await fs.pathExists(filePath)) {
11
+ return null;
12
+ }
13
+ const content = await fs.readFile(filePath);
14
+ const hash = crypto.createHash('sha256').update(content).digest('hex');
15
+ return hash.substring(0, 12);
16
+ }
17
+ catch (error) {
18
+ logger.debug(`Failed to hash file: ${filePath}`, error);
19
+ return null;
20
+ }
21
+ }
22
+ /**
23
+ * Compute SHA256 hash of a string content.
24
+ */
25
+ export function hashContent(content) {
26
+ const hash = crypto.createHash('sha256').update(content, 'utf8').digest('hex');
27
+ return hash.substring(0, 12);
28
+ }
29
+ /**
30
+ * Determine the status of a file by comparing hashes.
31
+ *
32
+ * @param baseHash - Hash when archai originally installed the file (from version.json)
33
+ * @param currentHash - Hash of file currently on disk
34
+ * @param templateHash - Hash of file in current archai templates
35
+ * @param isGenerated - Whether this is a user-generated file (specialist)
36
+ */
37
+ export function determineFileStatus(baseHash, currentHash, templateHash, isGenerated = false) {
38
+ // User-generated files are never touched
39
+ if (isGenerated) {
40
+ return 'generated';
41
+ }
42
+ // File doesn't exist locally
43
+ if (currentHash === null && templateHash !== null) {
44
+ return 'new';
45
+ }
46
+ // File exists locally but not in templates (deprecated)
47
+ if (currentHash !== null && templateHash === null) {
48
+ return 'deleted_in_template';
49
+ }
50
+ // Both null - shouldn't happen, but treat as unchanged
51
+ if (currentHash === null && templateHash === null) {
52
+ return 'unchanged';
53
+ }
54
+ // File unchanged from template
55
+ if (currentHash === templateHash) {
56
+ return 'unchanged';
57
+ }
58
+ // No base hash (legacy install or new file) - compare current to template
59
+ if (baseHash === null) {
60
+ // If current differs from template, assume user modified
61
+ return currentHash !== templateHash ? 'modified_by_user' : 'unchanged';
62
+ }
63
+ // Three-way comparison
64
+ const userModified = currentHash !== baseHash;
65
+ const archaiModified = templateHash !== baseHash;
66
+ if (userModified && archaiModified) {
67
+ return 'conflict';
68
+ }
69
+ if (userModified) {
70
+ return 'modified_by_user';
71
+ }
72
+ if (archaiModified) {
73
+ return 'modified_by_archai';
74
+ }
75
+ return 'unchanged';
76
+ }
77
+ /**
78
+ * Analyze a single file against its template.
79
+ */
80
+ export async function analyzeFile(filePath, templatePath, baseHash, isGenerated = false) {
81
+ const currentHash = await hashFile(filePath);
82
+ const templateHash = templatePath ? await hashFile(templatePath) : null;
83
+ const status = determineFileStatus(baseHash, currentHash, templateHash, isGenerated);
84
+ const canAutoMerge = determineCanAutoMerge(filePath, status);
85
+ return {
86
+ path: filePath,
87
+ status,
88
+ canAutoMerge,
89
+ baseHash,
90
+ currentHash,
91
+ templateHash,
92
+ isGenerated,
93
+ };
94
+ }
95
+ /**
96
+ * Determine if a file can be auto-merged based on its type and status.
97
+ */
98
+ export function determineCanAutoMerge(filePath, status) {
99
+ // These statuses never need merging
100
+ if (['new', 'unchanged', 'generated', 'deleted_in_template'].includes(status)) {
101
+ return true; // Not really "merging", but can be handled automatically
102
+ }
103
+ // User modifications require manual choice for most files
104
+ if (status === 'modified_by_user') {
105
+ return false;
106
+ }
107
+ // Archai-only changes can be auto-applied
108
+ if (status === 'modified_by_archai') {
109
+ return true;
110
+ }
111
+ // Conflicts - check if file type supports smart merge
112
+ const ext = path.extname(filePath).toLowerCase();
113
+ const basename = path.basename(filePath).toLowerCase();
114
+ // JSON files can often be merged
115
+ if (ext === '.json') {
116
+ // settings.local.json specifically supports merge
117
+ if (basename === 'settings.local.json') {
118
+ return true;
119
+ }
120
+ }
121
+ // .gitignore can be merged (append)
122
+ if (basename === '.gitignore') {
123
+ return true;
124
+ }
125
+ // Markdown files generally cannot be auto-merged
126
+ if (ext === '.md') {
127
+ return false;
128
+ }
129
+ return false;
130
+ }
131
+ /**
132
+ * Check if a file is a generated specialist agent.
133
+ */
134
+ export function isGeneratedSpecialist(filePath) {
135
+ const normalized = filePath.replace(/\\/g, '/');
136
+ return normalized.includes('.claude/agents/') &&
137
+ normalized.endsWith('-specialist.md');
138
+ }
139
+ /**
140
+ * Generate a simple line-based diff between two strings.
141
+ * Returns arrays of changed line numbers.
142
+ */
143
+ export function generateSimpleDiff(base, compare) {
144
+ const baseLines = base.split('\n');
145
+ const compareLines = compare.split('\n');
146
+ const added = [];
147
+ const removed = [];
148
+ const changed = [];
149
+ const maxLines = Math.max(baseLines.length, compareLines.length);
150
+ for (let i = 0; i < maxLines; i++) {
151
+ const baseLine = baseLines[i];
152
+ const compareLine = compareLines[i];
153
+ if (baseLine === undefined && compareLine !== undefined) {
154
+ added.push(i + 1);
155
+ }
156
+ else if (baseLine !== undefined && compareLine === undefined) {
157
+ removed.push(i + 1);
158
+ }
159
+ else if (baseLine !== compareLine) {
160
+ changed.push(i + 1);
161
+ }
162
+ }
163
+ return { added, removed, changed };
164
+ }
165
+ /**
166
+ * Generate a three-way diff for conflict resolution.
167
+ */
168
+ export async function generateThreeWayDiff(filePath, baseContent, templatePath) {
169
+ const currentContent = await fs.pathExists(filePath)
170
+ ? await fs.readFile(filePath, 'utf-8')
171
+ : null;
172
+ const incomingContent = templatePath && await fs.pathExists(templatePath)
173
+ ? await fs.readFile(templatePath, 'utf-8')
174
+ : null;
175
+ let userChanges = [];
176
+ let archaiChanges = [];
177
+ if (baseContent && currentContent) {
178
+ const diff = generateSimpleDiff(baseContent, currentContent);
179
+ userChanges = [
180
+ ...diff.added.map(n => `+L${n}`),
181
+ ...diff.removed.map(n => `-L${n}`),
182
+ ...diff.changed.map(n => `~L${n}`),
183
+ ];
184
+ }
185
+ if (baseContent && incomingContent) {
186
+ const diff = generateSimpleDiff(baseContent, incomingContent);
187
+ archaiChanges = [
188
+ ...diff.added.map(n => `+L${n}`),
189
+ ...diff.removed.map(n => `-L${n}`),
190
+ ...diff.changed.map(n => `~L${n}`),
191
+ ];
192
+ }
193
+ return {
194
+ path: filePath,
195
+ base: baseContent,
196
+ current: currentContent,
197
+ incoming: incomingContent,
198
+ userChanges,
199
+ archaiChanges,
200
+ };
201
+ }
202
+ /**
203
+ * Compare all files in a directory against templates.
204
+ */
205
+ export async function compareDirectory(localDir, templateDir, versionData = {}) {
206
+ const results = [];
207
+ // Get all files in both directories
208
+ const localFiles = await getFilesRecursive(localDir);
209
+ const templateFiles = await getFilesRecursive(templateDir);
210
+ // Create sets for easy lookup
211
+ const localSet = new Set(localFiles.map(f => path.relative(localDir, f)));
212
+ const templateSet = new Set(templateFiles.map(f => path.relative(templateDir, f)));
213
+ // Check all local files
214
+ for (const relativePath of localSet) {
215
+ const localPath = path.join(localDir, relativePath);
216
+ const templatePath = templateSet.has(relativePath)
217
+ ? path.join(templateDir, relativePath)
218
+ : null;
219
+ const versionInfo = versionData[relativePath] || { baseHash: null, isGenerated: false };
220
+ const isGenerated = versionInfo.isGenerated || isGeneratedSpecialist(localPath);
221
+ const analysis = await analyzeFile(localPath, templatePath, versionInfo.baseHash, isGenerated);
222
+ results.push(analysis);
223
+ }
224
+ // Check for new files in templates (not in local)
225
+ for (const relativePath of templateSet) {
226
+ if (!localSet.has(relativePath)) {
227
+ const templatePath = path.join(templateDir, relativePath);
228
+ const localPath = path.join(localDir, relativePath);
229
+ results.push({
230
+ path: localPath,
231
+ status: 'new',
232
+ canAutoMerge: true,
233
+ baseHash: null,
234
+ currentHash: null,
235
+ templateHash: await hashFile(templatePath),
236
+ isGenerated: false,
237
+ });
238
+ }
239
+ }
240
+ return results;
241
+ }
242
+ /**
243
+ * Get all files in a directory recursively.
244
+ */
245
+ async function getFilesRecursive(dir) {
246
+ const files = [];
247
+ if (!await fs.pathExists(dir)) {
248
+ return files;
249
+ }
250
+ const entries = await fs.readdir(dir, { withFileTypes: true });
251
+ for (const entry of entries) {
252
+ const fullPath = path.join(dir, entry.name);
253
+ if (entry.isDirectory()) {
254
+ // Skip backup directories
255
+ if (entry.name === 'backups' || entry.name === 'archived') {
256
+ continue;
257
+ }
258
+ const subFiles = await getFilesRecursive(fullPath);
259
+ files.push(...subFiles);
260
+ }
261
+ else if (entry.isFile()) {
262
+ files.push(fullPath);
263
+ }
264
+ }
265
+ return files;
266
+ }
267
+ /**
268
+ * Summarize file analysis results by status.
269
+ */
270
+ export function summarizeAnalysis(analyses) {
271
+ const summary = {
272
+ 'new': 0,
273
+ 'unchanged': 0,
274
+ 'modified_by_user': 0,
275
+ 'modified_by_archai': 0,
276
+ 'conflict': 0,
277
+ 'deleted_in_template': 0,
278
+ 'generated': 0,
279
+ };
280
+ for (const analysis of analyses) {
281
+ summary[analysis.status]++;
282
+ }
283
+ return summary;
284
+ }
285
+ /**
286
+ * Filter analyses that need user attention.
287
+ */
288
+ export function getFilesNeedingAttention(analyses) {
289
+ return analyses.filter(a => a.status === 'conflict' ||
290
+ a.status === 'modified_by_user' ||
291
+ a.status === 'deleted_in_template');
292
+ }
293
+ /**
294
+ * Filter analyses that can be auto-processed.
295
+ */
296
+ export function getAutoProcessableFiles(analyses) {
297
+ return analyses.filter(a => a.status === 'new' ||
298
+ a.status === 'modified_by_archai' ||
299
+ (a.canAutoMerge && a.status === 'conflict'));
300
+ }
301
+ //# sourceMappingURL=file-comparison.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-comparison.js","sourceRoot":"","sources":["../../src/utils/file-comparison.ts"],"names":[],"mappings":"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"}