codex-computer-use-mcp 0.3.4 → 0.5.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.
Files changed (51) hide show
  1. package/README.md +39 -117
  2. package/SECURITY.md +5 -63
  3. package/dist/audit.d.ts +1 -7
  4. package/dist/audit.js +4 -12
  5. package/dist/audit.js.map +1 -1
  6. package/dist/code-executor.d.ts +23 -0
  7. package/dist/code-executor.js +216 -0
  8. package/dist/code-executor.js.map +1 -0
  9. package/dist/code-worker.d.ts +1 -0
  10. package/dist/code-worker.js +120 -0
  11. package/dist/code-worker.js.map +1 -0
  12. package/dist/direct-broker.d.ts +18 -30
  13. package/dist/direct-broker.js +87 -161
  14. package/dist/direct-broker.js.map +1 -1
  15. package/dist/direct-service.d.ts +13 -21
  16. package/dist/direct-service.js +82 -299
  17. package/dist/direct-service.js.map +1 -1
  18. package/dist/mcp-elicitation.d.ts +1 -2
  19. package/dist/mcp-elicitation.js +18 -23
  20. package/dist/mcp-elicitation.js.map +1 -1
  21. package/dist/mcp-server.js +34 -38
  22. package/dist/mcp-server.js.map +1 -1
  23. package/dist/session-executor.d.ts +22 -0
  24. package/dist/session-executor.js +89 -0
  25. package/dist/session-executor.js.map +1 -0
  26. package/dist/tools.d.ts +743 -81
  27. package/dist/tools.js +55 -178
  28. package/dist/tools.js.map +1 -1
  29. package/dist/version.d.ts +1 -0
  30. package/dist/version.js +3 -0
  31. package/dist/version.js.map +1 -0
  32. package/integrations/pi/index.ts +146 -261
  33. package/package.json +13 -26
  34. package/ARCHITECTURE.md +0 -162
  35. package/CHANGELOG.md +0 -19
  36. package/CONTRIBUTING.md +0 -33
  37. package/MIGRATION.md +0 -134
  38. package/PROOF.md +0 -166
  39. package/dist/config.d.ts +0 -12
  40. package/dist/config.js +0 -10
  41. package/dist/config.js.map +0 -1
  42. package/dist/lock.d.ts +0 -17
  43. package/dist/lock.js +0 -137
  44. package/dist/lock.js.map +0 -1
  45. package/dist/system.d.ts +0 -25
  46. package/dist/system.js +0 -213
  47. package/dist/system.js.map +0 -1
  48. package/docs/adr/0001-standalone-code-mode-mcp.md +0 -45
  49. package/integrations/pi/README.md +0 -73
  50. package/integrations/pi/mcp.json.example +0 -15
  51. package/npm-shrinkwrap.json +0 -4827
@@ -2,68 +2,65 @@
2
2
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from "@modelcontextprotocol/sdk/types.js";
5
- import { executeDirectTool, getDirectStatus } from "./direct-service.js";
5
+ import { z } from "zod";
6
+ import { getDirectStatus } from "./direct-service.js";
6
7
  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.3";
