@braingrid/cli 0.1.3 → 0.2.1

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 (243) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +54 -39
  3. package/dist/chunk-KNVWIF3L.js +401 -0
  4. package/dist/chunk-KNVWIF3L.js.map +1 -0
  5. package/dist/cli.js +6229 -290
  6. package/dist/cli.js.map +1 -1
  7. package/dist/gh-installer-B65ZOOC4.js +13 -0
  8. package/dist/gh-installer-B65ZOOC4.js.map +1 -0
  9. package/package.json +40 -13
  10. package/dist/build-config.d.ts +0 -26
  11. package/dist/build-config.d.ts.map +0 -1
  12. package/dist/build-config.js +0 -45
  13. package/dist/build-config.js.map +0 -1
  14. package/dist/cli.d.ts +0 -3
  15. package/dist/cli.d.ts.map +0 -1
  16. package/dist/handlers/agent.handlers.d.ts +0 -12
  17. package/dist/handlers/agent.handlers.d.ts.map +0 -1
  18. package/dist/handlers/agent.handlers.js +0 -130
  19. package/dist/handlers/agent.handlers.js.map +0 -1
  20. package/dist/handlers/auth.handlers.d.ts +0 -19
  21. package/dist/handlers/auth.handlers.d.ts.map +0 -1
  22. package/dist/handlers/auth.handlers.js +0 -177
  23. package/dist/handlers/auth.handlers.js.map +0 -1
  24. package/dist/handlers/index.d.ts +0 -14
  25. package/dist/handlers/index.d.ts.map +0 -1
  26. package/dist/handlers/index.js +0 -14
  27. package/dist/handlers/index.js.map +0 -1
  28. package/dist/handlers/init.handlers.d.ts +0 -10
  29. package/dist/handlers/init.handlers.d.ts.map +0 -1
  30. package/dist/handlers/init.handlers.js +0 -638
  31. package/dist/handlers/init.handlers.js.map +0 -1
  32. package/dist/handlers/project.handlers.d.ts +0 -36
  33. package/dist/handlers/project.handlers.d.ts.map +0 -1
  34. package/dist/handlers/project.handlers.js +0 -309
  35. package/dist/handlers/project.handlers.js.map +0 -1
  36. package/dist/handlers/requirement.handlers.d.ts +0 -32
  37. package/dist/handlers/requirement.handlers.d.ts.map +0 -1
  38. package/dist/handlers/requirement.handlers.js +0 -264
  39. package/dist/handlers/requirement.handlers.js.map +0 -1
  40. package/dist/handlers/status.handlers.d.ts +0 -12
  41. package/dist/handlers/status.handlers.d.ts.map +0 -1
  42. package/dist/handlers/status.handlers.js +0 -212
  43. package/dist/handlers/status.handlers.js.map +0 -1
  44. package/dist/handlers/task.handlers.d.ts +0 -29
  45. package/dist/handlers/task.handlers.d.ts.map +0 -1
  46. package/dist/handlers/task.handlers.js +0 -326
  47. package/dist/handlers/task.handlers.js.map +0 -1
  48. package/dist/handlers/types.d.ts +0 -10
  49. package/dist/handlers/types.d.ts.map +0 -1
  50. package/dist/handlers/types.js +0 -5
  51. package/dist/handlers/types.js.map +0 -1
  52. package/dist/handlers/update.handlers.d.ts +0 -16
  53. package/dist/handlers/update.handlers.d.ts.map +0 -1
  54. package/dist/handlers/update.handlers.js +0 -119
  55. package/dist/handlers/update.handlers.js.map +0 -1
  56. package/dist/rpc/registry.d.ts +0 -97
  57. package/dist/rpc/registry.d.ts.map +0 -1
  58. package/dist/rpc/registry.js +0 -119
  59. package/dist/rpc/registry.js.map +0 -1
  60. package/dist/rpc/server.d.ts +0 -78
  61. package/dist/rpc/server.d.ts.map +0 -1
  62. package/dist/rpc/server.js +0 -437
  63. package/dist/rpc/server.js.map +0 -1
  64. package/dist/rpc/transport.d.ts +0 -84
  65. package/dist/rpc/transport.d.ts.map +0 -1
  66. package/dist/rpc/transport.js +0 -296
  67. package/dist/rpc/transport.js.map +0 -1
  68. package/dist/services/__mocks__/utils.d.ts +0 -16
  69. package/dist/services/__mocks__/utils.d.ts.map +0 -1
  70. package/dist/services/__mocks__/utils.js +0 -21
  71. package/dist/services/__mocks__/utils.js.map +0 -1
  72. package/dist/services/agent-service.d.ts +0 -29
  73. package/dist/services/agent-service.d.ts.map +0 -1
  74. package/dist/services/agent-service.js +0 -273
  75. package/dist/services/agent-service.js.map +0 -1
  76. package/dist/services/auth.d.ts +0 -59
  77. package/dist/services/auth.d.ts.map +0 -1
  78. package/dist/services/auth.js +0 -549
  79. package/dist/services/auth.js.map +0 -1
  80. package/dist/services/claude.d.ts +0 -18
  81. package/dist/services/claude.d.ts.map +0 -1
  82. package/dist/services/claude.js +0 -164
  83. package/dist/services/claude.js.map +0 -1
  84. package/dist/services/credential-store.d.ts +0 -47
  85. package/dist/services/credential-store.d.ts.map +0 -1
  86. package/dist/services/credential-store.js +0 -89
  87. package/dist/services/credential-store.js.map +0 -1
  88. package/dist/services/internal/github-service.d.ts +0 -67
  89. package/dist/services/internal/github-service.d.ts.map +0 -1
  90. package/dist/services/internal/github-service.js +0 -81
  91. package/dist/services/internal/github-service.js.map +0 -1
  92. package/dist/services/internal/repository-service.d.ts +0 -79
  93. package/dist/services/internal/repository-service.d.ts.map +0 -1
  94. package/dist/services/internal/repository-service.js +0 -88
  95. package/dist/services/internal/repository-service.js.map +0 -1
  96. package/dist/services/oauth2-auth.d.ts +0 -76
  97. package/dist/services/oauth2-auth.d.ts.map +0 -1
  98. package/dist/services/oauth2-auth.js +0 -451
  99. package/dist/services/oauth2-auth.js.map +0 -1
  100. package/dist/services/project-service.d.ts +0 -24
  101. package/dist/services/project-service.d.ts.map +0 -1
  102. package/dist/services/project-service.js +0 -60
  103. package/dist/services/project-service.js.map +0 -1
  104. package/dist/services/requirement-service.d.ts +0 -32
  105. package/dist/services/requirement-service.d.ts.map +0 -1
  106. package/dist/services/requirement-service.js +0 -91
  107. package/dist/services/requirement-service.js.map +0 -1
  108. package/dist/services/task-service.d.ts +0 -22
  109. package/dist/services/task-service.d.ts.map +0 -1
  110. package/dist/services/task-service.js +0 -52
  111. package/dist/services/task-service.js.map +0 -1
  112. package/dist/types/api.d.ts +0 -16
  113. package/dist/types/api.d.ts.map +0 -1
  114. package/dist/types/api.js +0 -5
  115. package/dist/types/api.js.map +0 -1
  116. package/dist/types/auth.d.ts +0 -73
  117. package/dist/types/auth.d.ts.map +0 -1
  118. package/dist/types/auth.js +0 -2
  119. package/dist/types/auth.js.map +0 -1
  120. package/dist/types/claude.d.ts +0 -22
  121. package/dist/types/claude.d.ts.map +0 -1
  122. package/dist/types/claude.js +0 -2
  123. package/dist/types/claude.js.map +0 -1
  124. package/dist/types/github.d.ts +0 -105
  125. package/dist/types/github.d.ts.map +0 -1
  126. package/dist/types/github.js +0 -6
  127. package/dist/types/github.js.map +0 -1
  128. package/dist/types/local-project.d.ts +0 -30
  129. package/dist/types/local-project.d.ts.map +0 -1
  130. package/dist/types/local-project.js +0 -24
  131. package/dist/types/local-project.js.map +0 -1
  132. package/dist/types/project.d.ts +0 -56
  133. package/dist/types/project.d.ts.map +0 -1
  134. package/dist/types/project.js +0 -5
  135. package/dist/types/project.js.map +0 -1
  136. package/dist/types/requirement.d.ts +0 -69
  137. package/dist/types/requirement.d.ts.map +0 -1
  138. package/dist/types/requirement.js +0 -5
  139. package/dist/types/requirement.js.map +0 -1
  140. package/dist/types/task.d.ts +0 -44
  141. package/dist/types/task.d.ts.map +0 -1
  142. package/dist/types/task.js +0 -5
  143. package/dist/types/task.js.map +0 -1
  144. package/dist/utils/axios-retry.d.ts +0 -25
  145. package/dist/utils/axios-retry.d.ts.map +0 -1
  146. package/dist/utils/axios-retry.js +0 -174
  147. package/dist/utils/axios-retry.js.map +0 -1
  148. package/dist/utils/axios-with-auth.d.ts +0 -10
  149. package/dist/utils/axios-with-auth.d.ts.map +0 -1
  150. package/dist/utils/axios-with-auth.js +0 -118
  151. package/dist/utils/axios-with-auth.js.map +0 -1
  152. package/dist/utils/cli-tools.d.ts +0 -30
  153. package/dist/utils/cli-tools.d.ts.map +0 -1
  154. package/dist/utils/cli-tools.js +0 -199
  155. package/dist/utils/cli-tools.js.map +0 -1
  156. package/dist/utils/command-execution.d.ts +0 -30
  157. package/dist/utils/command-execution.d.ts.map +0 -1
  158. package/dist/utils/command-execution.js +0 -264
  159. package/dist/utils/command-execution.js.map +0 -1
  160. package/dist/utils/command-parser.d.ts +0 -85
  161. package/dist/utils/command-parser.d.ts.map +0 -1
  162. package/dist/utils/command-parser.js +0 -287
  163. package/dist/utils/command-parser.js.map +0 -1
  164. package/dist/utils/config.d.ts +0 -10
  165. package/dist/utils/config.d.ts.map +0 -1
  166. package/dist/utils/config.js +0 -77
  167. package/dist/utils/config.js.map +0 -1
  168. package/dist/utils/error-formatter.d.ts +0 -17
  169. package/dist/utils/error-formatter.d.ts.map +0 -1
  170. package/dist/utils/error-formatter.js +0 -115
  171. package/dist/utils/error-formatter.js.map +0 -1
  172. package/dist/utils/formatting.d.ts +0 -10
  173. package/dist/utils/formatting.d.ts.map +0 -1
  174. package/dist/utils/formatting.js +0 -122
  175. package/dist/utils/formatting.js.map +0 -1
  176. package/dist/utils/gh-installer.d.ts +0 -31
  177. package/dist/utils/gh-installer.d.ts.map +0 -1
  178. package/dist/utils/gh-installer.js +0 -296
  179. package/dist/utils/gh-installer.js.map +0 -1
  180. package/dist/utils/git-installer.d.ts +0 -31
  181. package/dist/utils/git-installer.d.ts.map +0 -1
  182. package/dist/utils/git-installer.js +0 -290
  183. package/dist/utils/git-installer.js.map +0 -1
  184. package/dist/utils/git.d.ts +0 -60
  185. package/dist/utils/git.d.ts.map +0 -1
  186. package/dist/utils/git.js +0 -144
  187. package/dist/utils/git.js.map +0 -1
  188. package/dist/utils/github-repo.d.ts +0 -43
  189. package/dist/utils/github-repo.d.ts.map +0 -1
  190. package/dist/utils/github-repo.js +0 -113
  191. package/dist/utils/github-repo.js.map +0 -1
  192. package/dist/utils/id-normalization.d.ts +0 -26
  193. package/dist/utils/id-normalization.d.ts.map +0 -1
  194. package/dist/utils/id-normalization.js +0 -45
  195. package/dist/utils/id-normalization.js.map +0 -1
  196. package/dist/utils/jwt.d.ts +0 -45
  197. package/dist/utils/jwt.d.ts.map +0 -1
  198. package/dist/utils/jwt.js +0 -64
  199. package/dist/utils/jwt.js.map +0 -1
  200. package/dist/utils/local-store.d.ts +0 -36
  201. package/dist/utils/local-store.d.ts.map +0 -1
  202. package/dist/utils/local-store.js +0 -94
  203. package/dist/utils/local-store.js.map +0 -1
  204. package/dist/utils/logger.d.ts +0 -36
  205. package/dist/utils/logger.d.ts.map +0 -1
  206. package/dist/utils/logger.js +0 -176
  207. package/dist/utils/logger.js.map +0 -1
  208. package/dist/utils/package-manager-installer.d.ts +0 -36
  209. package/dist/utils/package-manager-installer.d.ts.map +0 -1
  210. package/dist/utils/package-manager-installer.js +0 -106
  211. package/dist/utils/package-manager-installer.js.map +0 -1
  212. package/dist/utils/package-manager.d.ts +0 -31
  213. package/dist/utils/package-manager.d.ts.map +0 -1
  214. package/dist/utils/package-manager.js +0 -133
  215. package/dist/utils/package-manager.js.map +0 -1
  216. package/dist/utils/projects.d.ts +0 -23
  217. package/dist/utils/projects.d.ts.map +0 -1
  218. package/dist/utils/projects.js +0 -36
  219. package/dist/utils/projects.js.map +0 -1
  220. package/dist/utils/repository-access.d.ts +0 -89
  221. package/dist/utils/repository-access.d.ts.map +0 -1
  222. package/dist/utils/repository-access.js +0 -132
  223. package/dist/utils/repository-access.js.map +0 -1
  224. package/dist/utils/requirements.d.ts +0 -43
  225. package/dist/utils/requirements.d.ts.map +0 -1
  226. package/dist/utils/requirements.js +0 -79
  227. package/dist/utils/requirements.js.map +0 -1
  228. package/dist/utils/spinner.d.ts +0 -47
  229. package/dist/utils/spinner.d.ts.map +0 -1
  230. package/dist/utils/spinner.js +0 -101
  231. package/dist/utils/spinner.js.map +0 -1
  232. package/dist/utils/status-parser.d.ts +0 -95
  233. package/dist/utils/status-parser.d.ts.map +0 -1
  234. package/dist/utils/status-parser.js +0 -205
  235. package/dist/utils/status-parser.js.map +0 -1
  236. package/dist/utils/tasks.d.ts +0 -21
  237. package/dist/utils/tasks.d.ts.map +0 -1
  238. package/dist/utils/tasks.js +0 -63
  239. package/dist/utils/tasks.js.map +0 -1
  240. package/dist/utils/workspace-manager.d.ts +0 -65
  241. package/dist/utils/workspace-manager.d.ts.map +0 -1
  242. package/dist/utils/workspace-manager.js +0 -98
  243. package/dist/utils/workspace-manager.js.map +0 -1
