@gracefultools/astrid-sdk 0.7.16 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +127 -341
  2. package/dist/channel/channel.d.ts +33 -0
  3. package/dist/channel/channel.d.ts.map +1 -0
  4. package/dist/channel/channel.js +90 -0
  5. package/dist/channel/channel.js.map +1 -0
  6. package/dist/channel/index.d.ts +13 -0
  7. package/dist/channel/index.d.ts.map +1 -0
  8. package/dist/channel/index.js +23 -0
  9. package/dist/channel/index.js.map +1 -0
  10. package/dist/channel/message-formatter.d.ts +14 -0
  11. package/dist/channel/message-formatter.d.ts.map +1 -0
  12. package/dist/channel/message-formatter.js +71 -0
  13. package/dist/channel/message-formatter.js.map +1 -0
  14. package/dist/channel/oauth-client.d.ts +15 -0
  15. package/dist/channel/oauth-client.d.ts.map +1 -0
  16. package/dist/channel/oauth-client.js +45 -0
  17. package/dist/channel/oauth-client.js.map +1 -0
  18. package/dist/channel/rest-client.d.ts +16 -0
  19. package/dist/channel/rest-client.d.ts.map +1 -0
  20. package/dist/channel/rest-client.js +66 -0
  21. package/dist/channel/rest-client.js.map +1 -0
  22. package/dist/channel/session-mapper.d.ts +14 -0
  23. package/dist/channel/session-mapper.d.ts.map +1 -0
  24. package/dist/channel/session-mapper.js +37 -0
  25. package/dist/channel/session-mapper.js.map +1 -0
  26. package/dist/channel/sse-client.d.ts +31 -0
  27. package/dist/channel/sse-client.d.ts.map +1 -0
  28. package/dist/channel/sse-client.js +171 -0
  29. package/dist/channel/sse-client.js.map +1 -0
  30. package/dist/channel/types.d.ts +65 -0
  31. package/dist/channel/types.d.ts.map +1 -0
  32. package/dist/channel/types.js +3 -0
  33. package/dist/channel/types.js.map +1 -0
  34. package/dist/config/agent-workflow.js +7 -7
  35. package/dist/index.d.ts +1 -8
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +16 -30
  38. package/dist/index.js.map +1 -1
  39. package/dist/types/index.d.ts +1 -1
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/dist/utils/agent-config.d.ts.map +1 -1
  42. package/dist/utils/agent-config.js +14 -0
  43. package/dist/utils/agent-config.js.map +1 -1
  44. package/package.json +65 -77
  45. package/templates/.astrid.config.json +60 -60
  46. package/templates/ASTRID.template.md +74 -74
  47. package/dist/bin/cli.d.ts +0 -14
  48. package/dist/bin/cli.d.ts.map +0 -1
  49. package/dist/bin/cli.js +0 -1610
  50. package/dist/bin/cli.js.map +0 -1
  51. package/dist/executors/claude.d.ts +0 -65
  52. package/dist/executors/claude.d.ts.map +0 -1
  53. package/dist/executors/claude.js +0 -838
  54. package/dist/executors/claude.js.map +0 -1
  55. package/dist/executors/gemini.d.ts +0 -23
  56. package/dist/executors/gemini.d.ts.map +0 -1
  57. package/dist/executors/gemini.js +0 -558
  58. package/dist/executors/gemini.js.map +0 -1
  59. package/dist/executors/openai.d.ts +0 -17
  60. package/dist/executors/openai.d.ts.map +0 -1
  61. package/dist/executors/openai.js +0 -614
  62. package/dist/executors/openai.js.map +0 -1
  63. package/dist/executors/shared/index.d.ts +0 -9
  64. package/dist/executors/shared/index.d.ts.map +0 -1
  65. package/dist/executors/shared/index.js +0 -21
  66. package/dist/executors/shared/index.js.map +0 -1
  67. package/dist/executors/shared/tool-executor.d.ts +0 -52
  68. package/dist/executors/shared/tool-executor.d.ts.map +0 -1
  69. package/dist/executors/shared/tool-executor.js +0 -262
  70. package/dist/executors/shared/tool-executor.js.map +0 -1
  71. package/dist/executors/shared/tool-schemas.d.ts +0 -61
  72. package/dist/executors/shared/tool-schemas.d.ts.map +0 -1
  73. package/dist/executors/shared/tool-schemas.js +0 -135
  74. package/dist/executors/shared/tool-schemas.js.map +0 -1
  75. package/dist/executors/terminal-base.d.ts +0 -207
  76. package/dist/executors/terminal-base.d.ts.map +0 -1
  77. package/dist/executors/terminal-base.js +0 -552
  78. package/dist/executors/terminal-base.js.map +0 -1
  79. package/dist/executors/terminal-claude.d.ts +0 -116
  80. package/dist/executors/terminal-claude.d.ts.map +0 -1
  81. package/dist/executors/terminal-claude.js +0 -700
  82. package/dist/executors/terminal-claude.js.map +0 -1
  83. package/dist/executors/terminal-executors.test.d.ts +0 -8
  84. package/dist/executors/terminal-executors.test.d.ts.map +0 -1
  85. package/dist/executors/terminal-executors.test.js +0 -469
  86. package/dist/executors/terminal-executors.test.js.map +0 -1
  87. package/dist/executors/terminal-gemini.d.ts +0 -50
  88. package/dist/executors/terminal-gemini.d.ts.map +0 -1
  89. package/dist/executors/terminal-gemini.js +0 -401
  90. package/dist/executors/terminal-gemini.js.map +0 -1
  91. package/dist/executors/terminal-openai.d.ts +0 -50
  92. package/dist/executors/terminal-openai.d.ts.map +0 -1
  93. package/dist/executors/terminal-openai.js +0 -405
  94. package/dist/executors/terminal-openai.js.map +0 -1
  95. package/dist/server/astrid-client.d.ts +0 -77
  96. package/dist/server/astrid-client.d.ts.map +0 -1
  97. package/dist/server/astrid-client.js +0 -125
  98. package/dist/server/astrid-client.js.map +0 -1
  99. package/dist/server/index.d.ts +0 -38
  100. package/dist/server/index.d.ts.map +0 -1
  101. package/dist/server/index.js +0 -408
  102. package/dist/server/index.js.map +0 -1
  103. package/dist/server/repo-manager.d.ts +0 -41
  104. package/dist/server/repo-manager.d.ts.map +0 -1
  105. package/dist/server/repo-manager.js +0 -177
  106. package/dist/server/repo-manager.js.map +0 -1
  107. package/dist/server/session-manager.d.ts +0 -93
  108. package/dist/server/session-manager.d.ts.map +0 -1
  109. package/dist/server/session-manager.js +0 -217
  110. package/dist/server/session-manager.js.map +0 -1
  111. package/dist/server/webhook-signature.d.ts +0 -23
  112. package/dist/server/webhook-signature.d.ts.map +0 -1
  113. package/dist/server/webhook-signature.js +0 -74
  114. package/dist/server/webhook-signature.js.map +0 -1
