@jait/gateway 0.1.523 → 0.1.525
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/routes/chat.d.ts.map +1 -1
- package/dist/routes/chat.js +77 -9
- package/dist/routes/chat.js.map +1 -1
- package/package.json +1 -1
- package/web-dist/assets/{_basePickBy-CW9dv5ES.js → _basePickBy-C7ckq97M.js} +1 -1
- package/web-dist/assets/{_baseUniq-tp2rQJt2.js → _baseUniq-DvlwY7QV.js} +1 -1
- package/web-dist/assets/{arc-DEK1BP15.js → arc-BLGG6bBw.js} +1 -1
- package/web-dist/assets/{architectureDiagram-2XIMDMQ5-CdjTPRoF.js → architectureDiagram-2XIMDMQ5-Ch7zpRWA.js} +1 -1
- package/web-dist/assets/{blockDiagram-WCTKOSBZ-C3ekyg97.js → blockDiagram-WCTKOSBZ-DlZxHglt.js} +1 -1
- package/web-dist/assets/{c4Diagram-IC4MRINW-BqfK0yKj.js → c4Diagram-IC4MRINW-CzuYrFfZ.js} +1 -1
- package/web-dist/assets/channel-h72nG4iP.js +1 -0
- package/web-dist/assets/{chunk-4BX2VUAB-BwqjSlOe.js → chunk-4BX2VUAB-BAdG87Bf.js} +1 -1
- package/web-dist/assets/{chunk-55IACEB6-BvpAtX8G.js → chunk-55IACEB6-BvmyQSvl.js} +1 -1
- package/web-dist/assets/{chunk-FMBD7UC4-DHPDc_A7.js → chunk-FMBD7UC4-Djpd-gX6.js} +1 -1
- package/web-dist/assets/{chunk-JSJVCQXG-D7EcoHYg.js → chunk-JSJVCQXG-D97foLYA.js} +1 -1
- package/web-dist/assets/{chunk-KX2RTZJC-BbWn98p_.js → chunk-KX2RTZJC-CYeo_WwF.js} +1 -1
- package/web-dist/assets/{chunk-NQ4KR5QH-Dpd9TE5c.js → chunk-NQ4KR5QH-Cm7a7fP7.js} +1 -1
- package/web-dist/assets/{chunk-QZHKN3VN-DT-Co28q.js → chunk-QZHKN3VN-CWE7XCmH.js} +1 -1
- package/web-dist/assets/{chunk-WL4C6EOR-D-DE9wFf.js → chunk-WL4C6EOR-BHm-lDSQ.js} +1 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-ByyKM7U_.js +1 -0
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-ByyKM7U_.js +1 -0
- package/web-dist/assets/clone-CJoHZWnP.js +1 -0
- package/web-dist/assets/{cose-bilkent-S5V4N54A-CRwLCwSr.js → cose-bilkent-S5V4N54A-DOEjmvfR.js} +1 -1
- package/web-dist/assets/{dagre-KLK3FWXG-BpSL1_V3.js → dagre-KLK3FWXG-rUbCH7u_.js} +1 -1
- package/web-dist/assets/{diagram-E7M64L7V-BPNenbRk.js → diagram-E7M64L7V-B5meCwLF.js} +1 -1
- package/web-dist/assets/{diagram-IFDJBPK2-C1riLTjY.js → diagram-IFDJBPK2-CBcwaGxy.js} +1 -1
- package/web-dist/assets/{diagram-P4PSJMXO-BPJEdHYa.js → diagram-P4PSJMXO-BFeIFvoJ.js} +1 -1
- package/web-dist/assets/{erDiagram-INFDFZHY-BQ0pwW28.js → erDiagram-INFDFZHY-CuQso3oV.js} +1 -1
- package/web-dist/assets/{flowDiagram-PKNHOUZH-BijsABcb.js → flowDiagram-PKNHOUZH-CyqBTzaW.js} +1 -1
- package/web-dist/assets/{ganttDiagram-A5KZAMGK-DLuiiYZx.js → ganttDiagram-A5KZAMGK-D63yMO49.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-BjPYgV0b.js → gitGraphDiagram-K3NZZRJ6-B9fjyi9M.js} +1 -1
- package/web-dist/assets/{graph-BXTtfw1y.js → graph-BhyHBihp.js} +1 -1
- package/web-dist/assets/{index-C1q9tEIz.js → index-7UqiZrUH.js} +1 -1
- package/web-dist/assets/{index-DXvTPdDZ.js → index-DD7-8gYQ.js} +1 -1
- package/web-dist/assets/{index-Dh3lB4TR.js → index-DPzm2c9C.js} +355 -355
- package/web-dist/assets/{infoDiagram-LFFYTUFH-BPI6JiOe.js → infoDiagram-LFFYTUFH-J8J84Ke2.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-PHBUUO56-ChBxWr2r.js → ishikawaDiagram-PHBUUO56-Kc6I_c2W.js} +1 -1
- package/web-dist/assets/{journeyDiagram-4ABVD52K-CgDXH0jG.js → journeyDiagram-4ABVD52K-BqcoW97Y.js} +1 -1
- package/web-dist/assets/{kanban-definition-K7BYSVSG-BFX4ySJM.js → kanban-definition-K7BYSVSG-B0xDfj9_.js} +1 -1
- package/web-dist/assets/{layout-BUNIQkZV.js → layout-DKpSc8R9.js} +1 -1
- package/web-dist/assets/{linear-B4OhYQY5.js → linear-DEDM5mHu.js} +1 -1
- package/web-dist/assets/{mindmap-definition-YRQLILUH-Q3ZC0HBk.js → mindmap-definition-YRQLILUH-Dq_UQEj_.js} +1 -1
- package/web-dist/assets/{pieDiagram-SKSYHLDU-9s_jG4k9.js → pieDiagram-SKSYHLDU-CiG4Pgow.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-337W2JSQ-z3RbjEye.js → quadrantDiagram-337W2JSQ-C8xkyIK8.js} +1 -1
- package/web-dist/assets/{requirementDiagram-Z7DCOOCP-DVMoP5dw.js → requirementDiagram-Z7DCOOCP-BZcdIg4-.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-CTEbEhQm.js → sankeyDiagram-WA2Y5GQK-DcoeT76j.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-2WXFIKYE-BuLuz-ok.js → sequenceDiagram-2WXFIKYE-D66yA6zT.js} +1 -1
- package/web-dist/assets/{stateDiagram-RAJIS63D-DQKos8Yr.js → stateDiagram-RAJIS63D-CzfgY1F2.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-MqlPXvcl.js +1 -0
- package/web-dist/assets/{timeline-definition-YZTLITO2-DtU9nDNV.js → timeline-definition-YZTLITO2-KIZP3QL_.js} +1 -1
- package/web-dist/assets/{treemap-KZPCXAKY-I0pjr5h7.js → treemap-KZPCXAKY-KF3XEEXy.js} +1 -1
- package/web-dist/assets/{vennDiagram-LZ73GAT5-5BVW3qLc.js → vennDiagram-LZ73GAT5-B3FHWAhp.js} +1 -1
- package/web-dist/assets/{xychartDiagram-JWTSCODW-4-loE604.js → xychartDiagram-JWTSCODW-7IR8h6he.js} +1 -1
- package/web-dist/index.html +1 -1
- package/web-dist/assets/channel-DQCq4O2o.js +0 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-D7z1tpoQ.js +0 -1
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-D7z1tpoQ.js +0 -1
- package/web-dist/assets/clone-B5ePMUXA.js +0 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-ZxCbDvKy.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAe,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgCjE,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAgGvF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBrE;AAyED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE3D;AAqbD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyCtF;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/routes/chat.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAe,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgCjE,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAgGvF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmBrE;AAyED,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE3D;AAqbD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAyCtF;AA+hBD,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;IAClD,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KACtD,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,EACjC,iBAAiB,CAAC,EAAE,cAAc,QAyiEnC"}
|
package/dist/routes/chat.js
CHANGED
|
@@ -768,16 +768,26 @@ function rowToUIMsg(sessionId, row, visibleIndex) {
|
|
|
768
768
|
msg.thinking = row.thinking;
|
|
769
769
|
}
|
|
770
770
|
if (row.contextFlow) {
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
}
|
|
777
|
-
catch { /* ignore */ }
|
|
771
|
+
// Lightweight badges instead of parsing the (potentially multi-MB)
|
|
772
|
+
// context_flow JSON. The frontend lazy-loads the full payload on demand
|
|
773
|
+
// via GET /api/sessions/:sessionId/messages/:index/context-flow.
|
|
774
|
+
msg.hasContextFlow = true;
|
|
775
|
+
msg.hasMemoryProvenance = hasMemoryProvenanceInContextFlow(row.contextFlow);
|
|
778
776
|
}
|
|
779
777
|
return msg;
|
|
780
778
|
}
|
|
779
|
+
/**
|
|
780
|
+
* Quick peek at the start of a context_flow JSON string to determine whether
|
|
781
|
+
* it contains injected memories — without parsing the entire (huge) blob.
|
|
782
|
+
* The `memory` object is near the top of the serialized shape, so checking the
|
|
783
|
+
* first ~2 KB is sufficient.
|
|
784
|
+
*/
|
|
785
|
+
function hasMemoryProvenanceInContextFlow(json) {
|
|
786
|
+
if (!json || json.length < 20)
|
|
787
|
+
return false;
|
|
788
|
+
const head = json.slice(0, 2048);
|
|
789
|
+
return head.includes('"memory"') && head.includes('"injectedIds"') && head.includes('[');
|
|
790
|
+
}
|
|
781
791
|
function persistedMessageWindow(db, sessionId, limit, before) {
|
|
782
792
|
const totalRow = db
|
|
783
793
|
.select({ count: sql `count(*)` })
|
|
@@ -852,7 +862,10 @@ function buildVisibleHistoryMessages(sessionId, history, options) {
|
|
|
852
862
|
content,
|
|
853
863
|
toolCalls,
|
|
854
864
|
segments,
|
|
855
|
-
contextFlow
|
|
865
|
+
// Strip the (potentially multi-MB) contextFlow from the snapshot. The
|
|
866
|
+
// frontend lazy-loads it on demand via the context-flow endpoint.
|
|
867
|
+
...(contextFlow ? { hasContextFlow: true } : {}),
|
|
868
|
+
...(contextFlow?.memory && contextFlow.memory.injectedIds.length > 0 ? { hasMemoryProvenance: true } : {}),
|
|
856
869
|
thinking,
|
|
857
870
|
}));
|
|
858
871
|
// If there is a live streaming accumulator for this session, inject a
|
|
@@ -876,7 +889,6 @@ function buildVisibleHistoryMessages(sessionId, history, options) {
|
|
|
876
889
|
content: acc.content,
|
|
877
890
|
toolCalls: acc.toolCalls.length > 0 ? mapPersistedToolCallsForUI(acc.toolCalls) : undefined,
|
|
878
891
|
segments: acc.segments.length > 0 ? acc.segments : undefined,
|
|
879
|
-
contextFlow: undefined,
|
|
880
892
|
thinking: acc.thinking || undefined,
|
|
881
893
|
});
|
|
882
894
|
}
|
|
@@ -2456,6 +2468,62 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
2456
2468
|
messages: windowed.messages,
|
|
2457
2469
|
};
|
|
2458
2470
|
});
|
|
2471
|
+
// ── GET /api/sessions/:sessionId/messages/:index/context-flow ─────────
|
|
2472
|
+
// Lazy-load the full contextFlow JSON for a single message. The snapshot /
|
|
2473
|
+
// messages endpoints only return lightweight `hasContextFlow` /
|
|
2474
|
+
// `hasMemoryProvenance` badges; the (potentially multi-MB) payload is
|
|
2475
|
+
// fetched here only when the user opens the LLM-context dialog.
|
|
2476
|
+
app.get("/api/sessions/:sessionId/messages/:messageIndex/context-flow", async (request, reply) => {
|
|
2477
|
+
const authUser = await requireAuth(request, reply, config.jwtSecret);
|
|
2478
|
+
if (!authUser)
|
|
2479
|
+
return;
|
|
2480
|
+
const { sessionId, messageIndex } = request.params;
|
|
2481
|
+
if (sessionService) {
|
|
2482
|
+
const session = sessionService.getById(sessionId, authUser.id);
|
|
2483
|
+
if (!session) {
|
|
2484
|
+
return reply.status(404).send({ error: "NOT_FOUND", details: "Session not found" });
|
|
2485
|
+
}
|
|
2486
|
+
}
|
|
2487
|
+
const index = Number.parseInt(messageIndex, 10);
|
|
2488
|
+
if (!Number.isFinite(index) || index < 0) {
|
|
2489
|
+
return reply.status(400).send({ error: "VALIDATION_ERROR", details: "messageIndex must be a non-negative integer" });
|
|
2490
|
+
}
|
|
2491
|
+
// For active streams, the in-memory history has the live contextFlow
|
|
2492
|
+
// attached (and the DB row may not be persisted yet). Otherwise read
|
|
2493
|
+
// directly from the DB to avoid hydrating the full session.
|
|
2494
|
+
const isStreaming = activeStreams.has(sessionId);
|
|
2495
|
+
if (isStreaming || !db) {
|
|
2496
|
+
hydrateSession(sessionId);
|
|
2497
|
+
const history = sessionHistory.get(sessionId) ?? [];
|
|
2498
|
+
const visible = buildVisibleHistoryEntries(sessionId, history, { includePendingAssistantToolCalls: isStreaming });
|
|
2499
|
+
const entry = visible[index];
|
|
2500
|
+
if (!entry)
|
|
2501
|
+
return reply.status(404).send({ error: "NOT_FOUND", details: "Message not found" });
|
|
2502
|
+
return { contextFlow: entry.contextFlow ?? null };
|
|
2503
|
+
}
|
|
2504
|
+
// DB path: fetch rows in the same order the messages endpoint returns them
|
|
2505
|
+
// (ordered by createdAt, id), then resolve the visible index.
|
|
2506
|
+
const rows = db
|
|
2507
|
+
.select({ contextFlow: messagesTable.contextFlow, role: messagesTable.role, content: messagesTable.content, toolCalls: messagesTable.toolCalls })
|
|
2508
|
+
.from(messagesTable)
|
|
2509
|
+
.where(eq(messagesTable.sessionId, sessionId))
|
|
2510
|
+
.orderBy(messagesTable.createdAt, messagesTable.id)
|
|
2511
|
+
.all();
|
|
2512
|
+
const visibleRows = rows.filter((r) => !(r.role === "assistant" && !r.content && !r.toolCalls));
|
|
2513
|
+
const row = visibleRows[index];
|
|
2514
|
+
if (!row)
|
|
2515
|
+
return reply.status(404).send({ error: "NOT_FOUND", details: "Message not found" });
|
|
2516
|
+
if (!row.contextFlow)
|
|
2517
|
+
return { contextFlow: null };
|
|
2518
|
+
try {
|
|
2519
|
+
const parsed = JSON.parse(row.contextFlow);
|
|
2520
|
+
if (parsed && typeof parsed === "object" && Array.isArray(parsed.rounds)) {
|
|
2521
|
+
return { contextFlow: parsed };
|
|
2522
|
+
}
|
|
2523
|
+
}
|
|
2524
|
+
catch { /* fall through to null */ }
|
|
2525
|
+
return { contextFlow: null };
|
|
2526
|
+
});
|
|
2459
2527
|
// SSE stream-resume: join an in-progress session's token stream
|
|
2460
2528
|
// Client receives a snapshot of current content, then live tokens until done.
|
|
2461
2529
|
app.get("/api/sessions/:sessionId/stream", async (request, reply) => {
|