@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,72 @@
1
+ import fs from "fs-extra";
2
+ import { logger } from "./logger.js";
3
+ /**
4
+ * Build the CI/CD section content for archai.config.md.
5
+ */
6
+ function buildCISection(result) {
7
+ if (result.provider === "none") {
8
+ return `## CI/CD\n\nNo CI provider detected. Run \`archai setup --ci\` after configuring your CI pipeline.\n`;
9
+ }
10
+ const config = result.config;
11
+ return `## CI/CD\n\n**CI Provider:** ${config.provider}\n**Auth Method:** ${config.authMethod}\n**Timeout:** ${config.timeout}\n**Detected Via:** ${result.detectedVia}\n`;
12
+ }
13
+ /**
14
+ * Update archai.config.md with a CI/CD section.
15
+ * If the section already exists, replaces it. Otherwise inserts before ## Notes.
16
+ */
17
+ export async function updateConfigWithCI(result) {
18
+ const configPath = "archai.config.md";
19
+ if (!(await fs.pathExists(configPath))) {
20
+ logger.warn("archai.config.md not found. Run `archai init` first.");
21
+ return;
22
+ }
23
+ let content = await fs.readFile(configPath, "utf-8");
24
+ const ciSection = buildCISection(result);
25
+ // Strategy 1: Replace existing ## CI/CD section
26
+ const sectionRegex = /## CI\/CD[\s\S]*?(?=\n---\n|\n## |$)/;
27
+ if (sectionRegex.test(content)) {
28
+ content = content.replace(sectionRegex, ciSection.trimEnd());
29
+ logger.debug("Replaced existing CI/CD section");
30
+ }
31
+ else {
32
+ // Strategy 2: Replace the setup --ci placeholder
33
+ const placeholderRegex = /\[Run.*archai setup --ci.*to auto-configure\]/;
34
+ if (placeholderRegex.test(content)) {
35
+ // Replace the entire CI/CD section header + placeholder
36
+ const fullPlaceholderRegex = /## CI\/CD[\s\S]*?\[Run.*archai setup --ci.*to auto-configure\]/;
37
+ if (fullPlaceholderRegex.test(content)) {
38
+ content = content.replace(fullPlaceholderRegex, ciSection.trimEnd());
39
+ }
40
+ else {
41
+ content = content.replace(placeholderRegex, ciSection.trimEnd());
42
+ }
43
+ logger.debug("Replaced CI/CD placeholder");
44
+ }
45
+ else {
46
+ // Strategy 3: Insert before ## Notes
47
+ const notesIndex = content.indexOf("## Notes");
48
+ if (notesIndex !== -1) {
49
+ const beforeNotes = content.lastIndexOf("---", notesIndex);
50
+ if (beforeNotes !== -1) {
51
+ content = content.slice(0, beforeNotes) +
52
+ "---\n\n" + ciSection + "\n" +
53
+ content.slice(beforeNotes);
54
+ }
55
+ else {
56
+ content = content.slice(0, notesIndex) +
57
+ ciSection + "\n---\n\n" +
58
+ content.slice(notesIndex);
59
+ }
60
+ }
61
+ else {
62
+ // Append at end
63
+ if (!content.endsWith("\n"))
64
+ content += "\n";
65
+ content += "\n---\n\n" + ciSection;
66
+ }
67
+ logger.debug("Inserted new CI/CD section");
68
+ }
69
+ }
70
+ await fs.writeFile(configPath, content);
71
+ }
72
+ //# sourceMappingURL=update-config-ci.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-config-ci.js","sourceRoot":"","sources":["../../src/utils/update-config-ci.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { GitConfig, GitPatterns } from '../types/index.js';
2
+ /**
3
+ * Update archai.config.md with a Git Configuration section.
4
+ * If the section already exists, replaces it. Otherwise inserts before ## Notes.
5
+ */
6
+ export declare function updateConfigWithGit(gitConfig: GitConfig): Promise<void>;
7
+ /**
8
+ * Update archai.config.md with a Git Conventions section.
9
+ * Returns true if the section was written, false if skipped.
10
+ *
11
+ * Behavior:
12
+ * - force=true (setup): always replaces existing section
13
+ * - force=false (update): only writes if section is missing or contains placeholder text
14
+ */
15
+ export declare function updateConfigWithGitConventions(patterns: GitPatterns, options?: {
16
+ force?: boolean;
17
+ }): Promise<boolean>;
18
+ //# sourceMappingURL=update-config-git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-config-git.d.ts","sourceRoot":"","sources":["../../src/utils/update-config-git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD7E;AAwBD;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiElB"}
@@ -0,0 +1,146 @@
1
+ import fs from 'fs-extra';
2
+ import { logger } from './logger.js';
3
+ /**
4
+ * Update archai.config.md with a Git Configuration section.
5
+ * If the section already exists, replaces it. Otherwise inserts before ## Notes.
6
+ */
7
+ export async function updateConfigWithGit(gitConfig) {
8
+ const configPath = 'archai.config.md';
9
+ if (!await fs.pathExists(configPath)) {
10
+ logger.warn('archai.config.md not found. Run `archai init` first.');
11
+ return;
12
+ }
13
+ let content = await fs.readFile(configPath, 'utf-8');
14
+ const remoteDisplay = gitConfig.remote && gitConfig.remoteUrl
15
+ ? `${gitConfig.remote} (${gitConfig.remoteUrl})`
16
+ : 'none configured';
17
+ const gitSection = `## Git Configuration
18
+
19
+ **Default Branch:** ${gitConfig.defaultBranch}
20
+ **Remote:** ${remoteDisplay}
21
+ **Branch Convention:** ${gitConfig.branchConvention}
22
+ `;
23
+ // Check if section already exists
24
+ const sectionRegex = /## Git Configuration\n[\s\S]*?(?=\n## |\n---\n## |$)/;
25
+ if (sectionRegex.test(content)) {
26
+ // Replace existing section
27
+ content = content.replace(sectionRegex, gitSection.trimEnd());
28
+ logger.debug('Replaced existing Git Configuration section');
29
+ }
30
+ else {
31
+ // Insert before ## Notes section, or before the final ---\n\n## Notes
32
+ const notesIndex = content.indexOf('## Notes');
33
+ if (notesIndex !== -1) {
34
+ // Find the --- before ## Notes
35
+ const beforeNotes = content.lastIndexOf('---', notesIndex);
36
+ if (beforeNotes !== -1) {
37
+ content = content.slice(0, beforeNotes) +
38
+ '---\n\n' + gitSection + '\n' +
39
+ content.slice(beforeNotes);
40
+ }
41
+ else {
42
+ content = content.slice(0, notesIndex) +
43
+ gitSection + '\n---\n\n' +
44
+ content.slice(notesIndex);
45
+ }
46
+ }
47
+ else {
48
+ // Append at end
49
+ if (!content.endsWith('\n'))
50
+ content += '\n';
51
+ content += '\n---\n\n' + gitSection;
52
+ }
53
+ logger.debug('Inserted new Git Configuration section');
54
+ }
55
+ await fs.writeFile(configPath, content);
56
+ }
57
+ /**
58
+ * Build the markdown section content for Git Conventions.
59
+ */
60
+ function buildGitConventionsSection(patterns) {
61
+ const prefixList = patterns.detectedPrefixes.length > 0
62
+ ? patterns.detectedPrefixes.join(', ')
63
+ : 'none';
64
+ const prPlatform = patterns.prPlatform || 'none';
65
+ const usesPRs = patterns.usesPullRequests ? 'Yes' : 'No';
66
+ return `## Git Conventions
67
+
68
+ **Branch Convention:** ${patterns.agentBranchConvention}
69
+ **Target Branch:** ${patterns.targetBranch}
70
+ **Merge Strategy:** ${patterns.mergeStrategy}
71
+ **Uses PRs/MRs:** ${usesPRs}
72
+ **PR Platform:** ${prPlatform}
73
+ **Detected Prefixes:** ${prefixList}
74
+ **Branches Analyzed:** ${patterns.branchesAnalyzed}
75
+ **Merge Commits Analyzed:** ${patterns.mergeCommitsAnalyzed}`;
76
+ }
77
+ /**
78
+ * Update archai.config.md with a Git Conventions section.
79
+ * Returns true if the section was written, false if skipped.
80
+ *
81
+ * Behavior:
82
+ * - force=true (setup): always replaces existing section
83
+ * - force=false (update): only writes if section is missing or contains placeholder text
84
+ */
85
+ export async function updateConfigWithGitConventions(patterns, options) {
86
+ const configPath = 'archai.config.md';
87
+ const force = options?.force ?? false;
88
+ if (!await fs.pathExists(configPath)) {
89
+ logger.warn('archai.config.md not found. Run archai init first.');
90
+ return false;
91
+ }
92
+ let content = await fs.readFile(configPath, 'utf-8');
93
+ const sectionRegex = /## Git Conventions\n[\s\S]*?(?=\n---\n|\n## |$)/;
94
+ const existingSection = content.match(sectionRegex);
95
+ if (existingSection) {
96
+ // Section exists
97
+ const sectionContent = existingSection[0];
98
+ const isPlaceholder = /\[Run.*archai setup.*to auto-configure\]/.test(sectionContent);
99
+ if (!force && !isPlaceholder) {
100
+ // Non-force mode and section has real content -- preserve user edits
101
+ logger.debug('Git Conventions section already configured, skipping');
102
+ return false;
103
+ }
104
+ // Replace existing section
105
+ const newSection = buildGitConventionsSection(patterns);
106
+ content = content.replace(sectionRegex, newSection.trimEnd());
107
+ logger.debug('Replaced existing Git Conventions section');
108
+ }
109
+ else {
110
+ // Section does not exist -- insert it
111
+ const newSection = buildGitConventionsSection(patterns);
112
+ // Find insertion point: before ## CI/CD, ## MCP Servers, or ## Notes
113
+ let insertBefore = -1;
114
+ for (const marker of ['## CI/CD', '## MCP Servers', '## Notes']) {
115
+ const idx = content.indexOf(marker);
116
+ if (idx !== -1) {
117
+ insertBefore = idx;
118
+ break;
119
+ }
120
+ }
121
+ if (insertBefore !== -1) {
122
+ // Find the --- before the insertion point
123
+ const beforeSep = content.lastIndexOf('---', insertBefore);
124
+ if (beforeSep !== -1) {
125
+ content = content.slice(0, beforeSep) +
126
+ '---\n' + newSection + '\n\n' +
127
+ content.slice(beforeSep);
128
+ }
129
+ else {
130
+ content = content.slice(0, insertBefore) +
131
+ newSection + '\n\n---\n\n' +
132
+ content.slice(insertBefore);
133
+ }
134
+ }
135
+ else {
136
+ // Append at end
137
+ if (!content.endsWith('\n'))
138
+ content += '\n';
139
+ content += '\n---\n' + newSection + '\n';
140
+ }
141
+ logger.debug('Inserted new Git Conventions section');
142
+ }
143
+ await fs.writeFile(configPath, content);
144
+ return true;
145
+ }
146
+ //# sourceMappingURL=update-config-git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-config-git.js","sourceRoot":"","sources":["../../src/utils/update-config-git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpConfig } from '../types/index.js';
2
+ /**
3
+ * Update archai.config.md with MCP server configuration.
4
+ * Replaces the existing MCP section or [TODO] placeholder.
5
+ */
6
+ export declare function updateConfigWithMcp(config: McpConfig): Promise<void>;
7
+ //# sourceMappingURL=update-config-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-config-mcp.d.ts","sourceRoot":"","sources":["../../src/utils/update-config-mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D1E"}
@@ -0,0 +1,98 @@
1
+ import fs from 'fs-extra';
2
+ import { logger } from './logger.js';
3
+ /**
4
+ * Update archai.config.md with MCP server configuration.
5
+ * Replaces the existing MCP section or [TODO] placeholder.
6
+ */
7
+ export async function updateConfigWithMcp(config) {
8
+ const configPath = 'archai.config.md';
9
+ if (!await fs.pathExists(configPath)) {
10
+ logger.warn('archai.config.md not found. Run `archai init` first.');
11
+ return;
12
+ }
13
+ let content = await fs.readFile(configPath, 'utf-8');
14
+ const mcpSection = buildMcpSection(config);
15
+ // Try to replace existing MCP section
16
+ // Match "## MCP Servers & Skills" up to the next "---" separator or end of file
17
+ const sectionRegex = /## MCP Servers & Skills[\s\S]*?(?=\n---\n|$)/;
18
+ if (sectionRegex.test(content)) {
19
+ content = content.replace(sectionRegex, mcpSection.trimEnd());
20
+ logger.debug('Replaced existing MCP Servers & Skills section');
21
+ }
22
+ else {
23
+ // Try to find and replace [TODO: Configure MCP servers if needed]
24
+ const todoIndex = content.indexOf('[TODO: Configure MCP servers if needed]');
25
+ if (todoIndex !== -1) {
26
+ content = content.replace('[TODO: Configure MCP servers if needed]', mcpSection.trimEnd());
27
+ logger.debug('Replaced MCP TODO placeholder');
28
+ }
29
+ else {
30
+ // Try to find the archai setup --mcp placeholder
31
+ const setupPlaceholder = content.indexOf('[Run `archai setup --mcp` to auto-configure]');
32
+ if (setupPlaceholder !== -1) {
33
+ // Find the section header before it
34
+ const headerBefore = content.lastIndexOf('## MCP Servers & Skills', setupPlaceholder);
35
+ if (headerBefore !== -1) {
36
+ // Replace from header to just after the placeholder line
37
+ const placeholderEnd = content.indexOf('\n', setupPlaceholder);
38
+ const endIndex = placeholderEnd !== -1 ? placeholderEnd : content.length;
39
+ // Also capture any comment block between header and placeholder
40
+ content = content.slice(0, headerBefore) + mcpSection.trimEnd() + content.slice(endIndex);
41
+ logger.debug('Replaced MCP setup placeholder section');
42
+ }
43
+ }
44
+ else {
45
+ // Insert before ## Notes or append
46
+ const notesIndex = content.indexOf('## Notes');
47
+ if (notesIndex !== -1) {
48
+ const beforeNotes = content.lastIndexOf('---', notesIndex);
49
+ if (beforeNotes !== -1) {
50
+ content = content.slice(0, beforeNotes) +
51
+ '---\n\n' + mcpSection + '\n' +
52
+ content.slice(beforeNotes);
53
+ }
54
+ else {
55
+ content = content.slice(0, notesIndex) +
56
+ mcpSection + '\n---\n\n' +
57
+ content.slice(notesIndex);
58
+ }
59
+ }
60
+ else {
61
+ if (!content.endsWith('\n'))
62
+ content += '\n';
63
+ content += '\n---\n\n' + mcpSection;
64
+ }
65
+ logger.debug('Inserted new MCP Servers & Skills section');
66
+ }
67
+ }
68
+ }
69
+ await fs.writeFile(configPath, content);
70
+ }
71
+ /**
72
+ * Build the MCP section markdown string.
73
+ */
74
+ function buildMcpSection(config) {
75
+ const lines = ['## MCP Servers & Skills', ''];
76
+ if (config.taskManager) {
77
+ const tm = config.taskManager;
78
+ lines.push(`### Task Manager: ${tm.provider}`);
79
+ lines.push(`- **Provider:** ${tm.provider}`);
80
+ lines.push(`- **Board:** ${tm.board.name} (ID: ${tm.board.id})`);
81
+ lines.push(`- **Mapping:** Epic → ${tm.mapping.epic}, Task → ${tm.mapping.task}, Subtask → ${tm.mapping.subtask}`);
82
+ lines.push(`- **Status Flow:** ${tm.mapping.statuses.join(' → ')}`);
83
+ lines.push('');
84
+ }
85
+ if (config.otherServers.length > 0) {
86
+ lines.push('### Other MCP Servers');
87
+ for (const server of config.otherServers) {
88
+ lines.push(`- ${server.name} (${server.status})`);
89
+ }
90
+ lines.push('');
91
+ }
92
+ if (!config.taskManager && config.otherServers.length === 0) {
93
+ lines.push('[No MCP servers configured. Run `archai setup --mcp` to detect and configure.]');
94
+ lines.push('');
95
+ }
96
+ return lines.join('\n');
97
+ }
98
+ //# sourceMappingURL=update-config-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-config-mcp.js","sourceRoot":"","sources":["../../src/utils/update-config-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ValidationResult } from '../types/index.js';
2
+ export declare function validateConfig(): Promise<ValidationResult>;
3
+ //# sourceMappingURL=validate-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/utils/validate-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAuChE"}
@@ -0,0 +1,109 @@
1
+ import fs from 'fs-extra';
2
+ export async function validateConfig() {
3
+ const errors = [];
4
+ // Read config file
5
+ let configContent;
6
+ try {
7
+ configContent = await fs.readFile('archai.config.md', 'utf-8');
8
+ }
9
+ catch {
10
+ return {
11
+ valid: false,
12
+ errors: ['Could not read archai.config.md'],
13
+ config: {},
14
+ };
15
+ }
16
+ // Parse markdown config
17
+ const config = parseMarkdownConfig(configContent);
18
+ // Validate required fields
19
+ if (!config.projectName || config.projectName === '[TODO') {
20
+ errors.push('Project name is required');
21
+ }
22
+ if (!config.projectType || config.projectType.includes('[TODO')) {
23
+ errors.push('Project type is required (edit archai.config.md)');
24
+ }
25
+ if (!config.languages || config.languages.includes('[TODO')) {
26
+ errors.push('Languages are required (edit archai.config.md)');
27
+ }
28
+ // Parse specialists from markdown
29
+ config.specialists = parseSpecialists(configContent);
30
+ return {
31
+ valid: errors.length === 0,
32
+ errors,
33
+ config,
34
+ };
35
+ }
36
+ function parseMarkdownConfig(content) {
37
+ const config = {
38
+ projectName: '',
39
+ projectType: '',
40
+ languages: '',
41
+ frameworks: '',
42
+ testing: '',
43
+ packageManager: '',
44
+ specialists: [],
45
+ rawContent: content,
46
+ };
47
+ // Extract values using regex patterns
48
+ const nameMatch = content.match(/\*\*Name:\*\*\s*(.+)/);
49
+ if (nameMatch)
50
+ config.projectName = nameMatch[1].trim();
51
+ const typeMatch = content.match(/\*\*Type:\*\*\s*(.+)/);
52
+ if (typeMatch)
53
+ config.projectType = typeMatch[1].trim();
54
+ const langMatch = content.match(/\*\*Languages:\*\*\s*(.+)/);
55
+ if (langMatch)
56
+ config.languages = langMatch[1].trim();
57
+ const frameworkMatch = content.match(/\*\*Frameworks:\*\*\s*(.+)/);
58
+ if (frameworkMatch)
59
+ config.frameworks = frameworkMatch[1].trim();
60
+ const testMatch = content.match(/\*\*Testing:\*\*\s*(.+)/);
61
+ if (testMatch)
62
+ config.testing = testMatch[1].trim();
63
+ const pmMatch = content.match(/\*\*Package Manager:\*\*\s*(.+)/);
64
+ if (pmMatch)
65
+ config.packageManager = pmMatch[1].trim();
66
+ return config;
67
+ }
68
+ function parseSpecialists(content) {
69
+ const specialists = [];
70
+ // Find the Specialists section - look for the header and capture until next ## header or ---
71
+ const specialistsSection = content.match(/## Specialists to Generate[\s\S]*?(?=\n---|\n## [A-Z]|$)/);
72
+ if (!specialistsSection)
73
+ return specialists;
74
+ const sectionContent = specialistsSection[0];
75
+ // Match each specialist (### 1. Name, ### 2. Name, etc.)
76
+ // Use a more flexible pattern that captures until next ### or end of section
77
+ const specialistPattern = /###\s*\d+\.\s*([^\n]+)\n([\s\S]*?)(?=\n###\s*\d+\.|\n---|\n## |$)/g;
78
+ const specialistMatches = sectionContent.matchAll(specialistPattern);
79
+ for (const match of specialistMatches) {
80
+ const name = match[1].trim();
81
+ const details = match[2];
82
+ // Skip placeholder entries
83
+ if (name.includes('[TODO') || name.includes('[Add more'))
84
+ continue;
85
+ // Extract focus
86
+ const focusMatch = details.match(/\*\*Focus:\*\*\s*(.+)/);
87
+ const focus = focusMatch ? focusMatch[1].trim() : '';
88
+ // Skip if focus is empty or placeholder
89
+ if (!focus || focus.includes('['))
90
+ continue;
91
+ // Extract key concerns
92
+ const key_concerns = [];
93
+ const concernsMatch = details.match(/\*\*Key Concerns:\*\*([\s\S]*?)(?=\n\n|\n###|\n---|$)/);
94
+ if (concernsMatch) {
95
+ const concernLines = concernsMatch[1].match(/^-\s*(.+)/gm);
96
+ if (concernLines) {
97
+ concernLines.forEach(line => {
98
+ const concern = line.replace(/^-\s*/, '').trim();
99
+ if (concern && !concern.includes('[')) {
100
+ key_concerns.push(concern);
101
+ }
102
+ });
103
+ }
104
+ }
105
+ specialists.push({ name, focus, key_concerns });
106
+ }
107
+ return specialists;
108
+ }
109
+ //# sourceMappingURL=validate-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../src/utils/validate-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Schema version for the version.json file format.
3
+ */
4
+ export declare const CURRENT_SCHEMA_VERSION = 1;
5
+ /**
6
+ * Default filename for the version tracking file.
7
+ */
8
+ export declare const VERSION_FILE = "version.json";
9
+ /**
10
+ * Record of a single tracked file.
11
+ */
12
+ export interface FileRecord {
13
+ baseHash: string | null;
14
+ isGenerated: boolean;
15
+ }
16
+ /**
17
+ * Complete version tracking data.
18
+ */
19
+ export interface VersionFile {
20
+ schemaVersion: number;
21
+ archai: string;
22
+ installedAt: string;
23
+ lastUpdated: string;
24
+ files: Record<string, FileRecord>;
25
+ expectedFiles: string[];
26
+ }
27
+ /**
28
+ * Get the version file path for a given .claude directory.
29
+ */
30
+ export declare function getVersionFilePath(claudeDir: string): string;
31
+ /**
32
+ * Load version file from disk.
33
+ * Returns null if file doesn't exist or is invalid.
34
+ */
35
+ export declare function loadVersionFile(claudeDir: string): Promise<VersionFile | null>;
36
+ /**
37
+ * Save version file to disk.
38
+ */
39
+ export declare function saveVersionFile(claudeDir: string, data: VersionFile): Promise<boolean>;
40
+ /**
41
+ * Create a new version file with initial values.
42
+ */
43
+ export declare function createVersionFile(archaiVersion: string, files?: Record<string, FileRecord>, expectedFiles?: string[]): VersionFile;
44
+ /**
45
+ * Update the version file with a new archai version.
46
+ */
47
+ export declare function updateVersionInfo(versionFile: VersionFile, archaiVersion: string): VersionFile;
48
+ /**
49
+ * Update or add a file hash in the version data.
50
+ * Normalizes path separators for cross-platform compatibility.
51
+ */
52
+ export declare function updateFileHash(versionFile: VersionFile, filePath: string, hash: string | null, isGenerated?: boolean): VersionFile;
53
+ /**
54
+ * Mark a file as generated (will not be modified by updates).
55
+ */
56
+ export declare function markAsGenerated(versionFile: VersionFile, filePath: string): VersionFile;
57
+ /**
58
+ * Remove a file from tracking.
59
+ */
60
+ export declare function removeFile(versionFile: VersionFile, filePath: string): VersionFile;
61
+ /**
62
+ * Get the file record for a specific path.
63
+ */
64
+ export declare function getFileRecord(versionFile: VersionFile, filePath: string): FileRecord | null;
65
+ /**
66
+ * Get the base hash for a file.
67
+ */
68
+ export declare function getBaseHash(versionFile: VersionFile, filePath: string): string | null;
69
+ /**
70
+ * Check if a file is marked as generated.
71
+ */
72
+ export declare function isFileGenerated(versionFile: VersionFile, filePath: string): boolean;
73
+ /**
74
+ * Get list of all tracked files.
75
+ */
76
+ export declare function getTrackedFiles(versionFile: VersionFile): string[];
77
+ /**
78
+ * Get list of expected files (files archai should manage).
79
+ */
80
+ export declare function getExpectedFiles(versionFile: VersionFile): string[];
81
+ /**
82
+ * Update the expected files list.
83
+ */
84
+ export declare function setExpectedFiles(versionFile: VersionFile, expectedFiles: string[]): VersionFile;
85
+ /**
86
+ * Add a file to the expected files list.
87
+ */
88
+ export declare function addExpectedFile(versionFile: VersionFile, filePath: string): VersionFile;
89
+ /**
90
+ * Remove a file from the expected files list.
91
+ */
92
+ export declare function removeExpectedFile(versionFile: VersionFile, filePath: string): VersionFile;
93
+ /**
94
+ * Get files that are expected but not tracked.
95
+ */
96
+ export declare function getMissingFiles(versionFile: VersionFile): string[];
97
+ /**
98
+ * Get files that are tracked but not expected (orphaned).
99
+ */
100
+ export declare function getOrphanedFiles(versionFile: VersionFile): string[];
101
+ /**
102
+ * Get all generated files.
103
+ */
104
+ export declare function getGeneratedFiles(versionFile: VersionFile): string[];
105
+ /**
106
+ * Check if version file exists for a given .claude directory.
107
+ */
108
+ export declare function versionFileExists(claudeDir: string): Promise<boolean>;
109
+ /**
110
+ * Normalize a file path for cross-platform consistency.
111
+ * Uses forward slashes and removes leading ./
112
+ */
113
+ export declare function normalizePath(filePath: string): string;
114
+ /**
115
+ * Bulk update multiple file hashes.
116
+ */
117
+ export declare function bulkUpdateFileHashes(versionFile: VersionFile, updates: Array<{
118
+ path: string;
119
+ hash: string | null;
120
+ isGenerated?: boolean;
121
+ }>): VersionFile;
122
+ /**
123
+ * Create version data from a fresh install.
124
+ */
125
+ export declare function createFromInstall(archaiVersion: string, installedFiles: Array<{
126
+ path: string;
127
+ hash: string | null;
128
+ isGenerated?: boolean;
129
+ }>): VersionFile;
130
+ //# sourceMappingURL=version-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/version-tracker.ts"],"names":[],"mappings":"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"}