steroids-api 0.2.7
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.
- package/dist/API/src/index.d.ts +10 -0
- package/dist/API/src/index.d.ts.map +1 -0
- package/dist/API/src/index.js +130 -0
- package/dist/API/src/index.js.map +1 -0
- package/dist/API/src/routes/activity.d.ts +7 -0
- package/dist/API/src/routes/activity.d.ts.map +1 -0
- package/dist/API/src/routes/activity.js +252 -0
- package/dist/API/src/routes/activity.js.map +1 -0
- package/dist/API/src/routes/config.d.ts +7 -0
- package/dist/API/src/routes/config.d.ts.map +1 -0
- package/dist/API/src/routes/config.js +521 -0
- package/dist/API/src/routes/config.js.map +1 -0
- package/dist/API/src/routes/health.d.ts +7 -0
- package/dist/API/src/routes/health.d.ts.map +1 -0
- package/dist/API/src/routes/health.js +172 -0
- package/dist/API/src/routes/health.js.map +1 -0
- package/dist/API/src/routes/incidents.d.ts +7 -0
- package/dist/API/src/routes/incidents.d.ts.map +1 -0
- package/dist/API/src/routes/incidents.js +117 -0
- package/dist/API/src/routes/incidents.js.map +1 -0
- package/dist/API/src/routes/projects.d.ts +7 -0
- package/dist/API/src/routes/projects.d.ts.map +1 -0
- package/dist/API/src/routes/projects.js +398 -0
- package/dist/API/src/routes/projects.js.map +1 -0
- package/dist/API/src/routes/runners.d.ts +7 -0
- package/dist/API/src/routes/runners.d.ts.map +1 -0
- package/dist/API/src/routes/runners.js +242 -0
- package/dist/API/src/routes/runners.js.map +1 -0
- package/dist/API/src/routes/tasks.d.ts +7 -0
- package/dist/API/src/routes/tasks.d.ts.map +1 -0
- package/dist/API/src/routes/tasks.js +1007 -0
- package/dist/API/src/routes/tasks.js.map +1 -0
- package/dist/API/src/utils/validation.d.ts +22 -0
- package/dist/API/src/utils/validation.d.ts.map +1 -0
- package/dist/API/src/utils/validation.js +50 -0
- package/dist/API/src/utils/validation.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +184 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/activity.d.ts +7 -0
- package/dist/routes/activity.d.ts.map +1 -0
- package/dist/routes/activity.js +252 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/config.d.ts +7 -0
- package/dist/routes/config.d.ts.map +1 -0
- package/dist/routes/config.js +647 -0
- package/dist/routes/config.js.map +1 -0
- package/dist/routes/credit-alerts.d.ts +2 -0
- package/dist/routes/credit-alerts.d.ts.map +1 -0
- package/dist/routes/credit-alerts.js +97 -0
- package/dist/routes/credit-alerts.js.map +1 -0
- package/dist/routes/health.d.ts +7 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +200 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/incidents.d.ts +7 -0
- package/dist/routes/incidents.d.ts.map +1 -0
- package/dist/routes/incidents.js +117 -0
- package/dist/routes/incidents.js.map +1 -0
- package/dist/routes/projects.d.ts +7 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +643 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/runners.d.ts +7 -0
- package/dist/routes/runners.d.ts.map +1 -0
- package/dist/routes/runners.js +299 -0
- package/dist/routes/runners.js.map +1 -0
- package/dist/routes/skills.d.ts +3 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +109 -0
- package/dist/routes/skills.js.map +1 -0
- package/dist/routes/storage.d.ts +7 -0
- package/dist/routes/storage.d.ts.map +1 -0
- package/dist/routes/storage.js +93 -0
- package/dist/routes/storage.js.map +1 -0
- package/dist/routes/tasks.d.ts +7 -0
- package/dist/routes/tasks.d.ts.map +1 -0
- package/dist/routes/tasks.js +1145 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/src/cleanup/invocation-logs.d.ts +30 -0
- package/dist/src/cleanup/invocation-logs.d.ts.map +1 -0
- package/dist/src/cleanup/invocation-logs.js +66 -0
- package/dist/src/cleanup/invocation-logs.js.map +1 -0
- package/dist/src/commands/loop-phases.d.ts +11 -0
- package/dist/src/commands/loop-phases.d.ts.map +1 -0
- package/dist/src/commands/loop-phases.js +304 -0
- package/dist/src/commands/loop-phases.js.map +1 -0
- package/dist/src/config/loader.d.ts +160 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +276 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/database/connection.d.ts +35 -0
- package/dist/src/database/connection.d.ts.map +1 -0
- package/dist/src/database/connection.js +197 -0
- package/dist/src/database/connection.js.map +1 -0
- package/dist/src/database/queries.d.ts +220 -0
- package/dist/src/database/queries.d.ts.map +1 -0
- package/dist/src/database/queries.js +589 -0
- package/dist/src/database/queries.js.map +1 -0
- package/dist/src/database/schema.d.ts +8 -0
- package/dist/src/database/schema.d.ts.map +1 -0
- package/dist/src/database/schema.js +184 -0
- package/dist/src/database/schema.js.map +1 -0
- package/dist/src/git/push.d.ts +26 -0
- package/dist/src/git/push.d.ts.map +1 -0
- package/dist/src/git/push.js +91 -0
- package/dist/src/git/push.js.map +1 -0
- package/dist/src/git/status.d.ts +83 -0
- package/dist/src/git/status.d.ts.map +1 -0
- package/dist/src/git/status.js +315 -0
- package/dist/src/git/status.js.map +1 -0
- package/dist/src/health/stuck-task-detector.d.ts +131 -0
- package/dist/src/health/stuck-task-detector.d.ts.map +1 -0
- package/dist/src/health/stuck-task-detector.js +233 -0
- package/dist/src/health/stuck-task-detector.js.map +1 -0
- package/dist/src/health/stuck-task-recovery.d.ts +45 -0
- package/dist/src/health/stuck-task-recovery.d.ts.map +1 -0
- package/dist/src/health/stuck-task-recovery.js +309 -0
- package/dist/src/health/stuck-task-recovery.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +130 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/locking/queries.d.ts +116 -0
- package/dist/src/locking/queries.d.ts.map +1 -0
- package/dist/src/locking/queries.js +232 -0
- package/dist/src/locking/queries.js.map +1 -0
- package/dist/src/locking/section-lock.d.ts +74 -0
- package/dist/src/locking/section-lock.d.ts.map +1 -0
- package/dist/src/locking/section-lock.js +196 -0
- package/dist/src/locking/section-lock.js.map +1 -0
- package/dist/src/locking/task-lock.d.ts +92 -0
- package/dist/src/locking/task-lock.d.ts.map +1 -0
- package/dist/src/locking/task-lock.js +233 -0
- package/dist/src/locking/task-lock.js.map +1 -0
- package/dist/src/migrations/index.d.ts +7 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/migrations/index.js +9 -0
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/migrations/manifest.d.ts +92 -0
- package/dist/src/migrations/manifest.d.ts.map +1 -0
- package/dist/src/migrations/manifest.js +255 -0
- package/dist/src/migrations/manifest.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +84 -0
- package/dist/src/migrations/runner.d.ts.map +1 -0
- package/dist/src/migrations/runner.js +338 -0
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/orchestrator/coder.d.ts +32 -0
- package/dist/src/orchestrator/coder.d.ts.map +1 -0
- package/dist/src/orchestrator/coder.js +170 -0
- package/dist/src/orchestrator/coder.js.map +1 -0
- package/dist/src/orchestrator/coordinator.d.ts +28 -0
- package/dist/src/orchestrator/coordinator.d.ts.map +1 -0
- package/dist/src/orchestrator/coordinator.js +252 -0
- package/dist/src/orchestrator/coordinator.js.map +1 -0
- package/dist/src/orchestrator/fallback-handler.d.ts +24 -0
- package/dist/src/orchestrator/fallback-handler.d.ts.map +1 -0
- package/dist/src/orchestrator/fallback-handler.js +280 -0
- package/dist/src/orchestrator/fallback-handler.js.map +1 -0
- package/dist/src/orchestrator/invoke.d.ts +14 -0
- package/dist/src/orchestrator/invoke.d.ts.map +1 -0
- package/dist/src/orchestrator/invoke.js +76 -0
- package/dist/src/orchestrator/invoke.js.map +1 -0
- package/dist/src/orchestrator/post-coder.d.ts +10 -0
- package/dist/src/orchestrator/post-coder.d.ts.map +1 -0
- package/dist/src/orchestrator/post-coder.js +198 -0
- package/dist/src/orchestrator/post-coder.js.map +1 -0
- package/dist/src/orchestrator/post-reviewer.d.ts +10 -0
- package/dist/src/orchestrator/post-reviewer.d.ts.map +1 -0
- package/dist/src/orchestrator/post-reviewer.js +199 -0
- package/dist/src/orchestrator/post-reviewer.js.map +1 -0
- package/dist/src/orchestrator/reviewer.d.ts +35 -0
- package/dist/src/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/src/orchestrator/reviewer.js +237 -0
- package/dist/src/orchestrator/reviewer.js.map +1 -0
- package/dist/src/orchestrator/schemas.d.ts +10 -0
- package/dist/src/orchestrator/schemas.d.ts.map +1 -0
- package/dist/src/orchestrator/schemas.js +81 -0
- package/dist/src/orchestrator/schemas.js.map +1 -0
- package/dist/src/orchestrator/task-selector.d.ts +102 -0
- package/dist/src/orchestrator/task-selector.d.ts.map +1 -0
- package/dist/src/orchestrator/task-selector.js +326 -0
- package/dist/src/orchestrator/task-selector.js.map +1 -0
- package/dist/src/orchestrator/types.d.ts +74 -0
- package/dist/src/orchestrator/types.d.ts.map +1 -0
- package/dist/src/orchestrator/types.js +5 -0
- package/dist/src/orchestrator/types.js.map +1 -0
- package/dist/src/prompts/coder.d.ts +36 -0
- package/dist/src/prompts/coder.d.ts.map +1 -0
- package/dist/src/prompts/coder.js +303 -0
- package/dist/src/prompts/coder.js.map +1 -0
- package/dist/src/prompts/prompt-helpers.d.ts +51 -0
- package/dist/src/prompts/prompt-helpers.d.ts.map +1 -0
- package/dist/src/prompts/prompt-helpers.js +299 -0
- package/dist/src/prompts/prompt-helpers.js.map +1 -0
- package/dist/src/prompts/reviewer.d.ts +40 -0
- package/dist/src/prompts/reviewer.d.ts.map +1 -0
- package/dist/src/prompts/reviewer.js +416 -0
- package/dist/src/prompts/reviewer.js.map +1 -0
- package/dist/src/providers/claude.d.ts +53 -0
- package/dist/src/providers/claude.d.ts.map +1 -0
- package/dist/src/providers/claude.js +227 -0
- package/dist/src/providers/claude.js.map +1 -0
- package/dist/src/providers/codex.d.ts +53 -0
- package/dist/src/providers/codex.d.ts.map +1 -0
- package/dist/src/providers/codex.js +253 -0
- package/dist/src/providers/codex.js.map +1 -0
- package/dist/src/providers/gemini.d.ts +58 -0
- package/dist/src/providers/gemini.d.ts.map +1 -0
- package/dist/src/providers/gemini.js +240 -0
- package/dist/src/providers/gemini.js.map +1 -0
- package/dist/src/providers/interface.d.ts +185 -0
- package/dist/src/providers/interface.d.ts.map +1 -0
- package/dist/src/providers/interface.js +92 -0
- package/dist/src/providers/interface.js.map +1 -0
- package/dist/src/providers/invocation-logger.d.ts +97 -0
- package/dist/src/providers/invocation-logger.d.ts.map +1 -0
- package/dist/src/providers/invocation-logger.js +378 -0
- package/dist/src/providers/invocation-logger.js.map +1 -0
- package/dist/src/providers/openai.d.ts +53 -0
- package/dist/src/providers/openai.d.ts.map +1 -0
- package/dist/src/providers/openai.js +230 -0
- package/dist/src/providers/openai.js.map +1 -0
- package/dist/src/providers/registry.d.ts +100 -0
- package/dist/src/providers/registry.d.ts.map +1 -0
- package/dist/src/providers/registry.js +170 -0
- package/dist/src/providers/registry.js.map +1 -0
- package/dist/src/routes/activity.d.ts +7 -0
- package/dist/src/routes/activity.d.ts.map +1 -0
- package/dist/src/routes/activity.js +252 -0
- package/dist/src/routes/activity.js.map +1 -0
- package/dist/src/routes/config.d.ts +7 -0
- package/dist/src/routes/config.d.ts.map +1 -0
- package/dist/src/routes/config.js +521 -0
- package/dist/src/routes/config.js.map +1 -0
- package/dist/src/routes/health.d.ts +7 -0
- package/dist/src/routes/health.d.ts.map +1 -0
- package/dist/src/routes/health.js +172 -0
- package/dist/src/routes/health.js.map +1 -0
- package/dist/src/routes/incidents.d.ts +7 -0
- package/dist/src/routes/incidents.d.ts.map +1 -0
- package/dist/src/routes/incidents.js +117 -0
- package/dist/src/routes/incidents.js.map +1 -0
- package/dist/src/routes/projects.d.ts +7 -0
- package/dist/src/routes/projects.d.ts.map +1 -0
- package/dist/src/routes/projects.js +398 -0
- package/dist/src/routes/projects.js.map +1 -0
- package/dist/src/routes/runners.d.ts +7 -0
- package/dist/src/routes/runners.d.ts.map +1 -0
- package/dist/src/routes/runners.js +242 -0
- package/dist/src/routes/runners.js.map +1 -0
- package/dist/src/routes/tasks.d.ts +7 -0
- package/dist/src/routes/tasks.d.ts.map +1 -0
- package/dist/src/routes/tasks.js +1007 -0
- package/dist/src/routes/tasks.js.map +1 -0
- package/dist/src/runners/activity-log.d.ts +65 -0
- package/dist/src/runners/activity-log.d.ts.map +1 -0
- package/dist/src/runners/activity-log.js +140 -0
- package/dist/src/runners/activity-log.js.map +1 -0
- package/dist/src/runners/cron.d.ts +30 -0
- package/dist/src/runners/cron.d.ts.map +1 -0
- package/dist/src/runners/cron.js +333 -0
- package/dist/src/runners/cron.js.map +1 -0
- package/dist/src/runners/daemon.d.ts +71 -0
- package/dist/src/runners/daemon.d.ts.map +1 -0
- package/dist/src/runners/daemon.js +233 -0
- package/dist/src/runners/daemon.js.map +1 -0
- package/dist/src/runners/global-db.d.ts +31 -0
- package/dist/src/runners/global-db.d.ts.map +1 -0
- package/dist/src/runners/global-db.js +220 -0
- package/dist/src/runners/global-db.js.map +1 -0
- package/dist/src/runners/hang-detector.d.ts +38 -0
- package/dist/src/runners/hang-detector.d.ts.map +1 -0
- package/dist/src/runners/hang-detector.js +130 -0
- package/dist/src/runners/hang-detector.js.map +1 -0
- package/dist/src/runners/heartbeat.d.ts +39 -0
- package/dist/src/runners/heartbeat.d.ts.map +1 -0
- package/dist/src/runners/heartbeat.js +71 -0
- package/dist/src/runners/heartbeat.js.map +1 -0
- package/dist/src/runners/lock.d.ts +47 -0
- package/dist/src/runners/lock.d.ts.map +1 -0
- package/dist/src/runners/lock.js +140 -0
- package/dist/src/runners/lock.js.map +1 -0
- package/dist/src/runners/orchestrator-loop.d.ts +20 -0
- package/dist/src/runners/orchestrator-loop.d.ts.map +1 -0
- package/dist/src/runners/orchestrator-loop.js +208 -0
- package/dist/src/runners/orchestrator-loop.js.map +1 -0
- package/dist/src/runners/projects.d.ts +96 -0
- package/dist/src/runners/projects.d.ts.map +1 -0
- package/dist/src/runners/projects.js +243 -0
- package/dist/src/runners/projects.js.map +1 -0
- package/dist/src/runners/wakeup.d.ts +37 -0
- package/dist/src/runners/wakeup.d.ts.map +1 -0
- package/dist/src/runners/wakeup.js +355 -0
- package/dist/src/runners/wakeup.js.map +1 -0
- package/dist/src/utils/validation.d.ts +22 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +50 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/utils/sqlite.d.ts +17 -0
- package/dist/utils/sqlite.d.ts.map +1 -0
- package/dist/utils/sqlite.js +27 -0
- package/dist/utils/sqlite.js.map +1 -0
- package/dist/utils/storage-cache.d.ts +33 -0
- package/dist/utils/storage-cache.d.ts.map +1 -0
- package/dist/utils/storage-cache.js +81 -0
- package/dist/utils/storage-cache.js.map +1 -0
- package/dist/utils/validation.d.ts +22 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +51 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +39 -0
- package/src/index.ts +199 -0
- package/src/routes/activity.ts +302 -0
- package/src/routes/config.ts +723 -0
- package/src/routes/credit-alerts.ts +73 -0
- package/src/routes/health.ts +219 -0
- package/src/routes/incidents.ts +131 -0
- package/src/routes/projects.ts +854 -0
- package/src/routes/runners.ts +357 -0
- package/src/routes/skills.ts +127 -0
- package/src/routes/storage.ts +108 -0
- package/src/routes/tasks.ts +1372 -0
- package/src/utils/sqlite.ts +36 -0
- package/src/utils/storage-cache.ts +107 -0
- package/src/utils/validation.ts +61 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Provider
|
|
3
|
+
* Implementation for Anthropic's Claude CLI
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { writeFileSync, unlinkSync, existsSync } from 'node:fs';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { BaseAIProvider, } from './interface.js';
|
|
10
|
+
/**
|
|
11
|
+
* Available Claude models
|
|
12
|
+
* Use aliases (sonnet, opus, haiku) for latest versions
|
|
13
|
+
*/
|
|
14
|
+
const CLAUDE_MODELS = [
|
|
15
|
+
{
|
|
16
|
+
id: 'opus',
|
|
17
|
+
name: 'Claude Opus (latest)',
|
|
18
|
+
recommendedFor: ['orchestrator', 'reviewer'],
|
|
19
|
+
supportsStreaming: true,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'sonnet',
|
|
23
|
+
name: 'Claude Sonnet (latest)',
|
|
24
|
+
recommendedFor: ['coder'],
|
|
25
|
+
supportsStreaming: true,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'haiku',
|
|
29
|
+
name: 'Claude Haiku (latest)',
|
|
30
|
+
recommendedFor: [],
|
|
31
|
+
supportsStreaming: true,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* Default models per role
|
|
36
|
+
*/
|
|
37
|
+
const DEFAULT_MODELS = {
|
|
38
|
+
orchestrator: 'opus',
|
|
39
|
+
coder: 'sonnet',
|
|
40
|
+
reviewer: 'opus',
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Default timeout in milliseconds (15 minutes)
|
|
44
|
+
*/
|
|
45
|
+
const DEFAULT_TIMEOUT = 900_000;
|
|
46
|
+
/**
|
|
47
|
+
* Default invocation template for Claude CLI
|
|
48
|
+
* Uses -p flag for print mode with prompt from file via shell substitution
|
|
49
|
+
*/
|
|
50
|
+
const DEFAULT_INVOCATION_TEMPLATE = '{cli} -p "$(cat {prompt_file})" --model {model}';
|
|
51
|
+
/**
|
|
52
|
+
* Claude AI Provider implementation
|
|
53
|
+
*/
|
|
54
|
+
export class ClaudeProvider extends BaseAIProvider {
|
|
55
|
+
name = 'claude';
|
|
56
|
+
displayName = 'Anthropic Claude';
|
|
57
|
+
/**
|
|
58
|
+
* Write prompt to a temporary file
|
|
59
|
+
*/
|
|
60
|
+
writePromptFile(prompt) {
|
|
61
|
+
const tempPath = join(tmpdir(), `steroids-claude-${Date.now()}.txt`);
|
|
62
|
+
writeFileSync(tempPath, prompt, { mode: 0o600 });
|
|
63
|
+
return tempPath;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Clean up temporary prompt file
|
|
67
|
+
*/
|
|
68
|
+
cleanupPromptFile(path) {
|
|
69
|
+
try {
|
|
70
|
+
if (existsSync(path)) {
|
|
71
|
+
unlinkSync(path);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Ignore cleanup errors
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Invoke Claude CLI with a prompt
|
|
80
|
+
*/
|
|
81
|
+
async invoke(prompt, options) {
|
|
82
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
83
|
+
const cwd = options.cwd ?? process.cwd();
|
|
84
|
+
const model = options.model;
|
|
85
|
+
const streamOutput = options.streamOutput ?? true;
|
|
86
|
+
const onActivity = options.onActivity;
|
|
87
|
+
// Apply custom invocation template if provided in options
|
|
88
|
+
if (options.invocationTemplate) {
|
|
89
|
+
this.setInvocationTemplate(options.invocationTemplate);
|
|
90
|
+
}
|
|
91
|
+
// Write prompt to temp file
|
|
92
|
+
const promptFile = options.promptFile ?? this.writePromptFile(prompt);
|
|
93
|
+
const createdTempFile = !options.promptFile;
|
|
94
|
+
try {
|
|
95
|
+
return await this.invokeWithFile(promptFile, model, timeout, cwd, streamOutput, onActivity);
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
if (createdTempFile) {
|
|
99
|
+
this.cleanupPromptFile(promptFile);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Invoke Claude CLI with a prompt file using the invocation template
|
|
105
|
+
*/
|
|
106
|
+
invokeWithFile(promptFile, model, timeout, cwd, streamOutput, onActivity) {
|
|
107
|
+
return new Promise((resolve) => {
|
|
108
|
+
const startTime = Date.now();
|
|
109
|
+
let stdout = '';
|
|
110
|
+
let stderr = '';
|
|
111
|
+
let timedOut = false;
|
|
112
|
+
// Build command from invocation template
|
|
113
|
+
const command = this.buildCommand(promptFile, model);
|
|
114
|
+
// Spawn using shell to handle the command template
|
|
115
|
+
const child = spawn(command, {
|
|
116
|
+
shell: true,
|
|
117
|
+
cwd,
|
|
118
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
119
|
+
});
|
|
120
|
+
const timeoutHandle = setTimeout(() => {
|
|
121
|
+
timedOut = true;
|
|
122
|
+
child.kill('SIGTERM');
|
|
123
|
+
// Force kill after 5 seconds if still running
|
|
124
|
+
setTimeout(() => {
|
|
125
|
+
if (!child.killed) {
|
|
126
|
+
child.kill('SIGKILL');
|
|
127
|
+
}
|
|
128
|
+
}, 5000);
|
|
129
|
+
}, timeout);
|
|
130
|
+
child.stdout?.on('data', (data) => {
|
|
131
|
+
const text = data.toString();
|
|
132
|
+
stdout += text;
|
|
133
|
+
onActivity?.({ type: 'output', stream: 'stdout', msg: text });
|
|
134
|
+
// Stream output in real-time if enabled
|
|
135
|
+
if (streamOutput) {
|
|
136
|
+
process.stdout.write(text);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
child.stderr?.on('data', (data) => {
|
|
140
|
+
const text = data.toString();
|
|
141
|
+
stderr += text;
|
|
142
|
+
onActivity?.({ type: 'output', stream: 'stderr', msg: text });
|
|
143
|
+
if (streamOutput) {
|
|
144
|
+
process.stderr.write(text);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
child.on('close', (code) => {
|
|
148
|
+
clearTimeout(timeoutHandle);
|
|
149
|
+
const duration = Date.now() - startTime;
|
|
150
|
+
resolve({
|
|
151
|
+
success: code === 0 && !timedOut,
|
|
152
|
+
exitCode: code ?? 1,
|
|
153
|
+
stdout,
|
|
154
|
+
stderr,
|
|
155
|
+
duration,
|
|
156
|
+
timedOut,
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
child.on('error', (error) => {
|
|
160
|
+
clearTimeout(timeoutHandle);
|
|
161
|
+
const duration = Date.now() - startTime;
|
|
162
|
+
resolve({
|
|
163
|
+
success: false,
|
|
164
|
+
exitCode: 1,
|
|
165
|
+
stdout,
|
|
166
|
+
stderr: error.message,
|
|
167
|
+
duration,
|
|
168
|
+
timedOut: false,
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if Claude CLI is available
|
|
175
|
+
*/
|
|
176
|
+
async isAvailable() {
|
|
177
|
+
return new Promise((resolve) => {
|
|
178
|
+
const cli = this.cliPath ?? 'claude';
|
|
179
|
+
const child = spawn('which', [cli], {
|
|
180
|
+
shell: true,
|
|
181
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
182
|
+
});
|
|
183
|
+
child.on('close', (code) => {
|
|
184
|
+
resolve(code === 0);
|
|
185
|
+
});
|
|
186
|
+
child.on('error', () => {
|
|
187
|
+
resolve(false);
|
|
188
|
+
});
|
|
189
|
+
// Timeout after 5 seconds
|
|
190
|
+
setTimeout(() => {
|
|
191
|
+
child.kill();
|
|
192
|
+
resolve(false);
|
|
193
|
+
}, 5000);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* List available model IDs
|
|
198
|
+
*/
|
|
199
|
+
listModels() {
|
|
200
|
+
return CLAUDE_MODELS.map((m) => m.id);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get detailed model information
|
|
204
|
+
*/
|
|
205
|
+
getModelInfo() {
|
|
206
|
+
return [...CLAUDE_MODELS];
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get the default model for a role
|
|
210
|
+
*/
|
|
211
|
+
getDefaultModel(role) {
|
|
212
|
+
return DEFAULT_MODELS[role];
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get the default invocation template for Claude CLI
|
|
216
|
+
*/
|
|
217
|
+
getDefaultInvocationTemplate() {
|
|
218
|
+
return DEFAULT_INVOCATION_TEMPLATE;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Create a Claude provider instance
|
|
223
|
+
*/
|
|
224
|
+
export function createClaudeProvider() {
|
|
225
|
+
return new ClaudeProvider();
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/providers/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Provider
|
|
3
|
+
* Implementation for OpenAI Codex CLI
|
|
4
|
+
*/
|
|
5
|
+
import { BaseAIProvider, type InvokeOptions, type InvokeResult, type ModelInfo } from './interface.js';
|
|
6
|
+
/**
|
|
7
|
+
* Codex AI Provider implementation
|
|
8
|
+
*/
|
|
9
|
+
export declare class CodexProvider extends BaseAIProvider {
|
|
10
|
+
readonly name = "codex";
|
|
11
|
+
readonly displayName = "OpenAI Codex";
|
|
12
|
+
/**
|
|
13
|
+
* Write prompt to a temporary file
|
|
14
|
+
*/
|
|
15
|
+
private writePromptFile;
|
|
16
|
+
/**
|
|
17
|
+
* Clean up temporary prompt file
|
|
18
|
+
*/
|
|
19
|
+
private cleanupPromptFile;
|
|
20
|
+
/**
|
|
21
|
+
* Get the default invocation template
|
|
22
|
+
*/
|
|
23
|
+
getDefaultInvocationTemplate(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Invoke Codex CLI with a prompt
|
|
26
|
+
*/
|
|
27
|
+
invoke(prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Invoke Codex CLI with a prompt file using the invocation template
|
|
30
|
+
*/
|
|
31
|
+
private invokeWithFile;
|
|
32
|
+
/**
|
|
33
|
+
* Check if Codex CLI is available
|
|
34
|
+
*/
|
|
35
|
+
isAvailable(): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* List available model IDs
|
|
38
|
+
*/
|
|
39
|
+
listModels(): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Get detailed model information
|
|
42
|
+
*/
|
|
43
|
+
getModelInfo(): ModelInfo[];
|
|
44
|
+
/**
|
|
45
|
+
* Get the default model for a role
|
|
46
|
+
*/
|
|
47
|
+
getDefaultModel(role: 'orchestrator' | 'coder' | 'reviewer'): string | undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a Codex provider instance
|
|
51
|
+
*/
|
|
52
|
+
export declare function createCodexProvider(): CodexProvider;
|
|
53
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAoCxB;;GAEG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAC/C,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,kBAAkB;IAEtC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,4BAA4B,IAAI,MAAM;IAItC;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB3E;;OAEG;IACH,OAAO,CAAC,cAAc;IA2HtB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAyBrC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,YAAY,IAAI,SAAS,EAAE;IAI3B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS;CAGjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex Provider
|
|
3
|
+
* Implementation for OpenAI Codex CLI
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
import { writeFileSync, unlinkSync, existsSync } from 'node:fs';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { BaseAIProvider, } from './interface.js';
|
|
10
|
+
/**
|
|
11
|
+
* Available Codex models
|
|
12
|
+
*/
|
|
13
|
+
const CODEX_MODELS = [
|
|
14
|
+
{
|
|
15
|
+
id: 'codex',
|
|
16
|
+
name: 'Codex',
|
|
17
|
+
recommendedFor: ['reviewer'],
|
|
18
|
+
supportsStreaming: true,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Default models per role
|
|
23
|
+
*/
|
|
24
|
+
const DEFAULT_MODELS = {
|
|
25
|
+
orchestrator: undefined,
|
|
26
|
+
coder: undefined,
|
|
27
|
+
reviewer: 'codex',
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Default timeout in milliseconds (15 minutes)
|
|
31
|
+
*/
|
|
32
|
+
const DEFAULT_TIMEOUT = 900_000;
|
|
33
|
+
/**
|
|
34
|
+
* Default invocation template for Codex CLI
|
|
35
|
+
* Uses dangerously-bypass-approvals-and-sandbox for full git access
|
|
36
|
+
* --skip-git-repo-check allows running outside trusted directories
|
|
37
|
+
* WARNING: This bypasses all sandboxing - use only in controlled environments
|
|
38
|
+
*/
|
|
39
|
+
const DEFAULT_INVOCATION_TEMPLATE = 'cat {prompt_file} | {cli} exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check -';
|
|
40
|
+
/**
|
|
41
|
+
* Codex AI Provider implementation
|
|
42
|
+
*/
|
|
43
|
+
export class CodexProvider extends BaseAIProvider {
|
|
44
|
+
name = 'codex';
|
|
45
|
+
displayName = 'OpenAI Codex';
|
|
46
|
+
/**
|
|
47
|
+
* Write prompt to a temporary file
|
|
48
|
+
*/
|
|
49
|
+
writePromptFile(prompt) {
|
|
50
|
+
const tempPath = join(tmpdir(), `steroids-codex-${Date.now()}.txt`);
|
|
51
|
+
writeFileSync(tempPath, prompt, { mode: 0o600 });
|
|
52
|
+
return tempPath;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Clean up temporary prompt file
|
|
56
|
+
*/
|
|
57
|
+
cleanupPromptFile(path) {
|
|
58
|
+
try {
|
|
59
|
+
if (existsSync(path)) {
|
|
60
|
+
unlinkSync(path);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Ignore cleanup errors
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the default invocation template
|
|
69
|
+
*/
|
|
70
|
+
getDefaultInvocationTemplate() {
|
|
71
|
+
return DEFAULT_INVOCATION_TEMPLATE;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Invoke Codex CLI with a prompt
|
|
75
|
+
*/
|
|
76
|
+
async invoke(prompt, options) {
|
|
77
|
+
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
78
|
+
const cwd = options.cwd ?? process.cwd();
|
|
79
|
+
const streamOutput = options.streamOutput ?? true;
|
|
80
|
+
const onActivity = options.onActivity;
|
|
81
|
+
// Apply custom invocation template if provided in options
|
|
82
|
+
if (options.invocationTemplate) {
|
|
83
|
+
this.setInvocationTemplate(options.invocationTemplate);
|
|
84
|
+
}
|
|
85
|
+
// Write prompt to temp file
|
|
86
|
+
const promptFile = options.promptFile ?? this.writePromptFile(prompt);
|
|
87
|
+
const createdTempFile = !options.promptFile;
|
|
88
|
+
try {
|
|
89
|
+
return await this.invokeWithFile(promptFile, options.model, timeout, cwd, streamOutput, onActivity);
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
if (createdTempFile) {
|
|
93
|
+
this.cleanupPromptFile(promptFile);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Invoke Codex CLI with a prompt file using the invocation template
|
|
99
|
+
*/
|
|
100
|
+
invokeWithFile(promptFile, model, timeout, cwd, streamOutput, onActivity) {
|
|
101
|
+
return new Promise((resolve) => {
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
let stdout = '';
|
|
104
|
+
let stderr = '';
|
|
105
|
+
let timedOut = false;
|
|
106
|
+
let stdoutParseBuffer = '';
|
|
107
|
+
let expectingToolCmd = false;
|
|
108
|
+
// Build command from invocation template
|
|
109
|
+
const command = this.buildCommand(promptFile, model);
|
|
110
|
+
// Spawn using shell to handle the command template
|
|
111
|
+
const child = spawn(command, {
|
|
112
|
+
shell: true,
|
|
113
|
+
cwd,
|
|
114
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
115
|
+
});
|
|
116
|
+
const timeoutHandle = setTimeout(() => {
|
|
117
|
+
timedOut = true;
|
|
118
|
+
child.kill('SIGTERM');
|
|
119
|
+
// Force kill after 5 seconds if still running
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
if (!child.killed) {
|
|
122
|
+
child.kill('SIGKILL');
|
|
123
|
+
}
|
|
124
|
+
}, 5000);
|
|
125
|
+
}, timeout);
|
|
126
|
+
child.stdout?.on('data', (data) => {
|
|
127
|
+
const text = data.toString();
|
|
128
|
+
stdout += text;
|
|
129
|
+
if (streamOutput) {
|
|
130
|
+
process.stdout.write(text);
|
|
131
|
+
}
|
|
132
|
+
if (!onActivity)
|
|
133
|
+
return;
|
|
134
|
+
// Best-effort parsing for Codex CLI tool execution markers:
|
|
135
|
+
// Some versions emit lines like:
|
|
136
|
+
// exec
|
|
137
|
+
// <command>
|
|
138
|
+
// We interpret that as a tool event and otherwise forward text as output.
|
|
139
|
+
stdoutParseBuffer += text;
|
|
140
|
+
while (true) {
|
|
141
|
+
const nl = stdoutParseBuffer.indexOf('\n');
|
|
142
|
+
if (nl === -1)
|
|
143
|
+
break;
|
|
144
|
+
const line = stdoutParseBuffer.slice(0, nl);
|
|
145
|
+
stdoutParseBuffer = stdoutParseBuffer.slice(nl + 1);
|
|
146
|
+
if (expectingToolCmd) {
|
|
147
|
+
const cmd = line.trim();
|
|
148
|
+
if (cmd)
|
|
149
|
+
onActivity({ type: 'tool', cmd });
|
|
150
|
+
expectingToolCmd = false;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (line === 'exec') {
|
|
154
|
+
expectingToolCmd = true;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
onActivity({ type: 'output', stream: 'stdout', msg: `${line}\n` });
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
child.stderr?.on('data', (data) => {
|
|
161
|
+
const text = data.toString();
|
|
162
|
+
stderr += text;
|
|
163
|
+
onActivity?.({ type: 'output', stream: 'stderr', msg: text });
|
|
164
|
+
if (streamOutput) {
|
|
165
|
+
process.stderr.write(text);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
child.on('close', (code) => {
|
|
169
|
+
clearTimeout(timeoutHandle);
|
|
170
|
+
const duration = Date.now() - startTime;
|
|
171
|
+
if (onActivity && stdoutParseBuffer) {
|
|
172
|
+
// Flush remaining unterminated line.
|
|
173
|
+
if (expectingToolCmd) {
|
|
174
|
+
const cmd = stdoutParseBuffer.trim();
|
|
175
|
+
if (cmd)
|
|
176
|
+
onActivity({ type: 'tool', cmd });
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
onActivity({ type: 'output', stream: 'stdout', msg: stdoutParseBuffer });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
resolve({
|
|
183
|
+
success: code === 0 && !timedOut,
|
|
184
|
+
exitCode: code ?? 1,
|
|
185
|
+
stdout,
|
|
186
|
+
stderr,
|
|
187
|
+
duration,
|
|
188
|
+
timedOut,
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
child.on('error', (error) => {
|
|
192
|
+
clearTimeout(timeoutHandle);
|
|
193
|
+
const duration = Date.now() - startTime;
|
|
194
|
+
resolve({
|
|
195
|
+
success: false,
|
|
196
|
+
exitCode: 1,
|
|
197
|
+
stdout,
|
|
198
|
+
stderr: error.message,
|
|
199
|
+
duration,
|
|
200
|
+
timedOut: false,
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Check if Codex CLI is available
|
|
207
|
+
*/
|
|
208
|
+
async isAvailable() {
|
|
209
|
+
return new Promise((resolve) => {
|
|
210
|
+
const cli = this.cliPath ?? 'codex';
|
|
211
|
+
const child = spawn('which', [cli], {
|
|
212
|
+
shell: true,
|
|
213
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
214
|
+
});
|
|
215
|
+
child.on('close', (code) => {
|
|
216
|
+
resolve(code === 0);
|
|
217
|
+
});
|
|
218
|
+
child.on('error', () => {
|
|
219
|
+
resolve(false);
|
|
220
|
+
});
|
|
221
|
+
// Timeout after 5 seconds
|
|
222
|
+
setTimeout(() => {
|
|
223
|
+
child.kill();
|
|
224
|
+
resolve(false);
|
|
225
|
+
}, 5000);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* List available model IDs
|
|
230
|
+
*/
|
|
231
|
+
listModels() {
|
|
232
|
+
return CODEX_MODELS.map((m) => m.id);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Get detailed model information
|
|
236
|
+
*/
|
|
237
|
+
getModelInfo() {
|
|
238
|
+
return [...CODEX_MODELS];
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the default model for a role
|
|
242
|
+
*/
|
|
243
|
+
getDefaultModel(role) {
|
|
244
|
+
return DEFAULT_MODELS[role];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a Codex provider instance
|
|
249
|
+
*/
|
|
250
|
+
export function createCodexProvider() {
|
|
251
|
+
return new CodexProvider();
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/providers/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini Provider
|
|
3
|
+
* Implementation for Google Gemini CLI
|
|
4
|
+
*/
|
|
5
|
+
import { BaseAIProvider, type InvokeOptions, type InvokeResult, type ModelInfo } from './interface.js';
|
|
6
|
+
/**
|
|
7
|
+
* Gemini AI Provider implementation
|
|
8
|
+
*/
|
|
9
|
+
export declare class GeminiProvider extends BaseAIProvider {
|
|
10
|
+
readonly name = "gemini";
|
|
11
|
+
readonly displayName = "Google Gemini";
|
|
12
|
+
/**
|
|
13
|
+
* Write prompt to a temporary file
|
|
14
|
+
*/
|
|
15
|
+
private writePromptFile;
|
|
16
|
+
/**
|
|
17
|
+
* Clean up temporary prompt file
|
|
18
|
+
*/
|
|
19
|
+
private cleanupPromptFile;
|
|
20
|
+
/**
|
|
21
|
+
* Get the default invocation template
|
|
22
|
+
*/
|
|
23
|
+
getDefaultInvocationTemplate(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Invoke Gemini CLI with a prompt
|
|
26
|
+
*/
|
|
27
|
+
invoke(prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Invoke Gemini CLI with a prompt file using the invocation template
|
|
30
|
+
*/
|
|
31
|
+
private invokeWithFile;
|
|
32
|
+
/**
|
|
33
|
+
* Check if Gemini CLI is available
|
|
34
|
+
* Checks for both 'gemini' and 'gcloud' CLIs
|
|
35
|
+
*/
|
|
36
|
+
isAvailable(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a specific CLI is available
|
|
39
|
+
*/
|
|
40
|
+
private checkCliAvailable;
|
|
41
|
+
/**
|
|
42
|
+
* List available model IDs
|
|
43
|
+
*/
|
|
44
|
+
listModels(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Get detailed model information
|
|
47
|
+
*/
|
|
48
|
+
getModelInfo(): ModelInfo[];
|
|
49
|
+
/**
|
|
50
|
+
* Get the default model for a role
|
|
51
|
+
*/
|
|
52
|
+
getDefaultModel(role: 'orchestrator' | 'coder' | 'reviewer'): string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a Gemini provider instance
|
|
56
|
+
*/
|
|
57
|
+
export declare function createGeminiProvider(): GeminiProvider;
|
|
58
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AA8CxB;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,mBAAmB;IAEvC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,4BAA4B,IAAI,MAAM;IAItC;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB3E;;OAEG;IACH,OAAO,CAAC,cAAc;IAmFtB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,YAAY,IAAI,SAAS,EAAE;IAI3B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM;CAGrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|