@joeytheman/gemini-mcp-tool 1.3.0 → 2.3.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 +127 -35
- package/dist/__tests__/agyModelSteps.test.d.ts +2 -0
- package/dist/__tests__/agyModelSteps.test.d.ts.map +1 -0
- package/dist/__tests__/agyModelSteps.test.js +58 -0
- package/dist/__tests__/agyModelSteps.test.js.map +1 -0
- package/dist/__tests__/ask-gemini.test.js +99 -37
- package/dist/__tests__/ask-gemini.test.js.map +1 -1
- package/dist/__tests__/capture-script.chromium.test.d.ts +2 -0
- package/dist/__tests__/capture-script.chromium.test.d.ts.map +1 -0
- package/dist/__tests__/capture-script.chromium.test.js +235 -0
- package/dist/__tests__/capture-script.chromium.test.js.map +1 -0
- package/dist/__tests__/layout-snippet.chromium.test.d.ts +2 -0
- package/dist/__tests__/layout-snippet.chromium.test.d.ts.map +1 -0
- package/dist/__tests__/layout-snippet.chromium.test.js +333 -0
- package/dist/__tests__/layout-snippet.chromium.test.js.map +1 -0
- package/dist/__tests__/layout-snippet.test.d.ts +2 -0
- package/dist/__tests__/layout-snippet.test.d.ts.map +1 -0
- package/dist/__tests__/layout-snippet.test.js +12 -0
- package/dist/__tests__/layout-snippet.test.js.map +1 -0
- 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 +1249 -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 +553 -0
- package/dist/__tests__/screen-review.test.js.map +1 -0
- package/dist/__tests__/server-progress.test.d.ts +2 -0
- package/dist/__tests__/server-progress.test.d.ts.map +1 -0
- package/dist/__tests__/server-progress.test.js +63 -0
- package/dist/__tests__/server-progress.test.js.map +1 -0
- package/dist/__tests__/server.test.js +17 -19
- 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 +30 -0
- package/dist/__tests__/simple-tools.test.js.map +1 -0
- package/dist/__tests__/tools.test.js +91 -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 +731 -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 +185 -7
- 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/progressUpdates.test.d.ts +2 -0
- package/dist/__tests__/utils/progressUpdates.test.d.ts.map +1 -0
- package/dist/__tests__/utils/progressUpdates.test.js +62 -0
- package/dist/__tests__/utils/progressUpdates.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 +91 -26
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +101 -28
- package/dist/constants.js.map +1 -1
- package/dist/index.js +20 -95
- package/dist/index.js.map +1 -1
- package/dist/layoutCheckSnippet.generated.d.ts +2 -0
- package/dist/layoutCheckSnippet.generated.d.ts.map +1 -0
- package/dist/layoutCheckSnippet.generated.js +3 -0
- package/dist/layoutCheckSnippet.generated.js.map +1 -0
- 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 +40 -23
- 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 +7 -5
- 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 +206 -0
- package/dist/tools/live-pass.tool.d.ts.map +1 -0
- package/dist/tools/live-pass.tool.js +670 -0
- package/dist/tools/live-pass.tool.js.map +1 -0
- package/dist/tools/registry.d.ts +6 -4
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +14 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/screen-review.tool.d.ts +124 -0
- package/dist/tools/screen-review.tool.d.ts.map +1 -0
- package/dist/tools/screen-review.tool.js +449 -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 +9 -3
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/utils/agyExecutor.d.ts +76 -0
- package/dist/utils/agyExecutor.d.ts.map +1 -0
- package/dist/utils/agyExecutor.js +449 -0
- package/dist/utils/agyExecutor.js.map +1 -0
- package/dist/utils/agyModelSteps.d.ts +5 -0
- package/dist/utils/agyModelSteps.d.ts.map +1 -0
- package/dist/utils/agyModelSteps.js +33 -0
- package/dist/utils/agyModelSteps.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/artifactFile.d.ts +6 -0
- package/dist/utils/artifactFile.d.ts.map +1 -0
- package/dist/utils/artifactFile.js +55 -0
- package/dist/utils/artifactFile.js.map +1 -0
- package/dist/utils/captureScript.d.ts +24 -0
- package/dist/utils/captureScript.d.ts.map +1 -0
- package/dist/utils/captureScript.js +83 -0
- package/dist/utils/captureScript.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 +7 -1
- package/dist/utils/commandExecutor.d.ts.map +1 -1
- package/dist/utils/commandExecutor.js +162 -22
- 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/gitCheckout.d.ts +14 -0
- package/dist/utils/gitCheckout.d.ts.map +1 -0
- package/dist/utils/gitCheckout.js +36 -0
- package/dist/utils/gitCheckout.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/layoutCheck.d.ts +58 -0
- package/dist/utils/layoutCheck.d.ts.map +1 -0
- package/dist/utils/layoutCheck.js +84 -0
- package/dist/utils/layoutCheck.js.map +1 -0
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +0 -6
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/progressUpdates.d.ts +14 -0
- package/dist/utils/progressUpdates.d.ts.map +1 -0
- package/dist/utils/progressUpdates.js +40 -0
- package/dist/utils/progressUpdates.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 +19 -16
- 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,82 @@
|
|
|
1
|
+
import { execFile } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { Logger } from './logger.js';
|
|
7
|
+
import { isWithin } from './fileReferences.js';
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
/** Files larger than this are tracked by status only — hashing them is not worth the read. */
|
|
10
|
+
const MAX_HASH_BYTES = 8 * 1024 * 1024;
|
|
11
|
+
/** Upper bound on files hashed per snapshot; the report says so when it bites. */
|
|
12
|
+
const MAX_HASHED_FILES = 500;
|
|
13
|
+
/** The path part of a porcelain line: `XY path`, possibly quoted, possibly a rename. */
|
|
14
|
+
function porcelainPath(line, repoRoot) {
|
|
15
|
+
const raw = line.slice(3).split(' -> ').pop() ?? '';
|
|
16
|
+
const unquoted = raw.startsWith('"') && raw.endsWith('"') ? raw.slice(1, -1) : raw;
|
|
17
|
+
return path.resolve(repoRoot, unquoted);
|
|
18
|
+
}
|
|
19
|
+
function hashFile(file) {
|
|
20
|
+
try {
|
|
21
|
+
const stat = fs.statSync(file);
|
|
22
|
+
if (!stat.isFile() || stat.size > MAX_HASH_BYTES)
|
|
23
|
+
return null;
|
|
24
|
+
return createHash('sha256').update(fs.readFileSync(file)).digest('hex');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Deleted, unreadable, or a directory — status alone covers it.
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function snapshotWorkingTree(cwd) {
|
|
32
|
+
try {
|
|
33
|
+
const [{ stdout: rootOut }, { stdout: statusOut }] = await Promise.all([
|
|
34
|
+
execFileAsync('git', ['rev-parse', '--show-toplevel'], { cwd, encoding: 'utf-8' }),
|
|
35
|
+
// --untracked-files=all: without it an untracked directory collapses to a
|
|
36
|
+
// single `?? parent/` entry, which would hide unrelated files created
|
|
37
|
+
// beside a tool's own artifact directory.
|
|
38
|
+
execFileAsync('git', ['status', '--porcelain', '--untracked-files=all'], { cwd, encoding: 'utf-8' }),
|
|
39
|
+
]);
|
|
40
|
+
const root = rootOut.trim();
|
|
41
|
+
const lines = statusOut.split('\n').map(line => line.trimEnd()).filter(Boolean);
|
|
42
|
+
const hashes = new Map();
|
|
43
|
+
let truncated = false;
|
|
44
|
+
for (const line of lines) {
|
|
45
|
+
if (hashes.size >= MAX_HASHED_FILES) {
|
|
46
|
+
truncated = true;
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
const file = porcelainPath(line, root);
|
|
50
|
+
const hash = hashFile(file);
|
|
51
|
+
if (hash)
|
|
52
|
+
hashes.set(file, hash);
|
|
53
|
+
}
|
|
54
|
+
return { root, lines, hashes, truncated };
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
Logger.debug(`[git-guard] no working-tree snapshot for ${cwd}: ${error}`);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function diffWorkingTree(before, after, opts = {}) {
|
|
62
|
+
if (!before || !after)
|
|
63
|
+
return { added: [], removed: [], modified: [], truncated: false };
|
|
64
|
+
// A tool's own artifact directory is not an uninvited edit.
|
|
65
|
+
const ignore = opts.ignoreDirectory;
|
|
66
|
+
const isOurs = (file) => Boolean(ignore) && isWithin(ignore, file);
|
|
67
|
+
const beforeSet = new Set(before.lines);
|
|
68
|
+
const afterSet = new Set(after.lines);
|
|
69
|
+
const modified = [];
|
|
70
|
+
for (const [file, hash] of after.hashes) {
|
|
71
|
+
const previous = before.hashes.get(file);
|
|
72
|
+
if (previous && previous !== hash && !isOurs(file))
|
|
73
|
+
modified.push(file);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
added: after.lines.filter(line => !beforeSet.has(line) && !isOurs(porcelainPath(line, after.root))),
|
|
77
|
+
removed: before.lines.filter(line => !afterSet.has(line) && !isOurs(porcelainPath(line, before.root))),
|
|
78
|
+
modified,
|
|
79
|
+
truncated: before.truncated || after.truncated,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=gitStatusGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitStatusGuard.js","sourceRoot":"","sources":["../../src/utils/gitStatusGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** `dev-overlay` marks a frame a framework dev overlay (such as Expo's error overlay) covered; its other entries are suspect. */
|
|
3
|
+
export declare const LAYOUT_ENTRY_KINDS: readonly ["dev-overlay", "page-scroll-x", "text-spill", "text-clipped", "control-covered", "control-offscreen"];
|
|
4
|
+
export declare const layoutReportSchema: z.ZodObject<{
|
|
5
|
+
check: z.ZodLiteral<"layout-check/1">;
|
|
6
|
+
viewport: z.ZodObject<{
|
|
7
|
+
width: z.ZodNumber;
|
|
8
|
+
height: z.ZodNumber;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
found: z.ZodNumber;
|
|
11
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
12
|
+
text: z.ZodString;
|
|
13
|
+
testID: z.ZodNullable<z.ZodString>;
|
|
14
|
+
rect: z.ZodObject<{
|
|
15
|
+
x: z.ZodNumber;
|
|
16
|
+
y: z.ZodNumber;
|
|
17
|
+
width: z.ZodNumber;
|
|
18
|
+
height: z.ZodNumber;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
kind: z.ZodEnum<{
|
|
21
|
+
"dev-overlay": "dev-overlay";
|
|
22
|
+
"page-scroll-x": "page-scroll-x";
|
|
23
|
+
"text-spill": "text-spill";
|
|
24
|
+
"text-clipped": "text-clipped";
|
|
25
|
+
"control-covered": "control-covered";
|
|
26
|
+
"control-offscreen": "control-offscreen";
|
|
27
|
+
}>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
clamped: z.ZodArray<z.ZodObject<{
|
|
30
|
+
text: z.ZodString;
|
|
31
|
+
testID: z.ZodNullable<z.ZodString>;
|
|
32
|
+
rect: z.ZodObject<{
|
|
33
|
+
x: z.ZodNumber;
|
|
34
|
+
y: z.ZodNumber;
|
|
35
|
+
width: z.ZodNumber;
|
|
36
|
+
height: z.ZodNumber;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
kind: z.ZodLiteral<"text-clamped">;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type LayoutReport = z.infer<typeof layoutReportSchema>;
|
|
42
|
+
export type LayoutEntry = LayoutReport['entries'][number] | LayoutReport['clamped'][number];
|
|
43
|
+
export type LayoutCheckStatus = 'OK' | 'MISSING' | 'STALE' | 'OUTSIDE' | 'MALFORMED' | 'MISMATCHED';
|
|
44
|
+
export interface LayoutCheck {
|
|
45
|
+
file: string;
|
|
46
|
+
status: LayoutCheckStatus;
|
|
47
|
+
report?: LayoutReport;
|
|
48
|
+
problem?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare function layoutFileName(frameFileName: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Read one frame's layout file. Never throws: a file that cannot be trusted is
|
|
53
|
+
* reported with its status and treated by the report as "not run". A file
|
|
54
|
+
* measured at another width than the frame's describes a different layout.
|
|
55
|
+
*/
|
|
56
|
+
export declare function readLayoutCheck(file: string, artifactDir: string, runStartMs: number, expectedWidth?: number): LayoutCheck;
|
|
57
|
+
export declare function formatLayoutEntry(entry: LayoutEntry): string;
|
|
58
|
+
//# sourceMappingURL=layoutCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutCheck.d.ts","sourceRoot":"","sources":["../../src/utils/layoutCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB,iIAAiI;AACjI,eAAO,MAAM,kBAAkB,iHAOrB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE5D;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,WAAW,CA8Bb;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAI5D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { realpathOfExistingPrefix } from './fileReferences.js';
|
|
4
|
+
import { checkArtifactFile } from './artifactFile.js';
|
|
5
|
+
import { LIVE_PASS } from '../constants.js';
|
|
6
|
+
const rectSchema = z.object({
|
|
7
|
+
x: z.number(),
|
|
8
|
+
y: z.number(),
|
|
9
|
+
width: z.number(),
|
|
10
|
+
height: z.number(),
|
|
11
|
+
});
|
|
12
|
+
const entryFields = {
|
|
13
|
+
text: z.string().max(LIVE_PASS.LAYOUT_TEXT_CHARS),
|
|
14
|
+
testID: z.string().nullable(),
|
|
15
|
+
rect: rectSchema,
|
|
16
|
+
};
|
|
17
|
+
/** `dev-overlay` marks a frame a framework dev overlay (such as Expo's error overlay) covered; its other entries are suspect. */
|
|
18
|
+
export const LAYOUT_ENTRY_KINDS = [
|
|
19
|
+
'dev-overlay',
|
|
20
|
+
'page-scroll-x',
|
|
21
|
+
'text-spill',
|
|
22
|
+
'text-clipped',
|
|
23
|
+
'control-covered',
|
|
24
|
+
'control-offscreen',
|
|
25
|
+
];
|
|
26
|
+
export const layoutReportSchema = z.object({
|
|
27
|
+
check: z.literal(LIVE_PASS.LAYOUT_CHECK_ID),
|
|
28
|
+
viewport: z.object({ width: z.number(), height: z.number() }),
|
|
29
|
+
found: z.number().int().nonnegative(),
|
|
30
|
+
entries: z.array(z.object({ kind: z.enum(LAYOUT_ENTRY_KINDS), ...entryFields })).max(LIVE_PASS.LAYOUT_MAX_ENTRIES),
|
|
31
|
+
clamped: z.array(z.object({ kind: z.literal('text-clamped'), ...entryFields })).max(LIVE_PASS.LAYOUT_MAX_ENTRIES),
|
|
32
|
+
});
|
|
33
|
+
export function layoutFileName(frameFileName) {
|
|
34
|
+
return frameFileName.replace(/\.png$/, LIVE_PASS.LAYOUT_FILE_SUFFIX);
|
|
35
|
+
}
|
|
36
|
+
const FILE_PROBLEMS = {
|
|
37
|
+
OUTSIDE: 'resolves outside the artifact directory',
|
|
38
|
+
MISSING: 'not written',
|
|
39
|
+
STALE: 'predates this run',
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Read one frame's layout file. Never throws: a file that cannot be trusted is
|
|
43
|
+
* reported with its status and treated by the report as "not run". A file
|
|
44
|
+
* measured at another width than the frame's describes a different layout.
|
|
45
|
+
*/
|
|
46
|
+
export function readLayoutCheck(file, artifactDir, runStartMs, expectedWidth) {
|
|
47
|
+
const absFile = realpathOfExistingPrefix(file);
|
|
48
|
+
const fileStatus = checkArtifactFile(absFile, artifactDir, runStartMs);
|
|
49
|
+
if (fileStatus === 'EMPTY')
|
|
50
|
+
return { file: absFile, status: 'MALFORMED', problem: 'empty' };
|
|
51
|
+
if (fileStatus !== 'OK')
|
|
52
|
+
return { file: absFile, status: fileStatus, problem: FILE_PROBLEMS[fileStatus] };
|
|
53
|
+
let parsed;
|
|
54
|
+
try {
|
|
55
|
+
parsed = JSON.parse(fs.readFileSync(absFile, 'utf-8'));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return { file: absFile, status: 'MALFORMED', problem: 'not valid JSON' };
|
|
59
|
+
}
|
|
60
|
+
const report = layoutReportSchema.safeParse(parsed);
|
|
61
|
+
if (!report.success) {
|
|
62
|
+
const issue = report.error.issues[0];
|
|
63
|
+
return {
|
|
64
|
+
file: absFile,
|
|
65
|
+
status: 'MALFORMED',
|
|
66
|
+
problem: `not a ${LIVE_PASS.LAYOUT_CHECK_ID} result (${issue.path.join('.') || 'root'}: ${issue.message})`,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const measuredWidth = report.data.viewport.width;
|
|
70
|
+
if (expectedWidth !== undefined && measuredWidth !== expectedWidth) {
|
|
71
|
+
return {
|
|
72
|
+
file: absFile,
|
|
73
|
+
status: 'MISMATCHED',
|
|
74
|
+
problem: `measured at width ${measuredWidth}, but the frame is ${expectedWidth} wide`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return { file: absFile, status: 'OK', report: report.data };
|
|
78
|
+
}
|
|
79
|
+
export function formatLayoutEntry(entry) {
|
|
80
|
+
const { x, y, width, height } = entry.rect;
|
|
81
|
+
const testID = entry.testID ? ` testID=${entry.testID}` : '';
|
|
82
|
+
return `${entry.kind} "${entry.text}"${testID} at ${x},${y} ${width}x${height}`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=layoutCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutCheck.js","sourceRoot":"","sources":["../../src/utils/layoutCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,iIAAiI;AACjI,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,aAAa;IACb,eAAe;IACf,YAAY;IACZ,cAAc;IACd,iBAAiB;IACjB,mBAAmB;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAClH,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC;CAClH,CAAC,CAAC;AAcH,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,yCAAyC;IAClD,OAAO,EAAE,aAAa;IACtB,KAAK,EAAE,mBAAmB;CAClB,CAAC;AAEX;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,WAAmB,EACnB,UAAkB,EAClB,aAAsB;IAEtB,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACvE,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5F,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IAE1G,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,SAAS,SAAS,CAAC,eAAe,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG;SAC3G,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACjD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACnE,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,qBAAqB,aAAa,sBAAsB,aAAa,OAAO;SACtF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAkB;IAClD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;AAClF,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export declare class Logger {
|
|
|
7
7
|
static toolInvocation(toolName: string, args: any): void;
|
|
8
8
|
static toolParsedArgs(prompt: string, model?: string, sandbox?: boolean, changeMode?: boolean): void;
|
|
9
9
|
static commandExecution(command: string, args: string[], startTime: number): void;
|
|
10
|
-
private static _commandStartTimes;
|
|
11
10
|
static commandComplete(startTime: number, exitCode: number | null, outputLength?: number): void;
|
|
12
11
|
}
|
|
13
12
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIjD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIlD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAIxD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;IAIpG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAGA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIjD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIlD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;IAIxD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;IAIpG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIjF,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;CAOhG"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -24,19 +24,13 @@ export class Logger {
|
|
|
24
24
|
}
|
|
25
25
|
static commandExecution(command, args, startTime) {
|
|
26
26
|
this.warn(`[${startTime}] Starting: ${command} ${args.map((arg) => `"${arg}"`).join(" ")}`);
|
|
27
|
-
// Store command execution start for timing analysis
|
|
28
|
-
this._commandStartTimes.set(startTime, { command, args, startTime });
|
|
29
27
|
}
|
|
30
|
-
// Track command start times for duration calculation
|
|
31
|
-
static _commandStartTimes = new Map();
|
|
32
28
|
static commandComplete(startTime, exitCode, outputLength) {
|
|
33
29
|
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
34
30
|
this.warn(`[${elapsed}s] Process finished with exit code: ${exitCode}`);
|
|
35
31
|
if (outputLength !== undefined) {
|
|
36
32
|
this.warn(`Response: ${outputLength} chars`);
|
|
37
33
|
}
|
|
38
|
-
// Clean up command tracking
|
|
39
|
-
this._commandStartTimes.delete(startTime);
|
|
40
34
|
}
|
|
41
35
|
}
|
|
42
36
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM;AACN,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,aAAa,CAAC,OAAe;QAC1C,OAAO,GAAG,UAAU,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,OAAe,EAAE,GAAG,IAAW;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,IAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc,EAAE,KAAc,EAAE,OAAiB,EAAE,UAAoB;QAC3F,IAAI,CAAC,IAAI,CAAC,mBAAmB,MAAM,kBAAkB,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAe,EAAE,IAAc,EAAE,SAAiB;QACxE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,eAAe,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM;AACN,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,MAAM;IACT,MAAM,CAAC,aAAa,CAAC,OAAe;QAC1C,OAAO,GAAG,UAAU,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,OAAe,EAAE,GAAG,IAAW;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,IAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc,EAAE,KAAc,EAAE,OAAiB,EAAE,UAAoB;QAC3F,IAAI,CAAC,IAAI,CAAC,mBAAmB,MAAM,kBAAkB,UAAU,IAAI,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAe,EAAE,IAAc,EAAE,SAAiB;QACxE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,eAAe,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,SAAiB,EAAE,QAAuB,EAAE,YAAqB;QACtF,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,uCAAuC,QAAQ,EAAE,CAAC,CAAC;QACxE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,YAAY,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ProgressToken = string | number;
|
|
2
|
+
export type SendProgress = (progressToken: ProgressToken, progress: number, total: number | undefined, message: string) => Promise<void> | void;
|
|
3
|
+
export type ProgressOutcome = 'success' | 'failure';
|
|
4
|
+
export interface ProgressUpdates {
|
|
5
|
+
recordOutput(output: string): void;
|
|
6
|
+
finish(outcome: ProgressOutcome): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Keep-alive progress for ONE tool call. Each call owns its timer and output
|
|
10
|
+
* preview, so a call that finishes never silences another call still running
|
|
11
|
+
* in the same server; a silenced call is aborted by the client.
|
|
12
|
+
*/
|
|
13
|
+
export declare function startProgressUpdates(operationName: string, progressToken: ProgressToken | undefined, send: SendProgress): ProgressUpdates;
|
|
14
|
+
//# sourceMappingURL=progressUpdates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressUpdates.d.ts","sourceRoot":"","sources":["../../src/utils/progressUpdates.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG,CACzB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACxC;AAeD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,IAAI,EAAE,YAAY,GACjB,eAAe,CA6BjB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PROTOCOL } from '../constants.js';
|
|
2
|
+
const OUTPUT_PREVIEW_CHARS = 150;
|
|
3
|
+
function keepAliveMessage(operationName, index) {
|
|
4
|
+
const messages = [
|
|
5
|
+
`🧠 ${operationName} - Gemini is analyzing your request...`,
|
|
6
|
+
`📊 ${operationName} - Processing files and generating insights...`,
|
|
7
|
+
`✨ ${operationName} - Creating structured response for your review...`,
|
|
8
|
+
`⏱️ ${operationName} - Large analysis in progress (this is normal for big requests)...`,
|
|
9
|
+
`🔍 ${operationName} - Still working... Gemini takes time for quality results...`,
|
|
10
|
+
];
|
|
11
|
+
return messages[index % messages.length];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Keep-alive progress for ONE tool call. Each call owns its timer and output
|
|
15
|
+
* preview, so a call that finishes never silences another call still running
|
|
16
|
+
* in the same server; a silenced call is aborted by the client.
|
|
17
|
+
*/
|
|
18
|
+
export function startProgressUpdates(operationName, progressToken, send) {
|
|
19
|
+
if (!progressToken) {
|
|
20
|
+
return { recordOutput: () => { }, finish: () => { } };
|
|
21
|
+
}
|
|
22
|
+
let latestOutput = '';
|
|
23
|
+
let ticks = 0;
|
|
24
|
+
void send(progressToken, 0, undefined, `🔍 Starting ${operationName}`);
|
|
25
|
+
const interval = setInterval(() => {
|
|
26
|
+
const base = keepAliveMessage(operationName, ticks);
|
|
27
|
+
ticks += 1;
|
|
28
|
+
const preview = latestOutput.slice(-OUTPUT_PREVIEW_CHARS).trim();
|
|
29
|
+
void send(progressToken, ticks, undefined, preview ? `${base}\n📝 Output: ...${preview}` : base);
|
|
30
|
+
}, PROTOCOL.KEEPALIVE_INTERVAL);
|
|
31
|
+
return {
|
|
32
|
+
recordOutput: (output) => { latestOutput = output; },
|
|
33
|
+
finish: (outcome) => {
|
|
34
|
+
clearInterval(interval);
|
|
35
|
+
const finalProgress = ticks + 1;
|
|
36
|
+
void send(progressToken, finalProgress, finalProgress, outcome === 'success' ? `✅ ${operationName} completed successfully` : `❌ ${operationName} failed`);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=progressUpdates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressUpdates.js","sourceRoot":"","sources":["../../src/utils/progressUpdates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAkB3C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,SAAS,gBAAgB,CAAC,aAAqB,EAAE,KAAa;IAC5D,MAAM,QAAQ,GAAG;QACf,MAAM,aAAa,wCAAwC;QAC3D,MAAM,aAAa,gDAAgD;QACnE,KAAK,aAAa,oDAAoD;QACtE,MAAM,aAAa,oEAAoE;QACvF,MAAM,aAAa,8DAA8D;KAClF,CAAC;IACF,OAAO,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAAqB,EACrB,aAAwC,EACxC,IAAkB;IAElB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,aAAa,EAAE,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,CAAC;QACX,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,KAAK,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,mBAAmB,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnG,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAEhC,OAAO;QACL,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,MAAM,aAAa,GAAG,KAAK,GAAG,CAAC,CAAC;YAChC,KAAK,IAAI,CACP,aAAa,EACb,aAAa,EACb,aAAa,EACb,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,yBAAyB,CAAC,CAAC,CAAC,KAAK,aAAa,SAAS,CAClG,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { AgyCLIOptions } from './agyExecutor.js';
|
|
2
2
|
/**
|
|
3
3
|
* Whether LRU response caching is enabled.
|
|
4
|
-
* Opt-in via environment variable
|
|
4
|
+
* Opt-in via environment variable AGY_CACHE_ENABLED=true.
|
|
5
5
|
* Defaults to false — users must explicitly enable caching.
|
|
6
6
|
*/
|
|
7
7
|
export declare const isCacheEnabled: () => boolean;
|
|
8
8
|
/**
|
|
9
9
|
* Generate a cache key from prompt and options
|
|
10
10
|
*/
|
|
11
|
-
export declare function generateCacheKey(prompt: string, options:
|
|
11
|
+
export declare function generateCacheKey(prompt: string, options: AgyCLIOptions): string;
|
|
12
12
|
/**
|
|
13
13
|
* Get cached response if available
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseCache.d.ts","sourceRoot":"","sources":["../../src/utils/responseCache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"responseCache.d.ts","sourceRoot":"","sources":["../../src/utils/responseCache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,OACQ,CAAC;AAwB3C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAuB/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGtE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAED;;GAEG;AACH,wBAAgB,aAAa;;;;;EAO5B"}
|
|
@@ -3,21 +3,21 @@ import { createHash } from 'crypto';
|
|
|
3
3
|
import { Logger } from './logger.js';
|
|
4
4
|
/**
|
|
5
5
|
* Whether LRU response caching is enabled.
|
|
6
|
-
* Opt-in via environment variable
|
|
6
|
+
* Opt-in via environment variable AGY_CACHE_ENABLED=true.
|
|
7
7
|
* Defaults to false — users must explicitly enable caching.
|
|
8
8
|
*/
|
|
9
|
-
export const isCacheEnabled = () => process.env.
|
|
9
|
+
export const isCacheEnabled = () => process.env.AGY_CACHE_ENABLED === 'true';
|
|
10
10
|
/**
|
|
11
|
-
* LRU Cache for Gemini
|
|
11
|
+
* LRU Cache for agy-backed Gemini responses
|
|
12
12
|
* Caches responses to identical prompts with identical options
|
|
13
13
|
*
|
|
14
14
|
* Benefits:
|
|
15
15
|
* - Near-instant responses for repeated queries
|
|
16
|
-
* - Reduces
|
|
16
|
+
* - Reduces repeated CLI calls
|
|
17
17
|
* - 30-minute TTL ensures fresh data
|
|
18
18
|
* - 10MB max size prevents memory bloat
|
|
19
19
|
*
|
|
20
|
-
* Disabled by default. Enable via
|
|
20
|
+
* Disabled by default. Enable via AGY_CACHE_ENABLED=true env var.
|
|
21
21
|
*/
|
|
22
22
|
const responseCache = new LRUCache({
|
|
23
23
|
max: 100, // Cache up to 100 recent responses
|
|
@@ -41,11 +41,16 @@ export function generateCacheKey(prompt, options) {
|
|
|
41
41
|
yolo: options.yolo,
|
|
42
42
|
approvalMode: options.approvalMode,
|
|
43
43
|
outputFormat: options.outputFormat,
|
|
44
|
+
jsonSchema: options.jsonSchema,
|
|
45
|
+
effort: options.effort,
|
|
44
46
|
includeDirectories: options.includeDirectories,
|
|
45
47
|
debug: options.debug,
|
|
48
|
+
printTimeout: options.printTimeout,
|
|
46
49
|
promptInteractive: options.promptInteractive,
|
|
47
50
|
extensions: options.extensions,
|
|
48
|
-
resume: options.resume
|
|
51
|
+
resume: options.resume,
|
|
52
|
+
conversationId: options.conversationId,
|
|
53
|
+
cwd: options.cwd
|
|
49
54
|
});
|
|
50
55
|
return createHash('sha256').update(cacheInput).digest('hex');
|
|
51
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseCache.js","sourceRoot":"","sources":["../../src/utils/responseCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE,CAC1C,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"responseCache.js","sourceRoot":"","sources":["../../src/utils/responseCache.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joeytheman/gemini-mcp-tool",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "MCP server for Gemini CLI
|
|
3
|
+
"version": "2.3.0",
|
|
4
|
+
"description": "MCP server for asking Gemini through Antigravity CLI (agy)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
"test": "vitest run",
|
|
15
15
|
"test:watch": "vitest watch",
|
|
16
16
|
"test:coverage": "vitest run --coverage",
|
|
17
|
+
"snippet:build": "node scripts/minify-layout-snippet.mjs",
|
|
18
|
+
"test:chromium": "playwright-core install chromium-headless-shell && vitest run --config vitest.chromium.config.ts",
|
|
17
19
|
"lint": "tsc --noEmit",
|
|
18
20
|
"contribute": "tsx src/contribute.ts",
|
|
19
21
|
"prepare": "npm run build",
|
|
@@ -26,6 +28,8 @@
|
|
|
26
28
|
"mcp",
|
|
27
29
|
"modelcontextprotocol",
|
|
28
30
|
"gemini",
|
|
31
|
+
"antigravity",
|
|
32
|
+
"agy",
|
|
29
33
|
"cli",
|
|
30
34
|
"ai",
|
|
31
35
|
"llm"
|
|
@@ -41,7 +45,7 @@
|
|
|
41
45
|
},
|
|
42
46
|
"homepage": "https://github.com/joeytheman/gemini-mcp-tool#readme",
|
|
43
47
|
"engines": {
|
|
44
|
-
"node": ">=
|
|
48
|
+
"node": ">=20.12.0"
|
|
45
49
|
},
|
|
46
50
|
"files": [
|
|
47
51
|
"dist/",
|
|
@@ -49,31 +53,30 @@
|
|
|
49
53
|
"LICENSE"
|
|
50
54
|
],
|
|
51
55
|
"dependencies": {
|
|
52
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"inquirer": "^9.0.0",
|
|
56
|
-
"lru-cache": "^11.2.4",
|
|
57
|
-
"prismjs": "^1.30.0",
|
|
58
|
-
"zod": "^3.25.76",
|
|
59
|
-
"zod-to-json-schema": "^3.24.6"
|
|
56
|
+
"@modelcontextprotocol/sdk": "^1.32.2",
|
|
57
|
+
"lru-cache": "^11.5.3",
|
|
58
|
+
"zod": "^4.6.7"
|
|
60
59
|
},
|
|
61
60
|
"devDependencies": {
|
|
62
|
-
"@types/
|
|
63
|
-
"@
|
|
64
|
-
"@vitest/coverage-v8": "^2.1.8",
|
|
61
|
+
"@types/node": "^25.3.3",
|
|
62
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
65
63
|
"archiver": "^7.0.1",
|
|
64
|
+
"esbuild": "^0.25.12",
|
|
66
65
|
"mermaid": "^11.12.2",
|
|
66
|
+
"playwright-core": "1.64.1",
|
|
67
|
+
"prismjs": "^1.30.0",
|
|
67
68
|
"tsx": "^4.0.0",
|
|
68
69
|
"typescript": "^5.0.0",
|
|
69
70
|
"vitepress": "^1.6.4",
|
|
70
71
|
"vitepress-plugin-mermaid": "^2.0.17",
|
|
71
|
-
"vitest": "^
|
|
72
|
+
"vitest": "^4.0.18"
|
|
72
73
|
},
|
|
73
74
|
"publishConfig": {
|
|
74
75
|
"access": "public"
|
|
75
76
|
},
|
|
76
77
|
"overrides": {
|
|
77
|
-
"
|
|
78
|
+
"vitepress": {
|
|
79
|
+
"esbuild": ">=0.25.0"
|
|
80
|
+
}
|
|
78
81
|
}
|
|
79
82
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"geminiExecutor.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/geminiExecutor.test.ts"],"names":[],"mappings":""}
|