@@ -1,401 +0,0 @@
1
- "use strict";
2
- /**
3
- * Terminal Gemini Executor
4
- *
5
- * Executes tasks using Gemini API with local tool execution.
6
- * This enables running tasks assigned to gemini@astrid.cc in terminal mode.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.terminalGeminiExecutor = exports.TerminalGeminiExecutor = void 0;
43
- const fs = __importStar(require("fs/promises"));
44
- const path = __importStar(require("path"));
45
- const terminal_base_js_1 = require("./terminal-base.js");
46
- const agent_config_js_1 = require("../utils/agent-config.js");
47
- const agent_workflow_js_1 = require("../config/agent-workflow.js");
48
- const index_js_1 = require("./shared/index.js");
49
- async function callGemini(contents, systemInstruction, apiKey, model) {
50
- const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
51
- const response = await fetch(url, {
52
- method: 'POST',
53
- headers: { 'Content-Type': 'application/json' },
54
- body: JSON.stringify({
55
- systemInstruction: { parts: [{ text: systemInstruction }] },
56
- contents,
57
- tools: [{ functionDeclarations: index_js_1.GEMINI_TOOL_DECLARATIONS }],
58
- toolConfig: {
59
- functionCallingConfig: {
60
- mode: 'AUTO'
61
- }
62
- },
63
- generationConfig: { maxOutputTokens: 8192, temperature: 0.2 }
64
- })
65
- });
66
- if (!response.ok) {
67
- const error = await response.text();
68
- throw new Error(`Gemini API error: ${error}`);
69
- }
70
- return response.json();
71
- }
72
- // ============================================================================
73
- // TERMINAL GEMINI EXECUTOR
74
- // ============================================================================
75
- class TerminalGeminiExecutor {
76
- apiKey;
77
- model;
78
- maxTurns;
79
- timeout;
80
- constructor(options = {}) {
81
- this.apiKey = options.apiKey || process.env.GEMINI_API_KEY || '';
82
- this.model = options.model || process.env.GEMINI_MODEL || agent_config_js_1.DEFAULT_MODELS.gemini;
83
- this.maxTurns = options.maxTurns || parseInt(process.env.GEMINI_MAX_TURNS || '50', 10);
84
- this.timeout = options.timeout || parseInt(process.env.GEMINI_TIMEOUT || '900000', 10); // 15 min default
85
- }
86
- /**
87
- * Check if Gemini API key is configured
88
- */
89
- async checkAvailable() {
90
- return !!this.apiKey;
91
- }
92
- /**
93
- * Read project context files
94
- */
95
- async readProjectContext(projectPath) {
96
- const MAX_CONTEXT_CHARS = 8000;
97
- const contextFiles = ['ASTRID.md', 'GEMINI.md', 'README.md'];
98
- let context = '';
99
- for (const file of contextFiles) {
100
- try {
101
- const filePath = path.join(projectPath, file);
102
- let content = await fs.readFile(filePath, 'utf-8');
103
- if (content.length > MAX_CONTEXT_CHARS) {
104
- content = content.slice(0, MAX_CONTEXT_CHARS) + '\n\n[... truncated ...]';
105
- }
106
- context += `\n\n## Project Instructions (from ${file})\n\n${content}`;
107
- break; // Only use the first found file
108
- }
109
- catch {
110
- // File doesn't exist, try next
111
- }
112
- }
113
- return context;
114
- }
115
- /**
116
- * Build system prompt for the task
117
- * Uses configuration from environment variables - see config/agent-workflow.ts
118
- */
119
- async buildSystemPrompt(session) {
120
- const projectContext = await this.readProjectContext(session.projectPath || process.cwd());
121
- const config = (0, agent_workflow_js_1.getAgentWorkflowConfig)();
122
- const workflowInstructions = (0, agent_workflow_js_1.buildWorkflowInstructions)(session.taskId, session.title, config);
123
- return `You are an expert software engineer working on a coding task.
124
- You have access to tools for reading, writing, and editing files, running bash commands, and searching the codebase.
125
-
126
- ${projectContext}
127
-
128
- ## Your Task
129
- ${session.title}
130
- ${session.description ? `\nDetails: ${session.description}` : ''}
131
-
132
- ${workflowInstructions}
133
-
134
- ## Additional Guidelines
135
-
136
- - Understand the task by reading relevant files first
137
- - Plan your approach - identify which files need changes
138
- - Use the available tools to implement changes
139
- - Complete the task by calling task_complete with a summary
140
-
141
- CRITICAL: You must use ACTUAL FUNCTION CALLS, not text descriptions.
142
- Do NOT write text saying "I will call X" - actually invoke the function.
143
-
144
- Begin by reading the relevant files to understand the current state.`;
145
- }
146
- /**
147
- * Start a new session to process a task
148
- * Uses git worktree isolation when enabled (default) to protect the main working directory
149
- */
150
- async startSession(session, prompt, context, callbacks) {
151
- const { onProgress, onComment } = callbacks || {};
152
- const userPrompt = prompt || (0, terminal_base_js_1.buildDefaultPrompt)(session, context);
153
- const commentHistory = (0, terminal_base_js_1.formatCommentHistory)(context?.comments);
154
- // Create parser state for detecting plans/questions
155
- const parserState = (0, terminal_base_js_1.createParserState)();
156
- console.log(`🚀 Starting Gemini terminal session for task: ${session.title}`);
157
- // Determine working directory - use worktree if enabled
158
- const useWorktree = (0, terminal_base_js_1.shouldUseWorktree)() && session.projectPath;
159
- let projectPath = session.projectPath || process.cwd();
160
- let worktreeResult;
161
- if (useWorktree) {
162
- try {
163
- console.log(`🌳 Creating isolated worktree for task...`);
164
- worktreeResult = await (0, terminal_base_js_1.createWorktree)(session.projectPath, session.taskId);
165
- projectPath = worktreeResult.worktreePath;
166
- console.log(`📁 Working directory (worktree): ${projectPath}`);
167
- }
168
- catch (error) {
169
- console.error(`⚠️ Failed to create worktree, falling back to main directory:`, error);
170
- projectPath = session.projectPath || process.cwd();
171
- console.log(`📁 Working directory (fallback): ${projectPath}`);
172
- }
173
- }
174
- else {
175
- console.log(`📁 Working directory: ${projectPath}`);
176
- }
177
- console.log(`🤖 Model: ${this.model}`);
178
- // Build system prompt with potentially updated project path
179
- const workingSession = { ...session, projectPath };
180
- const systemPrompt = await this.buildSystemPrompt(workingSession);
181
- const contents = [
182
- {
183
- role: 'user',
184
- parts: [{ text: commentHistory ? `${commentHistory}\n\n---\n\n${userPrompt}` : userPrompt }]
185
- }
186
- ];
187
- const modifiedFiles = [];
188
- let stdout = '';
189
- let prUrl;
190
- let completeSummary;
191
- const startTime = Date.now();
192
- try {
193
- for (let turn = 0; turn < this.maxTurns; turn++) {
194
- // Check timeout
195
- if (Date.now() - startTime > this.timeout) {
196
- stdout += '\n\n[Execution timed out]';
197
- break;
198
- }
199
- onProgress?.(`Turn ${turn + 1}/${this.maxTurns}...`);
200
- const response = await callGemini(contents, systemPrompt, this.apiKey, this.model);
201
- const candidate = response.candidates[0];
202
- if (!candidate) {
203
- stdout += '\n\n[No response from Gemini]';
204
- break;
205
- }
206
- // Add model response to history
207
- contents.push({ role: 'model', parts: candidate.content.parts });
208
- // Handle text responses and post comments
209
- const textPart = candidate.content.parts.find(p => p.text);
210
- if (textPart?.text) {
211
- stdout += `\n\n${textPart.text}`;
212
- console.log(`📝 Assistant: ${textPart.text.slice(0, 200)}...`);
213
- // Parse for plans/questions and post as comments
214
- if (onComment) {
215
- const detected = (0, terminal_base_js_1.parseOutputChunk)(textPart.text, parserState);
216
- for (const item of detected) {
217
- const comment = (0, terminal_base_js_1.formatContentAsComment)(item, 'Gemini');
218
- console.log(`📤 Posting ${item.type} comment to task...`);
219
- onComment(comment).catch(err => {
220
- console.error(`⚠️ Failed to post ${item.type} comment:`, err);
221
- });
222
- }
223
- }
224
- }
225
- // Handle function calls
226
- const functionCalls = candidate.content.parts.filter(p => p.functionCall);
227
- if (functionCalls.length > 0) {
228
- const functionResponses = [];
229
- for (const part of functionCalls) {
230
- if (!part.functionCall)
231
- continue;
232
- const { name, args } = part.functionCall;
233
- onProgress?.(`Using tool: ${name}`);
234
- console.log(`🔧 Tool: ${name}`);
235
- // Check for task_complete
236
- if (name === 'task_complete') {
237
- completeSummary = args.summary;
238
- stdout += `\n\n[Task Complete]\nSummary: ${completeSummary}`;
239
- // Capture git changes
240
- const changes = await (0, terminal_base_js_1.captureGitChanges)(projectPath);
241
- // If using worktree and have changes, push them
242
- if (worktreeResult && changes.files.length > 0) {
243
- console.log(`\n📤 Pushing changes from worktree...`);
244
- const pushPrUrl = await (0, terminal_base_js_1.pushWorktreeChanges)(worktreeResult.worktreePath, worktreeResult.branchName, session.title);
245
- if (pushPrUrl) {
246
- prUrl = pushPrUrl;
247
- }
248
- }
249
- if (!prUrl) {
250
- prUrl = (0, terminal_base_js_1.extractPrUrl)(stdout);
251
- }
252
- // Cleanup worktree before returning
253
- if (worktreeResult) {
254
- try {
255
- await worktreeResult.cleanup();
256
- }
257
- catch (cleanupError) {
258
- console.error(`⚠️ Worktree cleanup failed:`, cleanupError);
259
- }
260
- }
261
- return {
262
- exitCode: 0,
263
- stdout,
264
- stderr: '',
265
- modifiedFiles: changes.files.length > 0 ? changes.files : modifiedFiles,
266
- gitDiff: changes.diff,
267
- prUrl,
268
- };
269
- }
270
- // Execute tool
271
- const result = await (0, index_js_1.executeTool)(name, args, projectPath);
272
- stdout += `\n\n[${name}]: ${result.result.slice(0, 500)}${result.result.length > 500 ? '...' : ''}`;
273
- // Track modified files
274
- if (result.fileChange) {
275
- if (!modifiedFiles.includes(result.fileChange.path)) {
276
- modifiedFiles.push(result.fileChange.path);
277
- }
278
- }
279
- // Add function response
280
- functionResponses.push({
281
- functionResponse: { name, response: { result: result.result.slice(0, 10000) } }
282
- });
283
- }
284
- // Add all function responses in a single user message
285
- contents.push({ role: 'user', parts: functionResponses });
286
- continue;
287
- }
288
- // Check for stop condition
289
- if (candidate.finishReason === 'STOP') {
290
- // Check if we should prompt for completion
291
- if (!completeSummary) {
292
- contents.push({
293
- role: 'user',
294
- parts: [{ text: 'Please call task_complete to finalize your work, or continue if there is more to do.' }]
295
- });
296
- }
297
- else {
298
- break;
299
- }
300
- }
301
- }
302
- // Capture final git changes
303
- const changes = await (0, terminal_base_js_1.captureGitChanges)(projectPath);
304
- // If using worktree and have changes, push them
305
- if (worktreeResult && changes.files.length > 0) {
306
- console.log(`\n📤 Pushing changes from worktree...`);
307
- const pushPrUrl = await (0, terminal_base_js_1.pushWorktreeChanges)(worktreeResult.worktreePath, worktreeResult.branchName, session.title);
308
- if (pushPrUrl) {
309
- prUrl = pushPrUrl;
310
- }
311
- }
312
- if (!prUrl) {
313
- prUrl = (0, terminal_base_js_1.extractPrUrl)(stdout);
314
- }
315
- return {
316
- exitCode: 0,
317
- stdout,
318
- stderr: '',
319
- modifiedFiles: changes.files.length > 0 ? changes.files : modifiedFiles,
320
- gitDiff: changes.diff,
321
- prUrl,
322
- };
323
- }
324
- catch (error) {
325
- const errorMsg = error instanceof Error ? error.message : String(error);
326
- console.error(`❌ Gemini terminal execution error:`, errorMsg);
327
- return {
328
- exitCode: 1,
329
- stdout,
330
- stderr: errorMsg,
331
- modifiedFiles,
332
- };
333
- }
334
- finally {
335
- // Cleanup worktree if it was created
336
- if (worktreeResult) {
337
- try {
338
- await worktreeResult.cleanup();
339
- }
340
- catch (cleanupError) {
341
- console.error(`⚠️ Worktree cleanup failed:`, cleanupError);
342
- }
343
- }
344
- }
345
- }
346
- /**
347
- * Resume a session with new input
348
- * Note: Gemini doesn't have native session management, so we rebuild context
349
- */
350
- async resumeSession(session, input, context, callbacks) {
351
- console.log(`🔄 Resuming Gemini session (rebuilding context)`);
352
- // For Gemini, resuming means starting a new conversation with the follow-up
353
- const fullPrompt = (0, terminal_base_js_1.formatCommentHistory)(context?.comments) +
354
- `\n\n---\n\n## Follow-up Request\n\n${input}`;
355
- return this.startSession(session, fullPrompt, context, callbacks);
356
- }
357
- /**
358
- * Parse output to extract key information
359
- */
360
- parseOutput(output) {
361
- const result = {};
362
- const lines = output.split('\n');
363
- const files = [];
364
- for (const line of lines) {
365
- // Extract modified/created files
366
- const fileMatch = line.match(/(?:modified|created|edited|wrote):\s*[`'"]*([^`'"]+)[`'"]*/i);
367
- if (fileMatch) {
368
- files.push(fileMatch[1].trim());
369
- }
370
- // Extract PR URL
371
- const prMatch = line.match(/(https:\/\/github\.com\/[\w-]+\/[\w-]+\/pull\/\d+)/i);
372
- if (prMatch) {
373
- result.prUrl = prMatch[1];
374
- }
375
- // Extract error messages
376
- if (line.toLowerCase().includes('error:') || line.toLowerCase().includes('failed:')) {
377
- result.error = line.trim();
378
- }
379
- }
380
- if (files.length > 0) {
381
- result.files = [...new Set(files)];
382
- }
383
- // Try to extract summary (look for task_complete summary)
384
- const summaryMatch = output.match(/\[Task Complete\]\s*Summary:\s*([^\n]+)/i);
385
- if (summaryMatch) {
386
- result.summary = summaryMatch[1].trim();
387
- }
388
- else {
389
- // Fallback: last substantial paragraph
390
- const paragraphs = output.split(/\n\n+/).filter(p => p.trim().length > 50);
391
- if (paragraphs.length > 0) {
392
- result.summary = paragraphs[paragraphs.length - 1].trim().slice(0, 500);
393
- }
394
- }
395
- return result;
396
- }
397
- }
398
- exports.TerminalGeminiExecutor = TerminalGeminiExecutor;
399
- // Export singleton for convenience
400
- exports.terminalGeminiExecutor = new TerminalGeminiExecutor();
401
- //# sourceMappingURL=terminal-gemini.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-gemini.js","sourceRoot":"","sources":["../../src/executors/terminal-gemini.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Terminal OpenAI Executor
3
- *
4
- * Executes tasks using OpenAI API with local tool execution.
5
- * This enables running tasks assigned to openai@astrid.cc in terminal mode.
6
- */
7
- import type { Session } from '../server/session-manager.js';
8
- import type { TerminalExecutor, TerminalExecutionResult, TerminalTaskContext, TerminalExecutorCallbacks, ParsedOutput } from './terminal-base.js';
9
- export interface TerminalOpenAIOptions {
10
- apiKey?: string;
11
- model?: string;
12
- maxTurns?: number;
13
- timeout?: number;
14
- }
15
- export declare class TerminalOpenAIExecutor implements TerminalExecutor {
16
- private apiKey;
17
- private model;
18
- private maxTurns;
19
- private timeout;
20
- constructor(options?: TerminalOpenAIOptions);
21
- /**
22
- * Check if OpenAI API key is configured
23
- */
24
- checkAvailable(): Promise<boolean>;
25
- /**
26
- * Read project context files
27
- */
28
- private readProjectContext;
29
- /**
30
- * Build system prompt for the task
31
- * Uses configuration from environment variables - see config/agent-workflow.ts
32
- */
33
- private buildSystemPrompt;
34
- /**
35
- * Start a new session to process a task
36
- * Uses git worktree isolation when enabled (default) to protect the main working directory
37
- */
38
- startSession(session: Session, prompt?: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
39
- /**
40
- * Resume a session with new input
41
- * Note: OpenAI doesn't have native session management, so we rebuild context
42
- */
43
- resumeSession(session: Session, input: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
44
- /**
45
- * Parse output to extract key information
46
- */
47
- parseOutput(output: string): ParsedOutput;
48
- }
49
- export declare const terminalOpenAIExecutor: TerminalOpenAIExecutor;
50
- //# sourceMappingURL=terminal-openai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-openai.d.ts","sourceRoot":"","sources":["../../src/executors/terminal-openai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,YAAY,EACb,MAAM,oBAAoB,CAAA;AA8B3B,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA6ED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,GAAE,qBAA0B;IAO/C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;OAEG;YACW,kBAAkB;IAwBhC;;;OAGG;YACW,iBAAiB;IA6B/B;;;OAGG;IACG,YAAY,CAChB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,mBAAmB,EAC7B,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,uBAAuB,CAAC;IAgOnC;;;OAGG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,mBAAmB,EAC7B,SAAS,CAAC,EAAE,yBAAyB,GACpC,OAAO,CAAC,uBAAuB,CAAC;IAUnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CA0C1C;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAA"}