openfox 1.6.75 → 1.6.77
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/README.md +18 -18
- package/dist/agent-defaults/code-reviewer.agent.md +1 -0
- package/dist/agent-defaults/explorer.agent.md +2 -1
- package/dist/agent-defaults/verifier.agent.md +4 -0
- package/dist/{ask-3RK5YJZE.js → ask-5SSOA6SZ.js} +2 -2
- package/dist/{auth-LZZX63KI.js → auth-56SIRACI.js} +3 -6
- package/dist/auto-compaction-GOHNI2R2.js +27 -0
- package/dist/{branch.api-XADFZZAA.js → branch.api-PWFW26KC.js} +2 -2
- package/dist/{chat-handler-KYMMXPP6.js → chat-handler-K2RDXBO6.js} +31 -29
- package/dist/{chunk-IA4O65CR.js → chunk-6SYNGMU4.js} +100 -68
- package/dist/{chunk-AFATQ5LJ.js → chunk-B5AP3RSV.js} +1 -1
- package/dist/{chunk-PFRQO5Z3.js → chunk-BBC46FN4.js} +61 -28
- package/dist/{chunk-22CTURMH.js → chunk-BJYPTN5S.js} +1 -1
- package/dist/{chunk-DLINTLB7.js → chunk-BSTVRSV6.js} +7 -5
- package/dist/{chunk-7JPKRM6M.js → chunk-CMQCO27Y.js} +22 -12
- package/dist/{chunk-R4HADRYO.js → chunk-CQGTEGKL.js} +1 -1
- package/dist/{chunk-J5DV33SS.js → chunk-CUDAT6SS.js} +46 -18
- package/dist/{chunk-ETIXH35K.js → chunk-EBQYRNNU.js} +535 -291
- package/dist/{chunk-4CQ7CUQ6.js → chunk-I7JVS7V5.js} +5 -5
- package/dist/{chunk-PNBH3RAX.js → chunk-K44MW7JJ.js} +1 -1
- package/dist/{chunk-BLNFJ22S.js → chunk-KIOUKC3Z.js} +6 -4
- package/dist/{chunk-CTAIXOZJ.js → chunk-NDJ6FKSP.js} +1 -1
- package/dist/{chunk-VIGOXEZG.js → chunk-OJBFC6ER.js} +15 -16
- package/dist/{chunk-GQZGIMJO.js → chunk-OXI26S7U.js} +12 -7
- package/dist/{chunk-NBU6KIOD.js → chunk-PBGOZMVY.js} +4 -4
- package/dist/{chunk-B7E3BICY.js → chunk-RGRBWDZP.js} +2 -4
- package/dist/{chunk-KFBIHS3S.js → chunk-STYHKCG7.js} +20 -14
- package/dist/{chunk-55Z3DJ7G.js → chunk-TGWEH2BC.js} +10 -11
- package/dist/{chunk-TYUNDOX2.js → chunk-UKMRZDWM.js} +90 -41
- package/dist/{chunk-5UTTLO4D.js → chunk-UVN6AKIO.js} +89 -49
- package/dist/{chunk-574HZVLE.js → chunk-VRGRAQDG.js} +2 -2
- package/dist/{chunk-JQBTYHUR.js → chunk-WR6QCJJO.js} +53 -15
- package/dist/{chunk-RBPOAAIZ.js → chunk-XKIEDGQF.js} +22 -18
- package/dist/{chunk-XIZ6B6IS.js → chunk-XSUQDB6R.js} +541 -299
- package/dist/cli/dev.js +2 -2
- package/dist/cli/index.js +2 -2
- package/dist/{config-6T4EHAP2.js → config-5CONAOL7.js} +7 -7
- package/dist/{events-LKEZ3YCW.js → events-5RIXWI5Y.js} +6 -6
- package/dist/{folding-JN2WT44N.js → folding-JNOUTI5Z.js} +2 -2
- package/dist/{inspect-proxy-Y4MRAVB7.js → inspect-proxy-Y75AXMRX.js} +3 -3
- package/dist/{manager-HM2J5VMW.js → manager-W7N3XQ4Q.js} +3 -3
- package/dist/orchestrator-TW5II347.js +43 -0
- package/dist/package.json +19 -3
- package/dist/{paths-ZRI56O63.js → paths-X46PPOI2.js} +2 -2
- package/dist/{processor-23O4HPSS.js → processor-MZ3QIUED.js} +15 -11
- package/dist/{project-creator-LASKNQPA.js → project-creator-VD7MLOWE.js} +8 -5
- package/dist/{projects-HEUOWNSR.js → projects-XLMSDFTQ.js} +4 -4
- package/dist/{protocol-5AWNGFLH.js → protocol-4CTV7OZC.js} +3 -3
- package/dist/{protocol-DRBnujwe.d.ts → protocol-4xbfAlGO.d.ts} +3 -0
- package/dist/{provider-AKN355YH.js → provider-ESEBV3LL.js} +15 -11
- package/dist/{pwa-GHQCMCIU.js → pwa-76XP2DY2.js} +2 -2
- package/dist/{runtime-config-ZCK74XKM.js → runtime-config-CBJJJGBD.js} +2 -2
- package/dist/{serve-TW63YCNQ.js → serve-FTTLGRAO.js} +29 -27
- package/dist/server/index.d.ts +6 -1
- package/dist/server/index.js +22 -22
- package/dist/server/public/__inspect__.js +163 -143
- package/dist/{service-74Z7JK2J.js → service-D6LC3CAM.js} +3 -2
- package/dist/{settings-NI4ITGV6.js → settings-TQNQB56H.js} +4 -4
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.js +2 -2
- package/dist/{store-2IF3ZSLD.js → store-OQ45KONN.js} +2 -2
- package/dist/{tools-RUAY6EVI.js → tools-QJ5K5IJP.js} +18 -18
- package/dist/{vision-fallback-AXH3BGJC.js → vision-fallback-ED27LH6C.js} +3 -3
- package/dist/web/__inspect__.js +178 -155
- package/dist/web/assets/{index-CWdKiSP8.js → index-FjLp1t6r.js} +62 -62
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +19 -3
- package/dist/auto-compaction-OW4P2QWQ.js +0 -27
- package/dist/orchestrator-QP4O7MUM.js +0 -43
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getDatabase
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KIOUKC3Z.js";
|
|
4
4
|
import {
|
|
5
5
|
buildContextMessagesFromEventHistory,
|
|
6
6
|
buildMessagesFromStoredEvents,
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
foldSessionState,
|
|
10
10
|
spreadOptionalMessageFields,
|
|
11
11
|
stripPromptContextMessages
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-BBC46FN4.js";
|
|
13
13
|
import {
|
|
14
14
|
getRuntimeConfig
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-B5AP3RSV.js";
|
|
16
16
|
import {
|
|
17
17
|
logger
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-K44MW7JJ.js";
|
|
19
19
|
|
|
20
20
|
// src/server/events/store.ts
|
|
21
21
|
function createEventIterator(state, subscriber) {
|
|
@@ -307,7 +307,7 @@ var EventStore = class {
|
|
|
307
307
|
/**
|
|
308
308
|
* Delete all events up to (and including) a given sequence number.
|
|
309
309
|
* This is used to clean up events that are now contained in a snapshot.
|
|
310
|
-
*
|
|
310
|
+
*
|
|
311
311
|
* @param sessionId - The session ID
|
|
312
312
|
* @param upToSeq - The sequence number to delete up to (inclusive)
|
|
313
313
|
* @returns The number of events deleted
|
|
@@ -322,9 +322,9 @@ var EventStore = class {
|
|
|
322
322
|
* - All snapshot events
|
|
323
323
|
* - State-changing events (criteria.set, criterion.updated, mode.changed, phase.changed, context.state, etc.)
|
|
324
324
|
* - Events after the latest snapshot (current window)
|
|
325
|
-
*
|
|
325
|
+
*
|
|
326
326
|
* This is the recommended cleanup method that preserves all snapshots and state.
|
|
327
|
-
*
|
|
327
|
+
*
|
|
328
328
|
* @param sessionId - The session ID
|
|
329
329
|
* @returns The number of events deleted
|
|
330
330
|
*/
|
|
@@ -333,7 +333,8 @@ var EventStore = class {
|
|
|
333
333
|
if (latestSnapshotSeq === 0) {
|
|
334
334
|
return 0;
|
|
335
335
|
}
|
|
336
|
-
const result = this.db.prepare(
|
|
336
|
+
const result = this.db.prepare(
|
|
337
|
+
`
|
|
337
338
|
DELETE FROM events
|
|
338
339
|
WHERE session_id = ? AND seq > 1 AND seq < ?
|
|
339
340
|
AND event_type NOT IN (
|
|
@@ -344,7 +345,8 @@ var EventStore = class {
|
|
|
344
345
|
'todo.updated',
|
|
345
346
|
'context.state'
|
|
346
347
|
)
|
|
347
|
-
`
|
|
348
|
+
`
|
|
349
|
+
).run(sessionId, latestSnapshotSeq);
|
|
348
350
|
return result.changes;
|
|
349
351
|
}
|
|
350
352
|
/**
|
|
@@ -355,7 +357,8 @@ var EventStore = class {
|
|
|
355
357
|
optimizeStorage() {
|
|
356
358
|
let deletedSnapshots = 0;
|
|
357
359
|
let strippedSnapshots = 0;
|
|
358
|
-
const deleteResult = this.db.prepare(
|
|
360
|
+
const deleteResult = this.db.prepare(
|
|
361
|
+
`
|
|
359
362
|
DELETE FROM events
|
|
360
363
|
WHERE event_type = 'turn.snapshot'
|
|
361
364
|
AND id NOT IN (
|
|
@@ -367,7 +370,8 @@ var EventStore = class {
|
|
|
367
370
|
AND e2.event_type = 'turn.snapshot'
|
|
368
371
|
)
|
|
369
372
|
)
|
|
370
|
-
`
|
|
373
|
+
`
|
|
374
|
+
).run();
|
|
371
375
|
deletedSnapshots = deleteResult.changes;
|
|
372
376
|
const snapshots = this.db.prepare(`SELECT id, payload FROM events WHERE event_type = 'turn.snapshot'`).all();
|
|
373
377
|
const updateStmt = this.db.prepare(`UPDATE events SET payload = ? WHERE id = ?`);
|
|
@@ -388,11 +392,13 @@ var EventStore = class {
|
|
|
388
392
|
* @returns The sequence number of the latest snapshot, or 0 if none
|
|
389
393
|
*/
|
|
390
394
|
getLatestSnapshotSeq(sessionId) {
|
|
391
|
-
const row = this.db.prepare(
|
|
395
|
+
const row = this.db.prepare(
|
|
396
|
+
`
|
|
392
397
|
SELECT seq FROM events
|
|
393
398
|
WHERE session_id = ? AND event_type = 'turn.snapshot'
|
|
394
399
|
ORDER BY seq DESC LIMIT 1
|
|
395
|
-
`
|
|
400
|
+
`
|
|
401
|
+
).get(sessionId);
|
|
396
402
|
return row?.seq ?? 0;
|
|
397
403
|
}
|
|
398
404
|
/**
|
|
@@ -413,11 +419,13 @@ var EventStore = class {
|
|
|
413
419
|
const snapshotMessages = latestSnapshot?.data && typeof latestSnapshot.data === "object" && "messages" in latestSnapshot.data ? latestSnapshot.data.messages : [];
|
|
414
420
|
const foldedState = foldSessionState(events, initialWindowId, 2e5, snapshotMessages);
|
|
415
421
|
const newSnapshot = buildSnapshot(foldedState, latestSeq);
|
|
416
|
-
const deleteResult = this.db.prepare(
|
|
422
|
+
const deleteResult = this.db.prepare(
|
|
423
|
+
`
|
|
417
424
|
DELETE FROM events
|
|
418
425
|
WHERE session_id = ? AND seq <= ?
|
|
419
426
|
AND event_type != 'session.initialized'
|
|
420
|
-
`
|
|
427
|
+
`
|
|
428
|
+
).run(sessionId, latestSeq);
|
|
421
429
|
const snapshotEvent = this.append(sessionId, {
|
|
422
430
|
type: "turn.snapshot",
|
|
423
431
|
data: newSnapshot
|
|
@@ -442,22 +450,28 @@ var EventStore = class {
|
|
|
442
450
|
findOrphanedSessions() {
|
|
443
451
|
const cutoff = new Date(Date.now() - 5 * 60 * 1e3).toISOString();
|
|
444
452
|
logger.debug("Looking for orphaned sessions", { cutoff });
|
|
445
|
-
const sessions = this.db.prepare(
|
|
453
|
+
const sessions = this.db.prepare(
|
|
454
|
+
`
|
|
446
455
|
SELECT id, is_running
|
|
447
456
|
FROM sessions
|
|
448
457
|
WHERE is_running = 0 AND updated_at < ?
|
|
449
|
-
`
|
|
458
|
+
`
|
|
459
|
+
).all(cutoff);
|
|
450
460
|
logger.debug("Idle sessions found", { count: sessions.length });
|
|
451
461
|
const orphaned = [];
|
|
452
462
|
for (const session of sessions) {
|
|
453
|
-
const hasSnapshot = this.db.prepare(
|
|
463
|
+
const hasSnapshot = this.db.prepare(
|
|
464
|
+
`
|
|
454
465
|
SELECT 1 FROM events WHERE session_id = ? AND event_type = 'turn.snapshot' LIMIT 1
|
|
455
|
-
`
|
|
466
|
+
`
|
|
467
|
+
).get(session.id);
|
|
456
468
|
if (hasSnapshot) {
|
|
457
469
|
const latestSnapshotSeq = this.getLatestSnapshotSeq(session.id);
|
|
458
|
-
const eventsAfter = this.db.prepare(
|
|
470
|
+
const eventsAfter = this.db.prepare(
|
|
471
|
+
`
|
|
459
472
|
SELECT 1 FROM events WHERE session_id = ? AND seq > ? LIMIT 1
|
|
460
|
-
`
|
|
473
|
+
`
|
|
474
|
+
).get(session.id, latestSnapshotSeq);
|
|
461
475
|
if (eventsAfter) {
|
|
462
476
|
orphaned.push(session.id);
|
|
463
477
|
}
|
|
@@ -502,11 +516,13 @@ function resetStaleRunningSessions(eventStore, db) {
|
|
|
502
516
|
const sessions = db.prepare(`SELECT id FROM sessions`).all();
|
|
503
517
|
let resetCount = 0;
|
|
504
518
|
for (const { id: sessionId } of sessions) {
|
|
505
|
-
const lastRunningEvent = db.prepare(
|
|
519
|
+
const lastRunningEvent = db.prepare(
|
|
520
|
+
`
|
|
506
521
|
SELECT payload FROM events
|
|
507
522
|
WHERE session_id = ? AND event_type = 'running.changed'
|
|
508
523
|
ORDER BY seq DESC LIMIT 1
|
|
509
|
-
`
|
|
524
|
+
`
|
|
525
|
+
).get(sessionId);
|
|
510
526
|
if (lastRunningEvent) {
|
|
511
527
|
const data = JSON.parse(lastRunningEvent.payload);
|
|
512
528
|
if (data.isRunning === true) {
|
|
@@ -545,10 +561,12 @@ function createSession(projectId, workdir, title, providerId, providerModel) {
|
|
|
545
561
|
const db = getDatabase();
|
|
546
562
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
547
563
|
const id = crypto.randomUUID();
|
|
548
|
-
db.prepare(
|
|
564
|
+
db.prepare(
|
|
565
|
+
`
|
|
549
566
|
INSERT INTO sessions (id, project_id, workdir, phase, mode, workflow_phase, is_running, created_at, updated_at, title, provider_id, provider_model, danger_level)
|
|
550
567
|
VALUES (?, ?, ?, 'idle', 'planner', 'plan', 0, ?, ?, ?, ?, ?, 'normal')
|
|
551
|
-
`
|
|
568
|
+
`
|
|
569
|
+
).run(id, projectId, workdir, now, now, title ?? null, providerId ?? null, providerModel ?? null);
|
|
552
570
|
return {
|
|
553
571
|
id,
|
|
554
572
|
projectId,
|
|
@@ -576,9 +594,11 @@ function createSession(projectId, workdir, title, providerId, providerModel) {
|
|
|
576
594
|
}
|
|
577
595
|
function getSession(id) {
|
|
578
596
|
const db = getDatabase();
|
|
579
|
-
const row = db.prepare(
|
|
597
|
+
const row = db.prepare(
|
|
598
|
+
`
|
|
580
599
|
SELECT * FROM sessions WHERE id = ?
|
|
581
|
-
`
|
|
600
|
+
`
|
|
601
|
+
).get(id);
|
|
582
602
|
if (!row) {
|
|
583
603
|
return null;
|
|
584
604
|
}
|
|
@@ -610,30 +630,38 @@ function getSession(id) {
|
|
|
610
630
|
function updateSessionProvider(id, providerId, providerModel) {
|
|
611
631
|
const db = getDatabase();
|
|
612
632
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
613
|
-
db.prepare(
|
|
633
|
+
db.prepare(
|
|
634
|
+
`
|
|
614
635
|
UPDATE sessions SET provider_id = ?, provider_model = ?, updated_at = ? WHERE id = ?
|
|
615
|
-
`
|
|
636
|
+
`
|
|
637
|
+
).run(providerId, providerModel, now, id);
|
|
616
638
|
}
|
|
617
639
|
function updateSessionDangerLevel(id, dangerLevel) {
|
|
618
640
|
const db = getDatabase();
|
|
619
641
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
620
|
-
db.prepare(
|
|
642
|
+
db.prepare(
|
|
643
|
+
`
|
|
621
644
|
UPDATE sessions SET danger_level = ?, updated_at = ? WHERE id = ?
|
|
622
|
-
`
|
|
645
|
+
`
|
|
646
|
+
).run(dangerLevel, now, id);
|
|
623
647
|
}
|
|
624
648
|
function updateSessionRunning(id, isRunning) {
|
|
625
649
|
const db = getDatabase();
|
|
626
650
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
627
|
-
db.prepare(
|
|
651
|
+
db.prepare(
|
|
652
|
+
`
|
|
628
653
|
UPDATE sessions SET is_running = ?, updated_at = ? WHERE id = ?
|
|
629
|
-
`
|
|
654
|
+
`
|
|
655
|
+
).run(isRunning ? 1 : 0, now, id);
|
|
630
656
|
}
|
|
631
657
|
function updateSessionSummary(id, summary) {
|
|
632
658
|
const db = getDatabase();
|
|
633
659
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
634
|
-
db.prepare(
|
|
660
|
+
db.prepare(
|
|
661
|
+
`
|
|
635
662
|
UPDATE sessions SET summary = ?, updated_at = ? WHERE id = ?
|
|
636
|
-
`
|
|
663
|
+
`
|
|
664
|
+
).run(summary, now, id);
|
|
637
665
|
}
|
|
638
666
|
function updateSessionMetadata(id, metadata) {
|
|
639
667
|
const db = getDatabase();
|
|
@@ -657,23 +685,28 @@ function updateSessionMetadata(id, metadata) {
|
|
|
657
685
|
values.push(metadata.iterationCount);
|
|
658
686
|
}
|
|
659
687
|
values.push(id);
|
|
660
|
-
db.prepare(
|
|
688
|
+
db.prepare(
|
|
689
|
+
`
|
|
661
690
|
UPDATE sessions SET ${updates.join(", ")} WHERE id = ?
|
|
662
|
-
`
|
|
691
|
+
`
|
|
692
|
+
).run(...values);
|
|
663
693
|
}
|
|
664
694
|
function updateSessionMessageCount(id, delta) {
|
|
665
695
|
try {
|
|
666
696
|
const db = getDatabase();
|
|
667
697
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
668
|
-
db.prepare(
|
|
698
|
+
db.prepare(
|
|
699
|
+
`
|
|
669
700
|
UPDATE sessions SET message_count = message_count + ?, updated_at = ? WHERE id = ?
|
|
670
|
-
`
|
|
701
|
+
`
|
|
702
|
+
).run(delta, now, id);
|
|
671
703
|
} catch {
|
|
672
704
|
}
|
|
673
705
|
}
|
|
674
706
|
function listSessions() {
|
|
675
707
|
const db = getDatabase();
|
|
676
|
-
const rows = db.prepare(
|
|
708
|
+
const rows = db.prepare(
|
|
709
|
+
`
|
|
677
710
|
SELECT
|
|
678
711
|
s.id,
|
|
679
712
|
s.project_id,
|
|
@@ -689,12 +722,14 @@ function listSessions() {
|
|
|
689
722
|
s.message_count
|
|
690
723
|
FROM sessions s
|
|
691
724
|
ORDER BY s.updated_at DESC
|
|
692
|
-
`
|
|
725
|
+
`
|
|
726
|
+
).all();
|
|
693
727
|
return rows.map(mapSessionSummaryRow);
|
|
694
728
|
}
|
|
695
729
|
function listSessionsByProject(projectId, limit = 20, offset = 0) {
|
|
696
730
|
const db = getDatabase();
|
|
697
|
-
const rows = db.prepare(
|
|
731
|
+
const rows = db.prepare(
|
|
732
|
+
`
|
|
698
733
|
SELECT
|
|
699
734
|
s.id,
|
|
700
735
|
s.project_id,
|
|
@@ -712,7 +747,8 @@ function listSessionsByProject(projectId, limit = 20, offset = 0) {
|
|
|
712
747
|
WHERE s.project_id = ?
|
|
713
748
|
ORDER BY s.updated_at DESC
|
|
714
749
|
LIMIT ? OFFSET ?
|
|
715
|
-
`
|
|
750
|
+
`
|
|
751
|
+
).all(projectId, limit + 1, offset);
|
|
716
752
|
const hasMore = rows.length > limit;
|
|
717
753
|
const sessions = rows.slice(0, limit).map(mapSessionSummaryRow);
|
|
718
754
|
return { sessions, hasMore };
|
|
@@ -1088,13 +1124,15 @@ function getRecentUserPromptsForSession(sessionId, limit = 10) {
|
|
|
1088
1124
|
}
|
|
1089
1125
|
const isRealUserMessage = (msg) => msg.role === "user" && !msg.isSystemGenerated && !msg.messageKind && !msg.subAgentType;
|
|
1090
1126
|
const promptMap = /* @__PURE__ */ new Map();
|
|
1091
|
-
const snapshotRow = db.prepare(
|
|
1127
|
+
const snapshotRow = db.prepare(
|
|
1128
|
+
`
|
|
1092
1129
|
SELECT payload, timestamp
|
|
1093
1130
|
FROM events
|
|
1094
1131
|
WHERE session_id = ? AND event_type = 'turn.snapshot'
|
|
1095
1132
|
ORDER BY timestamp DESC
|
|
1096
1133
|
LIMIT 1
|
|
1097
|
-
`
|
|
1134
|
+
`
|
|
1135
|
+
).get(sessionId);
|
|
1098
1136
|
if (snapshotRow) {
|
|
1099
1137
|
const snapshot = JSON.parse(snapshotRow.payload);
|
|
1100
1138
|
for (const msg of snapshot.messages) {
|
|
@@ -1107,7 +1145,8 @@ function getRecentUserPromptsForSession(sessionId, limit = 10) {
|
|
|
1107
1145
|
}
|
|
1108
1146
|
}
|
|
1109
1147
|
}
|
|
1110
|
-
const rows = db.prepare(
|
|
1148
|
+
const rows = db.prepare(
|
|
1149
|
+
`
|
|
1111
1150
|
SELECT payload, timestamp
|
|
1112
1151
|
FROM events
|
|
1113
1152
|
WHERE session_id = ? AND event_type = 'message.start'
|
|
@@ -1117,7 +1156,8 @@ function getRecentUserPromptsForSession(sessionId, limit = 10) {
|
|
|
1117
1156
|
AND json_extract(payload, '$.subAgentType') IS NULL
|
|
1118
1157
|
ORDER BY timestamp DESC
|
|
1119
1158
|
LIMIT ?
|
|
1120
|
-
`
|
|
1159
|
+
`
|
|
1160
|
+
).all(sessionId, limit);
|
|
1121
1161
|
for (const row of rows) {
|
|
1122
1162
|
const message = JSON.parse(row.payload);
|
|
1123
1163
|
promptMap.set(message.messageId, {
|
|
@@ -1127,7 +1167,7 @@ function getRecentUserPromptsForSession(sessionId, limit = 10) {
|
|
|
1127
1167
|
});
|
|
1128
1168
|
}
|
|
1129
1169
|
return [...promptMap.values()].sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime()).slice(0, limit);
|
|
1130
|
-
} catch
|
|
1170
|
+
} catch {
|
|
1131
1171
|
return [];
|
|
1132
1172
|
}
|
|
1133
1173
|
}
|
|
@@ -1181,4 +1221,4 @@ export {
|
|
|
1181
1221
|
compactContext,
|
|
1182
1222
|
getRecentUserPromptsForSession
|
|
1183
1223
|
};
|
|
1184
|
-
//# sourceMappingURL=chunk-
|
|
1224
|
+
//# sourceMappingURL=chunk-UVN6AKIO.js.map
|
|
@@ -120,7 +120,7 @@ function cleanupAllProcesses() {
|
|
|
120
120
|
} catch {
|
|
121
121
|
try {
|
|
122
122
|
process.kill(proc.pid, "SIGTERM");
|
|
123
|
-
} catch
|
|
123
|
+
} catch {
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -146,4 +146,4 @@ export {
|
|
|
146
146
|
getProcessById,
|
|
147
147
|
cleanupAllProcesses
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-VRGRAQDG.js.map
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
createLLMClient,
|
|
4
4
|
detectModel,
|
|
5
5
|
setLlmStatus
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TGWEH2BC.js";
|
|
7
7
|
import {
|
|
8
8
|
detectBackend,
|
|
9
9
|
getModelProfile
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-CUDAT6SS.js";
|
|
11
11
|
import {
|
|
12
12
|
logger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-K44MW7JJ.js";
|
|
14
14
|
|
|
15
15
|
// src/server/provider-manager.ts
|
|
16
16
|
function normalizeModelId(s) {
|
|
@@ -143,7 +143,10 @@ async function fetchOllamaModelsWithContext(baseUrl, _apiKey) {
|
|
|
143
143
|
}
|
|
144
144
|
return modelsWithContext;
|
|
145
145
|
} catch (error) {
|
|
146
|
-
logger.info("Error fetching Ollama models", {
|
|
146
|
+
logger.info("Error fetching Ollama models", {
|
|
147
|
+
url: baseUrl,
|
|
148
|
+
error: error instanceof Error ? error.message : String(error)
|
|
149
|
+
});
|
|
147
150
|
return [];
|
|
148
151
|
}
|
|
149
152
|
}
|
|
@@ -161,7 +164,12 @@ function createProviderManager(config) {
|
|
|
161
164
|
let defaultModelSelection = config.defaultModelSelection;
|
|
162
165
|
let llmClient = createLLMClient(config);
|
|
163
166
|
const providerStatus = /* @__PURE__ */ new Map();
|
|
164
|
-
logger.debug("ProviderManager created", {
|
|
167
|
+
logger.debug("ProviderManager created", {
|
|
168
|
+
providers: providers.map((p) => ({
|
|
169
|
+
id: p.id,
|
|
170
|
+
models: p.models.map((m) => ({ id: m.id, contextWindow: m.contextWindow, source: m.source }))
|
|
171
|
+
}))
|
|
172
|
+
});
|
|
165
173
|
for (const p of providers) {
|
|
166
174
|
providerStatus.set(p.id, "unknown");
|
|
167
175
|
}
|
|
@@ -177,6 +185,13 @@ function createProviderManager(config) {
|
|
|
177
185
|
}
|
|
178
186
|
};
|
|
179
187
|
}
|
|
188
|
+
const { providerId: activeProviderId, model: activeModel } = parseDefaultModelSelection(defaultModelSelection);
|
|
189
|
+
if (activeProviderId && activeModel) {
|
|
190
|
+
const activeProvider = providers.find((p) => p.id === activeProviderId);
|
|
191
|
+
if (activeProvider && activeProvider.apiKey) {
|
|
192
|
+
llmClient = createLLMClient(createConfigForProvider(activeProvider, activeModel));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
180
195
|
return {
|
|
181
196
|
getProviders() {
|
|
182
197
|
return [...providers];
|
|
@@ -224,12 +239,19 @@ function createProviderManager(config) {
|
|
|
224
239
|
logger.info("activateProvider fetching models", { providerId, providerName: provider.name, url, backend });
|
|
225
240
|
const modelsWithContext = await fetchModelsWithContext(url, provider.apiKey, backend);
|
|
226
241
|
const userModels = provider.models.filter((m) => m.source === "user");
|
|
227
|
-
logger.debug("activateProvider", {
|
|
242
|
+
logger.debug("activateProvider", {
|
|
243
|
+
providerId,
|
|
244
|
+
backendModelsCount: modelsWithContext.length,
|
|
245
|
+
userModelsCount: userModels.length
|
|
246
|
+
});
|
|
228
247
|
if (modelsWithContext.length > 0) {
|
|
229
248
|
const updatedModels = mergeModelsWithUserOverrides(modelsWithContext, userModels);
|
|
230
249
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: updatedModels } : p);
|
|
231
250
|
} else if (userModels.length > 0) {
|
|
232
|
-
logger.debug("Backend unavailable during provider switch, preserving user models", {
|
|
251
|
+
logger.debug("Backend unavailable during provider switch, preserving user models", {
|
|
252
|
+
providerId,
|
|
253
|
+
userModelsCount: userModels.length
|
|
254
|
+
});
|
|
233
255
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: userModels } : p);
|
|
234
256
|
}
|
|
235
257
|
if (provider.backend === "auto") {
|
|
@@ -370,7 +392,12 @@ function createProviderManager(config) {
|
|
|
370
392
|
);
|
|
371
393
|
} else {
|
|
372
394
|
providers = providers.map(
|
|
373
|
-
(p) => p.id === providerId ? {
|
|
395
|
+
(p) => p.id === providerId ? {
|
|
396
|
+
...p,
|
|
397
|
+
models: p.models.map(
|
|
398
|
+
(m, i) => i === modelIndex ? { ...m, contextWindow, source: "user" } : m
|
|
399
|
+
)
|
|
400
|
+
} : p
|
|
374
401
|
);
|
|
375
402
|
}
|
|
376
403
|
logger.info("Model context updated", { providerId, modelId, contextWindow });
|
|
@@ -392,7 +419,13 @@ function createProviderManager(config) {
|
|
|
392
419
|
modelId,
|
|
393
420
|
existing: existingModel,
|
|
394
421
|
incoming: settings,
|
|
395
|
-
final: {
|
|
422
|
+
final: {
|
|
423
|
+
temperature: finalTemp,
|
|
424
|
+
topP: finalTopP,
|
|
425
|
+
topK: finalTopK,
|
|
426
|
+
maxTokens: finalMaxTokens,
|
|
427
|
+
supportsVision: finalSupportsVision
|
|
428
|
+
}
|
|
396
429
|
});
|
|
397
430
|
const updatedModel = enrichWithProfileDefaults({
|
|
398
431
|
id: modelId,
|
|
@@ -409,9 +442,7 @@ function createProviderManager(config) {
|
|
|
409
442
|
(p) => p.id === providerId ? { ...p, models: p.models.map((m) => m.id === modelId ? updatedModel : m) } : p
|
|
410
443
|
);
|
|
411
444
|
} else {
|
|
412
|
-
providers = providers.map(
|
|
413
|
-
(p) => p.id === providerId ? { ...p, models: [...p.models, updatedModel] } : p
|
|
414
|
-
);
|
|
445
|
+
providers = providers.map((p) => p.id === providerId ? { ...p, models: [...p.models, updatedModel] } : p);
|
|
415
446
|
}
|
|
416
447
|
logger.info("Model settings updated", { providerId, modelId, final: updatedModel });
|
|
417
448
|
return { success: true, model: updatedModel };
|
|
@@ -438,11 +469,18 @@ function createProviderManager(config) {
|
|
|
438
469
|
logger.info("refreshProviderModels fetching models", { providerId, providerName: provider.name, url, backend });
|
|
439
470
|
const modelsWithContext = await fetchModelsWithContext(url, provider.apiKey, backend);
|
|
440
471
|
const userModels = provider.models.filter((m) => m.source === "user");
|
|
441
|
-
logger.info("refreshProviderModels", {
|
|
472
|
+
logger.info("refreshProviderModels", {
|
|
473
|
+
providerId,
|
|
474
|
+
userModelsCount: userModels.length,
|
|
475
|
+
backendModelsCount: modelsWithContext.length
|
|
476
|
+
});
|
|
442
477
|
if (modelsWithContext.length === 0) {
|
|
443
478
|
setLlmStatus("disconnected");
|
|
444
479
|
if (userModels.length > 0) {
|
|
445
|
-
logger.debug("Backend unavailable, preserving user models", {
|
|
480
|
+
logger.debug("Backend unavailable, preserving user models", {
|
|
481
|
+
providerId,
|
|
482
|
+
userModels: userModels.map((m) => ({ id: m.id, contextWindow: m.contextWindow }))
|
|
483
|
+
});
|
|
446
484
|
providers = providers.map((p) => p.id === providerId ? { ...p, models: userModels } : p);
|
|
447
485
|
return { success: true };
|
|
448
486
|
}
|
|
@@ -471,4 +509,4 @@ export {
|
|
|
471
509
|
parseDefaultModelSelection,
|
|
472
510
|
createProviderManager
|
|
473
511
|
};
|
|
474
|
-
//# sourceMappingURL=chunk-
|
|
512
|
+
//# sourceMappingURL=chunk-WR6QCJJO.js.map
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import {
|
|
2
2
|
logger
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K44MW7JJ.js";
|
|
4
4
|
|
|
5
5
|
// src/server/dev-server/inspect-proxy.ts
|
|
6
6
|
import net from "net";
|
|
7
7
|
import zlib from "zlib";
|
|
8
8
|
var OPENFOX_BASE_PORT = Number(process.env["OPENFOX_PORT"] ?? 10369);
|
|
9
9
|
var INJECT_SCRIPT = `<script src="http://127.0.0.1:${OPENFOX_BASE_PORT}/__inspect__.js"></script>`;
|
|
10
|
+
function buildHttpHeaders(resHeaders, status, contentLengthOverride, contentTypeOverride) {
|
|
11
|
+
const newH = { ...resHeaders };
|
|
12
|
+
delete newH["content-length"];
|
|
13
|
+
delete newH["transfer-encoding"];
|
|
14
|
+
newH["connection"] = "close";
|
|
15
|
+
if (contentLengthOverride !== void 0) newH["content-length"] = contentLengthOverride.toString();
|
|
16
|
+
if (contentTypeOverride !== void 0) newH["content-type"] = contentTypeOverride;
|
|
17
|
+
return `HTTP/1.1 ${status} OK\r
|
|
18
|
+
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
19
|
+
}
|
|
10
20
|
var proxyPool = /* @__PURE__ */ new Map();
|
|
11
21
|
var nextOffset = 0;
|
|
12
22
|
function getAvailablePort() {
|
|
@@ -118,7 +128,9 @@ ${annotation || "(none)"}`;
|
|
|
118
128
|
}
|
|
119
129
|
client.write(buildResponse(200, { "Content-Type": "application/json" }, Buffer.from('{"success":true}')));
|
|
120
130
|
} catch {
|
|
121
|
-
client.write(
|
|
131
|
+
client.write(
|
|
132
|
+
buildResponse(400, { "Content-Type": "application/json" }, Buffer.from('{"error":"Invalid request"}'))
|
|
133
|
+
);
|
|
122
134
|
}
|
|
123
135
|
client.end();
|
|
124
136
|
};
|
|
@@ -163,7 +175,7 @@ ${annotation || "(none)"}`;
|
|
|
163
175
|
let enc = null;
|
|
164
176
|
let status = 200;
|
|
165
177
|
let resHeaders = {};
|
|
166
|
-
|
|
178
|
+
const bodyBuf = [];
|
|
167
179
|
let headEnd = -1;
|
|
168
180
|
targetSocket.on("data", (sChunk) => {
|
|
169
181
|
if (!serverParsed) {
|
|
@@ -232,11 +244,7 @@ ${annotation || "(none)"}`;
|
|
|
232
244
|
if (enc === "gzip") compressed = zlib.gzipSync(Buffer.from(modified, "utf8"));
|
|
233
245
|
else if (enc === "deflate") compressed = zlib.deflateSync(Buffer.from(modified, "utf8"));
|
|
234
246
|
else compressed = Buffer.from(modified, "utf8");
|
|
235
|
-
const
|
|
236
|
-
delete newH["content-length"];
|
|
237
|
-
newH["connection"] = "close";
|
|
238
|
-
const headStr = `HTTP/1.1 ${status} OK\r
|
|
239
|
-
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
247
|
+
const headStr = buildHttpHeaders(resHeaders, status);
|
|
240
248
|
client.write(Buffer.from(headStr, "utf8"));
|
|
241
249
|
client.write(compressed);
|
|
242
250
|
} else if (isHtml && bodyBuf.length > 0) {
|
|
@@ -246,19 +254,15 @@ ${annotation || "(none)"}`;
|
|
|
246
254
|
const bi = dechunks.indexOf("</body>");
|
|
247
255
|
const hi = dechunks.indexOf("</head>");
|
|
248
256
|
let modified;
|
|
249
|
-
if (bi >= 0)
|
|
250
|
-
|
|
257
|
+
if (bi >= 0)
|
|
258
|
+
modified = Buffer.concat([dechunks.slice(0, bi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(bi)]);
|
|
259
|
+
else if (hi >= 0)
|
|
260
|
+
modified = Buffer.concat([dechunks.slice(0, hi), Buffer.from(INJECT_SCRIPT, "utf8"), dechunks.slice(hi)]);
|
|
251
261
|
else {
|
|
252
262
|
client.end();
|
|
253
263
|
return;
|
|
254
264
|
}
|
|
255
|
-
const
|
|
256
|
-
delete newH["content-length"];
|
|
257
|
-
delete newH["transfer-encoding"];
|
|
258
|
-
newH["connection"] = "close";
|
|
259
|
-
newH["content-length"] = Buffer.byteLength(modified).toString();
|
|
260
|
-
const headStr = `HTTP/1.1 ${status} OK\r
|
|
261
|
-
` + Object.entries(newH).map(([k, v]) => `${k}: ${v}`).join("\r\n") + "\r\n\r\n";
|
|
265
|
+
const headStr = buildHttpHeaders(resHeaders, status, Buffer.byteLength(modified), "text/html; charset=utf-8");
|
|
262
266
|
client.write(Buffer.from(headStr, "utf8"));
|
|
263
267
|
client.write(modified);
|
|
264
268
|
}
|
|
@@ -290,4 +294,4 @@ export {
|
|
|
290
294
|
startInspectProxy,
|
|
291
295
|
stopAllInspectProxies
|
|
292
296
|
};
|
|
293
|
-
//# sourceMappingURL=chunk-
|
|
297
|
+
//# sourceMappingURL=chunk-XKIEDGQF.js.map
|