@joeytheman/gemini-mcp-tool 2.2.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 +10 -7
- 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__/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.js +531 -7
- package/dist/__tests__/live-pass.test.js.map +1 -1
- package/dist/__tests__/screen-review.test.js +111 -2
- package/dist/__tests__/screen-review.test.js.map +1 -1
- 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 +1 -8
- package/dist/__tests__/server.test.js.map +1 -1
- package/dist/__tests__/simple-tools.test.js +8 -3
- package/dist/__tests__/simple-tools.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +29 -1
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/__tests__/utils/agyExecutor.test.js +176 -61
- package/dist/__tests__/utils/agyExecutor.test.js.map +1 -1
- package/dist/__tests__/utils/commandExecutor.test.js +155 -1
- package/dist/__tests__/utils/commandExecutor.test.js.map +1 -1
- 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/constants.d.ts +33 -10
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +42 -10
- package/dist/constants.js.map +1 -1
- package/dist/index.js +19 -94
- 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.map +1 -1
- package/dist/tools/ask-gemini.tool.js +6 -5
- 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 +2 -1
- package/dist/tools/brainstorm.tool.js.map +1 -1
- package/dist/tools/live-pass.tool.d.ts +24 -1
- package/dist/tools/live-pass.tool.d.ts.map +1 -1
- package/dist/tools/live-pass.tool.js +174 -52
- package/dist/tools/live-pass.tool.js.map +1 -1
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +2 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/screen-review.tool.d.ts +3 -0
- package/dist/tools/screen-review.tool.d.ts.map +1 -1
- package/dist/tools/screen-review.tool.js +42 -8
- package/dist/tools/screen-review.tool.js.map +1 -1
- package/dist/tools/simple-tools.d.ts.map +1 -1
- package/dist/tools/simple-tools.js +6 -2
- package/dist/tools/simple-tools.js.map +1 -1
- package/dist/utils/agyExecutor.d.ts +9 -1
- package/dist/utils/agyExecutor.d.ts.map +1 -1
- package/dist/utils/agyExecutor.js +54 -48
- package/dist/utils/agyExecutor.js.map +1 -1
- 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/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/commandExecutor.d.ts +7 -1
- package/dist/utils/commandExecutor.d.ts.map +1 -1
- package/dist/utils/commandExecutor.js +154 -22
- package/dist/utils/commandExecutor.js.map +1 -1
- 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/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/package.json +13 -11
package/dist/constants.js
CHANGED
|
@@ -7,7 +7,7 @@ export const ERROR_MESSAGES = {
|
|
|
7
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
8
|
UNSUPPORTED_AGY_OPTIONS: "Unsupported Antigravity CLI option(s)",
|
|
9
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)
|
|
10
|
+
AGY_NO_OUTPUT: "Antigravity CLI (`agy`) returned no output (it may have timed out resolving a file reference). Ensure any @referenced files exist under the working directory or an includeDirectories entry, narrow the prompt, or increase printTimeout.",
|
|
11
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
12
|
UNSUPPORTED_OUTPUT_FORMAT: "outputFormat must be 'text' or 'json'. Antigravity CLI has no stream-json mode.",
|
|
13
13
|
JSON_SCHEMA_REQUIRES_JSON: "jsonSchema requires outputFormat: 'json'.",
|
|
@@ -15,10 +15,16 @@ export const ERROR_MESSAGES = {
|
|
|
15
15
|
AGY_JSON_PARSE: "Could not parse the Antigravity CLI JSON envelope",
|
|
16
16
|
AGY_STATUS_ERROR: "Antigravity CLI returned status ERROR",
|
|
17
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
|
+
CHANGEMODE_DENIED_ACTIONS: "changeMode returned no OLD/NEW edits. Ask again for the change as OLD/NEW edits, without yolo. Denied",
|
|
19
|
+
AGY_EMPTY_ANSWER: "Antigravity CLI (`agy`) finished with an empty answer.",
|
|
20
|
+
INVALID_PRINT_TIMEOUT: "printTimeout must be a duration such as 90s, 15m, 2h30m or 2.5h, or 0 for no limit",
|
|
18
21
|
INVALID_CONVERSATION_ID: "conversationId must be a non-empty agy conversation ID.",
|
|
19
22
|
CONVERSATION_NOT_RESUMED: "agy did not resume conversation",
|
|
23
|
+
AGY_HUNG: "Antigravity CLI (`agy`) ran past its time limit and was stopped",
|
|
24
|
+
AGY_CANCELLED: "The request was cancelled, so agy was stopped.",
|
|
20
25
|
INVALID_WORKING_DIRECTORY: "workingDirectory must be an absolute path to an existing directory that is not a filesystem root",
|
|
21
26
|
LIVE_PASS_ARTIFACT_DIR: "artifactDir must be an absolute path strictly inside workingDirectory",
|
|
27
|
+
LIVE_PASS_WEB_VIEWPORT: "a playwright target's viewport must be WxH, such as 390x844",
|
|
22
28
|
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
29
|
// agy resolves an @reference up to the first space, so a path containing
|
|
24
30
|
// whitespace becomes a dangling reference that hangs until --print-timeout.
|
|
@@ -26,19 +32,28 @@ export const ERROR_MESSAGES = {
|
|
|
26
32
|
SCREEN_REVIEW_NO_IMAGES: "review mode requires at least one absolute image path",
|
|
27
33
|
SCREEN_REVIEW_IMAGE_MISSING: "image does not exist",
|
|
28
34
|
SCREEN_REVIEW_ROUTE_FILE: "plan mode requires routeFile: an absolute path to an existing file inside workingDirectory",
|
|
35
|
+
SCREEN_REVIEW_BASE_REF: "baseRef does not resolve to a merge base with HEAD in workingDirectory",
|
|
29
36
|
};
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
|
|
37
|
+
// How long an agy process may run before it is stopped. agy honours its own
|
|
38
|
+
// --print-timeout; this ceiling exists for runs that hang past it.
|
|
39
|
+
export const AGY_LIMITS = {
|
|
40
|
+
CEILING_MARGIN_MS: 2 * 60_000,
|
|
41
|
+
DEFAULT_CEILING_MS: 2 * 60 * 60_000,
|
|
42
|
+
KILL_GRACE_MS: 10_000,
|
|
43
|
+
KILL_CLOSE_WAIT_MS: 1_000,
|
|
44
|
+
};
|
|
45
|
+
export const PRINT_TIMEOUT_CEILING_NOTE = `The server stops agy ${AGY_LIMITS.CEILING_MARGIN_MS / 60_000} minutes after this limit, ` +
|
|
46
|
+
`or after ${AGY_LIMITS.DEFAULT_CEILING_MS / 3_600_000} hours when no limit is given.`;
|
|
47
|
+
// Undocumented Antigravity CLI internals. The step store feeds only the
|
|
48
|
+
// "Gemini steps" usage line, so a reader must degrade to null, never throw.
|
|
49
|
+
// Answers come only from agy's documented JSON output.
|
|
33
50
|
export const AGY_INTERNAL = {
|
|
34
51
|
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
52
|
TIMEOUT_SENTINEL: "Error: timed out waiting for response",
|
|
41
|
-
|
|
53
|
+
// agy 1.4.12 keeps each conversation's steps in SQLite; step_type 15 is a model step.
|
|
54
|
+
CONVERSATIONS_DIR: "conversations",
|
|
55
|
+
CONVERSATION_STORE_EXT: ".db",
|
|
56
|
+
MODEL_STEP_TYPE: 15,
|
|
42
57
|
};
|
|
43
58
|
// Status messages
|
|
44
59
|
export const STATUS_MESSAGES = {
|
|
@@ -67,7 +82,24 @@ export const LIVE_PASS = {
|
|
|
67
82
|
// Slack between a frame's mtime and our run-start clock.
|
|
68
83
|
FRESHNESS_TOLERANCE_MS: 2000,
|
|
69
84
|
CONVERSATION_LINE_PREFIX: "[GEMINI_CONVERSATION_ID=",
|
|
85
|
+
LAYOUT_FILE_SUFFIX: ".layout.json",
|
|
86
|
+
CAPTURE_FILE_SUFFIX: ".capture.js",
|
|
87
|
+
// React Native Web lays out again asynchronously after a viewport resize.
|
|
88
|
+
CAPTURE_SETTLE_MS: 1000,
|
|
89
|
+
// A virtualized list's tail spacer can report a scrollHeight far past its rows.
|
|
90
|
+
CAPTURE_MAX_HEIGHT: 4000,
|
|
91
|
+
CAPTURE_MAX_GROWS: 4,
|
|
92
|
+
LAYOUT_CHECK_ID: "layout-check/1",
|
|
93
|
+
LAYOUT_MAX_ENTRIES: 50,
|
|
94
|
+
LAYOUT_TEXT_CHARS: 80,
|
|
70
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* Embedded in each web target's capture file, which runs it in the page right
|
|
98
|
+
* after the screenshot. Its return value is the `.layout.json` file the layout
|
|
99
|
+
* validator parses, so the two change together. The readable source is
|
|
100
|
+
* src/layout-check.snippet.js; its caps and check id must equal LIVE_PASS's.
|
|
101
|
+
*/
|
|
102
|
+
export { LAYOUT_CHECK_SNIPPET } from './layoutCheckSnippet.generated.js';
|
|
71
103
|
// MCP Protocol Constants
|
|
72
104
|
export const PROTOCOL = {
|
|
73
105
|
// Message roles
|
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,aAAa,EAAE,iJAAiJ;IAChK,cAAc,EAAE,uBAAuB;IACvC,kBAAkB,EAAE,6IAA6I;IACjK,uBAAuB,EAAE,uCAAuC;IAChE,cAAc,EAAE,wEAAwE;IACxF,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,125 +4,51 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
5
|
import { Logger } from "./utils/logger.js";
|
|
6
6
|
import { PROTOCOL } from "./constants.js";
|
|
7
|
+
import { startProgressUpdates } from "./utils/progressUpdates.js";
|
|
7
8
|
import { getToolDefinitions, getPromptDefinitions, executeTool, toolExists, getPromptMessage } from "./tools/index.js";
|
|
8
9
|
const server = new Server({
|
|
9
10
|
name: "gemini-mcp",
|
|
10
|
-
version: "2.
|
|
11
|
+
version: "2.3.0",
|
|
11
12
|
}, {
|
|
12
13
|
capabilities: {
|
|
13
14
|
tools: {},
|
|
14
15
|
prompts: {},
|
|
15
16
|
},
|
|
16
17
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
async
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* @param progressToken The progress token provided by the client
|
|
30
|
-
* @param progress The current progress value
|
|
31
|
-
* @param total Optional total value
|
|
32
|
-
* @param message Optional status message
|
|
33
|
-
*/
|
|
34
|
-
async function sendProgressNotification(progressToken, progress, total, message) {
|
|
35
|
-
if (!progressToken)
|
|
36
|
-
return; // Only send if client requested progress
|
|
37
|
-
try {
|
|
38
|
-
const params = {
|
|
39
|
-
progressToken,
|
|
40
|
-
progress
|
|
41
|
-
};
|
|
42
|
-
if (total !== undefined)
|
|
43
|
-
params.total = total; // future cache progress
|
|
44
|
-
if (message)
|
|
45
|
-
params.message = message;
|
|
46
|
-
await server.notification({
|
|
47
|
-
method: PROTOCOL.NOTIFICATIONS.PROGRESS,
|
|
48
|
-
params
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
Logger.error("Failed to send progress notification:", error);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function startProgressUpdates(operationName, progressToken) {
|
|
56
|
-
isProcessing = true;
|
|
57
|
-
currentOperationName = operationName;
|
|
58
|
-
latestOutput = ""; // Reset latest output
|
|
59
|
-
const progressMessages = [
|
|
60
|
-
`🧠 ${operationName} - Gemini is analyzing your request...`,
|
|
61
|
-
`📊 ${operationName} - Processing files and generating insights...`,
|
|
62
|
-
`✨ ${operationName} - Creating structured response for your review...`,
|
|
63
|
-
`⏱️ ${operationName} - Large analysis in progress (this is normal for big requests)...`,
|
|
64
|
-
`🔍 ${operationName} - Still working... Gemini takes time for quality results...`,
|
|
65
|
-
];
|
|
66
|
-
let messageIndex = 0;
|
|
67
|
-
let progress = 0;
|
|
68
|
-
// Send immediate acknowledgment if progress requested
|
|
69
|
-
if (progressToken) {
|
|
70
|
-
sendProgressNotification(progressToken, 0, undefined, // No total - indeterminate progress
|
|
71
|
-
`🔍 Starting ${operationName}`);
|
|
72
|
-
}
|
|
73
|
-
// Keep client alive with periodic updates
|
|
74
|
-
const progressInterval = setInterval(async () => {
|
|
75
|
-
if (isProcessing && progressToken) {
|
|
76
|
-
// Simply increment progress value
|
|
77
|
-
progress += 1;
|
|
78
|
-
// Include latest output if available
|
|
79
|
-
const baseMessage = progressMessages[messageIndex % progressMessages.length];
|
|
80
|
-
const outputPreview = latestOutput.slice(-150).trim(); // Last 150 chars
|
|
81
|
-
const message = outputPreview
|
|
82
|
-
? `${baseMessage}\n📝 Output: ...${outputPreview}`
|
|
83
|
-
: baseMessage;
|
|
84
|
-
await sendProgressNotification(progressToken, progress, undefined, // No total - indeterminate progress
|
|
85
|
-
message);
|
|
86
|
-
messageIndex++;
|
|
18
|
+
// Request-scoped: the SDK drops it once the request is cancelled, and the
|
|
19
|
+
// client logs progress on a cancelled request's token as an error.
|
|
20
|
+
function progressSender(sendNotification) {
|
|
21
|
+
return async (progressToken, progress, total, message) => {
|
|
22
|
+
try {
|
|
23
|
+
await sendNotification({
|
|
24
|
+
method: PROTOCOL.NOTIFICATIONS.PROGRESS,
|
|
25
|
+
params: { progressToken, progress, total, message },
|
|
26
|
+
});
|
|
87
27
|
}
|
|
88
|
-
|
|
89
|
-
|
|
28
|
+
catch (error) {
|
|
29
|
+
Logger.error("Failed to send progress notification:", error);
|
|
90
30
|
}
|
|
91
|
-
}
|
|
92
|
-
return { interval: progressInterval, progressToken };
|
|
93
|
-
}
|
|
94
|
-
function stopProgressUpdates(progressData, success = true) {
|
|
95
|
-
const operationName = currentOperationName; // Store before clearing
|
|
96
|
-
isProcessing = false;
|
|
97
|
-
currentOperationName = "";
|
|
98
|
-
clearInterval(progressData.interval);
|
|
99
|
-
// Send final progress notification if client requested progress
|
|
100
|
-
if (progressData.progressToken) {
|
|
101
|
-
sendProgressNotification(progressData.progressToken, 100, 100, success ? `✅ ${operationName} completed successfully` : `❌ ${operationName} failed`);
|
|
102
|
-
}
|
|
31
|
+
};
|
|
103
32
|
}
|
|
104
33
|
// tools/list
|
|
105
34
|
server.setRequestHandler(ListToolsRequestSchema, async (request) => {
|
|
106
35
|
return { tools: getToolDefinitions() };
|
|
107
36
|
});
|
|
108
37
|
// tools/get
|
|
109
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
38
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
110
39
|
const toolName = request.params.name;
|
|
111
40
|
if (toolExists(toolName)) {
|
|
112
41
|
// Check if client requested progress updates
|
|
113
42
|
const progressToken = request.params._meta?.progressToken;
|
|
114
43
|
// Start progress updates if client requested them
|
|
115
|
-
const
|
|
44
|
+
const progress = startProgressUpdates(toolName, progressToken, progressSender(extra.sendNotification));
|
|
116
45
|
try {
|
|
117
46
|
// Get prompt and other parameters from arguments with proper typing
|
|
118
47
|
const args = request.params.arguments || {};
|
|
119
48
|
Logger.toolInvocation(toolName, request.params.arguments);
|
|
120
49
|
// Execute the tool using the unified registry with progress callback
|
|
121
|
-
const result = await executeTool(toolName, args, (newOutput) =>
|
|
122
|
-
|
|
123
|
-
});
|
|
124
|
-
// Stop progress updates
|
|
125
|
-
stopProgressUpdates(progressData, true);
|
|
50
|
+
const result = await executeTool(toolName, args, (newOutput) => progress.recordOutput(newOutput), extra.signal);
|
|
51
|
+
progress.finish('success');
|
|
126
52
|
return {
|
|
127
53
|
content: [
|
|
128
54
|
{
|
|
@@ -134,8 +60,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
134
60
|
};
|
|
135
61
|
}
|
|
136
62
|
catch (error) {
|
|
137
|
-
|
|
138
|
-
stopProgressUpdates(progressData, false);
|
|
63
|
+
progress.finish('failure');
|
|
139
64
|
Logger.error(`Error in tool '${toolName}':`, error);
|
|
140
65
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
141
66
|
return {
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const LAYOUT_CHECK_SNIPPET = "()=>{const h=innerWidth,b=innerHeight,H=50,O=4,k=\"#error-overlay,#error-toast\",d=[],S=[];let W=0;const u=t=>getComputedStyle(t),D=t=>({x:Math.round(t.left),y:Math.round(t.top),width:Math.round(t.width),height:Math.round(t.height)}),A=t=>(t.innerText||t.textContent||t.getAttribute(\"aria-label\")||t.getAttribute(\"placeholder\")||\"\").replace(/\\s+/g,\" \").trim().slice(0,80),N=t=>t.closest(\"[data-testid]\")?.getAttribute(\"data-testid\")??null,p=(t,e,o,l,i)=>{t===d&&W++,t.length<H&&t.push({kind:e,text:i??A(o),testID:o?N(o):null,rect:D(l)})},w=(t,e)=>e.width>0&&e.height>0&&u(t).visibility!==\"hidden\"&&!t.closest('[aria-hidden=\"true\"],[inert]'),P=t=>t.right>0&&t.left<h&&t.bottom>0&&t.top<b,I=t=>t===\"hidden\"||t===\"clip\",v=t=>t===\"auto\"||t===\"scroll\",L=t=>t.webkitLineClamp&&t.webkitLineClamp!==\"none\"||t.textOverflow===\"ellipsis\",F=t=>{let e=t;for(;e.parentElement&&[\"inline\",\"contents\"].includes(u(e).display);)e=e.parentElement;return e},y=t=>{for(let e=t;e;e=e.parentElement||e.getRootNode().host)if(e.matches(k))return e;return null},E=t=>[t,...[...t.children,...t.shadowRoot?.children??[]].flatMap(E)],X=t=>{const e=t.getBoundingClientRect();return w(t,e)?e.width*e.height:0},C=[...document.querySelectorAll(k)].flatMap(E).reduce((t,e)=>X(e)>(t?X(t):0)?e:t,null);C&&p(d,\"dev-overlay\",y(C),C.getBoundingClientRect(),E(C).map(A).find(Boolean)??\"\");const M=document.scrollingElement||document.documentElement;M.scrollWidth>h&&p(d,\"page-scroll-x\",null,{left:0,top:0,width:M.scrollWidth,height:b},\"scrollWidth \"+M.scrollWidth+\" > innerWidth \"+h);const R=document.createRange();for(const t of document.body.querySelectorAll(\"*\")){if(t.isContentEditable||y(t))continue;const e=[...t.childNodes].filter(n=>n.nodeType===3&&n.textContent.trim());if(!e.length)continue;const o=F(t),l=o.getBoundingClientRect();if(!w(t,l)||!P(l))continue;let i=1/0,s=1/0,f=-1/0,m=-1/0;for(const n of e)for(const a of n.textContent.matchAll(/\\S+/g)){R.setStart(n,a.index),R.setEnd(n,a.index+a[0].length);const c=R.getBoundingClientRect();c.width&&(i=Math.min(i,c.left),s=Math.min(s,c.top),f=Math.max(f,c.right),m=Math.max(m,c.bottom))}if(i===1/0)continue;const r=u(o);for(let n=o,a=0;n&&n!==document.body&&a<O;n=n.parentElement){const c=u(n);if([\"inline\",\"contents\"].includes(c.display))continue;a++;const x=n.getBoundingClientRect(),g=x.left+n.clientLeft,B=x.top+n.clientTop,V=g+n.clientWidth,Y=B+n.clientHeight,q=i<g-1||f>V+1,J=s<B-1||m>Y+1;if(I(c.overflowX)&&q||I(c.overflowY)&&J){i<V&&f>g&&s<Y&&m>B&&p(n===o&&L(r)?S:d,n===o&&L(r)?\"text-clamped\":\"text-clipped\",t,t.getBoundingClientRect());break}if(v(c.overflowX)||v(c.overflowY))break;if(q){p(d,\"text-spill\",t,t.getBoundingClientRect());break}if(c.position===\"absolute\"||c.position===\"fixed\")break}}const T=[...document.querySelectorAll('[aria-modal=\"true\"]')].find(t=>w(t,t.getBoundingClientRect())),_=(t,e)=>{let o=Math.max(e.left,0),l=Math.max(e.top,0),i=Math.min(e.right,h),s=Math.min(e.bottom,b),f=!1;for(let m=t,r=t.parentElement;r&&r!==document.documentElement;m=r,r=r.parentElement){const n=u(m).position,a=u(r);if(n===\"fixed\")break;if(n===\"absolute\"&&(f=!0),f&&a.position===\"static\"||(f=!1,a.overflowX===\"visible\"&&a.overflowY===\"visible\"))continue;const c=r.getBoundingClientRect(),x=c.left+r.clientLeft,g=c.top+r.clientTop;o=Math.max(o,x),l=Math.max(l,g),i=Math.min(i,x+r.clientWidth),s=Math.min(s,g+r.clientHeight)}return i>o&&s>l?[(o+i)/2,(l+s)/2]:null},j=t=>{for(let e=t.parentElement;e;e=e.parentElement)if(v(u(e).overflowX)&&e.scrollWidth>e.clientWidth)return e;return null},z=(t,e)=>{if(t.contains(e))return!0;const o=t.getBoundingClientRect(),l=e.getBoundingClientRect();return!!t.parentElement?.contains(e)&&l.top>=o.top-1&&l.bottom<=o.bottom+1},G='a[href],button,input:not([type=hidden]),select,textarea,summary,[role=button],[role=link],[role=checkbox],[role=switch],[role=radio],[role=tab],[role=menuitem],[role=option],[role=combobox],[role=slider],[tabindex]:not([tabindex=\"-1\"])';for(const t of document.querySelectorAll(G)){const e=t.getBoundingClientRect();if(!w(t,e)||y(t)||u(t).pointerEvents===\"none\"||e.bottom<=0||e.top>=b)continue;const o=j(t);if((e.left<-.5||e.right>h+.5)&&e.right>0&&e.left<h&&!o&&p(d,\"control-offscreen\",t,e),T&&!T.contains(t))continue;const l=_(t,e);if(!l)continue;const i=document.elementsFromPoint(l[0],l[1]).find(s=>!y(s));i&&!t.contains(i)&&!i.contains(t)&&!(o&&z(o,i))&&p(d,\"control-covered\",t,e)}return{check:\"layout-check/1\",viewport:{width:h,height:b},found:W,entries:d,clamped:S}}";
|
|
2
|
+
//# sourceMappingURL=layoutCheckSnippet.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutCheckSnippet.generated.d.ts","sourceRoot":"","sources":["../src/layoutCheckSnippet.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,oBAAoB,08IAA08I,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by scripts/minify-layout-snippet.mjs from src/layout-check.snippet.js. Do not edit.
|
|
2
|
+
export const LAYOUT_CHECK_SNIPPET = "()=>{const h=innerWidth,b=innerHeight,H=50,O=4,k=\"#error-overlay,#error-toast\",d=[],S=[];let W=0;const u=t=>getComputedStyle(t),D=t=>({x:Math.round(t.left),y:Math.round(t.top),width:Math.round(t.width),height:Math.round(t.height)}),A=t=>(t.innerText||t.textContent||t.getAttribute(\"aria-label\")||t.getAttribute(\"placeholder\")||\"\").replace(/\\s+/g,\" \").trim().slice(0,80),N=t=>t.closest(\"[data-testid]\")?.getAttribute(\"data-testid\")??null,p=(t,e,o,l,i)=>{t===d&&W++,t.length<H&&t.push({kind:e,text:i??A(o),testID:o?N(o):null,rect:D(l)})},w=(t,e)=>e.width>0&&e.height>0&&u(t).visibility!==\"hidden\"&&!t.closest('[aria-hidden=\"true\"],[inert]'),P=t=>t.right>0&&t.left<h&&t.bottom>0&&t.top<b,I=t=>t===\"hidden\"||t===\"clip\",v=t=>t===\"auto\"||t===\"scroll\",L=t=>t.webkitLineClamp&&t.webkitLineClamp!==\"none\"||t.textOverflow===\"ellipsis\",F=t=>{let e=t;for(;e.parentElement&&[\"inline\",\"contents\"].includes(u(e).display);)e=e.parentElement;return e},y=t=>{for(let e=t;e;e=e.parentElement||e.getRootNode().host)if(e.matches(k))return e;return null},E=t=>[t,...[...t.children,...t.shadowRoot?.children??[]].flatMap(E)],X=t=>{const e=t.getBoundingClientRect();return w(t,e)?e.width*e.height:0},C=[...document.querySelectorAll(k)].flatMap(E).reduce((t,e)=>X(e)>(t?X(t):0)?e:t,null);C&&p(d,\"dev-overlay\",y(C),C.getBoundingClientRect(),E(C).map(A).find(Boolean)??\"\");const M=document.scrollingElement||document.documentElement;M.scrollWidth>h&&p(d,\"page-scroll-x\",null,{left:0,top:0,width:M.scrollWidth,height:b},\"scrollWidth \"+M.scrollWidth+\" > innerWidth \"+h);const R=document.createRange();for(const t of document.body.querySelectorAll(\"*\")){if(t.isContentEditable||y(t))continue;const e=[...t.childNodes].filter(n=>n.nodeType===3&&n.textContent.trim());if(!e.length)continue;const o=F(t),l=o.getBoundingClientRect();if(!w(t,l)||!P(l))continue;let i=1/0,s=1/0,f=-1/0,m=-1/0;for(const n of e)for(const a of n.textContent.matchAll(/\\S+/g)){R.setStart(n,a.index),R.setEnd(n,a.index+a[0].length);const c=R.getBoundingClientRect();c.width&&(i=Math.min(i,c.left),s=Math.min(s,c.top),f=Math.max(f,c.right),m=Math.max(m,c.bottom))}if(i===1/0)continue;const r=u(o);for(let n=o,a=0;n&&n!==document.body&&a<O;n=n.parentElement){const c=u(n);if([\"inline\",\"contents\"].includes(c.display))continue;a++;const x=n.getBoundingClientRect(),g=x.left+n.clientLeft,B=x.top+n.clientTop,V=g+n.clientWidth,Y=B+n.clientHeight,q=i<g-1||f>V+1,J=s<B-1||m>Y+1;if(I(c.overflowX)&&q||I(c.overflowY)&&J){i<V&&f>g&&s<Y&&m>B&&p(n===o&&L(r)?S:d,n===o&&L(r)?\"text-clamped\":\"text-clipped\",t,t.getBoundingClientRect());break}if(v(c.overflowX)||v(c.overflowY))break;if(q){p(d,\"text-spill\",t,t.getBoundingClientRect());break}if(c.position===\"absolute\"||c.position===\"fixed\")break}}const T=[...document.querySelectorAll('[aria-modal=\"true\"]')].find(t=>w(t,t.getBoundingClientRect())),_=(t,e)=>{let o=Math.max(e.left,0),l=Math.max(e.top,0),i=Math.min(e.right,h),s=Math.min(e.bottom,b),f=!1;for(let m=t,r=t.parentElement;r&&r!==document.documentElement;m=r,r=r.parentElement){const n=u(m).position,a=u(r);if(n===\"fixed\")break;if(n===\"absolute\"&&(f=!0),f&&a.position===\"static\"||(f=!1,a.overflowX===\"visible\"&&a.overflowY===\"visible\"))continue;const c=r.getBoundingClientRect(),x=c.left+r.clientLeft,g=c.top+r.clientTop;o=Math.max(o,x),l=Math.max(l,g),i=Math.min(i,x+r.clientWidth),s=Math.min(s,g+r.clientHeight)}return i>o&&s>l?[(o+i)/2,(l+s)/2]:null},j=t=>{for(let e=t.parentElement;e;e=e.parentElement)if(v(u(e).overflowX)&&e.scrollWidth>e.clientWidth)return e;return null},z=(t,e)=>{if(t.contains(e))return!0;const o=t.getBoundingClientRect(),l=e.getBoundingClientRect();return!!t.parentElement?.contains(e)&&l.top>=o.top-1&&l.bottom<=o.bottom+1},G='a[href],button,input:not([type=hidden]),select,textarea,summary,[role=button],[role=link],[role=checkbox],[role=switch],[role=radio],[role=tab],[role=menuitem],[role=option],[role=combobox],[role=slider],[tabindex]:not([tabindex=\"-1\"])';for(const t of document.querySelectorAll(G)){const e=t.getBoundingClientRect();if(!w(t,e)||y(t)||u(t).pointerEvents===\"none\"||e.bottom<=0||e.top>=b)continue;const o=j(t);if((e.left<-.5||e.right>h+.5)&&e.right>0&&e.left<h&&!o&&p(d,\"control-offscreen\",t,e),T&&!T.contains(t))continue;const l=_(t,e);if(!l)continue;const i=document.elementsFromPoint(l[0],l[1]).find(s=>!y(s));i&&!t.contains(i)&&!i.contains(t)&&!(o&&z(o,i))&&p(d,\"control-covered\",t,e)}return{check:\"layout-check/1\",viewport:{width:h,height:b},found:W,entries:d,clamped:S}}";
|
|
3
|
+
//# sourceMappingURL=layoutCheckSnippet.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutCheckSnippet.generated.js","sourceRoot":"","sources":["../src/layoutCheckSnippet.generated.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,MAAM,CAAC,MAAM,oBAAoB,GAAG,u8IAAu8I,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAoB5C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsB9B,CAAC;AAEH,eAAO,MAAM,aAAa,EAAE,WAuE3B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
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';
|
|
2
|
+
import { executeAgyCLI, executeAgyJson, processChangeModeOutput, renderAgyJsonEnvelope, formatAgyUsageLine, formatConversationLine, printTimeoutSchema, } from '../utils/agyExecutor.js';
|
|
3
|
+
import { CLI, ERROR_MESSAGES, MODELS, MODEL_CHOICE_DESCRIPTION, PRINT_TIMEOUT_CEILING_NOTE, STATUS_MESSAGES } from '../constants.js';
|
|
4
4
|
export const askGeminiArgsSchema = z.object({
|
|
5
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
6
|
model: z.string().optional().describe(`${MODEL_CHOICE_DESCRIPTION} Defaults to '${MODELS.DEFAULT}'.`),
|
|
@@ -16,11 +16,11 @@ export const askGeminiArgsSchema = z.object({
|
|
|
16
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
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
18
|
debug: z.boolean().default(false).describe("Unsupported legacy Gemini CLI option. Use agy logs for troubleshooting."),
|
|
19
|
-
printTimeout:
|
|
19
|
+
printTimeout: printTimeoutSchema.optional().describe(`agy --print-timeout duration, such as '5m', '90s', or '10m'. If omitted, agy uses its default. ${PRINT_TIMEOUT_CEILING_NOTE}`),
|
|
20
20
|
promptInteractive: z.string().optional().describe("Unsupported in MCP request/response mode because it requires an interactive TTY."),
|
|
21
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
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`.
|
|
23
|
+
conversationId: z.string().optional().describe("Resume this exact agy conversation (--conversation <id>); wins over `resume`. 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."),
|
|
24
24
|
});
|
|
25
25
|
export const askGeminiTool = {
|
|
26
26
|
name: "ask-gemini",
|
|
@@ -35,7 +35,7 @@ export const askGeminiTool = {
|
|
|
35
35
|
readOnlyHint: true,
|
|
36
36
|
openWorldHint: true,
|
|
37
37
|
},
|
|
38
|
-
execute: async (args, onProgress) => {
|
|
38
|
+
execute: async (args, onProgress, signal) => {
|
|
39
39
|
const { prompt, model, sandbox, changeMode, chunkIndex, chunkCacheKey, workingDirectory, yolo, approvalMode, outputFormat, jsonSchema, effort, includeDirectories, debug, printTimeout, promptInteractive, extensions, resume, conversationId } = args;
|
|
40
40
|
if (!prompt?.trim()) {
|
|
41
41
|
throw new Error(ERROR_MESSAGES.NO_PROMPT_PROVIDED);
|
|
@@ -61,6 +61,7 @@ export const askGeminiTool = {
|
|
|
61
61
|
resume: resume,
|
|
62
62
|
conversationId: conversationId,
|
|
63
63
|
cwd: workingDirectory,
|
|
64
|
+
signal,
|
|
64
65
|
};
|
|
65
66
|
if (outputFormat === CLI.DEFAULTS.OUTPUT_FORMAT_JSON) {
|
|
66
67
|
const envelope = await executeAgyJson(prompt, cliOptions, onProgress);
|
|
@@ -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,EACL,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,
|
|
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;AAiI5C,eAAO,MAAM,cAAc,EAAE,
|
|
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,WA0D5B,CAAC"}
|
|
@@ -119,7 +119,7 @@ export const brainstormTool = {
|
|
|
119
119
|
readOnlyHint: true,
|
|
120
120
|
openWorldHint: true,
|
|
121
121
|
},
|
|
122
|
-
execute: async (args, onProgress) => {
|
|
122
|
+
execute: async (args, onProgress, signal) => {
|
|
123
123
|
const { prompt, model, methodology = 'auto', domain, constraints, existingContext, ideaCount = 12, includeAnalysis = true, workingDirectory } = args;
|
|
124
124
|
if (!prompt?.trim()) {
|
|
125
125
|
throw new Error("You must provide a valid brainstorming challenge or question to explore");
|
|
@@ -142,6 +142,7 @@ export const brainstormTool = {
|
|
|
142
142
|
sandbox: false,
|
|
143
143
|
changeMode: false,
|
|
144
144
|
cwd: workingDirectory,
|
|
145
|
+
signal,
|
|
145
146
|
}, onProgress);
|
|
146
147
|
}
|
|
147
148
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brainstorm.tool.js","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"brainstorm.tool.js","sourceRoot":"","sources":["../../src/tools/brainstorm.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { z } from 'zod';
|
|
|
2
2
|
import { UnifiedTool } from './registry.js';
|
|
3
3
|
import { type AgyJsonEnvelope } from '../utils/agyExecutor.js';
|
|
4
4
|
import { type WorkingTreeDiff } from '../utils/gitStatusGuard.js';
|
|
5
|
+
import { type ArtifactFileStatus } from '../utils/artifactFile.js';
|
|
6
|
+
import { type Checkout } from '../utils/gitCheckout.js';
|
|
7
|
+
import { type LayoutCheck } from '../utils/layoutCheck.js';
|
|
5
8
|
export declare const livePassTargetSchema: z.ZodObject<{
|
|
6
9
|
screen: z.ZodString;
|
|
7
10
|
state: z.ZodString;
|
|
@@ -49,6 +52,7 @@ export declare const livePassResultSchema: z.ZodObject<{
|
|
|
49
52
|
FAIL: "FAIL";
|
|
50
53
|
}>;
|
|
51
54
|
observed: z.ZodString;
|
|
55
|
+
link_source: z.ZodOptional<z.ZodString>;
|
|
52
56
|
}, z.core.$strip>>;
|
|
53
57
|
findings: z.ZodArray<z.ZodObject<{
|
|
54
58
|
severity: z.ZodEnum<{
|
|
@@ -108,15 +112,24 @@ export declare function prescribedFrameNames(targets: {
|
|
|
108
112
|
state: string;
|
|
109
113
|
viewport: string;
|
|
110
114
|
}[]): Map<string, string>;
|
|
115
|
+
export interface TargetFiles {
|
|
116
|
+
frameName: string;
|
|
117
|
+
frame: string;
|
|
118
|
+
capture: string;
|
|
119
|
+
layout: string;
|
|
120
|
+
}
|
|
121
|
+
export declare function prescribedTargetFiles(targets: LivePassTarget[], artifactDir: string): Map<string, TargetFiles>;
|
|
122
|
+
export declare function writeCaptureScripts(targets: LivePassTarget[], artifactDir: string): void;
|
|
111
123
|
export declare function buildLivePassPrompt(config: {
|
|
112
124
|
brief: string;
|
|
113
125
|
driver: 'playwright' | 'maestro';
|
|
114
126
|
targets: LivePassTarget[];
|
|
115
127
|
workingDirectory: string;
|
|
116
128
|
artifactDir: string;
|
|
129
|
+
checkout: Checkout | null;
|
|
117
130
|
resumed: boolean;
|
|
118
131
|
}): string;
|
|
119
|
-
export type FrameStatus =
|
|
132
|
+
export type FrameStatus = ArtifactFileStatus | 'DUPLICATE' | 'NOT_IMAGE';
|
|
120
133
|
export interface FrameCheck {
|
|
121
134
|
file: string;
|
|
122
135
|
screen: string;
|
|
@@ -166,6 +179,13 @@ export interface PublishResult {
|
|
|
166
179
|
skippedReason?: string;
|
|
167
180
|
}
|
|
168
181
|
export declare function runPublishCommand(command: string | undefined, okFiles: string[], cwd: string): Promise<PublishResult>;
|
|
182
|
+
export interface TargetLayoutCheck {
|
|
183
|
+
target: LivePassTarget;
|
|
184
|
+
check: LayoutCheck;
|
|
185
|
+
}
|
|
186
|
+
/** Each web target's layout file, read from its prescribed path. Never throws. */
|
|
187
|
+
export declare function readLayoutChecks(targets: LivePassTarget[], artifactDir: string, runStartMs: number): TargetLayoutCheck[];
|
|
188
|
+
export declare function formatLayoutSection(checks: TargetLayoutCheck[]): string;
|
|
169
189
|
export declare function formatLivePassReport(input: {
|
|
170
190
|
envelope: AgyJsonEnvelope;
|
|
171
191
|
result: LivePassResult;
|
|
@@ -178,6 +198,9 @@ export declare function formatLivePassReport(input: {
|
|
|
178
198
|
deniedActions: string;
|
|
179
199
|
workingTree: WorkingTreeDiff;
|
|
180
200
|
publish: PublishResult;
|
|
201
|
+
modelSteps: number | null;
|
|
202
|
+
/** Web passes only. Reported for the caller to judge; never an input to the verdict. */
|
|
203
|
+
layoutChecks?: TargetLayoutCheck[];
|
|
181
204
|
}): string;
|
|
182
205
|
export declare const livePassTool: UnifiedTool;
|
|
183
206
|
//# sourceMappingURL=live-pass.tool.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"live-pass.tool.d.ts","sourceRoot":"","sources":["../../src/tools/live-pass.tool.ts"],"names":[],"mappings":"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"}
|