@evalops/maestro 0.10.46 → 0.10.47

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 (101) hide show
  1. package/dist/agent/providers/openai-codex-session.js +1 -1
  2. package/dist/agent/providers/openai-codex-session.js.map +1 -1
  3. package/dist/app-server/in-process-client.d.ts +2 -2
  4. package/dist/app-server/in-process-client.js.map +1 -1
  5. package/dist/app-server/protocol-modes-api.js +1 -1
  6. package/dist/app-server/protocol-modes-api.js.map +1 -1
  7. package/dist/app-server/sandbox-check-api.d.ts +21 -0
  8. package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
  9. package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
  10. package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
  11. package/dist/app-server/session-api.d.ts +5 -5
  12. package/dist/app-server/session-api.js +18 -18
  13. package/dist/app-server/session-api.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/cli/args.js +1 -1
  16. package/dist/cli/args.js.map +1 -1
  17. package/dist/cli/commands/codex.js +30 -3
  18. package/dist/cli/commands/codex.js.map +1 -1
  19. package/dist/cli-tui/auth-state.d.ts +7 -0
  20. package/dist/cli-tui/auth-state.d.ts.map +1 -0
  21. package/dist/cli-tui/auth-state.js +46 -0
  22. package/dist/cli-tui/auth-state.js.map +1 -0
  23. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  24. package/dist/cli-tui/commands/command-catalog.js +6 -1
  25. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  26. package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
  27. package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
  28. package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
  29. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
  30. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  31. package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
  32. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  33. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  34. package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
  35. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  36. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
  37. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  38. package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
  39. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  40. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
  41. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  42. package/dist/cli-tui/selectors/oauth-selector.js +25 -2
  43. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  44. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
  45. package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
  46. package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
  47. package/dist/cli-tui/tui-renderer.d.ts +0 -4
  48. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  49. package/dist/cli-tui/tui-renderer.js +3 -28
  50. package/dist/cli-tui/tui-renderer.js.map +1 -1
  51. package/dist/cli.js +896 -497
  52. package/dist/codex/app-server-client.d.ts +8 -2
  53. package/dist/codex/app-server-client.d.ts.map +1 -1
  54. package/dist/codex/app-server-client.js +18 -4
  55. package/dist/codex/app-server-client.js.map +1 -1
  56. package/dist/codex/auth.d.ts +4 -0
  57. package/dist/codex/auth.d.ts.map +1 -0
  58. package/dist/codex/auth.js +103 -0
  59. package/dist/codex/auth.js.map +1 -0
  60. package/dist/db/schema.d.ts +1 -1
  61. package/dist/evalops/agent-bootstrap.js +2 -2
  62. package/dist/evalops/agent-bootstrap.js.map +1 -1
  63. package/dist/main.d.ts.map +1 -1
  64. package/dist/main.js +5 -1
  65. package/dist/main.js.map +1 -1
  66. package/dist/models/config-loader.d.ts +5 -5
  67. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
  68. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  69. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
  70. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  71. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  72. package/dist/node_modules/@evalops/tui/package.json +1 -1
  73. package/dist/oauth/index.d.ts +1 -0
  74. package/dist/oauth/index.d.ts.map +1 -1
  75. package/dist/oauth/index.js +42 -2
  76. package/dist/oauth/index.js.map +1 -1
  77. package/dist/server/app-context.d.ts +2 -0
  78. package/dist/server/app-context.d.ts.map +1 -1
  79. package/dist/server/app-context.js.map +1 -1
  80. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  81. package/dist/server/handlers/headless-sessions.js +44 -10
  82. package/dist/server/handlers/headless-sessions.js.map +1 -1
  83. package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
  84. package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
  85. package/dist/server/handlers/hosted-runner-identity.js +2 -0
  86. package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
  87. package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
  88. package/dist/server/handlers/platform-a2a-push.js +113 -2
  89. package/dist/server/handlers/platform-a2a-push.js.map +1 -1
  90. package/dist/server/headless-in-process-host.d.ts.map +1 -1
  91. package/dist/server/headless-in-process-host.js +1 -1
  92. package/dist/server/headless-in-process-host.js.map +1 -1
  93. package/dist/server/headless-runtime-service.d.ts +9 -2
  94. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  95. package/dist/server/headless-runtime-service.js +54 -15
  96. package/dist/server/headless-runtime-service.js.map +1 -1
  97. package/dist/tools/background/task-runtime.js +1 -1
  98. package/dist/tools/background/task-runtime.js.map +1 -1
  99. package/dist/version.json +2 -2
  100. package/package.json +1 -1
  101. package/dist/app-server/sandbox-proof-api.d.ts +0 -21
@@ -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,7 +94,9 @@ 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;
@@ -122,7 +126,9 @@ export declare class CodexAppServerRpcClient implements CodexAppServerClientLike
122
126
  onRequest(listener: CodexAppServerRequestHandler): () => void;
123
127
  waitForNotification<TParams = unknown>(predicate: (notification: CodexAppServerNotification) => boolean, timeoutMs?: number): Promise<CodexAppServerNotification<TParams>>;
124
128
  readAccount(refreshToken?: boolean): Promise<CodexAccountReadResult>;
125
- startChatGptLogin(flow?: "browser" | "device"): Promise<CodexLoginStartResult>;
129
+ startChatGptLogin(flow?: "browser" | "device", options?: {
130
+ codexStreamlinedLogin?: boolean;
131
+ }): Promise<CodexLoginStartResult>;
126
132
  waitForLoginCompletion(loginId: string, timeoutMs?: number): Promise<CodexLoginCompletedNotification>;
127
133
  logout(): Promise<void>;
128
134
  close(): void;
@@ -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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"}
@@ -144,10 +144,14 @@ export class CodexAppServerRpcClient {
144
144
  readAccount(refreshToken = false) {
145
145
  return this.request("account/read", { refreshToken });
146
146
  }
147
- startChatGptLogin(flow = "browser") {
148
- return this.request("account/login/start", {
149
- type: flow === "device" ? "chatgptDeviceCode" : "chatgpt",
150
- });
147
+ startChatGptLogin(flow = "browser", options = {}) {
148
+ const params = flow === "device"
149
+ ? { type: "chatgptDeviceCode" }
150
+ : {
151
+ type: "chatgpt",
152
+ codexStreamlinedLogin: options.codexStreamlinedLogin || undefined,
153
+ };
154
+ return this.request("account/login/start", params);
151
155
  }
152
156
  async waitForLoginCompletion(loginId, timeoutMs = DEFAULT_LOGIN_TIMEOUT_MS) {
153
157
  const notification = await this.waitForNotification((candidate) => candidate.method === "account/login/completed" &&
@@ -229,6 +233,16 @@ export class CodexAppServerRpcClient {
229
233
  method: request.method,
230
234
  params: request.params,
231
235
  });
236
+ if (request.method === "account/chatgptAuthTokens/refresh") {
237
+ this.writeMessage({
238
+ id: request.id,
239
+ error: {
240
+ code: -32601,
241
+ 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.",
242
+ },
243
+ });
244
+ return;
245
+ }
232
246
  for (const handler of Array.from(this.requestHandlers)) {
233
247
  try {
234
248
  const handled = await handler(request);
@@ -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 { 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_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\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\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"]}
@@ -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 {