mastracode 0.25.0-alpha.4 → 0.25.0-alpha.5
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/CHANGELOG.md +24 -0
- package/dist/{acp-3O4IGCCC.js → acp-LBM2JPPW.js} +4 -4
- package/dist/{acp-3O4IGCCC.js.map → acp-LBM2JPPW.js.map} +1 -1
- package/dist/{acp-NT2KQMVM.cjs → acp-QYEYP4OZ.cjs} +6 -6
- package/dist/{acp-NT2KQMVM.cjs.map → acp-QYEYP4OZ.cjs.map} +1 -1
- package/dist/{chunk-ONKJTRKR.js → chunk-5FIPMH3Y.js} +155 -20
- package/dist/chunk-5FIPMH3Y.js.map +1 -0
- package/dist/{chunk-MY5JOV5B.cjs → chunk-6C4I2JKA.cjs} +47 -42
- package/dist/chunk-6C4I2JKA.cjs.map +1 -0
- package/dist/{chunk-CPFR2IXT.cjs → chunk-CVFSV7RY.cjs} +918 -918
- package/dist/{chunk-CPFR2IXT.cjs.map → chunk-CVFSV7RY.cjs.map} +1 -1
- package/dist/{chunk-IK6NZ3MB.cjs → chunk-IUWPEYVZ.cjs} +155 -20
- package/dist/chunk-IUWPEYVZ.cjs.map +1 -0
- package/dist/{chunk-F2PQJXG2.js → chunk-VZLHNA6F.js} +15 -10
- package/dist/chunk-VZLHNA6F.js.map +1 -0
- package/dist/{chunk-Q2MOSK5D.js → chunk-YWVAQSWV.js} +4 -4
- package/dist/{chunk-Q2MOSK5D.js.map → chunk-YWVAQSWV.js.map} +1 -1
- package/dist/cli.cjs +19 -19
- package/dist/cli.js +4 -4
- package/dist/index.cjs +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/onboarding/settings.d.ts.map +1 -1
- package/dist/providers/openai-codex.d.ts +19 -0
- package/dist/providers/openai-codex.d.ts.map +1 -1
- package/dist/tui.cjs +19 -19
- package/dist/tui.js +2 -2
- package/package.json +6 -6
- package/dist/chunk-F2PQJXG2.js.map +0 -1
- package/dist/chunk-IK6NZ3MB.cjs.map +0 -1
- package/dist/chunk-MY5JOV5B.cjs.map +0 -1
- package/dist/chunk-ONKJTRKR.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# mastracode
|
|
2
2
|
|
|
3
|
+
## 0.25.0-alpha.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Exported isBadRequestError matcher for detecting transient HTTP 400 errors that can be retried ([#18384](https://github.com/mastra-ai/mastra/pull/18384))
|
|
8
|
+
|
|
9
|
+
- Added automatic retry (once) for transient OpenAI Bad Request (400) errors that occur during service degradation ([#18384](https://github.com/mastra-ai/mastra/pull/18384))
|
|
10
|
+
|
|
11
|
+
- Fix Stagehand AI ops (`observe`, `act`, `extract`) failing with `Bad Request` (HTTP 400) when the user is signed in to OpenAI Codex OAuth. ([#18399](https://github.com/mastra-ai/mastra/pull/18399))
|
|
12
|
+
|
|
13
|
+
Stagehand drives its browser actions through AI SDK's non-streaming `generateText`, but Codex's `/responses` backend only accepts streamed requests and replies with Server-Sent Events. The previous integration routed Stagehand traffic to Codex by rewriting the request URL inside a custom `fetch`, but did not translate between the streaming and non-streaming shapes — so every Stagehand AI call was rejected by Codex.
|
|
14
|
+
|
|
15
|
+
MastraCode now configures Stagehand with proper AI SDK provider options (`baseURL`, `headers`, `middleware`) and a dedicated `buildCodexStagehandFetch` that:
|
|
16
|
+
- Injects (and refreshes) the Codex OAuth bearer per call
|
|
17
|
+
- Forces `stream: true` on the outgoing request body
|
|
18
|
+
- Aggregates the SSE response into the non-streaming JSON shape `@ai-sdk/openai`'s Responses parser expects
|
|
19
|
+
|
|
20
|
+
The shared OAuth-bearer-refresh logic is extracted into a `getCodexBearer` helper used by both the main agent fetch and the Stagehand fetch.
|
|
21
|
+
|
|
22
|
+
`observe`, `act`, and `extract` now work end-to-end against Codex OAuth using a Codex-compatible OpenAI model, with no `OPENAI_API_KEY` required.
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [[`3818814`](https://github.com/mastra-ai/mastra/commit/38188149ce454c4403fe9fcbdf73b735c68d36be)]:
|
|
25
|
+
- @mastra/core@1.46.0-alpha.5
|
|
26
|
+
|
|
3
27
|
## 0.25.0-alpha.4
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createMastraCode } from './chunk-
|
|
2
|
-
import { releaseAllThreadLocks } from './chunk-
|
|
1
|
+
import { createMastraCode } from './chunk-VZLHNA6F.js';
|
|
2
|
+
import { releaseAllThreadLocks } from './chunk-5FIPMH3Y.js';
|
|
3
3
|
import { setAutoApprove, MastraCodeAcpAgent } from './chunk-IU477VVQ.js';
|
|
4
4
|
import { Readable, Writable } from 'stream';
|
|
5
5
|
import { ndJsonStream, AgentSideConnection } from '@agentclientprotocol/sdk';
|
|
@@ -77,5 +77,5 @@ async function acpMain(options) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
export { acpMain };
|
|
80
|
-
//# sourceMappingURL=acp-
|
|
81
|
-
//# sourceMappingURL=acp-
|
|
80
|
+
//# sourceMappingURL=acp-LBM2JPPW.js.map
|
|
81
|
+
//# sourceMappingURL=acp-LBM2JPPW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/acp/server.ts","../src/acp/index.ts"],"names":[],"mappings":"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","file":"acp-
|
|
1
|
+
{"version":3,"sources":["../src/acp/server.ts","../src/acp/index.ts"],"names":[],"mappings":"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","file":"acp-LBM2JPPW.js","sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport { AgentSideConnection, ndJsonStream } from '@agentclientprotocol/sdk';\nimport type { Harness, HarnessMode, Session } from '@mastra/core/harness';\nimport { MastraCodeAcpAgent } from './agent.js';\n\n/**\n * Run the ACP server over stdio.\n * This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.\n */\nexport async function runAcpServer(\n harness: Harness,\n modes: HarnessMode[],\n cleanup?: () => Promise<void>,\n): Promise<void> {\n // Create the ndJSON stream from stdin/stdout\n const input = Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>;\n const output = Writable.toWeb(process.stdout) as WritableStream<Uint8Array>;\n const stream = ndJsonStream(output, input);\n let session: Session | undefined;\n let agent: MastraCodeAcpAgent | undefined;\n\n // Handle cleanup on disconnect (success or error)\n try {\n session = await harness.createSession();\n const activeSession = session;\n\n // Create the agent-side connection\n const connection = new AgentSideConnection(conn => {\n agent = new MastraCodeAcpAgent(conn, harness, activeSession, modes);\n return agent;\n }, stream);\n\n await connection.closed;\n } finally {\n agent?.dispose();\n session?.thread.detachFromCurrent();\n await session?.thread.clearAndReleaseLock();\n if (cleanup) {\n await cleanup();\n }\n }\n}\n","import type { HarnessMode } from '@mastra/core/harness';\n\nimport { createMastraCode } from '../index.js';\nimport { releaseAllThreadLocks } from '../utils/thread-lock.js';\nimport { setAutoApprove } from './event-mapper.js';\nimport { runAcpServer } from './server.js';\n\n/**\n * Entry point for ACP server mode.\n * Initializes mastracode and runs the ACP protocol over stdio.\n */\nexport async function acpMain(options?: { dangerousAutoApprove?: boolean }): Promise<void> {\n if (options?.dangerousAutoApprove) {\n setAutoApprove(true);\n }\n // Redirect console.log to stderr to avoid polluting the JSON-RPC stream on stdout.\n // eslint-disable-next-line no-console\n const originalConsoleLog = console.log;\n // eslint-disable-next-line no-console\n console.log = (...args: unknown[]) => {\n process.stderr.write(args.map(String).join(' ') + '\\n');\n };\n\n let result: Awaited<ReturnType<typeof createMastraCode>> | undefined;\n\n try {\n result = await createMastraCode({\n unixSocketPubSub: false,\n disableMcp: false,\n disableHooks: false,\n });\n\n const { harness, mcpManager, signalsPubSub } = result;\n\n // Default modes (same as createMastraCode defaults)\n const modes: HarnessMode[] = [\n { id: 'build', name: 'Build' },\n { id: 'plan', name: 'Plan' },\n { id: 'fast', name: 'Fast' },\n ];\n\n // Cleanup function (mirrors main.ts asyncCleanup)\n const cleanup = async () => {\n releaseAllThreadLocks();\n const closeSignalsPubSub = (signalsPubSub as { close?: () => Promise<void> | void } | undefined)?.close;\n await Promise.allSettled([\n mcpManager?.disconnect(),\n harness?.getMastra()?.stopWorkers(),\n harness?.stopHeartbeats(),\n closeSignalsPubSub?.(),\n ]);\n\n // Restore console.log\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n };\n\n // Handle signals\n const handleSignal = async () => {\n await cleanup();\n process.exit(0);\n };\n\n process.on('SIGINT', handleSignal);\n process.on('SIGTERM', handleSignal);\n\n await runAcpServer(harness, modes, cleanup);\n } catch (error) {\n process.stderr.write(`[acp] Fatal error: ${error}\\n`);\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n process.exit(1);\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk6C4I2JKA_cjs = require('./chunk-6C4I2JKA.cjs');
|
|
4
|
+
var chunkIUWPEYVZ_cjs = require('./chunk-IUWPEYVZ.cjs');
|
|
5
5
|
var chunkDPRNPXVC_cjs = require('./chunk-DPRNPXVC.cjs');
|
|
6
6
|
var stream = require('stream');
|
|
7
7
|
var sdk = require('@agentclientprotocol/sdk');
|
|
@@ -41,7 +41,7 @@ async function acpMain(options) {
|
|
|
41
41
|
};
|
|
42
42
|
let result;
|
|
43
43
|
try {
|
|
44
|
-
result = await
|
|
44
|
+
result = await chunk6C4I2JKA_cjs.createMastraCode({
|
|
45
45
|
unixSocketPubSub: false,
|
|
46
46
|
disableMcp: false,
|
|
47
47
|
disableHooks: false
|
|
@@ -53,7 +53,7 @@ async function acpMain(options) {
|
|
|
53
53
|
{ id: "fast", name: "Fast" }
|
|
54
54
|
];
|
|
55
55
|
const cleanup = async () => {
|
|
56
|
-
|
|
56
|
+
chunkIUWPEYVZ_cjs.releaseAllThreadLocks();
|
|
57
57
|
const closeSignalsPubSub = signalsPubSub?.close;
|
|
58
58
|
await Promise.allSettled([
|
|
59
59
|
mcpManager?.disconnect(),
|
|
@@ -79,5 +79,5 @@ async function acpMain(options) {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
exports.acpMain = acpMain;
|
|
82
|
-
//# sourceMappingURL=acp-
|
|
83
|
-
//# sourceMappingURL=acp-
|
|
82
|
+
//# sourceMappingURL=acp-QYEYP4OZ.cjs.map
|
|
83
|
+
//# sourceMappingURL=acp-QYEYP4OZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/acp/server.ts","../src/acp/index.ts"],"names":["Readable","Writable","stream","ndJsonStream","AgentSideConnection","MastraCodeAcpAgent","setAutoApprove","createMastraCode","releaseAllThreadLocks"],"mappings":"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","file":"acp-
|
|
1
|
+
{"version":3,"sources":["../src/acp/server.ts","../src/acp/index.ts"],"names":["Readable","Writable","stream","ndJsonStream","AgentSideConnection","MastraCodeAcpAgent","setAutoApprove","createMastraCode","releaseAllThreadLocks"],"mappings":"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","file":"acp-QYEYP4OZ.cjs","sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport { AgentSideConnection, ndJsonStream } from '@agentclientprotocol/sdk';\nimport type { Harness, HarnessMode, Session } from '@mastra/core/harness';\nimport { MastraCodeAcpAgent } from './agent.js';\n\n/**\n * Run the ACP server over stdio.\n * This sets up the JSON-RPC stream and keeps the process alive until the client disconnects.\n */\nexport async function runAcpServer(\n harness: Harness,\n modes: HarnessMode[],\n cleanup?: () => Promise<void>,\n): Promise<void> {\n // Create the ndJSON stream from stdin/stdout\n const input = Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>;\n const output = Writable.toWeb(process.stdout) as WritableStream<Uint8Array>;\n const stream = ndJsonStream(output, input);\n let session: Session | undefined;\n let agent: MastraCodeAcpAgent | undefined;\n\n // Handle cleanup on disconnect (success or error)\n try {\n session = await harness.createSession();\n const activeSession = session;\n\n // Create the agent-side connection\n const connection = new AgentSideConnection(conn => {\n agent = new MastraCodeAcpAgent(conn, harness, activeSession, modes);\n return agent;\n }, stream);\n\n await connection.closed;\n } finally {\n agent?.dispose();\n session?.thread.detachFromCurrent();\n await session?.thread.clearAndReleaseLock();\n if (cleanup) {\n await cleanup();\n }\n }\n}\n","import type { HarnessMode } from '@mastra/core/harness';\n\nimport { createMastraCode } from '../index.js';\nimport { releaseAllThreadLocks } from '../utils/thread-lock.js';\nimport { setAutoApprove } from './event-mapper.js';\nimport { runAcpServer } from './server.js';\n\n/**\n * Entry point for ACP server mode.\n * Initializes mastracode and runs the ACP protocol over stdio.\n */\nexport async function acpMain(options?: { dangerousAutoApprove?: boolean }): Promise<void> {\n if (options?.dangerousAutoApprove) {\n setAutoApprove(true);\n }\n // Redirect console.log to stderr to avoid polluting the JSON-RPC stream on stdout.\n // eslint-disable-next-line no-console\n const originalConsoleLog = console.log;\n // eslint-disable-next-line no-console\n console.log = (...args: unknown[]) => {\n process.stderr.write(args.map(String).join(' ') + '\\n');\n };\n\n let result: Awaited<ReturnType<typeof createMastraCode>> | undefined;\n\n try {\n result = await createMastraCode({\n unixSocketPubSub: false,\n disableMcp: false,\n disableHooks: false,\n });\n\n const { harness, mcpManager, signalsPubSub } = result;\n\n // Default modes (same as createMastraCode defaults)\n const modes: HarnessMode[] = [\n { id: 'build', name: 'Build' },\n { id: 'plan', name: 'Plan' },\n { id: 'fast', name: 'Fast' },\n ];\n\n // Cleanup function (mirrors main.ts asyncCleanup)\n const cleanup = async () => {\n releaseAllThreadLocks();\n const closeSignalsPubSub = (signalsPubSub as { close?: () => Promise<void> | void } | undefined)?.close;\n await Promise.allSettled([\n mcpManager?.disconnect(),\n harness?.getMastra()?.stopWorkers(),\n harness?.stopHeartbeats(),\n closeSignalsPubSub?.(),\n ]);\n\n // Restore console.log\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n };\n\n // Handle signals\n const handleSignal = async () => {\n await cleanup();\n process.exit(0);\n };\n\n process.on('SIGINT', handleSignal);\n process.on('SIGTERM', handleSignal);\n\n await runAcpServer(harness, modes, cleanup);\n } catch (error) {\n process.stderr.write(`[acp] Fatal error: ${error}\\n`);\n // eslint-disable-next-line no-console\n console.log = originalConsoleLog;\n process.exit(1);\n }\n}\n"]}
|
|
@@ -61,24 +61,27 @@ function createCodexMiddleware(reasoningEffort) {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
+
async function getCodexBearer(authStorage) {
|
|
65
|
+
const storage = authStorage ?? getAuthStorage();
|
|
66
|
+
storage.reload();
|
|
67
|
+
const cred = storage.get("openai-codex");
|
|
68
|
+
if (!cred || cred.type !== "oauth") {
|
|
69
|
+
throw new Error("Not logged in to OpenAI Codex. Run /login first.");
|
|
70
|
+
}
|
|
71
|
+
let accessToken = cred.access;
|
|
72
|
+
if (Date.now() >= cred.expires) {
|
|
73
|
+
const refreshedToken = await storage.getApiKey("openai-codex");
|
|
74
|
+
if (!refreshedToken) {
|
|
75
|
+
throw new Error("Failed to refresh OpenAI Codex token. Please /login again.");
|
|
76
|
+
}
|
|
77
|
+
accessToken = refreshedToken;
|
|
78
|
+
storage.reload();
|
|
79
|
+
}
|
|
80
|
+
return { accessToken, accountId: cred.accountId };
|
|
81
|
+
}
|
|
64
82
|
function buildOpenAICodexOAuthFetch(opts = {}) {
|
|
65
83
|
return (async (url, init) => {
|
|
66
|
-
const
|
|
67
|
-
storage.reload();
|
|
68
|
-
const cred = storage.get("openai-codex");
|
|
69
|
-
if (!cred || cred.type !== "oauth") {
|
|
70
|
-
throw new Error("Not logged in to OpenAI Codex. Run /login first.");
|
|
71
|
-
}
|
|
72
|
-
let accessToken = cred.access;
|
|
73
|
-
if (Date.now() >= cred.expires) {
|
|
74
|
-
const refreshedToken = await storage.getApiKey("openai-codex");
|
|
75
|
-
if (!refreshedToken) {
|
|
76
|
-
throw new Error("Failed to refresh OpenAI Codex token. Please /login again.");
|
|
77
|
-
}
|
|
78
|
-
accessToken = refreshedToken;
|
|
79
|
-
storage.reload();
|
|
80
|
-
}
|
|
81
|
-
const accountId = cred.accountId;
|
|
84
|
+
const { accessToken, accountId } = await getCodexBearer(opts.authStorage);
|
|
82
85
|
const headers = new Headers();
|
|
83
86
|
if (init?.headers) {
|
|
84
87
|
if (init.headers instanceof Headers) {
|
|
@@ -126,6 +129,130 @@ function buildOpenAICodexOAuthFetch(opts = {}) {
|
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
}
|
|
132
|
+
function buildCodexStagehandFetch(authStorage) {
|
|
133
|
+
return (async (url, init) => {
|
|
134
|
+
const { accessToken } = await getCodexBearer(authStorage);
|
|
135
|
+
const headers = new Headers(init?.headers);
|
|
136
|
+
headers.set("Authorization", `Bearer ${accessToken}`);
|
|
137
|
+
headers.set("Accept", "text/event-stream");
|
|
138
|
+
let body = init?.body;
|
|
139
|
+
if (typeof init?.body === "string") {
|
|
140
|
+
try {
|
|
141
|
+
const parsed = JSON.parse(init.body);
|
|
142
|
+
parsed.stream = true;
|
|
143
|
+
body = JSON.stringify(parsed);
|
|
144
|
+
if (!headers.has("content-type")) headers.set("content-type", "application/json");
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const upstream = await fetch(url, { ...init, headers, body });
|
|
149
|
+
if (!upstream.ok) return upstream;
|
|
150
|
+
const aggregated = await aggregateCodexStream(upstream);
|
|
151
|
+
return new Response(aggregated, {
|
|
152
|
+
status: 200,
|
|
153
|
+
headers: { "content-type": "application/json" }
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async function aggregateCodexStream(response) {
|
|
158
|
+
if (!response.body) {
|
|
159
|
+
throw new Error("Codex streaming response had no body");
|
|
160
|
+
}
|
|
161
|
+
const reader = response.body.getReader();
|
|
162
|
+
const decoder = new TextDecoder("utf-8");
|
|
163
|
+
let buffer = "";
|
|
164
|
+
let finalResponse = null;
|
|
165
|
+
let createdResponse = null;
|
|
166
|
+
const items = /* @__PURE__ */ new Map();
|
|
167
|
+
const textBuffers = /* @__PURE__ */ new Map();
|
|
168
|
+
const handleEvent = (event) => {
|
|
169
|
+
if (!event.data || event.data === "[DONE]") return;
|
|
170
|
+
let payload;
|
|
171
|
+
try {
|
|
172
|
+
payload = JSON.parse(event.data);
|
|
173
|
+
} catch {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const type = payload.type ?? event.event ?? "";
|
|
177
|
+
switch (type) {
|
|
178
|
+
case "response.created": {
|
|
179
|
+
createdResponse = payload.response ?? createdResponse;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case "response.output_item.added": {
|
|
183
|
+
if (typeof payload.output_index === "number" && payload.item) {
|
|
184
|
+
items.set(payload.output_index, payload.item);
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case "response.output_item.done": {
|
|
189
|
+
if (typeof payload.output_index === "number" && payload.item) {
|
|
190
|
+
items.set(payload.output_index, payload.item);
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case "response.output_text.delta": {
|
|
195
|
+
const key = `${payload.output_index}:${payload.content_index ?? 0}`;
|
|
196
|
+
textBuffers.set(key, (textBuffers.get(key) ?? "") + (payload.delta ?? ""));
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
case "response.completed": {
|
|
200
|
+
finalResponse = payload.response ?? finalResponse;
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case "response.error":
|
|
204
|
+
case "error": {
|
|
205
|
+
throw new Error(`Codex stream error: ${JSON.stringify(payload.error ?? payload)}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const processChunk = (chunk) => {
|
|
210
|
+
buffer += chunk.replace(/\r\n/g, "\n");
|
|
211
|
+
let sepIdx;
|
|
212
|
+
while ((sepIdx = buffer.indexOf("\n\n")) !== -1) {
|
|
213
|
+
const raw = buffer.slice(0, sepIdx);
|
|
214
|
+
buffer = buffer.slice(sepIdx + 2);
|
|
215
|
+
const event = {};
|
|
216
|
+
const dataLines = [];
|
|
217
|
+
for (const line of raw.split("\n")) {
|
|
218
|
+
if (line.startsWith("event:")) {
|
|
219
|
+
event.event = line.slice(6).trim();
|
|
220
|
+
} else if (line.startsWith("data:")) {
|
|
221
|
+
dataLines.push(line.slice(5).trimStart());
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (dataLines.length > 0) {
|
|
225
|
+
event.data = dataLines.join("\n");
|
|
226
|
+
}
|
|
227
|
+
handleEvent(event);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
try {
|
|
231
|
+
while (true) {
|
|
232
|
+
const { value, done } = await reader.read();
|
|
233
|
+
if (done) break;
|
|
234
|
+
processChunk(decoder.decode(value, { stream: true }));
|
|
235
|
+
}
|
|
236
|
+
processChunk(decoder.decode());
|
|
237
|
+
} finally {
|
|
238
|
+
reader.releaseLock();
|
|
239
|
+
}
|
|
240
|
+
const base = finalResponse ?? createdResponse ?? { output: [] };
|
|
241
|
+
const finalItems = Array.from(items.entries()).sort(([a], [b]) => a - b).map(([index, item]) => {
|
|
242
|
+
if (item?.type === "message" && Array.isArray(item.content)) {
|
|
243
|
+
item.content = item.content.map((c, ci) => {
|
|
244
|
+
const key = `${index}:${ci}`;
|
|
245
|
+
if (textBuffers.has(key)) {
|
|
246
|
+
return { ...c, text: textBuffers.get(key) };
|
|
247
|
+
}
|
|
248
|
+
return c;
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return item;
|
|
252
|
+
});
|
|
253
|
+
base.output = finalItems.length > 0 ? finalItems : base.output ?? [];
|
|
254
|
+
return JSON.stringify(base);
|
|
255
|
+
}
|
|
129
256
|
function openaiCodexProvider(modelId = "codex-mini-latest", options) {
|
|
130
257
|
const requestedLevel = options?.thinkingLevel ?? "medium";
|
|
131
258
|
const effectiveLevel = getEffectiveThinkingLevel(modelId, requestedLevel);
|
|
@@ -670,10 +797,18 @@ async function createBrowserFromSettings(settings) {
|
|
|
670
797
|
const authStorage = new AuthStorage();
|
|
671
798
|
const cred = authStorage.get("openai-codex");
|
|
672
799
|
if (cred?.type === "oauth") {
|
|
800
|
+
const accountId = cred.accountId;
|
|
673
801
|
stagehandOpts.model = {
|
|
674
|
-
modelName: "openai/gpt-4
|
|
802
|
+
modelName: "openai/gpt-5.4-mini",
|
|
675
803
|
apiKey: "codex-oauth",
|
|
676
|
-
|
|
804
|
+
baseURL: "https://chatgpt.com/backend-api/codex",
|
|
805
|
+
headers: {
|
|
806
|
+
originator: "mastracode",
|
|
807
|
+
"User-Agent": "mastracode",
|
|
808
|
+
...accountId ? { "ChatGPT-Account-ID": accountId } : {}
|
|
809
|
+
},
|
|
810
|
+
fetch: buildCodexStagehandFetch(authStorage),
|
|
811
|
+
middleware: createCodexMiddleware()
|
|
677
812
|
};
|
|
678
813
|
}
|
|
679
814
|
return cdpUrl ? new StagehandBrowser({ ...launchConfig, cdpUrl, scope: "shared", ...stagehandOpts }) : new StagehandBrowser({ ...launchConfig, ...stagehandOpts });
|
|
@@ -1330,5 +1465,5 @@ function releaseAllThreadLocks() {
|
|
|
1330
1465
|
}
|
|
1331
1466
|
|
|
1332
1467
|
export { BOX_INDENT, BOX_INDENT_STR, CHAT_INDENT, MEMORY_GATEWAY_DEFAULT_URL, MEMORY_GATEWAY_PROVIDER, OBSERVABILITY_AUTH_PREFIX, ONBOARDING_VERSION, TERM_WIDTH_BUFFER, THINKING_LEVEL_TO_REASONING_EFFORT, THREAD_ACTIVE_MODEL_PACK_ID_KEY, ThreadLockError, acquireThreadLock, applyThemeMode, buildOpenAICodexOAuthFetch, checkProfileProviderMismatch, createBrowserFromSettings, createCodexMiddleware, ensureTerminalGlyphContrast, extendedColors, getAvailableModePacks, getAvailableOmPacks, getCustomProviderId, getEditorTheme, getEffectiveThinkingLevel, getMarkdownTheme, getSelectListTheme, getSettingsListTheme, getTermWidth, getThemeMode, loadSettings, luminance, mastra, mastraBrand, openaiCodexProvider, releaseAllThreadLocks, releaseThreadLock, resolveModelDefaults, resolveOmRoleModel, resolveThreadActiveModelPackId, restoreTerminalForeground, saveSettings, setAuthStorage, setProfileProvider, theme, tintHex, toCustomProviderModelId };
|
|
1333
|
-
//# sourceMappingURL=chunk-
|
|
1334
|
-
//# sourceMappingURL=chunk-
|
|
1468
|
+
//# sourceMappingURL=chunk-5FIPMH3Y.js.map
|
|
1469
|
+
//# sourceMappingURL=chunk-5FIPMH3Y.js.map
|