@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,525 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { execSync } from 'child_process';
4
+ import { logger } from './logger.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Internal helpers
7
+ // ---------------------------------------------------------------------------
8
+ /**
9
+ * Run a CLI command and return trimmed stdout, or null on failure.
10
+ * Strips GIT_DIR, GIT_WORK_TREE, GIT_INDEX_FILE, GIT_QUARANTINE_PATH from env.
11
+ * Always passes projectRoot as cwd.
12
+ */
13
+ function ciCommand(cmd, cwd, timeout = 10000) {
14
+ try {
15
+ const env = { ...process.env };
16
+ delete env.GIT_DIR;
17
+ delete env.GIT_WORK_TREE;
18
+ delete env.GIT_INDEX_FILE;
19
+ delete env.GIT_QUARANTINE_PATH;
20
+ const result = execSync(cmd, {
21
+ encoding: 'utf-8',
22
+ stdio: ['pipe', 'pipe', 'pipe'],
23
+ timeout,
24
+ cwd,
25
+ env,
26
+ });
27
+ return result.trim() || null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ /**
34
+ * Extract group/project path from a git remote URL.
35
+ * Supports both SSH (git@host:group/project.git) and HTTPS formats.
36
+ */
37
+ function extractProjectPath(remoteUrl) {
38
+ // SSH format: git@host:group/project.git
39
+ const sshMatch = remoteUrl.match(/:([^/][^:]+?)(?:\.git)?$/);
40
+ if (sshMatch)
41
+ return sshMatch[1];
42
+ // HTTPS format: https://host/group/project.git
43
+ try {
44
+ const url = new URL(remoteUrl);
45
+ const pathPart = url.pathname.replace(/^\//, "").replace(/\.git$/, "");
46
+ return pathPart || null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // Detection tier functions
54
+ // ---------------------------------------------------------------------------
55
+ /**
56
+ * Tier 1: Check archai.config.md for CI Provider override.
57
+ */
58
+ async function detectFromConfigOverride(projectRoot) {
59
+ const configPath = path.join(projectRoot, 'archai.config.md');
60
+ if (!(await fs.pathExists(configPath)))
61
+ return null;
62
+ const content = await fs.readFile(configPath, 'utf-8');
63
+ const providerMatch = content.match(/\*\*CI Provider:\*\*\s*(\S+)/i);
64
+ if (!providerMatch)
65
+ return null;
66
+ const rawProvider = providerMatch[1].toLowerCase();
67
+ const validProviders = ['github', 'gitlab', 'none'];
68
+ if (!validProviders.includes(rawProvider))
69
+ return null;
70
+ const provider = rawProvider;
71
+ // Parse optional auth method and timeout
72
+ let authMethod;
73
+ const authMatch = content.match(/\*\*Auth Method:\*\*\s*(\S+)/i);
74
+ if (authMatch) {
75
+ const rawAuth = authMatch[1].toLowerCase();
76
+ if (rawAuth === 'cli' || rawAuth === 'token') {
77
+ authMethod = rawAuth;
78
+ }
79
+ }
80
+ let timeout;
81
+ const timeoutMatch = content.match(/\*\*Timeout:\*\*\s*(\d+)/i);
82
+ if (timeoutMatch) {
83
+ timeout = parseInt(timeoutMatch[1], 10);
84
+ }
85
+ return { provider, authMethod, timeout };
86
+ }
87
+ /**
88
+ * Tier 2: Check for CI configuration files.
89
+ */
90
+ async function detectFromConfigFiles(projectRoot) {
91
+ // GitLab checked first (single file is more specific)
92
+ if (await fs.pathExists(path.join(projectRoot, '.gitlab-ci.yml'))) {
93
+ return 'gitlab';
94
+ }
95
+ // GitHub: check for .yml or .yaml files in .github/workflows/
96
+ const workflowsDir = path.join(projectRoot, '.github', 'workflows');
97
+ if (await fs.pathExists(workflowsDir)) {
98
+ try {
99
+ const files = await fs.readdir(workflowsDir);
100
+ const hasYml = files.some((f) => f.endsWith('.yml') || f.endsWith('.yaml'));
101
+ if (hasYml)
102
+ return 'github';
103
+ }
104
+ catch {
105
+ // ignore readdir errors
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ /**
111
+ * Tier 3: Check git remote URL for provider hostname.
112
+ */
113
+ function detectFromRemoteUrl(projectRoot) {
114
+ const remoteUrl = ciCommand('git remote get-url origin', projectRoot);
115
+ if (!remoteUrl)
116
+ return null;
117
+ const projPath = extractProjectPath(remoteUrl);
118
+ if (remoteUrl.includes('github.com')) {
119
+ return { provider: 'github', projectPath: projPath };
120
+ }
121
+ if (remoteUrl.toLowerCase().includes('gitlab')) {
122
+ return { provider: 'gitlab', projectPath: projPath };
123
+ }
124
+ return null;
125
+ }
126
+ /**
127
+ * Tier 4: Check for installed CLI tools.
128
+ */
129
+ function detectFromCliTools(projectRoot) {
130
+ if (ciCommand('gh --version', projectRoot) !== null) {
131
+ return 'github';
132
+ }
133
+ if (ciCommand('glab --version', projectRoot) !== null) {
134
+ return 'gitlab';
135
+ }
136
+ return null;
137
+ }
138
+ /**
139
+ * Build a CIProviderConfig for a detected provider.
140
+ */
141
+ function buildProviderConfig(projectRoot, provider, overrides) {
142
+ let authMethod = overrides?.authMethod || 'cli';
143
+ const timeout = overrides?.timeout || 30000;
144
+ // Determine auth method if not overridden
145
+ if (!overrides?.authMethod) {
146
+ if (provider === 'github') {
147
+ const ghAuth = ciCommand('gh auth status', projectRoot);
148
+ if (ghAuth !== null) {
149
+ authMethod = 'cli';
150
+ }
151
+ else if (process.env.GITHUB_TOKEN) {
152
+ authMethod = 'token';
153
+ }
154
+ }
155
+ else if (provider === 'gitlab') {
156
+ const glabAuth = ciCommand('glab auth status', projectRoot);
157
+ if (glabAuth !== null) {
158
+ authMethod = 'cli';
159
+ }
160
+ else if (process.env.GITLAB_TOKEN || process.env.CI_JOB_TOKEN) {
161
+ authMethod = 'token';
162
+ }
163
+ }
164
+ }
165
+ // Always attempt to extract projectPath from remote URL
166
+ let projectPath = null;
167
+ const remoteUrl = ciCommand('git remote get-url origin', projectRoot);
168
+ if (remoteUrl) {
169
+ projectPath = extractProjectPath(remoteUrl);
170
+ }
171
+ return {
172
+ provider,
173
+ authMethod,
174
+ apiBaseUrl: null,
175
+ timeout,
176
+ projectRoot,
177
+ projectPath,
178
+ };
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // Main detection function
182
+ // ---------------------------------------------------------------------------
183
+ /**
184
+ * Auto-detect the CI provider for a project.
185
+ * Priority: config override > config files > remote URL > CLI tools > fallback.
186
+ */
187
+ export async function detectCIProvider(projectRoot, options) {
188
+ // Tier 1: Config override (skipped during setup to force fresh detection)
189
+ if (!options?.skipConfigOverride) {
190
+ const configOverride = await detectFromConfigOverride(projectRoot);
191
+ if (configOverride) {
192
+ if (configOverride.provider === 'none') {
193
+ return { provider: 'none', detectedVia: 'config-override', config: null };
194
+ }
195
+ const config = buildProviderConfig(projectRoot, configOverride.provider, {
196
+ authMethod: configOverride.authMethod,
197
+ timeout: configOverride.timeout,
198
+ });
199
+ return { provider: configOverride.provider, detectedVia: 'config-override', config };
200
+ }
201
+ }
202
+ // Tier 2: Config files
203
+ const configFileProvider = await detectFromConfigFiles(projectRoot);
204
+ if (configFileProvider) {
205
+ const config = buildProviderConfig(projectRoot, configFileProvider);
206
+ return { provider: configFileProvider, detectedVia: 'config-file', config };
207
+ }
208
+ // Tier 3: Remote URL
209
+ const remoteResult = detectFromRemoteUrl(projectRoot);
210
+ if (remoteResult) {
211
+ const config = buildProviderConfig(projectRoot, remoteResult.provider);
212
+ return { provider: remoteResult.provider, detectedVia: 'remote-url', config };
213
+ }
214
+ // Tier 4: CLI tools
215
+ const cliProvider = detectFromCliTools(projectRoot);
216
+ if (cliProvider) {
217
+ const config = buildProviderConfig(projectRoot, cliProvider);
218
+ return { provider: cliProvider, detectedVia: 'cli-tool', config };
219
+ }
220
+ // Fallback: no CI detected
221
+ return { provider: 'none', detectedVia: 'none', config: null };
222
+ }
223
+ // ---------------------------------------------------------------------------
224
+ // Normalization functions (exported for direct testing)
225
+ // ---------------------------------------------------------------------------
226
+ /**
227
+ * Normalize a GitHub Actions run JSON object to CIPipelineStatus.
228
+ */
229
+ export function normalizeGitHubStatus(run) {
230
+ if (!run || typeof run !== 'object')
231
+ return null;
232
+ if (!('databaseId' in run) || !('status' in run))
233
+ return null;
234
+ const status = run.status;
235
+ const conclusion = run.conclusion;
236
+ let normalizedStatus;
237
+ switch (status) {
238
+ case 'queued':
239
+ case 'waiting':
240
+ case 'pending':
241
+ case 'requested':
242
+ normalizedStatus = 'pending';
243
+ break;
244
+ case 'in_progress':
245
+ normalizedStatus = 'running';
246
+ break;
247
+ case 'completed':
248
+ switch (conclusion) {
249
+ case 'success':
250
+ normalizedStatus = 'success';
251
+ break;
252
+ case 'failure':
253
+ normalizedStatus = 'failed';
254
+ break;
255
+ case 'cancelled':
256
+ normalizedStatus = 'cancelled';
257
+ break;
258
+ case 'timed_out':
259
+ normalizedStatus = 'failed';
260
+ break;
261
+ case 'skipped':
262
+ normalizedStatus = 'cancelled';
263
+ break;
264
+ default:
265
+ normalizedStatus = 'unknown';
266
+ break;
267
+ }
268
+ break;
269
+ default:
270
+ normalizedStatus = 'unknown';
271
+ break;
272
+ }
273
+ return {
274
+ id: String(run.databaseId),
275
+ status: normalizedStatus,
276
+ branch: run.headBranch || '',
277
+ commit: run.headSha || '',
278
+ url: run.url || null,
279
+ createdAt: run.createdAt || null,
280
+ finishedAt: run.updatedAt || null,
281
+ };
282
+ }
283
+ /**
284
+ * Normalize a GitLab pipeline JSON object to CIPipelineStatus.
285
+ */
286
+ export function normalizeGitLabStatus(pipeline) {
287
+ if (!pipeline || typeof pipeline !== 'object')
288
+ return null;
289
+ if (!('id' in pipeline) || !('status' in pipeline))
290
+ return null;
291
+ const status = pipeline.status;
292
+ let normalizedStatus;
293
+ switch (status) {
294
+ case 'created':
295
+ case 'waiting_for_resource':
296
+ case 'preparing':
297
+ case 'pending':
298
+ case 'manual':
299
+ case 'scheduled':
300
+ normalizedStatus = 'pending';
301
+ break;
302
+ case 'running':
303
+ normalizedStatus = 'running';
304
+ break;
305
+ case 'success':
306
+ normalizedStatus = 'success';
307
+ break;
308
+ case 'failed':
309
+ normalizedStatus = 'failed';
310
+ break;
311
+ case 'canceled':
312
+ case 'skipped':
313
+ normalizedStatus = 'cancelled';
314
+ break;
315
+ default:
316
+ normalizedStatus = 'unknown';
317
+ break;
318
+ }
319
+ return {
320
+ id: String(pipeline.id),
321
+ status: normalizedStatus,
322
+ branch: pipeline.ref || '',
323
+ commit: pipeline.sha || '',
324
+ url: pipeline.web_url || null,
325
+ createdAt: pipeline.created_at || null,
326
+ finishedAt: null, // finished_at not available in list endpoint
327
+ };
328
+ }
329
+ // ---------------------------------------------------------------------------
330
+ // Shared polling helper
331
+ // ---------------------------------------------------------------------------
332
+ async function pollForCompletion(provider, branch, options) {
333
+ const pollInterval = options?.pollInterval ?? 10000;
334
+ const maxWait = options?.maxWait ?? 600000;
335
+ const terminalStatuses = ['success', 'failed', 'cancelled'];
336
+ const startTime = Date.now();
337
+ let lastStatus = 'unknown';
338
+ while (true) {
339
+ const pipelineStatus = await provider.getPipelineStatus(branch);
340
+ if (!pipelineStatus) {
341
+ return { status: 'unknown', timedOut: false };
342
+ }
343
+ lastStatus = pipelineStatus.status;
344
+ if (terminalStatuses.includes(lastStatus)) {
345
+ return { status: lastStatus, timedOut: false };
346
+ }
347
+ if (Date.now() - startTime >= maxWait) {
348
+ return { status: lastStatus, timedOut: true };
349
+ }
350
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
351
+ }
352
+ }
353
+ // ---------------------------------------------------------------------------
354
+ // Adapter classes
355
+ // ---------------------------------------------------------------------------
356
+ class GitHubActionsProvider {
357
+ config;
358
+ constructor(config) {
359
+ this.config = config;
360
+ }
361
+ getProviderName() {
362
+ return "github";
363
+ }
364
+ async getPipelineStatus(branch, commit) {
365
+ let cmd = `gh run list --branch ${branch} --limit 1 --json databaseId,status,conclusion,headSha,headBranch,url,createdAt,updatedAt`;
366
+ if (commit) {
367
+ cmd += ` --commit ${commit}`;
368
+ }
369
+ const output = ciCommand(cmd, this.config.projectRoot, this.config.timeout);
370
+ if (!output) {
371
+ logger.warn("Failed to get GitHub Actions pipeline status");
372
+ return null;
373
+ }
374
+ try {
375
+ const runs = JSON.parse(output);
376
+ if (!Array.isArray(runs) || runs.length === 0)
377
+ return null;
378
+ return normalizeGitHubStatus(runs[0]);
379
+ }
380
+ catch {
381
+ logger.warn("Failed to parse GitHub Actions response");
382
+ return null;
383
+ }
384
+ }
385
+ async getPipelineLogs(pipelineId) {
386
+ const output = ciCommand(`gh run view ${pipelineId} --log`, this.config.projectRoot, this.config.timeout);
387
+ if (!output) {
388
+ logger.warn("Failed to get GitHub Actions pipeline logs");
389
+ return null;
390
+ }
391
+ return {
392
+ pipelineId,
393
+ jobs: [{ name: "all", status: "unknown", log: output }],
394
+ };
395
+ }
396
+ async waitForPipeline(branch, options) {
397
+ return pollForCompletion(this, branch, options);
398
+ }
399
+ }
400
+ class GitLabCIProvider {
401
+ config;
402
+ constructor(config) {
403
+ this.config = config;
404
+ }
405
+ getProviderName() {
406
+ return "gitlab";
407
+ }
408
+ async getPipelineStatus(branch, commit) {
409
+ // Try glab CLI first
410
+ if (this.config.authMethod === "cli") {
411
+ const output = ciCommand(`glab ci list --branch ${branch} --per-page 1 --output json`, this.config.projectRoot, this.config.timeout);
412
+ if (output) {
413
+ try {
414
+ const pipelines = JSON.parse(output);
415
+ if (!Array.isArray(pipelines) || pipelines.length === 0)
416
+ return null;
417
+ const pipeline = pipelines[0];
418
+ // glab has no --sha flag, so check manually
419
+ if (commit && pipeline.sha !== commit)
420
+ return null;
421
+ return normalizeGitLabStatus(pipeline);
422
+ }
423
+ catch {
424
+ logger.warn("Failed to parse GitLab CI response");
425
+ return null;
426
+ }
427
+ }
428
+ }
429
+ // Fallback to curl with token
430
+ return this.getPipelineStatusViaCurl(branch, commit);
431
+ }
432
+ getPipelineStatusViaCurl(branch, commit) {
433
+ if (!this.config.projectPath) {
434
+ logger.warn("GitLab API fallback unavailable: no project path detected. Configure glab CLI or set CI Provider in archai.config.md.");
435
+ return null;
436
+ }
437
+ const token = process.env.GITLAB_TOKEN || process.env.CI_JOB_TOKEN;
438
+ if (!token) {
439
+ logger.warn("No GitLab token available for API fallback");
440
+ return null;
441
+ }
442
+ const apiBase = this.config.apiBaseUrl || "https://gitlab.com/api/v4";
443
+ const encodedPath = this.config.projectPath
444
+ .split("/")
445
+ .map(encodeURIComponent)
446
+ .join("%2F");
447
+ let url = `${apiBase}/projects/${encodedPath}/pipelines?ref=${branch}&per_page=1`;
448
+ if (commit) {
449
+ url += `&sha=${commit}`;
450
+ }
451
+ const output = ciCommand(`curl -s -H "PRIVATE-TOKEN: ${token}" "${url}"`, this.config.projectRoot, this.config.timeout);
452
+ if (!output) {
453
+ logger.warn("Failed to get GitLab CI pipeline status via API");
454
+ return null;
455
+ }
456
+ try {
457
+ const pipelines = JSON.parse(output);
458
+ if (!Array.isArray(pipelines) || pipelines.length === 0)
459
+ return null;
460
+ return normalizeGitLabStatus(pipelines[0]);
461
+ }
462
+ catch {
463
+ logger.warn("Failed to parse GitLab API response");
464
+ return null;
465
+ }
466
+ }
467
+ async getPipelineLogs(pipelineId) {
468
+ const output = ciCommand(`glab ci view ${pipelineId}`, this.config.projectRoot, this.config.timeout);
469
+ if (!output) {
470
+ logger.warn("Failed to get GitLab CI pipeline logs");
471
+ return null;
472
+ }
473
+ return {
474
+ pipelineId,
475
+ jobs: [{ name: "all", status: "unknown", log: output }],
476
+ };
477
+ }
478
+ async waitForPipeline(branch, options) {
479
+ return pollForCompletion(this, branch, options);
480
+ }
481
+ }
482
+ class NullCIProvider {
483
+ getProviderName() {
484
+ return "none";
485
+ }
486
+ async getPipelineStatus(_branch, _commit) {
487
+ logger.warn("No CI provider configured");
488
+ return null;
489
+ }
490
+ async getPipelineLogs(_pipelineId) {
491
+ logger.warn("No CI provider configured");
492
+ return null;
493
+ }
494
+ async waitForPipeline(_branch, _options) {
495
+ logger.warn("No CI provider configured");
496
+ return { status: "unknown", timedOut: false };
497
+ }
498
+ }
499
+ // ---------------------------------------------------------------------------
500
+ // Factory functions
501
+ // ---------------------------------------------------------------------------
502
+ /**
503
+ * Create a CIProvider instance from a config.
504
+ */
505
+ export function createCIProvider(config) {
506
+ if (!config || config.provider === "none") {
507
+ return new NullCIProvider();
508
+ }
509
+ switch (config.provider) {
510
+ case "github":
511
+ return new GitHubActionsProvider(config);
512
+ case "gitlab":
513
+ return new GitLabCIProvider(config);
514
+ default:
515
+ return new NullCIProvider();
516
+ }
517
+ }
518
+ /**
519
+ * Convenience function: detect CI provider and create an adapter.
520
+ */
521
+ export async function getCIProvider(projectRoot) {
522
+ const result = await detectCIProvider(projectRoot);
523
+ return createCIProvider(result.config);
524
+ }
525
+ //# sourceMappingURL=ci-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-provider.js","sourceRoot":"","sources":["../../src/utils/ci-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { CIContext, CIFailingJob, CIFailureReport, CIFailureType, CIPipelineStatus, CIStatusCheckResult, CIWaitOptionsExtended, CIWaitResultExtended } from "../types/index.js";
2
+ /**
3
+ * Truncate a log to the last maxLines lines.
4
+ * Normalizes CRLF to LF. Prepends a truncation message if truncated.
5
+ */
6
+ export declare function truncateLog(log: string, maxLines?: number): string;
7
+ /**
8
+ * Compute exponential backoff delay with jitter.
9
+ * Base: 1000ms * 2^attempt, capped at 60000ms, plus random jitter up to 1000ms.
10
+ */
11
+ export declare function exponentialBackoff(attempt: number): number;
12
+ /**
13
+ * Classify a failure based on log content using regex pattern matching.
14
+ * Priority order: infrastructure > timeout > lint > test > build > deploy > unknown.
15
+ */
16
+ export declare function classifyFailure(logs: string): CIFailureType;
17
+ /**
18
+ * Check pipeline status with extended semantics (not_found, not_configured).
19
+ * Note: Returns "not_found" for ANY null from provider, including network errors.
20
+ * The grace period in waitForPipelineCompletion handles transient errors by retrying.
21
+ */
22
+ export declare function checkPipelineStatus(ctx: CIContext, branch: string, commit?: string): Promise<CIStatusCheckResult>;
23
+ /**
24
+ * Wait for a pipeline to reach a terminal status with grace period support.
25
+ * Does NOT call ctx.provider.waitForPipeline() -- supersedes it with grace period
26
+ * and better not_found handling.
27
+ *
28
+ * Known limitation: Rate-limit detection is NOT possible in the polling path because
29
+ * CIProvider.getPipelineStatus() swallows all errors. Rate-limit detection is only
30
+ * available in getFailingJobLogs via ciExec.
31
+ */
32
+ export declare function waitForPipelineCompletion(ctx: CIContext, branch: string, options?: CIWaitOptionsExtended): Promise<CIWaitResultExtended>;
33
+ /**
34
+ * Parse GitHub Actions --log-failed output into per-job logs.
35
+ * Each line is tab-separated: jobName TAB stepName TAB timestamp message.
36
+ * Groups lines by job name, extracts message portion after the timestamp.
37
+ */
38
+ export declare function parseGitHubFailedLogs(output: string): CIFailingJob[];
39
+ /**
40
+ * Parse GitLab REST API job list JSON response.
41
+ * Filters to failed jobs only.
42
+ */
43
+ export declare function parseGitLabJobList(jsonOutput: string): Array<{
44
+ id: string;
45
+ name: string;
46
+ status: string;
47
+ }>;
48
+ /**
49
+ * Fetch logs for failing jobs only in a pipeline.
50
+ * Uses CLI commands directly via ciExec for per-job log extraction.
51
+ */
52
+ export declare function getFailingJobLogs(ctx: CIContext, pipelineId: string): Promise<CIFailingJob[]>;
53
+ /**
54
+ * Assemble a structured CIFailureReport from pipeline data, failing jobs, and failure type.
55
+ */
56
+ export declare function buildFailureReport(pipeline: CIPipelineStatus, failingJobs: CIFailingJob[], failureType: CIFailureType): CIFailureReport;
57
+ //# sourceMappingURL=ci-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-status.d.ts","sourceRoot":"","sources":["../../src/utils/ci-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,aAAa,EACb,gBAAgB,EAEhB,mBAAmB,EAEnB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAuD3B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CAmBvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAiB3D;AAMD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAYD;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAiD/B;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAuCpE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAcrD;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAezB;AA8GD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,YAAY,EAAE,EAC3B,WAAW,EAAE,aAAa,GACzB,eAAe,CASjB"}