@@ -1,199 +0,0 @@
1
- /**
2
- * CLI Tools Detection Utilities
3
- *
4
- * Detects installed AI coding tools and CLI utilities:
5
- * - Checks if common AI IDE CLIs are installed
6
- * - Gets version information where available
7
- * - Cross-platform support (macOS, Linux, Windows)
8
- */
9
- import { exec } from 'child_process';
10
- import { promisify } from 'util';
11
- import { access, constants } from 'fs/promises';
12
- import { homedir } from 'os';
13
- import { join } from 'path';
14
- const execAsync = promisify(exec);
15
- // Claude Code local installation path after migrate-installer
16
- const CLAUDE_LOCAL_PATH = join(homedir(), '.claude', 'local', 'claude');
17
- /**
18
- * Check if Claude Code is installed
19
- * Special handling for Claude CLI after `claude migrate-installer`
20
- *
21
- * The migrate-installer command moves the Claude Code executable from PATH
22
- * to ~/.claude/local/claude, so standard PATH checks fail.
23
- *
24
- * Detection priority:
25
- * 1. Check ~/.claude/local/claude (after migrate-installer)
26
- * 2. Try executing `claude --version` (may work via shell alias)
27
- * 3. Check PATH with `which claude`
28
- */
29
- async function checkClaudeInstalled() {
30
- // Priority 1: Check ~/.claude/local/claude (after migrate-installer)
31
- try {
32
- await access(CLAUDE_LOCAL_PATH, constants.X_OK);
33
- return true;
34
- }
35
- catch {
36
- // Fall through to next check
37
- }
38
- // Priority 2: Try executing claude --version (may work via shell alias)
39
- try {
40
- await execAsync('claude --version 2>&1', { timeout: 2000 });
41
- return true;
42
- }
43
- catch {
44
- // Fall through to PATH check
45
- }
46
- // Priority 3: Check PATH with which
47
- return isCliInstalled('claude');
48
- }
49
- /**
50
- * Get Claude Code version
51
- * Tries local path first, then falls back to standard version check
52
- */
53
- async function getClaudeVersion() {
54
- // Try local path first
55
- try {
56
- await access(CLAUDE_LOCAL_PATH, constants.X_OK);
57
- const result = await execAsync(`"${CLAUDE_LOCAL_PATH}" --version 2>&1`, {
58
- timeout: 2000,
59
- });
60
- const output = result.stdout || result.stderr;
61
- const match = output.match(/([\d.]+)/);
62
- return match ? match[1] : null;
63
- }
64
- catch {
65
- // Fall through to regular version check
66
- }
67
- // Fall back to regular claude command
68
- return getCliVersion('claude', '--version', output => {
69
- const match = output.match(/([\d.]+)/);
70
- return match ? match[1] : null;
71
- });
72
- }
73
- const CLI_TOOLS = [
74
- {
75
- name: 'Git',
76
- command: 'git',
77
- versionFlag: '--version',
78
- versionParser: output => {
79
- const match = output.match(/git version ([\d.]+)/);
80
- return match ? match[1] : null;
81
- },
82
- },
83
- {
84
- name: 'GitHub CLI',
85
- command: 'gh',
86
- versionFlag: '--version',
87
- versionParser: output => {
88
- const match = output.match(/gh version ([\d.]+)/);
89
- return match ? match[1] : null;
90
- },
91
- },
92
- {
93
- name: 'Claude Code',
94
- command: 'claude',
95
- specialCheck: checkClaudeInstalled,
96
- specialVersionCheck: getClaudeVersion,
97
- versionFlag: '--version',
98
- versionParser: output => {
99
- // Output format: "2.0.1 (Claude Code)"
100
- const match = output.match(/([\d.]+)/);
101
- return match ? match[1] : null;
102
- },
103
- },
104
- ];
105
- /**
106
- * Check if a CLI command is installed
107
- * Uses user's shell to access PATH (supports shell-installed CLIs)
108
- */
109
- export async function isCliInstalled(command) {
110
- try {
111
- if (process.platform === 'win32') {
112
- await execAsync(`where ${command}`, { timeout: 2000 });
113
- }
114
- else {
115
- // Use which command to check PATH
116
- await execAsync(`which ${command} 2>/dev/null`, { timeout: 2000 });
117
- }
118
- return true;
119
- }
120
- catch {
121
- return false;
122
- }
123
- }
124
- /**
125
- * Get the version of a CLI tool
126
- * Returns null if version cannot be determined
127
- */
128
- export async function getCliVersion(command, versionFlag = '--version', parser) {
129
- try {
130
- const result = await execAsync(`${command} ${versionFlag} 2>&1`, {
131
- timeout: 2000,
132
- });
133
- const output = result.stdout || result.stderr;
134
- if (parser) {
135
- return parser(output);
136
- }
137
- // Default: return first line, trimmed
138
- return output.trim().split('\n')[0] || null;
139
- }
140
- catch {
141
- return null;
142
- }
143
- }
144
- /**
145
- * Check a single CLI tool (installed status and version)
146
- */
147
- async function checkCliTool(config) {
148
- // Use special check if provided, otherwise use standard check
149
- const installed = config.specialCheck
150
- ? await config.specialCheck()
151
- : await isCliInstalled(config.command);
152
- if (!installed) {
153
- return {
154
- name: config.name,
155
- command: config.command,
156
- installed: false,
157
- };
158
- }
159
- // Try to get version - use special version check if provided
160
- let version;
161
- if (config.specialVersionCheck) {
162
- const versionStr = await config.specialVersionCheck();
163
- if (versionStr) {
164
- version = versionStr;
165
- }
166
- }
167
- else if (config.versionFlag) {
168
- const versionStr = await getCliVersion(config.command, config.versionFlag, config.versionParser);
169
- if (versionStr) {
170
- version = versionStr;
171
- }
172
- }
173
- return {
174
- name: config.name,
175
- command: config.command,
176
- installed: true,
177
- version,
178
- };
179
- }
180
- /**
181
- * Check all configured CLI tools in parallel
182
- * Returns array of CLI tool information
183
- */
184
- export async function checkInstalledCliTools() {
185
- try {
186
- const results = await Promise.all(CLI_TOOLS.map(config => checkCliTool(config)));
187
- return results;
188
- }
189
- catch {
190
- // If something goes catastrophically wrong, return empty array
191
- // This ensures status command never fails due to CLI detection
192
- return CLI_TOOLS.map(config => ({
193
- name: config.name,
194
- command: config.command,
195
- installed: false,
196
- }));
197
- }
198
- }
199
- //# sourceMappingURL=cli-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-tools.js","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- export interface ExecResult {
2
- stdout: string;
3
- stderr: string;
4
- }
5
- export interface ExecOptions {
6
- maxBuffer?: number;
7
- timeout?: number;
8
- cwd?: string;
9
- env?: NodeJS.ProcessEnv;
10
- }
11
- /**
12
- * Execute a command asynchronously with proper buffer limits and timeout handling
13
- */
14
- export declare function execAsync(command: string, options?: ExecOptions, isTestMode?: boolean, mockExecHandler?: (command: string) => Promise<ExecResult>): Promise<ExecResult>;
15
- /**
16
- * Execute a command with streaming output support
17
- */
18
- export declare function execStreamAsync(command: string, onOutput?: (chunk: string) => void, isTestMode?: boolean, mockExecHandler?: (command: string) => Promise<ExecResult>, options?: {
19
- timeout?: number;
20
- inactivityTimeout?: number;
21
- }): Promise<ExecResult>;
22
- /**
23
- * Execute git commit with smart timeout handling for pre-commit hooks
24
- */
25
- export declare function execGitCommitAsync(commitMessage: string, onOutput?: (chunk: string) => void, isTestMode?: boolean, mockExecHandler?: (command: string) => Promise<ExecResult>): Promise<ExecResult>;
26
- /**
27
- * Mock execution handler for testing
28
- */
29
- export declare function createMockExecHandler(addMessage?: (type: 'info' | 'error' | 'system', content: string) => void): Promise<(command: string) => Promise<ExecResult>>;
30
- //# sourceMappingURL=command-execution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-execution.d.ts","sourceRoot":"","sources":["../../src/utils/command-execution.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAID;;GAEG;AACH,wBAAsB,SAAS,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,WAAW,EACrB,UAAU,GAAE,OAAe,EAC3B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GACxD,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAClC,UAAU,GAAE,OAAe,EAC3B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,EAC1D,OAAO,CAAC,EAAE;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACC,OAAO,CAAC,UAAU,CAAC,CA6IrB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAClC,UAAU,GAAE,OAAe,EAC3B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GACxD,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACvE,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CA+FnD"}
@@ -1,264 +0,0 @@
1
- import { exec, spawn } from 'child_process';
2
- import { promisify } from 'util';
3
- const execAsyncReal = promisify(exec);
4
- /**
5
- * Execute a command asynchronously with proper buffer limits and timeout handling
6
- */
7
- export async function execAsync(command, options, isTestMode = false, mockExecHandler) {
8
- if (isTestMode && mockExecHandler) {
9
- return mockExecHandler(command);
10
- }
11
- // Set appropriate buffer limits based on command type
12
- const defaultOptions = {
13
- maxBuffer: 1024 * 1024 * 10, // 10MB default
14
- timeout: 300000, // 5 minutes
15
- ...options,
16
- };
17
- // Increase buffer for Claude commands that may produce large outputs
18
- if (command.includes('claude')) {
19
- defaultOptions.maxBuffer = 1024 * 1024 * 50; // 50MB for Claude commands
20
- defaultOptions.timeout = 600000; // 10 minutes for Claude
21
- }
22
- return execAsyncReal(command, defaultOptions);
23
- }
24
- /**
25
- * Execute a command with streaming output support
26
- */
27
- export async function execStreamAsync(command, onOutput, isTestMode = false, mockExecHandler, options) {
28
- if (isTestMode && mockExecHandler) {
29
- // For test mode, simulate streaming
30
- const result = await mockExecHandler(command);
31
- if (onOutput) {
32
- // Simulate streaming by sending output in chunks
33
- const lines = result.stdout.split('\n');
34
- for (const line of lines) {
35
- if (line.trim()) {
36
- onOutput(line + '\n');
37
- await new Promise(resolve => setTimeout(resolve, 200));
38
- }
39
- }
40
- }
41
- return result;
42
- }
43
- return new Promise((resolve, reject) => {
44
- // Parse command to handle quotes properly
45
- let cmd;
46
- let args;
47
- if (command.startsWith('claude -p --dangerously-skip-permissions "')) {
48
- cmd = 'claude';
49
- // Extract the quoted content for non-interactive mode with skip permissions
50
- const promptMatch = command.match(/^claude -p --dangerously-skip-permissions "(.*)"/s);
51
- args = promptMatch ? ['-p', '--dangerously-skip-permissions', promptMatch[1]] : [];
52
- }
53
- else if (command.startsWith('claude -p "')) {
54
- cmd = 'claude';
55
- // Extract the quoted content for non-interactive mode
56
- const promptMatch = command.match(/^claude -p "(.*)"/s);
57
- args = promptMatch ? ['-p', promptMatch[1]] : [];
58
- }
59
- else if (command.startsWith('claude "')) {
60
- cmd = 'claude';
61
- // Extract the quoted content for interactive mode
62
- const promptMatch = command.match(/^claude "(.*)"/s);
63
- args = promptMatch ? [promptMatch[1]] : [];
64
- }
65
- else if (command.startsWith('git commit')) {
66
- // Special handling for git commit to properly parse the message
67
- const parts = command.match(/^git\s+commit\s+(.*)$/);
68
- if (parts && parts[1]) {
69
- cmd = 'git';
70
- args = ['commit'];
71
- // Parse the rest of the arguments, handling -m "message" properly
72
- const argString = parts[1];
73
- const messageMatch = argString.match(/-m\s+"([^"]+)"/);
74
- if (messageMatch) {
75
- args.push('-m', messageMatch[1]);
76
- // Add any other arguments that might be before or after -m
77
- const beforeMessage = argString.substring(0, argString.indexOf('-m')).trim();
78
- const afterMessage = argString
79
- .substring(argString.indexOf(messageMatch[0]) + messageMatch[0].length)
80
- .trim();
81
- if (beforeMessage)
82
- args.unshift(...beforeMessage.split(' '));
83
- if (afterMessage)
84
- args.push(...afterMessage.split(' '));
85
- }
86
- else {
87
- args.push(...argString.split(' '));
88
- }
89
- }
90
- else {
91
- [cmd, ...args] = command.split(' ');
92
- }
93
- }
94
- else {
95
- // Simple command splitting for other commands
96
- [cmd, ...args] = command.split(' ');
97
- }
98
- const child = spawn(cmd, args, {
99
- shell: false,
100
- stdio: ['inherit', 'pipe', 'pipe'],
101
- });
102
- let stdout = '';
103
- let stderr = '';
104
- // Smart timeout handling
105
- const isGitCommit = cmd === 'git' && args[0] === 'commit';
106
- const maxTimeout = options?.timeout || (isGitCommit ? 900000 : 300000); // 15 min for git commit, 5 min default
107
- const inactivityTimeout = options?.inactivityTimeout || (isGitCommit ? 60000 : 30000); // 60s for git commit, 30s default
108
- let globalTimeoutId = null;
109
- let inactivityTimeoutId = null;
110
- const clearTimeouts = () => {
111
- if (globalTimeoutId)
112
- clearTimeout(globalTimeoutId);
113
- if (inactivityTimeoutId)
114
- clearTimeout(inactivityTimeoutId);
115
- };
116
- const resetInactivityTimeout = () => {
117
- if (inactivityTimeoutId)
118
- clearTimeout(inactivityTimeoutId);
119
- inactivityTimeoutId = setTimeout(() => {
120
- clearTimeouts();
121
- child.kill('SIGTERM');
122
- reject(new Error(`Command timed out due to ${inactivityTimeout / 1000}s of inactivity`));
123
- }, inactivityTimeout);
124
- };
125
- // Set global timeout
126
- globalTimeoutId = setTimeout(() => {
127
- clearTimeouts();
128
- child.kill('SIGTERM');
129
- reject(new Error(`Command exceeded maximum timeout of ${maxTimeout / 1000}s`));
130
- }, maxTimeout);
131
- // Start inactivity timeout
132
- resetInactivityTimeout();
133
- child.stdout?.on('data', data => {
134
- const chunk = data.toString();
135
- stdout += chunk;
136
- if (onOutput) {
137
- onOutput(chunk);
138
- }
139
- // Reset inactivity timeout on any output
140
- resetInactivityTimeout();
141
- });
142
- child.stderr?.on('data', data => {
143
- const chunk = data.toString();
144
- stderr += chunk;
145
- if (onOutput) {
146
- onOutput(chunk);
147
- }
148
- // Reset inactivity timeout on any output (pre-commit hooks often write to stderr)
149
- resetInactivityTimeout();
150
- });
151
- child.on('close', code => {
152
- clearTimeouts();
153
- if (code === 0) {
154
- resolve({ stdout, stderr });
155
- }
156
- else {
157
- reject(new Error(`Command failed with exit code ${code}: ${stderr}`));
158
- }
159
- });
160
- child.on('error', error => {
161
- clearTimeouts();
162
- reject(error);
163
- });
164
- });
165
- }
166
- /**
167
- * Execute git commit with smart timeout handling for pre-commit hooks
168
- */
169
- export async function execGitCommitAsync(commitMessage, onOutput, isTestMode = false, mockExecHandler) {
170
- const command = `git commit -m "${commitMessage}"`;
171
- return execStreamAsync(command, onOutput, isTestMode, mockExecHandler);
172
- }
173
- /**
174
- * Mock execution handler for testing
175
- */
176
- export async function createMockExecHandler(addMessage) {
177
- return async (command) => {
178
- if (addMessage) {
179
- addMessage('info', `🧪 TEST MODE: Simulating command: ${command}`);
180
- }
181
- // Simulate delays
182
- await new Promise(resolve => setTimeout(resolve, 500));
183
- // Git commands
184
- if (command.includes('git branch --show-current')) {
185
- return { stdout: 'feature/test-branch', stderr: '' };
186
- }
187
- if (command.includes('gh repo view')) {
188
- return { stdout: 'main', stderr: '' };
189
- }
190
- if (command.includes('git checkout -b')) {
191
- const branchName = command.split(' ').pop();
192
- return { stdout: `Switched to a new branch '${branchName}'`, stderr: '' };
193
- }
194
- if (command.includes('git checkout main')) {
195
- return { stdout: 'Switched to branch main', stderr: '' };
196
- }
197
- if (command.includes('git pull')) {
198
- return { stdout: 'Already up to date.', stderr: '' };
199
- }
200
- if (command.includes('git add .')) {
201
- return { stdout: '', stderr: '' };
202
- }
203
- if (command.includes('git diff --cached --quiet')) {
204
- throw new Error('Changes to commit'); // Simulate changes exist
205
- }
206
- if (command.includes('git commit')) {
207
- return { stdout: '[feature/test abc123] feat: mock commit', stderr: '' };
208
- }
209
- if (command.includes('git push')) {
210
- const branchName = command.includes('feature/') ? 'feature/test-branch' : 'current-branch';
211
- return {
212
- stdout: `To github.com:test/repo.git\n * [new branch] ${branchName} -> ${branchName}\nBranch '${branchName}' set up to track remote branch '${branchName}' from 'origin'.`,
213
- stderr: '',
214
- };
215
- }
216
- // CLI version checks
217
- if (command.includes('claude --version')) {
218
- return { stdout: 'claude version 2.1.3', stderr: '' };
219
- }
220
- if (command.includes('gh --version')) {
221
- return { stdout: 'gh version 2.40.1', stderr: '' };
222
- }
223
- // GitHub commands
224
- if (command.includes('gh pr create')) {
225
- return { stdout: 'https://github.com/test/repo/pull/123', stderr: '' };
226
- }
227
- // Claude commands
228
- if (command.includes('Generate a conventional commit')) {
229
- const taskTitle = command.includes('login')
230
- ? 'login component'
231
- : command.includes('JWT')
232
- ? 'JWT authentication'
233
- : command.includes('logout')
234
- ? 'logout functionality'
235
- : 'test feature';
236
- return { stdout: `feat(auth): add ${taskTitle}`, stderr: '' };
237
- }
238
- if (command.includes('Generate a comprehensive GitHub Pull Request')) {
239
- return {
240
- stdout: `## Summary\nImplemented mock authentication system with all required functionality.\n\n## Tasks Completed\n- [x] Mock login component\n- [x] Mock JWT authentication\n- [x] Mock logout functionality\n\n## Testing\nTest the mock implementation thoroughly.\n\n## Notes\nThis is a test implementation.`,
241
- stderr: '',
242
- };
243
- }
244
- if (command.startsWith('claude -p --dangerously-skip-permissions "') ||
245
- command.startsWith('claude -p "') ||
246
- command.startsWith('claude "')) {
247
- // Handle task content and other prompts
248
- const taskTitle = command.includes('login')
249
- ? 'Login Component'
250
- : command.includes('JWT')
251
- ? 'JWT Authentication'
252
- : command.includes('logout')
253
- ? 'Logout Functionality'
254
- : 'Test Feature';
255
- return {
256
- stdout: `# ${taskTitle} Implementation\n\n## Files Created/Modified\n- src/components/auth/${taskTitle.replace(' ', '')}.tsx\n- src/hooks/useAuth.ts\n- src/utils/auth.ts\n\n## Implementation Details\nCreated comprehensive ${taskTitle.toLowerCase()} with modern React patterns, TypeScript support, and proper error handling.\n\n## Testing\nAdded unit tests and integration tests for the ${taskTitle.toLowerCase()}.`,
257
- stderr: '',
258
- };
259
- }
260
- // Default response
261
- return { stdout: 'Mock command executed successfully', stderr: '' };
262
- };
263
- }
264
- //# sourceMappingURL=command-execution.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-execution.js","sourceRoot":"","sources":["../../src/utils/command-execution.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import { type Status } from './status-parser.js';
2
- /**
3
- * Types of commands in the CLI
4
- */
5
- export type CommandType = 'contextual' | 'direct' | 'global';
6
- /**
7
- * Represents a parsed command with its components
8
- */
9
- export interface ParsedCommand {
10
- /**
11
- * The type of command (contextual, direct, or global)
12
- */
13
- type: CommandType;
14
- /**
15
- * The base command (e.g., 'show', 'task', 'build')
16
- */
17
- command: string;
18
- /**
19
- * The subcommand if any (e.g., 'list' in 'task list')
20
- */
21
- subcommand?: string;
22
- /**
23
- * Requirement ID if specified (normalized to internal format)
24
- */
25
- requirementId?: string;
26
- /**
27
- * Additional arguments after command/subcommand/requirementId
28
- */
29
- args: string[];
30
- /**
31
- * Parsed status filters if any
32
- */
33
- statusFilters?: Status[];
34
- /**
35
- * Raw input for reference
36
- */
37
- rawInput: string;
38
- /**
39
- * Any parsing errors or warnings
40
- */
41
- errors?: string[];
42
- }
43
- /**
44
- * Validates and normalizes a requirement ID
45
- * Accepts formats: REQ-123, req-123, 123, or UUID format
46
- *
47
- * @param id - The requirement ID to validate
48
- * @returns Normalized requirement ID or null if invalid
49
- */
50
- export declare function validateRequirementId(id: string): string | null;
51
- /**
52
- * Extracts status filters from command arguments
53
- *
54
- * @param args - Command arguments
55
- * @returns Object with filtered args and extracted status filters
56
- */
57
- export declare function extractStatusFilters(args: string[]): {
58
- filteredArgs: string[];
59
- statusFilters?: Status[];
60
- statusError?: string;
61
- };
62
- /**
63
- * Parses a command string into its components
64
- *
65
- * @param input - The raw command input
66
- * @param hasContext - Whether there's an active requirement context
67
- * @returns ParsedCommand object
68
- */
69
- export declare function parseCommand(input: string, hasContext?: boolean): ParsedCommand;
70
- /**
71
- * Formats a requirement ID for display (e.g., req_123 -> REQ-123)
72
- *
73
- * @param requirementId - Internal requirement ID
74
- * @returns Formatted ID for display
75
- */
76
- export declare function formatRequirementIdForDisplay(requirementId: string): string;
77
- /**
78
- * Suggests commands based on partial input
79
- *
80
- * @param partial - Partial command input
81
- * @param hasContext - Whether there's an active context
82
- * @returns Array of suggested commands
83
- */
84
- export declare function suggestCommands(partial: string, hasContext?: boolean): string[];
85
- //# sourceMappingURL=command-parser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-parser.d.ts","sourceRoot":"","sources":["../../src/utils/command-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AA4CD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgC/D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAgDA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,aAAa,CAsItF;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAM3E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,EAAE,CAyBtF"}