steroids-cli 0.8.44 → 0.9.2
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/cleanup/backups.d.ts +26 -0
- package/dist/cleanup/backups.d.ts.map +1 -0
- package/dist/cleanup/backups.js +157 -0
- package/dist/cleanup/backups.js.map +1 -0
- package/dist/cleanup/directory-size.d.ts +1 -1
- package/dist/cleanup/directory-size.d.ts.map +1 -1
- package/dist/cleanup/directory-size.js +58 -6
- package/dist/cleanup/directory-size.js.map +1 -1
- package/dist/commands/ai.js +2 -2
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/config.js +80 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/health-stuck.d.ts.map +1 -1
- package/dist/commands/health-stuck.js +8 -2
- package/dist/commands/health-stuck.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +19 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/loop-phases.d.ts +3 -3
- package/dist/commands/loop-phases.d.ts.map +1 -1
- package/dist/commands/loop-phases.js +308 -74
- package/dist/commands/loop-phases.js.map +1 -1
- package/dist/commands/loop.d.ts.map +1 -1
- package/dist/commands/loop.js +12 -1
- package/dist/commands/loop.js.map +1 -1
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +69 -2
- package/dist/commands/tasks.js.map +1 -1
- package/dist/config/ai-setup.d.ts +2 -1
- package/dist/config/ai-setup.d.ts.map +1 -1
- package/dist/config/ai-setup.js +234 -36
- package/dist/config/ai-setup.js.map +1 -1
- package/dist/config/loader.d.ts +21 -7
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +22 -2
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +41 -3
- package/dist/config/schema.js.map +1 -1
- package/dist/database/queries.d.ts +37 -0
- package/dist/database/queries.d.ts.map +1 -1
- package/dist/database/queries.js +94 -2
- package/dist/database/queries.js.map +1 -1
- package/dist/database/schema.d.ts +2 -2
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +21 -0
- package/dist/database/schema.js.map +1 -1
- package/dist/git/status.d.ts +1 -1
- package/dist/git/status.d.ts.map +1 -1
- package/dist/git/status.js +3 -2
- package/dist/git/status.js.map +1 -1
- package/dist/health/stuck-task-detector.d.ts +2 -0
- package/dist/health/stuck-task-detector.d.ts.map +1 -1
- package/dist/health/stuck-task-detector.js +39 -18
- package/dist/health/stuck-task-detector.js.map +1 -1
- package/dist/orchestrator/coder.d.ts.map +1 -1
- package/dist/orchestrator/coder.js +23 -6
- package/dist/orchestrator/coder.js.map +1 -1
- package/dist/orchestrator/coordinator.js +1 -1
- package/dist/orchestrator/coordinator.js.map +1 -1
- package/dist/orchestrator/fallback-handler.d.ts +1 -1
- package/dist/orchestrator/fallback-handler.d.ts.map +1 -1
- package/dist/orchestrator/fallback-handler.js.map +1 -1
- package/dist/orchestrator/invoke.d.ts +5 -1
- package/dist/orchestrator/invoke.d.ts.map +1 -1
- package/dist/orchestrator/invoke.js +9 -1
- package/dist/orchestrator/invoke.js.map +1 -1
- package/dist/orchestrator/post-reviewer.d.ts +5 -1
- package/dist/orchestrator/post-reviewer.d.ts.map +1 -1
- package/dist/orchestrator/post-reviewer.js +100 -1
- package/dist/orchestrator/post-reviewer.js.map +1 -1
- package/dist/orchestrator/reviewer.d.ts +30 -2
- package/dist/orchestrator/reviewer.d.ts.map +1 -1
- package/dist/orchestrator/reviewer.js +121 -17
- package/dist/orchestrator/reviewer.js.map +1 -1
- package/dist/orchestrator/task-selector.d.ts.map +1 -1
- package/dist/orchestrator/task-selector.js +5 -1
- package/dist/orchestrator/task-selector.js.map +1 -1
- package/dist/orchestrator/types.d.ts +27 -0
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/parallel/merge-conflict-invoke.js +1 -1
- package/dist/parallel/merge-conflict-invoke.js.map +1 -1
- package/dist/prompts/coder.d.ts +4 -0
- package/dist/prompts/coder.d.ts.map +1 -1
- package/dist/prompts/coder.js +41 -0
- package/dist/prompts/coder.js.map +1 -1
- package/dist/prompts/reviewer.d.ts +4 -0
- package/dist/prompts/reviewer.d.ts.map +1 -1
- package/dist/prompts/reviewer.js +65 -0
- package/dist/prompts/reviewer.js.map +1 -1
- package/dist/providers/api-models.d.ts +14 -6
- package/dist/providers/api-models.d.ts.map +1 -1
- package/dist/providers/api-models.js +86 -5
- package/dist/providers/api-models.js.map +1 -1
- package/dist/providers/claude.d.ts +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +57 -12
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/codex.d.ts +5 -1
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +143 -40
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/gemini.d.ts +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +53 -9
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/interface.d.ts +62 -1
- package/dist/providers/interface.d.ts.map +1 -1
- package/dist/providers/interface.js +105 -12
- package/dist/providers/interface.js.map +1 -1
- package/dist/providers/invocation-logger.d.ts +3 -0
- package/dist/providers/invocation-logger.d.ts.map +1 -1
- package/dist/providers/invocation-logger.js +22 -8
- package/dist/providers/invocation-logger.js.map +1 -1
- package/dist/providers/minimax.d.ts +50 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +248 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/mistral.d.ts +6 -0
- package/dist/providers/mistral.d.ts.map +1 -1
- package/dist/providers/mistral.js +73 -4
- package/dist/providers/mistral.js.map +1 -1
- package/dist/providers/ollama.d.ts +50 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +259 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +1 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +2 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +28 -14
- package/dist/providers/registry.js.map +1 -1
- package/dist/runners/credit-pause.d.ts +1 -1
- package/dist/runners/credit-pause.d.ts.map +1 -1
- package/dist/runners/credit-pause.js +2 -2
- package/dist/runners/credit-pause.js.map +1 -1
- package/dist/runners/orchestrator-loop.js +2 -2
- package/dist/runners/orchestrator-loop.js.map +1 -1
- package/migrations/014_add_session_context.sql +17 -0
- package/migrations/015_add_follow_up_fields.sql +26 -0
- package/migrations/016_add_invocation_activity_timestamp.sql +8 -0
- package/migrations/manifest.json +25 -1
- package/package.json +1 -1
package/dist/providers/gemini.js
CHANGED
|
@@ -48,15 +48,16 @@ const DEFAULT_MODELS = {
|
|
|
48
48
|
const DEFAULT_TIMEOUT = 900_000;
|
|
49
49
|
/**
|
|
50
50
|
* Default invocation template for Gemini CLI
|
|
51
|
-
* Uses
|
|
51
|
+
* Uses --prompt flag for non-interactive mode with stream-json for realtime output
|
|
52
|
+
* --output-format=stream-json is more stable than space-separated flags
|
|
52
53
|
*/
|
|
53
|
-
const DEFAULT_INVOCATION_TEMPLATE = '{cli} -
|
|
54
|
+
const DEFAULT_INVOCATION_TEMPLATE = '{cli} --output-format=stream-json -m {model} {session_id} --prompt "$(cat {prompt_file})"';
|
|
54
55
|
/**
|
|
55
56
|
* Gemini AI Provider implementation
|
|
56
57
|
*/
|
|
57
58
|
class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
58
59
|
name = 'gemini';
|
|
59
|
-
displayName = 'Google
|
|
60
|
+
displayName = 'Google (gemini)';
|
|
60
61
|
/**
|
|
61
62
|
* Write prompt to a temporary file
|
|
62
63
|
*/
|
|
@@ -100,7 +101,7 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
100
101
|
const promptFile = options.promptFile ?? this.writePromptFile(prompt);
|
|
101
102
|
const createdTempFile = !options.promptFile;
|
|
102
103
|
try {
|
|
103
|
-
return await this.invokeWithFile(promptFile, options.model, timeout, cwd, streamOutput, onActivity);
|
|
104
|
+
return await this.invokeWithFile(promptFile, options.model, timeout, cwd, streamOutput, onActivity, options.resumeSessionId);
|
|
104
105
|
}
|
|
105
106
|
finally {
|
|
106
107
|
if (createdTempFile) {
|
|
@@ -117,6 +118,10 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
117
118
|
parseStreamJsonLine(line) {
|
|
118
119
|
try {
|
|
119
120
|
const event = JSON.parse(line);
|
|
121
|
+
// Session ID is in the 'init' event
|
|
122
|
+
if (event.type === 'init' && event.session_id) {
|
|
123
|
+
return { sessionId: event.session_id };
|
|
124
|
+
}
|
|
120
125
|
// Assistant message with delta text
|
|
121
126
|
if (event.type === 'message' && event.role === 'assistant' && event.content) {
|
|
122
127
|
return { text: event.content };
|
|
@@ -125,9 +130,17 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
125
130
|
if (event.type === 'tool_call' || event.type === 'function_call') {
|
|
126
131
|
return { tool: event.name || event.function?.name || 'tool' };
|
|
127
132
|
}
|
|
128
|
-
// Final result
|
|
133
|
+
// Final result includes token usage stats
|
|
129
134
|
if (event.type === 'result') {
|
|
130
|
-
|
|
135
|
+
const usage = event.stats ? {
|
|
136
|
+
inputTokens: event.stats.input_tokens,
|
|
137
|
+
outputTokens: event.stats.output_tokens,
|
|
138
|
+
cachedInputTokens: event.stats.cached,
|
|
139
|
+
} : undefined;
|
|
140
|
+
return {
|
|
141
|
+
result: event.content || '',
|
|
142
|
+
tokenUsage: usage,
|
|
143
|
+
};
|
|
131
144
|
}
|
|
132
145
|
}
|
|
133
146
|
catch {
|
|
@@ -136,21 +149,30 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
136
149
|
}
|
|
137
150
|
return {};
|
|
138
151
|
}
|
|
139
|
-
invokeWithFile(promptFile, model, timeout, cwd, streamOutput, onActivity) {
|
|
152
|
+
invokeWithFile(promptFile, model, timeout, cwd, streamOutput, onActivity, resumeSessionId) {
|
|
153
|
+
// Set up isolated HOME
|
|
154
|
+
const isolatedHome = this.setupIsolatedHome('.gemini', ['config.json']);
|
|
155
|
+
// Also isolate gcloud config if present in the same isolated home
|
|
156
|
+
this.setupIsolatedHome('.config/gcloud', ['active_config', 'credentials.db', 'configurations/config_default'], isolatedHome);
|
|
140
157
|
return new Promise((resolve) => {
|
|
141
158
|
const startTime = Date.now();
|
|
142
159
|
let stdout = '';
|
|
143
160
|
let stderr = '';
|
|
144
161
|
let timedOut = false;
|
|
145
162
|
let stdoutLineBuffer = '';
|
|
163
|
+
let sessionId = resumeSessionId;
|
|
164
|
+
let tokenUsage;
|
|
146
165
|
const isStreamJson = this.getInvocationTemplate().includes('stream-json');
|
|
147
166
|
// Build command from invocation template
|
|
148
|
-
const
|
|
167
|
+
const sessionIdFlag = resumeSessionId ? `--resume ${resumeSessionId}` : '';
|
|
168
|
+
const command = this.buildCommand(promptFile, model, sessionIdFlag);
|
|
149
169
|
// Spawn using shell to handle the command template
|
|
150
170
|
const child = (0, node_child_process_1.spawn)(command, {
|
|
151
171
|
shell: true,
|
|
152
172
|
cwd,
|
|
153
|
-
env: this.getSanitizedCliEnv(
|
|
173
|
+
env: this.getSanitizedCliEnv({
|
|
174
|
+
HOME: isolatedHome,
|
|
175
|
+
}),
|
|
154
176
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
155
177
|
});
|
|
156
178
|
// Close stdin immediately to prevent CLI tools from hanging
|
|
@@ -201,6 +223,10 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
201
223
|
if (!line)
|
|
202
224
|
continue;
|
|
203
225
|
const parsed = this.parseStreamJsonLine(line);
|
|
226
|
+
if (parsed.sessionId)
|
|
227
|
+
sessionId = parsed.sessionId;
|
|
228
|
+
if (parsed.tokenUsage)
|
|
229
|
+
tokenUsage = parsed.tokenUsage;
|
|
204
230
|
if (parsed.result !== undefined) {
|
|
205
231
|
if (parsed.result)
|
|
206
232
|
stdout = parsed.result;
|
|
@@ -232,6 +258,13 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
232
258
|
child.on('close', (code) => {
|
|
233
259
|
clearTimeout(activityTimer);
|
|
234
260
|
const duration = Date.now() - startTime;
|
|
261
|
+
// Cleanup isolated home
|
|
262
|
+
try {
|
|
263
|
+
(0, node_fs_1.rmSync)(isolatedHome, { recursive: true, force: true });
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Ignore cleanup errors
|
|
267
|
+
}
|
|
235
268
|
resolve({
|
|
236
269
|
success: code === 0 && !timedOut,
|
|
237
270
|
exitCode: code ?? 1,
|
|
@@ -239,11 +272,20 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
239
272
|
stderr,
|
|
240
273
|
duration,
|
|
241
274
|
timedOut,
|
|
275
|
+
sessionId,
|
|
276
|
+
tokenUsage,
|
|
242
277
|
});
|
|
243
278
|
});
|
|
244
279
|
child.on('error', (error) => {
|
|
245
280
|
clearTimeout(activityTimer);
|
|
246
281
|
const duration = Date.now() - startTime;
|
|
282
|
+
// Cleanup isolated home
|
|
283
|
+
try {
|
|
284
|
+
(0, node_fs_1.rmSync)(isolatedHome, { recursive: true, force: true });
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// Ignore cleanup errors
|
|
288
|
+
}
|
|
247
289
|
resolve({
|
|
248
290
|
success: false,
|
|
249
291
|
exitCode: 1,
|
|
@@ -251,6 +293,8 @@ class GeminiProvider extends interface_js_1.BaseAIProvider {
|
|
|
251
293
|
stderr: error.message,
|
|
252
294
|
duration,
|
|
253
295
|
timedOut: false,
|
|
296
|
+
sessionId,
|
|
297
|
+
tokenUsage,
|
|
254
298
|
});
|
|
255
299
|
});
|
|
256
300
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,8 @@ export interface InvokeOptions {
|
|
|
25
25
|
* Providers should emit lightweight JSON-serializable events as work progresses.
|
|
26
26
|
*/
|
|
27
27
|
onActivity?: (activity: InvocationActivity) => void;
|
|
28
|
+
/** Resume a previous session instead of starting fresh */
|
|
29
|
+
resumeSessionId?: string;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* Activity entry emitted during a provider invocation.
|
|
@@ -33,6 +35,23 @@ export interface InvokeOptions {
|
|
|
33
35
|
export type InvocationActivity = Record<string, unknown> & {
|
|
34
36
|
type: string;
|
|
35
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Token usage information
|
|
40
|
+
*/
|
|
41
|
+
export interface TokenUsage {
|
|
42
|
+
/** Total input tokens */
|
|
43
|
+
inputTokens: number;
|
|
44
|
+
/** Total output tokens */
|
|
45
|
+
outputTokens: number;
|
|
46
|
+
/** Subset served from server-side cache (Codex, Gemini) */
|
|
47
|
+
cachedInputTokens?: number;
|
|
48
|
+
/** Tokens served from cache (Claude) */
|
|
49
|
+
cacheReadTokens?: number;
|
|
50
|
+
/** Tokens written to cache (Claude) */
|
|
51
|
+
cacheCreationTokens?: number;
|
|
52
|
+
/** Total cost for the invocation (Claude, Vibe) */
|
|
53
|
+
totalCostUsd?: number;
|
|
54
|
+
}
|
|
36
55
|
/**
|
|
37
56
|
* Result of an AI provider invocation
|
|
38
57
|
*/
|
|
@@ -49,6 +68,10 @@ export interface InvokeResult {
|
|
|
49
68
|
duration: number;
|
|
50
69
|
/** Whether the process was killed due to timeout */
|
|
51
70
|
timedOut: boolean;
|
|
71
|
+
/** Session ID from the provider CLI (if available) */
|
|
72
|
+
sessionId?: string;
|
|
73
|
+
/** Token usage statistics (if available) */
|
|
74
|
+
tokenUsage?: TokenUsage;
|
|
52
75
|
}
|
|
53
76
|
/**
|
|
54
77
|
* Error types that can be classified from provider output
|
|
@@ -96,6 +119,19 @@ export interface IAIProvider {
|
|
|
96
119
|
* @returns Promise resolving to the invocation result
|
|
97
120
|
*/
|
|
98
121
|
invoke(prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Resume a previous session with a new prompt
|
|
124
|
+
* @param sessionId The ID of the session to resume
|
|
125
|
+
* @param prompt The prompt text to send
|
|
126
|
+
* @param options Invocation options
|
|
127
|
+
* @returns Promise resolving to the invocation result
|
|
128
|
+
*/
|
|
129
|
+
resume(sessionId: string, prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Initialize the provider (e.g., fetch dynamic models)
|
|
132
|
+
* @returns Promise resolving when initialization is complete
|
|
133
|
+
*/
|
|
134
|
+
initialize?(): Promise<void>;
|
|
99
135
|
/**
|
|
100
136
|
* Check if this provider is available (CLI installed and accessible)
|
|
101
137
|
* @returns Promise resolving to true if available
|
|
@@ -167,6 +203,15 @@ export declare abstract class BaseAIProvider implements IAIProvider {
|
|
|
167
203
|
protected invocationTemplate: string | undefined;
|
|
168
204
|
abstract invoke(prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
169
205
|
abstract isAvailable(): Promise<boolean>;
|
|
206
|
+
/**
|
|
207
|
+
* Initialize the provider (e.g., fetch dynamic models).
|
|
208
|
+
* Default implementation does nothing.
|
|
209
|
+
*/
|
|
210
|
+
initialize(): Promise<void>;
|
|
211
|
+
/**
|
|
212
|
+
* Default implementation of resume calls invoke with resumeSessionId in options
|
|
213
|
+
*/
|
|
214
|
+
resume(sessionId: string, prompt: string, options: InvokeOptions): Promise<InvokeResult>;
|
|
170
215
|
abstract listModels(): string[];
|
|
171
216
|
abstract getModelInfo(): ModelInfo[];
|
|
172
217
|
abstract getDefaultModel(role: 'orchestrator' | 'coder' | 'reviewer'): string | undefined;
|
|
@@ -192,12 +237,28 @@ export declare abstract class BaseAIProvider implements IAIProvider {
|
|
|
192
237
|
* Build the command from the invocation template
|
|
193
238
|
* @param promptFile Path to the prompt file
|
|
194
239
|
* @param model Model identifier
|
|
240
|
+
* @param sessionId Optional session ID for resumption
|
|
195
241
|
* @returns Command string ready for execution
|
|
196
242
|
*/
|
|
197
|
-
protected buildCommand(promptFile: string, model: string): string;
|
|
243
|
+
protected buildCommand(promptFile: string, model: string, sessionId?: string): string;
|
|
198
244
|
/**
|
|
199
245
|
* Build child process env for provider CLI invocation.
|
|
246
|
+
*
|
|
247
|
+
* Strips known provider API-key env vars so the spawned CLI
|
|
248
|
+
* falls back to its own OAuth / login credentials instead of
|
|
249
|
+
* accidentally using Steroids' internal keys (e.g.
|
|
250
|
+
* STEROIDS_ANTHROPIC_API_KEY leaking as ANTHROPIC_API_KEY).
|
|
200
251
|
*/
|
|
201
252
|
protected getSanitizedCliEnv(overrides?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
253
|
+
/**
|
|
254
|
+
* Set up an isolated temporary home directory for a provider CLI.
|
|
255
|
+
* Copies/symlinks essential auth files from the real home to the isolated one.
|
|
256
|
+
*
|
|
257
|
+
* @param providerDir The provider-specific config directory (e.g. '.claude', '.gemini')
|
|
258
|
+
* @param authFiles Array of critical auth/config filenames to preserve (e.g. ['config.json', 'state.json'])
|
|
259
|
+
* @param baseDir Optional pre-existing isolated home directory to use
|
|
260
|
+
* @returns Path to the isolated home directory
|
|
261
|
+
*/
|
|
262
|
+
protected setupIsolatedHome(providerDir: string, authFiles: string[], baseDir?: string): string;
|
|
202
263
|
}
|
|
203
264
|
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* AI Provider Interface
|
|
4
|
-
* Defines the contract for AI providers (Claude, Gemini, OpenAI, etc.)
|
|
5
|
-
*/
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
3
|
exports.BaseAIProvider = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
8
|
/**
|
|
9
9
|
* Base abstract class for AI providers
|
|
10
10
|
* Provides common functionality
|
|
@@ -12,6 +12,19 @@ exports.BaseAIProvider = void 0;
|
|
|
12
12
|
class BaseAIProvider {
|
|
13
13
|
cliPath;
|
|
14
14
|
invocationTemplate;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the provider (e.g., fetch dynamic models).
|
|
17
|
+
* Default implementation does nothing.
|
|
18
|
+
*/
|
|
19
|
+
async initialize() {
|
|
20
|
+
// No-op by default
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Default implementation of resume calls invoke with resumeSessionId in options
|
|
24
|
+
*/
|
|
25
|
+
async resume(sessionId, prompt, options) {
|
|
26
|
+
return this.invoke(prompt, { ...options, resumeSessionId: sessionId });
|
|
27
|
+
}
|
|
15
28
|
/**
|
|
16
29
|
* Classify an error based on exit code and stderr
|
|
17
30
|
* Subclasses can override for provider-specific error detection
|
|
@@ -37,6 +50,14 @@ class BaseAIProvider {
|
|
|
37
50
|
retryAfterMs: 60000,
|
|
38
51
|
};
|
|
39
52
|
}
|
|
53
|
+
if (/demand|compute|pressure|busy|wait/i.test(stderr)) {
|
|
54
|
+
return {
|
|
55
|
+
type: 'rate_limit',
|
|
56
|
+
message: 'High compute demand, waiting for capacity',
|
|
57
|
+
retryable: true,
|
|
58
|
+
retryAfterMs: 300000, // 5 minutes
|
|
59
|
+
};
|
|
60
|
+
}
|
|
40
61
|
if (/billing|budget|hard limit/i.test(stderr)) {
|
|
41
62
|
return {
|
|
42
63
|
type: 'credit_exhaustion',
|
|
@@ -53,10 +74,12 @@ class BaseAIProvider {
|
|
|
53
74
|
retryable: false,
|
|
54
75
|
};
|
|
55
76
|
}
|
|
56
|
-
if (stderrLower.includes('rate limit') || stderr.includes('429')
|
|
77
|
+
if (stderrLower.includes('rate limit') || stderr.includes('429') ||
|
|
78
|
+
stderrLower.includes('overloaded') || stderrLower.includes('capacity') ||
|
|
79
|
+
stderrLower.includes('busy')) {
|
|
57
80
|
return {
|
|
58
81
|
type: 'rate_limit',
|
|
59
|
-
message: '
|
|
82
|
+
message: 'Provider is overloaded or rate limited',
|
|
60
83
|
retryable: true,
|
|
61
84
|
retryAfterMs: 60000,
|
|
62
85
|
};
|
|
@@ -155,24 +178,94 @@ class BaseAIProvider {
|
|
|
155
178
|
* Build the command from the invocation template
|
|
156
179
|
* @param promptFile Path to the prompt file
|
|
157
180
|
* @param model Model identifier
|
|
181
|
+
* @param sessionId Optional session ID for resumption
|
|
158
182
|
* @returns Command string ready for execution
|
|
159
183
|
*/
|
|
160
|
-
buildCommand(promptFile, model) {
|
|
184
|
+
buildCommand(promptFile, model, sessionId) {
|
|
161
185
|
const template = this.getInvocationTemplate();
|
|
162
186
|
const cli = this.cliPath ?? this.name;
|
|
163
187
|
return template
|
|
164
188
|
.replace('{cli}', cli)
|
|
165
189
|
.replace('{prompt_file}', promptFile)
|
|
166
|
-
.replace('{model}', model)
|
|
190
|
+
.replace('{model}', model)
|
|
191
|
+
.replace('{session_id}', sessionId ?? '');
|
|
167
192
|
}
|
|
168
193
|
/**
|
|
169
194
|
* Build child process env for provider CLI invocation.
|
|
195
|
+
*
|
|
196
|
+
* Strips known provider API-key env vars so the spawned CLI
|
|
197
|
+
* falls back to its own OAuth / login credentials instead of
|
|
198
|
+
* accidentally using Steroids' internal keys (e.g.
|
|
199
|
+
* STEROIDS_ANTHROPIC_API_KEY leaking as ANTHROPIC_API_KEY).
|
|
170
200
|
*/
|
|
171
201
|
getSanitizedCliEnv(overrides) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
202
|
+
const env = { ...process.env };
|
|
203
|
+
// Remove raw provider API keys — CLIs should use their own auth
|
|
204
|
+
const keysToStrip = [
|
|
205
|
+
'ANTHROPIC_API_KEY',
|
|
206
|
+
'OPENAI_API_KEY',
|
|
207
|
+
'GOOGLE_API_KEY',
|
|
208
|
+
'GEMINI_API_KEY',
|
|
209
|
+
'GOOGLE_CLOUD_API_KEY',
|
|
210
|
+
'MISTRAL_API_KEY',
|
|
211
|
+
];
|
|
212
|
+
for (const key of keysToStrip) {
|
|
213
|
+
delete env[key];
|
|
214
|
+
}
|
|
215
|
+
return { ...env, ...overrides };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Set up an isolated temporary home directory for a provider CLI.
|
|
219
|
+
* Copies/symlinks essential auth files from the real home to the isolated one.
|
|
220
|
+
*
|
|
221
|
+
* @param providerDir The provider-specific config directory (e.g. '.claude', '.gemini')
|
|
222
|
+
* @param authFiles Array of critical auth/config filenames to preserve (e.g. ['config.json', 'state.json'])
|
|
223
|
+
* @param baseDir Optional pre-existing isolated home directory to use
|
|
224
|
+
* @returns Path to the isolated home directory
|
|
225
|
+
*/
|
|
226
|
+
setupIsolatedHome(providerDir, authFiles, baseDir) {
|
|
227
|
+
const uuid = (0, node_crypto_1.randomUUID)();
|
|
228
|
+
const isolatedHome = baseDir ?? (0, node_path_1.join)((0, node_os_1.tmpdir)(), `steroids-${this.name}-${uuid}`);
|
|
229
|
+
try {
|
|
230
|
+
if (!baseDir) {
|
|
231
|
+
(0, node_fs_1.mkdirSync)(isolatedHome, { recursive: true });
|
|
232
|
+
}
|
|
233
|
+
const realProviderPath = (0, node_path_1.join)((0, node_os_1.homedir)(), providerDir);
|
|
234
|
+
const isolatedProviderPath = (0, node_path_1.join)(isolatedHome, providerDir);
|
|
235
|
+
if ((0, node_fs_1.existsSync)(realProviderPath)) {
|
|
236
|
+
(0, node_fs_1.mkdirSync)(isolatedProviderPath, { recursive: true });
|
|
237
|
+
for (const file of authFiles) {
|
|
238
|
+
const src = (0, node_path_1.join)(realProviderPath, file);
|
|
239
|
+
const dest = (0, node_path_1.join)(isolatedProviderPath, file);
|
|
240
|
+
if ((0, node_fs_1.existsSync)(src)) {
|
|
241
|
+
try {
|
|
242
|
+
(0, node_fs_1.symlinkSync)(src, dest);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Fallback to copy if symlink fails
|
|
246
|
+
(0, node_fs_1.writeFileSync)(dest, (0, node_fs_1.readFileSync)(src));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Also symlink global git config so AI tools still work
|
|
252
|
+
['.gitconfig', '.ssh'].forEach(file => {
|
|
253
|
+
const src = (0, node_path_1.join)((0, node_os_1.homedir)(), file);
|
|
254
|
+
const dest = (0, node_path_1.join)(isolatedHome, file);
|
|
255
|
+
if ((0, node_fs_1.existsSync)(src)) {
|
|
256
|
+
try {
|
|
257
|
+
(0, node_fs_1.symlinkSync)(src, dest);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Ignore failure for optional system files
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
console.warn(`Failed to set up isolated ${this.name} home: ${e}`);
|
|
267
|
+
}
|
|
268
|
+
return isolatedHome;
|
|
176
269
|
}
|
|
177
270
|
}
|
|
178
271
|
exports.BaseAIProvider = BaseAIProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/providers/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,6 +92,9 @@ export declare function logInvocation(prompt: string, invokeOrResult: ((ctx?: In
|
|
|
92
92
|
taskId?: string;
|
|
93
93
|
projectPath?: string;
|
|
94
94
|
rejectionNumber?: number;
|
|
95
|
+
sessionId?: string;
|
|
96
|
+
resumedFromSessionId?: string;
|
|
97
|
+
invocationMode?: 'fresh' | 'resume';
|
|
95
98
|
}): Promise<InvokeResult>;
|
|
96
99
|
export {};
|
|
97
100
|
//# sourceMappingURL=invocation-logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invocation-logger.d.ts","sourceRoot":"","sources":["../../src/providers/invocation-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAaD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmC;gBAErC,MAAM,GAAE,sBAA2B;IAI/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IA2BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkDtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IA6BtB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAWhB;;OAEG;IACH,YAAY,IAAI,MAAM;CAevB;AAOD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAKrF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,KAAK,uBAAuB,GAAG;IAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAAE,CAAC;AAoBvF,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,YAAY,EACzF,QAAQ,EAAE;IACR,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"invocation-logger.d.ts","sourceRoot":"","sources":["../../src/providers/invocation-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAaD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAmC;gBAErC,MAAM,GAAE,sBAA2B;IAI/C;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IA2BpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkDtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IA6BtB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAWhB;;OAEG;IACH,YAAY,IAAI,MAAM;CAevB;AAOD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAKrF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,KAAK,uBAAuB,GAAG;IAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAA;CAAE,CAAC;AAoBvF,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,YAAY,EACzF,QAAQ,EAAE;IACR,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC,GACA,OAAO,CAAC,YAAY,CAAC,CA+KvB"}
|
|
@@ -272,20 +272,32 @@ async function logInvocation(prompt, invokeOrResult, metadata) {
|
|
|
272
272
|
const activity = (entry) => {
|
|
273
273
|
if (!activityLogFile)
|
|
274
274
|
return;
|
|
275
|
-
|
|
275
|
+
const now = Date.now();
|
|
276
|
+
appendJsonlLine(activityLogFile, { ts: now, ...entry });
|
|
277
|
+
// Update the database with the last activity timestamp
|
|
278
|
+
if (canDbLog && dbConn && invocationId !== null) {
|
|
279
|
+
try {
|
|
280
|
+
dbConn.db.prepare(`UPDATE task_invocations SET last_activity_at_ms = ? WHERE id = ?`).run(now, invocationId);
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// ignore best-effort update failures
|
|
284
|
+
}
|
|
285
|
+
}
|
|
276
286
|
};
|
|
277
287
|
if (canDbLog && projectPath) {
|
|
278
288
|
try {
|
|
279
289
|
const { openDatabase } = await import('../database/connection.js');
|
|
280
290
|
const conn = openDatabase(projectPath);
|
|
281
291
|
dbConn = conn;
|
|
282
|
-
const insert = conn.db.prepare(`INSERT INTO task_invocations (
|
|
283
|
-
|
|
284
|
-
|
|
292
|
+
const insert = conn.db.prepare(`INSERT INTO task_invocations (
|
|
293
|
+
task_id, role, provider, model, prompt, started_at_ms, status,
|
|
294
|
+
rejection_number, session_id, resumed_from_session_id, invocation_mode
|
|
295
|
+
) VALUES (?, ?, ?, ?, ?, ?, 'running', ?, ?, ?, ?)`);
|
|
296
|
+
const info = insert.run(metadata.taskId, metadata.role, metadata.provider, metadata.model, prompt, startedAtMs, metadata.rejectionNumber ?? null, metadata.sessionId ?? null, metadata.resumedFromSessionId ?? null, metadata.invocationMode ?? 'fresh');
|
|
285
297
|
invocationId = Number(info.lastInsertRowid);
|
|
286
298
|
const invDir = ensureInvocationsDir(projectPath);
|
|
287
299
|
activityLogFile = (0, node_path_1.join)(invDir, `${invocationId}.log`);
|
|
288
|
-
activity({ type: 'start', role: metadata.role, provider: metadata.provider, model: metadata.model });
|
|
300
|
+
activity({ type: 'start', role: metadata.role, provider: metadata.provider, model: metadata.model, mode: metadata.invocationMode ?? 'fresh' });
|
|
289
301
|
}
|
|
290
302
|
catch (error) {
|
|
291
303
|
console.warn(`Failed to create running invocation record: ${error}`);
|
|
@@ -304,7 +316,7 @@ async function logInvocation(prompt, invokeOrResult, metadata) {
|
|
|
304
316
|
: invokeOrResult;
|
|
305
317
|
const completedAtMs = Date.now();
|
|
306
318
|
const status = result.timedOut ? 'timeout' : result.success ? 'completed' : 'failed';
|
|
307
|
-
activity({ type: 'complete', success: result.success, duration: result.duration, exitCode: result.exitCode, timedOut: result.timedOut });
|
|
319
|
+
activity({ type: 'complete', success: result.success, duration: result.duration, exitCode: result.exitCode, timedOut: result.timedOut, sessionId: result.sessionId });
|
|
308
320
|
// Human-readable log (legacy: .steroids/logs) for `steroids logs`
|
|
309
321
|
logger.log({
|
|
310
322
|
timestamp: new Date(startedAtMs).toISOString(),
|
|
@@ -323,8 +335,10 @@ async function logInvocation(prompt, invokeOrResult, metadata) {
|
|
|
323
335
|
if (canDbLog && dbConn && invocationId !== null) {
|
|
324
336
|
try {
|
|
325
337
|
dbConn.db.prepare(`UPDATE task_invocations
|
|
326
|
-
SET completed_at_ms = ?, status = ?, response = ?, error = ?, exit_code = ?,
|
|
327
|
-
|
|
338
|
+
SET completed_at_ms = ?, status = ?, response = ?, error = ?, exit_code = ?,
|
|
339
|
+
duration_ms = ?, success = ?, timed_out = ?, rejection_number = ?,
|
|
340
|
+
session_id = ?, token_usage_json = ?
|
|
341
|
+
WHERE id = ?`).run(completedAtMs, status, result.stdout, result.stderr || null, result.exitCode, result.duration, result.success ? 1 : 0, result.timedOut ? 1 : 0, metadata.rejectionNumber ?? null, result.sessionId ?? metadata.sessionId ?? null, result.tokenUsage ? JSON.stringify(result.tokenUsage) : null, invocationId);
|
|
328
342
|
}
|
|
329
343
|
catch (error) {
|
|
330
344
|
console.warn(`Failed to update invocation record: ${error}`);
|