@gracefultools/astrid-sdk 0.7.13 ā 0.7.15
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
|
@@ -260,6 +260,147 @@ const terminal_base_js_1 = require("./terminal-base.js");
|
|
|
260
260
|
});
|
|
261
261
|
});
|
|
262
262
|
// ============================================================================
|
|
263
|
+
// OUTPUT PARSING TESTS
|
|
264
|
+
// ============================================================================
|
|
265
|
+
(0, vitest_1.describe)('Output parsing for plans and questions', () => {
|
|
266
|
+
(0, vitest_1.describe)('createParserState', () => {
|
|
267
|
+
(0, vitest_1.it)('creates a fresh parser state', () => {
|
|
268
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
269
|
+
(0, vitest_1.expect)(state.buffer).toBe('');
|
|
270
|
+
(0, vitest_1.expect)(state.lastPlanPosted).toBe(0);
|
|
271
|
+
(0, vitest_1.expect)(state.lastProgressPosted).toBe(0);
|
|
272
|
+
(0, vitest_1.expect)(state.lastQuestionPosted).toBe(0);
|
|
273
|
+
(0, vitest_1.expect)(state.postedPlans.size).toBe(0);
|
|
274
|
+
(0, vitest_1.expect)(state.postedQuestions.size).toBe(0);
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
(0, vitest_1.describe)('parseOutputChunk', () => {
|
|
278
|
+
(0, vitest_1.it)('detects plan headers in output', () => {
|
|
279
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
280
|
+
const output = `## Implementation Plan
|
|
281
|
+
|
|
282
|
+
1. First, I'll analyze the codebase
|
|
283
|
+
2. Then, I'll make the necessary changes
|
|
284
|
+
3. Finally, I'll run the tests
|
|
285
|
+
|
|
286
|
+
`;
|
|
287
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
288
|
+
(0, vitest_1.expect)(detected.length).toBeGreaterThan(0);
|
|
289
|
+
(0, vitest_1.expect)(detected.some(d => d.type === 'plan')).toBe(true);
|
|
290
|
+
});
|
|
291
|
+
(0, vitest_1.it)('detects questions in output', () => {
|
|
292
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
293
|
+
const output = `Before I proceed, I have a question.
|
|
294
|
+
|
|
295
|
+
Do you want me to use the existing database schema or create a new one?
|
|
296
|
+
|
|
297
|
+
`;
|
|
298
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
299
|
+
(0, vitest_1.expect)(detected.some(d => d.type === 'question')).toBe(true);
|
|
300
|
+
});
|
|
301
|
+
(0, vitest_1.it)('detects progress updates in output', () => {
|
|
302
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
303
|
+
const output = `Creating file src/components/Button.tsx
|
|
304
|
+
|
|
305
|
+
`;
|
|
306
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
307
|
+
(0, vitest_1.expect)(detected.some(d => d.type === 'progress')).toBe(true);
|
|
308
|
+
});
|
|
309
|
+
(0, vitest_1.it)('detects PR created in output', () => {
|
|
310
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
311
|
+
const output = `PR created at https://github.com/owner/repo/pull/123
|
|
312
|
+
|
|
313
|
+
`;
|
|
314
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
315
|
+
(0, vitest_1.expect)(detected.some(d => d.type === 'pr_created')).toBe(true);
|
|
316
|
+
const prItem = detected.find(d => d.type === 'pr_created');
|
|
317
|
+
(0, vitest_1.expect)(prItem?.content).toBe('https://github.com/owner/repo/pull/123');
|
|
318
|
+
});
|
|
319
|
+
(0, vitest_1.it)('ignores short chunks', () => {
|
|
320
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
321
|
+
const output = `OK
|
|
322
|
+
|
|
323
|
+
`;
|
|
324
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
325
|
+
(0, vitest_1.expect)(detected.length).toBe(0);
|
|
326
|
+
});
|
|
327
|
+
(0, vitest_1.it)('deduplicates repeated plans', () => {
|
|
328
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
329
|
+
const plan = `## Implementation Plan
|
|
330
|
+
|
|
331
|
+
Here is my implementation plan for this task.
|
|
332
|
+
|
|
333
|
+
`;
|
|
334
|
+
// First call should detect the plan
|
|
335
|
+
const first = (0, terminal_base_js_1.parseOutputChunk)(plan, state);
|
|
336
|
+
(0, vitest_1.expect)(first.some(d => d.type === 'plan')).toBe(true);
|
|
337
|
+
// Second call with same content should not duplicate
|
|
338
|
+
const second = (0, terminal_base_js_1.parseOutputChunk)(plan, state);
|
|
339
|
+
(0, vitest_1.expect)(second.filter(d => d.type === 'plan').length).toBe(0);
|
|
340
|
+
});
|
|
341
|
+
(0, vitest_1.it)('accumulates partial chunks in buffer', () => {
|
|
342
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
343
|
+
// Partial chunk (no double newline)
|
|
344
|
+
(0, terminal_base_js_1.parseOutputChunk)('## Plan\nThis is the start of a plan', state);
|
|
345
|
+
(0, vitest_1.expect)(state.buffer.length).toBeGreaterThan(0);
|
|
346
|
+
// Complete the chunk
|
|
347
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(' and here is the rest with enough content.\n\n', state);
|
|
348
|
+
// Buffer should be processed
|
|
349
|
+
(0, vitest_1.expect)(state.buffer).toBe('');
|
|
350
|
+
});
|
|
351
|
+
(0, vitest_1.it)('respects rate limiting for progress', () => {
|
|
352
|
+
const state = (0, terminal_base_js_1.createParserState)();
|
|
353
|
+
state.lastProgressPosted = Date.now(); // Just posted
|
|
354
|
+
const output = `Creating file src/test.ts
|
|
355
|
+
|
|
356
|
+
`;
|
|
357
|
+
const detected = (0, terminal_base_js_1.parseOutputChunk)(output, state);
|
|
358
|
+
// Should not detect progress because of rate limit
|
|
359
|
+
(0, vitest_1.expect)(detected.filter(d => d.type === 'progress').length).toBe(0);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
(0, vitest_1.describe)('formatContentAsComment', () => {
|
|
363
|
+
(0, vitest_1.it)('formats plan content', () => {
|
|
364
|
+
const content = {
|
|
365
|
+
type: 'plan',
|
|
366
|
+
content: 'My implementation plan here',
|
|
367
|
+
};
|
|
368
|
+
const comment = (0, terminal_base_js_1.formatContentAsComment)(content, 'Claude');
|
|
369
|
+
(0, vitest_1.expect)(comment).toContain("**Claude's Plan**");
|
|
370
|
+
(0, vitest_1.expect)(comment).toContain('My implementation plan here');
|
|
371
|
+
(0, vitest_1.expect)(comment).toContain('Planning in progress');
|
|
372
|
+
});
|
|
373
|
+
(0, vitest_1.it)('formats question content', () => {
|
|
374
|
+
const content = {
|
|
375
|
+
type: 'question',
|
|
376
|
+
content: 'Do you want me to use TypeScript?',
|
|
377
|
+
};
|
|
378
|
+
const comment = (0, terminal_base_js_1.formatContentAsComment)(content, 'OpenAI');
|
|
379
|
+
(0, vitest_1.expect)(comment).toContain('**OpenAI has a question**');
|
|
380
|
+
(0, vitest_1.expect)(comment).toContain('Do you want me to use TypeScript?');
|
|
381
|
+
(0, vitest_1.expect)(comment).toContain('reply to this comment');
|
|
382
|
+
});
|
|
383
|
+
(0, vitest_1.it)('formats progress content', () => {
|
|
384
|
+
const content = {
|
|
385
|
+
type: 'progress',
|
|
386
|
+
content: 'Running tests...',
|
|
387
|
+
};
|
|
388
|
+
const comment = (0, terminal_base_js_1.formatContentAsComment)(content, 'Gemini');
|
|
389
|
+
(0, vitest_1.expect)(comment).toContain('**Progress Update**');
|
|
390
|
+
(0, vitest_1.expect)(comment).toContain('Running tests...');
|
|
391
|
+
});
|
|
392
|
+
(0, vitest_1.it)('formats PR created content', () => {
|
|
393
|
+
const content = {
|
|
394
|
+
type: 'pr_created',
|
|
395
|
+
content: 'https://github.com/owner/repo/pull/123',
|
|
396
|
+
};
|
|
397
|
+
const comment = (0, terminal_base_js_1.formatContentAsComment)(content);
|
|
398
|
+
(0, vitest_1.expect)(comment).toContain('**Pull Request Created**');
|
|
399
|
+
(0, vitest_1.expect)(comment).toContain('https://github.com/owner/repo/pull/123');
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
// ============================================================================
|
|
263
404
|
// INTERFACE COMPLIANCE TESTS
|
|
264
405
|
// ============================================================================
|
|
265
406
|
(0, vitest_1.describe)('TerminalExecutor interface compliance', () => {
|
|
@@ -276,4 +417,53 @@ const terminal_base_js_1 = require("./terminal-base.js");
|
|
|
276
417
|
}
|
|
277
418
|
});
|
|
278
419
|
});
|
|
420
|
+
// ============================================================================
|
|
421
|
+
// GIT WORKTREE TESTS
|
|
422
|
+
// ============================================================================
|
|
423
|
+
const terminal_base_js_2 = require("./terminal-base.js");
|
|
424
|
+
(0, vitest_1.describe)('Git worktree configuration', () => {
|
|
425
|
+
const originalEnv = process.env;
|
|
426
|
+
(0, vitest_1.beforeEach)(() => {
|
|
427
|
+
process.env = { ...originalEnv };
|
|
428
|
+
});
|
|
429
|
+
(0, vitest_1.afterEach)(() => {
|
|
430
|
+
process.env = originalEnv;
|
|
431
|
+
});
|
|
432
|
+
(0, vitest_1.describe)('getWorktreeConfig', () => {
|
|
433
|
+
(0, vitest_1.it)('returns default config when no env vars set', () => {
|
|
434
|
+
delete process.env.ASTRID_AGENT_WORKTREE;
|
|
435
|
+
delete process.env.ASTRID_AGENT_WORKTREE_DIR;
|
|
436
|
+
delete process.env.ASTRID_AGENT_WORKTREE_CLEANUP;
|
|
437
|
+
const config = (0, terminal_base_js_2.getWorktreeConfig)();
|
|
438
|
+
(0, vitest_1.expect)(config.enabled).toBe(true); // Default is enabled
|
|
439
|
+
(0, vitest_1.expect)(config.baseDir).toBe('/tmp/astrid-worktrees');
|
|
440
|
+
(0, vitest_1.expect)(config.autoCleanup).toBe(true);
|
|
441
|
+
});
|
|
442
|
+
(0, vitest_1.it)('respects ASTRID_AGENT_WORKTREE=false to disable', () => {
|
|
443
|
+
process.env.ASTRID_AGENT_WORKTREE = 'false';
|
|
444
|
+
const config = (0, terminal_base_js_2.getWorktreeConfig)();
|
|
445
|
+
(0, vitest_1.expect)(config.enabled).toBe(false);
|
|
446
|
+
});
|
|
447
|
+
(0, vitest_1.it)('respects custom worktree directory', () => {
|
|
448
|
+
process.env.ASTRID_AGENT_WORKTREE_DIR = '/custom/worktrees';
|
|
449
|
+
const config = (0, terminal_base_js_2.getWorktreeConfig)();
|
|
450
|
+
(0, vitest_1.expect)(config.baseDir).toBe('/custom/worktrees');
|
|
451
|
+
});
|
|
452
|
+
(0, vitest_1.it)('respects cleanup setting', () => {
|
|
453
|
+
process.env.ASTRID_AGENT_WORKTREE_CLEANUP = 'false';
|
|
454
|
+
const config = (0, terminal_base_js_2.getWorktreeConfig)();
|
|
455
|
+
(0, vitest_1.expect)(config.autoCleanup).toBe(false);
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
(0, vitest_1.describe)('shouldUseWorktree', () => {
|
|
459
|
+
(0, vitest_1.it)('returns true by default', () => {
|
|
460
|
+
delete process.env.ASTRID_AGENT_WORKTREE;
|
|
461
|
+
(0, vitest_1.expect)((0, terminal_base_js_2.shouldUseWorktree)()).toBe(true);
|
|
462
|
+
});
|
|
463
|
+
(0, vitest_1.it)('returns false when disabled via env var', () => {
|
|
464
|
+
process.env.ASTRID_AGENT_WORKTREE = 'false';
|
|
465
|
+
(0, vitest_1.expect)((0, terminal_base_js_2.shouldUseWorktree)()).toBe(false);
|
|
466
|
+
});
|
|
467
|
+
});
|
|
468
|
+
});
|
|
279
469
|
//# sourceMappingURL=terminal-executors.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-executors.test.js","sourceRoot":"","sources":["../../src/executors/terminal-executors.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"terminal-executors.test.js","sourceRoot":"","sources":["../../src/executors/terminal-executors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This enables running tasks assigned to gemini@astrid.cc in terminal mode.
|
|
6
6
|
*/
|
|
7
7
|
import type { Session } from '../server/session-manager.js';
|
|
8
|
-
import type { TerminalExecutor, TerminalExecutionResult, TerminalTaskContext,
|
|
8
|
+
import type { TerminalExecutor, TerminalExecutionResult, TerminalTaskContext, TerminalExecutorCallbacks, ParsedOutput } from './terminal-base.js';
|
|
9
9
|
export interface TerminalGeminiOptions {
|
|
10
10
|
apiKey?: string;
|
|
11
11
|
model?: string;
|
|
@@ -33,13 +33,14 @@ export declare class TerminalGeminiExecutor implements TerminalExecutor {
|
|
|
33
33
|
private buildSystemPrompt;
|
|
34
34
|
/**
|
|
35
35
|
* Start a new session to process a task
|
|
36
|
+
* Uses git worktree isolation when enabled (default) to protect the main working directory
|
|
36
37
|
*/
|
|
37
|
-
startSession(session: Session, prompt?: string, context?: TerminalTaskContext,
|
|
38
|
+
startSession(session: Session, prompt?: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
|
|
38
39
|
/**
|
|
39
40
|
* Resume a session with new input
|
|
40
41
|
* Note: Gemini doesn't have native session management, so we rebuild context
|
|
41
42
|
*/
|
|
42
|
-
resumeSession(session: Session, input: string, context?: TerminalTaskContext,
|
|
43
|
+
resumeSession(session: Session, input: string, context?: TerminalTaskContext, callbacks?: TerminalExecutorCallbacks): Promise<TerminalExecutionResult>;
|
|
43
44
|
/**
|
|
44
45
|
* Parse output to extract key information
|
|
45
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-gemini.d.ts","sourceRoot":"","sources":["../../src/executors/terminal-gemini.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"terminal-gemini.d.ts","sourceRoot":"","sources":["../../src/executors/terminal-gemini.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;AAiED,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;IAwOnC;;;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"}
|
|
@@ -42,189 +42,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
42
42
|
exports.terminalGeminiExecutor = exports.TerminalGeminiExecutor = void 0;
|
|
43
43
|
const fs = __importStar(require("fs/promises"));
|
|
44
44
|
const path = __importStar(require("path"));
|
|
45
|
-
const child_process_1 = require("child_process");
|
|
46
|
-
const glob_1 = require("glob");
|
|
47
45
|
const terminal_base_js_1 = require("./terminal-base.js");
|
|
48
46
|
const agent_config_js_1 = require("../utils/agent-config.js");
|
|
49
47
|
const agent_workflow_js_1 = require("../config/agent-workflow.js");
|
|
50
|
-
|
|
51
|
-
// TOOL DEFINITIONS (same as gemini.ts)
|
|
52
|
-
// ============================================================================
|
|
53
|
-
const TOOL_DECLARATIONS = [
|
|
54
|
-
{
|
|
55
|
-
name: 'read_file',
|
|
56
|
-
description: 'Read the contents of a file',
|
|
57
|
-
parameters: {
|
|
58
|
-
type: 'object',
|
|
59
|
-
properties: {
|
|
60
|
-
file_path: { type: 'string', description: 'Path to the file' }
|
|
61
|
-
},
|
|
62
|
-
required: ['file_path']
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: 'write_file',
|
|
67
|
-
description: 'Write content to a file (creates or overwrites)',
|
|
68
|
-
parameters: {
|
|
69
|
-
type: 'object',
|
|
70
|
-
properties: {
|
|
71
|
-
file_path: { type: 'string', description: 'Path to the file' },
|
|
72
|
-
content: { type: 'string', description: 'Content to write' }
|
|
73
|
-
},
|
|
74
|
-
required: ['file_path', 'content']
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: 'edit_file',
|
|
79
|
-
description: 'Edit a file by replacing old_string with new_string',
|
|
80
|
-
parameters: {
|
|
81
|
-
type: 'object',
|
|
82
|
-
properties: {
|
|
83
|
-
file_path: { type: 'string', description: 'Path to the file' },
|
|
84
|
-
old_string: { type: 'string', description: 'String to find' },
|
|
85
|
-
new_string: { type: 'string', description: 'Replacement string' }
|
|
86
|
-
},
|
|
87
|
-
required: ['file_path', 'old_string', 'new_string']
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: 'run_bash',
|
|
92
|
-
description: 'Run a bash command',
|
|
93
|
-
parameters: {
|
|
94
|
-
type: 'object',
|
|
95
|
-
properties: {
|
|
96
|
-
command: { type: 'string', description: 'The bash command' }
|
|
97
|
-
},
|
|
98
|
-
required: ['command']
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
name: 'glob_files',
|
|
103
|
-
description: 'Find files matching a glob pattern',
|
|
104
|
-
parameters: {
|
|
105
|
-
type: 'object',
|
|
106
|
-
properties: {
|
|
107
|
-
pattern: { type: 'string', description: 'Glob pattern' }
|
|
108
|
-
},
|
|
109
|
-
required: ['pattern']
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: 'grep_search',
|
|
114
|
-
description: 'Search for a pattern in files',
|
|
115
|
-
parameters: {
|
|
116
|
-
type: 'object',
|
|
117
|
-
properties: {
|
|
118
|
-
pattern: { type: 'string', description: 'Search pattern' },
|
|
119
|
-
file_pattern: { type: 'string', description: 'Optional glob pattern' }
|
|
120
|
-
},
|
|
121
|
-
required: ['pattern']
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
name: 'task_complete',
|
|
126
|
-
description: 'Signal task completion',
|
|
127
|
-
parameters: {
|
|
128
|
-
type: 'object',
|
|
129
|
-
properties: {
|
|
130
|
-
summary: { type: 'string', description: 'Summary of what was done' },
|
|
131
|
-
commit_message: { type: 'string', description: 'Git commit message' },
|
|
132
|
-
pr_title: { type: 'string', description: 'PR title' },
|
|
133
|
-
pr_description: { type: 'string', description: 'PR description' }
|
|
134
|
-
},
|
|
135
|
-
required: ['summary']
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
];
|
|
139
|
-
// Dangerous commands that should be blocked
|
|
140
|
-
const DANGEROUS_COMMANDS = ['rm -rf /', 'sudo', '> /dev/', 'mkfs', 'dd if='];
|
|
141
|
-
async function executeTool(name, args, repoPath) {
|
|
142
|
-
try {
|
|
143
|
-
switch (name) {
|
|
144
|
-
case 'read_file': {
|
|
145
|
-
const filePath = path.join(repoPath, args.file_path);
|
|
146
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
147
|
-
return { success: true, result: content };
|
|
148
|
-
}
|
|
149
|
-
case 'write_file': {
|
|
150
|
-
const filePath = path.join(repoPath, args.file_path);
|
|
151
|
-
const content = args.content;
|
|
152
|
-
let action = 'create';
|
|
153
|
-
try {
|
|
154
|
-
await fs.access(filePath);
|
|
155
|
-
action = 'modify';
|
|
156
|
-
}
|
|
157
|
-
catch {
|
|
158
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
159
|
-
}
|
|
160
|
-
await fs.writeFile(filePath, content, 'utf-8');
|
|
161
|
-
return {
|
|
162
|
-
success: true,
|
|
163
|
-
result: `File ${action === 'create' ? 'created' : 'updated'}: ${args.file_path}`,
|
|
164
|
-
fileChange: { path: args.file_path, content, action }
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
case 'edit_file': {
|
|
168
|
-
const filePath = path.join(repoPath, args.file_path);
|
|
169
|
-
const oldContent = await fs.readFile(filePath, 'utf-8');
|
|
170
|
-
const oldString = args.old_string;
|
|
171
|
-
const newString = args.new_string;
|
|
172
|
-
if (!oldContent.includes(oldString)) {
|
|
173
|
-
return { success: false, result: `Error: Could not find string in file` };
|
|
174
|
-
}
|
|
175
|
-
const newContent = oldContent.replace(oldString, newString);
|
|
176
|
-
await fs.writeFile(filePath, newContent, 'utf-8');
|
|
177
|
-
return {
|
|
178
|
-
success: true,
|
|
179
|
-
result: `File edited: ${args.file_path}`,
|
|
180
|
-
fileChange: { path: args.file_path, content: newContent, action: 'modify' }
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
case 'run_bash': {
|
|
184
|
-
const command = args.command;
|
|
185
|
-
if (DANGEROUS_COMMANDS.some(d => command.includes(d))) {
|
|
186
|
-
return { success: false, result: 'Error: Command blocked by safety policy' };
|
|
187
|
-
}
|
|
188
|
-
try {
|
|
189
|
-
const output = (0, child_process_1.execSync)(command, {
|
|
190
|
-
cwd: repoPath,
|
|
191
|
-
encoding: 'utf-8',
|
|
192
|
-
timeout: 120000, // 2 minute timeout
|
|
193
|
-
maxBuffer: 1024 * 1024
|
|
194
|
-
});
|
|
195
|
-
return { success: true, result: output || '(no output)' };
|
|
196
|
-
}
|
|
197
|
-
catch (error) {
|
|
198
|
-
const err = error;
|
|
199
|
-
return { success: false, result: `Error: ${err.stderr || err.message}` };
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
case 'glob_files': {
|
|
203
|
-
const pattern = args.pattern;
|
|
204
|
-
const files = await (0, glob_1.glob)(pattern, { cwd: repoPath, nodir: true });
|
|
205
|
-
return { success: true, result: files.slice(0, 100).join('\n') || '(no matches)' };
|
|
206
|
-
}
|
|
207
|
-
case 'grep_search': {
|
|
208
|
-
const pattern = args.pattern;
|
|
209
|
-
const filePattern = args.file_pattern || '.';
|
|
210
|
-
try {
|
|
211
|
-
const output = (0, child_process_1.execSync)(`grep -rn "${pattern.replace(/"/g, '\\"')}" ${filePattern} | head -50`, { cwd: repoPath, encoding: 'utf-8', timeout: 30000 });
|
|
212
|
-
return { success: true, result: output || '(no matches)' };
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
return { success: true, result: '(no matches)' };
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
case 'task_complete':
|
|
219
|
-
return { success: true, result: 'Task marked complete' };
|
|
220
|
-
default:
|
|
221
|
-
return { success: false, result: `Unknown tool: ${name}` };
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
return { success: false, result: `Error: ${error instanceof Error ? error.message : String(error)}` };
|
|
226
|
-
}
|
|
227
|
-
}
|
|
48
|
+
const index_js_1 = require("./shared/index.js");
|
|
228
49
|
async function callGemini(contents, systemInstruction, apiKey, model) {
|
|
229
50
|
const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
|
|
230
51
|
const response = await fetch(url, {
|
|
@@ -233,7 +54,7 @@ async function callGemini(contents, systemInstruction, apiKey, model) {
|
|
|
233
54
|
body: JSON.stringify({
|
|
234
55
|
systemInstruction: { parts: [{ text: systemInstruction }] },
|
|
235
56
|
contents,
|
|
236
|
-
tools: [{ functionDeclarations:
|
|
57
|
+
tools: [{ functionDeclarations: index_js_1.GEMINI_TOOL_DECLARATIONS }],
|
|
237
58
|
toolConfig: {
|
|
238
59
|
functionCallingConfig: {
|
|
239
60
|
mode: 'AUTO'
|
|
@@ -324,15 +145,39 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
324
145
|
}
|
|
325
146
|
/**
|
|
326
147
|
* Start a new session to process a task
|
|
148
|
+
* Uses git worktree isolation when enabled (default) to protect the main working directory
|
|
327
149
|
*/
|
|
328
|
-
async startSession(session, prompt, context,
|
|
329
|
-
const
|
|
330
|
-
const systemPrompt = await this.buildSystemPrompt(session);
|
|
150
|
+
async startSession(session, prompt, context, callbacks) {
|
|
151
|
+
const { onProgress, onComment } = callbacks || {};
|
|
331
152
|
const userPrompt = prompt || (0, terminal_base_js_1.buildDefaultPrompt)(session, context);
|
|
332
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)();
|
|
333
156
|
console.log(`š Starting Gemini terminal session for task: ${session.title}`);
|
|
334
|
-
|
|
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
|
+
}
|
|
335
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);
|
|
336
181
|
const contents = [
|
|
337
182
|
{
|
|
338
183
|
role: 'user',
|
|
@@ -360,11 +205,22 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
360
205
|
}
|
|
361
206
|
// Add model response to history
|
|
362
207
|
contents.push({ role: 'model', parts: candidate.content.parts });
|
|
363
|
-
// Handle text responses
|
|
208
|
+
// Handle text responses and post comments
|
|
364
209
|
const textPart = candidate.content.parts.find(p => p.text);
|
|
365
210
|
if (textPart?.text) {
|
|
366
211
|
stdout += `\n\n${textPart.text}`;
|
|
367
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
|
+
}
|
|
368
224
|
}
|
|
369
225
|
// Handle function calls
|
|
370
226
|
const functionCalls = candidate.content.parts.filter(p => p.functionCall);
|
|
@@ -382,7 +238,26 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
382
238
|
stdout += `\n\n[Task Complete]\nSummary: ${completeSummary}`;
|
|
383
239
|
// Capture git changes
|
|
384
240
|
const changes = await (0, terminal_base_js_1.captureGitChanges)(projectPath);
|
|
385
|
-
|
|
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
|
+
}
|
|
386
261
|
return {
|
|
387
262
|
exitCode: 0,
|
|
388
263
|
stdout,
|
|
@@ -393,7 +268,7 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
393
268
|
};
|
|
394
269
|
}
|
|
395
270
|
// Execute tool
|
|
396
|
-
const result = await executeTool(name, args, projectPath);
|
|
271
|
+
const result = await (0, index_js_1.executeTool)(name, args, projectPath);
|
|
397
272
|
stdout += `\n\n[${name}]: ${result.result.slice(0, 500)}${result.result.length > 500 ? '...' : ''}`;
|
|
398
273
|
// Track modified files
|
|
399
274
|
if (result.fileChange) {
|
|
@@ -426,7 +301,17 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
426
301
|
}
|
|
427
302
|
// Capture final git changes
|
|
428
303
|
const changes = await (0, terminal_base_js_1.captureGitChanges)(projectPath);
|
|
429
|
-
|
|
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
|
+
}
|
|
430
315
|
return {
|
|
431
316
|
exitCode: 0,
|
|
432
317
|
stdout,
|
|
@@ -446,17 +331,28 @@ Begin by reading the relevant files to understand the current state.`;
|
|
|
446
331
|
modifiedFiles,
|
|
447
332
|
};
|
|
448
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
|
+
}
|
|
449
345
|
}
|
|
450
346
|
/**
|
|
451
347
|
* Resume a session with new input
|
|
452
348
|
* Note: Gemini doesn't have native session management, so we rebuild context
|
|
453
349
|
*/
|
|
454
|
-
async resumeSession(session, input, context,
|
|
350
|
+
async resumeSession(session, input, context, callbacks) {
|
|
455
351
|
console.log(`š Resuming Gemini session (rebuilding context)`);
|
|
456
352
|
// For Gemini, resuming means starting a new conversation with the follow-up
|
|
457
353
|
const fullPrompt = (0, terminal_base_js_1.formatCommentHistory)(context?.comments) +
|
|
458
354
|
`\n\n---\n\n## Follow-up Request\n\n${input}`;
|
|
459
|
-
return this.startSession(session, fullPrompt, context,
|
|
355
|
+
return this.startSession(session, fullPrompt, context, callbacks);
|
|
460
356
|
}
|
|
461
357
|
/**
|
|
462
358
|
* Parse output to extract key information
|