openfox 2.0.60 → 2.0.62
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/builder.agent.md +1 -0
- package/dist/agent-defaults/planner.agent.md +1 -0
- package/dist/{chat-handler-MBR6ZQTX.js → chat-handler-TRAITVLO.js} +4 -4
- package/dist/{chunk-MTBQQ5DN.js → chunk-3WL5YCP6.js} +2 -2
- package/dist/{chunk-DOJKA4XO.js → chunk-BKTBHEPY.js} +5 -5
- package/dist/{chunk-NY6IGGKZ.js → chunk-L4WACPUX.js} +65 -6
- package/dist/{chunk-DEWNWF2P.js → chunk-QZRS2RF5.js} +72 -22
- package/dist/{chunk-WNSAJCWT.js → chunk-SVSKQYFH.js} +6 -2
- package/dist/{chunk-3JRYK5UG.js → chunk-WEB4WBUF.js} +306 -88
- package/dist/cli/dev.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/{orchestrator-PIZJ42J2.js → orchestrator-TQ23BAFQ.js} +4 -4
- package/dist/package.json +2 -1
- package/dist/{processor-PKKTNKWY.js → processor-3ZOFGZP5.js} +4 -4
- package/dist/{serve-GKS55Y2C.js → serve-CNA5NKOR.js} +6 -6
- package/dist/server/index.js +5 -5
- package/dist/{server-LMH7ZH5X.js → server-CI5IEBOC.js} +5 -5
- package/dist/{settings-2TQA7VTP.js → settings-ASLTSUE2.js} +2 -2
- package/dist/{tools-WGAZKL56.js → tools-33FQNFKC.js} +3 -3
- package/dist/web/assets/{index-D4bVx84a.css → index-BGkyTfuQ.css} +1 -1
- package/dist/web/assets/index-CETZPQXr.js +302 -0
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +2 -1
- package/dist/web/assets/index-C0YKw2cD.js +0 -302
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
} from "./chunk-NVPVDDQZ.js";
|
|
6
6
|
import {
|
|
7
7
|
runChatTurn
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-L4WACPUX.js";
|
|
9
|
+
import "./chunk-WEB4WBUF.js";
|
|
10
10
|
import "./chunk-LBGHZLLH.js";
|
|
11
11
|
import "./chunk-BGTEIA2S.js";
|
|
12
12
|
import "./chunk-PK2RMVMB.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
createSessionRunningMessage
|
|
18
18
|
} from "./chunk-F4PMNP7S.js";
|
|
19
19
|
import "./chunk-EU3WWTFH.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-SVSKQYFH.js";
|
|
21
21
|
import "./chunk-YQ3SOPBI.js";
|
|
22
22
|
import "./chunk-6VDCH5ML.js";
|
|
23
23
|
import {
|
|
@@ -154,4 +154,4 @@ export {
|
|
|
154
154
|
startChatSession,
|
|
155
155
|
stopSessionExecution
|
|
156
156
|
};
|
|
157
|
-
//# sourceMappingURL=chat-handler-
|
|
157
|
+
//# sourceMappingURL=chat-handler-TRAITVLO.js.map
|
|
@@ -208,7 +208,7 @@ async function runCli(options) {
|
|
|
208
208
|
if (!configExists) {
|
|
209
209
|
await runNetworkSetup(mode);
|
|
210
210
|
}
|
|
211
|
-
const { runServe } = await import("./serve-
|
|
211
|
+
const { runServe } = await import("./serve-CNA5NKOR.js");
|
|
212
212
|
const serveOptions = { mode };
|
|
213
213
|
if (values.port) serveOptions.port = parseInt(values.port);
|
|
214
214
|
if (values["no-browser"] === true) serveOptions.openBrowser = false;
|
|
@@ -220,4 +220,4 @@ async function runCli(options) {
|
|
|
220
220
|
export {
|
|
221
221
|
runCli
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
223
|
+
//# sourceMappingURL=chunk-3WL5YCP6.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
+
applyDynamicContext,
|
|
3
|
+
computeSessionHash,
|
|
2
4
|
injectWorkflowKickoffIfNeeded,
|
|
3
5
|
runAgentTurn,
|
|
4
6
|
runChatTurn
|
|
5
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-L4WACPUX.js";
|
|
6
8
|
import {
|
|
7
|
-
applyDynamicContext,
|
|
8
9
|
checkAborted,
|
|
9
|
-
computeSessionHash,
|
|
10
10
|
deleteItemFromDir,
|
|
11
11
|
devServerManager,
|
|
12
12
|
executeSubAgent,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
loadAllAgentsDefault,
|
|
17
17
|
saveItemToDir,
|
|
18
18
|
spawnShellProcess
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-WEB4WBUF.js";
|
|
20
20
|
import {
|
|
21
21
|
getPlatformShell,
|
|
22
22
|
onProcessEvent
|
|
@@ -2102,4 +2102,4 @@ export {
|
|
|
2102
2102
|
signalMcpReady,
|
|
2103
2103
|
createWebSocketServer
|
|
2104
2104
|
};
|
|
2105
|
-
//# sourceMappingURL=chunk-
|
|
2105
|
+
//# sourceMappingURL=chunk-BKTBHEPY.js.map
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PathAccessDeniedError,
|
|
3
|
-
buildCachedPrompt,
|
|
4
|
-
computeDynamicContextHash,
|
|
5
3
|
createAssemblyResult,
|
|
6
4
|
findAgentById,
|
|
7
5
|
getAllInstructions,
|
|
8
6
|
getConversationMessages,
|
|
9
7
|
getEnabledSkillMetadata,
|
|
10
|
-
|
|
8
|
+
getSubAgents,
|
|
11
9
|
getToolRegistryForAgent,
|
|
12
10
|
loadAllAgentsDefault,
|
|
13
11
|
processEventsForConversation,
|
|
14
12
|
runTopLevelAgentLoop
|
|
15
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WEB4WBUF.js";
|
|
16
14
|
import {
|
|
17
15
|
TurnMetrics,
|
|
18
16
|
WORKFLOW_KICKOFF_PROMPT,
|
|
19
17
|
buildAgentReminder,
|
|
20
18
|
buildAgentSmallReminder,
|
|
19
|
+
buildTopLevelSystemPrompt,
|
|
21
20
|
createChatDoneEvent,
|
|
22
21
|
createMessageStartEvent
|
|
23
22
|
} from "./chunk-6VDCH5ML.js";
|
|
@@ -37,9 +36,67 @@ import {
|
|
|
37
36
|
getGlobalConfigDir
|
|
38
37
|
} from "./chunk-CQGTEGKL.js";
|
|
39
38
|
|
|
39
|
+
// src/server/chat/dynamic-context.ts
|
|
40
|
+
import { createHash } from "crypto";
|
|
41
|
+
function computeDynamicContextHash(instructionContent, skills, toolFingerprint) {
|
|
42
|
+
const dynamicInputs = JSON.stringify({
|
|
43
|
+
instructions: instructionContent,
|
|
44
|
+
skills: skills.map((s) => s.id).sort(),
|
|
45
|
+
...toolFingerprint ? { tools: toolFingerprint } : {}
|
|
46
|
+
});
|
|
47
|
+
return createHash("sha256").update(dynamicInputs).digest("hex");
|
|
48
|
+
}
|
|
49
|
+
function getToolFingerprint(tools) {
|
|
50
|
+
return tools.map((t) => `${t.function.name}:${JSON.stringify(t.function.parameters)}`).sort().join("|");
|
|
51
|
+
}
|
|
52
|
+
async function loadSessionContext(sessionManager, sessionId) {
|
|
53
|
+
const session = sessionManager.requireSession(sessionId);
|
|
54
|
+
const { content: instructionContent } = await getAllInstructions(session.workdir, session.projectId);
|
|
55
|
+
const runtimeConfig = getRuntimeConfig();
|
|
56
|
+
const configDir = getGlobalConfigDir(runtimeConfig.mode ?? "production");
|
|
57
|
+
const skills = await getEnabledSkillMetadata(configDir, runtimeConfig.workdir);
|
|
58
|
+
return { instructionContent: instructionContent ?? "", skills };
|
|
59
|
+
}
|
|
60
|
+
function resolveAgentDef(sessionManager, sessionId) {
|
|
61
|
+
return loadAllAgentsDefault().then((allAgents) => {
|
|
62
|
+
const session = sessionManager.requireSession(sessionId);
|
|
63
|
+
return findAgentById(session.mode, allAgents) ?? findAgentById("planner", allAgents);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function buildCachedPrompt(sessionManager, sessionId, agentDef) {
|
|
67
|
+
const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
|
|
68
|
+
const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-33FQNFKC.js");
|
|
69
|
+
const tools = getToolRegistryForAgent2(agentDef).definitions;
|
|
70
|
+
const toolFingerprint = getToolFingerprint(tools);
|
|
71
|
+
const allAgents = await loadAllAgentsDefault();
|
|
72
|
+
const subAgentDefs = getSubAgents(allAgents);
|
|
73
|
+
const session = sessionManager.requireSession(sessionId);
|
|
74
|
+
const systemPrompt = buildTopLevelSystemPrompt(session.workdir, instructionContent || void 0, skills, subAgentDefs);
|
|
75
|
+
const hash = computeDynamicContextHash(instructionContent, skills, toolFingerprint);
|
|
76
|
+
return { systemPrompt, tools, hash };
|
|
77
|
+
}
|
|
78
|
+
async function computeSessionHash(sessionManager, sessionId) {
|
|
79
|
+
const { instructionContent, skills } = await loadSessionContext(sessionManager, sessionId);
|
|
80
|
+
const agentDef = await resolveAgentDef(sessionManager, sessionId);
|
|
81
|
+
const { getToolRegistryForAgent: getToolRegistryForAgent2 } = await import("./tools-33FQNFKC.js");
|
|
82
|
+
const tools = getToolRegistryForAgent2(agentDef).definitions;
|
|
83
|
+
const toolFingerprint = getToolFingerprint(tools);
|
|
84
|
+
return computeDynamicContextHash(instructionContent, skills, toolFingerprint);
|
|
85
|
+
}
|
|
86
|
+
async function applyDynamicContext(sessionManager, sessionId) {
|
|
87
|
+
const session = sessionManager.requireSession(sessionId);
|
|
88
|
+
const allAgents = await loadAllAgentsDefault();
|
|
89
|
+
const agentDef = findAgentById(session.mode, allAgents) ?? findAgentById("planner", allAgents);
|
|
90
|
+
const { systemPrompt, tools, hash } = await buildCachedPrompt(sessionManager, sessionId, agentDef);
|
|
91
|
+
sessionManager.setCachedPrompt(sessionId, systemPrompt, tools, hash);
|
|
92
|
+
sessionManager.setDynamicContextChanged(sessionId, false);
|
|
93
|
+
sessionManager.clearDebugDump(sessionId);
|
|
94
|
+
logger.debug("applyDynamicContext done", { sessionId, hash, toolCount: tools.length });
|
|
95
|
+
}
|
|
96
|
+
|
|
40
97
|
// src/server/chat/orchestrator.ts
|
|
41
98
|
async function buildRetryPatterns() {
|
|
42
|
-
const { getSetting, SETTINGS_KEYS } = await import("./settings-
|
|
99
|
+
const { getSetting, SETTINGS_KEYS } = await import("./settings-ASLTSUE2.js");
|
|
43
100
|
const raw = getSetting(SETTINGS_KEYS.RETRY_PATTERNS);
|
|
44
101
|
if (!raw) {
|
|
45
102
|
const oldXmlProtection = getSetting("llm.disableXmlProtection");
|
|
@@ -320,8 +377,10 @@ function buildSnapshot(sessionManager, sessionId, _lastStats) {
|
|
|
320
377
|
}
|
|
321
378
|
|
|
322
379
|
export {
|
|
380
|
+
computeSessionHash,
|
|
381
|
+
applyDynamicContext,
|
|
323
382
|
runChatTurn,
|
|
324
383
|
runAgentTurn,
|
|
325
384
|
injectWorkflowKickoffIfNeeded
|
|
326
385
|
};
|
|
327
|
-
//# sourceMappingURL=chunk-
|
|
386
|
+
//# sourceMappingURL=chunk-L4WACPUX.js.map
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
tokenFromPassword,
|
|
22
22
|
verifyPassword,
|
|
23
23
|
workflowExists
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-BKTBHEPY.js";
|
|
25
25
|
import {
|
|
26
26
|
agentExists,
|
|
27
27
|
createToolRegistry,
|
|
@@ -66,7 +66,7 @@ import {
|
|
|
66
66
|
setSkillEnabled,
|
|
67
67
|
skillExists,
|
|
68
68
|
updateOwnedSkill
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-WEB4WBUF.js";
|
|
70
70
|
import {
|
|
71
71
|
getPathSeparator,
|
|
72
72
|
isAbsolutePath
|
|
@@ -84,7 +84,7 @@ import {
|
|
|
84
84
|
deleteSetting,
|
|
85
85
|
getSetting,
|
|
86
86
|
setSetting
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-SVSKQYFH.js";
|
|
88
88
|
import {
|
|
89
89
|
getProject
|
|
90
90
|
} from "./chunk-YQ3SOPBI.js";
|
|
@@ -4078,7 +4078,7 @@ import { Router as Router8 } from "express";
|
|
|
4078
4078
|
import { spawn as spawn2 } from "child_process";
|
|
4079
4079
|
|
|
4080
4080
|
// src/constants.ts
|
|
4081
|
-
var VERSION = "2.0.
|
|
4081
|
+
var VERSION = "2.0.62";
|
|
4082
4082
|
|
|
4083
4083
|
// src/server/routes/auto-update.ts
|
|
4084
4084
|
var updateInProgress = false;
|
|
@@ -4283,7 +4283,7 @@ async function createServerHandle(config3) {
|
|
|
4283
4283
|
setMcpTools(mcpTools);
|
|
4284
4284
|
logger.info("MCP tools registered", { count: mcpTools.length });
|
|
4285
4285
|
}
|
|
4286
|
-
const { signalMcpReady } = await import("./server-
|
|
4286
|
+
const { signalMcpReady } = await import("./server-CI5IEBOC.js");
|
|
4287
4287
|
signalMcpReady();
|
|
4288
4288
|
});
|
|
4289
4289
|
const app = express();
|
|
@@ -4476,7 +4476,7 @@ async function createServerHandle(config3) {
|
|
|
4476
4476
|
app.get("/api/sessions/:id", async (req, res) => {
|
|
4477
4477
|
const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
|
|
4478
4478
|
const { buildMessagesFromStoredEvents } = await import("./folding-2BGFLV5J.js");
|
|
4479
|
-
const { getPendingQuestionsForSession } = await import("./tools-
|
|
4479
|
+
const { getPendingQuestionsForSession } = await import("./tools-33FQNFKC.js");
|
|
4480
4480
|
const session = sessionManager.getSession(req.params.id);
|
|
4481
4481
|
if (!session) {
|
|
4482
4482
|
return res.status(404).json({ error: "Session not found" });
|
|
@@ -4495,8 +4495,8 @@ async function createServerHandle(config3) {
|
|
|
4495
4495
|
if (!session) {
|
|
4496
4496
|
return res.status(404).json({ error: "Session not found" });
|
|
4497
4497
|
}
|
|
4498
|
-
const { stopSessionExecution } = await import("./chat-handler-
|
|
4499
|
-
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-
|
|
4498
|
+
const { stopSessionExecution } = await import("./chat-handler-TRAITVLO.js");
|
|
4499
|
+
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-33FQNFKC.js");
|
|
4500
4500
|
sessionManager.clearMessageQueue(sessionId);
|
|
4501
4501
|
stopSessionExecution(sessionId, sessionManager);
|
|
4502
4502
|
abortSession(sessionId);
|
|
@@ -4650,7 +4650,7 @@ async function createServerHandle(config3) {
|
|
|
4650
4650
|
if (!callId || approved === void 0) {
|
|
4651
4651
|
return res.status(400).json({ error: "callId and approved are required" });
|
|
4652
4652
|
}
|
|
4653
|
-
const { providePathConfirmation } = await import("./tools-
|
|
4653
|
+
const { providePathConfirmation } = await import("./tools-33FQNFKC.js");
|
|
4654
4654
|
const result = providePathConfirmation(callId, approved, alwaysAllow);
|
|
4655
4655
|
if (!result.found) {
|
|
4656
4656
|
return res.status(404).json({ error: "No pending path confirmation with that ID" });
|
|
@@ -4658,7 +4658,7 @@ async function createServerHandle(config3) {
|
|
|
4658
4658
|
const { getEventStore: getEventStore2 } = await import("./events-52XADT6Y.js");
|
|
4659
4659
|
const { buildMessagesFromStoredEvents, foldPendingConfirmations } = await import("./folding-2BGFLV5J.js");
|
|
4660
4660
|
const { createSessionStateMessage } = await import("./protocol-CTNE3ANP.js");
|
|
4661
|
-
const { getPendingQuestionsForSession } = await import("./tools-
|
|
4661
|
+
const { getPendingQuestionsForSession } = await import("./tools-33FQNFKC.js");
|
|
4662
4662
|
const eventStore = getEventStore2();
|
|
4663
4663
|
const events = eventStore.getEvents(sessionId);
|
|
4664
4664
|
const messages = buildMessagesFromStoredEvents(events);
|
|
@@ -4679,7 +4679,7 @@ async function createServerHandle(config3) {
|
|
|
4679
4679
|
if (!skip && typeof answer !== "string") {
|
|
4680
4680
|
return res.status(400).json({ error: "answer is required when not skipping" });
|
|
4681
4681
|
}
|
|
4682
|
-
const { provideAnswer } = await import("./tools-
|
|
4682
|
+
const { provideAnswer } = await import("./tools-33FQNFKC.js");
|
|
4683
4683
|
const found = provideAnswer(callId, answer ?? "", skip ?? false);
|
|
4684
4684
|
if (!found) {
|
|
4685
4685
|
return res.status(404).json({ error: "No pending question with that ID" });
|
|
@@ -4707,7 +4707,7 @@ async function createServerHandle(config3) {
|
|
|
4707
4707
|
if (!session) {
|
|
4708
4708
|
return res.status(404).json({ error: "Session not found" });
|
|
4709
4709
|
}
|
|
4710
|
-
const { getSetting: getSetting2, SETTINGS_KEYS } = await import("./settings-
|
|
4710
|
+
const { getSetting: getSetting2, SETTINGS_KEYS } = await import("./settings-ASLTSUE2.js");
|
|
4711
4711
|
if (getSetting2(SETTINGS_KEYS.CACHE_WARMING) !== "true") {
|
|
4712
4712
|
return res.json({ success: false, reason: "disabled" });
|
|
4713
4713
|
}
|
|
@@ -4739,7 +4739,7 @@ async function createServerHandle(config3) {
|
|
|
4739
4739
|
backend: activeProvider?.backend ?? llmClient.getBackend(),
|
|
4740
4740
|
model: llmClient.getModel()
|
|
4741
4741
|
};
|
|
4742
|
-
const { runAgentTurn, TurnMetrics } = await import("./orchestrator-
|
|
4742
|
+
const { runAgentTurn, TurnMetrics } = await import("./orchestrator-TQ23BAFQ.js");
|
|
4743
4743
|
runAgentTurn(
|
|
4744
4744
|
{
|
|
4745
4745
|
sessionManager,
|
|
@@ -4777,8 +4777,8 @@ async function createServerHandle(config3) {
|
|
|
4777
4777
|
if (!session) {
|
|
4778
4778
|
return res.status(404).json({ error: "Session not found" });
|
|
4779
4779
|
}
|
|
4780
|
-
const { stopSessionExecution } = await import("./chat-handler-
|
|
4781
|
-
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-
|
|
4780
|
+
const { stopSessionExecution } = await import("./chat-handler-TRAITVLO.js");
|
|
4781
|
+
const { cancelQuestionsForSession, cancelPathConfirmationsForSession } = await import("./tools-33FQNFKC.js");
|
|
4782
4782
|
const queuedMessages = sessionManager.getQueueState(sessionId);
|
|
4783
4783
|
sessionManager.clearMessageQueue(sessionId);
|
|
4784
4784
|
stopSessionExecution(sessionId, sessionManager);
|
|
@@ -4858,7 +4858,7 @@ async function createServerHandle(config3) {
|
|
|
4858
4858
|
res.json({ accepted: true });
|
|
4859
4859
|
});
|
|
4860
4860
|
app.get("/api/settings", async (req, res) => {
|
|
4861
|
-
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-
|
|
4861
|
+
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
|
|
4862
4862
|
const keysParam = req.query["keys"];
|
|
4863
4863
|
if (!keysParam) {
|
|
4864
4864
|
return res.status(400).json({ error: "keys query parameter is required" });
|
|
@@ -4871,19 +4871,19 @@ async function createServerHandle(config3) {
|
|
|
4871
4871
|
res.json(result);
|
|
4872
4872
|
});
|
|
4873
4873
|
app.get("/api/settings/:key", async (req, res) => {
|
|
4874
|
-
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-
|
|
4874
|
+
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
|
|
4875
4875
|
const key = req.params.key;
|
|
4876
4876
|
const value = getSetting2(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
4877
4877
|
res.json({ key, value });
|
|
4878
4878
|
});
|
|
4879
4879
|
app.get("/api/settings/:key", async (req, res) => {
|
|
4880
|
-
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-
|
|
4880
|
+
const { getSetting: getSetting2, SETTINGS_DEFAULTS } = await import("./settings-ASLTSUE2.js");
|
|
4881
4881
|
const key = req.params.key;
|
|
4882
4882
|
const value = getSetting2(key) ?? SETTINGS_DEFAULTS[key] ?? null;
|
|
4883
4883
|
res.json({ key, value });
|
|
4884
4884
|
});
|
|
4885
4885
|
app.put("/api/settings/:key", async (req, res) => {
|
|
4886
|
-
const { setSetting: setSetting2 } = await import("./settings-
|
|
4886
|
+
const { setSetting: setSetting2 } = await import("./settings-ASLTSUE2.js");
|
|
4887
4887
|
const key = req.params.key;
|
|
4888
4888
|
const { value } = req.body;
|
|
4889
4889
|
if (value === void 0) {
|
|
@@ -4991,6 +4991,56 @@ async function createServerHandle(config3) {
|
|
|
4991
4991
|
});
|
|
4992
4992
|
}
|
|
4993
4993
|
});
|
|
4994
|
+
app.post("/api/search/test", async (req, res) => {
|
|
4995
|
+
const { engine, tavilyApiKey, searxngUrl, searxngApiKey } = req.body;
|
|
4996
|
+
try {
|
|
4997
|
+
if (engine === "tavily") {
|
|
4998
|
+
const key = tavilyApiKey || process.env["TAVILY_API_KEY"];
|
|
4999
|
+
if (!key) {
|
|
5000
|
+
return res.status(400).json({ success: false, error: "Tavily API key is required" });
|
|
5001
|
+
}
|
|
5002
|
+
const response = await fetch("https://api.tavily.com/search", {
|
|
5003
|
+
method: "POST",
|
|
5004
|
+
headers: { "Content-Type": "application/json" },
|
|
5005
|
+
body: JSON.stringify({ api_key: key, query: "test", max_results: 1 }),
|
|
5006
|
+
signal: AbortSignal.timeout(1e4)
|
|
5007
|
+
});
|
|
5008
|
+
if (!response.ok) {
|
|
5009
|
+
const body = await response.text().catch(() => "");
|
|
5010
|
+
return res.status(400).json({ success: false, error: `Tavily error (${response.status}): ${body}` });
|
|
5011
|
+
}
|
|
5012
|
+
return res.json({ success: true, message: "Tavily connection OK" });
|
|
5013
|
+
}
|
|
5014
|
+
if (engine === "searxng") {
|
|
5015
|
+
const url = searxngUrl || process.env["SEARXNG_URL"];
|
|
5016
|
+
if (!url) {
|
|
5017
|
+
return res.status(400).json({ success: false, error: "SearXNG URL is required" });
|
|
5018
|
+
}
|
|
5019
|
+
const searchUrl = new URL(`${url.replace(/\/+$/, "")}/search`);
|
|
5020
|
+
searchUrl.searchParams.set("format", "json");
|
|
5021
|
+
searchUrl.searchParams.set("q", "test");
|
|
5022
|
+
const apiKey = searxngApiKey || process.env["SEARXNG_API_KEY"] || void 0;
|
|
5023
|
+
const headers = {};
|
|
5024
|
+
if (apiKey) headers["Authorization"] = `Bearer ${apiKey}`;
|
|
5025
|
+
const response = await fetch(searchUrl.toString(), {
|
|
5026
|
+
headers,
|
|
5027
|
+
signal: AbortSignal.timeout(1e4)
|
|
5028
|
+
});
|
|
5029
|
+
if (!response.ok) {
|
|
5030
|
+
const body = await response.text().catch(() => "");
|
|
5031
|
+
return res.status(400).json({ success: false, error: `SearXNG error (${response.status}): ${body}` });
|
|
5032
|
+
}
|
|
5033
|
+
return res.json({ success: true, message: "SearXNG connection OK" });
|
|
5034
|
+
}
|
|
5035
|
+
return res.status(400).json({ success: false, error: "Invalid engine" });
|
|
5036
|
+
} catch (error) {
|
|
5037
|
+
const message = error instanceof Error ? error.message : "Connection failed";
|
|
5038
|
+
if (error instanceof DOMException && error.name === "AbortError") {
|
|
5039
|
+
return res.status(400).json({ success: false, error: "Connection timed out" });
|
|
5040
|
+
}
|
|
5041
|
+
return res.status(400).json({ success: false, error: message });
|
|
5042
|
+
}
|
|
5043
|
+
});
|
|
4994
5044
|
app.get("/api/providers/models", async (req, res) => {
|
|
4995
5045
|
const url = req.query["url"];
|
|
4996
5046
|
const apiKey = req.query["apiKey"];
|
|
@@ -5293,7 +5343,7 @@ async function createServerHandle(config3) {
|
|
|
5293
5343
|
});
|
|
5294
5344
|
async function rebuildMcpTools() {
|
|
5295
5345
|
const { createMcpTools: createMcpTools2 } = await import("./tool-adapter-MOGEI6TP.js");
|
|
5296
|
-
const { setMcpTools: setMcpTools2 } = await import("./tools-
|
|
5346
|
+
const { setMcpTools: setMcpTools2 } = await import("./tools-33FQNFKC.js");
|
|
5297
5347
|
const mcpTools = createMcpTools2(mcpManager);
|
|
5298
5348
|
setMcpTools2(mcpTools);
|
|
5299
5349
|
}
|
|
@@ -5613,7 +5663,7 @@ async function createServerHandle(config3) {
|
|
|
5613
5663
|
const state = sessionManager.getContextState(sessionId);
|
|
5614
5664
|
wssExports.broadcastForSession(sessionId, createContextStateMessage(state));
|
|
5615
5665
|
});
|
|
5616
|
-
const { QueueProcessor } = await import("./processor-
|
|
5666
|
+
const { QueueProcessor } = await import("./processor-3ZOFGZP5.js");
|
|
5617
5667
|
const queueProcessor = new QueueProcessor({
|
|
5618
5668
|
sessionManager,
|
|
5619
5669
|
providerManager,
|
|
@@ -5693,4 +5743,4 @@ export {
|
|
|
5693
5743
|
createServerHandle,
|
|
5694
5744
|
createServer
|
|
5695
5745
|
};
|
|
5696
|
-
//# sourceMappingURL=chunk-
|
|
5746
|
+
//# sourceMappingURL=chunk-QZRS2RF5.js.map
|
|
@@ -20,7 +20,11 @@ var SETTINGS_KEYS = {
|
|
|
20
20
|
CACHE_WARMING: "cache.warming",
|
|
21
21
|
KEYBINDINGS: "keybindings",
|
|
22
22
|
RETRY_PATTERNS: "agent.retryPatterns",
|
|
23
|
-
SKILLS_DIRECTORIES: "skills.directories"
|
|
23
|
+
SKILLS_DIRECTORIES: "skills.directories",
|
|
24
|
+
SEARCH_ENGINE: "search.engine",
|
|
25
|
+
SEARCH_TAVILY_API_KEY: "search.tavilyApiKey",
|
|
26
|
+
SEARCH_SEARXNG_URL: "search.searxngUrl",
|
|
27
|
+
SEARCH_SEARXNG_API_KEY: "search.searxngApiKey"
|
|
24
28
|
};
|
|
25
29
|
var SETTINGS_DEFAULTS = {
|
|
26
30
|
[SETTINGS_KEYS.DISPLAY_SHOW_THINKING]: "true",
|
|
@@ -93,4 +97,4 @@ export {
|
|
|
93
97
|
deleteSetting,
|
|
94
98
|
getAllSettings
|
|
95
99
|
};
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
100
|
+
//# sourceMappingURL=chunk-SVSKQYFH.js.map
|