@evalops/maestro 0.10.46 → 0.10.48

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 (152) hide show
  1. package/README.md +4 -0
  2. package/dist/agent/providers/openai-codex-session.js +1 -1
  3. package/dist/agent/providers/openai-codex-session.js.map +1 -1
  4. package/dist/app-server/in-process-client.d.ts +2 -2
  5. package/dist/app-server/in-process-client.js.map +1 -1
  6. package/dist/app-server/protocol-modes-api.js +1 -1
  7. package/dist/app-server/protocol-modes-api.js.map +1 -1
  8. package/dist/app-server/sandbox-check-api.d.ts +21 -0
  9. package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
  10. package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
  11. package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
  12. package/dist/app-server/session-api.d.ts +5 -5
  13. package/dist/app-server/session-api.js +18 -18
  14. package/dist/app-server/session-api.js.map +1 -1
  15. package/dist/audit/logger.d.ts +1 -1
  16. package/dist/cli/args.d.ts.map +1 -1
  17. package/dist/cli/args.js +3 -1
  18. package/dist/cli/args.js.map +1 -1
  19. package/dist/cli/commands/codex.js +30 -3
  20. package/dist/cli/commands/codex.js.map +1 -1
  21. package/dist/cli/commands/update.d.ts +12 -0
  22. package/dist/cli/commands/update.d.ts.map +1 -0
  23. package/dist/cli/commands/update.js +148 -0
  24. package/dist/cli/commands/update.js.map +1 -0
  25. package/dist/cli/help.d.ts.map +1 -1
  26. package/dist/cli/help.js +4 -0
  27. package/dist/cli/help.js.map +1 -1
  28. package/dist/cli-tui/auth-state.d.ts +7 -0
  29. package/dist/cli-tui/auth-state.d.ts.map +1 -0
  30. package/dist/cli-tui/auth-state.js +46 -0
  31. package/dist/cli-tui/auth-state.js.map +1 -0
  32. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  33. package/dist/cli-tui/commands/command-catalog.js +8 -3
  34. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  35. package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
  36. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
  37. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
  38. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
  39. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  40. package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
  41. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  42. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +1 -1
  43. package/dist/cli-tui/commands/subcommands/ui-commands.js +2 -2
  44. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -1
  45. package/dist/cli-tui/footer.d.ts.map +1 -1
  46. package/dist/cli-tui/footer.js +1 -1
  47. package/dist/cli-tui/footer.js.map +1 -1
  48. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  49. package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
  50. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  51. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
  52. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  53. package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
  54. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  55. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
  56. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  57. package/dist/cli-tui/selectors/oauth-selector.js +25 -2
  58. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  59. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
  60. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
  61. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
  62. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
  63. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +1 -1
  64. package/dist/cli-tui/tui-renderer/ui-state-controller.js +5 -11
  65. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
  66. package/dist/cli-tui/tui-renderer.d.ts +0 -4
  67. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  68. package/dist/cli-tui/tui-renderer.js +4 -29
  69. package/dist/cli-tui/tui-renderer.js.map +1 -1
  70. package/dist/cli-tui/ui-state.js +1 -1
  71. package/dist/cli-tui/ui-state.js.map +1 -1
  72. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  73. package/dist/cli-tui/utils/footer-utils.d.ts.map +1 -1
  74. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  75. package/dist/cli.js +4800 -3779
  76. package/dist/cli.js.map +1 -1
  77. package/dist/codex/app-server-client.d.ts +16 -2
  78. package/dist/codex/app-server-client.d.ts.map +1 -1
  79. package/dist/codex/app-server-client.js +67 -7
  80. package/dist/codex/app-server-client.js.map +1 -1
  81. package/dist/codex/auth.d.ts +4 -0
  82. package/dist/codex/auth.d.ts.map +1 -0
  83. package/dist/codex/auth.js +103 -0
  84. package/dist/codex/auth.js.map +1 -0
  85. package/dist/db/schema.d.ts +1 -1
  86. package/dist/evalops/agent-bootstrap.js +2 -2
  87. package/dist/evalops/agent-bootstrap.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +10 -1
  90. package/dist/main.js.map +1 -1
  91. package/dist/models/config-loader.d.ts +12 -12
  92. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
  93. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  94. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
  95. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  96. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts +2 -0
  97. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -1
  98. package/dist/node_modules/@evalops/contracts/dist/scenario.js.map +1 -1
  99. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  100. package/dist/node_modules/@evalops/tui/package.json +1 -1
  101. package/dist/oauth/index.d.ts +1 -0
  102. package/dist/oauth/index.d.ts.map +1 -1
  103. package/dist/oauth/index.js +42 -2
  104. package/dist/oauth/index.js.map +1 -1
  105. package/dist/platform/operating-plane-client.d.ts +3 -3
  106. package/dist/platform/operating-plane-client.d.ts.map +1 -1
  107. package/dist/platform/operating-plane-client.js.map +1 -1
  108. package/dist/platform/operating-plane-summary.js +3 -6
  109. package/dist/platform/operating-plane-summary.js.map +1 -1
  110. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -1
  111. package/dist/server/agent-trajectory-scenarios.js +29 -6
  112. package/dist/server/agent-trajectory-scenarios.js.map +1 -1
  113. package/dist/server/app-context.d.ts +2 -0
  114. package/dist/server/app-context.d.ts.map +1 -1
  115. package/dist/server/app-context.js.map +1 -1
  116. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  117. package/dist/server/handlers/headless-sessions.js +44 -10
  118. package/dist/server/handlers/headless-sessions.js.map +1 -1
  119. package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
  120. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  121. package/dist/server/handlers/hosted-runner-identity.js +2 -0
  122. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  123. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  124. package/dist/server/handlers/platform-a2a-push.js +113 -2
  125. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  126. package/dist/server/handlers/ui.d.ts.map +1 -1
  127. package/dist/server/handlers/ui.js +5 -5
  128. package/dist/server/handlers/ui.js.map +1 -1
  129. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  130. package/dist/server/headless-in-process-host.js +1 -1
  131. package/dist/server/headless-in-process-host.js.map +1 -1
  132. package/dist/server/headless-runtime-service.d.ts +9 -2
  133. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  134. package/dist/server/headless-runtime-service.js +54 -15
  135. package/dist/server/headless-runtime-service.js.map +1 -1
  136. package/dist/server/stores/ui-store.d.ts.map +1 -1
  137. package/dist/server/stores/ui-store.js +8 -1
  138. package/dist/server/stores/ui-store.js.map +1 -1
  139. package/dist/tools/background/task-runtime.js +1 -1
  140. package/dist/tools/background/task-runtime.js.map +1 -1
  141. package/dist/tools/background/task-types.d.ts +1 -1
  142. package/dist/update/check.d.ts +2 -0
  143. package/dist/update/check.d.ts.map +1 -1
  144. package/dist/update/check.js +100 -41
  145. package/dist/update/check.js.map +1 -1
  146. package/dist/update/startup-refresh.d.ts +56 -0
  147. package/dist/update/startup-refresh.d.ts.map +1 -0
  148. package/dist/update/startup-refresh.js +321 -0
  149. package/dist/update/startup-refresh.js.map +1 -0
  150. package/dist/version.json +2 -2
  151. package/package.json +297 -296
  152. package/dist/app-server/sandbox-proof-api.d.ts +0 -21
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n// Suppress punycode deprecation warning from dependencies\n// This warning comes from old dependencies still using the deprecated punycode module\nconst originalEmit = process.emit.bind(process) as (\n\tevent: string | symbol,\n\t...args: unknown[]\n) => boolean;\nprocess.emit = ((event: string | symbol, ...args: unknown[]) => {\n\tif (event === \"warning\") {\n\t\tconst [firstArg] = args;\n\t\tif (\n\t\t\ttypeof firstArg === \"object\" &&\n\t\t\tfirstArg !== null &&\n\t\t\t\"name\" in firstArg &&\n\t\t\t\"code\" in firstArg &&\n\t\t\t(firstArg as { name?: string; code?: string }).name ===\n\t\t\t\t\"DeprecationWarning\" &&\n\t\t\t(firstArg as { name?: string; code?: string }).code === \"DEP0040\"\n\t\t) {\n\t\t\treturn false; // Suppress punycode deprecation\n\t\t}\n\t}\n\treturn originalEmit(event, ...args);\n}) as typeof process.emit;\n\nfunction isHeadlessInvocation(args: string[]): boolean {\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--headless\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (arg === \"--mode\" && args[i + 1] === \"headless\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (\n\t\t\targ?.startsWith(\"--mode=\") &&\n\t\t\targ.slice(\"--mode=\".length) === \"headless\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction emitHeadlessStartupError(error: unknown): void {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = error instanceof Error ? error.stack : undefined;\n\ttry {\n\t\tprocess.stdout.write(\n\t\t\t`${JSON.stringify({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Headless startup failed: ${message}`,\n\t\t\t\tfatal: true,\n\t\t\t\terror_type: \"fatal\",\n\t\t\t})}\\n`,\n\t\t);\n\t} catch {\n\t\t// If stdout is unavailable there is no protocol channel left to use.\n\t}\n\tprocess.stderr.write(`${stack ?? message}\\n`);\n}\n\nasync function reportFatalCliError(error: unknown): Promise<void> {\n\ttry {\n\t\tconst { captureSentryException, flushSentry, initSentry } = await import(\n\t\t\t\"./sentry.js\"\n\t\t);\n\t\tinitSentry(\"maestro-cli\");\n\t\tcaptureSentryException(error);\n\t\tawait flushSentry();\n\t} catch {\n\t\t// Sentry reporting is best-effort and must not mask the original failure.\n\t}\n}\n\nconst run = async () => {\n\ttry {\n\t\tif (process.argv[2] === \"a2a\") {\n\t\t\tconst { loadEnv } = await import(\"./load-env.js\");\n\t\t\tloadEnv();\n\t\t\tconst { handleA2ACommand } = await import(\"./cli/commands/a2a.js\");\n\t\t\tawait handleA2ACommand(process.argv.slice(3));\n\t\t\treturn;\n\t\t}\n\n\t\t// Prefer the TypeScript entry when running under Bun during development,\n\t\t// but fall back to the compiled JS for bundled/compiled binaries.\n\t\tconst loadMain = async () => {\n\t\t\tif (process.versions?.bun) {\n\t\t\t\tconst tsEntry = \"./main.\" + \"ts\";\n\t\t\t\ttry {\n\t\t\t\t\treturn await import(tsEntry);\n\t\t\t\t} catch {\n\t\t\t\t\t// In compiled binaries the .ts source isn't present; use JS output.\n\t\t\t\t\treturn await import(\"./main.js\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await import(\"./main.js\");\n\t\t};\n\n\t\tconst { main } = await loadMain();\n\t\tawait main(process.argv.slice(2));\n\t} catch (err) {\n\t\tif (isHeadlessInvocation(process.argv.slice(2))) {\n\t\t\temitHeadlessStartupError(err);\n\t\t} else {\n\t\t\tconsole.error(err);\n\t\t}\n\t\tawait reportFatalCliError(err);\n\t\tprocess.exit(1);\n\t}\n};\n\n// Call without top-level await so Bun's bytecode compilation (which forbids TLA) can bundle this entry.\nvoid run();\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n// Suppress punycode deprecation warning from dependencies\n// This warning comes from old dependencies still using the deprecated punycode module\nconst originalEmit = process.emit.bind(process) as (\n\tevent: string | symbol,\n\t...args: unknown[]\n) => boolean;\nprocess.emit = ((event: string | symbol, ...args: unknown[]) => {\n\tif (event === \"warning\") {\n\t\tconst [firstArg] = args;\n\t\tif (\n\t\t\ttypeof firstArg === \"object\" &&\n\t\t\tfirstArg !== null &&\n\t\t\t\"name\" in firstArg &&\n\t\t\t\"code\" in firstArg &&\n\t\t\t(firstArg as { name?: string; code?: string }).name ===\n\t\t\t\t\"DeprecationWarning\" &&\n\t\t\t(firstArg as { name?: string; code?: string }).code === \"DEP0040\"\n\t\t) {\n\t\t\treturn false; // Suppress punycode deprecation\n\t\t}\n\t}\n\treturn originalEmit(event, ...args);\n}) as typeof process.emit;\n\nfunction isHeadlessInvocation(args: string[]): boolean {\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg === \"--headless\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (arg === \"--mode\" && args[i + 1] === \"headless\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (\n\t\t\targ?.startsWith(\"--mode=\") &&\n\t\t\targ.slice(\"--mode=\".length) === \"headless\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction emitHeadlessStartupError(error: unknown): void {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = error instanceof Error ? error.stack : undefined;\n\ttry {\n\t\tprocess.stdout.write(\n\t\t\t`${JSON.stringify({\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Headless startup failed: ${message}`,\n\t\t\t\tfatal: true,\n\t\t\t\terror_type: \"fatal\",\n\t\t\t})}\\n`,\n\t\t);\n\t} catch {\n\t\t// If stdout is unavailable there is no protocol channel left to use.\n\t}\n\tprocess.stderr.write(`${stack ?? message}\\n`);\n}\n\nasync function reportFatalCliError(error: unknown): Promise<void> {\n\ttry {\n\t\tconst { captureSentryException, flushSentry, initSentry } = await import(\n\t\t\t\"./sentry.js\"\n\t\t);\n\t\tinitSentry(\"maestro-cli\");\n\t\tcaptureSentryException(error);\n\t\tawait flushSentry();\n\t} catch {\n\t\t// Sentry reporting is best-effort and must not mask the original failure.\n\t}\n}\n\nasync function refreshInstalledCliOnStartup(args: string[]): Promise<void> {\n\ttry {\n\t\tconst [{ getPackageVersion }, { attemptStartupUpdate }] = await Promise.all(\n\t\t\t[import(\"./package-metadata.js\"), import(\"./update/startup-refresh.js\")],\n\t\t);\n\t\tconst outcome = await attemptStartupUpdate({\n\t\t\targs,\n\t\t\tcurrentVersion: getPackageVersion(),\n\t\t});\n\t\tif (outcome.status === \"restarted\") {\n\t\t\tprocess.exit(outcome.exitCode);\n\t\t}\n\t} catch {\n\t\t// Startup refresh is best-effort and must never prevent the CLI from booting.\n\t}\n}\n\nconst run = async () => {\n\ttry {\n\t\tconst { loadEnv } = await import(\"./load-env.js\");\n\t\tloadEnv();\n\t\tawait refreshInstalledCliOnStartup(process.argv.slice(2));\n\n\t\tif (process.argv[2] === \"a2a\") {\n\t\t\tconst { handleA2ACommand } = await import(\"./cli/commands/a2a.js\");\n\t\t\tawait handleA2ACommand(process.argv.slice(3));\n\t\t\treturn;\n\t\t}\n\n\t\t// Prefer the TypeScript entry when running under Bun during development,\n\t\t// but fall back to the compiled JS for bundled/compiled binaries.\n\t\tconst loadMain = async () => {\n\t\t\tif (process.versions?.bun) {\n\t\t\t\tconst tsEntry = \"./main.\" + \"ts\";\n\t\t\t\ttry {\n\t\t\t\t\treturn await import(tsEntry);\n\t\t\t\t} catch {\n\t\t\t\t\t// In compiled binaries the .ts source isn't present; use JS output.\n\t\t\t\t\treturn await import(\"./main.js\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn await import(\"./main.js\");\n\t\t};\n\n\t\tconst { main } = await loadMain();\n\t\tawait main(process.argv.slice(2));\n\t} catch (err) {\n\t\tif (isHeadlessInvocation(process.argv.slice(2))) {\n\t\t\temitHeadlessStartupError(err);\n\t\t} else {\n\t\t\tconsole.error(err);\n\t\t}\n\t\tawait reportFatalCliError(err);\n\t\tprocess.exit(1);\n\t}\n};\n\n// Call without top-level await so Bun's bytecode compilation (which forbids TLA) can bundle this entry.\nvoid run();\n"]}
@@ -51,6 +51,8 @@ export type CodexLoginStartResult = {
51
51
  loginId: string;
52
52
  verificationUrl: string;
53
53
  userCode: string;
54
+ } | {
55
+ type: "chatgptAuthTokens";
54
56
  } | {
55
57
  type: string;
56
58
  [key: string]: unknown;
@@ -92,11 +94,18 @@ export interface CodexAppServerClientLike {
92
94
  onNotification(listener: (notification: CodexAppServerNotification) => void): () => void;
93
95
  onRequest(listener: CodexAppServerRequestHandler): () => void;
94
96
  readAccount(refreshToken?: boolean): Promise<CodexAccountReadResult>;
95
- startChatGptLogin(flow?: "browser" | "device"): Promise<CodexLoginStartResult>;
97
+ startChatGptLogin(flow?: "browser" | "device", options?: {
98
+ codexStreamlinedLogin?: boolean;
99
+ }): Promise<CodexLoginStartResult>;
96
100
  waitForLoginCompletion(loginId: string, timeoutMs?: number): Promise<CodexLoginCompletedNotification>;
97
101
  logout(): Promise<void>;
98
102
  close(): void;
99
103
  }
104
+ export interface CodexAppServerSpawnCommand {
105
+ command: string;
106
+ args: string[];
107
+ source: "override" | "bundled-package" | "path";
108
+ }
100
109
  export declare class CodexAppServerRpcClient implements CodexAppServerClientLike {
101
110
  private readonly transport;
102
111
  private readonly options;
@@ -111,6 +120,7 @@ export declare class CodexAppServerRpcClient implements CodexAppServerClientLike
111
120
  private closed;
112
121
  constructor(transport: CodexAppServerTransport, options?: {
113
122
  requestTimeoutMs?: number;
123
+ commandLabel?: string;
114
124
  });
115
125
  static spawn(options?: CreateCodexAppServerClientOptions): CodexAppServerRpcClient;
116
126
  initialize(options?: CodexAppServerInitializeOptions): Promise<unknown>;
@@ -122,7 +132,9 @@ export declare class CodexAppServerRpcClient implements CodexAppServerClientLike
122
132
  onRequest(listener: CodexAppServerRequestHandler): () => void;
123
133
  waitForNotification<TParams = unknown>(predicate: (notification: CodexAppServerNotification) => boolean, timeoutMs?: number): Promise<CodexAppServerNotification<TParams>>;
124
134
  readAccount(refreshToken?: boolean): Promise<CodexAccountReadResult>;
125
- startChatGptLogin(flow?: "browser" | "device"): Promise<CodexLoginStartResult>;
135
+ startChatGptLogin(flow?: "browser" | "device", options?: {
136
+ codexStreamlinedLogin?: boolean;
137
+ }): Promise<CodexLoginStartResult>;
126
138
  waitForLoginCompletion(loginId: string, timeoutMs?: number): Promise<CodexLoginCompletedNotification>;
127
139
  logout(): Promise<void>;
128
140
  close(): void;
@@ -135,5 +147,7 @@ export declare class CodexAppServerRpcClient implements CodexAppServerClientLike
135
147
  private rejectAll;
136
148
  }
137
149
  export declare function createCodexAppServerClient(options?: CreateCodexAppServerClientOptions): CodexAppServerRpcClient;
150
+ export declare function resolveCodexAppServerSpawnCommand(options?: Pick<CreateCodexAppServerClientOptions, "command" | "args">, resolveBundledBin?: () => string | null): CodexAppServerSpawnCommand;
151
+ export declare function resolveBundledCodexBinPath(): string | null;
138
152
  export {};
139
153
  //# sourceMappingURL=app-server-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../src/codex/app-server-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-server-client.d.ts","sourceRoot":"","sources":["../../src/codex/app-server-client.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,19 @@
1
1
  import { spawn as spawnChild } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join } from "node:path";