9
- async function handleCli() {
10
- const args = process.argv.slice(2);
11
- if (args.length === 0)
12
- return false;
13
- if (args.length === 1 && args[0] === "--status") {
14
- console.log(JSON.stringify(await getDirectStatus(), null, 2));
15
- return true;
16
- }
17
- throw new Error("Usage: codex-computer-use-mcp [--status]. The durable no-permissions interface has no alternate mode or configuration command.");
18
- }
19
- try {
20
- if (await handleCli())
8
+ import { DirectSessionExecutor } from "./session-executor.js";
9
+ import { COMPUTER_USE_METHODS, TOOL_INPUT_SCHEMAS, TOOL_METADATA, isDirectMethod, } from "./tools.js";
10
+ import { PACKAGE_VERSION } from "./version.js";
11
+ const cliArgs = process.argv.slice(2);
12
+ if (cliArgs.length > 0) {
13
+ if (cliArgs.length === 1 && cliArgs[0] === "--status") {
14
+ console.log(JSON.stringify(getDirectStatus(), null, 2));
21
15
  process.exit(0);
22
- }
23
- catch (error) {
24
- console.error(error instanceof Error ? error.message : "Invalid command");
16
+ }
17
+ console.error("Usage: codex-computer-use-mcp [--status]");
25
18
  process.exit(1);
26
19
  }
27
- const server = new Server({ name: "codex-computer-use-mcp", version }, { capabilities: { logging: {}, tools: {} } });
28
- const officialToolDefinitions = OFFICIAL_METHODS.map((method) => ({
20
+ const server = new Server({ name: "codex-computer-use-mcp", version: PACKAGE_VERSION }, { capabilities: { tools: {} } });
21
+ const sessionExecutor = new DirectSessionExecutor({ idleTimeoutMs: 120_000 });
22
+ server.onclose = () => {
23
+ void sessionExecutor.close().catch(() => { process.exitCode = 1; });
24
+ };
25
+ const toolDefinitions = COMPUTER_USE_METHODS.map((method) => ({
29
26
  name: method,
30
- description: OFFICIAL_TOOL_METADATA[method].description,
31
- inputSchema: EXPECTED_OFFICIAL_INPUT_SCHEMAS[method],
32
- annotations: OFFICIAL_TOOL_METADATA[method].annotations,
27
+ description: TOOL_METADATA[method].description,
28
+ inputSchema: TOOL_INPUT_SCHEMAS[method],
29
+ annotations: TOOL_METADATA[method].annotations,
33
30
  }));
34
31
  const statusToolDefinition = {
35
32
  name: "computer_use_status",
36
33
  title: "Computer Use Status",
37
- description: "Show direct-call architecture, durable no-permissions policy, signed broker status, supported methods, and private audit path.",
34
+ description: "Show Computer Use status.",
38
35
  inputSchema: { type: "object", properties: {}, additionalProperties: false },
39
36
  annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
40
37
  };
41
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
42
- tools: [...officialToolDefinitions, statusToolDefinition],
38
+ server.setRequestHandler(ListToolsRequestSchema, () => Promise.resolve({
39
+ tools: [...toolDefinitions, statusToolDefinition],
43
40
  }));
44
41
  server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
45
42
  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
- }
43
+ const status = getDirectStatus();
44
+ return { content: [{ type: "text", text: JSON.stringify(status, null, 2) }], structuredContent: status };
53
45
  }
54
46
  if (!isDirectMethod(request.params.name)) {
55
47
  throw new McpError(ErrorCode.InvalidParams, `Unknown tool: ${request.params.name}`);
56
48
  }
57
49
  try {
58
- const response = await executeDirectTool({ method: request.params.name, arguments: request.params.arguments ?? {} }, {
50
+ const args = z.record(z.string(), z.json()).parse(request.params.arguments ?? {});
51
+ const response = await sessionExecutor.execute(request.params.name, args, {
59
52
  signal: extra.signal,
60
53
  onElicitation: (elicitation) => forwardOfficialElicitationToMcpClient(server, elicitation, extra.signal),
61
54
  });
62
- return {
55
+ const result = {
56
+ // SAFETY: app-server returns MCP CallToolResult content blocks; the broker already verifies the JSON object envelope.
63
57
  content: response.content,
64
- structuredContent: response.details,
65
58
  isError: response.isError,
66
59
  };
60
+ const structuredContent = z.record(z.string(), z.json()).safeParse(response.structuredContent);
61
+ if (structuredContent.success)
62
+ result.structuredContent = structuredContent.data;
63
+ return result;
67
64
  }
68
65
  catch (error) {
69
66
  return {
@@ -72,6 +69,5 @@ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
72
69
  };
73
70
  }
74
71
  });
75
- const transport = new StdioServerTransport();
76
- await server.connect(transport);
72
+ await server.connect(new StdioServerTransport());
77
73
  //# sourceMappingURL=mcp-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { createOfficialDirectToolSession } from "./direct-broker.ts";
2
+ import { type DirectResponse, type DirectServiceDependencies } from "./direct-service.ts";
3
+ import type { DirectMethod, DirectToolArguments } from "./tools.ts";
4
+ interface DirectSessionExecutorDependencies {
5
+ createSession?: typeof createOfficialDirectToolSession;
6
+ idleTimeoutMs?: number;
7
+ }
8
+ export declare class DirectSessionExecutor {
9
+ private queue;
10
+ private session?;
11
+ private idleTimer?;
12
+ private idleFailure?;
13
+ private readonly dependencies;
14
+ constructor(dependencies?: DirectSessionExecutorDependencies);
15
+ private runExclusive;
16
+ private clearIdleTimer;
17
+ private closeSession;
18
+ private scheduleIdleClose;
19
+ execute(method: DirectMethod, params: DirectToolArguments, dependencies: DirectServiceDependencies): Promise<DirectResponse>;
20
+ close(): Promise<void>;
21
+ }
22
+ export {};
@@ -0,0 +1,89 @@
1
+ import { createOfficialDirectToolSession, } from "./direct-broker.js";
2
+ import { executeDirectTool, } from "./direct-service.js";
3
+ export class DirectSessionExecutor {
4
+ queue = Promise.resolve();
5
+ session;
6
+ idleTimer;
7
+ idleFailure;
8
+ dependencies;
9
+ constructor(dependencies = {}) {
10
+ this.dependencies = dependencies;
11
+ }
12
+ runExclusive(operation) {
13
+ const result = this.queue.then(operation);
14
+ this.queue = result.then(() => undefined, () => undefined);
15
+ return result;
16
+ }
17
+ clearIdleTimer() {
18
+ if (this.idleTimer)
19
+ clearTimeout(this.idleTimer);
20
+ this.idleTimer = undefined;
21
+ }
22
+ async closeSession() {
23
+ this.clearIdleTimer();
24
+ const session = this.session;
25
+ this.session = undefined;
26
+ await session?.close();
27
+ }
28
+ scheduleIdleClose() {
29
+ this.clearIdleTimer();
30
+ if (!this.dependencies.idleTimeoutMs || !this.session)
31
+ return;
32
+ const timer = setTimeout(() => {
33
+ void this.runExclusive(async () => {
34
+ if (this.idleTimer !== timer)
35
+ return;
36
+ await this.closeSession();
37
+ }).catch((error) => {
38
+ this.idleFailure = error instanceof Error ? error : new Error(String(error));
39
+ });
40
+ }, this.dependencies.idleTimeoutMs);
41
+ this.idleTimer = timer;
42
+ timer.unref();
43
+ }
44
+ async execute(method, params, dependencies) {
45
+ return this.runExclusive(async () => {
46
+ if (this.idleFailure) {
47
+ const failure = this.idleFailure;
48
+ this.idleFailure = undefined;
49
+ throw failure;
50
+ }
51
+ this.clearIdleTimer();
52
+ const session = this.session;
53
+ try {
54
+ const response = await executeDirectTool({ method, arguments: params }, session ? {
55
+ ...dependencies,
56
+ callTool: (directMethod, args, options) => session.call(directMethod, args, options),
57
+ } : method === "get_app_state" ? {
58
+ ...dependencies,
59
+ callTool: async (directMethod, args, options) => {
60
+ this.session = await (this.dependencies.createSession ?? createOfficialDirectToolSession)({
61
+ supportsOpenAiFormElicitation: dependencies.supportsOpenAiFormElicitation === true,
62
+ });
63
+ return this.session.call(directMethod, args, options);
64
+ },
65
+ } : dependencies);
66
+ if (response.isError)
67
+ await this.closeSession();
68
+ else
69
+ this.scheduleIdleClose();
70
+ return response;
71
+ }
72
+ catch (error) {
73
+ await this.closeSession();
74
+ throw error;
75
+ }
76
+ });
77
+ }
78
+ async close() {
79
+ await this.runExclusive(async () => {
80
+ await this.closeSession();
81
+ if (this.idleFailure) {
82
+ const failure = this.idleFailure;
83
+ this.idleFailure = undefined;
84
+ throw failure;
85
+ }
86
+ });
87
+ }
88
+ }
89
+ //# sourceMappingURL=session-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-executor.js","sourceRoot":"","sources":["../src/session-executor.ts"],"names":[],"mappings":"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"}