openfox 2.0.133 → 2.0.134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/CHANGELOG.md +12 -0
- package/dist/{chat-handler-T47GATL5.js → chat-handler-YCZE2XEJ.js} +23 -22
- package/dist/chunk-24YKXKCG.js +35 -0
- package/dist/chunk-2OMGR7LN.js +45 -0
- package/dist/{chunk-OUQZZEIQ.js → chunk-5IXCCMFU.js} +335 -187
- package/dist/{chunk-MQMPIXON.js → chunk-5UMXFLET.js} +3 -3
- package/dist/{chunk-5JWJEZJ3.js → chunk-5UQ4CKOA.js} +2 -2
- package/dist/{chunk-P5MSY7ZI.js → chunk-7HGBJFIJ.js} +22 -17
- package/dist/{chunk-7JVBDBXE.js → chunk-7QMWYNVF.js} +2 -2
- package/dist/{chunk-P57IBMK4.js → chunk-AATMPL7S.js} +4 -4
- package/dist/{chunk-ZL4IAFF3.js → chunk-BZND27IB.js} +3 -3
- package/dist/{chunk-FGNJMKDV.js → chunk-CSYOWFPU.js} +5 -5
- package/dist/{chunk-LQKXJPKP.js → chunk-CTWZPN7G.js} +5 -1
- package/dist/{chunk-BKMWZTNO.js → chunk-DWA4IE65.js} +14 -2
- package/dist/{chunk-RRUSYVQD.js → chunk-FAQDLL2X.js} +8 -8
- package/dist/{chunk-HCYSGLY2.js → chunk-HF3NDXB4.js} +1 -1
- package/dist/{chunk-6EZDW4JS.js → chunk-J3NMNYGM.js} +2 -2
- package/dist/{chunk-HXHPKGJE.js → chunk-J5HOUEPE.js} +614 -157
- package/dist/{chunk-A7CB4USC.js → chunk-M4J2L4VH.js} +132 -45
- package/dist/{chunk-M5T4RDPJ.js → chunk-MEEUXRFL.js} +2 -2
- package/dist/{chunk-OMMPTN6X.js → chunk-MRE4OYKI.js} +69 -27
- package/dist/{chunk-MGEYAYGU.js → chunk-O3RCSKUH.js} +2 -2
- package/dist/{chunk-ELYHHEYL.js → chunk-ORCQ3EXQ.js} +2 -2
- package/dist/{chunk-FEIRWXLX.js → chunk-OZWHRBDY.js} +64 -17
- package/dist/{chunk-TACWRDDC.js → chunk-QDARWVQ2.js} +2 -2
- package/dist/{chunk-VXG3AFFY.js → chunk-QICVOQNX.js} +8 -8
- package/dist/chunk-QTLYD2FF.js +7 -0
- package/dist/{chunk-Y6ZGHOKM.js → chunk-YLVOU7T7.js} +4 -4
- package/dist/{chunk-GFW2HWJ6.js → chunk-YOPXAI2W.js} +37 -16
- package/dist/{chunk-CLDCHOEA.js → chunk-ZMK4VX7V.js} +2 -2
- package/dist/{chunk-KWAHD2JA.js → chunk-ZTBKMVV6.js} +2 -2
- package/dist/cli/dev.js +4 -1
- package/dist/cli/index.js +4 -1
- package/dist/{client-2K6PPPJJ.js → client-VVYOWXRR.js} +4 -4
- package/dist/{compactor-OEJAA2YP.js → compactor-PD6DQ4NY.js} +9 -9
- package/dist/{dynamic-context-NJZKAZE3.js → dynamic-context-WKEXQCTK.js} +10 -10
- package/dist/{events-ZJPRGVL2.js → events-3WSNI7XC.js} +6 -6
- package/dist/{folding-QRZOHY2I.js → folding-H7JTX6KI.js} +4 -4
- package/dist/{http-client-P4XTKAZA.js → http-client-A445WYZU.js} +3 -3
- package/dist/{install-VA2F6X6Z.js → install-AVTFA344.js} +64 -15
- package/dist/{launch-UKXVO37B.js → launch-FJ65HRV4.js} +23 -22
- package/dist/{manager-TMBFBCQL.js → manager-ZACEUL5P.js} +4 -4
- package/dist/{mcp-YU7AM3UV.js → mcp-SQ4DOGPT.js} +22 -9
- package/dist/{orchestrator-GX22Y5EM.js → orchestrator-OT66EDXO.js} +22 -21
- package/dist/package.json +3 -1
- package/dist/{path-security-CBACXAMS.js → path-security-5CFMMULR.js} +10 -10
- package/dist/{platform-5LQXOZO3.js → platform-XPMZKAUB.js} +3 -3
- package/dist/{processor-V35OLKRV.js → processor-CHMHMMIE.js} +22 -21
- package/dist/{project-creator-6AGQTNXB.js → project-creator-T3A4H3YV.js} +42 -29
- package/dist/{protocol-BMUoqwYH.d.ts → protocol-Nr_H1_oC.d.ts} +3 -1
- package/dist/{protocol-Y7MRKRUO.js → protocol-XO4ZROAU.js} +3 -3
- package/dist/provider/index.d.ts +4 -4
- package/dist/provider-JWUNG2TD.js +507 -0
- package/dist/{provider-manager-BO5ZBG3T.js → provider-manager-2KKZ37XJ.js} +5 -5
- package/dist/pwa-V5PFB4OQ.js +502 -0
- package/dist/{registry-CMSSZHDC.js → registry-BEIR7Y5G.js} +3 -3
- package/dist/{serve-XRVT3D7Z.js → serve-HSDVY37K.js} +47 -36
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +27 -26
- package/dist/{server-GXMZMPXI.js → server-3UVLECD5.js} +26 -25
- package/dist/{service-WKABQHKL.js → service-M77VWL2M.js} +97 -32
- package/dist/{service-O3LCO3TQ.js → service-XIUNS5XV.js} +7 -6
- package/dist/{session-overrides-OECQYRDK.js → session-overrides-Y5B4XQPU.js} +5 -5
- package/dist/{sessions-NMPX5ICI.js → sessions-IGINPPBP.js} +4 -4
- package/dist/{settings-MDCRNQBY.js → settings-ZJPM6PQV.js} +2 -2
- package/dist/shared/index.d.ts +31 -4
- package/dist/shared/index.js +16 -2
- package/dist/{tasks-WOC3QUFA.js → tasks-3JJWJJ3X.js} +34 -18
- package/dist/{tools-CW6POKUL.js → tools-WWIWD3O7.js} +20 -19
- package/dist/{types-CoY8Ka1C.d.ts → types-BlQjLBui.d.ts} +1 -1
- package/dist/{types-BIkpxjaj.d.ts → types-G10ho8PT.d.ts} +1 -1
- package/dist/update-Q6SH7UP2.js +76 -0
- package/dist/web/assets/index-C48qmBAI.js +313 -0
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +3 -1
- package/dist/chunk-JKGHTBEV.js +0 -7
- package/dist/provider-NWRGNGS3.js +0 -403
- package/dist/pwa-2GRFSXD7.js +0 -363
- package/dist/update-VC3Y3EOP.js +0 -49
- package/dist/web/assets/index-ATAQvBwl.js +0 -312
|
@@ -2,29 +2,32 @@ import {
|
|
|
2
2
|
generateSessionNameForSession,
|
|
3
3
|
getSessionMessageCount,
|
|
4
4
|
needsNameGeneration
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FAQDLL2X.js";
|
|
6
6
|
import {
|
|
7
7
|
launchWorkflowRun
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-7HGBJFIJ.js";
|
|
9
9
|
import {
|
|
10
10
|
runChatTurn
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-YOPXAI2W.js";
|
|
12
12
|
import {
|
|
13
13
|
devServerManager
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-J5HOUEPE.js";
|
|
15
15
|
import {
|
|
16
16
|
gitSpawnEnv
|
|
17
17
|
} from "./chunk-J7GAZGZT.js";
|
|
18
|
+
import {
|
|
19
|
+
serverT
|
|
20
|
+
} from "./chunk-OZWHRBDY.js";
|
|
18
21
|
import {
|
|
19
22
|
appendCompactionPrompt
|
|
20
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-BZND27IB.js";
|
|
21
24
|
import {
|
|
22
25
|
hasRecentLLMFailure,
|
|
23
26
|
interruptLLMRetryWait
|
|
24
27
|
} from "./chunk-7ET46SNE.js";
|
|
25
28
|
import {
|
|
26
29
|
onProcessEvent
|
|
27
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-5UMXFLET.js";
|
|
28
31
|
import {
|
|
29
32
|
killProcessTree
|
|
30
33
|
} from "./chunk-I72ACQ6R.js";
|
|
@@ -32,7 +35,7 @@ import {
|
|
|
32
35
|
applyDynamicContext,
|
|
33
36
|
computeSessionHash,
|
|
34
37
|
computeUnifiedDiff
|
|
35
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-QICVOQNX.js";
|
|
36
39
|
import {
|
|
37
40
|
getPendingQuestionsForSession,
|
|
38
41
|
provideAnswer
|
|
@@ -40,14 +43,14 @@ import {
|
|
|
40
43
|
import {
|
|
41
44
|
combineEventsWithSnapshot,
|
|
42
45
|
getEventStore
|
|
43
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-CSYOWFPU.js";
|
|
44
47
|
import {
|
|
45
48
|
buildMessagesFromStoredEvents,
|
|
46
49
|
foldPendingConfirmations
|
|
47
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-MEEUXRFL.js";
|
|
48
51
|
import {
|
|
49
52
|
getRuntimeConfig
|
|
50
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-ORCQ3EXQ.js";
|
|
51
54
|
import {
|
|
52
55
|
createChatErrorMessage,
|
|
53
56
|
createChatMessageMessage,
|
|
@@ -62,19 +65,19 @@ import {
|
|
|
62
65
|
parseClientMessage,
|
|
63
66
|
serializeServerMessage,
|
|
64
67
|
storedEventToServerMessage
|
|
65
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-AATMPL7S.js";
|
|
66
69
|
import {
|
|
67
70
|
getPlatformShell
|
|
68
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-O3RCSKUH.js";
|
|
69
72
|
import {
|
|
70
73
|
getMaxVisibleItems
|
|
71
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-CTWZPN7G.js";
|
|
72
75
|
import {
|
|
73
76
|
logger
|
|
74
77
|
} from "./chunk-K44MW7JJ.js";
|
|
75
78
|
import {
|
|
76
79
|
createServerMessage
|
|
77
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-HF3NDXB4.js";
|
|
78
81
|
|
|
79
82
|
// src/server/ws/server.ts
|
|
80
83
|
import { WebSocketServer, WebSocket as WebSocket2 } from "ws";
|
|
@@ -472,6 +475,14 @@ async function isValidToken(token) {
|
|
|
472
475
|
}
|
|
473
476
|
|
|
474
477
|
// src/server/ws/server.ts
|
|
478
|
+
var MSG_INVALID_MESSAGE_FORMAT = { en: "Invalid message format", fr: "Format de message invalide" };
|
|
479
|
+
var MSG_NO_ACTIVE_SESSION = { en: "No active session", fr: "Aucune session active" };
|
|
480
|
+
var MSG_SESSION_NOT_FOUND = { en: "Session not found", fr: "Session introuvable" };
|
|
481
|
+
var MSG_SESSION_IS_RUNNING = {
|
|
482
|
+
en: "Session is already running",
|
|
483
|
+
fr: "La session est d\xE9j\xE0 en cours d\u2019ex\xE9cution"
|
|
484
|
+
};
|
|
485
|
+
var MSG_UNKNOWN_ERROR = { en: "Unknown error", fr: "Erreur inconnue" };
|
|
475
486
|
var resolveMcpReady = null;
|
|
476
487
|
var mcpReadyPromise = new Promise((resolve) => {
|
|
477
488
|
resolveMcpReady = resolve;
|
|
@@ -1023,7 +1034,7 @@ function createWebSocketServer(httpServer, _config, getLLMClient, getActiveProvi
|
|
|
1023
1034
|
const seq = client2.lastSentSeq + 1;
|
|
1024
1035
|
enqueueSend(
|
|
1025
1036
|
client2,
|
|
1026
|
-
serializeServerMessage(createErrorMessage("INVALID_MESSAGE",
|
|
1037
|
+
serializeServerMessage(createErrorMessage("INVALID_MESSAGE", serverT(MSG_INVALID_MESSAGE_FORMAT))),
|
|
1027
1038
|
seq
|
|
1028
1039
|
);
|
|
1029
1040
|
return;
|
|
@@ -1059,7 +1070,11 @@ function createWebSocketServer(httpServer, _config, getLLMClient, getActiveProvi
|
|
|
1059
1070
|
enqueueSend(
|
|
1060
1071
|
client2,
|
|
1061
1072
|
serializeServerMessage(
|
|
1062
|
-
createErrorMessage(
|
|
1073
|
+
createErrorMessage(
|
|
1074
|
+
"INTERNAL_ERROR",
|
|
1075
|
+
error instanceof Error ? error.message : serverT(MSG_UNKNOWN_ERROR),
|
|
1076
|
+
message.id
|
|
1077
|
+
)
|
|
1063
1078
|
),
|
|
1064
1079
|
seq
|
|
1065
1080
|
);
|
|
@@ -1150,12 +1165,18 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1150
1165
|
// =========================================================================
|
|
1151
1166
|
case "session.load": {
|
|
1152
1167
|
if (!isSessionLoadPayload(message.payload)) {
|
|
1153
|
-
send(
|
|
1168
|
+
send(
|
|
1169
|
+
createErrorMessage(
|
|
1170
|
+
"INVALID_PAYLOAD",
|
|
1171
|
+
serverT({ en: "Invalid session.load payload", fr: "Payload de session.load invalide" }),
|
|
1172
|
+
message.id
|
|
1173
|
+
)
|
|
1174
|
+
);
|
|
1154
1175
|
return;
|
|
1155
1176
|
}
|
|
1156
1177
|
const session = sessionManager.getSession(message.payload.sessionId);
|
|
1157
1178
|
if (!session) {
|
|
1158
|
-
send(createErrorMessage("NOT_FOUND",
|
|
1179
|
+
send(createErrorMessage("NOT_FOUND", serverT(MSG_SESSION_NOT_FOUND), message.id));
|
|
1159
1180
|
return;
|
|
1160
1181
|
}
|
|
1161
1182
|
client.activeSessionId = session.id;
|
|
@@ -1208,12 +1229,21 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1208
1229
|
const payload = message.payload;
|
|
1209
1230
|
const sessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1210
1231
|
if (!sessionId) {
|
|
1211
|
-
send(createErrorMessage("NO_SESSION",
|
|
1232
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1212
1233
|
return;
|
|
1213
1234
|
}
|
|
1214
1235
|
const session = sessionManager.requireSession(sessionId);
|
|
1215
1236
|
if (session.isRunning) {
|
|
1216
|
-
send(
|
|
1237
|
+
send(
|
|
1238
|
+
createErrorMessage(
|
|
1239
|
+
"SESSION_RUNNING",
|
|
1240
|
+
serverT({
|
|
1241
|
+
en: "Cannot compact while session is running",
|
|
1242
|
+
fr: "Impossible de compacter pendant que la session est en cours"
|
|
1243
|
+
}),
|
|
1244
|
+
message.id
|
|
1245
|
+
)
|
|
1246
|
+
);
|
|
1217
1247
|
return;
|
|
1218
1248
|
}
|
|
1219
1249
|
send({ type: "ack", payload: {}, id: message.id });
|
|
@@ -1240,10 +1270,11 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1240
1270
|
}).catch((error) => {
|
|
1241
1271
|
if (error instanceof Error && error.message === "Aborted") return;
|
|
1242
1272
|
logger.error("Compaction failed", { error, sessionId });
|
|
1273
|
+
const reason = error instanceof Error ? error.message : serverT(MSG_UNKNOWN_ERROR);
|
|
1243
1274
|
sendForSession(
|
|
1244
1275
|
sessionId,
|
|
1245
1276
|
createChatErrorMessage(
|
|
1246
|
-
|
|
1277
|
+
serverT({ en: "Compaction failed: {{reason}}", fr: "\xC9chec de la compaction : {{reason}}" }, { reason }),
|
|
1247
1278
|
true
|
|
1248
1279
|
)
|
|
1249
1280
|
);
|
|
@@ -1267,7 +1298,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1267
1298
|
}
|
|
1268
1299
|
case "context.checkDynamic": {
|
|
1269
1300
|
if (!client.activeSessionId) {
|
|
1270
|
-
send(createErrorMessage("NO_SESSION",
|
|
1301
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1271
1302
|
return;
|
|
1272
1303
|
}
|
|
1273
1304
|
const sessionId = client.activeSessionId;
|
|
@@ -1308,13 +1339,13 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1308
1339
|
const payload = message.payload;
|
|
1309
1340
|
const sessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1310
1341
|
if (!sessionId) {
|
|
1311
|
-
send(createErrorMessage("NO_SESSION",
|
|
1342
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1312
1343
|
return;
|
|
1313
1344
|
}
|
|
1314
1345
|
const session = sessionManager.requireSession(sessionId);
|
|
1315
1346
|
try {
|
|
1316
|
-
const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-
|
|
1317
|
-
const allAgents = await import("./registry-
|
|
1347
|
+
const { buildCachedPrompt, computePreviewToolDiff } = await import("./dynamic-context-WKEXQCTK.js");
|
|
1348
|
+
const allAgents = await import("./registry-BEIR7Y5G.js");
|
|
1318
1349
|
const agentDef = allAgents.findAgentById(session.mode, await allAgents.loadAllAgentsDefault()) ?? allAgents.findAgentById("planner", await allAgents.loadAllAgentsDefault());
|
|
1319
1350
|
const modelName = session.providerModel ?? _providerManager?.getCurrentModel();
|
|
1320
1351
|
const {
|
|
@@ -1325,7 +1356,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1325
1356
|
const oldCached = sessionManager.getCachedPrompt(sessionId);
|
|
1326
1357
|
const oldPrompt = oldCached?.systemPrompt;
|
|
1327
1358
|
const diff = oldPrompt ? computeUnifiedDiff(oldPrompt, newPrompt) : [];
|
|
1328
|
-
const { getToolRegistryForAgent } = await import("./tools-
|
|
1359
|
+
const { getToolRegistryForAgent } = await import("./tools-WWIWD3O7.js");
|
|
1329
1360
|
const unfilteredTools = getToolRegistryForAgent(agentDef).definitions;
|
|
1330
1361
|
const toolDiff = computePreviewToolDiff(oldCached?.tools, unfilteredTools, newTools);
|
|
1331
1362
|
send({
|
|
@@ -1345,10 +1376,11 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1345
1376
|
error: error instanceof Error ? error.message : "Unknown error",
|
|
1346
1377
|
sessionId
|
|
1347
1378
|
});
|
|
1379
|
+
const reason = error instanceof Error ? error.message : serverT(MSG_UNKNOWN_ERROR);
|
|
1348
1380
|
send(
|
|
1349
1381
|
createErrorMessage(
|
|
1350
1382
|
"ERROR",
|
|
1351
|
-
|
|
1383
|
+
serverT({ en: "Failed to preview: {{reason}}", fr: "\xC9chec de l\u2019aper\xE7u : {{reason}}" }, { reason }),
|
|
1352
1384
|
message.id
|
|
1353
1385
|
)
|
|
1354
1386
|
);
|
|
@@ -1359,12 +1391,21 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1359
1391
|
const payload = message.payload;
|
|
1360
1392
|
const sessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1361
1393
|
if (!sessionId) {
|
|
1362
|
-
send(createErrorMessage("NO_SESSION",
|
|
1394
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1363
1395
|
return;
|
|
1364
1396
|
}
|
|
1365
1397
|
const session = sessionManager.requireSession(sessionId);
|
|
1366
1398
|
if (session.isRunning) {
|
|
1367
|
-
send(
|
|
1399
|
+
send(
|
|
1400
|
+
createErrorMessage(
|
|
1401
|
+
"SESSION_RUNNING",
|
|
1402
|
+
serverT({
|
|
1403
|
+
en: "Cannot apply dynamic context while session is running",
|
|
1404
|
+
fr: "Impossible d\u2019appliquer le contexte dynamique pendant que la session est en cours"
|
|
1405
|
+
}),
|
|
1406
|
+
message.id
|
|
1407
|
+
)
|
|
1408
|
+
);
|
|
1368
1409
|
return;
|
|
1369
1410
|
}
|
|
1370
1411
|
;
|
|
@@ -1377,10 +1418,17 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1377
1418
|
send({ type: "ack", payload: {}, id: message.id });
|
|
1378
1419
|
} catch (error) {
|
|
1379
1420
|
logger.error("Failed to apply dynamic context", { error, sessionId });
|
|
1421
|
+
const reason = error instanceof Error ? error.message : serverT(MSG_UNKNOWN_ERROR);
|
|
1380
1422
|
sendForSession(
|
|
1381
1423
|
sessionId,
|
|
1382
1424
|
createChatErrorMessage(
|
|
1383
|
-
|
|
1425
|
+
serverT(
|
|
1426
|
+
{
|
|
1427
|
+
en: "Failed to apply dynamic context: {{reason}}",
|
|
1428
|
+
fr: "\xC9chec d\u2019application du contexte dynamique : {{reason}}"
|
|
1429
|
+
},
|
|
1430
|
+
{ reason }
|
|
1431
|
+
),
|
|
1384
1432
|
true
|
|
1385
1433
|
)
|
|
1386
1434
|
);
|
|
@@ -1396,7 +1444,7 @@ async function handleClientMessage(ws, client, message, _getLLMClient, _getActiv
|
|
|
1396
1444
|
const launchPayloadEarly = message.payload;
|
|
1397
1445
|
const sessionId = launchPayloadEarly?.sessionId ?? client.activeSessionId;
|
|
1398
1446
|
if (!sessionId) {
|
|
1399
|
-
send(createErrorMessage("NO_SESSION",
|
|
1447
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1400
1448
|
return;
|
|
1401
1449
|
}
|
|
1402
1450
|
const session = sessionManager.requireSession(sessionId);
|
|
@@ -1424,7 +1472,13 @@ ${content}` : workflowInfo;
|
|
|
1424
1472
|
if (!launchPayloadEarly?.resumeFrom) {
|
|
1425
1473
|
const pendingCriteria = session.criteria.filter((c) => c.status.type !== "passed");
|
|
1426
1474
|
if (!launchPayloadEarly?.workflowId && pendingCriteria.length === 0) {
|
|
1427
|
-
send(
|
|
1475
|
+
send(
|
|
1476
|
+
createErrorMessage(
|
|
1477
|
+
"NO_WORK",
|
|
1478
|
+
serverT({ en: "No pending criteria to work on", fr: "Aucun crit\xE8re en attente sur lequel travailler" }),
|
|
1479
|
+
message.id
|
|
1480
|
+
)
|
|
1481
|
+
);
|
|
1428
1482
|
return;
|
|
1429
1483
|
}
|
|
1430
1484
|
}
|
|
@@ -1511,17 +1565,29 @@ ${content}` : workflowInfo;
|
|
|
1511
1565
|
// =========================================================================
|
|
1512
1566
|
case "ask.answer": {
|
|
1513
1567
|
if (!client.activeSessionId) {
|
|
1514
|
-
send(createErrorMessage("NO_SESSION",
|
|
1568
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1515
1569
|
return;
|
|
1516
1570
|
}
|
|
1517
1571
|
if (!isAskAnswerPayload(message.payload)) {
|
|
1518
|
-
send(
|
|
1572
|
+
send(
|
|
1573
|
+
createErrorMessage(
|
|
1574
|
+
"INVALID_PAYLOAD",
|
|
1575
|
+
serverT({ en: "Invalid ask.answer payload", fr: "Payload ask.answer invalide" }),
|
|
1576
|
+
message.id
|
|
1577
|
+
)
|
|
1578
|
+
);
|
|
1519
1579
|
return;
|
|
1520
1580
|
}
|
|
1521
1581
|
const { callId, answer, skip } = message.payload;
|
|
1522
1582
|
const found = provideAnswer(callId, answer, skip);
|
|
1523
1583
|
if (!found) {
|
|
1524
|
-
send(
|
|
1584
|
+
send(
|
|
1585
|
+
createErrorMessage(
|
|
1586
|
+
"NOT_FOUND",
|
|
1587
|
+
serverT({ en: "No pending question with that ID", fr: "Aucune question en attente avec cet ID" }),
|
|
1588
|
+
message.id
|
|
1589
|
+
)
|
|
1590
|
+
);
|
|
1525
1591
|
return;
|
|
1526
1592
|
}
|
|
1527
1593
|
logger.debug("Ask user answer received", {
|
|
@@ -1539,12 +1605,12 @@ ${content}` : workflowInfo;
|
|
|
1539
1605
|
const payload = message.payload;
|
|
1540
1606
|
const exitSessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1541
1607
|
if (!exitSessionId) {
|
|
1542
|
-
send(createErrorMessage("NO_SESSION",
|
|
1608
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1543
1609
|
return;
|
|
1544
1610
|
}
|
|
1545
1611
|
const exitSession = sessionManager.getSession(exitSessionId);
|
|
1546
1612
|
if (!exitSession) {
|
|
1547
|
-
send(createErrorMessage("NOT_FOUND",
|
|
1613
|
+
send(createErrorMessage("NOT_FOUND", serverT(MSG_SESSION_NOT_FOUND), message.id));
|
|
1548
1614
|
return;
|
|
1549
1615
|
}
|
|
1550
1616
|
const activeExec = sessionManager.getActiveWorkflowExecution(exitSessionId);
|
|
@@ -1577,7 +1643,7 @@ ${content}` : workflowInfo;
|
|
|
1577
1643
|
const payload = message.payload;
|
|
1578
1644
|
const retrySessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1579
1645
|
if (!retrySessionId) {
|
|
1580
|
-
send(createErrorMessage("NO_SESSION",
|
|
1646
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1581
1647
|
return;
|
|
1582
1648
|
}
|
|
1583
1649
|
const interrupted = interruptLLMRetryWait(retrySessionId);
|
|
@@ -1588,25 +1654,37 @@ ${content}` : workflowInfo;
|
|
|
1588
1654
|
const payload = message.payload;
|
|
1589
1655
|
const retrySessionId = payload?.sessionId ?? client.activeSessionId;
|
|
1590
1656
|
if (!retrySessionId) {
|
|
1591
|
-
send(createErrorMessage("NO_SESSION",
|
|
1657
|
+
send(createErrorMessage("NO_SESSION", serverT(MSG_NO_ACTIVE_SESSION), message.id));
|
|
1592
1658
|
return;
|
|
1593
1659
|
}
|
|
1594
1660
|
const retrySession = sessionManager.getSession(retrySessionId);
|
|
1595
1661
|
if (!retrySession) {
|
|
1596
|
-
send(createErrorMessage("NOT_FOUND",
|
|
1662
|
+
send(createErrorMessage("NOT_FOUND", serverT(MSG_SESSION_NOT_FOUND), message.id));
|
|
1597
1663
|
return;
|
|
1598
1664
|
}
|
|
1599
1665
|
if (retrySession.isRunning) {
|
|
1600
|
-
send(createErrorMessage("SESSION_RUNNING",
|
|
1666
|
+
send(createErrorMessage("SESSION_RUNNING", serverT(MSG_SESSION_IS_RUNNING), message.id));
|
|
1601
1667
|
return;
|
|
1602
1668
|
}
|
|
1603
1669
|
if (!hasRecentLLMFailure(retrySessionId, 30 * 6e4)) {
|
|
1604
|
-
send(
|
|
1670
|
+
send(
|
|
1671
|
+
createErrorMessage(
|
|
1672
|
+
"NO_FAILED_TURN",
|
|
1673
|
+
serverT({ en: "No failed turn to retry", fr: "Aucun tour \xE9chou\xE9 \xE0 relancer" }),
|
|
1674
|
+
message.id
|
|
1675
|
+
)
|
|
1676
|
+
);
|
|
1605
1677
|
return;
|
|
1606
1678
|
}
|
|
1607
1679
|
const latestExec = sessionManager.getLatestWorkflowExecution(retrySessionId);
|
|
1608
1680
|
if (latestExec && (latestExec.status === "blocked" || latestExec.status === "running" || latestExec.status === "waiting")) {
|
|
1609
|
-
send(
|
|
1681
|
+
send(
|
|
1682
|
+
createErrorMessage(
|
|
1683
|
+
"WORKFLOW_ACTIVE",
|
|
1684
|
+
serverT({ en: "A workflow run is active", fr: "Un run de workflow est actif" }),
|
|
1685
|
+
message.id
|
|
1686
|
+
)
|
|
1687
|
+
);
|
|
1610
1688
|
return;
|
|
1611
1689
|
}
|
|
1612
1690
|
if (retrySession.phase === "blocked") {
|
|
@@ -1624,7 +1702,16 @@ ${content}` : workflowInfo;
|
|
|
1624
1702
|
break;
|
|
1625
1703
|
}
|
|
1626
1704
|
default: {
|
|
1627
|
-
send(
|
|
1705
|
+
send(
|
|
1706
|
+
createErrorMessage(
|
|
1707
|
+
"UNKNOWN_MESSAGE",
|
|
1708
|
+
serverT(
|
|
1709
|
+
{ en: "Unknown message type: {{type}}", fr: "Type de message inconnu : {{type}}" },
|
|
1710
|
+
{ type: message.type }
|
|
1711
|
+
),
|
|
1712
|
+
message.id
|
|
1713
|
+
)
|
|
1714
|
+
);
|
|
1628
1715
|
}
|
|
1629
1716
|
}
|
|
1630
1717
|
}
|
|
@@ -1642,4 +1729,4 @@ export {
|
|
|
1642
1729
|
signalMcpReady,
|
|
1643
1730
|
createWebSocketServer
|
|
1644
1731
|
};
|
|
1645
|
-
//# sourceMappingURL=chunk-
|
|
1732
|
+
//# sourceMappingURL=chunk-M4J2L4VH.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveDefaultAgentId
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ORCQ3EXQ.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeAskOptions
|
|
6
6
|
} from "./chunk-LCLH6ZUL.js";
|
|
@@ -965,4 +965,4 @@ export {
|
|
|
965
965
|
buildSnapshot,
|
|
966
966
|
buildSnapshotFromSessionState
|
|
967
967
|
};
|
|
968
|
-
//# sourceMappingURL=chunk-
|
|
968
|
+
//# sourceMappingURL=chunk-MEEUXRFL.js.map
|
|
@@ -4,13 +4,19 @@ import {
|
|
|
4
4
|
password,
|
|
5
5
|
select
|
|
6
6
|
} from "./chunk-AGXJ5O63.js";
|
|
7
|
+
import {
|
|
8
|
+
cliT,
|
|
9
|
+
setCliMode
|
|
10
|
+
} from "./chunk-2OMGR7LN.js";
|
|
7
11
|
|
|
8
12
|
// src/cli/main.ts
|
|
9
13
|
import { parseArgs } from "util";
|
|
10
14
|
import { generateKeyPairSync } from "crypto";
|
|
11
15
|
import { writeFile } from "fs/promises";
|
|
12
16
|
function printHelp() {
|
|
13
|
-
console.log(
|
|
17
|
+
console.log(
|
|
18
|
+
cliT({
|
|
19
|
+
en: `
|
|
14
20
|
OpenFox - Local LLM coding assistant
|
|
15
21
|
|
|
16
22
|
Usage:
|
|
@@ -34,7 +40,34 @@ Options:
|
|
|
34
40
|
--no-browser Don't open browser on start
|
|
35
41
|
-h, --help Show this help message
|
|
36
42
|
-v, --version Show version number
|
|
37
|
-
|
|
43
|
+
`,
|
|
44
|
+
fr: `
|
|
45
|
+
OpenFox - Assistant de codage LLM local
|
|
46
|
+
|
|
47
|
+
Utilisation :
|
|
48
|
+
openfox [commande] [options]
|
|
49
|
+
|
|
50
|
+
Commandes :
|
|
51
|
+
(aucune) D\xE9marrer le serveur pour le projet courant
|
|
52
|
+
config Afficher la configuration actuelle
|
|
53
|
+
provider add Ajouter un nouveau fournisseur LLM
|
|
54
|
+
provider list Lister les fournisseurs configur\xE9s
|
|
55
|
+
provider use Changer de fournisseur actif
|
|
56
|
+
provider remove Supprimer un fournisseur
|
|
57
|
+
service G\xE9rer le service systemd (install, start, stop, status, logs, uninstall)
|
|
58
|
+
pwa G\xE9rer l\u2019installation PWA (install, uninstall, launch, update, status)
|
|
59
|
+
mcp Afficher une configuration MCP pr\xEAte \xE0 coller pour ce serveur (demande le mot de passe s\u2019il est d\xE9fini)
|
|
60
|
+
install Installer un lanceur OpenFox persistant (utiliser --check pour inspecter)
|
|
61
|
+
update Mettre OpenFox \xE0 jour vers la derni\xE8re version
|
|
62
|
+
|
|
63
|
+
Options :
|
|
64
|
+
-p, --port <nombre> Sp\xE9cifier le port (d\xE9faut : 10369 pour prod, 10469 pour dev)
|
|
65
|
+
--no-browser Ne pas ouvrir le navigateur au d\xE9marrage
|
|
66
|
+
-h, --help Afficher ce message d\u2019aide
|
|
67
|
+
-v, --version Afficher le num\xE9ro de version
|
|
68
|
+
`
|
|
69
|
+
})
|
|
70
|
+
);
|
|
38
71
|
}
|
|
39
72
|
async function runNetworkSetup(mode) {
|
|
40
73
|
const { loadAuthConfig, saveAuthConfig, encryptPassword } = await import("./auth-D3WLIBTG.js");
|
|
@@ -44,12 +77,15 @@ async function runNetworkSetup(mode) {
|
|
|
44
77
|
if (existingAuth) {
|
|
45
78
|
return;
|
|
46
79
|
}
|
|
47
|
-
console.log("\nOpenFox Setup\n");
|
|
80
|
+
console.log(cliT({ en: "\nOpenFox Setup\n", fr: "\nConfiguration d\u2019OpenFox\n" }));
|
|
48
81
|
const networkChoice = await select({
|
|
49
|
-
message: "How should OpenFox be accessible?",
|
|
82
|
+
message: cliT({ en: "How should OpenFox be accessible?", fr: "Comment OpenFox doit-il \xEAtre accessible ?" }),
|
|
50
83
|
options: [
|
|
51
|
-
{ value: "localhost", label: "Secure (localhost only)" },
|
|
52
|
-
{
|
|
84
|
+
{ value: "localhost", label: cliT({ en: "Secure (localhost only)", fr: "S\xE9curis\xE9 (localhost uniquement)" }) },
|
|
85
|
+
{
|
|
86
|
+
value: "network",
|
|
87
|
+
label: cliT({ en: "Accessible from local network", fr: "Accessible depuis le r\xE9seau local" })
|
|
88
|
+
}
|
|
53
89
|
]
|
|
54
90
|
});
|
|
55
91
|
if (isCancel(networkChoice)) {
|
|
@@ -61,7 +97,10 @@ async function runNetworkSetup(mode) {
|
|
|
61
97
|
let passwordValue;
|
|
62
98
|
if (isNetwork) {
|
|
63
99
|
const pwd = await password({
|
|
64
|
-
message:
|
|
100
|
+
message: cliT({
|
|
101
|
+
en: "Set a password? (optional, press Enter to skip)",
|
|
102
|
+
fr: "D\xE9finir un mot de passe ? (facultatif, Entr\xE9e pour ignorer)"
|
|
103
|
+
})
|
|
65
104
|
});
|
|
66
105
|
if (isCancel(pwd)) {
|
|
67
106
|
cancel();
|
|
@@ -102,7 +141,7 @@ async function runNetworkSetup(mode) {
|
|
|
102
141
|
backend: "ollama"
|
|
103
142
|
}
|
|
104
143
|
});
|
|
105
|
-
console.log("\u2713 Configuration saved!\n");
|
|
144
|
+
console.log(cliT({ en: "\u2713 Configuration saved!\n", fr: "\u2713 Configuration enregistr\xE9e !\n" }));
|
|
106
145
|
}
|
|
107
146
|
async function runConfig(mode) {
|
|
108
147
|
const { loadGlobalConfig, getActiveProvider, getDefaultModel } = await import("./config-LOK3LXFH.js");
|
|
@@ -111,24 +150,27 @@ async function runConfig(mode) {
|
|
|
111
150
|
const configPath = getGlobalConfigPath(mode);
|
|
112
151
|
const activeProvider = getActiveProvider(config);
|
|
113
152
|
const defaultModel = getDefaultModel(config);
|
|
114
|
-
console.log(`Configuration (${mode}):`);
|
|
115
|
-
console.log(` Location: ${configPath}`);
|
|
116
|
-
console.log(
|
|
153
|
+
console.log(cliT({ en: `Configuration (${mode}):`, fr: `Configuration (${mode}) :` }));
|
|
154
|
+
console.log(cliT({ en: ` Location: ${configPath}`, fr: ` Emplacement : ${configPath}` }));
|
|
155
|
+
console.log(
|
|
156
|
+
cliT({ en: ` Providers: ${config.providers.length}`, fr: ` Fournisseurs : ${config.providers.length}` })
|
|
157
|
+
);
|
|
117
158
|
if (activeProvider) {
|
|
118
|
-
console.log(` Active: ${activeProvider.name}`);
|
|
119
|
-
console.log(` URL: ${activeProvider.url}`);
|
|
120
|
-
console.log(` Model: ${defaultModel ?? "auto"}`);
|
|
121
|
-
console.log(` Backend: ${activeProvider.backend}`);
|
|
159
|
+
console.log(cliT({ en: ` Active: ${activeProvider.name}`, fr: ` Actif : ${activeProvider.name}` }));
|
|
160
|
+
console.log(cliT({ en: ` URL: ${activeProvider.url}`, fr: ` URL : ${activeProvider.url}` }));
|
|
161
|
+
console.log(cliT({ en: ` Model: ${defaultModel ?? "auto"}`, fr: ` Mod\xE8le : ${defaultModel ?? "auto"}` }));
|
|
162
|
+
console.log(cliT({ en: ` Backend: ${activeProvider.backend}`, fr: ` Backend : ${activeProvider.backend}` }));
|
|
122
163
|
} else {
|
|
123
|
-
console.log(` Active: (none configured)`);
|
|
164
|
+
console.log(cliT({ en: ` Active: (none configured)`, fr: ` Actif : (aucun configur\xE9)` }));
|
|
124
165
|
}
|
|
125
166
|
const host = config.server.host ?? "127.0.0.1";
|
|
126
|
-
const hostDisplay = host === "0.0.0.0" ? `${host} (accessible from local network)` : `${host} (localhost only)
|
|
127
|
-
console.log(` Server: ${hostDisplay}`);
|
|
128
|
-
console.log(` Port: ${config.server.port}`);
|
|
167
|
+
const hostDisplay = host === "0.0.0.0" ? cliT({ en: `${host} (accessible from local network)`, fr: `${host} (accessible depuis le r\xE9seau local)` }) : cliT({ en: `${host} (localhost only)`, fr: `${host} (localhost uniquement)` });
|
|
168
|
+
console.log(cliT({ en: ` Server: ${hostDisplay}`, fr: ` Serveur : ${hostDisplay}` }));
|
|
169
|
+
console.log(cliT({ en: ` Port: ${config.server.port}`, fr: ` Port : ${config.server.port}` }));
|
|
129
170
|
}
|
|
130
171
|
async function runCli(options) {
|
|
131
172
|
const { mode } = options;
|
|
173
|
+
setCliMode(mode);
|
|
132
174
|
const { values, positionals } = parseArgs({
|
|
133
175
|
options: {
|
|
134
176
|
port: { type: "string", short: "p" },
|
|
@@ -165,13 +207,13 @@ async function runCli(options) {
|
|
|
165
207
|
break;
|
|
166
208
|
}
|
|
167
209
|
case "provider": {
|
|
168
|
-
const { runProviderCommand } = await import("./provider-
|
|
210
|
+
const { runProviderCommand } = await import("./provider-JWUNG2TD.js");
|
|
169
211
|
const [, subcommand] = positionals;
|
|
170
212
|
await runProviderCommand(mode, subcommand);
|
|
171
213
|
break;
|
|
172
214
|
}
|
|
173
215
|
case "service": {
|
|
174
|
-
const { runServiceCommand } = await import("./service-
|
|
216
|
+
const { runServiceCommand } = await import("./service-M77VWL2M.js");
|
|
175
217
|
const [, subcommand, ...serviceArgs] = positionals;
|
|
176
218
|
if (values.follow) {
|
|
177
219
|
serviceArgs.push("-f");
|
|
@@ -184,7 +226,7 @@ async function runCli(options) {
|
|
|
184
226
|
break;
|
|
185
227
|
}
|
|
186
228
|
case "pwa": {
|
|
187
|
-
const { runPwaCommand, printPwaHelp } = await import("./pwa-
|
|
229
|
+
const { runPwaCommand, printPwaHelp } = await import("./pwa-V5PFB4OQ.js");
|
|
188
230
|
const [, subcommand] = positionals;
|
|
189
231
|
if (subcommand === "--help" || subcommand === "-h" || values.help) {
|
|
190
232
|
printPwaHelp();
|
|
@@ -194,7 +236,7 @@ async function runCli(options) {
|
|
|
194
236
|
break;
|
|
195
237
|
}
|
|
196
238
|
case "mcp": {
|
|
197
|
-
const { runMcpCommand } = await import("./mcp-
|
|
239
|
+
const { runMcpCommand } = await import("./mcp-SQ4DOGPT.js");
|
|
198
240
|
const mcpOptions = {};
|
|
199
241
|
if (values.password) mcpOptions.password = values.password;
|
|
200
242
|
if (values.port) mcpOptions.port = parseInt(values.port);
|
|
@@ -202,7 +244,7 @@ async function runCli(options) {
|
|
|
202
244
|
break;
|
|
203
245
|
}
|
|
204
246
|
case "install": {
|
|
205
|
-
const { runInstall } = await import("./install-
|
|
247
|
+
const { runInstall } = await import("./install-AVTFA344.js");
|
|
206
248
|
const code = await runInstall({ check: values.check === true });
|
|
207
249
|
if (code !== 0) {
|
|
208
250
|
process.exit(code);
|
|
@@ -210,7 +252,7 @@ async function runCli(options) {
|
|
|
210
252
|
break;
|
|
211
253
|
}
|
|
212
254
|
case "update": {
|
|
213
|
-
const { runUpdate } = await import("./update-
|
|
255
|
+
const { runUpdate } = await import("./update-Q6SH7UP2.js");
|
|
214
256
|
const code = await runUpdate();
|
|
215
257
|
if (code !== 0) {
|
|
216
258
|
process.exit(code);
|
|
@@ -223,7 +265,7 @@ async function runCli(options) {
|
|
|
223
265
|
if (!configExists) {
|
|
224
266
|
await runNetworkSetup(mode);
|
|
225
267
|
}
|
|
226
|
-
const { runServe } = await import("./serve-
|
|
268
|
+
const { runServe } = await import("./serve-HSDVY37K.js");
|
|
227
269
|
const serveOptions = { mode };
|
|
228
270
|
if (values.port) serveOptions.port = parseInt(values.port);
|
|
229
271
|
if (values["no-browser"] === true) serveOptions.openBrowser = false;
|
|
@@ -235,4 +277,4 @@ async function runCli(options) {
|
|
|
235
277
|
export {
|
|
236
278
|
runCli
|
|
237
279
|
};
|
|
238
|
-
//# sourceMappingURL=chunk-
|
|
280
|
+
//# sourceMappingURL=chunk-MRE4OYKI.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SETTINGS_KEYS,
|
|
3
3
|
getSetting
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-CTWZPN7G.js";
|
|
5
5
|
|
|
6
6
|
// src/server/utils/platform.ts
|
|
7
7
|
import os from "os";
|
|
@@ -63,4 +63,4 @@ export {
|
|
|
63
63
|
isWindowsPath,
|
|
64
64
|
isAbsolutePath
|
|
65
65
|
};
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
//# sourceMappingURL=chunk-O3RCSKUH.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
SETTINGS_KEYS,
|
|
9
9
|
getSetting
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CTWZPN7G.js";
|
|
11
11
|
import {
|
|
12
12
|
logger
|
|
13
13
|
} from "./chunk-K44MW7JJ.js";
|
|
@@ -352,4 +352,4 @@ export {
|
|
|
352
352
|
getOverrideAgentIds,
|
|
353
353
|
resolveDefaultAgentId
|
|
354
354
|
};
|
|
355
|
-
//# sourceMappingURL=chunk-
|
|
355
|
+
//# sourceMappingURL=chunk-ORCQ3EXQ.js.map
|