@seawork/server 1.0.4 → 1.0.10-rc.4
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/dist/server/client/daemon-client.d.ts +32 -1
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +69 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -1
- package/dist/server/server/agent/agent-management-mcp.js +6 -5
- package/dist/server/server/agent/agent-management-mcp.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js +0 -1
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +68 -68
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +6 -5
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +30 -30
- package/dist/server/server/agent/provider-manifest.d.ts +2 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +8 -69
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +2 -10
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.d.ts +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.js +4 -39
- package/dist/server/server/agent/providers/claude/claude-models.js.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
- package/dist/server/server/agent/providers/claude-agent.d.ts +2 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +175 -46
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +128 -72
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +76 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
- package/dist/server/server/agent/providers/seawork-models.d.ts +4 -0
- package/dist/server/server/agent/providers/seawork-models.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seawork-models.js +128 -0
- package/dist/server/server/agent/providers/seawork-models.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +16 -16
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +35 -1
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/bug-report-handler.d.ts +9 -0
- package/dist/server/server/bug-report-handler.d.ts.map +1 -0
- package/dist/server/server/bug-report-handler.js +111 -0
- package/dist/server/server/bug-report-handler.js.map +1 -0
- package/dist/server/server/bug-report-redact.d.ts +12 -0
- package/dist/server/server/bug-report-redact.d.ts.map +1 -0
- package/dist/server/server/bug-report-redact.js +63 -0
- package/dist/server/server/bug-report-redact.js.map +1 -0
- package/dist/server/server/chat/chat-rpc-schemas.d.ts +26 -26
- package/dist/server/server/chat/chat-types.d.ts +2 -2
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +6 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/exports.d.ts +4 -2
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +3 -0
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/index.js +54 -0
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +775 -775
- package/dist/server/server/loop-service.d.ts +108 -108
- package/dist/server/server/persisted-config.d.ts +121 -121
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +35 -2
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/sac/auth.d.ts +41 -0
- package/dist/server/server/sac/auth.d.ts.map +1 -0
- package/dist/server/server/sac/auth.js +103 -0
- package/dist/server/server/sac/auth.js.map +1 -0
- package/dist/server/server/sac/client.d.ts +15 -0
- package/dist/server/server/sac/client.d.ts.map +1 -0
- package/dist/server/server/sac/client.js +70 -0
- package/dist/server/server/sac/client.js.map +1 -0
- package/dist/server/server/sac/download.d.ts +10 -0
- package/dist/server/server/sac/download.d.ts.map +1 -0
- package/dist/server/server/sac/download.js +67 -0
- package/dist/server/server/sac/download.js.map +1 -0
- package/dist/server/server/sac/endpoints.d.ts +13 -0
- package/dist/server/server/sac/endpoints.d.ts.map +1 -0
- package/dist/server/server/sac/endpoints.js +16 -0
- package/dist/server/server/sac/endpoints.js.map +1 -0
- package/dist/server/server/sac/errors.d.ts +40 -0
- package/dist/server/server/sac/errors.d.ts.map +1 -0
- package/dist/server/server/sac/errors.js +47 -0
- package/dist/server/server/sac/errors.js.map +1 -0
- package/dist/server/server/sac/generate.d.ts +43 -0
- package/dist/server/server/sac/generate.d.ts.map +1 -0
- package/dist/server/server/sac/generate.js +206 -0
- package/dist/server/server/sac/generate.js.map +1 -0
- package/dist/server/server/sac/index.d.ts +22 -0
- package/dist/server/server/sac/index.d.ts.map +1 -0
- package/dist/server/server/sac/index.js +14 -0
- package/dist/server/server/sac/index.js.map +1 -0
- package/dist/server/server/sac/output.d.ts +22 -0
- package/dist/server/server/sac/output.d.ts.map +1 -0
- package/dist/server/server/sac/output.js +142 -0
- package/dist/server/server/sac/output.js.map +1 -0
- package/dist/server/server/sac/poll.d.ts +12 -0
- package/dist/server/server/sac/poll.d.ts.map +1 -0
- package/dist/server/server/sac/poll.js +67 -0
- package/dist/server/server/sac/poll.js.map +1 -0
- package/dist/server/server/sac/providers/alibaba.d.ts +2 -0
- package/dist/server/server/sac/providers/alibaba.d.ts.map +1 -0
- package/dist/server/server/sac/providers/alibaba.js +506 -0
- package/dist/server/server/sac/providers/alibaba.js.map +1 -0
- package/dist/server/server/sac/providers/audio.d.ts +2 -0
- package/dist/server/server/sac/providers/audio.d.ts.map +1 -0
- package/dist/server/server/sac/providers/audio.js +57 -0
- package/dist/server/server/sac/providers/audio.js.map +1 -0
- package/dist/server/server/sac/providers/index.d.ts +19 -0
- package/dist/server/server/sac/providers/index.d.ts.map +1 -0
- package/dist/server/server/sac/providers/index.js +32 -0
- package/dist/server/server/sac/providers/index.js.map +1 -0
- package/dist/server/server/sac/providers/kling.d.ts +2 -0
- package/dist/server/server/sac/providers/kling.d.ts.map +1 -0
- package/dist/server/server/sac/providers/kling.js +589 -0
- package/dist/server/server/sac/providers/kling.js.map +1 -0
- package/dist/server/server/sac/providers/nano.d.ts +2 -0
- package/dist/server/server/sac/providers/nano.d.ts.map +1 -0
- package/dist/server/server/sac/providers/nano.js +37 -0
- package/dist/server/server/sac/providers/nano.js.map +1 -0
- package/dist/server/server/sac/providers/pixverse.d.ts +2 -0
- package/dist/server/server/sac/providers/pixverse.d.ts.map +1 -0
- package/dist/server/server/sac/providers/pixverse.js +1017 -0
- package/dist/server/server/sac/providers/pixverse.js.map +1 -0
- package/dist/server/server/sac/providers/registry.d.ts +34 -0
- package/dist/server/server/sac/providers/registry.d.ts.map +1 -0
- package/dist/server/server/sac/providers/registry.js +57 -0
- package/dist/server/server/sac/providers/registry.js.map +1 -0
- package/dist/server/server/sac/providers/seaart.d.ts +4 -0
- package/dist/server/server/sac/providers/seaart.d.ts.map +1 -0
- package/dist/server/server/sac/providers/seaart.js +57 -0
- package/dist/server/server/sac/providers/seaart.js.map +1 -0
- package/dist/server/server/sac/providers/store.d.ts +12 -0
- package/dist/server/server/sac/providers/store.d.ts.map +1 -0
- package/dist/server/server/sac/providers/store.js +7 -0
- package/dist/server/server/sac/providers/store.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-3d.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-3d.js +210 -0
- package/dist/server/server/sac/providers/tencent-3d.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-image.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-image.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-image.js +90 -0
- package/dist/server/server/sac/providers/tencent-image.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-video.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-video.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-video.js +103 -0
- package/dist/server/server/sac/providers/tencent-video.js.map +1 -0
- package/dist/server/server/sac/providers/tripo3d.d.ts +2 -0
- package/dist/server/server/sac/providers/tripo3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tripo3d.js +302 -0
- package/dist/server/server/sac/providers/tripo3d.js.map +1 -0
- package/dist/server/server/sac/providers/vidu.d.ts +2 -0
- package/dist/server/server/sac/providers/vidu.d.ts.map +1 -0
- package/dist/server/server/sac/providers/vidu.js +965 -0
- package/dist/server/server/sac/providers/vidu.js.map +1 -0
- package/dist/server/server/sac/providers/volces-3d.d.ts +2 -0
- package/dist/server/server/sac/providers/volces-3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces-3d.js +77 -0
- package/dist/server/server/sac/providers/volces-3d.js.map +1 -0
- package/dist/server/server/sac/providers/volces-video.d.ts +2 -0
- package/dist/server/server/sac/providers/volces-video.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces-video.js +392 -0
- package/dist/server/server/sac/providers/volces-video.js.map +1 -0
- package/dist/server/server/sac/providers/volces.d.ts +2 -0
- package/dist/server/server/sac/providers/volces.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces.js +301 -0
- package/dist/server/server/sac/providers/volces.js.map +1 -0
- package/dist/server/server/sac/types.d.ts +59 -0
- package/dist/server/server/sac/types.d.ts.map +1 -0
- package/dist/server/server/sac/types.js +5 -0
- package/dist/server/server/sac/types.js.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts +493 -493
- package/dist/server/server/schedule/types.d.ts +140 -140
- package/dist/server/server/session.d.ts +9 -2
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +137 -19
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/speech-types.d.ts +2 -2
- package/dist/server/server/workspace-registry.d.ts +4 -4
- package/dist/server/shared/messages.d.ts +17455 -15917
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +83 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/utils/spawn.d.ts.map +1 -1
- package/dist/server/utils/spawn.js +8 -3
- package/dist/server/utils/spawn.js.map +1 -1
- package/dist/server/utils/worktree-metadata.d.ts +4 -4
- package/dist/src/server/pid-lock.js +35 -2
- package/dist/src/server/pid-lock.js.map +1 -1
- package/package.json +14 -9
- package/dist/server/server/agent/providers/acp-agent.d.ts +0 -202
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/acp-agent.js +0 -1650
- package/dist/server/server/agent/providers/acp-agent.js.map +0 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +0 -16
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +0 -95
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +0 -3
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +0 -13
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +0 -144
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +0 -121
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode-agent.js +0 -1649
- package/dist/server/server/agent/providers/opencode-agent.js.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
- package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
|
@@ -10,6 +10,7 @@ import { loadCodexPersistedTimeline } from "./codex-rollout-timeline.js";
|
|
|
10
10
|
import { mapCodexRolloutToolCall, mapCodexToolCallFromThreadItem, } from "./codex/tool-call-mapper.js";
|
|
11
11
|
import { applyProviderEnv, resolveProviderCommandPrefix, } from "../provider-launch-config.js";
|
|
12
12
|
import { findExecutable } from "../../../utils/executable.js";
|
|
13
|
+
import { getSeaworkModels } from "./seawork-models.js";
|
|
13
14
|
import { spawnProcess } from "../../../utils/spawn.js";
|
|
14
15
|
import { extractCodexTerminalSessionId, nonEmptyString } from "./tool-call-mapper-utils.js";
|
|
15
16
|
import { buildCodexFeatures, codexModelSupportsFastMode } from "./codex-feature-definitions.js";
|
|
@@ -81,9 +82,6 @@ function normalizeCodexModelId(modelId) {
|
|
|
81
82
|
}
|
|
82
83
|
return normalized;
|
|
83
84
|
}
|
|
84
|
-
function normalizeCodexModelLabel(displayName) {
|
|
85
|
-
return displayName.replace(/\bgpt\b/gi, "GPT");
|
|
86
|
-
}
|
|
87
85
|
function isSchemaRecord(value) {
|
|
88
86
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
89
87
|
}
|
|
@@ -864,6 +862,8 @@ function normalizeCodexThreadItemType(rawType) {
|
|
|
864
862
|
return "mcpToolCall";
|
|
865
863
|
case "WebSearch":
|
|
866
864
|
return "webSearch";
|
|
865
|
+
case "ImageGeneration":
|
|
866
|
+
return "imageGeneration";
|
|
867
867
|
default:
|
|
868
868
|
return rawType;
|
|
869
869
|
}
|
|
@@ -1123,6 +1123,46 @@ function mapCodexTerminalInteractionToToolCall(params) {
|
|
|
1123
1123
|
...(processId ? { metadata: { processId } } : {}),
|
|
1124
1124
|
};
|
|
1125
1125
|
}
|
|
1126
|
+
function normalizeCodexGeneratedImageSource(item) {
|
|
1127
|
+
const savedPath = nonEmptyString(item.savedPath) ??
|
|
1128
|
+
nonEmptyString(item.saved_path) ??
|
|
1129
|
+
nonEmptyString(item.path) ??
|
|
1130
|
+
null;
|
|
1131
|
+
if (savedPath) {
|
|
1132
|
+
return savedPath;
|
|
1133
|
+
}
|
|
1134
|
+
const result = nonEmptyString(item.result);
|
|
1135
|
+
if (!result) {
|
|
1136
|
+
return null;
|
|
1137
|
+
}
|
|
1138
|
+
return result.startsWith("data:") ? result : `data:image/png;base64,${result}`;
|
|
1139
|
+
}
|
|
1140
|
+
function markdownImageSource(source) {
|
|
1141
|
+
if (/^(https?:|data:|blob:)/i.test(source)) {
|
|
1142
|
+
return source;
|
|
1143
|
+
}
|
|
1144
|
+
return `<${source.replace(/>/g, "%3E")}>`;
|
|
1145
|
+
}
|
|
1146
|
+
function mapCodexImageGenerationToTimeline(item) {
|
|
1147
|
+
const source = normalizeCodexGeneratedImageSource(item);
|
|
1148
|
+
if (!source) {
|
|
1149
|
+
return null;
|
|
1150
|
+
}
|
|
1151
|
+
return {
|
|
1152
|
+
type: "assistant_message",
|
|
1153
|
+
text: `})`,
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
function rawResponseItemToThreadItem(item) {
|
|
1157
|
+
if (item.type !== "image_generation_call") {
|
|
1158
|
+
return null;
|
|
1159
|
+
}
|
|
1160
|
+
return {
|
|
1161
|
+
...item,
|
|
1162
|
+
type: "imageGeneration",
|
|
1163
|
+
revisedPrompt: item.revised_prompt ?? item.revisedPrompt ?? null,
|
|
1164
|
+
};
|
|
1165
|
+
}
|
|
1126
1166
|
function threadItemToTimeline(item, options) {
|
|
1127
1167
|
if (!item || typeof item !== "object")
|
|
1128
1168
|
return null;
|
|
@@ -1165,6 +1205,8 @@ function threadItemToTimeline(item, options) {
|
|
|
1165
1205
|
case "mcpToolCall":
|
|
1166
1206
|
case "webSearch":
|
|
1167
1207
|
return mapCodexToolCallFromThreadItem(normalizedItem, { cwd });
|
|
1208
|
+
case "imageGeneration":
|
|
1209
|
+
return mapCodexImageGenerationToTimeline(normalizedItem);
|
|
1168
1210
|
default:
|
|
1169
1211
|
return null;
|
|
1170
1212
|
}
|
|
@@ -1270,6 +1312,16 @@ const ItemLifecycleNotificationSchema = z
|
|
|
1270
1312
|
.passthrough(),
|
|
1271
1313
|
})
|
|
1272
1314
|
.passthrough();
|
|
1315
|
+
const RawResponseItemCompletedNotificationSchema = z
|
|
1316
|
+
.object({
|
|
1317
|
+
item: z
|
|
1318
|
+
.object({
|
|
1319
|
+
id: z.string().optional(),
|
|
1320
|
+
type: z.string().optional(),
|
|
1321
|
+
})
|
|
1322
|
+
.passthrough(),
|
|
1323
|
+
})
|
|
1324
|
+
.passthrough();
|
|
1273
1325
|
const CodexEventTurnAbortedNotificationSchema = z
|
|
1274
1326
|
.object({
|
|
1275
1327
|
msg: z
|
|
@@ -1521,6 +1573,20 @@ const CodexNotificationSchema = z.union([
|
|
|
1521
1573
|
method,
|
|
1522
1574
|
params,
|
|
1523
1575
|
})),
|
|
1576
|
+
z
|
|
1577
|
+
.object({
|
|
1578
|
+
method: z.literal("rawResponseItem/completed"),
|
|
1579
|
+
params: RawResponseItemCompletedNotificationSchema,
|
|
1580
|
+
})
|
|
1581
|
+
.transform(({ params }) => ({
|
|
1582
|
+
kind: "raw_response_item_completed",
|
|
1583
|
+
item: params.item,
|
|
1584
|
+
})),
|
|
1585
|
+
z.object({ method: z.literal("rawResponseItem/completed"), params: z.unknown() }).transform(({ method, params }) => ({
|
|
1586
|
+
kind: "invalid_payload",
|
|
1587
|
+
method,
|
|
1588
|
+
params,
|
|
1589
|
+
})),
|
|
1524
1590
|
z
|
|
1525
1591
|
.object({ method: z.literal("item/started"), params: ItemLifecycleNotificationSchema })
|
|
1526
1592
|
.transform(({ params }) => ({
|
|
@@ -1838,6 +1904,11 @@ export async function codexAppServerTurnInputFromPrompt(prompt, logger) {
|
|
|
1838
1904
|
}
|
|
1839
1905
|
function buildCodexAppServerEnv(runtimeSettings, launchEnv) {
|
|
1840
1906
|
const env = applyProviderEnv(process.env, runtimeSettings);
|
|
1907
|
+
// Clear proxy env vars to prevent interference with gateway requests
|
|
1908
|
+
env.http_proxy = "";
|
|
1909
|
+
env.https_proxy = "";
|
|
1910
|
+
env.HTTP_PROXY = "";
|
|
1911
|
+
env.HTTPS_PROXY = "";
|
|
1841
1912
|
if (!launchEnv) {
|
|
1842
1913
|
return env;
|
|
1843
1914
|
}
|
|
@@ -2370,13 +2441,17 @@ class CodexAppServerAgentSession {
|
|
|
2370
2441
|
}
|
|
2371
2442
|
const turnId = this.createTurnId();
|
|
2372
2443
|
this.activeForegroundTurnId = turnId;
|
|
2444
|
+
const turnStartT0 = Date.now();
|
|
2445
|
+
this.logger.info({ turnId }, "[timing] codex turn/start request sending");
|
|
2373
2446
|
try {
|
|
2374
2447
|
await this.client.request("turn/start", params, TURN_START_TIMEOUT_MS);
|
|
2375
2448
|
}
|
|
2376
2449
|
catch (error) {
|
|
2450
|
+
this.logger.info({ turnId, elapsedMs: Date.now() - turnStartT0 }, "[timing] codex turn/start FAILED");
|
|
2377
2451
|
this.activeForegroundTurnId = null;
|
|
2378
2452
|
throw error;
|
|
2379
2453
|
}
|
|
2454
|
+
this.logger.info({ turnId, elapsedMs: Date.now() - turnStartT0 }, "[timing] codex turn/start acknowledged");
|
|
2380
2455
|
return { turnId };
|
|
2381
2456
|
}
|
|
2382
2457
|
subscribe(callback) {
|
|
@@ -2944,6 +3019,27 @@ class CodexAppServerAgentSession {
|
|
|
2944
3019
|
}
|
|
2945
3020
|
return;
|
|
2946
3021
|
}
|
|
3022
|
+
if (parsed.kind === "raw_response_item_completed") {
|
|
3023
|
+
const threadItem = rawResponseItemToThreadItem(parsed.item);
|
|
3024
|
+
if (!threadItem) {
|
|
3025
|
+
return;
|
|
3026
|
+
}
|
|
3027
|
+
const itemId = threadItem.id;
|
|
3028
|
+
if (itemId && this.emittedItemCompletedIds.has(itemId)) {
|
|
3029
|
+
return;
|
|
3030
|
+
}
|
|
3031
|
+
const timelineItem = threadItemToTimeline(threadItem, {
|
|
3032
|
+
includeUserMessage: false,
|
|
3033
|
+
cwd: this.config.cwd ?? null,
|
|
3034
|
+
});
|
|
3035
|
+
if (timelineItem) {
|
|
3036
|
+
this.emitEvent({ type: "timeline", provider: CODEX_PROVIDER, item: timelineItem });
|
|
3037
|
+
if (itemId) {
|
|
3038
|
+
this.emittedItemCompletedIds.add(itemId);
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
return;
|
|
3042
|
+
}
|
|
2947
3043
|
if (parsed.kind === "item_completed") {
|
|
2948
3044
|
// Codex emits mirrored lifecycle notifications via both `codex/event/item_*`
|
|
2949
3045
|
// and canonical `item/*`. We render only the canonical channel to avoid
|
|
@@ -3251,10 +3347,34 @@ export class CodexAppServerAgentClient {
|
|
|
3251
3347
|
this.logger.trace({
|
|
3252
3348
|
launchPrefix,
|
|
3253
3349
|
}, "Spawning Codex app server");
|
|
3254
|
-
|
|
3350
|
+
const codexEnv = buildCodexAppServerEnv(this.runtimeSettings, launchEnv);
|
|
3351
|
+
this.logger.info({
|
|
3352
|
+
hasOpenaiKey: !!codexEnv.OPENAI_API_KEY,
|
|
3353
|
+
openaiKeyPrefix: codexEnv.OPENAI_API_KEY?.slice(0, 10) ?? null,
|
|
3354
|
+
openaiBaseUrl: codexEnv.OPENAI_BASE_URL ?? null,
|
|
3355
|
+
}, "Codex app-server env check");
|
|
3356
|
+
// If a Seawork-managed base URL is available, inject a "seawork" provider
|
|
3357
|
+
// via -c flags to override any user config.
|
|
3358
|
+
const extraArgs = [];
|
|
3359
|
+
const seaworkBaseUrl = codexEnv.OPENAI_BASE_URL;
|
|
3360
|
+
if (seaworkBaseUrl) {
|
|
3361
|
+
extraArgs.push("-c", `model_provider="seawork"`, "-c", `model_providers.seawork.name="Seawork"`, "-c", `model_providers.seawork.base_url="${seaworkBaseUrl}/v1"`, "-c", `model_providers.seawork.env_key="SEAWORK_API_KEY"`, "--disable", "js_repl");
|
|
3362
|
+
codexEnv.SEAWORK_API_KEY = codexEnv.OPENAI_API_KEY ?? "";
|
|
3363
|
+
}
|
|
3364
|
+
const fullArgs = [...launchPrefix.args, "app-server", ...extraArgs];
|
|
3365
|
+
this.logger.debug({
|
|
3366
|
+
command: launchPrefix.command,
|
|
3367
|
+
args: fullArgs,
|
|
3368
|
+
hasOpenaiKey: !!codexEnv.OPENAI_API_KEY,
|
|
3369
|
+
openaiKeyPrefix: codexEnv.OPENAI_API_KEY?.slice(0, 10) ?? null,
|
|
3370
|
+
openaiBaseUrl: codexEnv.OPENAI_BASE_URL ?? null,
|
|
3371
|
+
hasSeaworkKey: !!codexEnv.SEAWORK_API_KEY,
|
|
3372
|
+
launchEnvKeys: Object.keys(launchEnv ?? {}),
|
|
3373
|
+
}, "codex_spawn");
|
|
3374
|
+
return spawnProcess(launchPrefix.command, fullArgs, {
|
|
3255
3375
|
detached: process.platform !== "win32",
|
|
3256
3376
|
stdio: ["pipe", "pipe", "pipe"],
|
|
3257
|
-
env:
|
|
3377
|
+
env: codexEnv,
|
|
3258
3378
|
});
|
|
3259
3379
|
}
|
|
3260
3380
|
async createSession(config, launchContext) {
|
|
@@ -3270,6 +3390,7 @@ export class CodexAppServerAgentClient {
|
|
|
3270
3390
|
...overrides,
|
|
3271
3391
|
provider: CODEX_PROVIDER,
|
|
3272
3392
|
cwd: overrides?.cwd ?? storedConfig.cwd ?? process.cwd(),
|
|
3393
|
+
modeId: overrides?.modeId ?? storedConfig.modeId ?? "auto",
|
|
3273
3394
|
};
|
|
3274
3395
|
const session = new CodexAppServerAgentSession(merged, handle, this.logger, () => this.spawnAppServer(launchContext?.env));
|
|
3275
3396
|
await session.connect();
|
|
@@ -3337,79 +3458,14 @@ export class CodexAppServerAgentClient {
|
|
|
3337
3458
|
}
|
|
3338
3459
|
}
|
|
3339
3460
|
async listModels(_options) {
|
|
3340
|
-
|
|
3341
|
-
const client = new CodexAppServerClient(child, this.logger);
|
|
3342
|
-
try {
|
|
3343
|
-
await client.request("initialize", buildCodexAppServerInitializeParams());
|
|
3344
|
-
client.notify("initialized", {});
|
|
3345
|
-
const response = (await client.request("model/list", {}));
|
|
3346
|
-
const models = Array.isArray(response?.data) ? response.data : [];
|
|
3347
|
-
const configuredDefaults = await readCodexConfiguredDefaults(client, this.logger);
|
|
3348
|
-
const configuredDefaultModelId = configuredDefaults.model;
|
|
3349
|
-
const configuredDefaultThinkingOptionId = configuredDefaults.thinkingOptionId;
|
|
3350
|
-
const hasConfiguredDefaultModel = typeof configuredDefaultModelId === "string"
|
|
3351
|
-
? models.some((model) => model?.id === configuredDefaultModelId)
|
|
3352
|
-
: false;
|
|
3353
|
-
return models.map((model) => {
|
|
3354
|
-
const defaultReasoningEffort = normalizeCodexThinkingOptionId(typeof model.defaultReasoningEffort === "string" ? model.defaultReasoningEffort : null);
|
|
3355
|
-
const resolvedDefaultReasoningEffort = configuredDefaultThinkingOptionId ?? defaultReasoningEffort;
|
|
3356
|
-
const thinkingById = new Map();
|
|
3357
|
-
if (Array.isArray(model.supportedReasoningEfforts)) {
|
|
3358
|
-
for (const entry of model.supportedReasoningEfforts) {
|
|
3359
|
-
const id = normalizeCodexThinkingOptionId(typeof entry?.reasoningEffort === "string" ? entry.reasoningEffort : null);
|
|
3360
|
-
if (!id)
|
|
3361
|
-
continue;
|
|
3362
|
-
const description = typeof entry?.description === "string" && entry.description.trim().length > 0
|
|
3363
|
-
? entry.description
|
|
3364
|
-
: undefined;
|
|
3365
|
-
thinkingById.set(id, { id, label: id, description });
|
|
3366
|
-
}
|
|
3367
|
-
}
|
|
3368
|
-
if (resolvedDefaultReasoningEffort && !thinkingById.has(resolvedDefaultReasoningEffort)) {
|
|
3369
|
-
thinkingById.set(resolvedDefaultReasoningEffort, {
|
|
3370
|
-
id: resolvedDefaultReasoningEffort,
|
|
3371
|
-
label: resolvedDefaultReasoningEffort,
|
|
3372
|
-
description: configuredDefaultThinkingOptionId === resolvedDefaultReasoningEffort
|
|
3373
|
-
? "Configured default reasoning effort"
|
|
3374
|
-
: "Model default reasoning effort",
|
|
3375
|
-
});
|
|
3376
|
-
}
|
|
3377
|
-
const thinkingOptions = Array.from(thinkingById.values()).map((option) => ({
|
|
3378
|
-
...option,
|
|
3379
|
-
isDefault: option.id === resolvedDefaultReasoningEffort,
|
|
3380
|
-
}));
|
|
3381
|
-
const defaultThinkingOptionId = resolvedDefaultReasoningEffort ??
|
|
3382
|
-
thinkingOptions.find((option) => option.isDefault)?.id ??
|
|
3383
|
-
thinkingOptions[0]?.id;
|
|
3384
|
-
const isDefaultModel = hasConfiguredDefaultModel
|
|
3385
|
-
? model.id === configuredDefaultModelId
|
|
3386
|
-
: model.isDefault;
|
|
3387
|
-
return {
|
|
3388
|
-
provider: CODEX_PROVIDER,
|
|
3389
|
-
id: model.id,
|
|
3390
|
-
label: normalizeCodexModelLabel(model.displayName),
|
|
3391
|
-
description: model.description,
|
|
3392
|
-
isDefault: isDefaultModel,
|
|
3393
|
-
thinkingOptions: thinkingOptions.length > 0 ? thinkingOptions : undefined,
|
|
3394
|
-
defaultThinkingOptionId,
|
|
3395
|
-
metadata: {
|
|
3396
|
-
model: model.model,
|
|
3397
|
-
defaultReasoningEffort: model.defaultReasoningEffort,
|
|
3398
|
-
supportedReasoningEfforts: model.supportedReasoningEfforts,
|
|
3399
|
-
},
|
|
3400
|
-
};
|
|
3401
|
-
});
|
|
3402
|
-
}
|
|
3403
|
-
finally {
|
|
3404
|
-
await client.dispose();
|
|
3405
|
-
}
|
|
3461
|
+
return getSeaworkModels("codex");
|
|
3406
3462
|
}
|
|
3407
3463
|
async isAvailable() {
|
|
3408
3464
|
const command = this.runtimeSettings?.command;
|
|
3409
3465
|
if (command?.mode === "replace") {
|
|
3410
3466
|
return existsSync(command.argv[0]);
|
|
3411
3467
|
}
|
|
3412
|
-
return
|
|
3468
|
+
return (await findExecutable("codex")) !== null;
|
|
3413
3469
|
}
|
|
3414
3470
|
async getDiagnostic() {
|
|
3415
3471
|
try {
|