@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
|
@@ -1,3 +1,37 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import { UnifiedTool } from './registry.js';
|
|
3
|
+
export declare const askGeminiArgsSchema: z.ZodObject<{
|
|
4
|
+
prompt: z.ZodString;
|
|
5
|
+
model: z.ZodOptional<z.ZodString>;
|
|
6
|
+
sandbox: z.ZodDefault<z.ZodBoolean>;
|
|
7
|
+
changeMode: z.ZodDefault<z.ZodBoolean>;
|
|
8
|
+
chunkIndex: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
9
|
+
chunkCacheKey: z.ZodOptional<z.ZodString>;
|
|
10
|
+
workingDirectory: z.ZodOptional<z.ZodString>;
|
|
11
|
+
yolo: z.ZodDefault<z.ZodBoolean>;
|
|
12
|
+
approvalMode: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
yolo: "yolo";
|
|
14
|
+
default: "default";
|
|
15
|
+
auto_edit: "auto_edit";
|
|
16
|
+
}>>;
|
|
17
|
+
outputFormat: z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
text: "text";
|
|
19
|
+
json: "json";
|
|
20
|
+
"stream-json": "stream-json";
|
|
21
|
+
}>>;
|
|
22
|
+
jsonSchema: z.ZodOptional<z.ZodString>;
|
|
23
|
+
effort: z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
low: "low";
|
|
25
|
+
medium: "medium";
|
|
26
|
+
high: "high";
|
|
27
|
+
}>>;
|
|
28
|
+
includeDirectories: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
29
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
printTimeout: z.ZodOptional<z.ZodString>;
|
|
31
|
+
promptInteractive: z.ZodOptional<z.ZodString>;
|
|
32
|
+
extensions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
33
|
+
resume: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
34
|
+
conversationId: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, z.core.$strip>;
|
|
2
36
|
export declare const askGeminiTool: UnifiedTool;
|
|
3
37
|
//# sourceMappingURL=ask-gemini.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-gemini.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-gemini.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ask-gemini.tool.d.ts","sourceRoot":"","sources":["../../src/tools/ask-gemini.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkB5C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsB9B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,WAsE3B,CAAC"}
|
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
3
|
-
import { ERROR_MESSAGES, STATUS_MESSAGES } from '../constants.js';
|
|
4
|
-
const askGeminiArgsSchema = z.object({
|
|
5
|
-
prompt: z.string().min(1).describe("Analysis request. Use @ syntax to include files (e.g., '@largefile.js
|
|
6
|
-
model: z.string().optional().describe(
|
|
7
|
-
sandbox: z.boolean().default(false).describe("Use sandbox mode (
|
|
2
|
+
import { executeAgyCLI, executeAgyJson, processChangeModeOutput, renderAgyJsonEnvelope, formatAgyUsageLine, formatConversationLine, } from '../utils/agyExecutor.js';
|
|
3
|
+
import { CLI, ERROR_MESSAGES, MODELS, MODEL_CHOICE_DESCRIPTION, STATUS_MESSAGES } from '../constants.js';
|
|
4
|
+
export const askGeminiArgsSchema = z.object({
|
|
5
|
+
prompt: z.string().min(1).describe("Analysis request for Gemini feedback. Use @ syntax to include files (e.g., '@largefile.js review this implementation') or ask for plan/code review feedback"),
|
|
6
|
+
model: z.string().optional().describe(`${MODEL_CHOICE_DESCRIPTION} Defaults to '${MODELS.DEFAULT}'.`),
|
|
7
|
+
sandbox: z.boolean().default(false).describe("Use Antigravity sandbox mode (--sandbox) to restrict terminal access"),
|
|
8
8
|
changeMode: z.boolean().default(false).describe("Enable structured change mode - formats prompts to prevent tool errors and returns structured edit suggestions that Claude can apply directly"),
|
|
9
9
|
chunkIndex: z.union([z.number(), z.string()]).optional().describe("Which chunk to return (1-based)"),
|
|
10
10
|
chunkCacheKey: z.string().optional().describe("Optional cache key for continuation"),
|
|
11
|
-
workingDirectory: z.string().optional().describe("Working directory to run
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
workingDirectory: z.string().optional().describe("Working directory to run agy from. Use drive root (e.g., 'C:/' or 'D:/') to access files on that drive."),
|
|
12
|
+
yolo: z.boolean().default(false).describe("Map to agy --dangerously-skip-permissions. Auto-approves all tool permission requests without prompting. Use with caution."),
|
|
13
|
+
approvalMode: z.enum(["default", "auto_edit", "yolo"]).optional().describe("Legacy Gemini CLI option. Only 'yolo' is supported and maps to --dangerously-skip-permissions; other values return an explicit error."),
|
|
14
|
+
outputFormat: z.enum(["text", "json", "stream-json"]).optional().describe("'text' (default) returns agy's plain answer. 'json' returns agy's JSON envelope rendered as the conversation ID line, the response (or structured_output when jsonSchema is set), and a usage line. 'stream-json' is unsupported."),
|
|
15
|
+
jsonSchema: z.string().optional().describe("Inline JSON Schema passed to agy --json-schema, which constrains the answer to structured_output. Requires outputFormat: 'json'."),
|
|
16
|
+
effort: z.enum(["low", "medium", "high"]).optional().describe("agy --effort, only for models that accept it; tiered Gemini names encode effort in the name ('Gemini 3.8 Flash (High)') and agy rejects --effort for them."),
|
|
17
|
+
includeDirectories: z.union([z.string(), z.array(z.string())]).optional().describe("Additional directories to include in the Antigravity workspace. Comma-separated string or array maps to repeated --add-dir flags."),
|
|
18
|
+
debug: z.boolean().default(false).describe("Unsupported legacy Gemini CLI option. Use agy logs for troubleshooting."),
|
|
19
|
+
printTimeout: z.string().optional().describe("agy --print-timeout duration, such as '5m', '90s', or '10m'. If omitted, agy uses its default."),
|
|
20
|
+
promptInteractive: z.string().optional().describe("Unsupported in MCP request/response mode because it requires an interactive TTY."),
|
|
21
|
+
extensions: z.union([z.string(), z.array(z.string())]).optional().describe("Unsupported legacy Gemini CLI option. Antigravity uses plugins instead of Gemini CLI extensions."),
|
|
22
|
+
resume: z.union([z.boolean(), z.string()]).optional().describe("Resume an agy conversation. true/latest/continue maps to --continue; any other string maps to --conversation <id>."),
|
|
23
|
+
conversationId: z.string().optional().describe("Resume this exact agy conversation (--conversation <id>); wins over `resume`. In outputFormat 'json' the call errors when agy silently starts a different conversation instead of resuming this one. IDs come from the [GEMINI_CONVERSATION_ID=...] line of a previous json call."),
|
|
22
24
|
});
|
|
23
25
|
export const askGeminiTool = {
|
|
24
26
|
name: "ask-gemini",
|
|
25
|
-
description: "Ask
|
|
27
|
+
description: "Ask Gemini through Antigravity CLI (`agy`) for plan review, implementation critique, code review, architecture feedback, debugging, and tradeoff analysis",
|
|
26
28
|
zodSchema: askGeminiArgsSchema,
|
|
27
29
|
prompt: {
|
|
28
|
-
description: "
|
|
30
|
+
description: "Ask Gemini through Antigravity CLI (`agy`). Supports file analysis (@syntax), sandbox, yolo permission mode, extra workspace directories, print timeouts, resume by conversation ID, JSON output with an optional response schema, and structured change mode for edit suggestions.",
|
|
29
31
|
},
|
|
30
32
|
category: 'gemini',
|
|
31
33
|
annotations: {
|
|
@@ -34,7 +36,7 @@ export const askGeminiTool = {
|
|
|
34
36
|
openWorldHint: true,
|
|
35
37
|
},
|
|
36
38
|
execute: async (args, onProgress) => {
|
|
37
|
-
const { prompt, model, sandbox, changeMode, chunkIndex, chunkCacheKey, workingDirectory, yolo, approvalMode, outputFormat, includeDirectories, debug, promptInteractive, extensions, resume } = args;
|
|
39
|
+
const { prompt, model, sandbox, changeMode, chunkIndex, chunkCacheKey, workingDirectory, yolo, approvalMode, outputFormat, jsonSchema, effort, includeDirectories, debug, printTimeout, promptInteractive, extensions, resume, conversationId } = args;
|
|
38
40
|
if (!prompt?.trim()) {
|
|
39
41
|
throw new Error(ERROR_MESSAGES.NO_PROMPT_PROVIDED);
|
|
40
42
|
}
|
|
@@ -42,20 +44,34 @@ export const askGeminiTool = {
|
|
|
42
44
|
return processChangeModeOutput('', // empty for cache...
|
|
43
45
|
chunkIndex, chunkCacheKey, prompt);
|
|
44
46
|
}
|
|
45
|
-
const
|
|
47
|
+
const cliOptions = {
|
|
46
48
|
model: model,
|
|
47
49
|
sandbox: !!sandbox,
|
|
48
50
|
changeMode: !!changeMode,
|
|
49
51
|
yolo: !!yolo,
|
|
50
52
|
approvalMode: approvalMode,
|
|
51
53
|
outputFormat: outputFormat,
|
|
54
|
+
jsonSchema: jsonSchema,
|
|
55
|
+
effort: effort,
|
|
52
56
|
includeDirectories: includeDirectories,
|
|
53
57
|
debug: !!debug,
|
|
58
|
+
printTimeout: printTimeout,
|
|
54
59
|
promptInteractive: promptInteractive,
|
|
55
60
|
extensions: extensions,
|
|
56
61
|
resume: resume,
|
|
62
|
+
conversationId: conversationId,
|
|
57
63
|
cwd: workingDirectory,
|
|
58
|
-
}
|
|
64
|
+
};
|
|
65
|
+
if (outputFormat === CLI.DEFAULTS.OUTPUT_FORMAT_JSON) {
|
|
66
|
+
const envelope = await executeAgyJson(prompt, cliOptions, onProgress);
|
|
67
|
+
const rendered = renderAgyJsonEnvelope(envelope, { hadSchema: Boolean(jsonSchema) });
|
|
68
|
+
return [
|
|
69
|
+
envelope.conversation_id ? formatConversationLine(envelope.conversation_id) : '',
|
|
70
|
+
`${STATUS_MESSAGES.GEMINI_RESPONSE}\n${rendered}`,
|
|
71
|
+
formatAgyUsageLine(envelope),
|
|
72
|
+
].filter(Boolean).join('\n\n');
|
|
73
|
+
}
|
|
74
|
+
const result = await executeAgyCLI(prompt, cliOptions, onProgress);
|
|
59
75
|
if (changeMode) {
|
|
60
76
|
return processChangeModeOutput(result, args.chunkIndex, undefined, prompt);
|
|
61
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-gemini.tool.js","sourceRoot":"","sources":["../../src/tools/ask-gemini.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"ask-gemini.tool.js","sourceRoot":"","sources":["../../src/tools/ask-gemini.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brainstorm.tool.d.ts","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"brainstorm.tool.d.ts","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiI5C,eAAO,MAAM,cAAc,EAAE,WAyD5B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { Logger } from '../utils/logger.js';
|
|
3
|
-
import {
|
|
3
|
+
import { executeAgyCLI } from '../utils/agyExecutor.js';
|
|
4
|
+
import { MODELS, MODEL_CHOICE_DESCRIPTION } from '../constants.js';
|
|
4
5
|
function buildBrainstormPrompt(config) {
|
|
5
6
|
const { prompt, methodology, domain, constraints, existingContext, ideaCount, includeAnalysis } = config;
|
|
6
7
|
// Select methodology framework
|
|
@@ -96,14 +97,14 @@ ${domain ? `Given the ${domain} domain, I'll apply the most effective combinatio
|
|
|
96
97
|
}
|
|
97
98
|
const brainstormArgsSchema = z.object({
|
|
98
99
|
prompt: z.string().min(1).describe("Primary brainstorming challenge or question to explore"),
|
|
99
|
-
model: z.string().optional().describe(
|
|
100
|
+
model: z.string().optional().describe(`${MODEL_CHOICE_DESCRIPTION} Defaults to '${MODELS.DEFAULT}'.`),
|
|
100
101
|
methodology: z.enum(['divergent', 'convergent', 'scamper', 'design-thinking', 'lateral', 'auto']).default('auto').describe("Brainstorming framework: 'divergent' (generate many ideas), 'convergent' (refine existing), 'scamper' (systematic triggers), 'design-thinking' (human-centered), 'lateral' (unexpected connections), 'auto' (AI selects best)"),
|
|
101
102
|
domain: z.string().optional().describe("Domain context for specialized brainstorming (e.g., 'software', 'business', 'creative', 'research', 'product', 'marketing')"),
|
|
102
103
|
constraints: z.string().optional().describe("Known limitations, requirements, or boundaries (budget, time, technical, legal, etc.)"),
|
|
103
104
|
existingContext: z.string().optional().describe("Background information, previous attempts, or current state to build upon"),
|
|
104
105
|
ideaCount: z.number().int().positive().default(12).describe("Target number of ideas to generate (default: 10-15)"),
|
|
105
106
|
includeAnalysis: z.boolean().default(true).describe("Include feasibility, impact, and implementation analysis for generated ideas"),
|
|
106
|
-
workingDirectory: z.string().optional().describe("Working directory to run
|
|
107
|
+
workingDirectory: z.string().optional().describe("Working directory to run agy from."),
|
|
107
108
|
});
|
|
108
109
|
export const brainstormTool = {
|
|
109
110
|
name: "brainstorm",
|
|
@@ -136,7 +137,7 @@ export const brainstormTool = {
|
|
|
136
137
|
// Report progress to user
|
|
137
138
|
onProgress?.(`Generating ${ideaCount} ideas via ${methodology} methodology...`);
|
|
138
139
|
// Execute with Gemini
|
|
139
|
-
return await
|
|
140
|
+
return await executeAgyCLI(enhancedPrompt, {
|
|
140
141
|
model: model,
|
|
141
142
|
sandbox: false,
|
|
142
143
|
changeMode: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brainstorm.tool.js","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"brainstorm.tool.js","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAqBA,cAAc,eAAe,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -5,6 +5,8 @@ import { pingTool, helpTool } from './simple-tools.js';
|
|
|
5
5
|
import { brainstormTool } from './brainstorm.tool.js';
|
|
6
6
|
import { fetchChunkTool } from './fetch-chunk.tool.js';
|
|
7
7
|
import { timeoutTestTool } from './timeout-test.tool.js';
|
|
8
|
-
|
|
8
|
+
import { livePassTool } from './live-pass.tool.js';
|
|
9
|
+
import { screenReviewTool } from './screen-review.tool.js';
|
|
10
|
+
toolRegistry.push(askGeminiTool, pingTool, helpTool, brainstormTool, fetchChunkTool, timeoutTestTool, livePassTool, screenReviewTool);
|
|
9
11
|
export * from './registry.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,YAAY,CAAC,IAAI,CACf,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,CACjB,CAAC;AAEF,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { UnifiedTool } from './registry.js';
|
|
3
|
+
import { type AgyJsonEnvelope } from '../utils/agyExecutor.js';
|
|
4
|
+
import { type WorkingTreeDiff } from '../utils/gitStatusGuard.js';
|
|
5
|
+
export declare const livePassTargetSchema: z.ZodObject<{
|
|
6
|
+
screen: z.ZodString;
|
|
7
|
+
state: z.ZodString;
|
|
8
|
+
viewport: z.ZodString;
|
|
9
|
+
expected: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
export declare const livePassArgsSchema: z.ZodObject<{
|
|
12
|
+
targets: z.ZodArray<z.ZodObject<{
|
|
13
|
+
screen: z.ZodString;
|
|
14
|
+
state: z.ZodString;
|
|
15
|
+
viewport: z.ZodString;
|
|
16
|
+
expected: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
brief: z.ZodString;
|
|
19
|
+
workingDirectory: z.ZodString;
|
|
20
|
+
artifactDir: z.ZodOptional<z.ZodString>;
|
|
21
|
+
driver: z.ZodEnum<{
|
|
22
|
+
playwright: "playwright";
|
|
23
|
+
maestro: "maestro";
|
|
24
|
+
}>;
|
|
25
|
+
model: z.ZodDefault<z.ZodString>;
|
|
26
|
+
printTimeout: z.ZodDefault<z.ZodString>;
|
|
27
|
+
yolo: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
+
publishCommand: z.ZodOptional<z.ZodString>;
|
|
29
|
+
conversationId: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export type LivePassTarget = z.infer<typeof livePassTargetSchema>;
|
|
32
|
+
export type LivePassArgs = z.infer<typeof livePassArgsSchema>;
|
|
33
|
+
export declare const livePassResultSchema: z.ZodObject<{
|
|
34
|
+
verdict: z.ZodEnum<{
|
|
35
|
+
PASS: "PASS";
|
|
36
|
+
FAIL: "FAIL";
|
|
37
|
+
BLOCKED: "BLOCKED";
|
|
38
|
+
}>;
|
|
39
|
+
summary: z.ZodString;
|
|
40
|
+
served_branch_check: z.ZodString;
|
|
41
|
+
frames: z.ZodArray<z.ZodObject<{
|
|
42
|
+
file: z.ZodString;
|
|
43
|
+
screen: z.ZodString;
|
|
44
|
+
state: z.ZodString;
|
|
45
|
+
expected: z.ZodString;
|
|
46
|
+
viewport: z.ZodString;
|
|
47
|
+
verdict: z.ZodEnum<{
|
|
48
|
+
PASS: "PASS";
|
|
49
|
+
FAIL: "FAIL";
|
|
50
|
+
}>;
|
|
51
|
+
observed: z.ZodString;
|
|
52
|
+
}, z.core.$strip>>;
|
|
53
|
+
findings: z.ZodArray<z.ZodObject<{
|
|
54
|
+
severity: z.ZodEnum<{
|
|
55
|
+
BLOCKER: "BLOCKER";
|
|
56
|
+
MAJOR: "MAJOR";
|
|
57
|
+
MINOR: "MINOR";
|
|
58
|
+
}>;
|
|
59
|
+
screen: z.ZodString;
|
|
60
|
+
description: z.ZodString;
|
|
61
|
+
evidence_file: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strip>>;
|
|
63
|
+
regressions: z.ZodArray<z.ZodObject<{
|
|
64
|
+
severity: z.ZodEnum<{
|
|
65
|
+
BLOCKER: "BLOCKER";
|
|
66
|
+
MAJOR: "MAJOR";
|
|
67
|
+
MINOR: "MINOR";
|
|
68
|
+
}>;
|
|
69
|
+
screen: z.ZodString;
|
|
70
|
+
description: z.ZodString;
|
|
71
|
+
evidence_file: z.ZodOptional<z.ZodString>;
|
|
72
|
+
}, z.core.$strip>>;
|
|
73
|
+
resolved: z.ZodArray<z.ZodObject<{
|
|
74
|
+
screen: z.ZodString;
|
|
75
|
+
description: z.ZodString;
|
|
76
|
+
evidence_file: z.ZodOptional<z.ZodString>;
|
|
77
|
+
}, z.core.$strip>>;
|
|
78
|
+
changes: z.ZodArray<z.ZodObject<{
|
|
79
|
+
screen: z.ZodString;
|
|
80
|
+
description: z.ZodString;
|
|
81
|
+
evidence_file: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, z.core.$strip>>;
|
|
83
|
+
skipped: z.ZodArray<z.ZodObject<{
|
|
84
|
+
target: z.ZodString;
|
|
85
|
+
reason: z.ZodString;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
}, z.core.$strip>;
|
|
88
|
+
export type LivePassResult = z.infer<typeof livePassResultSchema>;
|
|
89
|
+
export declare const LIVE_PASS_RESULT_JSON_SCHEMA: Record<string, unknown>;
|
|
90
|
+
/**
|
|
91
|
+
* The one filename a target's evidence may use. Derived in code from the whole
|
|
92
|
+
* screen/state/viewport triple so two targets can never share a file — letting
|
|
93
|
+
* Gemini name frames allowed one overwritten screenshot to satisfy several
|
|
94
|
+
* targets at once.
|
|
95
|
+
*/
|
|
96
|
+
export declare function frameFileName(target: {
|
|
97
|
+
screen: string;
|
|
98
|
+
state: string;
|
|
99
|
+
viewport: string;
|
|
100
|
+
}): string;
|
|
101
|
+
/**
|
|
102
|
+
* One filename per target, keyed by target. Slugifying can map two distinct
|
|
103
|
+
* targets (`a/b` and `a-b`) onto one name, so a collision is suffixed rather
|
|
104
|
+
* than left to collapse two targets into one file.
|
|
105
|
+
*/
|
|
106
|
+
export declare function prescribedFrameNames(targets: {
|
|
107
|
+
screen: string;
|
|
108
|
+
state: string;
|
|
109
|
+
viewport: string;
|
|
110
|
+
}[]): Map<string, string>;
|
|
111
|
+
export declare function buildLivePassPrompt(config: {
|
|
112
|
+
brief: string;
|
|
113
|
+
driver: 'playwright' | 'maestro';
|
|
114
|
+
targets: LivePassTarget[];
|
|
115
|
+
workingDirectory: string;
|
|
116
|
+
artifactDir: string;
|
|
117
|
+
resumed: boolean;
|
|
118
|
+
}): string;
|
|
119
|
+
export type FrameStatus = 'OK' | 'MISSING' | 'EMPTY' | 'STALE' | 'OUTSIDE' | 'DUPLICATE';
|
|
120
|
+
export interface FrameCheck {
|
|
121
|
+
file: string;
|
|
122
|
+
screen: string;
|
|
123
|
+
state: string;
|
|
124
|
+
status: FrameStatus;
|
|
125
|
+
/** The file exists but is not the filename prescribed for this target. Reported, never fatal. */
|
|
126
|
+
misnamed: boolean;
|
|
127
|
+
}
|
|
128
|
+
export interface FramesValidation {
|
|
129
|
+
checks: FrameCheck[];
|
|
130
|
+
okFiles: string[];
|
|
131
|
+
problems: string[];
|
|
132
|
+
/** Reported alongside the problems but never affects the verdict. */
|
|
133
|
+
notes: string[];
|
|
134
|
+
unreportedCaptures: string[];
|
|
135
|
+
}
|
|
136
|
+
/** Check every reported frame against the disk. Never throws. */
|
|
137
|
+
export declare function validateFrames(result: LivePassResult, artifactDir: string, runStartMs: number, targets?: LivePassTarget[]): FramesValidation;
|
|
138
|
+
export interface CoverageReport {
|
|
139
|
+
uncovered: LivePassTarget[];
|
|
140
|
+
skipped: {
|
|
141
|
+
target: LivePassTarget;
|
|
142
|
+
reason: string;
|
|
143
|
+
}[];
|
|
144
|
+
extraFrames: string[];
|
|
145
|
+
}
|
|
146
|
+
/** Match each requested target to a reported frame, case- and whitespace-insensitively. */
|
|
147
|
+
export declare function checkCoverage(targets: LivePassTarget[], result: LivePassResult): CoverageReport;
|
|
148
|
+
export interface VerdictDecision {
|
|
149
|
+
verdict: 'PASS' | 'FAIL' | 'BLOCKED';
|
|
150
|
+
reported: string;
|
|
151
|
+
reasons: string[];
|
|
152
|
+
}
|
|
153
|
+
/** Gemini's own verdict is advisory; this is the one the caller acts on. */
|
|
154
|
+
export declare function deriveVerdict(input: {
|
|
155
|
+
result: LivePassResult;
|
|
156
|
+
validation: FramesValidation;
|
|
157
|
+
coverage: CoverageReport;
|
|
158
|
+
deniedActions: string;
|
|
159
|
+
}): VerdictDecision;
|
|
160
|
+
export interface PublishResult {
|
|
161
|
+
ran: boolean;
|
|
162
|
+
command?: string;
|
|
163
|
+
stdout: string;
|
|
164
|
+
stderr: string;
|
|
165
|
+
exitCode: number | null;
|
|
166
|
+
skippedReason?: string;
|
|
167
|
+
}
|
|
168
|
+
export declare function runPublishCommand(command: string | undefined, okFiles: string[], cwd: string): Promise<PublishResult>;
|
|
169
|
+
export declare function formatLivePassReport(input: {
|
|
170
|
+
envelope: AgyJsonEnvelope;
|
|
171
|
+
result: LivePassResult;
|
|
172
|
+
decision: VerdictDecision;
|
|
173
|
+
validation: FramesValidation;
|
|
174
|
+
coverage: CoverageReport;
|
|
175
|
+
driver: string;
|
|
176
|
+
model: string;
|
|
177
|
+
artifactDir: string;
|
|
178
|
+
deniedActions: string;
|
|
179
|
+
workingTree: WorkingTreeDiff;
|
|
180
|
+
publish: PublishResult;
|
|
181
|
+
}): string;
|
|
182
|
+
export declare const livePassTool: UnifiedTool;
|
|
183
|
+
//# sourceMappingURL=live-pass.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-pass.tool.d.ts","sourceRoot":"","sources":["../../src/tools/live-pass.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAWxG,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iBAyB7B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AA2B9D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,4BAA4B,yBAAwC,CAAC;AAiBlF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEjG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAarB;AAwCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,MAAM,CA6CT;AAID,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAEzF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,iGAAiG;IACjG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qEAAqE;IACrE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAiED,iEAAiE;AACjE,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,cAAc,EAAO,GAC7B,gBAAgB,CAqClB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE;QAAE,MAAM,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAgC/F;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,eAAe,CA8BlB;AAID,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,EAAE,aAAa,CAAC;CACxB,GAAG,MAAM,CA+DT;AAqBD,eAAO,MAAM,YAAY,EAAE,WAmG1B,CAAC"}
|