@gracefultools/astrid-sdk 0.7.14 → 0.7.16
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/bin/cli.js +102 -21
- package/dist/bin/cli.js.map +1 -1
- package/dist/executors/shared/index.d.ts +9 -0
- package/dist/executors/shared/index.d.ts.map +1 -0
- package/dist/executors/shared/index.js +21 -0
- package/dist/executors/shared/index.js.map +1 -0
- package/dist/executors/shared/tool-executor.d.ts +52 -0
- package/dist/executors/shared/tool-executor.d.ts.map +1 -0
- package/dist/executors/shared/tool-executor.js +262 -0
- package/dist/executors/shared/tool-executor.js.map +1 -0
- package/dist/executors/shared/tool-schemas.d.ts +61 -0
- package/dist/executors/shared/tool-schemas.d.ts.map +1 -0
- package/dist/executors/shared/tool-schemas.js +135 -0
- package/dist/executors/shared/tool-schemas.js.map +1 -0
- package/dist/executors/terminal-base.d.ts +100 -4
- package/dist/executors/terminal-base.d.ts.map +1 -1
- package/dist/executors/terminal-base.js +406 -0
- package/dist/executors/terminal-base.js.map +1 -1
- package/dist/executors/terminal-claude.d.ts +23 -4
- package/dist/executors/terminal-claude.d.ts.map +1 -1
- package/dist/executors/terminal-claude.js +190 -62
- package/dist/executors/terminal-claude.js.map +1 -1
- package/dist/executors/terminal-executors.test.js +190 -0
- package/dist/executors/terminal-executors.test.js.map +1 -1
- package/dist/executors/terminal-gemini.d.ts +4 -3
- package/dist/executors/terminal-gemini.d.ts.map +1 -1
- package/dist/executors/terminal-gemini.js +87 -191
- package/dist/executors/terminal-gemini.js.map +1 -1
- package/dist/executors/terminal-openai.d.ts +4 -3
- package/dist/executors/terminal-openai.d.ts.map +1 -1
- package/dist/executors/terminal-openai.js +87 -212
- package/dist/executors/terminal-openai.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,13 @@ exports.formatCommentHistory = formatCommentHistory;
|
|
|
11
11
|
exports.captureGitBaseline = captureGitBaseline;
|
|
12
12
|
exports.captureGitChanges = captureGitChanges;
|
|
13
13
|
exports.buildDefaultPrompt = buildDefaultPrompt;
|
|
14
|
+
exports.createParserState = createParserState;
|
|
15
|
+
exports.parseOutputChunk = parseOutputChunk;
|
|
16
|
+
exports.formatContentAsComment = formatContentAsComment;
|
|
17
|
+
exports.getWorktreeConfig = getWorktreeConfig;
|
|
18
|
+
exports.createWorktree = createWorktree;
|
|
19
|
+
exports.shouldUseWorktree = shouldUseWorktree;
|
|
20
|
+
exports.pushWorktreeChanges = pushWorktreeChanges;
|
|
14
21
|
// ============================================================================
|
|
15
22
|
// HELPER FUNCTIONS
|
|
16
23
|
// ============================================================================
|
|
@@ -143,4 +150,403 @@ Your response MUST include:
|
|
|
143
150
|
|
|
144
151
|
Begin by analyzing the task.`;
|
|
145
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a new parser state
|
|
155
|
+
*/
|
|
156
|
+
function createParserState() {
|
|
157
|
+
return {
|
|
158
|
+
buffer: '',
|
|
159
|
+
lastPlanPosted: 0,
|
|
160
|
+
lastProgressPosted: 0,
|
|
161
|
+
lastQuestionPosted: 0,
|
|
162
|
+
postedPlans: new Set(),
|
|
163
|
+
postedQuestions: new Set(),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Patterns for detecting different types of content
|
|
168
|
+
*/
|
|
169
|
+
const PLAN_PATTERNS = [
|
|
170
|
+
// Plan mode headers
|
|
171
|
+
/^#+\s*(?:Implementation\s+)?Plan\b/mi,
|
|
172
|
+
/^#+\s*Approach\b/mi,
|
|
173
|
+
/^\*\*(?:Implementation\s+)?Plan\*\*/mi,
|
|
174
|
+
// Numbered plan steps
|
|
175
|
+
/^(?:##\s+)?(?:Step\s+)?\d+\.\s+(?:First|Create|Modify|Update|Add|Remove|Fix|Implement)/mi,
|
|
176
|
+
// Plan summary patterns
|
|
177
|
+
/(?:Here(?:'s| is) (?:my|the) (?:implementation )?plan|I(?:'ll| will) (?:start|begin) by|Let me (?:outline|plan|describe) (?:my|the) approach)/i,
|
|
178
|
+
];
|
|
179
|
+
const QUESTION_PATTERNS = [
|
|
180
|
+
// Direct questions to user
|
|
181
|
+
/(?:Do you want|Would you like|Should I|Can I|May I)\s+.+\?/i,
|
|
182
|
+
/(?:Please (?:confirm|clarify|specify|let me know))/i,
|
|
183
|
+
/(?:Before I (?:proceed|continue|start)|I need (?:to know|clarification|more information))/i,
|
|
184
|
+
// Options presented
|
|
185
|
+
/(?:Option\s+[1-3A-C]:|Which (?:approach|option|method) (?:do you prefer|should I use)\?)/i,
|
|
186
|
+
];
|
|
187
|
+
const PROGRESS_PATTERNS = [
|
|
188
|
+
// File operations
|
|
189
|
+
/(?:Creating|Modifying|Updating|Deleting|Reading|Writing)\s+(?:file\s+)?[`']?[\w\/.]+[`']?/i,
|
|
190
|
+
// Git operations
|
|
191
|
+
/(?:Committing|Pushing|Creating branch|Creating PR|Merging)/i,
|
|
192
|
+
// Test/build operations
|
|
193
|
+
/(?:Running|Executing)\s+(?:tests|build|lint|predeploy)/i,
|
|
194
|
+
];
|
|
195
|
+
const PR_CREATED_PATTERN = /(?:PR|Pull Request)\s+(?:created|opened).*?(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/i;
|
|
196
|
+
/**
|
|
197
|
+
* Parse a chunk of output and detect any plans, questions, or progress updates.
|
|
198
|
+
* Uses the state to track what's been posted to avoid duplicates.
|
|
199
|
+
*
|
|
200
|
+
* @param chunk - New output chunk to parse
|
|
201
|
+
* @param state - Parser state for tracking
|
|
202
|
+
* @returns Array of detected content items
|
|
203
|
+
*/
|
|
204
|
+
function parseOutputChunk(chunk, state) {
|
|
205
|
+
const results = [];
|
|
206
|
+
// Add chunk to buffer
|
|
207
|
+
state.buffer += chunk;
|
|
208
|
+
// Process complete paragraphs/sections (split by double newline)
|
|
209
|
+
const sections = state.buffer.split(/\n\n+/);
|
|
210
|
+
// Keep the last incomplete section in buffer
|
|
211
|
+
if (!state.buffer.endsWith('\n\n')) {
|
|
212
|
+
state.buffer = sections.pop() || '';
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
state.buffer = '';
|
|
216
|
+
}
|
|
217
|
+
const now = Date.now();
|
|
218
|
+
for (const section of sections) {
|
|
219
|
+
const trimmed = section.trim();
|
|
220
|
+
if (!trimmed || trimmed.length < 20)
|
|
221
|
+
continue;
|
|
222
|
+
// Create a hash for deduplication
|
|
223
|
+
const hash = trimmed.slice(0, 100);
|
|
224
|
+
// Check for PR created
|
|
225
|
+
const prMatch = trimmed.match(PR_CREATED_PATTERN);
|
|
226
|
+
if (prMatch) {
|
|
227
|
+
results.push({
|
|
228
|
+
type: 'pr_created',
|
|
229
|
+
content: prMatch[1],
|
|
230
|
+
raw: trimmed,
|
|
231
|
+
});
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
// Check for plans (rate limit: once per 30s)
|
|
235
|
+
if (now - state.lastPlanPosted > 30000) {
|
|
236
|
+
for (const pattern of PLAN_PATTERNS) {
|
|
237
|
+
if (pattern.test(trimmed) && !state.postedPlans.has(hash)) {
|
|
238
|
+
state.postedPlans.add(hash);
|
|
239
|
+
state.lastPlanPosted = now;
|
|
240
|
+
results.push({
|
|
241
|
+
type: 'plan',
|
|
242
|
+
content: extractPlanContent(trimmed),
|
|
243
|
+
raw: trimmed,
|
|
244
|
+
});
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Check for questions (rate limit: once per 60s)
|
|
250
|
+
if (now - state.lastQuestionPosted > 60000) {
|
|
251
|
+
for (const pattern of QUESTION_PATTERNS) {
|
|
252
|
+
if (pattern.test(trimmed) && !state.postedQuestions.has(hash)) {
|
|
253
|
+
state.postedQuestions.add(hash);
|
|
254
|
+
state.lastQuestionPosted = now;
|
|
255
|
+
results.push({
|
|
256
|
+
type: 'question',
|
|
257
|
+
content: trimmed,
|
|
258
|
+
raw: trimmed,
|
|
259
|
+
});
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Check for progress (rate limit: once per 15s)
|
|
265
|
+
if (now - state.lastProgressPosted > 15000) {
|
|
266
|
+
for (const pattern of PROGRESS_PATTERNS) {
|
|
267
|
+
if (pattern.test(trimmed)) {
|
|
268
|
+
state.lastProgressPosted = now;
|
|
269
|
+
results.push({
|
|
270
|
+
type: 'progress',
|
|
271
|
+
content: extractProgressSummary(trimmed),
|
|
272
|
+
raw: trimmed,
|
|
273
|
+
});
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return results;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Extract the key content from a plan section
|
|
283
|
+
*/
|
|
284
|
+
function extractPlanContent(text) {
|
|
285
|
+
// Limit to first 1000 chars and clean up
|
|
286
|
+
const limited = text.slice(0, 1000);
|
|
287
|
+
// If it's very long, add truncation indicator
|
|
288
|
+
if (text.length > 1000) {
|
|
289
|
+
return limited + '\n\n*[Plan truncated...]*';
|
|
290
|
+
}
|
|
291
|
+
return limited;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Extract a short progress summary
|
|
295
|
+
*/
|
|
296
|
+
function extractProgressSummary(text) {
|
|
297
|
+
// Get first line or first 200 chars
|
|
298
|
+
const firstLine = text.split('\n')[0];
|
|
299
|
+
if (firstLine.length <= 200) {
|
|
300
|
+
return firstLine;
|
|
301
|
+
}
|
|
302
|
+
return firstLine.slice(0, 200) + '...';
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Format detected content as a comment for posting
|
|
306
|
+
*/
|
|
307
|
+
function formatContentAsComment(content, agentName = 'Claude') {
|
|
308
|
+
switch (content.type) {
|
|
309
|
+
case 'plan':
|
|
310
|
+
return `📋 **${agentName}'s Plan**\n\n${content.content}\n\n---\n*Planning in progress...*`;
|
|
311
|
+
case 'question':
|
|
312
|
+
return `❓ **${agentName} has a question**\n\n${content.content}\n\n---\n*Please reply to this comment to provide clarification.*`;
|
|
313
|
+
case 'progress':
|
|
314
|
+
return `⏳ **Progress Update**\n\n${content.content}`;
|
|
315
|
+
case 'pr_created':
|
|
316
|
+
return `🔗 **Pull Request Created**\n\n[${content.content}](${content.content})`;
|
|
317
|
+
case 'error':
|
|
318
|
+
return `⚠️ **Issue Detected**\n\n${content.content}`;
|
|
319
|
+
default:
|
|
320
|
+
return content.content;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Get worktree configuration from environment variables
|
|
325
|
+
*/
|
|
326
|
+
function getWorktreeConfig() {
|
|
327
|
+
return {
|
|
328
|
+
enabled: process.env.ASTRID_AGENT_WORKTREE !== 'false',
|
|
329
|
+
baseDir: process.env.ASTRID_AGENT_WORKTREE_DIR || '/tmp/astrid-worktrees',
|
|
330
|
+
autoCleanup: process.env.ASTRID_AGENT_WORKTREE_CLEANUP !== 'false',
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Create an isolated git worktree for a task.
|
|
335
|
+
* This allows the agent to work on changes without affecting the main working directory.
|
|
336
|
+
*
|
|
337
|
+
* @param projectPath - Path to the main git repository
|
|
338
|
+
* @param taskId - Task ID for naming the worktree and branch
|
|
339
|
+
* @param branchPrefix - Prefix for the branch name (default: 'task/')
|
|
340
|
+
* @returns WorktreeResult with path and cleanup function
|
|
341
|
+
*/
|
|
342
|
+
async function createWorktree(projectPath, taskId, branchPrefix = 'task/') {
|
|
343
|
+
const { execSync } = await import('child_process');
|
|
344
|
+
const fs = await import('fs/promises');
|
|
345
|
+
const path = await import('path');
|
|
346
|
+
const config = getWorktreeConfig();
|
|
347
|
+
const shortId = taskId.slice(0, 8);
|
|
348
|
+
const branchName = `${branchPrefix}${shortId}`;
|
|
349
|
+
const worktreePath = path.join(config.baseDir, `task-${shortId}-${Date.now()}`);
|
|
350
|
+
console.log(`🌳 Creating git worktree for task ${shortId}...`);
|
|
351
|
+
console.log(` Branch: ${branchName}`);
|
|
352
|
+
console.log(` Path: ${worktreePath}`);
|
|
353
|
+
try {
|
|
354
|
+
// Ensure base directory exists
|
|
355
|
+
await fs.mkdir(config.baseDir, { recursive: true });
|
|
356
|
+
// Fetch latest from origin to ensure we have up-to-date refs
|
|
357
|
+
try {
|
|
358
|
+
execSync('git fetch origin', {
|
|
359
|
+
cwd: projectPath,
|
|
360
|
+
stdio: 'pipe',
|
|
361
|
+
timeout: 30000,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
console.log(' ⚠️ Could not fetch from origin (continuing anyway)');
|
|
366
|
+
}
|
|
367
|
+
// Check if branch already exists (local or remote)
|
|
368
|
+
let branchExists = false;
|
|
369
|
+
try {
|
|
370
|
+
execSync(`git rev-parse --verify ${branchName}`, {
|
|
371
|
+
cwd: projectPath,
|
|
372
|
+
stdio: 'pipe',
|
|
373
|
+
});
|
|
374
|
+
branchExists = true;
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
// Branch doesn't exist locally, check remote
|
|
378
|
+
try {
|
|
379
|
+
execSync(`git rev-parse --verify origin/${branchName}`, {
|
|
380
|
+
cwd: projectPath,
|
|
381
|
+
stdio: 'pipe',
|
|
382
|
+
});
|
|
383
|
+
branchExists = true;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
// Branch doesn't exist at all
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (branchExists) {
|
|
390
|
+
// Use existing branch
|
|
391
|
+
console.log(` 📌 Using existing branch: ${branchName}`);
|
|
392
|
+
execSync(`git worktree add "${worktreePath}" ${branchName}`, {
|
|
393
|
+
cwd: projectPath,
|
|
394
|
+
stdio: 'pipe',
|
|
395
|
+
timeout: 60000,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// Create new branch from main/master
|
|
400
|
+
const defaultBranch = getDefaultBranch(projectPath);
|
|
401
|
+
console.log(` 🌱 Creating new branch from ${defaultBranch}`);
|
|
402
|
+
execSync(`git worktree add -b ${branchName} "${worktreePath}" ${defaultBranch}`, {
|
|
403
|
+
cwd: projectPath,
|
|
404
|
+
stdio: 'pipe',
|
|
405
|
+
timeout: 60000,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
console.log(` ✅ Worktree created successfully`);
|
|
409
|
+
// Create cleanup function
|
|
410
|
+
const cleanup = async () => {
|
|
411
|
+
if (!config.autoCleanup) {
|
|
412
|
+
console.log(` ⏭️ Skipping worktree cleanup (auto-cleanup disabled)`);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
console.log(` 🧹 Cleaning up worktree: ${worktreePath}`);
|
|
416
|
+
try {
|
|
417
|
+
// Remove the worktree
|
|
418
|
+
execSync(`git worktree remove "${worktreePath}" --force`, {
|
|
419
|
+
cwd: projectPath,
|
|
420
|
+
stdio: 'pipe',
|
|
421
|
+
timeout: 30000,
|
|
422
|
+
});
|
|
423
|
+
console.log(` ✅ Worktree removed`);
|
|
424
|
+
}
|
|
425
|
+
catch (error) {
|
|
426
|
+
console.error(` ⚠️ Failed to remove worktree:`, error);
|
|
427
|
+
// Try to force remove the directory
|
|
428
|
+
try {
|
|
429
|
+
await fs.rm(worktreePath, { recursive: true, force: true });
|
|
430
|
+
// Prune the worktree reference
|
|
431
|
+
execSync('git worktree prune', {
|
|
432
|
+
cwd: projectPath,
|
|
433
|
+
stdio: 'pipe',
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
console.error(` ⚠️ Could not clean up worktree directory`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
return {
|
|
442
|
+
worktreePath,
|
|
443
|
+
branchName,
|
|
444
|
+
cleanup,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
console.error(`❌ Failed to create worktree:`, error);
|
|
449
|
+
throw new Error(`Failed to create worktree: ${error instanceof Error ? error.message : String(error)}`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Get the default branch name (main or master)
|
|
454
|
+
*/
|
|
455
|
+
function getDefaultBranch(projectPath) {
|
|
456
|
+
const { execSync } = require('child_process');
|
|
457
|
+
try {
|
|
458
|
+
// Try to get the default branch from remote
|
|
459
|
+
const result = execSync('git symbolic-ref refs/remotes/origin/HEAD', {
|
|
460
|
+
cwd: projectPath,
|
|
461
|
+
encoding: 'utf-8',
|
|
462
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
463
|
+
});
|
|
464
|
+
return result.trim().replace('refs/remotes/origin/', '');
|
|
465
|
+
}
|
|
466
|
+
catch {
|
|
467
|
+
// Fall back to checking if main or master exists
|
|
468
|
+
try {
|
|
469
|
+
execSync('git rev-parse --verify main', {
|
|
470
|
+
cwd: projectPath,
|
|
471
|
+
stdio: 'pipe',
|
|
472
|
+
});
|
|
473
|
+
return 'main';
|
|
474
|
+
}
|
|
475
|
+
catch {
|
|
476
|
+
return 'master';
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Check if worktree isolation should be used
|
|
482
|
+
*/
|
|
483
|
+
function shouldUseWorktree() {
|
|
484
|
+
return getWorktreeConfig().enabled;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Push changes from worktree and create PR
|
|
488
|
+
* Returns the PR URL if successful
|
|
489
|
+
*/
|
|
490
|
+
async function pushWorktreeChanges(worktreePath, branchName, taskTitle) {
|
|
491
|
+
const { execSync } = await import('child_process');
|
|
492
|
+
try {
|
|
493
|
+
// Check if there are any commits to push
|
|
494
|
+
const status = execSync('git status --porcelain', {
|
|
495
|
+
cwd: worktreePath,
|
|
496
|
+
encoding: 'utf-8',
|
|
497
|
+
});
|
|
498
|
+
if (status.trim()) {
|
|
499
|
+
console.log(` 📝 Uncommitted changes detected, committing...`);
|
|
500
|
+
// Stage and commit any remaining changes
|
|
501
|
+
execSync('git add -A', { cwd: worktreePath, stdio: 'pipe' });
|
|
502
|
+
const commitPrefix = taskTitle.toLowerCase().includes('fix') ? 'fix' : 'feat';
|
|
503
|
+
const shortTitle = taskTitle.slice(0, 50).replace(/"/g, "'");
|
|
504
|
+
try {
|
|
505
|
+
execSync(`git commit -m "${commitPrefix}: ${shortTitle}"`, {
|
|
506
|
+
cwd: worktreePath,
|
|
507
|
+
stdio: 'pipe',
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
catch {
|
|
511
|
+
// No changes to commit
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// Push the branch
|
|
515
|
+
console.log(` 🚀 Pushing branch: ${branchName}`);
|
|
516
|
+
execSync(`git push -u origin ${branchName}`, {
|
|
517
|
+
cwd: worktreePath,
|
|
518
|
+
stdio: 'pipe',
|
|
519
|
+
timeout: 60000,
|
|
520
|
+
});
|
|
521
|
+
// Check if PR already exists
|
|
522
|
+
try {
|
|
523
|
+
const existingPr = execSync(`gh pr view ${branchName} --json url -q .url`, {
|
|
524
|
+
cwd: worktreePath,
|
|
525
|
+
encoding: 'utf-8',
|
|
526
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
527
|
+
});
|
|
528
|
+
if (existingPr.trim()) {
|
|
529
|
+
console.log(` 📋 PR already exists: ${existingPr.trim()}`);
|
|
530
|
+
return existingPr.trim();
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
catch {
|
|
534
|
+
// No existing PR
|
|
535
|
+
}
|
|
536
|
+
// Create PR
|
|
537
|
+
console.log(` 📋 Creating pull request...`);
|
|
538
|
+
const prUrl = execSync(`gh pr create --title "${taskTitle.slice(0, 100)}" --body "Task implementation\n\nCreated by Astrid AI Agent" --head ${branchName}`, {
|
|
539
|
+
cwd: worktreePath,
|
|
540
|
+
encoding: 'utf-8',
|
|
541
|
+
timeout: 30000,
|
|
542
|
+
});
|
|
543
|
+
const url = prUrl.trim();
|
|
544
|
+
console.log(` ✅ PR created: ${url}`);
|
|
545
|
+
return url;
|
|
546
|
+
}
|
|
547
|
+
catch (error) {
|
|
548
|
+
console.error(` ⚠️ Failed to push/create PR:`, error);
|
|
549
|
+
return undefined;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
146
552
|
//# sourceMappingURL=terminal-base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-base.js","sourceRoot":"","sources":["../../src/executors/terminal-base.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"terminal-base.js","sourceRoot":"","sources":["../../src/executors/terminal-base.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAgIH,oCAeC;AAKD,oDASC;AAMD,gDAsBC;AAMD,8CAmDC;AAKD,gDA4BC;AAmCD,8CASC;AA4CD,4CAwFC;AAgCD,wDAoBC;AAqBD,8CAMC;AAuBD,wCAoHC;AAiCD,8CAEC;AAMD,kDAuEC;AAppBD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,aAAa,GAAG;QACpB,mDAAmD;QACnD,+BAA+B;QAC/B,qCAAqC;KACtC,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAA0C;IAC7E,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEjD,MAAM,SAAS,GAAG,QAAQ;SACvB,KAAK,CAAC,CAAC,EAAE,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;SAC1F,IAAI,CAAC,aAAa,CAAC,CAAA;IAEtB,OAAO,iCAAiC,SAAS,EAAE,CAAA;AACrD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;IAElD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YACtD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,YAAY;aACT,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrC,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,iCAAiC,CAAC,CAAA;QAC5E,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,QAAsB;IAEtB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;IAElD,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YACtD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QAEF,IAAI,KAAK,GAAG,YAAY;aACrB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA,CAAC,uBAAuB;QAE5D,sDAAsD;QACtD,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAA;YAClC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3C,IAAI,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,GAAG,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,0BAA0B,EAAE;gBAC1C,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC,UAAU;aAClC,CAAC,CAAA;YAEF,uBAAuB;YACvB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,8BAA8B,CAAA;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,MAAM,yBAAyB,CAAC,CAAA;QACrE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,OAAgB,EAChB,OAA6B;IAE7B,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAE9D,OAAO,WAAW,OAAO,CAAC,KAAK;;EAE/B,OAAO,CAAC,WAAW,IAAI,EAAE;EACzB,cAAc;;;;;;;;;;;;;;;;;;6BAkBa,CAAA;AAC7B,CAAC;AAgCD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO;QACL,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QACrB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,eAAe,EAAE,IAAI,GAAG,EAAE;KAC3B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,aAAa,GAAG;IACpB,oBAAoB;IACpB,sCAAsC;IACtC,oBAAoB;IACpB,uCAAuC;IACvC,sBAAsB;IACtB,0FAA0F;IAC1F,wBAAwB;IACxB,gJAAgJ;CACjJ,CAAA;AAED,MAAM,iBAAiB,GAAG;IACxB,2BAA2B;IAC3B,6DAA6D;IAC7D,qDAAqD;IACrD,4FAA4F;IAC5F,oBAAoB;IACpB,2FAA2F;CAC5F,CAAA;AAED,MAAM,iBAAiB,GAAG;IACxB,kBAAkB;IAClB,4FAA4F;IAC5F,iBAAiB;IACjB,6DAA6D;IAC7D,wBAAwB;IACxB,yDAAyD;CAC1D,CAAA;AAED,MAAM,kBAAkB,GAAG,wFAAwF,CAAA;AAEnH;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAC9B,KAAa,EACb,KAAwB;IAExB,MAAM,OAAO,GAAsB,EAAE,CAAA;IAErC,sBAAsB;IACtB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAA;IAErB,iEAAiE;IACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAE5C,6CAA6C;IAC7C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;YAAE,SAAQ;QAE7C,kCAAkC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAElC,uBAAuB;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACnB,GAAG,EAAE,OAAO;aACb,CAAC,CAAA;YACF,SAAQ;QACV,CAAC;QAED,6CAA6C;QAC7C,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,GAAG,KAAK,EAAE,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1D,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC3B,KAAK,CAAC,cAAc,GAAG,GAAG,CAAA;oBAC1B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;wBACpC,GAAG,EAAE,OAAO;qBACb,CAAC,CAAA;oBACF,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,IAAI,GAAG,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,EAAE,CAAC;YAC3C,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9D,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC/B,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAA;oBAC9B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,OAAO;wBAChB,GAAG,EAAE,OAAO;qBACb,CAAC,CAAA;oBACF,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,IAAI,GAAG,GAAG,KAAK,CAAC,kBAAkB,GAAG,KAAK,EAAE,CAAC;YAC3C,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1B,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAA;oBAC9B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC;wBACxC,GAAG,EAAE,OAAO;qBACb,CAAC,CAAA;oBACF,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,yCAAyC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAEnC,8CAA8C;IAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACvB,OAAO,OAAO,GAAG,2BAA2B,CAAA;IAC9C,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAY;IAC1C,oCAAoC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,OAAwB,EAAE,YAAoB,QAAQ;IAC3F,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,QAAQ,SAAS,gBAAgB,OAAO,CAAC,OAAO,oCAAoC,CAAA;QAE7F,KAAK,UAAU;YACb,OAAO,OAAO,SAAS,wBAAwB,OAAO,CAAC,OAAO,mEAAmE,CAAA;QAEnI,KAAK,UAAU;YACb,OAAO,4BAA4B,OAAO,CAAC,OAAO,EAAE,CAAA;QAEtD,KAAK,YAAY;YACf,OAAO,mCAAmC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,GAAG,CAAA;QAElF,KAAK,OAAO;YACV,OAAO,4BAA4B,OAAO,CAAC,OAAO,EAAE,CAAA;QAEtD;YACE,OAAO,OAAO,CAAC,OAAO,CAAA;IAC1B,CAAC;AACH,CAAC;AAkBD;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,OAAO;QACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,uBAAuB;QACzE,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,OAAO;KACnE,CAAA;AACH,CAAC;AAcD;;;;;;;;GAQG;AACI,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,MAAc,EACd,eAAuB,OAAO;IAE9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;IAClD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAEjC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClC,MAAM,UAAU,GAAG,GAAG,YAAY,GAAG,OAAO,EAAE,CAAA;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAE/E,OAAO,CAAC,GAAG,CAAC,qCAAqC,OAAO,KAAK,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,EAAE,CAAC,CAAA;IAEvC,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEnD,6DAA6D;QAC7D,IAAI,CAAC;YACH,QAAQ,CAAC,kBAAkB,EAAE;gBAC3B,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;QACtE,CAAC;QAED,mDAAmD;QACnD,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC;YACH,QAAQ,CAAC,0BAA0B,UAAU,EAAE,EAAE;gBAC/C,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;YACF,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,IAAI,CAAC;gBACH,QAAQ,CAAC,iCAAiC,UAAU,EAAE,EAAE;oBACtD,GAAG,EAAE,WAAW;oBAChB,KAAK,EAAE,MAAM;iBACd,CAAC,CAAA;gBACF,YAAY,GAAG,IAAI,CAAA;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,sBAAsB;YACtB,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAA;YACzD,QAAQ,CAAC,qBAAqB,YAAY,KAAK,UAAU,EAAE,EAAE;gBAC3D,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,qCAAqC;YACrC,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,kCAAkC,aAAa,EAAE,CAAC,CAAA;YAC9D,QAAQ,CAAC,uBAAuB,UAAU,KAAK,YAAY,KAAK,aAAa,EAAE,EAAE;gBAC/E,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;QAEjD,0BAA0B;QAC1B,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;gBACtE,OAAM;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC;gBACH,sBAAsB;gBACtB,QAAQ,CAAC,wBAAwB,YAAY,WAAW,EAAE;oBACxD,GAAG,EAAE,WAAW;oBAChB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,KAAK;iBACf,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;gBACxD,oCAAoC;gBACpC,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;oBAC3D,+BAA+B;oBAC/B,QAAQ,CAAC,oBAAoB,EAAE;wBAC7B,GAAG,EAAE,WAAW;wBAChB,KAAK,EAAE,MAAM;qBACd,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAA;gBAC9D,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,OAAO;YACL,YAAY;YACZ,UAAU;YACV,OAAO;SACR,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;QACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7C,IAAI,CAAC;QACH,4CAA4C;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,2CAA2C,EAAE;YACnE,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;QACjD,IAAI,CAAC;YACH,QAAQ,CAAC,6BAA6B,EAAE;gBACtC,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,MAAM;aACd,CAAC,CAAA;YACF,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,iBAAiB,EAAE,CAAC,OAAO,CAAA;AACpC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,YAAoB,EACpB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;IAElD,IAAI,CAAC;QACH,yCAAyC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YAChD,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAA;YAChE,yCAAyC;YACzC,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC5D,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;YAC7E,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC5D,IAAI,CAAC;gBACH,QAAQ,CAAC,kBAAkB,YAAY,KAAK,UAAU,GAAG,EAAE;oBACzD,GAAG,EAAE,YAAY;oBACjB,KAAK,EAAE,MAAM;iBACd,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAA;QAClD,QAAQ,CAAC,sBAAsB,UAAU,EAAE,EAAE;YAC3C,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QAEF,6BAA6B;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,UAAU,qBAAqB,EAAE;gBACzE,GAAG,EAAE,YAAY;gBACjB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAA;YACF,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,4BAA4B,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;gBAC5D,OAAO,UAAU,CAAC,IAAI,EAAE,CAAA;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QAED,YAAY;QACZ,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,QAAQ,CACpB,yBAAyB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,uEAAuE,UAAU,EAAE,EACnI;YACE,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CACF,CAAA;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QACxB,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAA;QACtC,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAA;QACvD,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -11,16 +11,24 @@
|
|
|
11
11
|
* - Extracts PR URLs and git changes from output
|
|
12
12
|
*/
|
|
13
13
|
import type { Session } from '../server/session-manager.js';
|
|
14
|
-
import type { TerminalExecutor, TerminalTaskContext, ParsedOutput, TerminalExecutionResult } from './terminal-base.js';
|
|
14
|
+
import type { TerminalExecutor, TerminalTaskContext, TerminalExecutorCallbacks, ParsedOutput, TerminalExecutionResult } from './terminal-base.js';
|
|
15
15
|
export type { TerminalExecutionResult, TerminalTaskContext } from './terminal-base.js';
|
|
16
16
|
export interface TerminalClaudeOptions {
|
|
17
17
|
model?: string;
|
|
18
18
|
maxTurns?: number;
|
|
19
19
|
timeout?: number;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Session data stored for each task
|
|
23
|
+
*/
|
|
24
|
+
interface StoredSession {
|
|
25
|
+
claudeSessionId?: string;
|
|
26
|
+
worktreePath?: string;
|
|
27
|
+
branchName?: string;
|
|
28
|
+
}
|
|
21
29
|
/**
|
|
22
30
|
* Simple file-based session store for terminal mode.
|
|
23
|
-
* Stores Claude session IDs for resumption support.
|
|
31
|
+
* Stores Claude session IDs and worktree paths for resumption support.
|
|
24
32
|
*/
|
|
25
33
|
declare class TerminalSessionStore {
|
|
26
34
|
private storagePath;
|
|
@@ -29,8 +37,14 @@ declare class TerminalSessionStore {
|
|
|
29
37
|
constructor();
|
|
30
38
|
load(): Promise<void>;
|
|
31
39
|
save(): Promise<void>;
|
|
40
|
+
getSession(taskId: string): Promise<StoredSession | undefined>;
|
|
32
41
|
getClaudeSessionId(taskId: string): Promise<string | undefined>;
|
|
33
42
|
setClaudeSessionId(taskId: string, claudeSessionId: string): Promise<void>;
|
|
43
|
+
setWorktree(taskId: string, worktreePath: string, branchName: string): Promise<void>;
|
|
44
|
+
getWorktree(taskId: string): Promise<{
|
|
45
|
+
path: string;
|
|
46
|
+
branch: string;
|
|
47
|
+
} | undefined>;
|
|
34
48
|
deleteSession(taskId: string): Promise<void>;
|
|
35
49
|
}
|
|
36
50
|
export declare const terminalSessionStore: TerminalSessionStore;
|
|
@@ -71,17 +85,22 @@ export declare class TerminalClaudeExecutor implements TerminalExecutor {
|
|
|
71
85
|
buildPrompt(session: Session, userMessage?: string, context?: TerminalTaskContext): Promise<string>;
|
|
72
86
|
/**
|
|
73
87
|
* Start a new Claude Code session with retry logic
|
|
88
|
+
* Uses git worktree isolation when enabled (default) to protect the main working directory
|
|
74
89
|
*/
|
|
75
|
-
startSession(session: Session, prompt?: string, context?: TerminalTaskContext,
|
|
90
|
+
startSession(session: Session, prompt?: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
|
|
76
91
|
/**
|
|
77
92
|
* Resume an existing Claude Code session with retry logic
|
|
93
|
+
* Uses stored worktree path if available
|
|
78
94
|
*/
|
|
79
|
-
resumeSession(session: Session, input: string, context?: TerminalTaskContext,
|
|
95
|
+
resumeSession(session: Session, input: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
|
|
80
96
|
/**
|
|
81
97
|
* Execute Claude Code CLI
|
|
82
98
|
*
|
|
83
99
|
* Uses stdin for prompt input instead of command-line args to avoid
|
|
84
100
|
* issues with long prompts, special characters, and newlines.
|
|
101
|
+
*
|
|
102
|
+
* Parses output in real-time to detect plans, questions, and progress,
|
|
103
|
+
* posting them as comments to the task via the onComment callback.
|
|
85
104
|
*/
|
|
86
105
|
private runClaude;
|
|
87
106
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-claude.d.ts","sourceRoot":"","sources":["../../src/executors/terminal-claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"terminal-claude.d.ts","sourceRoot":"","sources":["../../src/executors/terminal-claude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EAGnB,yBAAyB,EACzB,YAAY,EACZ,uBAAuB,EAExB,MAAM,oBAAoB,CAAA;AAgB3B,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAMtF,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAMD;;GAEG;AACH,UAAU,aAAa;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,MAAM,CAAQ;;IAShB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAK9D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK/D,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpF,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAQlF,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnD;AAGD,eAAO,MAAM,oBAAoB,sBAA6B,CAAA;AAM9D,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,GAAE,qBAA0B;IAO/C;;;OAGG;IACG,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GACrB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAkD7C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAkBhD;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB9D;;OAEG;IACH,oBAAoB,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,MAAM;IAWxE;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAuBlB;;;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;IAwInC;;;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;IA+GnC;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;IAkMjB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAsCzC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAezC;AAGD,eAAO,MAAM,sBAAsB,wBAA+B,CAAA"}
|