2
4
  import { createInterface } from "node:readline";
3
5
  import { readPackageVersion } from "../package-version.js";
4
6
  const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
5
7
  const DEFAULT_LOGIN_TIMEOUT_MS = 5 * 60_000;
6
8
  const MAX_NOTIFICATION_HISTORY = 100;
9
+ const DEFAULT_CODEX_COMMAND = "codex";
10
+ const DEFAULT_CODEX_APP_SERVER_ARGS = ["app-server", "--listen", "stdio://"];
7
11
  const DEFAULT_CLIENT_INFO = {
8
12
  name: "maestro",
9
13
  title: "Maestro",
10
14
  version: readPackageVersion(),
11
15
  };
16
+ const moduleRequire = createRequire(import.meta.url);
12
17
  export class CodexAppServerRpcClient {
13
18
  constructor(transport, options = {}) {
14
19
  this.transport = transport;
@@ -33,14 +38,13 @@ export class CodexAppServerRpcClient {
33
38
  });
34
39
  transport.once?.("error", (error) => {
35
40
  const message = error instanceof Error
36
- ? error.message
41
+ ? formatTransportError(error, this.options.commandLabel)
37
42
  : `Process error: ${String(error)}`;
38
43
  this.rejectAll(message);
39
44
  });
40
45
  }
