codex-computer-use-mcp 0.1.0 → 0.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/ARCHITECTURE.md +150 -0
- package/CONTRIBUTING.md +16 -10
- package/MIGRATION.md +94 -0
- package/PROOF.md +128 -54
- package/README.md +97 -115
- package/SECURITY.md +45 -22
- package/dist/audit.d.ts +15 -14
- package/dist/audit.js +1 -1
- package/dist/audit.js.map +1 -1
- package/dist/config.d.ts +8 -8
- package/dist/config.js +8 -103
- package/dist/config.js.map +1 -1
- package/dist/direct-broker.d.ts +71 -0
- package/dist/direct-broker.js +652 -0
- package/dist/direct-broker.js.map +1 -0
- package/dist/direct-service.d.ts +33 -0
- package/dist/direct-service.js +350 -0
- package/dist/direct-service.js.map +1 -0
- package/dist/lock.d.ts +1 -0
- package/dist/lock.js +32 -3
- package/dist/lock.js.map +1 -1
- package/dist/mcp-elicitation.d.ts +8 -0
- package/dist/mcp-elicitation.js +47 -0
- package/dist/mcp-elicitation.js.map +1 -0
- package/dist/mcp-server.js +43 -100
- package/dist/mcp-server.js.map +1 -1
- package/dist/system.d.ts +0 -1
- package/dist/system.js +12 -37
- package/dist/system.js.map +1 -1
- package/dist/tools.d.ts +84 -0
- package/dist/tools.js +262 -0
- package/dist/tools.js.map +1 -0
- package/docs/adr/0001-standalone-code-mode-mcp.md +45 -0
- package/integrations/pi/README.md +51 -27
- package/integrations/pi/index.ts +237 -125
- package/integrations/pi/mcp.json.example +3 -3
- package/npm-shrinkwrap.json +3275 -48
- package/package.json +41 -13
- package/dist/policy.d.ts +0 -42
- package/dist/policy.js +0 -428
- package/dist/policy.js.map +0 -1
- package/dist/prompt.d.ts +0 -62
- package/dist/prompt.js +0 -119
- package/dist/prompt.js.map +0 -1
- package/dist/runner.d.ts +0 -55
- package/dist/runner.js +0 -494
- package/dist/runner.js.map +0 -1
- package/dist/service.d.ts +0 -17
- package/dist/service.js +0 -382
- package/dist/service.js.map +0 -1
package/dist/mcp-server.js
CHANGED
|
@@ -1,64 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
4
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
const version = "0.1.0";
|
|
4
|
+
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { executeDirectTool, getDirectStatus } from "./direct-service.js";
|
|
6
|
+
import { forwardOfficialElicitationToMcpClient } from "./mcp-elicitation.js";
|
|
7
|
+
import { EXPECTED_OFFICIAL_INPUT_SCHEMAS, isDirectMethod, OFFICIAL_METHODS, OFFICIAL_TOOL_METADATA, } from "./tools.js";
|
|
8
|
+
const version = "0.3.0";
|
|
11
9
|
async function handleCli() {
|
|
12
10
|
const args = process.argv.slice(2);
|
|
13
11
|
if (args.length === 0)
|
|
14
12
|
return false;
|
|
15
13
|
if (args.length === 1 && args[0] === "--status") {
|
|
16
|
-
console.log(JSON.stringify(await
|
|
14
|
+
console.log(JSON.stringify(await getDirectStatus(), null, 2));
|
|
17
15
|
return true;
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
throw new Error("Usage: codex-computer-use-mcp [--status | --configure safe | --configure full-permissions --acknowledge-full-permissions]");
|
|
21
|
-
}
|
|
22
|
-
const requested = args[1];
|
|
23
|
-
if (requested === "full-permissions" && !args.includes("--acknowledge-full-permissions")) {
|
|
24
|
-
throw new Error("Refusing to enable full-permissions without --acknowledge-full-permissions. This broadly enables targeted operations that safe mode refuses; official OpenAI approvals and technical controls remain.");
|
|
25
|
-
}
|
|
26
|
-
const stateRoot = defaultStateRoot();
|
|
27
|
-
const previous = await loadConfig(stateRoot);
|
|
28
|
-
if (previous.permissionMode === requested) {
|
|
29
|
-
console.log(`Permission mode is already ${requested}.`);
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
await saveConfig(stateRoot, { version: 1, permissionMode: requested });
|
|
33
|
-
const audit = {
|
|
34
|
-
timestamp: new Date().toISOString(),
|
|
35
|
-
runId: crypto.randomUUID(),
|
|
36
|
-
operation: "configure",
|
|
37
|
-
permissionMode: requested,
|
|
38
|
-
app: null,
|
|
39
|
-
mutating: true,
|
|
40
|
-
cleanupRequested: false,
|
|
41
|
-
userConfirmed: requested === "full-permissions",
|
|
42
|
-
authorization: requested === "full-permissions" ? "full_permissions_config" : "none",
|
|
43
|
-
inputBytes: 0,
|
|
44
|
-
outcome: "ok",
|
|
45
|
-
durationMs: 0,
|
|
46
|
-
model: MODEL,
|
|
47
|
-
usage: { input: 0, cachedInput: 0, output: 0 },
|
|
48
|
-
computerUseCalls: 0,
|
|
49
|
-
computerUseMethods: [],
|
|
50
|
-
backgroundPreserved: null,
|
|
51
|
-
cleanupVerified: null,
|
|
52
|
-
};
|
|
53
|
-
try {
|
|
54
|
-
await appendAudit(stateRoot, audit);
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
await saveConfig(stateRoot, previous);
|
|
58
|
-
throw new Error("Permission mode change was rolled back because secure audit logging failed");
|
|
59
|
-
}
|
|
60
|
-
console.log(`Permission mode set to ${requested}.`);
|
|
61
|
-
return true;
|
|
17
|
+
throw new Error("Usage: codex-computer-use-mcp [--status]. The durable no-permissions interface has no alternate mode or configuration command.");
|
|
62
18
|
}
|
|
63
19
|
try {
|
|
64
20
|
if (await handleCli())
|
|
@@ -68,63 +24,50 @@ catch (error) {
|
|
|
68
24
|
console.error(error instanceof Error ? error.message : "Invalid command");
|
|
69
25
|
process.exit(1);
|
|
70
26
|
}
|
|
71
|
-
const server = new
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
27
|
+
const server = new Server({ name: "codex-computer-use-mcp", version }, { capabilities: { logging: {}, tools: {} } });
|
|
28
|
+
const officialToolDefinitions = OFFICIAL_METHODS.map((method) => ({
|
|
29
|
+
name: method,
|
|
30
|
+
description: OFFICIAL_TOOL_METADATA[method].description,
|
|
31
|
+
inputSchema: EXPECTED_OFFICIAL_INPUT_SCHEMAS[method],
|
|
32
|
+
annotations: OFFICIAL_TOOL_METADATA[method].annotations,
|
|
33
|
+
}));
|
|
34
|
+
const statusToolDefinition = {
|
|
35
|
+
name: "computer_use_status",
|
|
36
|
+
title: "Computer Use Status",
|
|
37
|
+
description: "Show direct-call architecture, durable no-permissions policy, signed broker status, supported methods, and private audit path.",
|
|
38
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
39
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
80
40
|
};
|
|
81
|
-
server.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const response = await executeOperation(args, { signal: extra.signal });
|
|
94
|
-
return {
|
|
95
|
-
content: [{ type: "text", text: response.text }],
|
|
96
|
-
structuredContent: response.details,
|
|
97
|
-
isError: response.isError,
|
|
98
|
-
};
|
|
41
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
42
|
+
tools: [...officialToolDefinitions, statusToolDefinition],
|
|
43
|
+
}));
|
|
44
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
45
|
+
if (request.params.name === statusToolDefinition.name) {
|
|
46
|
+
try {
|
|
47
|
+
const status = await getDirectStatus();
|
|
48
|
+
return { content: [{ type: "text", text: JSON.stringify(status, null, 2) }], structuredContent: status };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return { content: [{ type: "text", text: error instanceof Error ? error.message : "Could not read status" }], isError: true };
|
|
52
|
+
}
|
|
99
53
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return {
|
|
103
|
-
content: [{ type: "text", text: message }],
|
|
104
|
-
isError: true,
|
|
105
|
-
};
|
|
54
|
+
if (!isDirectMethod(request.params.name)) {
|
|
55
|
+
throw new McpError(ErrorCode.InvalidParams, `Unknown tool: ${request.params.name}`);
|
|
106
56
|
}
|
|
107
|
-
});
|
|
108
|
-
server.registerTool("background_computer_use_status", {
|
|
109
|
-
title: "Background Computer Use Status",
|
|
110
|
-
description: "Show the server permission mode, state/audit paths, signed model, approval boundary, and supported official Computer Use methods.",
|
|
111
|
-
annotations: {
|
|
112
|
-
readOnlyHint: true,
|
|
113
|
-
destructiveHint: false,
|
|
114
|
-
idempotentHint: true,
|
|
115
|
-
openWorldHint: false,
|
|
116
|
-
},
|
|
117
|
-
}, async () => {
|
|
118
57
|
try {
|
|
119
|
-
const
|
|
58
|
+
const response = await executeDirectTool({ method: request.params.name, arguments: request.params.arguments ?? {} }, {
|
|
59
|
+
signal: extra.signal,
|
|
60
|
+
onElicitation: (elicitation) => forwardOfficialElicitationToMcpClient(server, elicitation, extra.signal),
|
|
61
|
+
});
|
|
120
62
|
return {
|
|
121
|
-
content:
|
|
122
|
-
structuredContent:
|
|
63
|
+
content: response.content,
|
|
64
|
+
structuredContent: response.details,
|
|
65
|
+
isError: response.isError,
|
|
123
66
|
};
|
|
124
67
|
}
|
|
125
68
|
catch (error) {
|
|
126
69
|
return {
|
|
127
|
-
content: [{ type: "text", text: error instanceof Error ? error.message : "
|
|
70
|
+
content: [{ type: "text", text: error instanceof Error ? error.message : "Direct Computer Use failed" }],
|
|
128
71
|
isError: true,
|
|
129
72
|
};
|
|
130
73
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACN,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GAGR,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,qCAAqC,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EACN,+BAA+B,EAC/B,cAAc,EACd,gBAAgB,EAChB,sBAAsB,GACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,KAAK,UAAU,SAAS;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gIAAgI,CAAC,CAAC;AACnJ,CAAC;AAED,IAAI,CAAC;IACJ,IAAI,MAAM,SAAS,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACxB,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAC3C,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAC5C,CAAC;AAEF,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,WAAW;IACvD,WAAW,EAAE,+BAA+B,CAAC,MAAM,CAAC;IACpD,WAAW,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,WAAW;CACvD,CAAC,CAAC,CAAC;AAEJ,MAAM,oBAAoB,GAAG;IAC5B,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EAAE,gIAAgI;IAC7I,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE;IACrF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;CACvG,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,uBAAuB,EAAE,oBAAoB,CAAC;CACzD,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAA2B,EAAE;IACjG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;YACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/H,CAAC;IACF,CAAC;IAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,iBAAiB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACvC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,EAC1E;YACC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,aAAa,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,qCAAqC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;SACxG,CACD,CAAC;QACF,OAAO;YACN,OAAO,EAAE,QAAQ,CAAC,OAAyB;YAC3C,iBAAiB,EAAE,QAAQ,CAAC,OAAO;YACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;SACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,EAAE,CAAC;YACxG,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/system.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export interface ResolvedAppIdentity {
|
|
|
8
8
|
}
|
|
9
9
|
export declare function resolveAppIdentity(app: string): ResolvedAppIdentity;
|
|
10
10
|
export declare function resolveAppLeaseId(app: string): string;
|
|
11
|
-
export declare function ensureAppRunningInBackground(app: string, identity?: ResolvedAppIdentity): Promise<ResolvedAppIdentity>;
|
|
12
11
|
export interface TargetFrontmostWatcher {
|
|
13
12
|
becameFrontmost(bundleId: string): boolean;
|
|
14
13
|
healthy(): boolean;
|
package/dist/system.js
CHANGED
|
@@ -104,38 +104,6 @@ export function resolveAppIdentity(app) {
|
|
|
104
104
|
export function resolveAppLeaseId(app) {
|
|
105
105
|
return resolveAppIdentity(app).leaseId;
|
|
106
106
|
}
|
|
107
|
-
export async function ensureAppRunningInBackground(app, identity = resolveAppIdentity(app)) {
|
|
108
|
-
if (identity.bundleId) {
|
|
109
|
-
const found = spawnSync("/usr/bin/lsappinfo", ["find", `bundleID=${identity.bundleId}`], {
|
|
110
|
-
encoding: "utf8",
|
|
111
|
-
timeout: 3000,
|
|
112
|
-
});
|
|
113
|
-
if (found.status === 0 && (found.stdout ?? "").trim().startsWith("ASN:"))
|
|
114
|
-
return identity;
|
|
115
|
-
}
|
|
116
|
-
const selectorIsBundleId = /^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/.test(app.trim());
|
|
117
|
-
const launchArgs = path.isAbsolute(app)
|
|
118
|
-
? ["-g", app]
|
|
119
|
-
: identity.bundleId || selectorIsBundleId
|
|
120
|
-
? ["-g", "-b", identity.bundleId ?? app.trim()]
|
|
121
|
-
: ["-g", "-a", app];
|
|
122
|
-
const launched = spawnSync("/usr/bin/open", launchArgs, { encoding: "utf8", timeout: 10_000 });
|
|
123
|
-
if (launched.status !== 0)
|
|
124
|
-
throw new Error("Could not launch the target app in the background");
|
|
125
|
-
for (let attempt = 0; attempt < 100; attempt++) {
|
|
126
|
-
const resolved = resolveAppIdentity(identity.bundleId ?? app);
|
|
127
|
-
if (resolved.bundleId) {
|
|
128
|
-
const found = spawnSync("/usr/bin/lsappinfo", ["find", `bundleID=${resolved.bundleId}`], {
|
|
129
|
-
encoding: "utf8",
|
|
130
|
-
timeout: 3000,
|
|
131
|
-
});
|
|
132
|
-
if (found.status === 0 && (found.stdout ?? "").trim().startsWith("ASN:"))
|
|
133
|
-
return resolved;
|
|
134
|
-
}
|
|
135
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
136
|
-
}
|
|
137
|
-
throw new Error("Target app did not become available after background launch");
|
|
138
|
-
}
|
|
139
107
|
function bundleIdForAsn(asn, infoPath = "/usr/bin/lsappinfo") {
|
|
140
108
|
const info = spawnSync(infoPath, ["info", "-only", "bundleID", asn], {
|
|
141
109
|
encoding: "utf8",
|
|
@@ -167,33 +135,36 @@ export async function watchTargetFrontmost(listenerPath = "/usr/bin/lsappinfo",
|
|
|
167
135
|
};
|
|
168
136
|
const retryTimer = setInterval(resolvePending, 50);
|
|
169
137
|
retryTimer.unref();
|
|
138
|
+
const childRunning = () => proc.exitCode === null && proc.signalCode === null;
|
|
170
139
|
const markStopped = () => {
|
|
171
140
|
running = false;
|
|
172
141
|
clearInterval(retryTimer);
|
|
173
142
|
};
|
|
174
143
|
proc.stdout.setEncoding("utf8");
|
|
175
144
|
proc.stdout.on("data", (chunk) => {
|
|
176
|
-
buffer
|
|
145
|
+
buffer += chunk;
|
|
177
146
|
for (const match of buffer.matchAll(/ASN:0x[0-9a-f]+-0x[0-9a-f]+/gi)) {
|
|
178
147
|
const asn = match[0];
|
|
179
148
|
if (!observedAsns.has(asn))
|
|
180
149
|
unresolvedAsns.add(asn);
|
|
181
150
|
}
|
|
151
|
+
// Every complete ASN above has been consumed; retain only enough overlap for a token split across chunks.
|
|
152
|
+
buffer = buffer.slice(-128);
|
|
182
153
|
resolvePending();
|
|
183
154
|
});
|
|
184
155
|
proc.once("error", markStopped);
|
|
185
156
|
proc.once("close", markStopped);
|
|
186
157
|
await new Promise((resolve) => setTimeout(resolve, 75));
|
|
187
|
-
if (!running ||
|
|
158
|
+
if (!running || !childRunning())
|
|
188
159
|
throw new Error("Target focus-event monitor failed to start");
|
|
189
160
|
return {
|
|
190
161
|
becameFrontmost: (bundleId) => {
|
|
191
162
|
resolvePending();
|
|
192
163
|
return observedBundles.has(bundleId.toLowerCase());
|
|
193
164
|
},
|
|
194
|
-
healthy: () => running &&
|
|
165
|
+
healthy: () => running && childRunning(),
|
|
195
166
|
stop: async () => {
|
|
196
|
-
if (
|
|
167
|
+
if (childRunning()) {
|
|
197
168
|
proc.kill("SIGTERM");
|
|
198
169
|
await new Promise((resolve) => {
|
|
199
170
|
const timeout = setTimeout(resolve, 1000);
|
|
@@ -202,7 +173,7 @@ export async function watchTargetFrontmost(listenerPath = "/usr/bin/lsappinfo",
|
|
|
202
173
|
resolve();
|
|
203
174
|
});
|
|
204
175
|
});
|
|
205
|
-
if (
|
|
176
|
+
if (childRunning()) {
|
|
206
177
|
proc.kill("SIGKILL");
|
|
207
178
|
await new Promise((resolve) => {
|
|
208
179
|
const timeout = setTimeout(resolve, 500);
|
|
@@ -212,6 +183,10 @@ export async function watchTargetFrontmost(listenerPath = "/usr/bin/lsappinfo",
|
|
|
212
183
|
});
|
|
213
184
|
});
|
|
214
185
|
}
|
|
186
|
+
if (childRunning()) {
|
|
187
|
+
clearInterval(retryTimer);
|
|
188
|
+
throw new Error("Target focus-event monitor did not terminate");
|
|
189
|
+
}
|
|
215
190
|
}
|
|
216
191
|
clearInterval(retryTimer);
|
|
217
192
|
// Events may arrive only while SIGTERM is draining stdout. Resolve every queued ASN before returning.
|
package/dist/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,UAAU,yBAAyB;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAChC,MAAM,GAAG,GAAG,yBAAyB,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;QAChF,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1E,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC3C,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;YAC1F,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,IAAI;SACb,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAQD,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,MAAM,eAAe,GAAG,qCAAqC,CAAC;AAE9D,SAAS,4BAA4B,CAAC,QAAgB;IACrD,IAAI,QAAQ,KAAK,oBAAoB;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE;QACxF,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,MAAM;KACf,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,WAAW,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE;QACjF,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,MAAM;KACf,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,KAAK,WAAW,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;IAC1E,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,oBAAoB,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACJ,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;gBAC/F,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;aACb,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,qCAAqC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnF,OAAO;oBACN,QAAQ;oBACR,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE;oBAC/B,wBAAwB,EAAE,4BAA4B,CAAC,QAAQ,CAAC;iBAChE,CAAC;YACH,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,QAAQ,YAAY,CAAC,WAAW,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,OAAO,EAAE,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;IACF,CAAC;IACD,MAAM,UAAU,GAAG,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG;QACd,aAAa;QACb,UAAU,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,oCAAoC;QAC3F,SAAS;KACT,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QAClH,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,qCAAqC,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzF,OAAO;YACN,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,gBAAgB,CAAC,WAAW,EAAE;YACvC,wBAAwB,EAAE,4BAA4B,CAAC,gBAAgB,CAAC;SACxE,CAAC;IACH,CAAC;IACD,IAAI,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;IAC3F,OAAO,EAAE,OAAO,EAAE,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC5C,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AACxC,CAAC;AAQD,SAAS,cAAc,CAAC,GAAW,EAAE,QAAQ,GAAG,oBAAoB;IACnE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE;QACpE,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,IAAI;KACb,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,YAAY,GAAG,oBAAoB,EACnC,QAAQ,GAAG,oBAAoB;IAE/B,iHAAiH;IACjH,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE;QAC3E,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,cAAc,GAAG,GAAG,EAAE;QAC3B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5C,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACnD,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9E,MAAM,WAAW,GAAG,GAAG,EAAE;QACxB,OAAO,GAAG,KAAK,CAAC;QAChB,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,0GAA0G;QAC1G,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5B,cAAc,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC/F,OAAO;QACN,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC7B,cAAc,EAAE,CAAC;YACjB,OAAO,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,YAAY,EAAE;QACxC,IAAI,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,YAAY,EAAE,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBACnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;wBACvB,YAAY,CAAC,OAAO,CAAC,CAAC;wBACtB,OAAO,EAAE,CAAC;oBACX,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACH,IAAI,YAAY,EAAE,EAAE,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBACnC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;wBACzC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;4BACvB,YAAY,CAAC,OAAO,CAAC,CAAC;4BACtB,OAAO,EAAE,CAAC;wBACX,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC;gBACD,IAAI,YAAY,EAAE,EAAE,CAAC;oBACpB,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACjE,CAAC;YACF,CAAC;YACD,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1B,sGAAsG;YACtG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,cAAc,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBAC7E,cAAc,EAAE,CAAC;gBACjB,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC;oBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrG,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const DIRECT_TOOL_SCHEMAS: {
|
|
3
|
+
readonly list_apps: z.ZodObject<{}, z.core.$strict>;
|
|
4
|
+
readonly get_app_state: z.ZodObject<{
|
|
5
|
+
app: z.ZodString;
|
|
6
|
+
}, z.core.$strict>;
|
|
7
|
+
readonly click: z.ZodObject<{
|
|
8
|
+
app: z.ZodString;
|
|
9
|
+
click_count: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
element_index: z.ZodOptional<z.ZodString>;
|
|
11
|
+
mouse_button: z.ZodOptional<z.ZodEnum<{
|
|
12
|
+
left: "left";
|
|
13
|
+
middle: "middle";
|
|
14
|
+
right: "right";
|
|
15
|
+
}>>;
|
|
16
|
+
x: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
y: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
}, z.core.$strict>;
|
|
19
|
+
readonly perform_secondary_action: z.ZodObject<{
|
|
20
|
+
app: z.ZodString;
|
|
21
|
+
element_index: z.ZodString;
|
|
22
|
+
action: z.ZodString;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
readonly set_value: z.ZodObject<{
|
|
25
|
+
app: z.ZodString;
|
|
26
|
+
element_index: z.ZodString;
|
|
27
|
+
value: z.ZodString;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
readonly select_text: z.ZodObject<{
|
|
30
|
+
app: z.ZodString;
|
|
31
|
+
element_index: z.ZodString;
|
|
32
|
+
text: z.ZodString;
|
|
33
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
34
|
+
selection: z.ZodOptional<z.ZodEnum<{
|
|
35
|
+
cursor_after: "cursor_after";
|
|
36
|
+
cursor_before: "cursor_before";
|
|
37
|
+
text: "text";
|
|
38
|
+
}>>;
|
|
39
|
+
suffix: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strict>;
|
|
41
|
+
readonly scroll: z.ZodObject<{
|
|
42
|
+
app: z.ZodString;
|
|
43
|
+
element_index: z.ZodString;
|
|
44
|
+
direction: z.ZodString;
|
|
45
|
+
pages: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
}, z.core.$strict>;
|
|
47
|
+
readonly drag: z.ZodObject<{
|
|
48
|
+
app: z.ZodString;
|
|
49
|
+
from_x: z.ZodNumber;
|
|
50
|
+
from_y: z.ZodNumber;
|
|
51
|
+
to_x: z.ZodNumber;
|
|
52
|
+
to_y: z.ZodNumber;
|
|
53
|
+
}, z.core.$strict>;
|
|
54
|
+
readonly press_key: z.ZodObject<{
|
|
55
|
+
app: z.ZodString;
|
|
56
|
+
key: z.ZodString;
|
|
57
|
+
}, z.core.$strict>;
|
|
58
|
+
readonly type_text: z.ZodObject<{
|
|
59
|
+
app: z.ZodString;
|
|
60
|
+
text: z.ZodString;
|
|
61
|
+
}, z.core.$strict>;
|
|
62
|
+
};
|
|
63
|
+
export type DirectMethod = keyof typeof DIRECT_TOOL_SCHEMAS;
|
|
64
|
+
export type DirectToolArguments = Record<string, unknown>;
|
|
65
|
+
export declare const OFFICIAL_METHODS: readonly ("click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text")[];
|
|
66
|
+
export interface OfficialToolMetadata {
|
|
67
|
+
description: string;
|
|
68
|
+
annotations: {
|
|
69
|
+
destructiveHint: boolean;
|
|
70
|
+
idempotentHint: boolean;
|
|
71
|
+
openWorldHint: boolean;
|
|
72
|
+
readOnlyHint: boolean;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Exact upstream descriptions and annotations exposed by the signed Computer Use helper. */
|
|
76
|
+
export declare const OFFICIAL_TOOL_METADATA: Readonly<Record<DirectMethod, OfficialToolMetadata>>;
|
|
77
|
+
export declare const READ_ONLY_METHODS: Set<"click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text">;
|
|
78
|
+
export declare const MUTATING_METHODS: Set<"click" | "drag" | "get_app_state" | "list_apps" | "perform_secondary_action" | "press_key" | "scroll" | "select_text" | "set_value" | "type_text">;
|
|
79
|
+
export declare function isDirectMethod(value: string): value is DirectMethod;
|
|
80
|
+
export declare function normalizeKeyExpression(value: string): string;
|
|
81
|
+
export declare function validateDirectArguments(method: DirectMethod, value: unknown): DirectToolArguments;
|
|
82
|
+
export declare function targetAppFor(method: DirectMethod, args: DirectToolArguments): string | undefined;
|
|
83
|
+
/** Exact upstream MCP schemas observed from the signed helper. Drift fails closed before dispatch. */
|
|
84
|
+
export declare const EXPECTED_OFFICIAL_INPUT_SCHEMAS: Readonly<Record<DirectMethod, unknown>>;
|