@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.
- package/README.md +4 -0
- package/dist/agent/providers/openai-codex-session.js +1 -1
- package/dist/agent/providers/openai-codex-session.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -1
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/app-server/sandbox-check-api.d.ts +21 -0
- package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
- package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
- package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
- package/dist/app-server/session-api.d.ts +5 -5
- package/dist/app-server/session-api.js +18 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/codex.js +30 -3
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/update.d.ts +12 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +148 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +4 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli-tui/auth-state.d.ts +7 -0
- package/dist/cli-tui/auth-state.d.ts.map +1 -0
- package/dist/cli-tui/auth-state.js +46 -0
- package/dist/cli-tui/auth-state.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +8 -3
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
- package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +1 -1
- package/dist/cli-tui/commands/subcommands/ui-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -1
- package/dist/cli-tui/footer.d.ts.map +1 -1
- package/dist/cli-tui/footer.js +1 -1
- package/dist/cli-tui/footer.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +25 -2
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.js +5 -11
- package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
- package/dist/cli-tui/tui-renderer.d.ts +0 -4
- package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer.js +4 -29
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/ui-state.js +1 -1
- package/dist/cli-tui/ui-state.js.map +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts.map +1 -1
- package/dist/cli-tui/utils/footer-utils.js.map +1 -1
- package/dist/cli.js +4800 -3779
- package/dist/cli.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +16 -2
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +67 -7
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/auth.d.ts +4 -0
- package/dist/codex/auth.d.ts.map +1 -0
- package/dist/codex/auth.js +103 -0
- package/dist/codex/auth.js.map +1 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/evalops/agent-bootstrap.js +2 -2
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -1
- package/dist/main.js.map +1 -1
- package/dist/models/config-loader.d.ts +12 -12
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts +2 -0
- package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/scenario.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/index.d.ts +1 -0
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +42 -2
- package/dist/oauth/index.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +3 -3
- package/dist/platform/operating-plane-client.d.ts.map +1 -1
- package/dist/platform/operating-plane-client.js.map +1 -1
- package/dist/platform/operating-plane-summary.js +3 -6
- package/dist/platform/operating-plane-summary.js.map +1 -1
- package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -1
- package/dist/server/agent-trajectory-scenarios.js +29 -6
- package/dist/server/agent-trajectory-scenarios.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +44 -10
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +2 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +113 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/ui.d.ts.map +1 -1
- package/dist/server/handlers/ui.js +5 -5
- package/dist/server/handlers/ui.js.map +1 -1
- package/dist/server/headless-in-process-host.d.ts.map +1 -1
- package/dist/server/headless-in-process-host.js +1 -1
- package/dist/server/headless-in-process-host.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +9 -2
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +54 -15
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/stores/ui-store.d.ts.map +1 -1
- package/dist/server/stores/ui-store.js +8 -1
- package/dist/server/stores/ui-store.js.map +1 -1
- package/dist/tools/background/task-runtime.js +1 -1
- package/dist/tools/background/task-runtime.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/update/check.d.ts +2 -0
- package/dist/update/check.d.ts.map +1 -1
- package/dist/update/check.js +100 -41
- package/dist/update/check.js.map +1 -1
- package/dist/update/startup-refresh.d.ts +56 -0
- package/dist/update/startup-refresh.d.ts.map +1 -0
- package/dist/update/startup-refresh.js +321 -0
- package/dist/update/startup-refresh.js.map +1 -0
- package/dist/version.json +2 -2
- package/package.json +297 -296
- 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":";AAEA,0DAA0D;AAC1D,sFAAsF;AACtF,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAGlC,CAAC;AACb,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,KAAsB,EAAE,GAAG,IAAe,EAAE,EAAE;IAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACxB,IACC,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,KAAK,IAAI;YACjB,MAAM,IAAI,QAAQ;YAClB,MAAM,IAAI,QAAQ;YACjB,QAA6C,CAAC,IAAI;gBAClD,oBAAoB;YACpB,QAA6C,CAAC,IAAI,KAAK,SAAS,EAChE,CAAC;YACF,OAAO,KAAK,CAAC,CAAC,gCAAgC;QAC/C,CAAC;IACF,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AACrC,CAAC,CAAwB,CAAC;AAE1B,SAAS,oBAAoB,CAAC,IAAc;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACb,CAAC;QACD,IACC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,UAAU,EACzC,CAAC;YACF,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,IAAI,CAAC;QACJ,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,GAAG,IAAI,CAAC,SAAS,CAAC;YACjB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4BAA4B,OAAO,EAAE;YAC9C,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,OAAO;SACnB,CAAC,IAAI,CACN,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,qEAAqE;IACtE,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC;QACJ,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CACvE,aAAa,CACb,CAAC;QACF,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1B,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,WAAW,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACR,0EAA0E;IAC3E,CAAC;AACF,CAAC;AAED,MAAM,GAAG,GAAG,
|
|
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"
|
|
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"
|
|
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":"
|
|
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.
|
|
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
|
|
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
|
-
|
|
149
|
-
type:
|
|
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"]}
|
package/dist/db/schema.d.ts
CHANGED
|
@@ -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" | "
|
|
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
|
|
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
|
|
621
|
+
message: `EvalOps control-plane status unavailable; continuing bootstrap (${reason})`,
|
|
622
622
|
});
|
|
623
623
|
}
|
|
624
624
|
finally {
|