@astroanywhere/agent 0.1.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 (203) hide show
  1. package/LICENSE +76 -0
  2. package/README.md +178 -0
  3. package/dist/cli.d.ts +15 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +401 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/index.d.ts +9 -0
  8. package/dist/commands/index.d.ts.map +1 -0
  9. package/dist/commands/index.js +9 -0
  10. package/dist/commands/index.js.map +1 -0
  11. package/dist/commands/mcp.d.ts +16 -0
  12. package/dist/commands/mcp.d.ts.map +1 -0
  13. package/dist/commands/mcp.js +19 -0
  14. package/dist/commands/mcp.js.map +1 -0
  15. package/dist/commands/setup.d.ts +20 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +585 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/start.d.ts +16 -0
  20. package/dist/commands/start.d.ts.map +1 -0
  21. package/dist/commands/start.js +638 -0
  22. package/dist/commands/start.js.map +1 -0
  23. package/dist/commands/status.d.ts +5 -0
  24. package/dist/commands/status.d.ts.map +1 -0
  25. package/dist/commands/status.js +63 -0
  26. package/dist/commands/status.js.map +1 -0
  27. package/dist/commands/stop.d.ts +5 -0
  28. package/dist/commands/stop.d.ts.map +1 -0
  29. package/dist/commands/stop.js +85 -0
  30. package/dist/commands/stop.js.map +1 -0
  31. package/dist/execution/direct-strategy.d.ts +18 -0
  32. package/dist/execution/direct-strategy.d.ts.map +1 -0
  33. package/dist/execution/direct-strategy.js +156 -0
  34. package/dist/execution/direct-strategy.js.map +1 -0
  35. package/dist/execution/docker-strategy.d.ts +26 -0
  36. package/dist/execution/docker-strategy.d.ts.map +1 -0
  37. package/dist/execution/docker-strategy.js +222 -0
  38. package/dist/execution/docker-strategy.js.map +1 -0
  39. package/dist/execution/index.d.ts +14 -0
  40. package/dist/execution/index.d.ts.map +1 -0
  41. package/dist/execution/index.js +13 -0
  42. package/dist/execution/index.js.map +1 -0
  43. package/dist/execution/kubernetes-exec-strategy.d.ts +23 -0
  44. package/dist/execution/kubernetes-exec-strategy.d.ts.map +1 -0
  45. package/dist/execution/kubernetes-exec-strategy.js +232 -0
  46. package/dist/execution/kubernetes-exec-strategy.js.map +1 -0
  47. package/dist/execution/registry.d.ts +41 -0
  48. package/dist/execution/registry.d.ts.map +1 -0
  49. package/dist/execution/registry.js +84 -0
  50. package/dist/execution/registry.js.map +1 -0
  51. package/dist/execution/slurm-strategy.d.ts +22 -0
  52. package/dist/execution/slurm-strategy.d.ts.map +1 -0
  53. package/dist/execution/slurm-strategy.js +219 -0
  54. package/dist/execution/slurm-strategy.js.map +1 -0
  55. package/dist/execution/types.d.ts +72 -0
  56. package/dist/execution/types.d.ts.map +1 -0
  57. package/dist/execution/types.js +10 -0
  58. package/dist/execution/types.js.map +1 -0
  59. package/dist/index.d.ts +22 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +22 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/lib/api-client.d.ts +35 -0
  64. package/dist/lib/api-client.d.ts.map +1 -0
  65. package/dist/lib/api-client.js +126 -0
  66. package/dist/lib/api-client.js.map +1 -0
  67. package/dist/lib/config.d.ts +174 -0
  68. package/dist/lib/config.d.ts.map +1 -0
  69. package/dist/lib/config.js +399 -0
  70. package/dist/lib/config.js.map +1 -0
  71. package/dist/lib/copy-worktree.d.ts +73 -0
  72. package/dist/lib/copy-worktree.d.ts.map +1 -0
  73. package/dist/lib/copy-worktree.js +374 -0
  74. package/dist/lib/copy-worktree.js.map +1 -0
  75. package/dist/lib/git-pr.d.ts +63 -0
  76. package/dist/lib/git-pr.d.ts.map +1 -0
  77. package/dist/lib/git-pr.js +224 -0
  78. package/dist/lib/git-pr.js.map +1 -0
  79. package/dist/lib/hardware-id.d.ts +25 -0
  80. package/dist/lib/hardware-id.d.ts.map +1 -0
  81. package/dist/lib/hardware-id.js +186 -0
  82. package/dist/lib/hardware-id.js.map +1 -0
  83. package/dist/lib/hpc-context.d.ts +35 -0
  84. package/dist/lib/hpc-context.d.ts.map +1 -0
  85. package/dist/lib/hpc-context.js +167 -0
  86. package/dist/lib/hpc-context.js.map +1 -0
  87. package/dist/lib/prompt-templates.d.ts +195 -0
  88. package/dist/lib/prompt-templates.d.ts.map +1 -0
  89. package/dist/lib/prompt-templates.js +353 -0
  90. package/dist/lib/prompt-templates.js.map +1 -0
  91. package/dist/lib/providers.d.ts +27 -0
  92. package/dist/lib/providers.d.ts.map +1 -0
  93. package/dist/lib/providers.js +372 -0
  94. package/dist/lib/providers.js.map +1 -0
  95. package/dist/lib/repo-context.d.ts +18 -0
  96. package/dist/lib/repo-context.d.ts.map +1 -0
  97. package/dist/lib/repo-context.js +61 -0
  98. package/dist/lib/repo-context.js.map +1 -0
  99. package/dist/lib/repo-utils.d.ts +35 -0
  100. package/dist/lib/repo-utils.d.ts.map +1 -0
  101. package/dist/lib/repo-utils.js +222 -0
  102. package/dist/lib/repo-utils.js.map +1 -0
  103. package/dist/lib/resources.d.ts +17 -0
  104. package/dist/lib/resources.d.ts.map +1 -0
  105. package/dist/lib/resources.js +227 -0
  106. package/dist/lib/resources.js.map +1 -0
  107. package/dist/lib/slurm-detect.d.ts +15 -0
  108. package/dist/lib/slurm-detect.d.ts.map +1 -0
  109. package/dist/lib/slurm-detect.js +148 -0
  110. package/dist/lib/slurm-detect.js.map +1 -0
  111. package/dist/lib/slurm-executor.d.ts +70 -0
  112. package/dist/lib/slurm-executor.d.ts.map +1 -0
  113. package/dist/lib/slurm-executor.js +402 -0
  114. package/dist/lib/slurm-executor.js.map +1 -0
  115. package/dist/lib/slurm-job-monitor.d.ts +52 -0
  116. package/dist/lib/slurm-job-monitor.d.ts.map +1 -0
  117. package/dist/lib/slurm-job-monitor.js +212 -0
  118. package/dist/lib/slurm-job-monitor.js.map +1 -0
  119. package/dist/lib/ssh-discovery.d.ts +17 -0
  120. package/dist/lib/ssh-discovery.d.ts.map +1 -0
  121. package/dist/lib/ssh-discovery.js +287 -0
  122. package/dist/lib/ssh-discovery.js.map +1 -0
  123. package/dist/lib/ssh-installer.d.ts +69 -0
  124. package/dist/lib/ssh-installer.d.ts.map +1 -0
  125. package/dist/lib/ssh-installer.js +230 -0
  126. package/dist/lib/ssh-installer.js.map +1 -0
  127. package/dist/lib/streaming-prompt.d.ts +48 -0
  128. package/dist/lib/streaming-prompt.d.ts.map +1 -0
  129. package/dist/lib/streaming-prompt.js +91 -0
  130. package/dist/lib/streaming-prompt.js.map +1 -0
  131. package/dist/lib/task-executor.d.ts +114 -0
  132. package/dist/lib/task-executor.d.ts.map +1 -0
  133. package/dist/lib/task-executor.js +753 -0
  134. package/dist/lib/task-executor.js.map +1 -0
  135. package/dist/lib/websocket-client.d.ts +200 -0
  136. package/dist/lib/websocket-client.d.ts.map +1 -0
  137. package/dist/lib/websocket-client.js +781 -0
  138. package/dist/lib/websocket-client.js.map +1 -0
  139. package/dist/lib/workdir-safety.d.ts +63 -0
  140. package/dist/lib/workdir-safety.d.ts.map +1 -0
  141. package/dist/lib/workdir-safety.js +247 -0
  142. package/dist/lib/workdir-safety.js.map +1 -0
  143. package/dist/lib/worktree-include.d.ts +14 -0
  144. package/dist/lib/worktree-include.d.ts.map +1 -0
  145. package/dist/lib/worktree-include.js +68 -0
  146. package/dist/lib/worktree-include.js.map +1 -0
  147. package/dist/lib/worktree-setup.d.ts +18 -0
  148. package/dist/lib/worktree-setup.d.ts.map +1 -0
  149. package/dist/lib/worktree-setup.js +60 -0
  150. package/dist/lib/worktree-setup.js.map +1 -0
  151. package/dist/lib/worktree.d.ts +37 -0
  152. package/dist/lib/worktree.d.ts.map +1 -0
  153. package/dist/lib/worktree.js +411 -0
  154. package/dist/lib/worktree.js.map +1 -0
  155. package/dist/mcp/index.d.ts +8 -0
  156. package/dist/mcp/index.d.ts.map +1 -0
  157. package/dist/mcp/index.js +8 -0
  158. package/dist/mcp/index.js.map +1 -0
  159. package/dist/mcp/server.d.ts +45 -0
  160. package/dist/mcp/server.d.ts.map +1 -0
  161. package/dist/mcp/server.js +153 -0
  162. package/dist/mcp/server.js.map +1 -0
  163. package/dist/mcp/session-bridge.d.ts +87 -0
  164. package/dist/mcp/session-bridge.d.ts.map +1 -0
  165. package/dist/mcp/session-bridge.js +317 -0
  166. package/dist/mcp/session-bridge.js.map +1 -0
  167. package/dist/mcp/tools.d.ts +70 -0
  168. package/dist/mcp/tools.d.ts.map +1 -0
  169. package/dist/mcp/tools.js +234 -0
  170. package/dist/mcp/tools.js.map +1 -0
  171. package/dist/mcp/types.d.ts +197 -0
  172. package/dist/mcp/types.d.ts.map +1 -0
  173. package/dist/mcp/types.js +16 -0
  174. package/dist/mcp/types.js.map +1 -0
  175. package/dist/providers/base-adapter.d.ts +56 -0
  176. package/dist/providers/base-adapter.d.ts.map +1 -0
  177. package/dist/providers/base-adapter.js +5 -0
  178. package/dist/providers/base-adapter.js.map +1 -0
  179. package/dist/providers/claude-code-adapter.d.ts +27 -0
  180. package/dist/providers/claude-code-adapter.d.ts.map +1 -0
  181. package/dist/providers/claude-code-adapter.js +298 -0
  182. package/dist/providers/claude-code-adapter.js.map +1 -0
  183. package/dist/providers/claude-sdk-adapter.d.ts +60 -0
  184. package/dist/providers/claude-sdk-adapter.d.ts.map +1 -0
  185. package/dist/providers/claude-sdk-adapter.js +632 -0
  186. package/dist/providers/claude-sdk-adapter.js.map +1 -0
  187. package/dist/providers/codex-adapter.d.ts +21 -0
  188. package/dist/providers/codex-adapter.d.ts.map +1 -0
  189. package/dist/providers/codex-adapter.js +197 -0
  190. package/dist/providers/codex-adapter.js.map +1 -0
  191. package/dist/providers/index.d.ts +26 -0
  192. package/dist/providers/index.d.ts.map +1 -0
  193. package/dist/providers/index.js +58 -0
  194. package/dist/providers/index.js.map +1 -0
  195. package/dist/providers/slurm-adapter.d.ts +26 -0
  196. package/dist/providers/slurm-adapter.d.ts.map +1 -0
  197. package/dist/providers/slurm-adapter.js +146 -0
  198. package/dist/providers/slurm-adapter.js.map +1 -0
  199. package/dist/types.d.ts +592 -0
  200. package/dist/types.d.ts.map +1 -0
  201. package/dist/types.js +5 -0
  202. package/dist/types.js.map +1 -0
  203. package/package.json +77 -0
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Agent provider detection and management
3
+ */
4
+ import { exec } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { access, constants, readFile } from 'node:fs/promises';
7
+ import { join } from 'node:path';
8
+ import { homedir } from 'node:os';
9
+ import { detectSlurm } from './slurm-detect.js';
10
+ const execAsync = promisify(exec);
11
+ /**
12
+ * Check if a command exists in PATH
13
+ */
14
+ async function commandExists(command) {
15
+ try {
16
+ const platform = process.platform;
17
+ const checkCommand = platform === 'win32' ? `where ${command}` : `which ${command}`;
18
+ await execAsync(checkCommand, { timeout: 5000 });
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Check if a file exists and is executable
27
+ */
28
+ async function fileExecutable(path) {
29
+ try {
30
+ await access(path, constants.X_OK);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Get the version of a command
39
+ */
40
+ async function getCommandVersion(command, versionArg = '--version') {
41
+ try {
42
+ const { stdout } = await execAsync(`${command} ${versionArg}`, { timeout: 5000 });
43
+ // Extract version number from output
44
+ const versionMatch = stdout.match(/(\d+\.\d+(?:\.\d+)?)/);
45
+ return versionMatch?.[1] ?? stdout.trim().split('\n')[0] ?? null;
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * Get the path of a command
53
+ */
54
+ async function getCommandPath(command) {
55
+ try {
56
+ const platform = process.platform;
57
+ const whichCommand = platform === 'win32' ? 'where' : 'which';
58
+ const { stdout } = await execAsync(`${whichCommand} ${command}`, { timeout: 5000 });
59
+ return stdout.trim().split('\n')[0] ?? null;
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ /**
66
+ * Common installation paths for Claude Code
67
+ * These are checked if 'which claude' fails (e.g., ~/.local/bin not in PATH)
68
+ */
69
+ function getClaudeCodePaths() {
70
+ const home = homedir();
71
+ const platform = process.platform;
72
+ const paths = [];
73
+ // Standard installation path for Claude Code
74
+ paths.push(join(home, '.local', 'bin', 'claude'));
75
+ // npm global installs
76
+ paths.push(join(home, '.npm', 'bin', 'claude'));
77
+ paths.push(join(home, '.npm-global', 'bin', 'claude'));
78
+ // Platform-specific paths
79
+ if (platform === 'darwin') {
80
+ // macOS: Homebrew and user local
81
+ paths.push('/usr/local/bin/claude');
82
+ paths.push('/opt/homebrew/bin/claude');
83
+ paths.push(join(home, 'Library', 'Application Support', 'claude', 'bin', 'claude'));
84
+ }
85
+ else if (platform === 'win32') {
86
+ // Windows: AppData locations
87
+ const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
88
+ const localAppData = process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local');
89
+ paths.push(join(appData, 'claude', 'bin', 'claude.exe'));
90
+ paths.push(join(localAppData, 'claude', 'bin', 'claude.exe'));
91
+ paths.push(join(appData, 'npm', 'claude.cmd'));
92
+ }
93
+ else {
94
+ // Linux: Standard locations
95
+ paths.push('/usr/local/bin/claude');
96
+ paths.push('/usr/bin/claude');
97
+ paths.push(join(home, '.local', 'share', 'claude', 'bin', 'claude'));
98
+ }
99
+ return paths;
100
+ }
101
+ /**
102
+ * Detect Claude Code installation
103
+ */
104
+ async function detectClaudeCode() {
105
+ // First, check if 'claude' is in PATH
106
+ const existsInPath = await commandExists('claude');
107
+ if (existsInPath) {
108
+ const path = await getCommandPath('claude');
109
+ const version = await getCommandVersion('claude', '--version');
110
+ return {
111
+ type: 'claude-code',
112
+ name: 'Claude Code',
113
+ version,
114
+ path: path ?? 'claude',
115
+ available: true,
116
+ capabilities: {
117
+ streaming: true,
118
+ tools: true,
119
+ multiTurn: true,
120
+ maxConcurrentTasks: 1, // Claude Code runs one task at a time per instance
121
+ },
122
+ };
123
+ }
124
+ // If not in PATH, check common installation locations
125
+ const commonPaths = getClaudeCodePaths();
126
+ for (const claudePath of commonPaths) {
127
+ const isExecutable = await fileExecutable(claudePath);
128
+ if (isExecutable) {
129
+ // Found Claude Code at this path, get version
130
+ const version = await getCommandVersion(claudePath, '--version');
131
+ return {
132
+ type: 'claude-code',
133
+ name: 'Claude Code',
134
+ version,
135
+ path: claudePath,
136
+ available: true,
137
+ capabilities: {
138
+ streaming: true,
139
+ tools: true,
140
+ multiTurn: true,
141
+ maxConcurrentTasks: 1,
142
+ },
143
+ };
144
+ }
145
+ }
146
+ return null;
147
+ }
148
+ /**
149
+ * Common installation paths for Codex CLI
150
+ */
151
+ function getCodexPaths() {
152
+ const home = homedir();
153
+ const platform = process.platform;
154
+ const paths = [];
155
+ // npm global installs (most common for Codex)
156
+ paths.push(join(home, '.npm', 'bin', 'codex'));
157
+ paths.push(join(home, '.npm-global', 'bin', 'codex'));
158
+ paths.push(join(home, '.local', 'bin', 'codex'));
159
+ // npx / pnpm / yarn global locations
160
+ paths.push(join(home, '.yarn', 'bin', 'codex'));
161
+ paths.push(join(home, '.pnpm-global', 'bin', 'codex'));
162
+ if (platform === 'darwin') {
163
+ paths.push('/usr/local/bin/codex');
164
+ paths.push('/opt/homebrew/bin/codex');
165
+ }
166
+ else if (platform === 'win32') {
167
+ const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
168
+ paths.push(join(appData, 'npm', 'codex.cmd'));
169
+ paths.push(join(appData, 'npm', 'codex'));
170
+ }
171
+ else {
172
+ paths.push('/usr/local/bin/codex');
173
+ paths.push('/usr/bin/codex');
174
+ }
175
+ return paths;
176
+ }
177
+ /**
178
+ * Detect OpenAI Codex CLI installation
179
+ */
180
+ async function detectCodex() {
181
+ // First, check if 'codex' is in PATH
182
+ const exists = await commandExists('codex');
183
+ if (exists) {
184
+ const path = await getCommandPath('codex');
185
+ const version = await getCommandVersion('codex', '--version');
186
+ return {
187
+ type: 'codex',
188
+ name: 'OpenAI Codex',
189
+ version,
190
+ path: path ?? 'codex',
191
+ available: true,
192
+ capabilities: {
193
+ streaming: true,
194
+ tools: true,
195
+ multiTurn: true,
196
+ maxConcurrentTasks: 1,
197
+ },
198
+ };
199
+ }
200
+ // If not in PATH, check common installation locations
201
+ const commonPaths = getCodexPaths();
202
+ for (const codexPath of commonPaths) {
203
+ const isExecutable = await fileExecutable(codexPath);
204
+ if (isExecutable) {
205
+ const version = await getCommandVersion(codexPath, '--version');
206
+ return {
207
+ type: 'codex',
208
+ name: 'OpenAI Codex',
209
+ version,
210
+ path: codexPath,
211
+ available: true,
212
+ capabilities: {
213
+ streaming: true,
214
+ tools: true,
215
+ multiTurn: true,
216
+ maxConcurrentTasks: 1,
217
+ },
218
+ };
219
+ }
220
+ }
221
+ return null;
222
+ }
223
+ /**
224
+ * Check for custom provider configuration
225
+ */
226
+ async function detectCustomProviders() {
227
+ const configPath = join(homedir(), '.astro', 'providers.json');
228
+ try {
229
+ const content = await readFile(configPath, 'utf-8');
230
+ const config = JSON.parse(content);
231
+ const providers = [];
232
+ for (const provider of config) {
233
+ const executable = await fileExecutable(provider.path);
234
+ providers.push({
235
+ type: 'custom',
236
+ name: provider.name,
237
+ version: provider.version ?? null,
238
+ path: provider.path,
239
+ available: executable,
240
+ capabilities: provider.capabilities ?? {
241
+ streaming: false,
242
+ tools: false,
243
+ multiTurn: false,
244
+ maxConcurrentTasks: 1,
245
+ },
246
+ });
247
+ }
248
+ return providers;
249
+ }
250
+ catch {
251
+ // No custom provider config or invalid config
252
+ return [];
253
+ }
254
+ }
255
+ /**
256
+ * Detect HPC capability (Slurm on this machine).
257
+ * Returns metadata to annotate Claude provider rather than registering
258
+ * Slurm as a standalone provider.
259
+ */
260
+ async function detectHpcCapability() {
261
+ try {
262
+ const info = await detectSlurm();
263
+ if (!info.available)
264
+ return null;
265
+ return {
266
+ clusterName: info.clusterName,
267
+ partitions: info.partitions,
268
+ defaultPartition: info.defaultPartition,
269
+ accounts: info.accounts,
270
+ };
271
+ }
272
+ catch {
273
+ return null;
274
+ }
275
+ }
276
+ /**
277
+ * Detect Claude Agent SDK availability (in-process, uses OAuth from claude CLI login)
278
+ */
279
+ async function detectClaudeSdk() {
280
+ try {
281
+ // Try dynamic import to check if SDK is available
282
+ await import('@anthropic-ai/claude-agent-sdk');
283
+ return {
284
+ type: 'claude-sdk',
285
+ name: 'Claude Agent SDK',
286
+ version: null,
287
+ path: '@anthropic-ai/claude-agent-sdk',
288
+ available: true,
289
+ capabilities: {
290
+ streaming: true,
291
+ tools: true,
292
+ multiTurn: true,
293
+ maxConcurrentTasks: 4,
294
+ },
295
+ };
296
+ }
297
+ catch {
298
+ return null;
299
+ }
300
+ }
301
+ /**
302
+ * Detect all available providers on the system.
303
+ * Slurm is no longer a standalone provider — when detected, it annotates
304
+ * the Claude provider with hpcCapability metadata instead.
305
+ */
306
+ export async function detectProviders() {
307
+ const detectionResults = await Promise.all([
308
+ detectClaudeSdk(),
309
+ detectClaudeCode(),
310
+ detectCodex(),
311
+ detectHpcCapability(),
312
+ detectCustomProviders(),
313
+ ]);
314
+ const providers = [];
315
+ const [claudeSdk, claudeCode, codex, hpcCapability, customProviders] = detectionResults;
316
+ // Add Claude provider (SDK preferred over CLI — runs in-process with lower overhead)
317
+ if (claudeSdk) {
318
+ if (hpcCapability) {
319
+ claudeSdk.hpcCapability = hpcCapability;
320
+ }
321
+ providers.push(claudeSdk);
322
+ }
323
+ else if (claudeCode) {
324
+ if (hpcCapability) {
325
+ claudeCode.hpcCapability = hpcCapability;
326
+ }
327
+ providers.push(claudeCode);
328
+ }
329
+ if (codex) {
330
+ providers.push(codex);
331
+ }
332
+ // Add custom providers
333
+ providers.push(...customProviders);
334
+ return providers;
335
+ }
336
+ /**
337
+ * Get a specific provider by type
338
+ */
339
+ export async function getProvider(type) {
340
+ const providers = await detectProviders();
341
+ return providers.find((p) => p.type === type) ?? null;
342
+ }
343
+ /**
344
+ * Check if a specific provider is available
345
+ */
346
+ export async function isProviderAvailable(type) {
347
+ const provider = await getProvider(type);
348
+ return provider?.available ?? false;
349
+ }
350
+ /**
351
+ * Format provider info for display
352
+ */
353
+ export function formatProviderInfo(provider) {
354
+ const status = provider.available ? '✓' : '✗';
355
+ const version = provider.version ? `v${provider.version}` : 'unknown version';
356
+ return `${status} ${provider.name} (${version}) - ${provider.path}`;
357
+ }
358
+ /**
359
+ * Format all providers summary
360
+ */
361
+ export function formatProvidersSummary(providers) {
362
+ if (providers.length === 0) {
363
+ return 'No agent providers detected. Install Claude Code or Codex to get started.';
364
+ }
365
+ const lines = ['Detected Agent Providers:', ''];
366
+ for (const provider of providers) {
367
+ lines.push(` ${formatProviderInfo(provider)}`);
368
+ lines.push(` Capabilities: streaming=${provider.capabilities.streaming}, tools=${provider.capabilities.tools}, maxTasks=${provider.capabilities.maxConcurrentTasks}`);
369
+ }
370
+ return lines.join('\n');
371
+ }
372
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/lib/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Repo Context Reader
3
+ *
4
+ * Reads key files from a working directory and returns their contents
5
+ * for injection into plan generation prompts.
6
+ */
7
+ export interface RepoContextResult {
8
+ claudeMd?: string;
9
+ readmeMd?: string;
10
+ packageInfo?: string;
11
+ fileTreeSummary?: string;
12
+ }
13
+ /**
14
+ * Read key files from a working directory for context injection.
15
+ * When workingDirectory is empty/falsy, only the file tree is used (remote repo case).
16
+ */
17
+ export declare function readRepoContext(workingDirectory: string, fileTree?: string[]): RepoContextResult;
18
+ //# sourceMappingURL=repo-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-context.d.ts","sourceRoot":"","sources":["../../src/lib/repo-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAeD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAmChG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Repo Context Reader
3
+ *
4
+ * Reads key files from a working directory and returns their contents
5
+ * for injection into plan generation prompts.
6
+ */
7
+ import { readFileSync, existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ const FILE_CAP = 15_000; // 15KB cap for CLAUDE.md and README
10
+ const PKG_CAP = 5_000; // 5KB cap for package metadata
11
+ const FILE_TREE_CAP = 200; // max files to show in tree summary
12
+ function readFileCapped(path, cap) {
13
+ if (!existsSync(path))
14
+ return undefined;
15
+ try {
16
+ const content = readFileSync(path, 'utf-8');
17
+ if (content.length > cap) {
18
+ return content.slice(0, cap) + '\n\n[... truncated ...]';
19
+ }
20
+ return content;
21
+ }
22
+ catch {
23
+ return undefined;
24
+ }
25
+ }
26
+ /**
27
+ * Read key files from a working directory for context injection.
28
+ * When workingDirectory is empty/falsy, only the file tree is used (remote repo case).
29
+ */
30
+ export function readRepoContext(workingDirectory, fileTree) {
31
+ const result = {};
32
+ // Only read files if we have a valid local working directory
33
+ if (workingDirectory && existsSync(workingDirectory)) {
34
+ // Read CLAUDE.md
35
+ result.claudeMd = readFileCapped(join(workingDirectory, 'CLAUDE.md'), FILE_CAP);
36
+ // Read README.md (try both cases)
37
+ result.readmeMd =
38
+ readFileCapped(join(workingDirectory, 'README.md'), FILE_CAP) ??
39
+ readFileCapped(join(workingDirectory, 'readme.md'), FILE_CAP);
40
+ // Read first package metadata found
41
+ const packageFiles = ['package.json', 'pyproject.toml', 'Cargo.toml', 'go.mod'];
42
+ for (const pkg of packageFiles) {
43
+ const content = readFileCapped(join(workingDirectory, pkg), PKG_CAP);
44
+ if (content) {
45
+ result.packageInfo = `# ${pkg}\n${content}`;
46
+ break;
47
+ }
48
+ }
49
+ }
50
+ // Format file tree summary
51
+ if (fileTree && fileTree.length > 0) {
52
+ const total = fileTree.length;
53
+ const shown = fileTree.slice(0, FILE_TREE_CAP);
54
+ const lines = shown.join('\n');
55
+ result.fileTreeSummary = total > FILE_TREE_CAP
56
+ ? `${lines}\n\n... and ${total - FILE_TREE_CAP} more files (${total} total)`
57
+ : lines;
58
+ }
59
+ return result;
60
+ }
61
+ //# sourceMappingURL=repo-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-context.js","sourceRoot":"","sources":["../../src/lib/repo-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,oCAAoC;AAC5D,MAAM,OAAO,GAAG,KAAK,CAAA,CAAG,+BAA+B;AACvD,MAAM,aAAa,GAAG,GAAG,CAAA,CAAC,oCAAoC;AAS9D,SAAS,cAAc,CAAC,IAAY,EAAE,GAAW;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,yBAAyB,CAAA;QAC1D,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,gBAAwB,EAAE,QAAmB;IAC3E,MAAM,MAAM,GAAsB,EAAE,CAAA;IAEpC,6DAA6D;IAC7D,IAAI,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrD,iBAAiB;QACjB,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAA;QAE/E,kCAAkC;QAClC,MAAM,CAAC,QAAQ;YACb,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC;gBAC7D,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAA;QAE/D,oCAAoC;QACpC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC/E,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;YACpE,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,WAAW,GAAG,KAAK,GAAG,KAAK,OAAO,EAAE,CAAA;gBAC3C,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAA;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,MAAM,CAAC,eAAe,GAAG,KAAK,GAAG,aAAa;YAC5C,CAAC,CAAC,GAAG,KAAK,eAAe,KAAK,GAAG,aAAa,gBAAgB,KAAK,SAAS;YAC5E,CAAC,CAAC,KAAK,CAAA;IACX,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Repo utilities for agent runner.
3
+ *
4
+ * Lightweight versions of the core repo setup logic (isGitRepo, getFileTree,
5
+ * getGitRemoteUrl) that run on remote machines. Skips .gitignore/CLAUDE.md
6
+ * generation since the repo already exists on the remote machine.
7
+ */
8
+ export declare function isGitRepo(dir: string): boolean;
9
+ export declare function getFileTree(dir: string): string[];
10
+ export declare function getGitRemoteUrl(dir: string): string | undefined;
11
+ /** Key file contents read from the repo for context injection */
12
+ export interface RepoKeyFiles {
13
+ claudeMd?: string;
14
+ readmeMd?: string;
15
+ packageInfo?: string;
16
+ }
17
+ export interface LocalRepoSetupResult {
18
+ success: boolean;
19
+ workingDirectory?: string;
20
+ fileTree?: string[];
21
+ repository?: string;
22
+ needsGitInit?: boolean;
23
+ keyFiles?: RepoKeyFiles;
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Run repo setup locally on the agent runner's machine.
28
+ * Handles existing directories and cloning repos from URL.
29
+ */
30
+ export declare function localRepoSetup(options: {
31
+ workingDirectory?: string;
32
+ repository?: string;
33
+ projectId?: string;
34
+ }): LocalRepoSetupResult;
35
+ //# sourceMappingURL=repo-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-utils.d.ts","sourceRoot":"","sources":["../../src/lib/repo-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAY9C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAcjD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAY/D;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2ED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,oBAAoB,CA8FvB"}