41
46
  static spawn(options = {}) {
42
- const command = options.command ?? "codex";
43
- const args = options.args ?? ["app-server", "--listen", "stdio://"];
47
+ const { command, args, source } = resolveCodexAppServerSpawnCommand(options);
44
48
  const child = spawnChild(command, args, {
45
49
  cwd: options.cwd,
46
50
  env: options.env ?? process.env,
@@ -48,6 +52,9 @@ export class CodexAppServerRpcClient {
48
52
  });
49
53
  return new CodexAppServerRpcClient(child, {
50
54
  requestTimeoutMs: options.requestTimeoutMs,
55
+ commandLabel: source === "bundled-package"
56
+ ? "@openai/codex"
57
+ : [command, ...args].join(" "),
51
58
  });
52
59
  }
53
60
  async initialize(options = {}) {
@@ -144,10 +151,14 @@ export class CodexAppServerRpcClient {
144
151
  readAccount(refreshToken = false) {
145
152
  return this.request("account/read", { refreshToken });
146
153
  }
147
- startChatGptLogin(flow = "browser") {
148
- return this.request("account/login/start", {
149
- type: flow === "device" ? "chatgptDeviceCode" : "chatgpt",
150
- });
154
+ startChatGptLogin(flow = "browser", options = {}) {
155
+ const params = flow === "device"
156
+ ? { type: "chatgptDeviceCode" }
157
+ : {
158
+ type: "chatgpt",
159
+ codexStreamlinedLogin: options.codexStreamlinedLogin || undefined,
160
+ };
161
+ return this.request("account/login/start", params);
151
162
  }
152
163
  async waitForLoginCompletion(loginId, timeoutMs = DEFAULT_LOGIN_TIMEOUT_MS) {
153
164
  const notification = await this.waitForNotification((candidate) => candidate.method === "account/login/completed" &&
@@ -229,6 +240,16 @@ export class CodexAppServerRpcClient {
229
240
  method: request.method,
230
241
  params: request.params,
231
242
  });
243
+ if (request.method === "account/chatgptAuthTokens/refresh") {
244
+ this.writeMessage({
245
+ id: request.id,
246
+ error: {
247
+ code: -32601,
248
+ message: "Maestro does not manage Codex ChatGPT auth tokens directly. Run `maestro codex login` or `codex login` so Codex app-server owns ChatGPT auth refresh.",
249
+ },
250
+ });
251
+ return;
252
+ }
232
253
  for (const handler of Array.from(this.requestHandlers)) {
233
254
  try {
234
255
  const handled = await handler(request);
@@ -324,6 +345,37 @@ export class CodexAppServerRpcClient {
324
345
  export function createCodexAppServerClient(options = {}) {
325
346
  return CodexAppServerRpcClient.spawn(options);
326
347
  }
348
+ export function resolveCodexAppServerSpawnCommand(options = {}, resolveBundledBin = resolveBundledCodexBinPath) {
349
+ const args = options.args ?? DEFAULT_CODEX_APP_SERVER_ARGS;
350
+ if (options.command) {
351
+ return { command: options.command, args, source: "override" };
352
+ }
353
+ const bundledCodexBin = resolveBundledBin();
354
+ if (bundledCodexBin) {
355
+ return {
356
+ command: process.execPath,
357
+ args: [bundledCodexBin, ...args],
358
+ source: "bundled-package",
359
+ };
360
+ }
361
+ return { command: DEFAULT_CODEX_COMMAND, args, source: "path" };
362
+ }
363
+ export function resolveBundledCodexBinPath() {
364
+ try {
365
+ return moduleRequire.resolve("@openai/codex/bin/codex.js");
366
+ }
367
+ catch {
368
+ // Some package managers enforce package exports more strictly; fall back to
369
+ // package.json resolution and the published bin layout.
370
+ }
371
+ try {
372
+ const packageJsonPath = moduleRequire.resolve("@openai/codex/package.json");
373
+ return join(dirname(packageJsonPath), "bin", "codex.js");
374
+ }
375
+ catch {
376
+ return null;
377
+ }
378
+ }
327
379
  function isRecord(value) {
328
380
  return Boolean(value && typeof value === "object" && !Array.isArray(value));
329
381
  }
@@ -349,4 +401,12 @@ function defaultServerRequestResponse(method) {
349
401
  return { ok: false };
350
402
  }
351
403
  }
404
+ function formatTransportError(error, commandLabel) {
405
+ const code = error.code;
406
+ if (code === "ENOENT") {
407
+ const command = commandLabel ? ` (${commandLabel})` : "";
408
+ return `Codex app-server executable was not found${command}. Maestro uses the bundled @openai/codex package when installed and falls back to a codex binary on PATH; run your package manager install in this checkout or install Codex with \`npm install -g @openai/codex\`.`;
409
+ }
410
+ return error.message;
411
+ }
352
412
  //# sourceMappingURL=app-server-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../src/codex/app-server-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn as spawnChild } from \"node:child_process\";\nimport type { ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\nimport type { Interface as ReadlineInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { readPackageVersion } from \"../package-version.js\";\n\ntype JsonRpcId = number | string;\n\nexport interface CodexAppServerTransport {\n\tstdin: Writable;\n\tstdout: Readable;\n\tstderr?: Readable | null;\n\tkill?: (signal?: NodeJS.Signals | number) => boolean;\n\ton?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n\tonce?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface CodexAppServerClientInfo {\n\tname: string;\n\ttitle?: string;\n\tversion?: string;\n}\n\nexport interface CodexAppServerInitializeOptions {\n\tclientInfo?: CodexAppServerClientInfo;\n\texperimentalApi?: boolean;\n\toptOutNotificationMethods?: string[];\n\ttimeoutMs?: number;\n}\n\nexport interface CreateCodexAppServerClientOptions {\n\tcommand?: string;\n\targs?: string[];\n\tcwd?: string;\n\tenv?: NodeJS.ProcessEnv;\n\trequestTimeoutMs?: number;\n}\n\nexport type CodexAccount =\n\t| { type: \"apiKey\" }\n\t| { type: \"chatgpt\"; email: string; planType: string }\n\t| { type: string; [key: string]: unknown };\n\nexport interface CodexAccountReadResult {\n\taccount: CodexAccount | null;\n\trequiresOpenaiAuth: boolean;\n}\n\nexport type CodexLoginStartResult =\n\t| { type: \"apiKey\" }\n\t| { type: \"chatgpt\"; loginId: string; authUrl: string }\n\t| {\n\t\t\ttype: \"chatgptDeviceCode\";\n\t\t\tloginId: string;\n\t\t\tverificationUrl: string;\n\t\t\tuserCode: string;\n\t }\n\t| { type: string; [key: string]: unknown };\n\nexport interface CodexLoginCompletedNotification {\n\tloginId: string | null;\n\tsuccess: boolean;\n\terror: string | null;\n}\n\nexport interface CodexAppServerNotification<TParams = unknown> {\n\tmethod: string;\n\tparams?: TParams;\n}\n\nexport interface CodexAppServerRequest<TParams = unknown> {\n\tid: JsonRpcId;\n\tmethod: string;\n\tparams?: TParams;\n}\n\nexport type CodexAppServerRequestHandlerResult =\n\t| {\n\t\t\thandled: true;\n\t\t\tresult?: unknown;\n\t }\n\t| {\n\t\t\thandled: true;\n\t\t\terror: {\n\t\t\t\tcode?: number;\n\t\t\t\tmessage: string;\n\t\t\t\tdata?: unknown;\n\t\t\t};\n\t }\n\t| {\n\t\t\thandled: false;\n\t };\n\nexport type CodexAppServerRequestHandler = (\n\trequest: CodexAppServerRequest,\n) =>\n\t| CodexAppServerRequestHandlerResult\n\t| Promise<CodexAppServerRequestHandlerResult>;\n\nexport interface CodexAppServerClientLike {\n\tinitialize(options?: CodexAppServerInitializeOptions): Promise<unknown>;\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: { timeoutMs?: number },\n\t): Promise<TResult>;\n\tnotify(method: string, params?: unknown): void;\n\tonNotification(\n\t\tlistener: (notification: CodexAppServerNotification) => void,\n\t): () => void;\n\tonRequest(listener: CodexAppServerRequestHandler): () => void;\n\treadAccount(refreshToken?: boolean): Promise<CodexAccountReadResult>;\n\tstartChatGptLogin(\n\t\tflow?: \"browser\" | \"device\",\n\t): Promise<CodexLoginStartResult>;\n\twaitForLoginCompletion(\n\t\tloginId: string,\n\t\ttimeoutMs?: number,\n\t): Promise<CodexLoginCompletedNotification>;\n\tlogout(): Promise<void>;\n\tclose(): void;\n}\n\ninterface PendingRequest {\n\tresolve: (value: unknown) => void;\n\treject: (error: Error) => void;\n\ttimer: NodeJS.Timeout;\n}\n\ninterface PendingNotification {\n\treject: (error: Error) => void;\n\ttimer: NodeJS.Timeout;\n\tunsubscribe: () => void;\n}\n\ninterface JsonRpcResponse {\n\tid?: JsonRpcId;\n\tresult?: unknown;\n\terror?: {\n\t\tcode?: number;\n\t\tmessage?: string;\n\t\tdata?: unknown;\n\t};\n}\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst DEFAULT_LOGIN_TIMEOUT_MS = 5 * 60_000;\nconst MAX_NOTIFICATION_HISTORY = 100;\nconst DEFAULT_CLIENT_INFO: CodexAppServerClientInfo = {\n\tname: \"maestro\",\n\ttitle: \"Maestro\",\n\tversion: readPackageVersion(),\n};\n\nexport class CodexAppServerRpcClient implements CodexAppServerClientLike {\n\tprivate readonly pending = new Map<JsonRpcId, PendingRequest>();\n\tprivate readonly notificationListeners = new Set<\n\t\t(notification: CodexAppServerNotification) => void\n\t>();\n\tprivate readonly notificationHistory: CodexAppServerNotification[] = [];\n\tprivate readonly notificationWaiters = new Set<PendingNotification>();\n\tprivate readonly requestHandlers = new Set<CodexAppServerRequestHandler>();\n\tprivate readonly stderrTail: string[] = [];\n\tprivate readonly rl: ReadlineInterface;\n\tprivate nextId = 1;\n\tprivate closed = false;\n\n\tconstructor(\n\t\tprivate readonly transport: CodexAppServerTransport,\n\t\tprivate readonly options: { requestTimeoutMs?: number } = {},\n\t) {\n\t\tthis.rl = createInterface({ input: transport.stdout });\n\t\tthis.rl.on(\"line\", (line) => this.handleLine(line));\n\t\tthis.rl.on(\"close\", () => this.rejectAll(\"Codex app-server closed stdout\"));\n\t\ttransport.stderr?.on(\"data\", (chunk) => this.captureStderr(chunk));\n\t\ttransport.once?.(\"exit\", (code, signal) => {\n\t\t\tconst suffix =\n\t\t\t\tcode === null || code === undefined\n\t\t\t\t\t? `signal ${String(signal)}`\n\t\t\t\t\t: `code ${String(code)}`;\n\t\t\tthis.rejectAll(`Codex app-server exited with ${suffix}`);\n\t\t});\n\t\ttransport.once?.(\"error\", (error) => {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? error.message\n\t\t\t\t\t: `Process error: ${String(error)}`;\n\t\t\tthis.rejectAll(message);\n\t\t});\n\t}\n\n\tstatic spawn(\n\t\toptions: CreateCodexAppServerClientOptions = {},\n\t): CodexAppServerRpcClient {\n\t\tconst command = options.command ?? \"codex\";\n\t\tconst args = options.args ?? [\"app-server\", \"--listen\", \"stdio://\"];\n\t\tconst child: ChildProcessWithoutNullStreams = spawnChild(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env ?? process.env,\n\t\t\tstdio: \"pipe\",\n\t\t});\n\t\treturn new CodexAppServerRpcClient(child, {\n\t\t\trequestTimeoutMs: options.requestTimeoutMs,\n\t\t});\n\t}\n\n\tasync initialize(\n\t\toptions: CodexAppServerInitializeOptions = {},\n\t): Promise<unknown> {\n\t\tconst capabilities =\n\t\t\toptions.experimentalApi || options.optOutNotificationMethods?.length\n\t\t\t\t? {\n\t\t\t\t\t\texperimentalApi: options.experimentalApi || undefined,\n\t\t\t\t\t\toptOutNotificationMethods:\n\t\t\t\t\t\t\toptions.optOutNotificationMethods ?? undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tconst result = await this.request(\n\t\t\t\"initialize\",\n\t\t\t{\n\t\t\t\tclientInfo: options.clientInfo ?? DEFAULT_CLIENT_INFO,\n\t\t\t\tcapabilities,\n\t\t\t},\n\t\t\t{ timeoutMs: options.timeoutMs },\n\t\t);\n\t\tthis.notify(\"initialized\");\n\t\treturn result;\n\t}\n\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions: { timeoutMs?: number } = {},\n\t): Promise<TResult> {\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new Error(\"Codex app-server client is closed\"));\n\t\t}\n\t\tconst id = this.nextId++;\n\t\tconst timeoutMs =\n\t\t\toptions.timeoutMs ??\n\t\t\tthis.options.requestTimeoutMs ??\n\t\t\tDEFAULT_REQUEST_TIMEOUT_MS;\n\t\treturn new Promise<TResult>((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(new Error(`Codex app-server request timed out: ${method}`));\n\t\t\t}, timeoutMs);\n\t\t\tthis.pending.set(id, {\n\t\t\t\tresolve: (value) => resolve(value as TResult),\n\t\t\t\treject,\n\t\t\t\ttimer,\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tthis.writeMessage({ id, method, params });\n\t\t\t} catch (error) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t});\n\t}\n\n\tnotify(method: string, params?: unknown): void {\n\t\tthis.writeMessage({ method, params });\n\t}\n\n\tonNotification(\n\t\tlistener: (notification: CodexAppServerNotification) => void,\n\t): () => void {\n\t\tthis.notificationListeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.notificationListeners.delete(listener);\n\t\t};\n\t}\n\n\tonRequest(listener: CodexAppServerRequestHandler): () => void {\n\t\tthis.requestHandlers.add(listener);\n\t\treturn () => {\n\t\t\tthis.requestHandlers.delete(listener);\n\t\t};\n\t}\n\n\twaitForNotification<TParams = unknown>(\n\t\tpredicate: (notification: CodexAppServerNotification) => boolean,\n\t\ttimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS,\n\t): Promise<CodexAppServerNotification<TParams>> {\n\t\tconst buffered = this.notificationHistory.find(predicate);\n\t\tif (buffered) {\n\t\t\treturn Promise.resolve(buffered as CodexAppServerNotification<TParams>);\n\t\t}\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new Error(\"Codex app-server client is closed\"));\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet unsubscribe = () => {};\n\t\t\tconst waiter: PendingNotification = {\n\t\t\t\treject: (error) => {\n\t\t\t\t\tclearTimeout(waiter.timer);\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tthis.notificationWaiters.delete(waiter);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\twaiter.reject(\n\t\t\t\t\t\tnew Error(\"Timed out waiting for Codex app-server notification\"),\n\t\t\t\t\t);\n\t\t\t\t}, timeoutMs),\n\t\t\t\tunsubscribe: () => unsubscribe(),\n\t\t\t};\n\t\t\tunsubscribe = this.onNotification((notification) => {\n\t\t\t\tif (!predicate(notification)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclearTimeout(waiter.timer);\n\t\t\t\twaiter.unsubscribe();\n\t\t\t\tthis.notificationWaiters.delete(waiter);\n\t\t\t\tresolve(notification as CodexAppServerNotification<TParams>);\n\t\t\t});\n\t\t\tthis.notificationWaiters.add(waiter);\n\t\t});\n\t}\n\n\treadAccount(refreshToken = false): Promise<CodexAccountReadResult> {\n\t\treturn this.request(\"account/read\", { refreshToken });\n\t}\n\n\tstartChatGptLogin(\n\t\tflow: \"browser\" | \"device\" = \"browser\",\n\t): Promise<CodexLoginStartResult> {\n\t\treturn this.request(\"account/login/start\", {\n\t\t\ttype: flow === \"device\" ? \"chatgptDeviceCode\" : \"chatgpt\",\n\t\t});\n\t}\n\n\tasync waitForLoginCompletion(\n\t\tloginId: string,\n\t\ttimeoutMs = DEFAULT_LOGIN_TIMEOUT_MS,\n\t): Promise<CodexLoginCompletedNotification> {\n\t\tconst notification =\n\t\t\tawait this.waitForNotification<CodexLoginCompletedNotification>(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.method === \"account/login/completed\" &&\n\t\t\t\t\tisRecord(candidate.params) &&\n\t\t\t\t\tcandidate.params.loginId === loginId,\n\t\t\t\ttimeoutMs,\n\t\t\t);\n\t\tconst params = notification.params;\n\t\tif (!params?.success) {\n\t\t\tthrow new Error(params?.error || \"ChatGPT sign-in did not complete\");\n\t\t}\n\t\treturn params;\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tawait this.request(\"account/logout\", undefined);\n\t}\n\n\tclose(): void {\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.closed = true;\n\t\tthis.rejectAll(\"Codex app-server client closed\");\n\t\tthis.rl.close();\n\t\ttry {\n\t\t\tthis.transport.stdin.end();\n\t\t} catch {\n\t\t\t// Best-effort shutdown only.\n\t\t}\n\t\tthis.transport.kill?.(\"SIGTERM\");\n\t}\n\n\tprivate handleLine(line: string): void {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\treturn;\n\t\t}\n\t\tlet message: unknown;\n\t\ttry {\n\t\t\tmessage = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tif (!isRecord(message)) {\n\t\t\treturn;\n\t\t}\n\t\tif (\"id\" in message && (\"result\" in message || \"error\" in message)) {\n\t\t\tthis.handleResponse(message as JsonRpcResponse);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof message.method === \"string\" && \"id\" in message) {\n\t\t\tvoid this.handleServerRequest(\n\t\t\t\tmessage as unknown as CodexAppServerRequest,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof message.method === \"string\") {\n\t\t\tthis.emitNotification({\n\t\t\t\tmethod: message.method,\n\t\t\t\tparams: message.params,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate handleResponse(response: JsonRpcResponse): void {\n\t\tif (response.id === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = this.pending.get(response.id);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending.delete(response.id);\n\t\tclearTimeout(pending.timer);\n\t\tif (response.error) {\n\t\t\tconst message =\n\t\t\t\tresponse.error.message ?? \"Codex app-server request failed\";\n\t\t\tpending.reject(new Error(message));\n\t\t\treturn;\n\t\t}\n\t\tpending.resolve(response.result);\n\t}\n\n\tprivate async handleServerRequest(\n\t\trequest: CodexAppServerRequest,\n\t): Promise<void> {\n\t\tthis.emitNotification({\n\t\t\tmethod: request.method,\n\t\t\tparams: request.params,\n\t\t});\n\n\t\tfor (const handler of Array.from(this.requestHandlers)) {\n\t\t\ttry {\n\t\t\t\tconst handled = await handler(request);\n\t\t\t\tif (!handled.handled) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\"error\" in handled) {\n\t\t\t\t\tthis.writeMessage({\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tcode: handled.error.code ?? -32000,\n\t\t\t\t\t\t\tmessage: handled.error.message,\n\t\t\t\t\t\t\tdata: handled.error.data,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.writeMessage({ id: request.id, result: handled.result });\n\t\t\t\treturn;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tthis.writeMessage({\n\t\t\t\t\tid: request.id,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst fallback = defaultServerRequestResponse(request.method);\n\t\tif (fallback.ok) {\n\t\t\tthis.writeMessage({ id: request.id, result: fallback.result });\n\t\t\treturn;\n\t\t}\n\t\tthis.writeMessage({\n\t\t\tid: request.id,\n\t\t\terror: {\n\t\t\t\tcode: -32601,\n\t\t\t\tmessage: `Unsupported Codex app-server request: ${request.method}`,\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate emitNotification(notification: CodexAppServerNotification): void {\n\t\tthis.notificationHistory.push(notification);\n\t\tif (this.notificationHistory.length > MAX_NOTIFICATION_HISTORY) {\n\t\t\tthis.notificationHistory.shift();\n\t\t}\n\t\tfor (const listener of this.notificationListeners) {\n\t\t\tlistener(notification);\n\t\t}\n\t}\n\n\tprivate writeMessage(message: Record<string, unknown>): void {\n\t\tconst compact = Object.fromEntries(\n\t\t\tObject.entries(message).filter(([, value]) => value !== undefined),\n\t\t);\n\t\tconst line = `${JSON.stringify(compact)}\\n`;\n\t\tif (!this.transport.stdin.write(line)) {\n\t\t\t// Backpressure is tiny for JSON-RPC control messages; the stream queues it.\n\t\t}\n\t}\n\n\tprivate captureStderr(chunk: unknown): void {\n\t\tconst text = Buffer.isBuffer(chunk)\n\t\t\t? chunk.toString(\"utf8\")\n\t\t\t: String(chunk);\n\t\tfor (const line of text.split(/\\r?\\n/)) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.stderrTail.push(trimmed);\n\t\t\tif (this.stderrTail.length > 20) {\n\t\t\t\tthis.stderrTail.shift();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate rejectAll(message: string): void {\n\t\tthis.closed = true;\n\t\tconst stderr = this.stderrTail.length\n\t\t\t? `\\n${this.stderrTail.slice(-5).join(\"\\n\")}`\n\t\t\t: \"\";\n\t\tconst error = new Error(`${message}${stderr}`);\n\t\tfor (const pending of this.pending.values()) {\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.reject(error);\n\t\t}\n\t\tthis.pending.clear();\n\t\tfor (const waiter of Array.from(this.notificationWaiters)) {\n\t\t\twaiter.reject(error);\n\t\t}\n\t\tthis.notificationWaiters.clear();\n\t}\n}\n\nexport function createCodexAppServerClient(\n\toptions: CreateCodexAppServerClientOptions = {},\n): CodexAppServerRpcClient {\n\treturn CodexAppServerRpcClient.spawn(options);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction defaultServerRequestResponse(\n\tmethod: string,\n): { ok: true; result: unknown } | { ok: false } {\n\tswitch (method) {\n\t\tcase \"item/commandExecution/requestApproval\":\n\t\t\treturn { ok: true, result: { decision: \"decline\" } };\n\t\tcase \"item/fileChange/requestApproval\":\n\t\t\treturn { ok: true, result: { decision: \"decline\" } };\n\t\tcase \"item/permissions/requestApproval\":\n\t\t\treturn { ok: true, result: { permissions: {}, scope: \"turn\" } };\n\t\tcase \"item/tool/requestUserInput\":\n\t\t\treturn { ok: true, result: { answers: {} } };\n\t\tcase \"mcpServer/elicitation/request\":\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tresult: { action: \"decline\", content: null, _meta: null },\n\t\t\t};\n\t\tcase \"applyPatchApproval\":\n\t\tcase \"execCommandApproval\":\n\t\t\treturn { ok: true, result: { decision: \"denied\" } };\n\t\tdefault:\n\t\t\treturn { ok: false };\n\t}\n}\n"]}
1
+ {"version":3,"file":"app-server-client.js","sourceRoot":"","sources":["../../src/codex/app-server-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn as spawnChild } from \"node:child_process\";\nimport type { ChildProcessWithoutNullStreams } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { Interface as ReadlineInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { readPackageVersion } from \"../package-version.js\";\n\ntype JsonRpcId = number | string;\n\nexport interface CodexAppServerTransport {\n\tstdin: Writable;\n\tstdout: Readable;\n\tstderr?: Readable | null;\n\tkill?: (signal?: NodeJS.Signals | number) => boolean;\n\ton?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n\tonce?: (event: string, listener: (...args: unknown[]) => void) => unknown;\n}\n\nexport interface CodexAppServerClientInfo {\n\tname: string;\n\ttitle?: string;\n\tversion?: string;\n}\n\nexport interface CodexAppServerInitializeOptions {\n\tclientInfo?: CodexAppServerClientInfo;\n\texperimentalApi?: boolean;\n\toptOutNotificationMethods?: string[];\n\ttimeoutMs?: number;\n}\n\nexport interface CreateCodexAppServerClientOptions {\n\tcommand?: string;\n\targs?: string[];\n\tcwd?: string;\n\tenv?: NodeJS.ProcessEnv;\n\trequestTimeoutMs?: number;\n}\n\nexport type CodexAccount =\n\t| { type: \"apiKey\" }\n\t| { type: \"chatgpt\"; email: string; planType: string }\n\t| { type: string; [key: string]: unknown };\n\nexport interface CodexAccountReadResult {\n\taccount: CodexAccount | null;\n\trequiresOpenaiAuth: boolean;\n}\n\nexport type CodexLoginStartResult =\n\t| { type: \"apiKey\" }\n\t| { type: \"chatgpt\"; loginId: string; authUrl: string }\n\t| {\n\t\t\ttype: \"chatgptDeviceCode\";\n\t\t\tloginId: string;\n\t\t\tverificationUrl: string;\n\t\t\tuserCode: string;\n\t }\n\t| { type: \"chatgptAuthTokens\" }\n\t| { type: string; [key: string]: unknown };\n\nexport interface CodexLoginCompletedNotification {\n\tloginId: string | null;\n\tsuccess: boolean;\n\terror: string | null;\n}\n\nexport interface CodexAppServerNotification<TParams = unknown> {\n\tmethod: string;\n\tparams?: TParams;\n}\n\nexport interface CodexAppServerRequest<TParams = unknown> {\n\tid: JsonRpcId;\n\tmethod: string;\n\tparams?: TParams;\n}\n\nexport type CodexAppServerRequestHandlerResult =\n\t| {\n\t\t\thandled: true;\n\t\t\tresult?: unknown;\n\t }\n\t| {\n\t\t\thandled: true;\n\t\t\terror: {\n\t\t\t\tcode?: number;\n\t\t\t\tmessage: string;\n\t\t\t\tdata?: unknown;\n\t\t\t};\n\t }\n\t| {\n\t\t\thandled: false;\n\t };\n\nexport type CodexAppServerRequestHandler = (\n\trequest: CodexAppServerRequest,\n) =>\n\t| CodexAppServerRequestHandlerResult\n\t| Promise<CodexAppServerRequestHandlerResult>;\n\nexport interface CodexAppServerClientLike {\n\tinitialize(options?: CodexAppServerInitializeOptions): Promise<unknown>;\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions?: { timeoutMs?: number },\n\t): Promise<TResult>;\n\tnotify(method: string, params?: unknown): void;\n\tonNotification(\n\t\tlistener: (notification: CodexAppServerNotification) => void,\n\t): () => void;\n\tonRequest(listener: CodexAppServerRequestHandler): () => void;\n\treadAccount(refreshToken?: boolean): Promise<CodexAccountReadResult>;\n\tstartChatGptLogin(\n\t\tflow?: \"browser\" | \"device\",\n\t\toptions?: { codexStreamlinedLogin?: boolean },\n\t): Promise<CodexLoginStartResult>;\n\twaitForLoginCompletion(\n\t\tloginId: string,\n\t\ttimeoutMs?: number,\n\t): Promise<CodexLoginCompletedNotification>;\n\tlogout(): Promise<void>;\n\tclose(): void;\n}\n\ninterface PendingRequest {\n\tresolve: (value: unknown) => void;\n\treject: (error: Error) => void;\n\ttimer: NodeJS.Timeout;\n}\n\ninterface PendingNotification {\n\treject: (error: Error) => void;\n\ttimer: NodeJS.Timeout;\n\tunsubscribe: () => void;\n}\n\ninterface JsonRpcResponse {\n\tid?: JsonRpcId;\n\tresult?: unknown;\n\terror?: {\n\t\tcode?: number;\n\t\tmessage?: string;\n\t\tdata?: unknown;\n\t};\n}\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\nconst DEFAULT_LOGIN_TIMEOUT_MS = 5 * 60_000;\nconst MAX_NOTIFICATION_HISTORY = 100;\nconst DEFAULT_CODEX_COMMAND = \"codex\";\nconst DEFAULT_CODEX_APP_SERVER_ARGS = [\"app-server\", \"--listen\", \"stdio://\"];\nconst DEFAULT_CLIENT_INFO: CodexAppServerClientInfo = {\n\tname: \"maestro\",\n\ttitle: \"Maestro\",\n\tversion: readPackageVersion(),\n};\nconst moduleRequire = createRequire(import.meta.url);\n\nexport interface CodexAppServerSpawnCommand {\n\tcommand: string;\n\targs: string[];\n\tsource: \"override\" | \"bundled-package\" | \"path\";\n}\n\nexport class CodexAppServerRpcClient implements CodexAppServerClientLike {\n\tprivate readonly pending = new Map<JsonRpcId, PendingRequest>();\n\tprivate readonly notificationListeners = new Set<\n\t\t(notification: CodexAppServerNotification) => void\n\t>();\n\tprivate readonly notificationHistory: CodexAppServerNotification[] = [];\n\tprivate readonly notificationWaiters = new Set<PendingNotification>();\n\tprivate readonly requestHandlers = new Set<CodexAppServerRequestHandler>();\n\tprivate readonly stderrTail: string[] = [];\n\tprivate readonly rl: ReadlineInterface;\n\tprivate nextId = 1;\n\tprivate closed = false;\n\n\tconstructor(\n\t\tprivate readonly transport: CodexAppServerTransport,\n\t\tprivate readonly options: {\n\t\t\trequestTimeoutMs?: number;\n\t\t\tcommandLabel?: string;\n\t\t} = {},\n\t) {\n\t\tthis.rl = createInterface({ input: transport.stdout });\n\t\tthis.rl.on(\"line\", (line) => this.handleLine(line));\n\t\tthis.rl.on(\"close\", () => this.rejectAll(\"Codex app-server closed stdout\"));\n\t\ttransport.stderr?.on(\"data\", (chunk) => this.captureStderr(chunk));\n\t\ttransport.once?.(\"exit\", (code, signal) => {\n\t\t\tconst suffix =\n\t\t\t\tcode === null || code === undefined\n\t\t\t\t\t? `signal ${String(signal)}`\n\t\t\t\t\t: `code ${String(code)}`;\n\t\t\tthis.rejectAll(`Codex app-server exited with ${suffix}`);\n\t\t});\n\t\ttransport.once?.(\"error\", (error) => {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error\n\t\t\t\t\t? formatTransportError(error, this.options.commandLabel)\n\t\t\t\t\t: `Process error: ${String(error)}`;\n\t\t\tthis.rejectAll(message);\n\t\t});\n\t}\n\n\tstatic spawn(\n\t\toptions: CreateCodexAppServerClientOptions = {},\n\t): CodexAppServerRpcClient {\n\t\tconst { command, args, source } =\n\t\t\tresolveCodexAppServerSpawnCommand(options);\n\t\tconst child: ChildProcessWithoutNullStreams = spawnChild(command, args, {\n\t\t\tcwd: options.cwd,\n\t\t\tenv: options.env ?? process.env,\n\t\t\tstdio: \"pipe\",\n\t\t});\n\t\treturn new CodexAppServerRpcClient(child, {\n\t\t\trequestTimeoutMs: options.requestTimeoutMs,\n\t\t\tcommandLabel:\n\t\t\t\tsource === \"bundled-package\"\n\t\t\t\t\t? \"@openai/codex\"\n\t\t\t\t\t: [command, ...args].join(\" \"),\n\t\t});\n\t}\n\n\tasync initialize(\n\t\toptions: CodexAppServerInitializeOptions = {},\n\t): Promise<unknown> {\n\t\tconst capabilities =\n\t\t\toptions.experimentalApi || options.optOutNotificationMethods?.length\n\t\t\t\t? {\n\t\t\t\t\t\texperimentalApi: options.experimentalApi || undefined,\n\t\t\t\t\t\toptOutNotificationMethods:\n\t\t\t\t\t\t\toptions.optOutNotificationMethods ?? undefined,\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\tconst result = await this.request(\n\t\t\t\"initialize\",\n\t\t\t{\n\t\t\t\tclientInfo: options.clientInfo ?? DEFAULT_CLIENT_INFO,\n\t\t\t\tcapabilities,\n\t\t\t},\n\t\t\t{ timeoutMs: options.timeoutMs },\n\t\t);\n\t\tthis.notify(\"initialized\");\n\t\treturn result;\n\t}\n\n\trequest<TResult = unknown>(\n\t\tmethod: string,\n\t\tparams?: unknown,\n\t\toptions: { timeoutMs?: number } = {},\n\t): Promise<TResult> {\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new Error(\"Codex app-server client is closed\"));\n\t\t}\n\t\tconst id = this.nextId++;\n\t\tconst timeoutMs =\n\t\t\toptions.timeoutMs ??\n\t\t\tthis.options.requestTimeoutMs ??\n\t\t\tDEFAULT_REQUEST_TIMEOUT_MS;\n\t\treturn new Promise<TResult>((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(new Error(`Codex app-server request timed out: ${method}`));\n\t\t\t}, timeoutMs);\n\t\t\tthis.pending.set(id, {\n\t\t\t\tresolve: (value) => resolve(value as TResult),\n\t\t\t\treject,\n\t\t\t\ttimer,\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tthis.writeMessage({ id, method, params });\n\t\t\t} catch (error) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tthis.pending.delete(id);\n\t\t\t\treject(error instanceof Error ? error : new Error(String(error)));\n\t\t\t}\n\t\t});\n\t}\n\n\tnotify(method: string, params?: unknown): void {\n\t\tthis.writeMessage({ method, params });\n\t}\n\n\tonNotification(\n\t\tlistener: (notification: CodexAppServerNotification) => void,\n\t): () => void {\n\t\tthis.notificationListeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.notificationListeners.delete(listener);\n\t\t};\n\t}\n\n\tonRequest(listener: CodexAppServerRequestHandler): () => void {\n\t\tthis.requestHandlers.add(listener);\n\t\treturn () => {\n\t\t\tthis.requestHandlers.delete(listener);\n\t\t};\n\t}\n\n\twaitForNotification<TParams = unknown>(\n\t\tpredicate: (notification: CodexAppServerNotification) => boolean,\n\t\ttimeoutMs = DEFAULT_REQUEST_TIMEOUT_MS,\n\t): Promise<CodexAppServerNotification<TParams>> {\n\t\tconst buffered = this.notificationHistory.find(predicate);\n\t\tif (buffered) {\n\t\t\treturn Promise.resolve(buffered as CodexAppServerNotification<TParams>);\n\t\t}\n\t\tif (this.closed) {\n\t\t\treturn Promise.reject(new Error(\"Codex app-server client is closed\"));\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet unsubscribe = () => {};\n\t\t\tconst waiter: PendingNotification = {\n\t\t\t\treject: (error) => {\n\t\t\t\t\tclearTimeout(waiter.timer);\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tthis.notificationWaiters.delete(waiter);\n\t\t\t\t\treject(error);\n\t\t\t\t},\n\t\t\t\ttimer: setTimeout(() => {\n\t\t\t\t\twaiter.reject(\n\t\t\t\t\t\tnew Error(\"Timed out waiting for Codex app-server notification\"),\n\t\t\t\t\t);\n\t\t\t\t}, timeoutMs),\n\t\t\t\tunsubscribe: () => unsubscribe(),\n\t\t\t};\n\t\t\tunsubscribe = this.onNotification((notification) => {\n\t\t\t\tif (!predicate(notification)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclearTimeout(waiter.timer);\n\t\t\t\twaiter.unsubscribe();\n\t\t\t\tthis.notificationWaiters.delete(waiter);\n\t\t\t\tresolve(notification as CodexAppServerNotification<TParams>);\n\t\t\t});\n\t\t\tthis.notificationWaiters.add(waiter);\n\t\t});\n\t}\n\n\treadAccount(refreshToken = false): Promise<CodexAccountReadResult> {\n\t\treturn this.request(\"account/read\", { refreshToken });\n\t}\n\n\tstartChatGptLogin(\n\t\tflow: \"browser\" | \"device\" = \"browser\",\n\t\toptions: { codexStreamlinedLogin?: boolean } = {},\n\t): Promise<CodexLoginStartResult> {\n\t\tconst params =\n\t\t\tflow === \"device\"\n\t\t\t\t? { type: \"chatgptDeviceCode\" }\n\t\t\t\t: {\n\t\t\t\t\t\ttype: \"chatgpt\",\n\t\t\t\t\t\tcodexStreamlinedLogin: options.codexStreamlinedLogin || undefined,\n\t\t\t\t\t};\n\t\treturn this.request(\"account/login/start\", params);\n\t}\n\n\tasync waitForLoginCompletion(\n\t\tloginId: string,\n\t\ttimeoutMs = DEFAULT_LOGIN_TIMEOUT_MS,\n\t): Promise<CodexLoginCompletedNotification> {\n\t\tconst notification =\n\t\t\tawait this.waitForNotification<CodexLoginCompletedNotification>(\n\t\t\t\t(candidate) =>\n\t\t\t\t\tcandidate.method === \"account/login/completed\" &&\n\t\t\t\t\tisRecord(candidate.params) &&\n\t\t\t\t\tcandidate.params.loginId === loginId,\n\t\t\t\ttimeoutMs,\n\t\t\t);\n\t\tconst params = notification.params;\n\t\tif (!params?.success) {\n\t\t\tthrow new Error(params?.error || \"ChatGPT sign-in did not complete\");\n\t\t}\n\t\treturn params;\n\t}\n\n\tasync logout(): Promise<void> {\n\t\tawait this.request(\"account/logout\", undefined);\n\t}\n\n\tclose(): void {\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.closed = true;\n\t\tthis.rejectAll(\"Codex app-server client closed\");\n\t\tthis.rl.close();\n\t\ttry {\n\t\t\tthis.transport.stdin.end();\n\t\t} catch {\n\t\t\t// Best-effort shutdown only.\n\t\t}\n\t\tthis.transport.kill?.(\"SIGTERM\");\n\t}\n\n\tprivate handleLine(line: string): void {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\treturn;\n\t\t}\n\t\tlet message: unknown;\n\t\ttry {\n\t\t\tmessage = JSON.parse(trimmed);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tif (!isRecord(message)) {\n\t\t\treturn;\n\t\t}\n\t\tif (\"id\" in message && (\"result\" in message || \"error\" in message)) {\n\t\t\tthis.handleResponse(message as JsonRpcResponse);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof message.method === \"string\" && \"id\" in message) {\n\t\t\tvoid this.handleServerRequest(\n\t\t\t\tmessage as unknown as CodexAppServerRequest,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (typeof message.method === \"string\") {\n\t\t\tthis.emitNotification({\n\t\t\t\tmethod: message.method,\n\t\t\t\tparams: message.params,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate handleResponse(response: JsonRpcResponse): void {\n\t\tif (response.id === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst pending = this.pending.get(response.id);\n\t\tif (!pending) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pending.delete(response.id);\n\t\tclearTimeout(pending.timer);\n\t\tif (response.error) {\n\t\t\tconst message =\n\t\t\t\tresponse.error.message ?? \"Codex app-server request failed\";\n\t\t\tpending.reject(new Error(message));\n\t\t\treturn;\n\t\t}\n\t\tpending.resolve(response.result);\n\t}\n\n\tprivate async handleServerRequest(\n\t\trequest: CodexAppServerRequest,\n\t): Promise<void> {\n\t\tthis.emitNotification({\n\t\t\tmethod: request.method,\n\t\t\tparams: request.params,\n\t\t});\n\n\t\tif (request.method === \"account/chatgptAuthTokens/refresh\") {\n\t\t\tthis.writeMessage({\n\t\t\t\tid: request.id,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32601,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t\"Maestro does not manage Codex ChatGPT auth tokens directly. Run `maestro codex login` or `codex login` so Codex app-server owns ChatGPT auth refresh.\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const handler of Array.from(this.requestHandlers)) {\n\t\t\ttry {\n\t\t\t\tconst handled = await handler(request);\n\t\t\t\tif (!handled.handled) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (\"error\" in handled) {\n\t\t\t\t\tthis.writeMessage({\n\t\t\t\t\t\tid: request.id,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tcode: handled.error.code ?? -32000,\n\t\t\t\t\t\t\tmessage: handled.error.message,\n\t\t\t\t\t\t\tdata: handled.error.data,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.writeMessage({ id: request.id, result: handled.result });\n\t\t\t\treturn;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tthis.writeMessage({\n\t\t\t\t\tid: request.id,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: -32000,\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst fallback = defaultServerRequestResponse(request.method);\n\t\tif (fallback.ok) {\n\t\t\tthis.writeMessage({ id: request.id, result: fallback.result });\n\t\t\treturn;\n\t\t}\n\t\tthis.writeMessage({\n\t\t\tid: request.id,\n\t\t\terror: {\n\t\t\t\tcode: -32601,\n\t\t\t\tmessage: `Unsupported Codex app-server request: ${request.method}`,\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate emitNotification(notification: CodexAppServerNotification): void {\n\t\tthis.notificationHistory.push(notification);\n\t\tif (this.notificationHistory.length > MAX_NOTIFICATION_HISTORY) {\n\t\t\tthis.notificationHistory.shift();\n\t\t}\n\t\tfor (const listener of this.notificationListeners) {\n\t\t\tlistener(notification);\n\t\t}\n\t}\n\n\tprivate writeMessage(message: Record<string, unknown>): void {\n\t\tconst compact = Object.fromEntries(\n\t\t\tObject.entries(message).filter(([, value]) => value !== undefined),\n\t\t);\n\t\tconst line = `${JSON.stringify(compact)}\\n`;\n\t\tif (!this.transport.stdin.write(line)) {\n\t\t\t// Backpressure is tiny for JSON-RPC control messages; the stream queues it.\n\t\t}\n\t}\n\n\tprivate captureStderr(chunk: unknown): void {\n\t\tconst text = Buffer.isBuffer(chunk)\n\t\t\t? chunk.toString(\"utf8\")\n\t\t\t: String(chunk);\n\t\tfor (const line of text.split(/\\r?\\n/)) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.stderrTail.push(trimmed);\n\t\t\tif (this.stderrTail.length > 20) {\n\t\t\t\tthis.stderrTail.shift();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate rejectAll(message: string): void {\n\t\tthis.closed = true;\n\t\tconst stderr = this.stderrTail.length\n\t\t\t? `\\n${this.stderrTail.slice(-5).join(\"\\n\")}`\n\t\t\t: \"\";\n\t\tconst error = new Error(`${message}${stderr}`);\n\t\tfor (const pending of this.pending.values()) {\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.reject(error);\n\t\t}\n\t\tthis.pending.clear();\n\t\tfor (const waiter of Array.from(this.notificationWaiters)) {\n\t\t\twaiter.reject(error);\n\t\t}\n\t\tthis.notificationWaiters.clear();\n\t}\n}\n\nexport function createCodexAppServerClient(\n\toptions: CreateCodexAppServerClientOptions = {},\n): CodexAppServerRpcClient {\n\treturn CodexAppServerRpcClient.spawn(options);\n}\n\nexport function resolveCodexAppServerSpawnCommand(\n\toptions: Pick<CreateCodexAppServerClientOptions, \"command\" | \"args\"> = {},\n\tresolveBundledBin: () => string | null = resolveBundledCodexBinPath,\n): CodexAppServerSpawnCommand {\n\tconst args = options.args ?? DEFAULT_CODEX_APP_SERVER_ARGS;\n\tif (options.command) {\n\t\treturn { command: options.command, args, source: \"override\" };\n\t}\n\n\tconst bundledCodexBin = resolveBundledBin();\n\tif (bundledCodexBin) {\n\t\treturn {\n\t\t\tcommand: process.execPath,\n\t\t\targs: [bundledCodexBin, ...args],\n\t\t\tsource: \"bundled-package\",\n\t\t};\n\t}\n\n\treturn { command: DEFAULT_CODEX_COMMAND, args, source: \"path\" };\n}\n\nexport function resolveBundledCodexBinPath(): string | null {\n\ttry {\n\t\treturn moduleRequire.resolve(\"@openai/codex/bin/codex.js\");\n\t} catch {\n\t\t// Some package managers enforce package exports more strictly; fall back to\n\t\t// package.json resolution and the published bin layout.\n\t}\n\n\ttry {\n\t\tconst packageJsonPath = moduleRequire.resolve(\"@openai/codex/package.json\");\n\t\treturn join(dirname(packageJsonPath), \"bin\", \"codex.js\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction defaultServerRequestResponse(\n\tmethod: string,\n): { ok: true; result: unknown } | { ok: false } {\n\tswitch (method) {\n\t\tcase \"item/commandExecution/requestApproval\":\n\t\t\treturn { ok: true, result: { decision: \"decline\" } };\n\t\tcase \"item/fileChange/requestApproval\":\n\t\t\treturn { ok: true, result: { decision: \"decline\" } };\n\t\tcase \"item/permissions/requestApproval\":\n\t\t\treturn { ok: true, result: { permissions: {}, scope: \"turn\" } };\n\t\tcase \"item/tool/requestUserInput\":\n\t\t\treturn { ok: true, result: { answers: {} } };\n\t\tcase \"mcpServer/elicitation/request\":\n\t\t\treturn {\n\t\t\t\tok: true,\n\t\t\t\tresult: { action: \"decline\", content: null, _meta: null },\n\t\t\t};\n\t\tcase \"applyPatchApproval\":\n\t\tcase \"execCommandApproval\":\n\t\t\treturn { ok: true, result: { decision: \"denied\" } };\n\t\tdefault:\n\t\t\treturn { ok: false };\n\t}\n}\n\nfunction formatTransportError(error: Error, commandLabel?: string): string {\n\tconst code = (error as NodeJS.ErrnoException).code;\n\tif (code === \"ENOENT\") {\n\t\tconst command = commandLabel ? ` (${commandLabel})` : \"\";\n\t\treturn `Codex app-server executable was not found${command}. Maestro uses the bundled @openai/codex package when installed and falls back to a codex binary on PATH; run your package manager install in this checkout or install Codex with \\`npm install -g @openai/codex\\`.`;\n\t}\n\treturn error.message;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare function loginOpenAICodexAppServer(onAuthUrl: (url: string) => void, _onPromptCode?: () => Promise<string>, onStatus?: (status: string) => void): Promise<void>;
2
+ export declare function logoutOpenAICodexAppServer(): Promise<void>;
3
+ export declare function hasOpenAICodexAppServerAccount(): Promise<boolean>;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/codex/auth.ts"],"names":[],"mappings":"AAiDA,wBAAsB,yBAAyB,CAC9C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAChC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CAiDf;AAED,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhE;AAED,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,OAAO,CAAC,CAWvE"}
@@ -0,0 +1,103 @@
1
+ import { createCodexAppServerClient, } from "./app-server-client.js";
2
+ function accountLabel(state) {
3
+ const account = state.account;
4
+ if (!account) {
5
+ return "missing";
6
+ }
7
+ if (account.type === "chatgpt") {
8
+ const plan = typeof account.planType === "string" && account.planType.length > 0
9
+ ? `, ${account.planType}`
10
+ : "";
11
+ return `${account.email}${plan}`;
12
+ }
13
+ if (account.type === "apiKey") {
14
+ return "API key";
15
+ }
16
+ return account.type;
17
+ }
18
+ function isBrowserLogin(value) {
19
+ return (value.type === "chatgpt" &&
20
+ typeof value.loginId === "string" &&
21
+ typeof value.authUrl === "string");
22
+ }
23
+ function isDeviceCodeLogin(value) {
24
+ return (value.type === "chatgptDeviceCode" &&
25
+ typeof value.loginId === "string" &&
26
+ typeof value.verificationUrl ===
27
+ "string" &&
28
+ typeof value.userCode === "string");
29
+ }
30
+ export async function loginOpenAICodexAppServer(onAuthUrl, _onPromptCode, onStatus) {
31
+ const client = createCodexAppServerClient();
32
+ try {
33
+ await client.initialize({ experimentalApi: true });
34
+ let currentAccount = null;
35
+ try {
36
+ currentAccount = await client.readAccount(true);
37
+ }
38
+ catch {
39
+ onStatus?.("Codex app-server account refresh failed; starting sign-in to repair authentication.");
40
+ }
41
+ if (currentAccount?.account) {
42
+ onStatus?.(`Codex app-server is already authenticated: ${accountLabel(currentAccount)}.`);
43
+ return;
44
+ }
45
+ const login = await client.startChatGptLogin("browser", {
46
+ codexStreamlinedLogin: true,
47
+ });
48
+ if (isBrowserLogin(login)) {
49
+ onAuthUrl(login.authUrl);
50
+ onStatus?.("Complete Codex ChatGPT sign-in in the browser.");
51
+ await client.waitForLoginCompletion(login.loginId);
52
+ }
53
+ else if (isDeviceCodeLogin(login)) {
54
+ onAuthUrl(login.verificationUrl);
55
+ onStatus?.(`Complete Codex device sign-in with code ${login.userCode}.`);
56
+ await client.waitForLoginCompletion(login.loginId);
57
+ }
58
+ else if (login.type === "apiKey") {
59
+ onStatus?.("Codex app-server is configured with an API key.");
60
+ return;
61
+ }
62
+ else if (login.type === "chatgptAuthTokens") {
63
+ onStatus?.("Codex app-server is using externally managed ChatGPT auth.");
64
+ return;
65
+ }
66
+ else {
67
+ throw new Error(`Unsupported Codex login response: ${login.type}`);
68
+ }
69
+ const account = await client.readAccount(true);
70
+ if (!account.account) {
71
+ throw new Error("Codex app-server did not report a signed-in account.");
72
+ }
73
+ onStatus?.(`Codex ChatGPT sign-in complete: ${accountLabel(account)}.`);
74
+ }
75
+ finally {
76
+ client.close();
77
+ }
78
+ }
79
+ export async function logoutOpenAICodexAppServer() {
80
+ const client = createCodexAppServerClient();
81
+ try {
82
+ await client.initialize({ experimentalApi: true });
83
+ await client.logout();
84
+ }
85
+ finally {
86
+ client.close();
87
+ }
88
+ }
89
+ export async function hasOpenAICodexAppServerAccount() {
90
+ const client = createCodexAppServerClient();
91
+ try {
92
+ await client.initialize({ experimentalApi: true });
93
+ const account = await client.readAccount(false);
94
+ return account.account !== null;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ finally {
100
+ client.close();
101
+ }
102
+ }
103
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/codex/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype CodexAccountReadResult,\n\ttype CodexLoginStartResult,\n\tcreateCodexAppServerClient,\n} from \"./app-server-client.js\";\n\nfunction accountLabel(state: CodexAccountReadResult): string {\n\tconst account = state.account;\n\tif (!account) {\n\t\treturn \"missing\";\n\t}\n\tif (account.type === \"chatgpt\") {\n\t\tconst plan =\n\t\t\ttypeof account.planType === \"string\" && account.planType.length > 0\n\t\t\t\t? `, ${account.planType}`\n\t\t\t\t: \"\";\n\t\treturn `${account.email}${plan}`;\n\t}\n\tif (account.type === \"apiKey\") {\n\t\treturn \"API key\";\n\t}\n\treturn account.type;\n}\n\nfunction isBrowserLogin(\n\tvalue: CodexLoginStartResult,\n): value is { type: \"chatgpt\"; loginId: string; authUrl: string } {\n\treturn (\n\t\tvalue.type === \"chatgpt\" &&\n\t\ttypeof (value as { loginId?: unknown }).loginId === \"string\" &&\n\t\ttypeof (value as { authUrl?: unknown }).authUrl === \"string\"\n\t);\n}\n\nfunction isDeviceCodeLogin(value: CodexLoginStartResult): value is {\n\ttype: \"chatgptDeviceCode\";\n\tloginId: string;\n\tverificationUrl: string;\n\tuserCode: string;\n} {\n\treturn (\n\t\tvalue.type === \"chatgptDeviceCode\" &&\n\t\ttypeof (value as { loginId?: unknown }).loginId === \"string\" &&\n\t\ttypeof (value as { verificationUrl?: unknown }).verificationUrl ===\n\t\t\t\"string\" &&\n\t\ttypeof (value as { userCode?: unknown }).userCode === \"string\"\n\t);\n}\n\nexport async function loginOpenAICodexAppServer(\n\tonAuthUrl: (url: string) => void,\n\t_onPromptCode?: () => Promise<string>,\n\tonStatus?: (status: string) => void,\n): Promise<void> {\n\tconst client = createCodexAppServerClient();\n\ttry {\n\t\tawait client.initialize({ experimentalApi: true });\n\t\tlet currentAccount: CodexAccountReadResult | null = null;\n\t\ttry {\n\t\t\tcurrentAccount = await client.readAccount(true);\n\t\t} catch {\n\t\t\tonStatus?.(\n\t\t\t\t\"Codex app-server account refresh failed; starting sign-in to repair authentication.\",\n\t\t\t);\n\t\t}\n\t\tif (currentAccount?.account) {\n\t\t\tonStatus?.(\n\t\t\t\t`Codex app-server is already authenticated: ${accountLabel(currentAccount)}.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst login = await client.startChatGptLogin(\"browser\", {\n\t\t\tcodexStreamlinedLogin: true,\n\t\t});\n\n\t\tif (isBrowserLogin(login)) {\n\t\t\tonAuthUrl(login.authUrl);\n\t\t\tonStatus?.(\"Complete Codex ChatGPT sign-in in the browser.\");\n\t\t\tawait client.waitForLoginCompletion(login.loginId);\n\t\t} else if (isDeviceCodeLogin(login)) {\n\t\t\tonAuthUrl(login.verificationUrl);\n\t\t\tonStatus?.(`Complete Codex device sign-in with code ${login.userCode}.`);\n\t\t\tawait client.waitForLoginCompletion(login.loginId);\n\t\t} else if (login.type === \"apiKey\") {\n\t\t\tonStatus?.(\"Codex app-server is configured with an API key.\");\n\t\t\treturn;\n\t\t} else if (login.type === \"chatgptAuthTokens\") {\n\t\t\tonStatus?.(\"Codex app-server is using externally managed ChatGPT auth.\");\n\t\t\treturn;\n\t\t} else {\n\t\t\tthrow new Error(`Unsupported Codex login response: ${login.type}`);\n\t\t}\n\n\t\tconst account = await client.readAccount(true);\n\t\tif (!account.account) {\n\t\t\tthrow new Error(\"Codex app-server did not report a signed-in account.\");\n\t\t}\n\t\tonStatus?.(`Codex ChatGPT sign-in complete: ${accountLabel(account)}.`);\n\t} finally {\n\t\tclient.close();\n\t}\n}\n\nexport async function logoutOpenAICodexAppServer(): Promise<void> {\n\tconst client = createCodexAppServerClient();\n\ttry {\n\t\tawait client.initialize({ experimentalApi: true });\n\t\tawait client.logout();\n\t} finally {\n\t\tclient.close();\n\t}\n}\n\nexport async function hasOpenAICodexAppServerAccount(): Promise<boolean> {\n\tconst client = createCodexAppServerClient();\n\ttry {\n\t\tawait client.initialize({ experimentalApi: true });\n\t\tconst account = await client.readAccount(false);\n\t\treturn account.account !== null;\n\t} catch {\n\t\treturn false;\n\t} finally {\n\t\tclient.close();\n\t}\n}\n"]}
@@ -1872,7 +1872,7 @@ export declare const auditLogs: import("drizzle-orm/pg-core").PgTableWithColumns
1872
1872
  tableName: "audit_logs";
1873
1873
  dataType: "string";
1874
1874
  columnType: "PgEnumColumn";
1875
- data: "error" | "denied" | "success" | "failure";
1875
+ data: "error" | "success" | "denied" | "failure";
1876
1876
  driverParam: string;
1877
1877
  notNull: true;
1878
1878
  hasDefault: false;
@@ -612,13 +612,13 @@ export async function bootstrapEvalOpsAgent(options = {}, dependencies = {}) {
612
612
  });
613
613
  }
614
614
  try {
615
- deps.onStatus({ message: "Loading EvalOps control-plane proof" });
615
+ deps.onStatus({ message: "Loading EvalOps control-plane status" });
616
616
  controlPlaneSummary = await loadControlPlaneSummary(client);
617
617
  }
618
618
  catch (error) {
619
619
  const reason = error instanceof Error ? error.message : String(error);
620
620
  deps.onStatus({
621
- message: `EvalOps control-plane proof unavailable; continuing bootstrap (${reason})`,
621
+ message: `EvalOps control-plane status unavailable; continuing bootstrap (${reason})`,
622
622
  });
623
623
  }
624
624
  finally {