@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,74 @@
1
+ /**
2
+ * Merge strategy types.
3
+ */
4
+ export type MergeStrategy = 'union_arrays' | 'append' | 'replace' | 'manual' | 'skip';
5
+ /**
6
+ * Result of a merge operation.
7
+ */
8
+ export interface MergeResult {
9
+ success: boolean;
10
+ merged: string;
11
+ strategy: MergeStrategy;
12
+ changes: string[];
13
+ conflicts: string[];
14
+ }
15
+ /**
16
+ * Settings file structure (settings.local.json).
17
+ */
18
+ export interface SettingsFile {
19
+ permissions?: {
20
+ allow?: string[];
21
+ deny?: string[];
22
+ };
23
+ [key: string]: unknown;
24
+ }
25
+ /**
26
+ * Determine the merge strategy for a file based on its path.
27
+ */
28
+ export declare function getMergeStrategy(filePath: string): MergeStrategy;
29
+ /**
30
+ * Check if a file type supports automatic merging.
31
+ */
32
+ export declare function canAutoMerge(filePath: string): boolean;
33
+ /**
34
+ * Deduplicate an array while preserving order.
35
+ */
36
+ export declare function dedupeArray<T>(arr: T[]): T[];
37
+ /**
38
+ * Merge two settings files by unioning arrays and preserving user keys.
39
+ */
40
+ export declare function mergeSettings(existing: SettingsFile, template: SettingsFile): MergeResult;
41
+ /**
42
+ * Merge two JSON files with array union strategy.
43
+ */
44
+ export declare function mergeJson(existing: Record<string, unknown>, template: Record<string, unknown>): MergeResult;
45
+ /**
46
+ * Merge gitignore files by appending new entries.
47
+ */
48
+ export declare function mergeGitignore(existing: string, template: string): MergeResult;
49
+ /**
50
+ * Merge a file based on its type.
51
+ */
52
+ export declare function mergeFile(existingPath: string, templatePath: string): Promise<MergeResult>;
53
+ /**
54
+ * Preview what a merge would do without applying it.
55
+ */
56
+ export declare function previewMerge(existingPath: string, templatePath: string): Promise<{
57
+ strategy: MergeStrategy;
58
+ canAutoMerge: boolean;
59
+ changes: string[];
60
+ conflicts: string[];
61
+ }>;
62
+ /**
63
+ * Apply a merge result to a file.
64
+ */
65
+ export declare function applyMerge(filePath: string, result: MergeResult): Promise<boolean>;
66
+ /**
67
+ * Copy a new file from template.
68
+ */
69
+ export declare function copyNewFile(templatePath: string, targetPath: string): Promise<boolean>;
70
+ /**
71
+ * Format merge changes for display.
72
+ */
73
+ export declare function formatMergeChanges(result: MergeResult): string[];
74
+ //# sourceMappingURL=file-merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-merger.d.ts","sourceRoot":"","sources":["../../src/utils/file-merger.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,MAAM,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAqChE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,GAAG,WAAW,CA2DzF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAuB3G;AAiDD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAyC9E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAoEtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IACT,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC,CA6BD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAcxF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAkBhE"}
@@ -0,0 +1,350 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { logger } from './logger.js';
4
+ /**
5
+ * Determine the merge strategy for a file based on its path.
6
+ */
7
+ export function getMergeStrategy(filePath) {
8
+ const normalized = filePath.replace(/\\/g, '/').toLowerCase();
9
+ const basename = path.basename(normalized);
10
+ const ext = path.extname(normalized);
11
+ // Generated specialists - never touch
12
+ if (normalized.includes('.claude/agents/') && normalized.endsWith('-specialist.md')) {
13
+ return 'skip';
14
+ }
15
+ // Settings files - can merge arrays
16
+ if (basename === 'settings.local.json' || basename === 'settings.json') {
17
+ return 'union_arrays';
18
+ }
19
+ // Gitignore - append new entries
20
+ if (basename === '.gitignore') {
21
+ return 'append';
22
+ }
23
+ // Other JSON files - try union arrays
24
+ if (ext === '.json') {
25
+ return 'union_arrays';
26
+ }
27
+ // Markdown config files - manual merge needed
28
+ if (basename === 'archai.config.md') {
29
+ return 'manual';
30
+ }
31
+ // Core agent markdown files - manual merge
32
+ if (ext === '.md' && normalized.includes('.claude/agents/')) {
33
+ return 'manual';
34
+ }
35
+ // Default - replace
36
+ return 'replace';
37
+ }
38
+ /**
39
+ * Check if a file type supports automatic merging.
40
+ */
41
+ export function canAutoMerge(filePath) {
42
+ const strategy = getMergeStrategy(filePath);
43
+ return strategy === 'union_arrays' || strategy === 'append' || strategy === 'replace';
44
+ }
45
+ /**
46
+ * Deduplicate an array while preserving order.
47
+ */
48
+ export function dedupeArray(arr) {
49
+ return [...new Set(arr)];
50
+ }
51
+ /**
52
+ * Merge two settings files by unioning arrays and preserving user keys.
53
+ */
54
+ export function mergeSettings(existing, template) {
55
+ const changes = [];
56
+ const conflicts = [];
57
+ try {
58
+ // Start with existing as base
59
+ const merged = { ...existing };
60
+ // Merge permissions
61
+ if (template.permissions || existing.permissions) {
62
+ merged.permissions = merged.permissions || {};
63
+ // Merge allow arrays
64
+ const existingAllow = existing.permissions?.allow || [];
65
+ const templateAllow = template.permissions?.allow || [];
66
+ const mergedAllow = dedupeArray([...existingAllow, ...templateAllow]);
67
+ if (mergedAllow.length > existingAllow.length) {
68
+ const newAllows = templateAllow.filter(a => !existingAllow.includes(a));
69
+ changes.push(`Added ${newAllows.length} allow rules: ${newAllows.join(', ')}`);
70
+ }
71
+ merged.permissions.allow = mergedAllow;
72
+ // Merge deny arrays
73
+ const existingDeny = existing.permissions?.deny || [];
74
+ const templateDeny = template.permissions?.deny || [];
75
+ const mergedDeny = dedupeArray([...existingDeny, ...templateDeny]);
76
+ if (mergedDeny.length > existingDeny.length) {
77
+ const newDenies = templateDeny.filter(d => !existingDeny.includes(d));
78
+ changes.push(`Added ${newDenies.length} deny rules: ${newDenies.join(', ')}`);
79
+ }
80
+ merged.permissions.deny = mergedDeny;
81
+ }
82
+ // Add any new top-level keys from template that don't exist in existing
83
+ for (const [key, value] of Object.entries(template)) {
84
+ if (key !== 'permissions' && !(key in existing)) {
85
+ merged[key] = value;
86
+ changes.push(`Added new key: ${key}`);
87
+ }
88
+ }
89
+ return {
90
+ success: true,
91
+ merged: JSON.stringify(merged, null, 2),
92
+ strategy: 'union_arrays',
93
+ changes,
94
+ conflicts,
95
+ };
96
+ }
97
+ catch (error) {
98
+ return {
99
+ success: false,
100
+ merged: JSON.stringify(existing, null, 2),
101
+ strategy: 'union_arrays',
102
+ changes: [],
103
+ conflicts: [`Merge failed: ${error instanceof Error ? error.message : String(error)}`],
104
+ };
105
+ }
106
+ }
107
+ /**
108
+ * Merge two JSON files with array union strategy.
109
+ */
110
+ export function mergeJson(existing, template) {
111
+ const changes = [];
112
+ const conflicts = [];
113
+ try {
114
+ const merged = deepMerge(existing, template, changes);
115
+ return {
116
+ success: true,
117
+ merged: JSON.stringify(merged, null, 2),
118
+ strategy: 'union_arrays',
119
+ changes,
120
+ conflicts,
121
+ };
122
+ }
123
+ catch (error) {
124
+ return {
125
+ success: false,
126
+ merged: JSON.stringify(existing, null, 2),
127
+ strategy: 'union_arrays',
128
+ changes: [],
129
+ conflicts: [`Merge failed: ${error instanceof Error ? error.message : String(error)}`],
130
+ };
131
+ }
132
+ }
133
+ /**
134
+ * Deep merge two objects, unioning arrays.
135
+ */
136
+ function deepMerge(existing, template, changes, path = '') {
137
+ const result = { ...existing };
138
+ for (const [key, templateValue] of Object.entries(template)) {
139
+ const currentPath = path ? `${path}.${key}` : key;
140
+ const existingValue = existing[key];
141
+ if (!(key in existing)) {
142
+ // New key from template
143
+ result[key] = templateValue;
144
+ changes.push(`Added: ${currentPath}`);
145
+ }
146
+ else if (Array.isArray(templateValue) && Array.isArray(existingValue)) {
147
+ // Union arrays
148
+ const merged = dedupeArray([...existingValue, ...templateValue]);
149
+ if (merged.length > existingValue.length) {
150
+ changes.push(`Extended array: ${currentPath} (+${merged.length - existingValue.length} items)`);
151
+ }
152
+ result[key] = merged;
153
+ }
154
+ else if (typeof templateValue === 'object' &&
155
+ templateValue !== null &&
156
+ typeof existingValue === 'object' &&
157
+ existingValue !== null &&
158
+ !Array.isArray(templateValue)) {
159
+ // Recursively merge objects
160
+ result[key] = deepMerge(existingValue, templateValue, changes, currentPath);
161
+ }
162
+ // Otherwise keep existing value (user's value takes precedence)
163
+ }
164
+ return result;
165
+ }
166
+ /**
167
+ * Merge gitignore files by appending new entries.
168
+ */
169
+ export function mergeGitignore(existing, template) {
170
+ const changes = [];
171
+ // Parse existing entries (ignore comments and empty lines for comparison)
172
+ const existingLines = existing.split('\n').map(l => l.trim());
173
+ const existingEntries = new Set(existingLines.filter(l => l && !l.startsWith('#')));
174
+ // Parse template entries
175
+ const templateLines = template.split('\n').map(l => l.trim());
176
+ const templateEntries = templateLines.filter(l => l && !l.startsWith('#'));
177
+ // Find new entries
178
+ const newEntries = templateEntries.filter(e => !existingEntries.has(e));
179
+ if (newEntries.length === 0) {
180
+ return {
181
+ success: true,
182
+ merged: existing,
183
+ strategy: 'append',
184
+ changes: [],
185
+ conflicts: [],
186
+ };
187
+ }
188
+ // Append new entries with a section header
189
+ const mergedLines = [
190
+ existing.trimEnd(),
191
+ '',
192
+ '# Added by archai',
193
+ ...newEntries,
194
+ ];
195
+ changes.push(`Added ${newEntries.length} entries: ${newEntries.join(', ')}`);
196
+ return {
197
+ success: true,
198
+ merged: mergedLines.join('\n'),
199
+ strategy: 'append',
200
+ changes,
201
+ conflicts: [],
202
+ };
203
+ }
204
+ /**
205
+ * Merge a file based on its type.
206
+ */
207
+ export async function mergeFile(existingPath, templatePath) {
208
+ const strategy = getMergeStrategy(existingPath);
209
+ // Skip generated files
210
+ if (strategy === 'skip') {
211
+ return {
212
+ success: true,
213
+ merged: '',
214
+ strategy: 'skip',
215
+ changes: ['Skipped (generated file)'],
216
+ conflicts: [],
217
+ };
218
+ }
219
+ // Manual merge needed
220
+ if (strategy === 'manual') {
221
+ return {
222
+ success: false,
223
+ merged: '',
224
+ strategy: 'manual',
225
+ changes: [],
226
+ conflicts: ['Manual merge required'],
227
+ };
228
+ }
229
+ try {
230
+ const existingContent = await fs.readFile(existingPath, 'utf-8');
231
+ const templateContent = await fs.readFile(templatePath, 'utf-8');
232
+ // Handle different strategies
233
+ if (strategy === 'append') {
234
+ return mergeGitignore(existingContent, templateContent);
235
+ }
236
+ if (strategy === 'union_arrays') {
237
+ const basename = path.basename(existingPath).toLowerCase();
238
+ // Special handling for settings.local.json
239
+ if (basename === 'settings.local.json' || basename === 'settings.json') {
240
+ const existingJson = JSON.parse(existingContent);
241
+ const templateJson = JSON.parse(templateContent);
242
+ return mergeSettings(existingJson, templateJson);
243
+ }
244
+ // Generic JSON merge
245
+ const existingJson = JSON.parse(existingContent);
246
+ const templateJson = JSON.parse(templateContent);
247
+ return mergeJson(existingJson, templateJson);
248
+ }
249
+ // Replace strategy - just use template
250
+ return {
251
+ success: true,
252
+ merged: templateContent,
253
+ strategy: 'replace',
254
+ changes: ['Replaced with template'],
255
+ conflicts: [],
256
+ };
257
+ }
258
+ catch (error) {
259
+ logger.debug(`Merge failed for ${existingPath}`, error);
260
+ return {
261
+ success: false,
262
+ merged: '',
263
+ strategy,
264
+ changes: [],
265
+ conflicts: [`Failed to merge: ${error instanceof Error ? error.message : String(error)}`],
266
+ };
267
+ }
268
+ }
269
+ /**
270
+ * Preview what a merge would do without applying it.
271
+ */
272
+ export async function previewMerge(existingPath, templatePath) {
273
+ const strategy = getMergeStrategy(existingPath);
274
+ if (strategy === 'skip') {
275
+ return {
276
+ strategy,
277
+ canAutoMerge: false,
278
+ changes: ['Will skip (generated file)'],
279
+ conflicts: [],
280
+ };
281
+ }
282
+ if (strategy === 'manual') {
283
+ return {
284
+ strategy,
285
+ canAutoMerge: false,
286
+ changes: [],
287
+ conflicts: ['Requires manual merge'],
288
+ };
289
+ }
290
+ const result = await mergeFile(existingPath, templatePath);
291
+ return {
292
+ strategy: result.strategy,
293
+ canAutoMerge: result.success,
294
+ changes: result.changes,
295
+ conflicts: result.conflicts,
296
+ };
297
+ }
298
+ /**
299
+ * Apply a merge result to a file.
300
+ */
301
+ export async function applyMerge(filePath, result) {
302
+ if (!result.success || result.strategy === 'skip' || result.strategy === 'manual') {
303
+ return false;
304
+ }
305
+ try {
306
+ await fs.ensureDir(path.dirname(filePath));
307
+ await fs.writeFile(filePath, result.merged, 'utf-8');
308
+ logger.debug(`Applied merge to ${filePath}`);
309
+ return true;
310
+ }
311
+ catch (error) {
312
+ logger.debug(`Failed to apply merge to ${filePath}`, error);
313
+ return false;
314
+ }
315
+ }
316
+ /**
317
+ * Copy a new file from template.
318
+ */
319
+ export async function copyNewFile(templatePath, targetPath) {
320
+ try {
321
+ await fs.ensureDir(path.dirname(targetPath));
322
+ await fs.copy(templatePath, targetPath);
323
+ logger.debug(`Copied new file: ${targetPath}`);
324
+ return true;
325
+ }
326
+ catch (error) {
327
+ logger.debug(`Failed to copy ${templatePath} to ${targetPath}`, error);
328
+ return false;
329
+ }
330
+ }
331
+ /**
332
+ * Format merge changes for display.
333
+ */
334
+ export function formatMergeChanges(result) {
335
+ const lines = [];
336
+ if (result.changes.length > 0) {
337
+ lines.push('Changes:');
338
+ for (const change of result.changes) {
339
+ lines.push(` + ${change}`);
340
+ }
341
+ }
342
+ if (result.conflicts.length > 0) {
343
+ lines.push('Conflicts:');
344
+ for (const conflict of result.conflicts) {
345
+ lines.push(` ! ${conflict}`);
346
+ }
347
+ }
348
+ return lines;
349
+ }
350
+ //# sourceMappingURL=file-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-merger.js","sourceRoot":"","sources":["../../src/utils/file-merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export declare const logger: {
2
+ /**
3
+ * Enable or disable debug mode for verbose logging.
4
+ */
5
+ setDebugMode(enabled: boolean): void;
6
+ /**
7
+ * Check if debug mode is enabled.
8
+ */
9
+ isDebugMode(): boolean;
10
+ /**
11
+ * Get the current version from package.json.
12
+ */
13
+ getVersion(): string;
14
+ banner(): void;
15
+ section(title: string): void;
16
+ divider(): void;
17
+ success(message: string): void;
18
+ error(message: string): void;
19
+ warn(message: string): void;
20
+ info(message: string): void;
21
+ /**
22
+ * Log debug information. Only outputs when debug mode is enabled.
23
+ */
24
+ debug(message: string, data?: unknown): void;
25
+ };
26
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM;IACjB;;OAEG;0BACmB,OAAO;IAI7B;;OAEG;mBACY,OAAO;IAItB;;OAEG;kBACW,MAAM;;mBAkBL,MAAM;;qBAQJ,MAAM;mBAIR,MAAM;kBAIP,MAAM;kBAIN,MAAM;IAIpB;;OAEG;mBACY,MAAM,SAAS,OAAO;CAYtC,CAAC"}
@@ -0,0 +1,72 @@
1
+ import chalk from 'chalk';
2
+ import { createRequire } from 'module';
3
+ const require = createRequire(import.meta.url);
4
+ const pkg = require('../../package.json');
5
+ let debugMode = false;
6
+ export const logger = {
7
+ /**
8
+ * Enable or disable debug mode for verbose logging.
9
+ */
10
+ setDebugMode(enabled) {
11
+ debugMode = enabled;
12
+ },
13
+ /**
14
+ * Check if debug mode is enabled.
15
+ */
16
+ isDebugMode() {
17
+ return debugMode;
18
+ },
19
+ /**
20
+ * Get the current version from package.json.
21
+ */
22
+ getVersion() {
23
+ return pkg.version;
24
+ },
25
+ banner() {
26
+ const version = pkg.version;
27
+ const versionStr = `archai v${version}`;
28
+ const padding = Math.max(0, 37 - versionStr.length - 11);
29
+ const paddedVersion = ' '.repeat(11) + versionStr + ' '.repeat(padding);
30
+ console.log('');
31
+ console.log(chalk.cyan.bold(' ╔═══════════════════════════════════════╗'));
32
+ console.log(chalk.cyan.bold(' ║') + chalk.white.bold(paddedVersion) + chalk.cyan.bold('║'));
33
+ console.log(chalk.cyan.bold(' ║') + chalk.gray(' Multi-Agent Development Workflow ') + chalk.cyan.bold('║'));
34
+ console.log(chalk.cyan.bold(' ╚═══════════════════════════════════════╝'));
35
+ console.log('');
36
+ },
37
+ section(title) {
38
+ console.log(chalk.cyan.bold(`━━━ ${title} ━━━`));
39
+ },
40
+ divider() {
41
+ console.log(chalk.gray('━'.repeat(50)));
42
+ },
43
+ success(message) {
44
+ console.log(chalk.green.bold('✓ ' + message));
45
+ },
46
+ error(message) {
47
+ console.log(chalk.red.bold('✗ ' + message));
48
+ },
49
+ warn(message) {
50
+ console.log(chalk.yellow('⚠ ' + message));
51
+ },
52
+ info(message) {
53
+ console.log(chalk.blue('ℹ ' + message));
54
+ },
55
+ /**
56
+ * Log debug information. Only outputs when debug mode is enabled.
57
+ */
58
+ debug(message, data) {
59
+ if (debugMode) {
60
+ console.log(chalk.gray(`[DEBUG] ${message}`));
61
+ if (data !== undefined) {
62
+ if (typeof data === 'object') {
63
+ console.log(chalk.gray(JSON.stringify(data, null, 2)));
64
+ }
65
+ else {
66
+ console.log(chalk.gray(String(data)));
67
+ }
68
+ }
69
+ }
70
+ },
71
+ };
72
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { Readable } from 'stream';
3
+ import type { ManagedProcessOpts, CompletionResult, ExitResult, HealthReport, ProcessStateData, KillResult } from '../types/index.js';
4
+ export interface RegistryHook {
5
+ register: (mp: ManagedProcess) => void;
6
+ unregister: (id: string) => void;
7
+ }
8
+ export declare function setRegistryHook(hook: RegistryHook | null): void;
9
+ /**
10
+ * Build a clean environment for the child process.
11
+ * Removes Claude Code internal env vars that cause hangs when leaked.
12
+ */
13
+ export declare function buildCleanEnv(): NodeJS.ProcessEnv;
14
+ /**
15
+ * Monitors stdout for stream-json formatted output.
16
+ * Parses JSON lines, detects result events, accumulates assistant text.
17
+ */
18
+ export declare class StreamJsonMonitor {
19
+ private _assistantText;
20
+ private _rawLines;
21
+ private _resultCount;
22
+ private _eventCount;
23
+ private _lastEventTime;
24
+ private _rl;
25
+ readonly resultPromise: Promise<unknown>;
26
+ constructor(stdout: Readable);
27
+ getTextOutput(): string;
28
+ getLastEventTime(): number | null;
29
+ getEventCount(): number;
30
+ destroy(): void;
31
+ }
32
+ /**
33
+ * No-op monitor for passthrough stdout mode.
34
+ * resultPromise never resolves.
35
+ */
36
+ export declare class PassthroughMonitor {
37
+ readonly resultPromise: Promise<never>;
38
+ constructor(_stdout: Readable);
39
+ getTextOutput(): string;
40
+ getLastEventTime(): number | null;
41
+ getEventCount(): number;
42
+ destroy(): void;
43
+ }
44
+ /**
45
+ * Manages state files for ManagedProcess instances.
46
+ * Uses atomic writes (write .tmp then renameSync).
47
+ */
48
+ export declare class ProcessStateManager {
49
+ private _data;
50
+ private _filePath;
51
+ private _stateDir;
52
+ constructor(stateDir: string, id: string);
53
+ update(patch: Partial<ProcessStateData>): void;
54
+ getData(): Partial<ProcessStateData>;
55
+ static readAll(stateDir: string): ProcessStateData[];
56
+ static readOne(id: string, stateDir: string): ProcessStateData | null;
57
+ static pruneStale(stateDir: string): void;
58
+ }
59
+ /**
60
+ * Unified process lifecycle abstraction.
61
+ * Wraps child_process.spawn() with intrinsic monitoring:
62
+ * state files, stream-json sentinel, lifecycle guards, process tree snapshots.
63
+ */
64
+ export declare class ManagedProcess extends EventEmitter {
65
+ private _child;
66
+ private _opts;
67
+ private _monitor;
68
+ private _stateManager;
69
+ private _cleanups;
70
+ private _killing;
71
+ private _timedOut;
72
+ private _parentDied;
73
+ private _startTime;
74
+ private _state;
75
+ readonly completion: Promise<CompletionResult>;
76
+ readonly exit: Promise<ExitResult>;
77
+ readonly pid: number;
78
+ private constructor();
79
+ /**
80
+ * Spawn a managed process. Factory method.
81
+ */
82
+ static spawn(opts: ManagedProcessOpts): ManagedProcess;
83
+ /**
84
+ * Get the process ID string (task identifier).
85
+ */
86
+ get id(): string;
87
+ /**
88
+ * Get current state.
89
+ */
90
+ get state(): ProcessStateData['state'];
91
+ /**
92
+ * Kill the process tree. Public async API.
93
+ */
94
+ kill(): Promise<KillResult>;
95
+ /**
96
+ * Get health report.
97
+ */
98
+ health(): HealthReport;
99
+ private _updateState;
100
+ private _setupGuards;
101
+ private _activateZombieGuard;
102
+ private _cleanupGuards;
103
+ private _killTree;
104
+ private _onSignal;
105
+ private _onTimeout;
106
+ private _onParentDeath;
107
+ private _takeTreeSnapshot;
108
+ }
109
+ //# sourceMappingURL=managed-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-process.d.ts","sourceRoot":"","sources":["../../src/utils/managed-process.ts"],"names":[],"mappings":"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"}