@joeytheman/gemini-mcp-tool 1.3.0 → 2.2.0
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/README.md +123 -34
- package/dist/__tests__/ask-gemini.test.js +99 -37
- package/dist/__tests__/ask-gemini.test.js.map +1 -1
- package/dist/__tests__/live-pass.test.d.ts +2 -0
- package/dist/__tests__/live-pass.test.d.ts.map +1 -0
- package/dist/__tests__/live-pass.test.js +725 -0
- package/dist/__tests__/live-pass.test.js.map +1 -0
- package/dist/__tests__/screen-review.test.d.ts +2 -0
- package/dist/__tests__/screen-review.test.d.ts.map +1 -0
- package/dist/__tests__/screen-review.test.js +444 -0
- package/dist/__tests__/screen-review.test.js.map +1 -0
- package/dist/__tests__/server.test.js +17 -12
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/simple-tools.test.d.ts +2 -0
- package/dist/__tests__/simple-tools.test.d.ts.map +1 -0
- package/dist/__tests__/simple-tools.test.js +25 -0
- package/dist/__tests__/simple-tools.test.js.map +1 -0
- package/dist/__tests__/tools.test.js +63 -0
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/__tests__/utils/agyExecutor.test.d.ts +2 -0
- package/dist/__tests__/utils/agyExecutor.test.d.ts.map +1 -0
- package/dist/__tests__/utils/agyExecutor.test.js +616 -0
- package/dist/__tests__/utils/agyExecutor.test.js.map +1 -0
- package/dist/__tests__/utils/agyTranscriptRecovery.test.d.ts +2 -0
- package/dist/__tests__/utils/agyTranscriptRecovery.test.d.ts.map +1 -0
- package/dist/__tests__/utils/agyTranscriptRecovery.test.js +127 -0
- package/dist/__tests__/utils/agyTranscriptRecovery.test.js.map +1 -0
- package/dist/__tests__/utils/chunkCache.test.js +26 -2
- package/dist/__tests__/utils/chunkCache.test.js.map +1 -1
- package/dist/__tests__/utils/commandExecutor.test.js +30 -6
- package/dist/__tests__/utils/commandExecutor.test.js.map +1 -1
- package/dist/__tests__/utils/fileReferences.test.d.ts +2 -0
- package/dist/__tests__/utils/fileReferences.test.d.ts.map +1 -0
- package/dist/__tests__/utils/fileReferences.test.js +87 -0
- package/dist/__tests__/utils/fileReferences.test.js.map +1 -0
- package/dist/__tests__/utils/gitStatusGuard.test.d.ts +2 -0
- package/dist/__tests__/utils/gitStatusGuard.test.d.ts.map +1 -0
- package/dist/__tests__/utils/gitStatusGuard.test.js +106 -0
- package/dist/__tests__/utils/gitStatusGuard.test.js.map +1 -0
- package/dist/__tests__/utils/responseCache.test.js +31 -11
- package/dist/__tests__/utils/responseCache.test.js.map +1 -1
- package/dist/__tests__/utils/test-helpers.d.ts +4 -0
- package/dist/__tests__/utils/test-helpers.d.ts.map +1 -1
- package/dist/__tests__/utils/test-helpers.js +16 -0
- package/dist/__tests__/utils/test-helpers.js.map +1 -1
- package/dist/constants.d.ts +68 -26
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +69 -28
- package/dist/constants.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/ask-gemini.tool.d.ts +34 -0
- package/dist/tools/ask-gemini.tool.d.ts.map +1 -1
- package/dist/tools/ask-gemini.tool.js +38 -22
- package/dist/tools/ask-gemini.tool.js.map +1 -1
- package/dist/tools/brainstorm.tool.d.ts.map +1 -1
- package/dist/tools/brainstorm.tool.js +5 -4
- package/dist/tools/brainstorm.tool.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/live-pass.tool.d.ts +183 -0
- package/dist/tools/live-pass.tool.d.ts.map +1 -0
- package/dist/tools/live-pass.tool.js +548 -0
- package/dist/tools/live-pass.tool.js.map +1 -0
- package/dist/tools/registry.d.ts +4 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +12 -9
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/screen-review.tool.d.ts +121 -0
- package/dist/tools/screen-review.tool.d.ts.map +1 -0
- package/dist/tools/screen-review.tool.js +415 -0
- package/dist/tools/screen-review.tool.js.map +1 -0
- package/dist/tools/simple-tools.d.ts.map +1 -1
- package/dist/tools/simple-tools.js +4 -2
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/utils/agyExecutor.d.ts +68 -0
- package/dist/utils/agyExecutor.d.ts.map +1 -0
- package/dist/utils/agyExecutor.js +443 -0
- package/dist/utils/agyExecutor.js.map +1 -0
- package/dist/utils/agyReport.d.ts +19 -0
- package/dist/utils/agyReport.d.ts.map +1 -0
- package/dist/utils/agyReport.js +62 -0
- package/dist/utils/agyReport.js.map +1 -0
- package/dist/utils/agyTranscriptRecovery.d.ts +16 -0
- package/dist/utils/agyTranscriptRecovery.d.ts.map +1 -0
- package/dist/utils/agyTranscriptRecovery.js +149 -0
- package/dist/utils/agyTranscriptRecovery.js.map +1 -0
- package/dist/utils/chunkCache.d.ts.map +1 -1
- package/dist/utils/chunkCache.js +19 -5
- package/dist/utils/chunkCache.js.map +1 -1
- package/dist/utils/commandExecutor.d.ts.map +1 -1
- package/dist/utils/commandExecutor.js +15 -7
- package/dist/utils/commandExecutor.js.map +1 -1
- package/dist/utils/fileReferences.d.ts +45 -0
- package/dist/utils/fileReferences.d.ts.map +1 -0
- package/dist/utils/fileReferences.js +169 -0
- package/dist/utils/fileReferences.js.map +1 -0
- package/dist/utils/gitStatusGuard.d.ts +35 -0
- package/dist/utils/gitStatusGuard.d.ts.map +1 -0
- package/dist/utils/gitStatusGuard.js +82 -0
- package/dist/utils/gitStatusGuard.js.map +1 -0
- package/dist/utils/responseCache.d.ts +3 -3
- package/dist/utils/responseCache.d.ts.map +1 -1
- package/dist/utils/responseCache.js +11 -6
- package/dist/utils/responseCache.js.map +1 -1
- package/package.json +10 -9
- package/dist/__tests__/utils/geminiExecutor.test.d.ts +0 -2
- package/dist/__tests__/utils/geminiExecutor.test.d.ts.map +0 -1
- package/dist/__tests__/utils/geminiExecutor.test.js +0 -337
- package/dist/__tests__/utils/geminiExecutor.test.js.map +0 -1
- package/dist/utils/geminiExecutor.d.ts +0 -17
- package/dist/utils/geminiExecutor.d.ts.map +0 -1
- package/dist/utils/geminiExecutor.js +0 -238
- package/dist/utils/geminiExecutor.js.map +0 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { describe, it, expect, vi, afterEach } from 'vitest';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { execFileSync } from 'child_process';
|
|
5
|
+
vi.mock('../../utils/logger.js', () => ({
|
|
6
|
+
Logger: { debug: vi.fn(), warn: vi.fn(), error: vi.fn(), log: vi.fn() },
|
|
7
|
+
}));
|
|
8
|
+
import { snapshotWorkingTree, diffWorkingTree } from '../../utils/gitStatusGuard.js';
|
|
9
|
+
import { formatWorkingTreeSection } from '../../utils/agyReport.js';
|
|
10
|
+
import { makeTempDir, cleanupTempDirs } from './test-helpers.js';
|
|
11
|
+
const makeGitTempDir = () => makeTempDir('git-guard');
|
|
12
|
+
afterEach(cleanupTempDirs);
|
|
13
|
+
describe('snapshotWorkingTree', () => {
|
|
14
|
+
it('returns null outside a git repository', async () => {
|
|
15
|
+
expect(await snapshotWorkingTree(makeGitTempDir())).toBeNull();
|
|
16
|
+
});
|
|
17
|
+
it('returns null for a directory that does not exist', async () => {
|
|
18
|
+
expect(await snapshotWorkingTree(path.join(makeGitTempDir(), 'missing'))).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
it('lists porcelain status lines with the repository root and content hashes', async () => {
|
|
21
|
+
const dir = makeGitTempDir();
|
|
22
|
+
execFileSync('git', ['init', '-q'], { cwd: dir });
|
|
23
|
+
expect(await snapshotWorkingTree(dir)).toMatchObject({ root: dir, lines: [], truncated: false });
|
|
24
|
+
fs.writeFileSync(path.join(dir, 'new.txt'), 'hello');
|
|
25
|
+
const snapshot = await snapshotWorkingTree(dir);
|
|
26
|
+
expect(snapshot?.lines).toEqual(['?? new.txt']);
|
|
27
|
+
expect(snapshot?.hashes.get(path.join(dir, 'new.txt'))).toMatch(/^[0-9a-f]{64}$/);
|
|
28
|
+
});
|
|
29
|
+
it('lists every untracked file, not the collapsed parent directory', async () => {
|
|
30
|
+
const dir = makeGitTempDir();
|
|
31
|
+
execFileSync('git', ['init', '-q'], { cwd: dir });
|
|
32
|
+
const sub = path.join(dir, 'apps', 'web');
|
|
33
|
+
fs.mkdirSync(sub, { recursive: true });
|
|
34
|
+
fs.writeFileSync(path.join(sub, 'new.txt'), 'hello');
|
|
35
|
+
const snapshot = await snapshotWorkingTree(sub);
|
|
36
|
+
// Repo-root-relative, and expanded: `?? apps/` would hide siblings.
|
|
37
|
+
expect(snapshot?.root).toBe(dir);
|
|
38
|
+
expect(snapshot?.lines).toEqual(['?? apps/web/new.txt']);
|
|
39
|
+
});
|
|
40
|
+
it('hashes a file that is already dirty, so a later rewrite is detectable', async () => {
|
|
41
|
+
const dir = makeGitTempDir();
|
|
42
|
+
const git = (...args) => execFileSync('git', args, { cwd: dir });
|
|
43
|
+
git('init', '-q');
|
|
44
|
+
const file = path.join(dir, 'app.tsx');
|
|
45
|
+
fs.writeFileSync(file, 'committed');
|
|
46
|
+
git('add', 'app.tsx');
|
|
47
|
+
git('-c', 'user.email=t@t', '-c', 'user.name=t', 'commit', '-qm', 'seed');
|
|
48
|
+
fs.writeFileSync(file, 'dirty before the run');
|
|
49
|
+
const before = await snapshotWorkingTree(dir);
|
|
50
|
+
fs.writeFileSync(file, 'rewritten during the run');
|
|
51
|
+
const after = await snapshotWorkingTree(dir);
|
|
52
|
+
// The status line is identical (' M app.tsx') either side; only the hash moves.
|
|
53
|
+
expect(before?.lines).toEqual([' M app.tsx']);
|
|
54
|
+
expect(after?.lines).toEqual([' M app.tsx']);
|
|
55
|
+
expect(diffWorkingTree(before, after).modified).toEqual([file]);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
function snapshot(lines, root = '/work/tree', hashes = {}) {
|
|
59
|
+
return { root, lines, hashes: new Map(Object.entries(hashes)), truncated: false };
|
|
60
|
+
}
|
|
61
|
+
describe('diffWorkingTree', () => {
|
|
62
|
+
it('reports added and removed lines', () => {
|
|
63
|
+
const diff = diffWorkingTree(snapshot(['?? a.txt', ' M b.txt']), snapshot([' M b.txt', '?? c.txt']));
|
|
64
|
+
expect(diff.added).toEqual(['?? c.txt']);
|
|
65
|
+
expect(diff.removed).toEqual(['?? a.txt']);
|
|
66
|
+
});
|
|
67
|
+
it('ignores the artifact directory but not a file created beside it', () => {
|
|
68
|
+
const diff = diffWorkingTree(snapshot([]), snapshot([
|
|
69
|
+
'?? .live-pass/run1/home.png',
|
|
70
|
+
'?? .live-pass/uninvited.txt',
|
|
71
|
+
' M src/app/index.tsx',
|
|
72
|
+
]), { ignoreDirectory: '/work/tree/.live-pass/run1' });
|
|
73
|
+
expect(diff.added).toEqual(['?? .live-pass/uninvited.txt', ' M src/app/index.tsx']);
|
|
74
|
+
});
|
|
75
|
+
it('resolves porcelain paths against the repo root when the tool runs in a subdirectory', () => {
|
|
76
|
+
const diff = diffWorkingTree(snapshot([], '/repo'), snapshot(['?? apps/web/.live-pass/run1/home.png', ' M apps/web/src/index.tsx'], '/repo'), { ignoreDirectory: '/repo/apps/web/.live-pass/run1' });
|
|
77
|
+
expect(diff.added).toEqual([' M apps/web/src/index.tsx']);
|
|
78
|
+
});
|
|
79
|
+
it('reads the path out of a quoted or renamed porcelain line', () => {
|
|
80
|
+
const diff = diffWorkingTree(snapshot([]), snapshot(['R old.txt -> .live-pass/run1/new.txt', '?? "spaced name.txt"']), { ignoreDirectory: '/work/tree/.live-pass/run1' });
|
|
81
|
+
expect(diff.added).toEqual(['?? "spaced name.txt"']);
|
|
82
|
+
});
|
|
83
|
+
it('reports content changes to a file whose status line never moved', () => {
|
|
84
|
+
const diff = diffWorkingTree(snapshot([' M src/app.tsx'], '/work/tree', { '/work/tree/src/app.tsx': 'aaa' }), snapshot([' M src/app.tsx'], '/work/tree', { '/work/tree/src/app.tsx': 'bbb' }));
|
|
85
|
+
expect(diff.added).toEqual([]);
|
|
86
|
+
expect(diff.modified).toEqual(['/work/tree/src/app.tsx']);
|
|
87
|
+
});
|
|
88
|
+
it('does not report a content change inside the artifact directory', () => {
|
|
89
|
+
const frame = '/work/tree/.live-pass/run1/home.png';
|
|
90
|
+
const diff = diffWorkingTree(snapshot(['?? .live-pass/run1/home.png'], '/work/tree', { [frame]: 'aaa' }), snapshot(['?? .live-pass/run1/home.png'], '/work/tree', { [frame]: 'bbb' }), { ignoreDirectory: '/work/tree/.live-pass/run1' });
|
|
91
|
+
expect(diff.modified).toEqual([]);
|
|
92
|
+
});
|
|
93
|
+
it('keeps the truncation caveat even when nothing it could check changed', () => {
|
|
94
|
+
const capped = { ...snapshot([]), truncated: true };
|
|
95
|
+
const diff = diffWorkingTree(capped, capped);
|
|
96
|
+
expect(diff.truncated).toBe(true);
|
|
97
|
+
expect(formatWorkingTreeSection(diff)).toContain('may be under-reported');
|
|
98
|
+
expect(formatWorkingTreeSection({ added: [], removed: [], modified: [], truncated: false })).toBe('');
|
|
99
|
+
});
|
|
100
|
+
it('reports nothing when either snapshot is missing', () => {
|
|
101
|
+
const empty = { added: [], removed: [], modified: [], truncated: false };
|
|
102
|
+
expect(diffWorkingTree(null, snapshot(['?? a.txt']))).toEqual(empty);
|
|
103
|
+
expect(diffWorkingTree(snapshot(['?? a.txt']), null)).toEqual(empty);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=gitStatusGuard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitStatusGuard.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/gitStatusGuard.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,8 @@ describe('responseCache', () => {
|
|
|
15
15
|
});
|
|
16
16
|
describe('generateCacheKey', () => {
|
|
17
17
|
it('should produce a deterministic SHA256 hash', () => {
|
|
18
|
-
const key1 = generateCacheKey('test prompt', { model: '
|
|
19
|
-
const key2 = generateCacheKey('test prompt', { model: '
|
|
18
|
+
const key1 = generateCacheKey('test prompt', { model: 'Gemini 3.8 Flash (Medium)' });
|
|
19
|
+
const key2 = generateCacheKey('test prompt', { model: 'Gemini 3.8 Flash (Medium)' });
|
|
20
20
|
expect(key1).toBe(key2);
|
|
21
21
|
// SHA256 produces 64 hex chars
|
|
22
22
|
expect(key1).toMatch(/^[0-9a-f]{64}$/);
|
|
@@ -36,25 +36,45 @@ describe('responseCache', () => {
|
|
|
36
36
|
const key2 = generateCacheKey('test', { sandbox: false });
|
|
37
37
|
expect(key1).not.toBe(key2);
|
|
38
38
|
});
|
|
39
|
+
it('should produce different keys for different json schemas', () => {
|
|
40
|
+
const key1 = generateCacheKey('test', { outputFormat: 'json', jsonSchema: '{"a":1}' });
|
|
41
|
+
const key2 = generateCacheKey('test', { outputFormat: 'json', jsonSchema: '{"a":2}' });
|
|
42
|
+
expect(key1).not.toBe(key2);
|
|
43
|
+
});
|
|
44
|
+
it('should produce different keys for different effort levels', () => {
|
|
45
|
+
const key1 = generateCacheKey('test', { effort: 'low' });
|
|
46
|
+
const key2 = generateCacheKey('test', { effort: 'high' });
|
|
47
|
+
expect(key1).not.toBe(key2);
|
|
48
|
+
});
|
|
49
|
+
it('should produce different keys for different conversation IDs', () => {
|
|
50
|
+
const key1 = generateCacheKey('test', { conversationId: 'conv-a' });
|
|
51
|
+
const key2 = generateCacheKey('test', { conversationId: 'conv-b' });
|
|
52
|
+
expect(key1).not.toBe(key2);
|
|
53
|
+
});
|
|
54
|
+
it('should produce different keys for different working directories', () => {
|
|
55
|
+
const key1 = generateCacheKey('test', { cwd: '/project-a' });
|
|
56
|
+
const key2 = generateCacheKey('test', { cwd: '/project-b' });
|
|
57
|
+
expect(key1).not.toBe(key2);
|
|
58
|
+
});
|
|
39
59
|
});
|
|
40
60
|
describe('isCacheEnabled', () => {
|
|
41
61
|
it('should return true when env var is "true"', () => {
|
|
42
|
-
const original = process.env.
|
|
43
|
-
process.env.
|
|
62
|
+
const original = process.env.AGY_CACHE_ENABLED;
|
|
63
|
+
process.env.AGY_CACHE_ENABLED = 'true';
|
|
44
64
|
expect(isCacheEnabled()).toBe(true);
|
|
45
|
-
process.env.
|
|
65
|
+
process.env.AGY_CACHE_ENABLED = original;
|
|
46
66
|
});
|
|
47
67
|
it('should return false when env var is not "true"', () => {
|
|
48
|
-
const original = process.env.
|
|
49
|
-
delete process.env.
|
|
68
|
+
const original = process.env.AGY_CACHE_ENABLED;
|
|
69
|
+
delete process.env.AGY_CACHE_ENABLED;
|
|
50
70
|
expect(isCacheEnabled()).toBe(false);
|
|
51
|
-
process.env.
|
|
71
|
+
process.env.AGY_CACHE_ENABLED = original;
|
|
52
72
|
});
|
|
53
73
|
it('should return false when env var is "false"', () => {
|
|
54
|
-
const original = process.env.
|
|
55
|
-
process.env.
|
|
74
|
+
const original = process.env.AGY_CACHE_ENABLED;
|
|
75
|
+
process.env.AGY_CACHE_ENABLED = 'false';
|
|
56
76
|
expect(isCacheEnabled()).toBe(false);
|
|
57
|
-
process.env.
|
|
77
|
+
process.env.AGY_CACHE_ENABLED = original;
|
|
58
78
|
});
|
|
59
79
|
});
|
|
60
80
|
describe('cacheResponse / getCachedResponse', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseCache.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/responseCache.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,aAAa,GACd,MAAM,8BAA8B,CAAC;AAEtC,iCAAiC;AACjC,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;QACb,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;QACd,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;KACb;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"responseCache.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/responseCache.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/** A real temp directory, realpath'd so macOS /var -> /private/var containment checks hold. */
|
|
2
|
+
export declare function makeTempDir(prefix: string): string;
|
|
3
|
+
/** Remove every directory makeTempDir handed out; call from afterEach. */
|
|
4
|
+
export declare function cleanupTempDirs(): void;
|
|
1
5
|
/**
|
|
2
6
|
* Creates a mock child process for testing command execution
|
|
3
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/test-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/test-helpers.ts"],"names":[],"mappings":"AAQA,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,QAWhC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,QAOlF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,KAAK,SAAK,QAOrG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,SAAK,QAI9E"}
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import { vi } from 'vitest';
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
const tempDirs = [];
|
|
7
|
+
/** A real temp directory, realpath'd so macOS /var -> /private/var containment checks hold. */
|
|
8
|
+
export function makeTempDir(prefix) {
|
|
9
|
+
const dir = fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), `${prefix}-`)));
|
|
10
|
+
tempDirs.push(dir);
|
|
11
|
+
return dir;
|
|
12
|
+
}
|
|
13
|
+
/** Remove every directory makeTempDir handed out; call from afterEach. */
|
|
14
|
+
export function cleanupTempDirs() {
|
|
15
|
+
while (tempDirs.length > 0) {
|
|
16
|
+
fs.rmSync(tempDirs.pop(), { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
3
19
|
/**
|
|
4
20
|
* Creates a mock child process for testing command execution
|
|
5
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/__tests__/utils/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../../src/__tests__/utils/test-helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,23 +1,62 @@
|
|
|
1
1
|
export declare const LOG_PREFIX = "[GMCPT]";
|
|
2
2
|
export declare const ERROR_MESSAGES: {
|
|
3
|
-
readonly
|
|
4
|
-
readonly QUOTA_EXCEEDED_SHORT: "⚠️ Gemini Pro daily quota exceeded. Please retry with model: 'gemini-3-flash-preview'";
|
|
3
|
+
readonly AGY_NOT_FOUND: "Antigravity CLI (`agy`) was not found. Install or update Antigravity CLI, run `agy install`, then verify `agy --version` works from your shell.";
|
|
5
4
|
readonly TOOL_NOT_FOUND: "not found in registry";
|
|
6
5
|
readonly NO_PROMPT_PROVIDED: "Please provide a prompt for analysis. Use @ syntax to include files (e.g., '@largefile.js explain what this does') or ask general questions";
|
|
6
|
+
readonly UNSUPPORTED_AGY_OPTIONS: "Unsupported Antigravity CLI option(s)";
|
|
7
|
+
readonly INVALID_RESUME: "resume must be true, latest, continue, or a non-empty conversation ID.";
|
|
8
|
+
readonly AGY_NO_OUTPUT: "Antigravity CLI (`agy`) returned no output (it may have timed out resolving a file reference) and no recoverable transcript was found. Ensure any @referenced files exist under the working directory or an includeDirectories entry, narrow the prompt, or increase printTimeout.";
|
|
9
|
+
readonly UNSAFE_ROOT_YOLO: "Refusing to run agy with yolo (`--dangerously-skip-permissions`) when workingDirectory is a filesystem root. Set workingDirectory to a specific project directory.";
|
|
10
|
+
readonly UNSUPPORTED_OUTPUT_FORMAT: "outputFormat must be 'text' or 'json'. Antigravity CLI has no stream-json mode.";
|
|
11
|
+
readonly JSON_SCHEMA_REQUIRES_JSON: "jsonSchema requires outputFormat: 'json'.";
|
|
12
|
+
readonly INVALID_EFFORT: "effort must be one of: low, medium, high.";
|
|
13
|
+
readonly AGY_JSON_PARSE: "Could not parse the Antigravity CLI JSON envelope";
|
|
14
|
+
readonly AGY_STATUS_ERROR: "Antigravity CLI returned status ERROR";
|
|
15
|
+
readonly AGY_DENIED_ACTIONS: "Antigravity CLI produced no response because it denied required actions. Retry with `yolo: true`, or allow the actions in the Antigravity `permissions.allow` settings. Denied";
|
|
16
|
+
readonly INVALID_CONVERSATION_ID: "conversationId must be a non-empty agy conversation ID.";
|
|
17
|
+
readonly CONVERSATION_NOT_RESUMED: "agy did not resume conversation";
|
|
18
|
+
readonly INVALID_WORKING_DIRECTORY: "workingDirectory must be an absolute path to an existing directory that is not a filesystem root";
|
|
19
|
+
readonly LIVE_PASS_ARTIFACT_DIR: "artifactDir must be an absolute path strictly inside workingDirectory";
|
|
20
|
+
readonly LIVE_PASS_NO_BRIEF: "brief is required: describe the base URL or app id, the served-branch marker, the seed case, and any navigation hints.";
|
|
21
|
+
readonly UNREFERENCEABLE_PATH: "path contains whitespace, which Antigravity CLI cannot resolve as an @reference. Move or rename it so the path has no spaces";
|
|
22
|
+
readonly SCREEN_REVIEW_NO_IMAGES: "review mode requires at least one absolute image path";
|
|
23
|
+
readonly SCREEN_REVIEW_IMAGE_MISSING: "image does not exist";
|
|
24
|
+
readonly SCREEN_REVIEW_ROUTE_FILE: "plan mode requires routeFile: an absolute path to an existing file inside workingDirectory";
|
|
25
|
+
};
|
|
26
|
+
export declare const AGY_INTERNAL: {
|
|
27
|
+
readonly ROOT_SEGMENTS: readonly [".gemini", "antigravity-cli"];
|
|
28
|
+
readonly LAST_CONVERSATIONS_SEGMENTS: readonly ["cache", "last_conversations.json"];
|
|
29
|
+
readonly BRAIN_DIR: "brain";
|
|
30
|
+
readonly TRANSCRIPT_SEGMENTS: readonly [".system_generated", "logs", "transcript.jsonl"];
|
|
31
|
+
readonly TRANSCRIPT_FINAL: {
|
|
32
|
+
readonly type: "PLANNER_RESPONSE";
|
|
33
|
+
readonly source: "MODEL";
|
|
34
|
+
readonly status: "DONE";
|
|
35
|
+
};
|
|
36
|
+
readonly TIMEOUT_SENTINEL: "Error: timed out waiting for response";
|
|
37
|
+
readonly DISABLE_RECOVERY_ENV: "AGY_DISABLE_TRANSCRIPT_RECOVERY";
|
|
7
38
|
};
|
|
8
39
|
export declare const STATUS_MESSAGES: {
|
|
9
|
-
readonly
|
|
10
|
-
readonly FLASH_RETRY: "⚡ Retrying with Gemini Flash...";
|
|
11
|
-
readonly FLASH_SUCCESS: "✅ Flash model completed successfully";
|
|
12
|
-
readonly SANDBOX_EXECUTING: "🔒 Executing Gemini CLI command in sandbox mode...";
|
|
40
|
+
readonly SANDBOX_EXECUTING: "🔒 Executing Antigravity CLI command in sandbox mode...";
|
|
13
41
|
readonly GEMINI_RESPONSE: "Gemini response:";
|
|
14
42
|
readonly PROCESSING_START: "🔍 Starting analysis (may take 5-15 minutes for large codebases)";
|
|
15
43
|
readonly PROCESSING_CONTINUE: "⏳ Still processing... Gemini is working on your request";
|
|
16
44
|
readonly PROCESSING_COMPLETE: "✅ Analysis completed successfully";
|
|
17
45
|
};
|
|
18
46
|
export declare const MODELS: {
|
|
19
|
-
readonly
|
|
20
|
-
readonly
|
|
47
|
+
readonly DEFAULT: "Gemini 4 Argon (High)";
|
|
48
|
+
readonly MEDIUM: "Gemini 3.8 Flash (Medium)";
|
|
49
|
+
};
|
|
50
|
+
export declare const MODEL_CHOICE_DESCRIPTION = "Optional Antigravity model name. Verified options: 'Gemini 4 Argon (Low)', 'Gemini 4 Argon (Medium)', 'Gemini 4 Argon (High)', 'Gemini 3.8 Flash (Low)', 'Gemini 3.8 Flash (Medium)', and 'Gemini 3.8 Flash (High)'. Availability depends on your CLI version and account; check `agy models`. Some accounts also expose 'Gemini 3.1 Pro (Low)' and 'Gemini 3.1 Pro (High)'. The tier in the name is the reasoning effort.";
|
|
51
|
+
export declare const LIVE_PASS: {
|
|
52
|
+
readonly DEFAULT_ARTIFACT_SEGMENT: ".live-pass";
|
|
53
|
+
readonly MANIFEST_FILE: "manifest.json";
|
|
54
|
+
readonly DEFAULT_PRINT_TIMEOUT: "15m";
|
|
55
|
+
readonly SCREEN_REVIEW_PRINT_TIMEOUT: "10m";
|
|
56
|
+
readonly PLAYWRIGHT_MCP_NAME: "playwright";
|
|
57
|
+
readonly MAESTRO_MCP_NAME: "maestro";
|
|
58
|
+
readonly FRESHNESS_TOLERANCE_MS: 2000;
|
|
59
|
+
readonly CONVERSATION_LINE_PREFIX: "[GEMINI_CONVERSATION_ID=";
|
|
21
60
|
};
|
|
22
61
|
export declare const PROTOCOL: {
|
|
23
62
|
readonly ROLES: {
|
|
@@ -40,33 +79,32 @@ export declare const PROTOCOL: {
|
|
|
40
79
|
};
|
|
41
80
|
export declare const CLI: {
|
|
42
81
|
readonly COMMANDS: {
|
|
43
|
-
readonly
|
|
82
|
+
readonly AGY: "agy";
|
|
44
83
|
readonly ECHO: "echo";
|
|
45
84
|
};
|
|
46
85
|
readonly FLAGS: {
|
|
47
|
-
readonly MODEL: "
|
|
48
|
-
readonly SANDBOX: "
|
|
49
|
-
readonly
|
|
50
|
-
readonly HELP: "
|
|
51
|
-
readonly YOLO: "-
|
|
52
|
-
readonly
|
|
53
|
-
readonly
|
|
54
|
-
readonly
|
|
55
|
-
readonly
|
|
56
|
-
readonly
|
|
57
|
-
readonly
|
|
58
|
-
readonly
|
|
86
|
+
readonly MODEL: "--model";
|
|
87
|
+
readonly SANDBOX: "--sandbox";
|
|
88
|
+
readonly PRINT: "--print";
|
|
89
|
+
readonly HELP: "--help";
|
|
90
|
+
readonly YOLO: "--dangerously-skip-permissions";
|
|
91
|
+
readonly ADD_DIR: "--add-dir";
|
|
92
|
+
readonly PRINT_TIMEOUT: "--print-timeout";
|
|
93
|
+
readonly CONTINUE: "--continue";
|
|
94
|
+
readonly CONVERSATION: "--conversation";
|
|
95
|
+
readonly OUTPUT_FORMAT: "--output-format";
|
|
96
|
+
readonly JSON_SCHEMA: "--json-schema";
|
|
97
|
+
readonly EFFORT: "--effort";
|
|
59
98
|
};
|
|
60
99
|
readonly DEFAULTS: {
|
|
61
|
-
readonly MODEL: "default";
|
|
62
100
|
readonly BOOLEAN_TRUE: "true";
|
|
63
101
|
readonly BOOLEAN_FALSE: "false";
|
|
64
|
-
readonly APPROVAL_MODE_DEFAULT: "default";
|
|
65
|
-
readonly APPROVAL_MODE_AUTO_EDIT: "auto_edit";
|
|
66
102
|
readonly APPROVAL_MODE_YOLO: "yolo";
|
|
103
|
+
readonly RESUME_LATEST: "latest";
|
|
104
|
+
readonly RESUME_CONTINUE: "continue";
|
|
67
105
|
readonly OUTPUT_FORMAT_TEXT: "text";
|
|
68
106
|
readonly OUTPUT_FORMAT_JSON: "json";
|
|
69
|
-
readonly
|
|
107
|
+
readonly EFFORT_LEVELS: readonly ["low", "medium", "high"];
|
|
70
108
|
};
|
|
71
109
|
};
|
|
72
110
|
export interface ToolArguments {
|
|
@@ -80,11 +118,15 @@ export interface ToolArguments {
|
|
|
80
118
|
yolo?: boolean | string;
|
|
81
119
|
approvalMode?: string;
|
|
82
120
|
outputFormat?: string;
|
|
121
|
+
jsonSchema?: string;
|
|
122
|
+
effort?: string;
|
|
123
|
+
conversationId?: string;
|
|
83
124
|
includeDirectories?: string | string[];
|
|
84
125
|
debug?: boolean | string;
|
|
126
|
+
printTimeout?: string;
|
|
85
127
|
promptInteractive?: string;
|
|
86
128
|
extensions?: string | string[];
|
|
87
|
-
resume?: string;
|
|
129
|
+
resume?: boolean | string;
|
|
88
130
|
methodology?: string;
|
|
89
131
|
domain?: string;
|
|
90
132
|
constraints?: string;
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,YAAY,CAAC;AAGpC,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU,YAAY,CAAC;AAGpC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;CAyBjB,CAAC;AAKX,eAAO,MAAM,YAAY;;;;;;;;;;;;CASf,CAAC;AAGX,eAAO,MAAM,eAAe;;;;;;CAOlB,CAAC;AAIX,eAAO,MAAM,MAAM;;;CAGT,CAAC;AAEX,eAAO,MAAM,wBAAwB,+ZACyX,CAAC;AAG/Z,eAAO,MAAM,SAAS;;;;;;;;;CAUZ,CAAC;AAGX,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CAuBX,CAAC;AAIX,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCN,CAAC;AAIX,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAG1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CACjE"}
|
package/dist/constants.js
CHANGED
|
@@ -2,27 +2,71 @@
|
|
|
2
2
|
export const LOG_PREFIX = "[GMCPT]";
|
|
3
3
|
// Error messages
|
|
4
4
|
export const ERROR_MESSAGES = {
|
|
5
|
-
|
|
6
|
-
QUOTA_EXCEEDED_SHORT: "⚠️ Gemini Pro daily quota exceeded. Please retry with model: 'gemini-3-flash-preview'",
|
|
5
|
+
AGY_NOT_FOUND: "Antigravity CLI (`agy`) was not found. Install or update Antigravity CLI, run `agy install`, then verify `agy --version` works from your shell.",
|
|
7
6
|
TOOL_NOT_FOUND: "not found in registry",
|
|
8
7
|
NO_PROMPT_PROVIDED: "Please provide a prompt for analysis. Use @ syntax to include files (e.g., '@largefile.js explain what this does') or ask general questions",
|
|
8
|
+
UNSUPPORTED_AGY_OPTIONS: "Unsupported Antigravity CLI option(s)",
|
|
9
|
+
INVALID_RESUME: "resume must be true, latest, continue, or a non-empty conversation ID.",
|
|
10
|
+
AGY_NO_OUTPUT: "Antigravity CLI (`agy`) returned no output (it may have timed out resolving a file reference) and no recoverable transcript was found. Ensure any @referenced files exist under the working directory or an includeDirectories entry, narrow the prompt, or increase printTimeout.",
|
|
11
|
+
UNSAFE_ROOT_YOLO: "Refusing to run agy with yolo (`--dangerously-skip-permissions`) when workingDirectory is a filesystem root. Set workingDirectory to a specific project directory.",
|
|
12
|
+
UNSUPPORTED_OUTPUT_FORMAT: "outputFormat must be 'text' or 'json'. Antigravity CLI has no stream-json mode.",
|
|
13
|
+
JSON_SCHEMA_REQUIRES_JSON: "jsonSchema requires outputFormat: 'json'.",
|
|
14
|
+
INVALID_EFFORT: "effort must be one of: low, medium, high.",
|
|
15
|
+
AGY_JSON_PARSE: "Could not parse the Antigravity CLI JSON envelope",
|
|
16
|
+
AGY_STATUS_ERROR: "Antigravity CLI returned status ERROR",
|
|
17
|
+
AGY_DENIED_ACTIONS: "Antigravity CLI produced no response because it denied required actions. Retry with `yolo: true`, or allow the actions in the Antigravity `permissions.allow` settings. Denied",
|
|
18
|
+
INVALID_CONVERSATION_ID: "conversationId must be a non-empty agy conversation ID.",
|
|
19
|
+
CONVERSATION_NOT_RESUMED: "agy did not resume conversation",
|
|
20
|
+
INVALID_WORKING_DIRECTORY: "workingDirectory must be an absolute path to an existing directory that is not a filesystem root",
|
|
21
|
+
LIVE_PASS_ARTIFACT_DIR: "artifactDir must be an absolute path strictly inside workingDirectory",
|
|
22
|
+
LIVE_PASS_NO_BRIEF: "brief is required: describe the base URL or app id, the served-branch marker, the seed case, and any navigation hints.",
|
|
23
|
+
// agy resolves an @reference up to the first space, so a path containing
|
|
24
|
+
// whitespace becomes a dangling reference that hangs until --print-timeout.
|
|
25
|
+
UNREFERENCEABLE_PATH: "path contains whitespace, which Antigravity CLI cannot resolve as an @reference. Move or rename it so the path has no spaces",
|
|
26
|
+
SCREEN_REVIEW_NO_IMAGES: "review mode requires at least one absolute image path",
|
|
27
|
+
SCREEN_REVIEW_IMAGE_MISSING: "image does not exist",
|
|
28
|
+
SCREEN_REVIEW_ROUTE_FILE: "plan mode requires routeFile: an absolute path to an existing file inside workingDirectory",
|
|
29
|
+
};
|
|
30
|
+
// Antigravity CLI internal layout, used ONLY for best-effort output recovery.
|
|
31
|
+
// FRAGILE: pinned to agy 1.0.13 internals — a patch release may rename any of these.
|
|
32
|
+
// All access must degrade to null on mismatch; never throw based on these.
|
|
33
|
+
export const AGY_INTERNAL = {
|
|
34
|
+
ROOT_SEGMENTS: [".gemini", "antigravity-cli"],
|
|
35
|
+
LAST_CONVERSATIONS_SEGMENTS: ["cache", "last_conversations.json"],
|
|
36
|
+
BRAIN_DIR: "brain",
|
|
37
|
+
TRANSCRIPT_SEGMENTS: [".system_generated", "logs", "transcript.jsonl"],
|
|
38
|
+
// A transcript record holding the final model answer.
|
|
39
|
+
TRANSCRIPT_FINAL: { type: "PLANNER_RESPONSE", source: "MODEL", status: "DONE" },
|
|
40
|
+
TIMEOUT_SENTINEL: "Error: timed out waiting for response",
|
|
41
|
+
DISABLE_RECOVERY_ENV: "AGY_DISABLE_TRANSCRIPT_RECOVERY",
|
|
9
42
|
};
|
|
10
43
|
// Status messages
|
|
11
44
|
export const STATUS_MESSAGES = {
|
|
12
|
-
|
|
13
|
-
FLASH_RETRY: "⚡ Retrying with Gemini Flash...",
|
|
14
|
-
FLASH_SUCCESS: "✅ Flash model completed successfully",
|
|
15
|
-
SANDBOX_EXECUTING: "🔒 Executing Gemini CLI command in sandbox mode...",
|
|
45
|
+
SANDBOX_EXECUTING: "🔒 Executing Antigravity CLI command in sandbox mode...",
|
|
16
46
|
GEMINI_RESPONSE: "Gemini response:",
|
|
17
47
|
// Timeout prevention messages
|
|
18
48
|
PROCESSING_START: "🔍 Starting analysis (may take 5-15 minutes for large codebases)",
|
|
19
49
|
PROCESSING_CONTINUE: "⏳ Still processing... Gemini is working on your request",
|
|
20
50
|
PROCESSING_COMPLETE: "✅ Analysis completed successfully",
|
|
21
51
|
};
|
|
22
|
-
// Models
|
|
52
|
+
// Models. The tier in an Antigravity model name IS its reasoning effort, which
|
|
53
|
+
// is why `--effort` is rejected for these names.
|
|
23
54
|
export const MODELS = {
|
|
24
|
-
|
|
25
|
-
|
|
55
|
+
DEFAULT: "Gemini 4 Argon (High)",
|
|
56
|
+
MEDIUM: "Gemini 3.8 Flash (Medium)",
|
|
57
|
+
};
|
|
58
|
+
export const MODEL_CHOICE_DESCRIPTION = "Optional Antigravity model name. Verified options: 'Gemini 4 Argon (Low)', 'Gemini 4 Argon (Medium)', 'Gemini 4 Argon (High)', 'Gemini 3.8 Flash (Low)', 'Gemini 3.8 Flash (Medium)', and 'Gemini 3.8 Flash (High)'. Availability depends on your CLI version and account; check `agy models`. Some accounts also expose 'Gemini 3.1 Pro (Low)' and 'Gemini 3.1 Pro (High)'. The tier in the name is the reasoning effort.";
|
|
59
|
+
// Live UI pass / screen review
|
|
60
|
+
export const LIVE_PASS = {
|
|
61
|
+
DEFAULT_ARTIFACT_SEGMENT: ".live-pass",
|
|
62
|
+
MANIFEST_FILE: "manifest.json",
|
|
63
|
+
DEFAULT_PRINT_TIMEOUT: "15m",
|
|
64
|
+
SCREEN_REVIEW_PRINT_TIMEOUT: "10m",
|
|
65
|
+
PLAYWRIGHT_MCP_NAME: "playwright",
|
|
66
|
+
MAESTRO_MCP_NAME: "maestro",
|
|
67
|
+
// Slack between a frame's mtime and our run-start clock.
|
|
68
|
+
FRESHNESS_TOLERANCE_MS: 2000,
|
|
69
|
+
CONVERSATION_LINE_PREFIX: "[GEMINI_CONVERSATION_ID=",
|
|
26
70
|
};
|
|
27
71
|
// MCP Protocol Constants
|
|
28
72
|
export const PROTOCOL = {
|
|
@@ -53,37 +97,34 @@ export const PROTOCOL = {
|
|
|
53
97
|
export const CLI = {
|
|
54
98
|
// Command names
|
|
55
99
|
COMMANDS: {
|
|
56
|
-
|
|
100
|
+
AGY: "agy",
|
|
57
101
|
ECHO: "echo",
|
|
58
102
|
},
|
|
59
103
|
// Command flags
|
|
60
104
|
FLAGS: {
|
|
61
|
-
MODEL: "
|
|
62
|
-
SANDBOX: "
|
|
63
|
-
|
|
64
|
-
HELP: "
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
EXTENSIONS: "-e",
|
|
74
|
-
RESUME: "-r",
|
|
105
|
+
MODEL: "--model",
|
|
106
|
+
SANDBOX: "--sandbox",
|
|
107
|
+
PRINT: "--print",
|
|
108
|
+
HELP: "--help",
|
|
109
|
+
YOLO: "--dangerously-skip-permissions",
|
|
110
|
+
ADD_DIR: "--add-dir",
|
|
111
|
+
PRINT_TIMEOUT: "--print-timeout",
|
|
112
|
+
CONTINUE: "--continue",
|
|
113
|
+
CONVERSATION: "--conversation",
|
|
114
|
+
OUTPUT_FORMAT: "--output-format",
|
|
115
|
+
JSON_SCHEMA: "--json-schema",
|
|
116
|
+
EFFORT: "--effort",
|
|
75
117
|
},
|
|
76
118
|
// Default values
|
|
77
119
|
DEFAULTS: {
|
|
78
|
-
MODEL: "default", // Fallback model used when no specific model is provided
|
|
79
120
|
BOOLEAN_TRUE: "true",
|
|
80
121
|
BOOLEAN_FALSE: "false",
|
|
81
|
-
APPROVAL_MODE_DEFAULT: "default",
|
|
82
|
-
APPROVAL_MODE_AUTO_EDIT: "auto_edit",
|
|
83
122
|
APPROVAL_MODE_YOLO: "yolo",
|
|
123
|
+
RESUME_LATEST: "latest",
|
|
124
|
+
RESUME_CONTINUE: "continue",
|
|
84
125
|
OUTPUT_FORMAT_TEXT: "text",
|
|
85
126
|
OUTPUT_FORMAT_JSON: "json",
|
|
86
|
-
|
|
127
|
+
EFFORT_LEVELS: ["low", "medium", "high"],
|
|
87
128
|
},
|
|
88
129
|
};
|
|
89
130
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,UAAU;AACV,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AAEpC,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,8 +6,8 @@ import { Logger } from "./utils/logger.js";
|
|
|
6
6
|
import { PROTOCOL } from "./constants.js";
|
|
7
7
|
import { getToolDefinitions, getPromptDefinitions, executeTool, toolExists, getPromptMessage } from "./tools/index.js";
|
|
8
8
|
const server = new Server({
|
|
9
|
-
name: "gemini-
|
|
10
|
-
version: "
|
|
9
|
+
name: "gemini-mcp",
|
|
10
|
+
version: "2.2.0",
|
|
11
11
|
}, {
|
|
12
12
|
capabilities: {
|
|
13
13
|
tools: {},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GASvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAiB,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|