openfox 2.0.0-beta.0 → 2.0.0-beta.10
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/agent-defaults/code-reviewer.agent.md +2 -1
- package/dist/{chat-handler-IVIWOR3D.js → chat-handler-6COBLIDR.js} +14 -27
- package/dist/{chunk-CEZNMLOO.js → chunk-7TTEGAO6.js} +12 -13
- package/dist/{chunk-JZQ644DE.js → chunk-BE2S4NJX.js} +6 -6
- package/dist/{chunk-FQLK5GL5.js → chunk-BVHFMAVN.js} +1 -1
- package/dist/{chunk-UFY4I643.js → chunk-C75I2KZM.js} +135 -147
- package/dist/{chunk-QFSSKIQ3.js → chunk-CDDMHSZF.js} +4 -4
- package/dist/{chunk-RF2JGDSS.js → chunk-DMH6JVPF.js} +13 -10
- package/dist/{chunk-NNEHZT3V.js → chunk-EZUR7OEP.js} +11 -3
- package/dist/{chunk-CTQ2FS4K.js → chunk-G4SACK4E.js} +221 -104
- package/dist/{chunk-ALH4KM2Y.js → chunk-LR5R7EEE.js} +2962 -3249
- package/dist/{chunk-XKR3HCAL.js → chunk-NPHYEUYE.js} +128 -34
- package/dist/{chunk-PSJIT5LZ.js → chunk-RFNEDBVO.js} +4 -4
- package/dist/chunk-RI6GAMNP.js +13 -0
- package/dist/{chunk-HHAJ3QF6.js → chunk-UKTPL5ZG.js} +16 -28
- package/dist/{chunk-HGAMIPFO.js → chunk-VIIRNJDT.js} +39 -178
- package/dist/{chunk-NONI4CRP.js → chunk-XJEOP6XU.js} +5 -32
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/compactor-TDNRM3A7.js +9 -0
- package/dist/{config-YU7NYZYG.js → config-TDVA7MQN.js} +9 -8
- package/dist/{events-OHJWCI3S.js → events-PQ3KTI5H.js} +8 -7
- package/dist/{folding-U6UHQAS5.js → folding-CXORTBAU.js} +2 -2
- package/dist/{orchestrator-7ZXM4J22.js → orchestrator-ZNGTMZ7W.js} +18 -22
- package/dist/package.json +1 -1
- package/dist/{processor-TKBJLQ2N.js → processor-WMAU4C2N.js} +8 -9
- package/dist/{protocol-BQ12Aw5J.d.ts → protocol-CDOV1pyc.d.ts} +13 -38
- package/dist/{protocol-K62EPEGS.js → protocol-CN24IKQN.js} +3 -5
- package/dist/{provider-HTJEB3ON.js → provider-BGH4MBLH.js} +25 -10
- package/dist/{serve-FGPHMDOC.js → serve-7VMTNIXT.js} +25 -26
- package/dist/server/index.d.ts +1 -6
- package/dist/server/index.js +15 -16
- package/dist/{settings-VRAOAPLA.js → settings-6XX56F3F.js} +2 -2
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.js +1 -1
- package/dist/{tools-Z7X4HXZN.js → tools-CQGEU3JK.js} +11 -13
- package/dist/web/assets/index-BF6jgTAb.js +299 -0
- package/dist/web/assets/{index-BY8EbT5Z.css → index-CSOB8dwI.css} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/dist/workflow-defaults/default.workflow.json +18 -4
- package/package.json +1 -1
- package/dist/auto-compaction-UIWTO3H5.js +0 -27
- package/dist/chunk-CGZHLM3K.js +0 -70
- package/dist/chunk-SZKEGZIB.js +0 -140
- package/dist/runtime-config-NPSPMRDA.js +0 -9
- package/dist/vision-fallback-3MIZZ6NQ.js +0 -22
- package/dist/web/assets/index-BDezz42a.js +0 -299
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
computeDynamicContextHash,
|
|
3
|
+
injectWorkflowKickoffIfNeeded,
|
|
4
|
+
runAgentTurn,
|
|
4
5
|
runChatTurn
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-C75I2KZM.js";
|
|
6
7
|
import {
|
|
8
|
+
COMPACTION_PROMPT,
|
|
7
9
|
TurnMetrics,
|
|
8
10
|
agentExists,
|
|
11
|
+
buildBasePrompt,
|
|
9
12
|
buildTopLevelSystemPrompt,
|
|
10
13
|
checkAborted,
|
|
11
|
-
|
|
14
|
+
consumeStreamGenerator,
|
|
15
|
+
createChatDoneEvent,
|
|
16
|
+
createMessageDoneEvent,
|
|
12
17
|
createMessageStartEvent,
|
|
13
18
|
createToolRegistry,
|
|
14
19
|
deleteAgent,
|
|
@@ -21,6 +26,7 @@ import {
|
|
|
21
26
|
findAgentById,
|
|
22
27
|
findSkillById,
|
|
23
28
|
getAllInstructions,
|
|
29
|
+
getConversationMessages,
|
|
24
30
|
getDefaultAgentIds,
|
|
25
31
|
getDefaultIds,
|
|
26
32
|
getDefaultSkillIds,
|
|
@@ -42,40 +48,24 @@ import {
|
|
|
42
48
|
loadProjectSkills,
|
|
43
49
|
loadUserAgents,
|
|
44
50
|
loadUserSkills,
|
|
51
|
+
loadVisionModelFromGlobalConfig,
|
|
45
52
|
pathExists,
|
|
46
|
-
|
|
53
|
+
processContextImages,
|
|
47
54
|
saveAgent,
|
|
48
55
|
saveAgentToProject,
|
|
49
56
|
saveItemToDir,
|
|
50
57
|
saveSkill,
|
|
51
58
|
saveSkillToProject,
|
|
52
59
|
skillExists,
|
|
53
|
-
spawnShellProcess
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
getProject
|
|
57
|
-
} from "./chunk-XAMAYRDA.js";
|
|
60
|
+
spawnShellProcess,
|
|
61
|
+
streamLLMPure
|
|
62
|
+
} from "./chunk-LR5R7EEE.js";
|
|
58
63
|
import {
|
|
59
64
|
getPathSeparator,
|
|
60
65
|
getPlatformShell,
|
|
61
66
|
isAbsolutePath,
|
|
62
67
|
onProcessEvent
|
|
63
68
|
} from "./chunk-PBGOZMVY.js";
|
|
64
|
-
import {
|
|
65
|
-
createProviderManager,
|
|
66
|
-
parseDefaultModelSelection
|
|
67
|
-
} from "./chunk-RF2JGDSS.js";
|
|
68
|
-
import {
|
|
69
|
-
SessionNotFoundError,
|
|
70
|
-
createLLMClient,
|
|
71
|
-
detectModel,
|
|
72
|
-
getLlmStatus
|
|
73
|
-
} from "./chunk-HHAJ3QF6.js";
|
|
74
|
-
import {
|
|
75
|
-
detectBackend,
|
|
76
|
-
getBackendDisplayName,
|
|
77
|
-
getModelProfile
|
|
78
|
-
} from "./chunk-HGAMIPFO.js";
|
|
79
69
|
import {
|
|
80
70
|
createSession,
|
|
81
71
|
deleteSession,
|
|
@@ -91,24 +81,24 @@ import {
|
|
|
91
81
|
emitSessionInitialized,
|
|
92
82
|
emitUserMessage,
|
|
93
83
|
getCurrentContextWindowId,
|
|
84
|
+
getCurrentWindowMessageOptions,
|
|
94
85
|
getEventStore,
|
|
86
|
+
getRuntimeConfig,
|
|
95
87
|
getSession,
|
|
96
88
|
getSessionState,
|
|
97
89
|
initEventStore,
|
|
98
90
|
listSessions,
|
|
99
91
|
listSessionsByProject,
|
|
92
|
+
setRuntimeConfig,
|
|
100
93
|
updateSessionDangerLevel,
|
|
101
94
|
updateSessionMetadata,
|
|
102
95
|
updateSessionProvider,
|
|
103
96
|
updateSessionRunning
|
|
104
|
-
} from "./chunk-
|
|
105
|
-
import {
|
|
106
|
-
initDatabase
|
|
107
|
-
} from "./chunk-FBGWG4N6.js";
|
|
97
|
+
} from "./chunk-NPHYEUYE.js";
|
|
108
98
|
import {
|
|
109
99
|
buildMessagesFromStoredEvents,
|
|
110
100
|
foldPendingConfirmations
|
|
111
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-XJEOP6XU.js";
|
|
112
102
|
import {
|
|
113
103
|
createChatErrorMessage,
|
|
114
104
|
createChatMessageMessage,
|
|
@@ -123,28 +113,47 @@ import {
|
|
|
123
113
|
parseClientMessage,
|
|
124
114
|
serializeServerMessage,
|
|
125
115
|
storedEventToServerMessage
|
|
126
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-7TTEGAO6.js";
|
|
127
117
|
import {
|
|
128
118
|
EventEmitter,
|
|
129
119
|
provideAnswer
|
|
130
120
|
} from "./chunk-BJYPTN5S.js";
|
|
121
|
+
import {
|
|
122
|
+
getProject
|
|
123
|
+
} from "./chunk-XAMAYRDA.js";
|
|
124
|
+
import {
|
|
125
|
+
initDatabase
|
|
126
|
+
} from "./chunk-FBGWG4N6.js";
|
|
131
127
|
import {
|
|
132
128
|
computeSessionStats
|
|
133
129
|
} from "./chunk-VUQCQXXJ.js";
|
|
134
130
|
import {
|
|
135
131
|
createServerMessage
|
|
136
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-BVHFMAVN.js";
|
|
137
133
|
import {
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
createProviderManager,
|
|
135
|
+
parseDefaultModelSelection
|
|
136
|
+
} from "./chunk-DMH6JVPF.js";
|
|
140
137
|
import {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
SessionNotFoundError,
|
|
139
|
+
createLLMClient,
|
|
140
|
+
detectModel,
|
|
141
|
+
getLlmStatus
|
|
142
|
+
} from "./chunk-UKTPL5ZG.js";
|
|
143
|
+
import {
|
|
144
|
+
detectBackend,
|
|
145
|
+
ensureVersionPrefix,
|
|
146
|
+
getBackendDisplayName,
|
|
147
|
+
getModelProfile,
|
|
148
|
+
modelSupportsVision
|
|
149
|
+
} from "./chunk-VIIRNJDT.js";
|
|
144
150
|
import {
|
|
145
151
|
logger,
|
|
146
152
|
setLogLevel
|
|
147
153
|
} from "./chunk-K44MW7JJ.js";
|
|
154
|
+
import {
|
|
155
|
+
getGlobalConfigDir
|
|
156
|
+
} from "./chunk-CQGTEGKL.js";
|
|
148
157
|
|
|
149
158
|
// src/server/index.ts
|
|
150
159
|
import express from "express";
|
|
@@ -2041,7 +2050,7 @@ function emitWorkflowMessage(eventStore, sessionId, content, windowOptions, onMe
|
|
|
2041
2050
|
}
|
|
2042
2051
|
return msgId;
|
|
2043
2052
|
}
|
|
2044
|
-
function
|
|
2053
|
+
function getCurrentWindowMessageOptions2(sessionId) {
|
|
2045
2054
|
const contextWindowId = getCurrentContextWindowId(sessionId);
|
|
2046
2055
|
return contextWindowId ? { contextWindowId } : void 0;
|
|
2047
2056
|
}
|
|
@@ -2050,17 +2059,19 @@ function buildReason(metadataEntries) {
|
|
|
2050
2059
|
const remaining = entries.filter((e) => e.status !== "passed");
|
|
2051
2060
|
return `${remaining.length} criteria remaining`;
|
|
2052
2061
|
}
|
|
2053
|
-
async function executeWorkflow(workflow, options) {
|
|
2062
|
+
async function executeWorkflow(workflow, options, subGroup) {
|
|
2054
2063
|
const { sessionManager, sessionId, llmClient, signal, onMessage } = options;
|
|
2055
2064
|
const eventStore = getEventStore();
|
|
2056
2065
|
const startTime = performance.now();
|
|
2057
2066
|
let iterations = 0;
|
|
2058
|
-
|
|
2067
|
+
const activeSteps = subGroup ? workflow.steps.filter((s) => s.subGroup === subGroup) : workflow.steps;
|
|
2068
|
+
let currentStepId = subGroup ? activeSteps[0]?.id ?? workflow.entryStep : workflow.entryStep;
|
|
2059
2069
|
let lastStepOutput = {};
|
|
2060
2070
|
const firstEntryForStep = /* @__PURE__ */ new Set();
|
|
2061
2071
|
const messagesBeforeWorkflow = sessionManager.requireSession(sessionId).messages.length;
|
|
2072
|
+
const activeStepIds = new Set(activeSteps.map((s) => s.id));
|
|
2062
2073
|
const stepsById = /* @__PURE__ */ new Map();
|
|
2063
|
-
for (const step of
|
|
2074
|
+
for (const step of activeSteps) {
|
|
2064
2075
|
stepsById.set(step.id, step);
|
|
2065
2076
|
}
|
|
2066
2077
|
logger.debug("Workflow executor starting", { sessionId, workflow: workflow.metadata.id });
|
|
@@ -2085,7 +2096,7 @@ async function executeWorkflow(workflow, options) {
|
|
|
2085
2096
|
}
|
|
2086
2097
|
}
|
|
2087
2098
|
const startMsgId = crypto.randomUUID();
|
|
2088
|
-
const startWindowOpts =
|
|
2099
|
+
const startWindowOpts = getCurrentWindowMessageOptions2(sessionId);
|
|
2089
2100
|
eventStore.append(
|
|
2090
2101
|
sessionId,
|
|
2091
2102
|
createMessageStartEvent(
|
|
@@ -2127,7 +2138,7 @@ async function executeWorkflow(workflow, options) {
|
|
|
2127
2138
|
};
|
|
2128
2139
|
}
|
|
2129
2140
|
const session = sessionManager.requireSession(sessionId);
|
|
2130
|
-
const currentWindowMessageOptions =
|
|
2141
|
+
const currentWindowMessageOptions = getCurrentWindowMessageOptions2(sessionId);
|
|
2131
2142
|
const criteriaEntries = session.metadataEntries["criteria"] ?? [];
|
|
2132
2143
|
const templateCtx = {
|
|
2133
2144
|
workdir: session.workdir,
|
|
@@ -2189,22 +2200,36 @@ async function executeWorkflow(workflow, options) {
|
|
|
2189
2200
|
emitWorkflowMessage(eventStore, sessionId, nudgeContent, currentWindowMessageOptions, onMessage);
|
|
2190
2201
|
}
|
|
2191
2202
|
const turnMetrics = new TurnMetrics();
|
|
2192
|
-
const
|
|
2203
|
+
const es = getEventStore();
|
|
2204
|
+
const append = (event) => es.append(sessionId, event);
|
|
2205
|
+
let stepDoneCalled = false;
|
|
2206
|
+
const agentResult = await runAgentTurn(
|
|
2193
2207
|
{
|
|
2194
2208
|
sessionManager,
|
|
2195
2209
|
sessionId,
|
|
2196
2210
|
llmClient,
|
|
2197
|
-
injectStepDone: true,
|
|
2198
2211
|
...options.statsIdentity ? { statsIdentity: options.statsIdentity } : {},
|
|
2199
|
-
...!firstEntryForStep.has(step.id) && !agentStep.prompt && options.injectBuilderKickoff === true ? { injectBuilderKickoff: true } : {},
|
|
2200
2212
|
...signal ? { signal } : {},
|
|
2201
2213
|
...onMessage ? { onMessage } : {}
|
|
2202
2214
|
},
|
|
2203
|
-
turnMetrics
|
|
2215
|
+
turnMetrics,
|
|
2216
|
+
agentStep.agentId ?? "planner",
|
|
2217
|
+
append,
|
|
2218
|
+
{
|
|
2219
|
+
...!firstEntryForStep.has(step.id) && !agentStep.prompt && options.injectWorkflowKickoff === true ? { injectKickoff: () => injectWorkflowKickoffIfNeeded(sessionManager, sessionId, es) } : {},
|
|
2220
|
+
onToolExecuted: (toolCall, toolResult) => {
|
|
2221
|
+
if (toolCall.name === "step_done" && toolResult.success) {
|
|
2222
|
+
stepDoneCalled = true;
|
|
2223
|
+
}
|
|
2224
|
+
if (toolResult.success && ["write_file", "edit_file"].includes(toolCall.name)) {
|
|
2225
|
+
const path = toolCall.arguments["path"];
|
|
2226
|
+
sessionManager.addModifiedFile(sessionId, path);
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2204
2230
|
);
|
|
2205
2231
|
firstEntryForStep.add(step.id);
|
|
2206
2232
|
const agentReturnValue = agentResult.returnValueResult ?? "completed";
|
|
2207
|
-
const stepDoneCalled = agentResult.stepDoneCalled ?? false;
|
|
2208
2233
|
lastStepOutput = {
|
|
2209
2234
|
...agentResult.returnValueContent ? { content: agentResult.returnValueContent } : {},
|
|
2210
2235
|
...agentResult.returnValueResult ? { result: agentResult.returnValueResult } : {},
|
|
@@ -2239,7 +2264,6 @@ async function executeWorkflow(workflow, options) {
|
|
|
2239
2264
|
definitions: toolRegistry.definitions.filter((d) => d.type === "function" && d.function.name !== "step_done"),
|
|
2240
2265
|
execute: toolRegistry.execute
|
|
2241
2266
|
};
|
|
2242
|
-
const nudgeConfig = subStep.subAgentType === "verifier" && !subStep.nudgePrompt ? createVerifierNudgeConfig() : void 0;
|
|
2243
2267
|
const result = await executeSubAgent({
|
|
2244
2268
|
subAgentType: subStep.subAgentType,
|
|
2245
2269
|
prompt: resolvedPrompt,
|
|
@@ -2255,8 +2279,7 @@ async function executeWorkflow(workflow, options) {
|
|
|
2255
2279
|
model: llmClient.getModel()
|
|
2256
2280
|
},
|
|
2257
2281
|
...signal ? { signal } : {},
|
|
2258
|
-
...onMessage ? { onMessage } : {}
|
|
2259
|
-
nudgeConfig
|
|
2282
|
+
...onMessage ? { onMessage } : {}
|
|
2260
2283
|
});
|
|
2261
2284
|
lastStepOutput = { content: result.content ?? "", ...result.result ? { result: result.result } : {} };
|
|
2262
2285
|
stepOutcome = { result: result.result ?? "success", output: lastStepOutput };
|
|
@@ -2325,7 +2348,9 @@ ${output.slice(0, 1e4)}
|
|
|
2325
2348
|
}
|
|
2326
2349
|
}
|
|
2327
2350
|
const refreshedSession = sessionManager.requireSession(sessionId);
|
|
2328
|
-
const
|
|
2351
|
+
const effectiveTransitions = subGroup ? step.transitions.filter((t) => !t.subGroup || t.subGroup === subGroup) : step.transitions;
|
|
2352
|
+
const rawNextStepId = evaluateTransitions(effectiveTransitions, stepOutcome, refreshedSession.metadataEntries);
|
|
2353
|
+
const nextStepId = subGroup && rawNextStepId !== TERMINAL_DONE && rawNextStepId !== TERMINAL_BLOCKED && !activeStepIds.has(rawNextStepId) ? TERMINAL_DONE : rawNextStepId;
|
|
2329
2354
|
if (nextStepId === TERMINAL_DONE) {
|
|
2330
2355
|
sessionManager.setPhase(sessionId, "done");
|
|
2331
2356
|
const totalTimeSeconds = Math.round((performance.now() - startTime) / 100) / 10;
|
|
@@ -2402,8 +2427,82 @@ async function runOrchestrator(options) {
|
|
|
2402
2427
|
if (!workflow) {
|
|
2403
2428
|
throw new Error(`Workflow "${workflowId}" not found`);
|
|
2404
2429
|
}
|
|
2405
|
-
logger.debug("Using workflow executor", {
|
|
2406
|
-
|
|
2430
|
+
logger.debug("Using workflow executor", {
|
|
2431
|
+
sessionId: options.sessionId,
|
|
2432
|
+
workflow: workflow.metadata.id,
|
|
2433
|
+
subGroup: options.subGroup
|
|
2434
|
+
});
|
|
2435
|
+
return executeWorkflow(workflow, options, options.subGroup);
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
// src/server/context/auto-compaction.ts
|
|
2439
|
+
async function compactContext(options) {
|
|
2440
|
+
const { sessionManager, sessionId, llmClient, signal } = options;
|
|
2441
|
+
const eventStore = getEventStore();
|
|
2442
|
+
const session = sessionManager.requireSession(sessionId);
|
|
2443
|
+
const compactPromptMsgId = crypto.randomUUID();
|
|
2444
|
+
eventStore.append(
|
|
2445
|
+
sessionId,
|
|
2446
|
+
createMessageStartEvent(compactPromptMsgId, "user", COMPACTION_PROMPT, {
|
|
2447
|
+
...getCurrentWindowMessageOptions(sessionId) ?? {},
|
|
2448
|
+
isSystemGenerated: true,
|
|
2449
|
+
messageKind: "auto-prompt",
|
|
2450
|
+
metadata: { type: "compaction", name: "Compaction", color: "#64748b" }
|
|
2451
|
+
})
|
|
2452
|
+
);
|
|
2453
|
+
eventStore.append(sessionId, { type: "message.done", data: { messageId: compactPromptMsgId } });
|
|
2454
|
+
const rawEvents = eventStore.getEvents(sessionId);
|
|
2455
|
+
const modelVision = modelSupportsVision(llmClient.getModel());
|
|
2456
|
+
const runtimeConfig = getRuntimeConfig();
|
|
2457
|
+
const visionModel = runtimeConfig.llm.visionModel ? { baseUrl: runtimeConfig.llm.baseUrl, model: runtimeConfig.llm.visionModel, timeout: runtimeConfig.llm.timeout } : await loadVisionModelFromGlobalConfig();
|
|
2458
|
+
const { events: processedEvents } = await processContextImages(rawEvents, {
|
|
2459
|
+
modelSupportsVision: modelVision,
|
|
2460
|
+
...visionModel ? { visionModel } : {},
|
|
2461
|
+
onEvent: (event) => eventStore.append(sessionId, event)
|
|
2462
|
+
});
|
|
2463
|
+
const messages = getConversationMessages({ type: "toplevel", sessionId }, { events: processedEvents });
|
|
2464
|
+
const systemPrompt = buildBasePrompt(session.workdir);
|
|
2465
|
+
const assistantMsgId = crypto.randomUUID();
|
|
2466
|
+
const streamGen = streamLLMPure({
|
|
2467
|
+
messageId: assistantMsgId,
|
|
2468
|
+
systemPrompt,
|
|
2469
|
+
llmClient,
|
|
2470
|
+
messages,
|
|
2471
|
+
tools: [],
|
|
2472
|
+
toolChoice: "none",
|
|
2473
|
+
signal
|
|
2474
|
+
});
|
|
2475
|
+
const result = await consumeStreamGenerator(streamGen, (event) => {
|
|
2476
|
+
eventStore.append(sessionId, event);
|
|
2477
|
+
});
|
|
2478
|
+
const summary = result.content?.trim() || result.thinkingContent?.trim() || "";
|
|
2479
|
+
if (!summary) {
|
|
2480
|
+
eventStore.append(sessionId, {
|
|
2481
|
+
type: "chat.error",
|
|
2482
|
+
data: { error: "Compaction produced empty summary, continuing with full context", recoverable: true }
|
|
2483
|
+
});
|
|
2484
|
+
logger.warn("Compaction produced empty summary", { sessionId });
|
|
2485
|
+
return;
|
|
2486
|
+
}
|
|
2487
|
+
const closedWindowId = getCurrentContextWindowId(sessionId) ?? "";
|
|
2488
|
+
const newWindowId = crypto.randomUUID();
|
|
2489
|
+
eventStore.append(sessionId, {
|
|
2490
|
+
type: "context.compacted",
|
|
2491
|
+
data: { closedWindowId, newWindowId, beforeTokens: result.usage.promptTokens, afterTokens: 0, summary }
|
|
2492
|
+
});
|
|
2493
|
+
eventStore.append(sessionId, {
|
|
2494
|
+
type: "message.start",
|
|
2495
|
+
data: {
|
|
2496
|
+
messageId: assistantMsgId,
|
|
2497
|
+
role: "assistant",
|
|
2498
|
+
content: summary,
|
|
2499
|
+
contextWindowId: newWindowId,
|
|
2500
|
+
isCompactionSummary: true
|
|
2501
|
+
}
|
|
2502
|
+
});
|
|
2503
|
+
eventStore.append(sessionId, createMessageDoneEvent(assistantMsgId, {}));
|
|
2504
|
+
eventStore.append(sessionId, createChatDoneEvent(assistantMsgId, "complete"));
|
|
2505
|
+
logger.info("Manual compaction complete", { sessionId });
|
|
2407
2506
|
}
|
|
2408
2507
|
|
|
2409
2508
|
// src/server/auth.ts
|
|
@@ -2745,7 +2844,7 @@ function createWebSocketServer(httpServer, config4, getLLMClient, getActiveProvi
|
|
|
2745
2844
|
sessionLLMClients.delete(sessionId);
|
|
2746
2845
|
return getLLMClient();
|
|
2747
2846
|
}
|
|
2748
|
-
const baseUrl = provider.url
|
|
2847
|
+
const baseUrl = ensureVersionPrefix(provider.url);
|
|
2749
2848
|
const sessionConfig = {
|
|
2750
2849
|
...config4,
|
|
2751
2850
|
llm: {
|
|
@@ -2854,7 +2953,6 @@ function createWebSocketServer(httpServer, config4, getLLMClient, getActiveProvi
|
|
|
2854
2953
|
return;
|
|
2855
2954
|
}
|
|
2856
2955
|
sessionManager.clearMessageQueue(sessionId);
|
|
2857
|
-
sessionManager.setRunning(sessionId, false);
|
|
2858
2956
|
const contextState = sessionManager.getContextState(sessionId);
|
|
2859
2957
|
sendFn(sessionId, createContextStateMessage(contextState));
|
|
2860
2958
|
}
|
|
@@ -3149,17 +3247,14 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
3149
3247
|
send(createErrorMessage("SESSION_RUNNING", "Cannot compact while session is running", message.id));
|
|
3150
3248
|
return;
|
|
3151
3249
|
}
|
|
3152
|
-
const contextState = sessionManager.getContextState(sessionId);
|
|
3153
|
-
const tokensBefore = contextState.currentTokens;
|
|
3154
3250
|
send({ type: "ack", payload: {}, id: message.id });
|
|
3155
3251
|
(async () => {
|
|
3156
3252
|
try {
|
|
3157
|
-
await
|
|
3253
|
+
await compactContext({
|
|
3158
3254
|
sessionManager,
|
|
3159
3255
|
sessionId,
|
|
3160
3256
|
llmClient: llmForSession(sessionId),
|
|
3161
|
-
statsIdentity: statsForSession(sessionId)
|
|
3162
|
-
tokenCountAtClose: tokensBefore
|
|
3257
|
+
statsIdentity: statsForSession(sessionId)
|
|
3163
3258
|
});
|
|
3164
3259
|
const newContextState = sessionManager.getContextState(sessionId);
|
|
3165
3260
|
sendForSession(sessionId, createContextStateMessage(newContextState));
|
|
@@ -3294,10 +3389,6 @@ ${content}` : workflowInfo;
|
|
|
3294
3389
|
});
|
|
3295
3390
|
return;
|
|
3296
3391
|
}
|
|
3297
|
-
if (session.mode !== "builder") {
|
|
3298
|
-
send(createErrorMessage("INVALID_MODE", "Runner can only be launched in builder mode", message.id));
|
|
3299
|
-
return;
|
|
3300
|
-
}
|
|
3301
3392
|
const launchPayloadEarly = message.payload;
|
|
3302
3393
|
const pendingCriteria = session.criteria.filter((c) => c.status.type !== "passed");
|
|
3303
3394
|
if (!launchPayloadEarly?.workflowId && pendingCriteria.length === 0) {
|
|
@@ -3331,8 +3422,9 @@ ${content}` : workflowInfo;
|
|
|
3331
3422
|
sessionId,
|
|
3332
3423
|
llmClient: llmForSession(sessionId),
|
|
3333
3424
|
statsIdentity: statsForSession(sessionId),
|
|
3334
|
-
|
|
3425
|
+
injectWorkflowKickoff: !hasUserMessage,
|
|
3335
3426
|
...launchPayload?.workflowId ? { workflowId: launchPayload.workflowId } : {},
|
|
3427
|
+
...launchPayload?.subGroup ? { subGroup: launchPayload.subGroup } : {},
|
|
3336
3428
|
...hasUserMessage ? {
|
|
3337
3429
|
userMessage: {
|
|
3338
3430
|
content: hasUserContent ? launchPayload.content : "",
|
|
@@ -3348,6 +3440,8 @@ ${content}` : workflowInfo;
|
|
|
3348
3440
|
}
|
|
3349
3441
|
logger.error("Runner error", { error, sessionId });
|
|
3350
3442
|
}).finally(() => {
|
|
3443
|
+
sessionManager.setRunning(sessionId, false);
|
|
3444
|
+
sendForSession(sessionId, createSessionRunningMessage(false));
|
|
3351
3445
|
cleanupAfterTurn(sessionId, controller, sendForSession, true);
|
|
3352
3446
|
});
|
|
3353
3447
|
break;
|
|
@@ -4747,7 +4841,6 @@ var SessionManager = class {
|
|
|
4747
4841
|
if (m.isSystemGenerated !== void 0) msg.isSystemGenerated = m.isSystemGenerated;
|
|
4748
4842
|
if (m.messageKind !== void 0) msg.messageKind = m.messageKind;
|
|
4749
4843
|
if (m.isCompactionSummary !== void 0) msg.isCompactionSummary = m.isCompactionSummary;
|
|
4750
|
-
if (m.promptContext !== void 0) msg.promptContext = m.promptContext;
|
|
4751
4844
|
return msg;
|
|
4752
4845
|
});
|
|
4753
4846
|
}
|
|
@@ -5165,7 +5258,6 @@ ${summary}`,
|
|
|
5165
5258
|
if (m.messageKind !== void 0) msg.messageKind = m.messageKind;
|
|
5166
5259
|
if (m.contextWindowId !== void 0) msg.contextWindowId = m.contextWindowId;
|
|
5167
5260
|
if (m.isCompactionSummary !== void 0) msg.isCompactionSummary = m.isCompactionSummary;
|
|
5168
|
-
if (m.promptContext !== void 0) msg.promptContext = m.promptContext;
|
|
5169
5261
|
return msg;
|
|
5170
5262
|
});
|
|
5171
5263
|
const isRunning = dbSession.isRunning;
|
|
@@ -5558,10 +5650,14 @@ function createWorkflowRoutes(configDir, config4, projectDir) {
|
|
|
5558
5650
|
if (!Array.isArray(steps) || steps.length === 0) return "Missing required fields: metadata.id, steps";
|
|
5559
5651
|
return null;
|
|
5560
5652
|
},
|
|
5561
|
-
mapToResponse: (w) =>
|
|
5562
|
-
...w.
|
|
5563
|
-
|
|
5564
|
-
|
|
5653
|
+
mapToResponse: (w) => {
|
|
5654
|
+
const subGroups = [...new Set(w.steps.map((s) => s.subGroup).filter(Boolean))];
|
|
5655
|
+
return {
|
|
5656
|
+
...w.metadata,
|
|
5657
|
+
startCondition: w.startCondition,
|
|
5658
|
+
subGroups: subGroups.length > 0 ? subGroups : void 0
|
|
5659
|
+
};
|
|
5660
|
+
},
|
|
5565
5661
|
extraGetData: () => Promise.resolve({ activeWorkflowId: config4.activeWorkflowId ?? "default" }),
|
|
5566
5662
|
extraRoutes: (router) => {
|
|
5567
5663
|
router.get("/template-variables", (_req, res) => {
|
|
@@ -5735,7 +5831,7 @@ import { Router as Router6 } from "express";
|
|
|
5735
5831
|
import { spawn as spawn5 } from "child_process";
|
|
5736
5832
|
|
|
5737
5833
|
// src/constants.ts
|
|
5738
|
-
var VERSION = "2.0.0-beta.
|
|
5834
|
+
var VERSION = "2.0.0-beta.10";
|
|
5739
5835
|
|
|
5740
5836
|
// src/server/routes/auto-update.ts
|
|
5741
5837
|
var updateInProgress = false;
|
|
@@ -6038,7 +6134,7 @@ async function createServerHandle(config4) {
|
|
|
6038
6134
|
res.json({ project });
|
|
6039
6135
|
});
|
|
6040
6136
|
app.get("/api/sessions", async (req, res) => {
|
|
6041
|
-
const { getRecentUserPromptsForSession } = await import("./events-
|
|
6137
|
+
const { getRecentUserPromptsForSession } = await import("./events-PQ3KTI5H.js");
|
|
6042
6138
|
const projectId = req.query["projectId"];
|
|
6043
6139
|
const limit = Math.min(parseInt(req.query["limit"]) || 20, 100);
|
|
6044
6140
|
const offset = parseInt(req.query["offset"]) || 0;
|
|
@@ -6071,8 +6167,8 @@ async function createServerHandle(config4) {
|
|
|
6071
6167
|
res.status(201).json({ session });
|
|
6072
6168
|
});
|
|
6073
6169
|
app.get("/api/sessions/:id", async (req, res) => {
|
|
6074
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6075
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6170
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6171
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6076
6172
|
const session = sessionManager.getSession(req.params.id);
|
|
6077
6173
|
if (!session) {
|
|
6078
6174
|
return res.status(404).json({ error: "Session not found" });
|
|
@@ -6102,8 +6198,8 @@ async function createServerHandle(config4) {
|
|
|
6102
6198
|
res.json({ success: true });
|
|
6103
6199
|
});
|
|
6104
6200
|
app.post("/api/sessions/:id/provider", async (req, res) => {
|
|
6105
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6106
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6201
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6202
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6107
6203
|
const sessionId = req.params.id;
|
|
6108
6204
|
const session = sessionManager.getSession(sessionId);
|
|
6109
6205
|
if (!session) {
|
|
@@ -6114,7 +6210,7 @@ async function createServerHandle(config4) {
|
|
|
6114
6210
|
return res.status(400).json({ error: "providerId is required" });
|
|
6115
6211
|
}
|
|
6116
6212
|
sessionManager.setSessionProvider(sessionId, providerId, model ?? "auto");
|
|
6117
|
-
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-
|
|
6213
|
+
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-TDVA7MQN.js");
|
|
6118
6214
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6119
6215
|
const updatedConfig = setDefaultModelSelection(globalConfig, providerId, model ?? "auto");
|
|
6120
6216
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
@@ -6145,8 +6241,8 @@ async function createServerHandle(config4) {
|
|
|
6145
6241
|
res.json({ success: true });
|
|
6146
6242
|
});
|
|
6147
6243
|
app.put("/api/sessions/:id/mode", async (req, res) => {
|
|
6148
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6149
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-
|
|
6244
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6245
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2 } = await import("./folding-CXORTBAU.js");
|
|
6150
6246
|
const sessionId = req.params.id;
|
|
6151
6247
|
const session = sessionManager.getSession(sessionId);
|
|
6152
6248
|
if (!session) {
|
|
@@ -6202,14 +6298,14 @@ async function createServerHandle(config4) {
|
|
|
6202
6298
|
if (!callId || approved === void 0) {
|
|
6203
6299
|
return res.status(400).json({ error: "callId and approved are required" });
|
|
6204
6300
|
}
|
|
6205
|
-
const { providePathConfirmation } = await import("./tools-
|
|
6301
|
+
const { providePathConfirmation } = await import("./tools-CQGEU3JK.js");
|
|
6206
6302
|
const result = providePathConfirmation(callId, approved, alwaysAllow);
|
|
6207
6303
|
if (!result.found) {
|
|
6208
6304
|
return res.status(404).json({ error: "No pending path confirmation with that ID" });
|
|
6209
6305
|
}
|
|
6210
|
-
const { getEventStore: getEventStore2 } = await import("./events-
|
|
6211
|
-
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-
|
|
6212
|
-
const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-
|
|
6306
|
+
const { getEventStore: getEventStore2 } = await import("./events-PQ3KTI5H.js");
|
|
6307
|
+
const { buildMessagesFromStoredEvents: buildMessagesFromStoredEvents2, foldPendingConfirmations: foldPendingConfirmations2 } = await import("./folding-CXORTBAU.js");
|
|
6308
|
+
const { createSessionStateMessage: createSessionStateMessage2 } = await import("./protocol-CN24IKQN.js");
|
|
6213
6309
|
const eventStore = getEventStore2();
|
|
6214
6310
|
const events = eventStore.getEvents(sessionId);
|
|
6215
6311
|
const messages = buildMessagesFromStoredEvents2(events);
|
|
@@ -6226,7 +6322,7 @@ async function createServerHandle(config4) {
|
|
|
6226
6322
|
if (!callId || !answer) {
|
|
6227
6323
|
return res.status(400).json({ error: "callId and answer are required" });
|
|
6228
6324
|
}
|
|
6229
|
-
const { provideAnswer: provideAnswer2 } = await import("./tools-
|
|
6325
|
+
const { provideAnswer: provideAnswer2 } = await import("./tools-CQGEU3JK.js");
|
|
6230
6326
|
const found = provideAnswer2(callId, answer);
|
|
6231
6327
|
if (!found) {
|
|
6232
6328
|
return res.status(404).json({ error: "No pending question with that ID" });
|
|
@@ -6262,14 +6358,14 @@ async function createServerHandle(config4) {
|
|
|
6262
6358
|
if (!session) {
|
|
6263
6359
|
return res.status(404).json({ error: "Session not found" });
|
|
6264
6360
|
}
|
|
6265
|
-
const { stopSessionExecution } = await import("./chat-handler-
|
|
6266
|
-
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-
|
|
6361
|
+
const { stopSessionExecution } = await import("./chat-handler-6COBLIDR.js");
|
|
6362
|
+
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-CQGEU3JK.js");
|
|
6267
6363
|
stopSessionExecution(sessionId, sessionManager);
|
|
6268
6364
|
abortSession(sessionId);
|
|
6269
6365
|
cancelQuestionsForSession(sessionId, "Session stopped by user");
|
|
6270
6366
|
cancelPathConfirmationsForSession(sessionId, "Session stopped by user");
|
|
6271
6367
|
sessionManager.clearMessageQueue(sessionId);
|
|
6272
|
-
const eventStore = (await import("./events-
|
|
6368
|
+
const eventStore = (await import("./events-PQ3KTI5H.js")).getEventStore();
|
|
6273
6369
|
eventStore.append(sessionId, { type: "running.changed", data: { isRunning: false } });
|
|
6274
6370
|
res.json({ success: true });
|
|
6275
6371
|
});
|
|
@@ -6283,7 +6379,7 @@ async function createServerHandle(config4) {
|
|
|
6283
6379
|
if (typeof messageIndex !== "number" || messageIndex < 0) {
|
|
6284
6380
|
return res.status(400).json({ error: "messageIndex must be a non-negative number" });
|
|
6285
6381
|
}
|
|
6286
|
-
const { truncateSessionMessages } = await import("./events-
|
|
6382
|
+
const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
|
|
6287
6383
|
truncateSessionMessages(sessionId, messageIndex);
|
|
6288
6384
|
res.json({ success: true });
|
|
6289
6385
|
});
|
|
@@ -6301,7 +6397,7 @@ async function createServerHandle(config4) {
|
|
|
6301
6397
|
if (!msg) {
|
|
6302
6398
|
return res.status(400).json({ error: "Message not found at this index" });
|
|
6303
6399
|
}
|
|
6304
|
-
const { truncateSessionMessages } = await import("./events-
|
|
6400
|
+
const { truncateSessionMessages } = await import("./events-PQ3KTI5H.js");
|
|
6305
6401
|
truncateSessionMessages(sessionId, messageIndex - 1);
|
|
6306
6402
|
sessionManager.queueMessage(sessionId, "asap", msg.content, msg.attachments, msg.messageKind);
|
|
6307
6403
|
res.json({ success: true });
|
|
@@ -6333,7 +6429,7 @@ async function createServerHandle(config4) {
|
|
|
6333
6429
|
res.json({ accepted: true });
|
|
6334
6430
|
});
|
|
6335
6431
|
app.get("/api/settings", async (req, res) => {
|
|
6336
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6432
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6337
6433
|
const keysParam = req.query["keys"];
|
|
6338
6434
|
if (!keysParam) {
|
|
6339
6435
|
return res.status(400).json({ error: "keys query parameter is required" });
|
|
@@ -6346,19 +6442,19 @@ async function createServerHandle(config4) {
|
|
|
6346
6442
|
res.json(result);
|
|
6347
6443
|
});
|
|
6348
6444
|
app.get("/api/settings/:key", async (req, res) => {
|
|
6349
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6445
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6350
6446
|
const key = req.params.key;
|
|
6351
6447
|
const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
6352
6448
|
res.json({ key, value });
|
|
6353
6449
|
});
|
|
6354
6450
|
app.get("/api/settings/:key", async (req, res) => {
|
|
6355
|
-
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-
|
|
6451
|
+
const { getSetting, SETTINGS_DEFAULTS } = await import("./settings-6XX56F3F.js");
|
|
6356
6452
|
const key = req.params.key;
|
|
6357
6453
|
const value = getSetting(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
6358
6454
|
res.json({ key, value });
|
|
6359
6455
|
});
|
|
6360
6456
|
app.put("/api/settings/:key", async (req, res) => {
|
|
6361
|
-
const { setSetting } = await import("./settings-
|
|
6457
|
+
const { setSetting } = await import("./settings-6XX56F3F.js");
|
|
6362
6458
|
const key = req.params.key;
|
|
6363
6459
|
const { value } = req.body;
|
|
6364
6460
|
if (value === void 0) {
|
|
@@ -6373,7 +6469,7 @@ async function createServerHandle(config4) {
|
|
|
6373
6469
|
let visionFallback;
|
|
6374
6470
|
let globalWorkdir;
|
|
6375
6471
|
try {
|
|
6376
|
-
const { loadGlobalConfig, getVisionFallback } = await import("./config-
|
|
6472
|
+
const { loadGlobalConfig, getVisionFallback } = await import("./config-TDVA7MQN.js");
|
|
6377
6473
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6378
6474
|
const fallback = getVisionFallback(globalConfig);
|
|
6379
6475
|
if (fallback) {
|
|
@@ -6447,12 +6543,12 @@ async function createServerHandle(config4) {
|
|
|
6447
6543
|
}
|
|
6448
6544
|
});
|
|
6449
6545
|
app.post("/api/providers", async (req, res) => {
|
|
6450
|
-
const { name, url, backend, apiKey, model } = req.body;
|
|
6546
|
+
const { name, url, backend, apiKey, model, isLocal } = req.body;
|
|
6451
6547
|
if (!name || !url || !backend) {
|
|
6452
6548
|
return res.status(400).json({ error: "name, url, and backend are required" });
|
|
6453
6549
|
}
|
|
6454
6550
|
try {
|
|
6455
|
-
const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-
|
|
6551
|
+
const { loadGlobalConfig, saveGlobalConfig, addProvider, setDefaultModelSelection } = await import("./config-TDVA7MQN.js");
|
|
6456
6552
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6457
6553
|
const providerBackend = backend;
|
|
6458
6554
|
const configWithProvider = addProvider(globalConfig, {
|
|
@@ -6460,6 +6556,7 @@ async function createServerHandle(config4) {
|
|
|
6460
6556
|
url,
|
|
6461
6557
|
backend: providerBackend,
|
|
6462
6558
|
apiKey,
|
|
6559
|
+
...isLocal !== void 0 ? { isLocal } : {},
|
|
6463
6560
|
models: model ? [{ id: model, contextWindow: 2e5, source: "user" }] : [],
|
|
6464
6561
|
isActive: true
|
|
6465
6562
|
});
|
|
@@ -6485,7 +6582,7 @@ async function createServerHandle(config4) {
|
|
|
6485
6582
|
app.post("/api/init/config", async (req, res) => {
|
|
6486
6583
|
const { workdir, visionFallback } = req.body;
|
|
6487
6584
|
try {
|
|
6488
|
-
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-
|
|
6585
|
+
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TDVA7MQN.js");
|
|
6489
6586
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6490
6587
|
const updatedConfig = {
|
|
6491
6588
|
...globalConfig,
|
|
@@ -6513,13 +6610,33 @@ async function createServerHandle(config4) {
|
|
|
6513
6610
|
});
|
|
6514
6611
|
app.delete("/api/providers/:id", async (req, res) => {
|
|
6515
6612
|
const { id } = req.params;
|
|
6516
|
-
const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-
|
|
6613
|
+
const { loadGlobalConfig, saveGlobalConfig, removeProvider } = await import("./config-TDVA7MQN.js");
|
|
6517
6614
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6518
6615
|
const updatedConfig = removeProvider(globalConfig, id);
|
|
6519
6616
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
6520
6617
|
providerManager.setProviders(updatedConfig.providers, updatedConfig.defaultModelSelection ?? void 0);
|
|
6521
6618
|
res.json({ success: true });
|
|
6522
6619
|
});
|
|
6620
|
+
app.patch("/api/providers/:id", async (req, res) => {
|
|
6621
|
+
const { id } = req.params;
|
|
6622
|
+
const { isLocal } = req.body;
|
|
6623
|
+
try {
|
|
6624
|
+
const { loadGlobalConfig, saveGlobalConfig, updateProvider } = await import("./config-TDVA7MQN.js");
|
|
6625
|
+
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6626
|
+
const provider = globalConfig.providers.find((p) => p.id === id);
|
|
6627
|
+
if (!provider) {
|
|
6628
|
+
return res.status(404).json({ error: "Provider not found" });
|
|
6629
|
+
}
|
|
6630
|
+
const updates = {};
|
|
6631
|
+
if (isLocal !== void 0) updates["isLocal"] = isLocal;
|
|
6632
|
+
const updatedConfig = updateProvider(globalConfig, id, updates);
|
|
6633
|
+
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
6634
|
+
providerManager.setProviders(updatedConfig.providers, updatedConfig.defaultModelSelection ?? void 0);
|
|
6635
|
+
res.json({ success: true, provider: updatedConfig.providers.find((p) => p.id === id) });
|
|
6636
|
+
} catch (error) {
|
|
6637
|
+
res.status(500).json({ error: error instanceof Error ? error.message : "Failed to update provider" });
|
|
6638
|
+
}
|
|
6639
|
+
});
|
|
6523
6640
|
app.get("/api/providers/:id/models", async (req, res) => {
|
|
6524
6641
|
const { id } = req.params;
|
|
6525
6642
|
const models = await providerManager.getProviderModels(id);
|
|
@@ -6533,7 +6650,7 @@ async function createServerHandle(config4) {
|
|
|
6533
6650
|
return res.status(400).json({ error: result.error });
|
|
6534
6651
|
}
|
|
6535
6652
|
const llmClient = getLLMClient();
|
|
6536
|
-
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-
|
|
6653
|
+
const { loadGlobalConfig, saveGlobalConfig, setDefaultModelSelection } = await import("./config-TDVA7MQN.js");
|
|
6537
6654
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6538
6655
|
const updatedConfig = setDefaultModelSelection(globalConfig, id, llmClient.getModel());
|
|
6539
6656
|
await saveGlobalConfig(config4.mode ?? "production", updatedConfig);
|
|
@@ -6564,7 +6681,7 @@ async function createServerHandle(config4) {
|
|
|
6564
6681
|
if (!result.success) {
|
|
6565
6682
|
return res.status(400).json({ error: result.error });
|
|
6566
6683
|
}
|
|
6567
|
-
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-
|
|
6684
|
+
const { loadGlobalConfig, saveGlobalConfig } = await import("./config-TDVA7MQN.js");
|
|
6568
6685
|
const globalConfig = await loadGlobalConfig(config4.mode ?? "production");
|
|
6569
6686
|
const updatedProviders = providerManager.getProviders();
|
|
6570
6687
|
const updatedConfig = {
|
|
@@ -6778,7 +6895,7 @@ async function createServerHandle(config4) {
|
|
|
6778
6895
|
providerManager
|
|
6779
6896
|
);
|
|
6780
6897
|
const wss = wssExports.wss;
|
|
6781
|
-
const { QueueProcessor } = await import("./processor-
|
|
6898
|
+
const { QueueProcessor } = await import("./processor-WMAU4C2N.js");
|
|
6782
6899
|
const queueProcessor = new QueueProcessor({
|
|
6783
6900
|
sessionManager,
|
|
6784
6901
|
providerManager,
|
|
@@ -6850,4 +6967,4 @@ export {
|
|
|
6850
6967
|
createServerHandle,
|
|
6851
6968
|
createServer
|
|
6852
6969
|
};
|
|
6853
|
-
//# sourceMappingURL=chunk-
|
|
6970
|
+
//# sourceMappingURL=chunk-G4SACK4E.js.map
|