craftdriver 1.7.0 → 1.9.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/CHANGELOG.md +25 -12
- package/README.md +16 -6
- package/dist/cli/agentSession.d.ts +62 -0
- package/dist/cli/agentSession.d.ts.map +1 -0
- package/dist/cli/agentSession.js +100 -0
- package/dist/cli/agentSession.js.map +1 -0
- package/dist/cli/artifactPaths.d.ts +42 -0
- package/dist/cli/artifactPaths.d.ts.map +1 -0
- package/dist/cli/artifactPaths.js +144 -0
- package/dist/cli/artifactPaths.js.map +1 -0
- package/dist/cli/bounds.d.ts +88 -0
- package/dist/cli/bounds.d.ts.map +1 -0
- package/dist/cli/bounds.js +128 -0
- package/dist/cli/bounds.js.map +1 -0
- package/dist/cli/client.d.ts +3 -0
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +24 -8
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/daemon.d.ts +3 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +152 -39
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/defaults.d.ts +23 -3
- package/dist/cli/defaults.d.ts.map +1 -1
- package/dist/cli/defaults.js +50 -5
- package/dist/cli/defaults.js.map +1 -1
- package/dist/cli/dispatcher.d.ts +54 -11
- package/dist/cli/dispatcher.d.ts.map +1 -1
- package/dist/cli/dispatcher.js +851 -54
- package/dist/cli/dispatcher.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +305 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +14 -14
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +328 -180
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/journal.d.ts +153 -0
- package/dist/cli/journal.d.ts.map +1 -0
- package/dist/cli/journal.js +252 -0
- package/dist/cli/journal.js.map +1 -0
- package/dist/cli/lineReader.d.ts +33 -0
- package/dist/cli/lineReader.d.ts.map +1 -0
- package/dist/cli/lineReader.js +66 -0
- package/dist/cli/lineReader.js.map +1 -0
- package/dist/cli/locatorCandidates.d.ts +44 -0
- package/dist/cli/locatorCandidates.d.ts.map +1 -0
- package/dist/cli/locatorCandidates.js +190 -0
- package/dist/cli/locatorCandidates.js.map +1 -0
- package/dist/cli/mcp/artifacts.d.ts +39 -1
- package/dist/cli/mcp/artifacts.d.ts.map +1 -1
- package/dist/cli/mcp/artifacts.js +104 -9
- package/dist/cli/mcp/artifacts.js.map +1 -1
- package/dist/cli/mcp/bounds.d.ts +65 -0
- package/dist/cli/mcp/bounds.d.ts.map +1 -0
- package/dist/cli/mcp/bounds.js +124 -0
- package/dist/cli/mcp/bounds.js.map +1 -0
- package/dist/cli/mcp/params.d.ts +38 -0
- package/dist/cli/mcp/params.d.ts.map +1 -0
- package/dist/cli/mcp/params.js +174 -0
- package/dist/cli/mcp/params.js.map +1 -0
- package/dist/cli/mcp/server.d.ts +94 -16
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +304 -150
- package/dist/cli/mcp/server.js.map +1 -1
- package/dist/cli/mcp/tools.d.ts +62 -17
- package/dist/cli/mcp/tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools.js +373 -158
- package/dist/cli/mcp/tools.js.map +1 -1
- package/dist/cli/pageSemantics.d.ts +6 -0
- package/dist/cli/pageSemantics.d.ts.map +1 -0
- package/dist/cli/pageSemantics.js +6 -0
- package/dist/cli/pageSemantics.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +6 -18
- package/dist/cli/parseArgs.d.ts.map +1 -1
- package/dist/cli/parseArgs.js +689 -45
- package/dist/cli/parseArgs.js.map +1 -1
- package/dist/cli/protocol.d.ts +8 -0
- package/dist/cli/protocol.d.ts.map +1 -1
- package/dist/cli/selector.d.ts +3 -3
- package/dist/cli/selector.d.ts.map +1 -1
- package/dist/cli/selector.js +6 -9
- package/dist/cli/selector.js.map +1 -1
- package/dist/cli/sessionRegistry.d.ts +42 -0
- package/dist/cli/sessionRegistry.d.ts.map +1 -0
- package/dist/cli/sessionRegistry.js +99 -0
- package/dist/cli/sessionRegistry.js.map +1 -0
- package/dist/cli/snapshot.d.ts +100 -19
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +295 -108
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/stateStore.d.ts +50 -0
- package/dist/cli/stateStore.d.ts.map +1 -0
- package/dist/cli/stateStore.js +122 -0
- package/dist/cli/stateStore.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/a11y.d.ts +6 -2
- package/dist/lib/a11y.d.ts.map +1 -1
- package/dist/lib/a11y.js +3 -1
- package/dist/lib/a11y.js.map +1 -1
- package/dist/lib/bidi/evaluate.d.ts +11 -0
- package/dist/lib/bidi/evaluate.d.ts.map +1 -0
- package/dist/lib/bidi/evaluate.js +25 -0
- package/dist/lib/bidi/evaluate.js.map +1 -0
- package/dist/lib/bidi/index.d.ts +1 -1
- package/dist/lib/bidi/index.d.ts.map +1 -1
- package/dist/lib/bidi/index.js +2 -2
- package/dist/lib/bidi/index.js.map +1 -1
- package/dist/lib/bidi/logs.d.ts +3 -0
- package/dist/lib/bidi/logs.d.ts.map +1 -1
- package/dist/lib/bidi/logs.js +7 -0
- package/dist/lib/bidi/logs.js.map +1 -1
- package/dist/lib/bidi/network.d.ts +14 -1
- package/dist/lib/bidi/network.d.ts.map +1 -1
- package/dist/lib/bidi/network.js +45 -7
- package/dist/lib/bidi/network.js.map +1 -1
- package/dist/lib/bidi/storage.d.ts +30 -6
- package/dist/lib/bidi/storage.d.ts.map +1 -1
- package/dist/lib/bidi/storage.js +190 -45
- package/dist/lib/bidi/storage.js.map +1 -1
- package/dist/lib/bidi/types.d.ts +9 -2
- package/dist/lib/bidi/types.d.ts.map +1 -1
- package/dist/lib/browser.d.ts +7 -4
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/browser.js +186 -65
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/browserContext.d.ts +58 -24
- package/dist/lib/browserContext.d.ts.map +1 -1
- package/dist/lib/browserContext.js +300 -99
- package/dist/lib/browserContext.js.map +1 -1
- package/dist/lib/by.d.ts +68 -30
- package/dist/lib/by.d.ts.map +1 -1
- package/dist/lib/by.js +54 -23
- package/dist/lib/by.js.map +1 -1
- package/dist/lib/clearFastPath.d.ts.map +1 -1
- package/dist/lib/clearFastPath.js +2 -0
- package/dist/lib/clearFastPath.js.map +1 -1
- package/dist/lib/clickFastPath.d.ts.map +1 -1
- package/dist/lib/clickFastPath.js +2 -0
- package/dist/lib/clickFastPath.js.map +1 -1
- package/dist/lib/driver.d.ts +26 -0
- package/dist/lib/driver.d.ts.map +1 -1
- package/dist/lib/driver.js +123 -4
- package/dist/lib/driver.js.map +1 -1
- package/dist/lib/elementHandle.d.ts +13 -10
- package/dist/lib/elementHandle.d.ts.map +1 -1
- package/dist/lib/elementHandle.js +119 -50
- package/dist/lib/elementHandle.js.map +1 -1
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +12 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/expect.d.ts +10 -0
- package/dist/lib/expect.d.ts.map +1 -1
- package/dist/lib/expect.js +76 -49
- package/dist/lib/expect.js.map +1 -1
- package/dist/lib/fillFastPath.d.ts.map +1 -1
- package/dist/lib/fillFastPath.js +2 -0
- package/dist/lib/fillFastPath.js.map +1 -1
- package/dist/lib/frame.d.ts.map +1 -1
- package/dist/lib/frame.js +29 -17
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/initScript.d.ts +9 -0
- package/dist/lib/initScript.d.ts.map +1 -0
- package/dist/lib/initScript.js +14 -0
- package/dist/lib/initScript.js.map +1 -0
- package/dist/lib/locator.d.ts +21 -54
- package/dist/lib/locator.d.ts.map +1 -1
- package/dist/lib/locator.js +165 -208
- package/dist/lib/locator.js.map +1 -1
- package/dist/lib/page.d.ts +22 -0
- package/dist/lib/page.d.ts.map +1 -1
- package/dist/lib/page.js +71 -13
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/pageSemantics.d.ts +42 -0
- package/dist/lib/pageSemantics.d.ts.map +1 -0
- package/dist/lib/pageSemantics.js +216 -0
- package/dist/lib/pageSemantics.js.map +1 -0
- package/dist/lib/query.d.ts +68 -0
- package/dist/lib/query.d.ts.map +1 -0
- package/dist/lib/query.js +590 -0
- package/dist/lib/query.js.map +1 -0
- package/dist/lib/secureFile.d.ts +8 -0
- package/dist/lib/secureFile.d.ts.map +1 -0
- package/dist/lib/secureFile.js +67 -0
- package/dist/lib/secureFile.js.map +1 -0
- package/dist/lib/sessionStateValidation.d.ts +35 -0
- package/dist/lib/sessionStateValidation.d.ts.map +1 -0
- package/dist/lib/sessionStateValidation.js +223 -0
- package/dist/lib/sessionStateValidation.js.map +1 -0
- package/dist/lib/shadowRoot.d.ts +21 -0
- package/dist/lib/shadowRoot.d.ts.map +1 -0
- package/dist/lib/shadowRoot.js +29 -0
- package/dist/lib/shadowRoot.js.map +1 -0
- package/dist/lib/shadowRootLocator.d.ts +31 -0
- package/dist/lib/shadowRootLocator.d.ts.map +1 -0
- package/dist/lib/shadowRootLocator.js +55 -0
- package/dist/lib/shadowRootLocator.js.map +1 -0
- package/dist/lib/timing.d.ts +2 -2
- package/dist/lib/timing.js +2 -2
- package/dist/lib/tracing.d.ts +2 -1
- package/dist/lib/tracing.d.ts.map +1 -1
- package/dist/lib/tracing.js +12 -1
- package/dist/lib/tracing.js.map +1 -1
- package/docs/accessibility.md +9 -1
- package/docs/agents.md +56 -61
- package/docs/api-reference.md +5 -1
- package/docs/browser-api.md +27 -7
- package/docs/browser-context.md +21 -15
- package/docs/cli.md +353 -30
- package/docs/error-codes.md +7 -4
- package/docs/getting-started.md +6 -1
- package/docs/index.md +1 -1
- package/docs/mcp.md +136 -65
- package/docs/public/examples/agent-actions.html +48 -0
- package/docs/public/examples/agent-debug.html +86 -0
- package/docs/public/examples/agent-late-mutation.html +18 -0
- package/docs/public/examples/agent-ref-shift.html +33 -0
- package/docs/public/examples/iframe-child.html +12 -1
- package/docs/public/examples/shadow-dom.html +137 -0
- package/docs/recipes/login-once-reuse-session.md +33 -5
- package/docs/selectors.md +61 -0
- package/docs/session-management.md +80 -12
- package/docs/why-craftdriver.md +1 -1
- package/package.json +5 -3
- package/skills/craftdriver/SKILL.md +59 -75
- package/skills/craftdriver/agents/openai.yaml +4 -0
- package/skills/craftdriver/cheatsheet.md +18 -4
- package/skills/craftdriver/cli.md +194 -68
- package/skills/craftdriver/patterns.md +17 -8
- package/skills/craftdriver/workflow.md +149 -0
package/dist/cli/mcp/server.js
CHANGED
|
@@ -1,182 +1,317 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP server — JSON-RPC 2.0 over stdio.
|
|
2
|
+
* MCP server — JSON-RPC 2.0 over newline-delimited stdio.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* would multiply our runtime-dep footprint. If the spec grows we can
|
|
7
|
-
* swap in the SDK without changing tool definitions in `tools.ts`.
|
|
8
|
-
*
|
|
9
|
-
* Protocol version we advertise: 2024-11-05. If the client offers a
|
|
10
|
-
* newer one we just echo theirs back — the methods we implement are
|
|
11
|
-
* stable across versions to date.
|
|
12
|
-
*
|
|
13
|
-
* Lifecycle:
|
|
14
|
-
* client → initialize → server returns capabilities + info
|
|
15
|
-
* client → notifications/initialized (no response)
|
|
16
|
-
* client ⇆ tools/list, tools/call, ...
|
|
17
|
-
* stdin EOF (or SIGINT/SIGTERM) → close browser, exit 0
|
|
4
|
+
* The protocol functions in this module only decode, classify, route, and
|
|
5
|
+
* render messages. Browser commands always execute through AgentSession.
|
|
18
6
|
*/
|
|
19
|
-
import {
|
|
7
|
+
import { readFileSync } from 'node:fs';
|
|
8
|
+
import { dirname, resolve as resolvePath } from 'node:path';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
20
10
|
import { assertLocalOnlyLaunch } from '../../lib/launchTarget.js';
|
|
21
11
|
import { CraftdriverError, ErrorCode } from '../../lib/errors.js';
|
|
22
|
-
import {
|
|
23
|
-
import { TOOLS, getTool,
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
|
|
12
|
+
import { AgentSession, } from '../agentSession.js';
|
|
13
|
+
import { TOOLS, getTool, inputSchemaFor, validateToolArgs, runToolDetailed, } from './tools.js';
|
|
14
|
+
import { renderFull } from '../snapshot.js';
|
|
15
|
+
import { BoundedLineReader, MAX_FRAME_BYTES } from '../lineReader.js';
|
|
16
|
+
import { boundToolResult, resolveMaxResponseBytes, truncateUtf8 } from './bounds.js';
|
|
17
|
+
import { ArtifactStore, ArtifactQuotaError, resolveSpillBytes, spillPreview, } from './artifacts.js';
|
|
18
|
+
/**
|
|
19
|
+
* Protocol versions this server has actually been tested against, newest
|
|
20
|
+
* first. Negotiation picks from this list and never echoes an unknown
|
|
21
|
+
* requested version: claiming to speak a revision nobody verified is how a
|
|
22
|
+
* client ends up relying on behaviour that was never implemented.
|
|
23
|
+
*/
|
|
24
|
+
const SUPPORTED_PROTOCOL_VERSIONS = ['2025-06-18', '2025-03-26', '2024-11-05'];
|
|
25
|
+
const PROTOCOL_VERSION = SUPPORTED_PROTOCOL_VERSIONS[SUPPORTED_PROTOCOL_VERSIONS.length - 1];
|
|
27
26
|
const SERVER_NAME = 'craftdriver';
|
|
28
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Read from the installed package rather than a hand-maintained constant,
|
|
29
|
+
* which had drifted to 0.1.0 against a 1.7.0 package — so every client was
|
|
30
|
+
* told the wrong server version.
|
|
31
|
+
*/
|
|
32
|
+
function readServerVersion() {
|
|
33
|
+
try {
|
|
34
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
35
|
+
// dist/cli/mcp/server.js and src/cli/mcp/server.ts are both three levels
|
|
36
|
+
// below the package root.
|
|
37
|
+
const pkg = JSON.parse(readFileSync(resolvePath(here, '..', '..', '..', 'package.json'), 'utf8'));
|
|
38
|
+
return typeof pkg.version === 'string' && pkg.version.length > 0 ? pkg.version : '0.0.0';
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return '0.0.0';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const SERVER_VERSION = readServerVersion();
|
|
45
|
+
/**
|
|
46
|
+
* Choose the protocol version to answer with.
|
|
47
|
+
*
|
|
48
|
+
* A client asking for a version we support gets it. Anything else — unknown,
|
|
49
|
+
* malformed, or missing — gets our default, which the spec allows and which
|
|
50
|
+
* is honest about what this server actually implements.
|
|
51
|
+
*/
|
|
52
|
+
export function negotiateProtocolVersion(requested) {
|
|
53
|
+
return typeof requested === 'string' &&
|
|
54
|
+
SUPPORTED_PROTOCOL_VERSIONS.includes(requested)
|
|
55
|
+
? requested
|
|
56
|
+
: PROTOCOL_VERSION;
|
|
57
|
+
}
|
|
58
|
+
/** Maximum UTF-8 payload for one MCP JSON line. Shared with the daemon. */
|
|
59
|
+
export const MCP_MAX_FRAME_BYTES = MAX_FRAME_BYTES;
|
|
60
|
+
/** Decode exactly one JSON value after newline framing has completed. */
|
|
61
|
+
export function decodeJsonLine(line) {
|
|
62
|
+
return JSON.parse(line);
|
|
63
|
+
}
|
|
64
|
+
/** Classify by presence of an `id`; validation remains a separate concern. */
|
|
65
|
+
export function classifyJsonRpcMessage(value) {
|
|
66
|
+
const message = value;
|
|
67
|
+
return {
|
|
68
|
+
kind: Object.prototype.hasOwnProperty.call(message, 'id')
|
|
69
|
+
? 'request'
|
|
70
|
+
: 'notification',
|
|
71
|
+
message,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function serializeJsonRpcResponse(response) {
|
|
75
|
+
return JSON.stringify(response) + '\n';
|
|
76
|
+
}
|
|
77
|
+
export function sendJsonRpcResponse(output, response) {
|
|
78
|
+
output.write(serializeJsonRpcResponse(response));
|
|
79
|
+
}
|
|
29
80
|
export async function runMcpServer(opts) {
|
|
30
81
|
// The MCP server is a local dev tool only — never reachable against a
|
|
31
82
|
// Grid/cloud. Fail fast at startup, not on first browser use.
|
|
32
83
|
assertLocalOnlyLaunch(opts.launch);
|
|
33
84
|
const input = opts.input ?? process.stdin;
|
|
34
85
|
const output = opts.output ?? process.stdout;
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const name = req.params?.name;
|
|
74
|
-
const args = req.params?.arguments ?? {};
|
|
75
|
-
if (!name)
|
|
76
|
-
return rpcError(id, -32602, 'tools/call: missing "name"');
|
|
77
|
-
const tool = getTool(name);
|
|
78
|
-
if (!tool) {
|
|
79
|
-
return ok(id, toolError(`unknown tool: ${name}`, ErrorCode.INVALID_ARGUMENT));
|
|
80
|
-
}
|
|
81
|
-
const result = await callTool(ctx, tool, args, {
|
|
82
|
-
snapshotsOn,
|
|
83
|
-
getPrev: () => lastSnapshot,
|
|
84
|
-
setLast: (s) => {
|
|
85
|
-
lastSnapshot = s;
|
|
86
|
-
},
|
|
87
|
-
artifacts,
|
|
88
|
-
spillBytes,
|
|
89
|
-
});
|
|
90
|
-
return ok(id, result);
|
|
91
|
-
}
|
|
92
|
-
case 'resources/list':
|
|
93
|
-
// Resources land with Item 7 (trace summaries). Empty list now
|
|
94
|
-
// keeps clients that probe for resource capability happy.
|
|
95
|
-
return ok(id, { resources: [] });
|
|
96
|
-
default:
|
|
97
|
-
return rpcError(id, -32601, `method not found: ${req.method}`);
|
|
86
|
+
const signalSource = opts.signalSource ?? process;
|
|
87
|
+
const session = opts.sessionFactory?.() ?? new AgentSession({
|
|
88
|
+
launchOptions: opts.launch,
|
|
89
|
+
autoSnapshot: opts.snapshot !== 'none',
|
|
90
|
+
});
|
|
91
|
+
const router = {
|
|
92
|
+
session,
|
|
93
|
+
snapshotState: {
|
|
94
|
+
snapshotsOn: opts.snapshot !== 'none',
|
|
95
|
+
artifacts: new ArtifactStore(opts.artifactsDir),
|
|
96
|
+
spillBytes: opts.spillBytes ?? resolveSpillBytes(),
|
|
97
|
+
maxResponseBytes: opts.maxResponseBytes ?? resolveMaxResponseBytes(),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
const reader = new BoundedLineReader();
|
|
101
|
+
const pending = new Set();
|
|
102
|
+
let routeTail = Promise.resolve();
|
|
103
|
+
let accepting = true;
|
|
104
|
+
const trackMessage = (classified) => {
|
|
105
|
+
const route = async () => {
|
|
106
|
+
const response = await routeJsonRpcMethod(classified, router);
|
|
107
|
+
if (response)
|
|
108
|
+
sendJsonRpcResponse(output, response);
|
|
109
|
+
};
|
|
110
|
+
const isToolCall = classified.message.method === 'tools/call';
|
|
111
|
+
const task = isToolCall ? routeTail.then(route) : route();
|
|
112
|
+
if (isToolCall)
|
|
113
|
+
routeTail = task.catch(() => undefined);
|
|
114
|
+
pending.add(task);
|
|
115
|
+
void task.then(() => pending.delete(task), () => pending.delete(task));
|
|
116
|
+
};
|
|
117
|
+
const onData = (chunk) => {
|
|
118
|
+
if (!accepting)
|
|
119
|
+
return;
|
|
120
|
+
for (const event of reader.push(chunk)) {
|
|
121
|
+
if (event.kind === 'oversized') {
|
|
122
|
+
sendJsonRpcResponse(output, rpcError(null, -32700, `input frame exceeds ${MCP_MAX_FRAME_BYTES}-byte limit`));
|
|
123
|
+
continue;
|
|
98
124
|
}
|
|
99
|
-
|
|
100
|
-
catch (e) {
|
|
101
|
-
return rpcError(id, -32000, e.message ?? String(e));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Line-delimited JSON over stdin. Tolerate \r\n and trailing whitespace.
|
|
105
|
-
let buf = '';
|
|
106
|
-
input.setEncoding?.('utf8');
|
|
107
|
-
input.on('data', (chunk) => {
|
|
108
|
-
buf += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
|
|
109
|
-
let nl;
|
|
110
|
-
while ((nl = buf.indexOf('\n')) !== -1) {
|
|
111
|
-
const line = buf.slice(0, nl).trim();
|
|
112
|
-
buf = buf.slice(nl + 1);
|
|
125
|
+
const line = event.line.trim();
|
|
113
126
|
if (!line)
|
|
114
127
|
continue;
|
|
115
|
-
let parsed;
|
|
116
128
|
try {
|
|
117
|
-
|
|
129
|
+
trackMessage(classifyJsonRpcMessage(decodeJsonLine(line)));
|
|
118
130
|
}
|
|
119
131
|
catch {
|
|
120
|
-
|
|
121
|
-
continue;
|
|
132
|
+
sendJsonRpcResponse(output, rpcError(null, -32700, 'parse error'));
|
|
122
133
|
}
|
|
123
|
-
// Run async; responses may interleave but each carries its own id.
|
|
124
|
-
void handleRequest(parsed).then((resp) => {
|
|
125
|
-
if (resp)
|
|
126
|
-
send(resp);
|
|
127
|
-
});
|
|
128
134
|
}
|
|
135
|
+
};
|
|
136
|
+
input.setEncoding?.('utf8');
|
|
137
|
+
input.on('data', onData);
|
|
138
|
+
let finish;
|
|
139
|
+
const stopped = new Promise((resolve) => {
|
|
140
|
+
finish = resolve;
|
|
129
141
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
142
|
+
let stopping = false;
|
|
143
|
+
const stop = () => {
|
|
144
|
+
if (stopping)
|
|
145
|
+
return;
|
|
146
|
+
stopping = true;
|
|
147
|
+
accepting = false;
|
|
148
|
+
finish();
|
|
149
|
+
};
|
|
150
|
+
input.once('end', stop);
|
|
151
|
+
input.once('close', stop);
|
|
152
|
+
signalSource.once('SIGINT', stop);
|
|
153
|
+
signalSource.once('SIGTERM', stop);
|
|
154
|
+
try {
|
|
155
|
+
await stopped;
|
|
156
|
+
await Promise.allSettled([...pending]);
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
input.removeListener('data', onData);
|
|
160
|
+
input.removeListener('end', stop);
|
|
161
|
+
input.removeListener('close', stop);
|
|
162
|
+
signalSource.off('SIGINT', stop);
|
|
163
|
+
signalSource.off('SIGTERM', stop);
|
|
164
|
+
await session.close();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export async function routeJsonRpcMethod(classified, ctx) {
|
|
168
|
+
const req = classified.message;
|
|
169
|
+
const id = req.id ?? null;
|
|
170
|
+
// JSON-RPC forbids replying to a notification. Only `notifications/
|
|
171
|
+
// initialized` was handled explicitly, so every other notification fell
|
|
172
|
+
// through to the method-not-found default and got an unsolicited
|
|
173
|
+
// `id: null` error frame — which strict MCP clients treat as a protocol
|
|
174
|
+
// violation. Silence is the correct response to all of them.
|
|
175
|
+
if (classified.kind === 'notification')
|
|
176
|
+
return null;
|
|
177
|
+
try {
|
|
178
|
+
switch (req.method) {
|
|
179
|
+
case 'initialize':
|
|
180
|
+
return ok(id, {
|
|
181
|
+
protocolVersion: negotiateProtocolVersion(req.params?.protocolVersion),
|
|
182
|
+
capabilities: { tools: {} },
|
|
183
|
+
serverInfo: { name: SERVER_NAME, version: SERVER_VERSION },
|
|
184
|
+
instructions: 'craftdriver browser automation. Probe selectors with browser_exists ' +
|
|
185
|
+
'before acting; errors carry a stable `code` field; the post-action ' +
|
|
186
|
+
'a11y snapshot diff tells you what changed.',
|
|
187
|
+
});
|
|
188
|
+
case 'ping':
|
|
189
|
+
return ok(id, {});
|
|
190
|
+
case 'tools/list':
|
|
191
|
+
return ok(id, {
|
|
192
|
+
tools: TOOLS.map((tool) => ({
|
|
193
|
+
name: tool.name,
|
|
194
|
+
description: tool.description,
|
|
195
|
+
inputSchema: inputSchemaFor(tool),
|
|
196
|
+
annotations: tool.annotations,
|
|
197
|
+
})),
|
|
198
|
+
});
|
|
199
|
+
case 'tools/call': {
|
|
200
|
+
const name = req.params?.name;
|
|
201
|
+
const args = req.params?.arguments ?? {};
|
|
202
|
+
if (!name)
|
|
203
|
+
return rpcError(id, -32602, 'tools/call: missing "name"');
|
|
204
|
+
const tool = getTool(name);
|
|
205
|
+
// A tool that does not exist is a caller mistake about the protocol,
|
|
206
|
+
// not a browser failure, so it is a JSON-RPC error rather than a
|
|
207
|
+
// successful result carrying isError. Normal action failures — a
|
|
208
|
+
// missing element, a timeout — stay successful results.
|
|
209
|
+
if (!tool)
|
|
210
|
+
return rpcError(id, -32602, `tools/call: unknown tool "${name}"`);
|
|
211
|
+
let validated;
|
|
212
|
+
try {
|
|
213
|
+
// Validate before the session queue: a malformed call should not
|
|
214
|
+
// wait behind a slow browser action to be told it was malformed,
|
|
215
|
+
// and nothing invalid should reach the dispatcher at all.
|
|
216
|
+
validated = validateToolArgs(tool, args);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
220
|
+
return rpcError(id, -32602, message, {
|
|
221
|
+
...(error instanceof CraftdriverError && error.detail ? { detail: error.detail } : {}),
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const invocation = await invokeTool(ctx.session, tool, validated, ctx.snapshotState);
|
|
226
|
+
return ok(id, await serializeToolSuccess(tool, invocation.value, {
|
|
227
|
+
artifacts: ctx.snapshotState.artifacts,
|
|
228
|
+
spillBytes: ctx.snapshotState.spillBytes,
|
|
229
|
+
delta: invocation.delta,
|
|
230
|
+
maxResponseBytes: ctx.snapshotState.maxResponseBytes,
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
return ok(id, serializeToolFailure(error, ctx.snapshotState.maxResponseBytes));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
case 'resources/list':
|
|
238
|
+
return ok(id, { resources: [] });
|
|
239
|
+
default:
|
|
240
|
+
return rpcError(id, -32601, `method not found: ${req.method}`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return rpcError(id, -32000, error.message ?? String(error));
|
|
245
|
+
}
|
|
138
246
|
}
|
|
139
|
-
async function
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
247
|
+
async function invokeTool(session, tool, inputArgs, snapshotState) {
|
|
248
|
+
let args = inputArgs;
|
|
249
|
+
let screenshotPath;
|
|
250
|
+
if (tool.name === 'browser_screenshot') {
|
|
251
|
+
// Always server-allocated. The tool takes no destination, so this is the
|
|
252
|
+
// only path a screenshot can land on, which is what its description says.
|
|
253
|
+
screenshotPath = await snapshotState.artifacts.allocate('screenshot.png');
|
|
254
|
+
args = {
|
|
255
|
+
...args,
|
|
256
|
+
path: screenshotPath,
|
|
257
|
+
};
|
|
145
258
|
}
|
|
146
|
-
|
|
259
|
+
// The session captures the post-action snapshot in the same operation
|
|
260
|
+
// as the action, against the one baseline explicit snapshots also
|
|
261
|
+
// advance. The adapter renders that result; it never owns a second one.
|
|
262
|
+
let detailed;
|
|
147
263
|
try {
|
|
148
|
-
|
|
264
|
+
detailed = await runToolDetailed(session, tool, args);
|
|
265
|
+
if (screenshotPath)
|
|
266
|
+
await snapshotState.artifacts.commitAllocated(screenshotPath);
|
|
149
267
|
}
|
|
150
|
-
catch (
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return toolError(e.message ?? String(e), ErrorCode.DRIVER_ERROR);
|
|
268
|
+
catch (error) {
|
|
269
|
+
if (screenshotPath)
|
|
270
|
+
await snapshotState.artifacts.releaseAllocated(screenshotPath);
|
|
271
|
+
throw error;
|
|
155
272
|
}
|
|
273
|
+
if (!snapshotState.snapshotsOn)
|
|
274
|
+
return { value: detailed.value };
|
|
275
|
+
return { value: detailed.value, ...(detailed.delta ? { delta: detailed.delta } : {}) };
|
|
276
|
+
}
|
|
277
|
+
/** Render an already-computed tool value without invoking browser work. */
|
|
278
|
+
export async function serializeToolSuccess(tool, value, ctx) {
|
|
156
279
|
const content = [];
|
|
157
|
-
// Render result. The snapshot tool returns a structured shape we
|
|
158
|
-
// know how to print compactly; everything else falls through to
|
|
159
|
-
// the generic summariser. Both paths run through `maybeSpill` so
|
|
160
|
-
// large payloads land on disk instead of in the context window.
|
|
161
280
|
let primaryText;
|
|
162
|
-
if (tool.name === 'browser_snapshot' &&
|
|
163
|
-
|
|
281
|
+
if (tool.name === 'browser_snapshot' &&
|
|
282
|
+
value &&
|
|
283
|
+
typeof value === 'object' &&
|
|
284
|
+
'lines' in value) {
|
|
285
|
+
primaryText = await maybeSpill(renderFull(value), 'snapshot.txt', ctx.artifacts, ctx.spillBytes);
|
|
164
286
|
}
|
|
165
287
|
else {
|
|
166
|
-
primaryText = await summariseValue(tool.name, value,
|
|
288
|
+
primaryText = await summariseValue(tool.name, value, ctx.artifacts, ctx.spillBytes);
|
|
167
289
|
}
|
|
168
290
|
content.push({ type: 'text', text: primaryText });
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const block = await maybeSpill(delta, 'snapshot.txt', snap.artifacts, snap.spillBytes);
|
|
175
|
-
content.push({ type: 'text', text: block });
|
|
176
|
-
}
|
|
177
|
-
snap.setLast(next);
|
|
291
|
+
if (ctx.delta) {
|
|
292
|
+
content.push({
|
|
293
|
+
type: 'text',
|
|
294
|
+
text: await maybeSpill(ctx.delta, 'snapshot.txt', ctx.artifacts, ctx.spillBytes),
|
|
295
|
+
});
|
|
178
296
|
}
|
|
179
|
-
|
|
297
|
+
// Bound the complete response, not just the content blocks. Spilling a
|
|
298
|
+
// large value to an artifact while attaching the same value in full as
|
|
299
|
+
// structuredContent left a 50 KB eval on the wire behind a 514-byte preview.
|
|
300
|
+
return boundToolResult({ content, structuredContent: { result: value } }, ctx.maxResponseBytes ?? resolveMaxResponseBytes());
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Render a tool failure without requiring a session or transport.
|
|
304
|
+
*
|
|
305
|
+
* Bounded like a success. An error carries page-derived text — an assertion
|
|
306
|
+
* message quoting a whole element, a driver error echoing a selector — so
|
|
307
|
+
* leaving the failure path unbounded left the envelope cap trivially
|
|
308
|
+
* bypassable by whatever the page put in the message.
|
|
309
|
+
*/
|
|
310
|
+
export function serializeToolFailure(error, maxResponseBytes = resolveMaxResponseBytes()) {
|
|
311
|
+
const result = error instanceof CraftdriverError
|
|
312
|
+
? toolError(error.message, error.code, error.hint, compactErrorDetail(error.detail))
|
|
313
|
+
: toolError(error?.message ?? String(error), ErrorCode.DRIVER_ERROR);
|
|
314
|
+
return boundToolResult(result, maxResponseBytes);
|
|
180
315
|
}
|
|
181
316
|
async function summariseValue(toolName, value, artifacts, spillBytes) {
|
|
182
317
|
if (value === null || value === undefined)
|
|
@@ -188,8 +323,17 @@ async function maybeSpill(text, nameHint, artifacts, spillBytes) {
|
|
|
188
323
|
const size = Buffer.byteLength(text, 'utf8');
|
|
189
324
|
if (size <= spillBytes)
|
|
190
325
|
return text;
|
|
191
|
-
|
|
192
|
-
|
|
326
|
+
try {
|
|
327
|
+
const written = await artifacts.write(nameHint, text);
|
|
328
|
+
return spillPreview(text, written);
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
if (!(error instanceof ArtifactQuotaError))
|
|
332
|
+
throw error;
|
|
333
|
+
// A full artifact store must not fail the command the agent asked for.
|
|
334
|
+
// Fall back to an inline value; the envelope bound trims it either way.
|
|
335
|
+
return truncateUtf8(text, spillBytes) + `\n… (truncated — ${error.message})`;
|
|
336
|
+
}
|
|
193
337
|
}
|
|
194
338
|
function safeJson(value) {
|
|
195
339
|
try {
|
|
@@ -225,7 +369,17 @@ function toolError(message, code, hint, detail) {
|
|
|
225
369
|
function ok(id, result) {
|
|
226
370
|
return { jsonrpc: '2.0', id, result };
|
|
227
371
|
}
|
|
228
|
-
function rpcError(id, code, message) {
|
|
229
|
-
return {
|
|
372
|
+
function rpcError(id, code, message, extra) {
|
|
373
|
+
return {
|
|
374
|
+
jsonrpc: '2.0',
|
|
375
|
+
id,
|
|
376
|
+
error: {
|
|
377
|
+
code,
|
|
378
|
+
message,
|
|
379
|
+
// `data` carries the machine-readable part (which field, what was
|
|
380
|
+
// allowed) so a client need not parse the message to correct itself.
|
|
381
|
+
...(extra?.detail !== undefined ? { data: extra.detail } : {}),
|
|
382
|
+
},
|
|
383
|
+
};
|
|
230
384
|
}
|
|
231
385
|
//# sourceMappingURL=server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/mcp/tools.d.ts
CHANGED
|
@@ -1,33 +1,78 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP tool registry.
|
|
3
3
|
*
|
|
4
|
-
* Each tool
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* codes — we reuse it untouched so library, CLI, and MCP all behave
|
|
8
|
-
* identically when given the same selector.
|
|
4
|
+
* Each tool is a parameter descriptor plus a thin mapping onto an existing
|
|
5
|
+
* dispatcher command. Three rules keep this an adapter rather than a second
|
|
6
|
+
* implementation:
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* - **No MCP-only browser semantics.** Every tool dispatches a command the CLI
|
|
9
|
+
* also has, with the same arguments. Where the CLI command takes an `action`,
|
|
10
|
+
* the tool does too — mirroring its shape rather than inventing a nicer one
|
|
11
|
+
* is what keeps the two from drifting.
|
|
12
|
+
* - **One declaration per argument.** `params` produces both the advertised
|
|
13
|
+
* `inputSchema` and the runtime validation, so a tool cannot promise a
|
|
14
|
+
* constraint it does not enforce.
|
|
15
|
+
* - **Whether an action mutates the page is not declared here.** The
|
|
16
|
+
* dispatcher's `MUTATING` set decides, and the presence of a post-action
|
|
17
|
+
* delta is the only signal. A per-tool flag was a second source of truth
|
|
18
|
+
* once already: it marked `browser_advanced_eval` mutating while the
|
|
19
|
+
* dispatcher did not, so the one tool that can rewrite a page never
|
|
20
|
+
* reported its changes.
|
|
21
|
+
*
|
|
22
|
+
* The set is kept deliberately smaller than the CLI's command list. Every tool
|
|
23
|
+
* costs context in `tools/list` on every agent turn, so element actions that
|
|
24
|
+
* share a signature are grouped behind one `action` argument instead of
|
|
25
|
+
* becoming seven tools.
|
|
12
26
|
*/
|
|
13
|
-
import type {
|
|
27
|
+
import type { AgentDetailedResult, AgentSessionRunner } from '../agentSession.js';
|
|
28
|
+
import { type ParamSpecs } from './params.js';
|
|
29
|
+
/**
|
|
30
|
+
* MCP tool annotations.
|
|
31
|
+
*
|
|
32
|
+
* Accuracy matters more than completeness here: a client may use these to
|
|
33
|
+
* decide what to auto-approve, so a wrong `readOnlyHint` is worse than an
|
|
34
|
+
* absent one.
|
|
35
|
+
*/
|
|
36
|
+
export interface ToolAnnotations {
|
|
37
|
+
title: string;
|
|
38
|
+
/** Does not change the page or any persistent state. */
|
|
39
|
+
readOnlyHint: boolean;
|
|
40
|
+
/** May destroy state a user would not want destroyed. */
|
|
41
|
+
destructiveHint: boolean;
|
|
42
|
+
/** Repeating the call with the same arguments changes nothing further. */
|
|
43
|
+
idempotentHint: boolean;
|
|
44
|
+
/** Interacts with the outside world (the web, the filesystem). */
|
|
45
|
+
openWorldHint: boolean;
|
|
46
|
+
}
|
|
14
47
|
export interface ToolDef {
|
|
15
48
|
name: string;
|
|
16
49
|
description: string;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** Map MCP args → dispatcher args.
|
|
50
|
+
params: ParamSpecs;
|
|
51
|
+
annotations: ToolAnnotations;
|
|
52
|
+
/** Map validated MCP args → dispatcher args. */
|
|
20
53
|
toDispatch: (args: Record<string, unknown>) => {
|
|
21
54
|
cmd: string;
|
|
22
55
|
args: Record<string, unknown>;
|
|
23
56
|
};
|
|
24
|
-
/** When true, this action mutates page state — caller should take a snapshot. */
|
|
25
|
-
mutating: boolean;
|
|
26
|
-
/** When true, the result includes binary content (image bytes). */
|
|
27
|
-
returnsImage?: boolean;
|
|
28
57
|
}
|
|
29
58
|
export declare const TOOLS: ToolDef[];
|
|
30
59
|
export declare function getTool(name: string): ToolDef | undefined;
|
|
31
|
-
/**
|
|
32
|
-
export declare function
|
|
60
|
+
/** The advertised schema for a tool, derived from its parameter descriptor. */
|
|
61
|
+
export declare function inputSchemaFor(tool: ToolDef): Record<string, unknown>;
|
|
62
|
+
/**
|
|
63
|
+
* Validate arguments against the tool's descriptor.
|
|
64
|
+
*
|
|
65
|
+
* Separate from dispatch so the server can reject before touching the session
|
|
66
|
+
* queue: an invalid call should not wait behind a slow browser action to be
|
|
67
|
+
* told it was malformed.
|
|
68
|
+
*/
|
|
69
|
+
export declare function validateToolArgs(tool: ToolDef, args: unknown): Record<string, unknown>;
|
|
70
|
+
/** Map a tool to a dispatcher command and run it through the shared session. */
|
|
71
|
+
export declare function runTool(session: AgentSessionRunner, tool: ToolDef, args: Record<string, unknown>): Promise<unknown>;
|
|
72
|
+
/**
|
|
73
|
+
* As {@link runTool}, but keeps the post-action snapshot the session captured
|
|
74
|
+
* in the same operation. The MCP adapter renders that as the second content
|
|
75
|
+
* block; it does not compute or own it.
|
|
76
|
+
*/
|
|
77
|
+
export declare function runToolDetailed(session: AgentSessionRunner, tool: ToolDef, args: Record<string, unknown>): Promise<AgentDetailedResult>;
|
|
33
78
|
//# sourceMappingURL=tools.d.ts.map
|