@jait/gateway 0.1.520 → 0.1.522

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.
Files changed (93) hide show
  1. package/dist/channels/manager.d.ts +2 -0
  2. package/dist/channels/manager.d.ts.map +1 -1
  3. package/dist/channels/manager.js +1 -1
  4. package/dist/channels/manager.js.map +1 -1
  5. package/dist/db/connection.d.ts.map +1 -1
  6. package/dist/db/connection.js +1 -0
  7. package/dist/db/connection.js.map +1 -1
  8. package/dist/db/migrations.d.ts.map +1 -1
  9. package/dist/db/migrations.js +11 -0
  10. package/dist/db/migrations.js.map +1 -1
  11. package/dist/db/schema.d.ts +19 -0
  12. package/dist/db/schema.d.ts.map +1 -1
  13. package/dist/db/schema.js +1 -0
  14. package/dist/db/schema.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/providers/jait-provider.js +5 -5
  19. package/dist/providers/jait-provider.js.map +1 -1
  20. package/dist/providers/model-fetchers.d.ts +6 -0
  21. package/dist/providers/model-fetchers.d.ts.map +1 -1
  22. package/dist/providers/model-fetchers.js +29 -0
  23. package/dist/providers/model-fetchers.js.map +1 -1
  24. package/dist/routes/auth.d.ts.map +1 -1
  25. package/dist/routes/auth.js +10 -0
  26. package/dist/routes/auth.js.map +1 -1
  27. package/dist/routes/chat.d.ts.map +1 -1
  28. package/dist/routes/chat.js +38 -0
  29. package/dist/routes/chat.js.map +1 -1
  30. package/dist/services/users.d.ts +5 -0
  31. package/dist/services/users.d.ts.map +1 -1
  32. package/dist/services/users.js +8 -0
  33. package/dist/services/users.js.map +1 -1
  34. package/dist/tools/agent-loop.d.ts +1 -0
  35. package/dist/tools/agent-loop.d.ts.map +1 -1
  36. package/dist/tools/agent-loop.js +6 -0
  37. package/dist/tools/agent-loop.js.map +1 -1
  38. package/package.json +1 -1
  39. package/web-dist/assets/{_basePickBy-D97xdOAU.js → _basePickBy--DxX5TCG.js} +1 -1
  40. package/web-dist/assets/{_baseUniq-WW7JAj1l.js → _baseUniq-BdzySWUN.js} +1 -1
  41. package/web-dist/assets/{arc-3mhc1c6Z.js → arc-BbaIVFkf.js} +1 -1
  42. package/web-dist/assets/{architectureDiagram-2XIMDMQ5-BNi--qrb.js → architectureDiagram-2XIMDMQ5-DpJu2lRb.js} +1 -1
  43. package/web-dist/assets/{blockDiagram-WCTKOSBZ-GRQWMiTX.js → blockDiagram-WCTKOSBZ-C1lxwyQH.js} +1 -1
  44. package/web-dist/assets/{c4Diagram-IC4MRINW-C42ZAGzO.js → c4Diagram-IC4MRINW-Cb7wImJW.js} +1 -1
  45. package/web-dist/assets/channel-BpFm6ugS.js +1 -0
  46. package/web-dist/assets/{chunk-4BX2VUAB-DBagJPoH.js → chunk-4BX2VUAB-B84uYDQp.js} +1 -1
  47. package/web-dist/assets/{chunk-55IACEB6-Bb2d5l7K.js → chunk-55IACEB6-DX_hxQVe.js} +1 -1
  48. package/web-dist/assets/{chunk-FMBD7UC4-CS4028UO.js → chunk-FMBD7UC4-Bj7pSopv.js} +1 -1
  49. package/web-dist/assets/{chunk-JSJVCQXG-pEPkRBug.js → chunk-JSJVCQXG-BabDGnL3.js} +1 -1
  50. package/web-dist/assets/{chunk-KX2RTZJC-DPZPReEB.js → chunk-KX2RTZJC-ugM9Ht1d.js} +1 -1
  51. package/web-dist/assets/{chunk-NQ4KR5QH-CxkV1_9p.js → chunk-NQ4KR5QH-BnWBk10T.js} +1 -1
  52. package/web-dist/assets/{chunk-QZHKN3VN-CwRRfkgR.js → chunk-QZHKN3VN-CF2PD9Ab.js} +1 -1
  53. package/web-dist/assets/{chunk-WL4C6EOR-fFqRBlWe.js → chunk-WL4C6EOR-C4gfdYgP.js} +1 -1
  54. package/web-dist/assets/classDiagram-VBA2DB6C-CBc45QrJ.js +1 -0
  55. package/web-dist/assets/classDiagram-v2-RAHNMMFH-CBc45QrJ.js +1 -0
  56. package/web-dist/assets/clone-pC-usfRE.js +1 -0
  57. package/web-dist/assets/{cose-bilkent-S5V4N54A-DN3v9QU8.js → cose-bilkent-S5V4N54A-CDW-Ck7k.js} +1 -1
  58. package/web-dist/assets/{dagre-KLK3FWXG-MbLMo82j.js → dagre-KLK3FWXG-zFN0atQ7.js} +1 -1
  59. package/web-dist/assets/{diagram-E7M64L7V--9bssKST.js → diagram-E7M64L7V-BIEGNbpN.js} +1 -1
  60. package/web-dist/assets/{diagram-IFDJBPK2-6cDHg5fI.js → diagram-IFDJBPK2-C9VziJ3R.js} +1 -1
  61. package/web-dist/assets/{diagram-P4PSJMXO-CnppAHOs.js → diagram-P4PSJMXO-BLEFoxNj.js} +1 -1
  62. package/web-dist/assets/{erDiagram-INFDFZHY-TLp6z50h.js → erDiagram-INFDFZHY-nO923lHe.js} +1 -1
  63. package/web-dist/assets/{flowDiagram-PKNHOUZH-DWGC6P2V.js → flowDiagram-PKNHOUZH-CUPAqDXT.js} +1 -1
  64. package/web-dist/assets/{ganttDiagram-A5KZAMGK-xRTztCVN.js → ganttDiagram-A5KZAMGK-MphMQ0fw.js} +1 -1
  65. package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-C71gFMh3.js → gitGraphDiagram-K3NZZRJ6-CBBis1j4.js} +1 -1
  66. package/web-dist/assets/{graph-llADkI2L.js → graph-DuJvZz7l.js} +1 -1
  67. package/web-dist/assets/{index-CdADtvED.js → index-Bm8MgY2H.js} +1 -1
  68. package/web-dist/assets/{index-DF1xQK9v.js → index-DkliEn-M.js} +255 -255
  69. package/web-dist/assets/{index-qskLMmip.js → index-Ui1TnMQG.js} +1 -1
  70. package/web-dist/assets/{infoDiagram-LFFYTUFH-4auIkcGV.js → infoDiagram-LFFYTUFH-BsQpK4JI.js} +1 -1
  71. package/web-dist/assets/{ishikawaDiagram-PHBUUO56-QNl96mQj.js → ishikawaDiagram-PHBUUO56-DA_p-0vP.js} +1 -1
  72. package/web-dist/assets/{journeyDiagram-4ABVD52K-CRkJoa9h.js → journeyDiagram-4ABVD52K-79DZWOI4.js} +1 -1
  73. package/web-dist/assets/{kanban-definition-K7BYSVSG-Bfoj75nt.js → kanban-definition-K7BYSVSG-BPY9bj2Q.js} +1 -1
  74. package/web-dist/assets/{layout-ZxnBXXOL.js → layout-f6Q96A7h.js} +1 -1
  75. package/web-dist/assets/{linear-BkTIMqg7.js → linear-DtciIsOj.js} +1 -1
  76. package/web-dist/assets/{mindmap-definition-YRQLILUH-2y6NaKAS.js → mindmap-definition-YRQLILUH-ZiwbjSmh.js} +1 -1
  77. package/web-dist/assets/{pieDiagram-SKSYHLDU-C7mUVJbX.js → pieDiagram-SKSYHLDU-CPVnDl9k.js} +1 -1
  78. package/web-dist/assets/{quadrantDiagram-337W2JSQ-CdZLSE27.js → quadrantDiagram-337W2JSQ-JArycW7f.js} +1 -1
  79. package/web-dist/assets/{requirementDiagram-Z7DCOOCP-D1ICfZ5y.js → requirementDiagram-Z7DCOOCP-4xf2atx4.js} +1 -1
  80. package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-B5xjy5zy.js → sankeyDiagram-WA2Y5GQK-DaZwFByE.js} +1 -1
  81. package/web-dist/assets/{sequenceDiagram-2WXFIKYE-rUHHa6Ef.js → sequenceDiagram-2WXFIKYE-DZ6aG0T1.js} +1 -1
  82. package/web-dist/assets/{stateDiagram-RAJIS63D-B0snaZqf.js → stateDiagram-RAJIS63D-5Gds6_tN.js} +1 -1
  83. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-leQk59Lj.js +1 -0
  84. package/web-dist/assets/{timeline-definition-YZTLITO2-YTe8muSH.js → timeline-definition-YZTLITO2-DXEwc2PD.js} +1 -1
  85. package/web-dist/assets/{treemap-KZPCXAKY-BaJ0_K6k.js → treemap-KZPCXAKY-BH6x89yr.js} +1 -1
  86. package/web-dist/assets/{vennDiagram-LZ73GAT5-Clg7FJSd.js → vennDiagram-LZ73GAT5-C6IodL6O.js} +1 -1
  87. package/web-dist/assets/{xychartDiagram-JWTSCODW-CN5F0XWs.js → xychartDiagram-JWTSCODW-DQHs6YeB.js} +1 -1
  88. package/web-dist/index.html +1 -1
  89. package/web-dist/assets/channel-C8_OwGkq.js +0 -1
  90. package/web-dist/assets/classDiagram-VBA2DB6C-C78vWo8s.js +0 -1
  91. package/web-dist/assets/classDiagram-v2-RAHNMMFH-C78vWo8s.js +0 -1
  92. package/web-dist/assets/clone-Cyv8PlV4.js +0 -1
  93. package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BYlXc09O.js +0 -1
@@ -1342,6 +1342,9 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
1342
1342
  "Content-Type": "text/event-stream",
1343
1343
  "Cache-Control": "no-cache",
1344
1344
  Connection: "keep-alive",
1345
+ // Prevent reverse proxies (nginx etc.) from buffering the SSE stream,
1346
+ // which would otherwise swallow chunks and let the connection time out.
1347
+ "X-Accel-Buffering": "no",
1345
1348
  "Access-Control-Allow-Origin": reqOrigin,
1346
1349
  "Access-Control-Allow-Credentials": "true",
1347
1350
  });
@@ -1463,6 +1466,21 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
1463
1466
  }
1464
1467
  }
1465
1468
  };
1469
+ // ── SSE keepalive heartbeat ──
1470
+ // While the agentic loop runs a long tool or waits for a slow LLM response,
1471
+ // no SSE data events are emitted and the connection can go idle for tens of
1472
+ // seconds. Browsers and reverse proxies then close the socket, surfacing as
1473
+ // "fetch failed" on the frontend and dropping the in-progress assistant
1474
+ // message. Emit an SSE comment (": keepalive\n\n") every 15s — comments are
1475
+ // ignored by the EventSource/reader parser but keep the TCP connection alive.
1476
+ const keepalive = setInterval(() => {
1477
+ if (clientDisconnected) {
1478
+ clearInterval(keepalive);
1479
+ return;
1480
+ }
1481
+ safeWrite(`: keepalive\n\n`);
1482
+ }, 15_000);
1483
+ reply.raw.on("close", () => { clearInterval(keepalive); });
1466
1484
  const matchedSkillIds = new Set(matchSkills(content, promptCtx.skills ?? []));
1467
1485
  const matchedSkills = (promptCtx.skills ?? []).filter((skill) => matchedSkillIds.has(skill.id));
1468
1486
  const turnSkillToolCall = buildSyntheticSkillToolCall(matchedSkills);
@@ -1536,6 +1554,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
1536
1554
  cliProvider = providerRegistry.get(requestProvider) ?? null;
1537
1555
  }
1538
1556
  if (!cliProvider) {
1557
+ clearInterval(keepalive);
1539
1558
  safeWrite(`data: ${JSON.stringify({ type: "error", message: `Unknown provider: ${requestProvider}` })}\n\n`);
1540
1559
  reply.raw.end();
1541
1560
  return;
@@ -2075,6 +2094,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
2075
2094
  model: requestBodyModel || undefined,
2076
2095
  jaitBackend,
2077
2096
  runtimeMode: requestRuntimeMode ?? undefined,
2097
+ reasoningEffort: userSettings?.reasoningEffort ?? undefined,
2078
2098
  },
2079
2099
  abort: streamAbort,
2080
2100
  maxRounds: resolveMaxToolRounds(userSettings?.apiKeys, config.agentMaxRounds),
@@ -2197,6 +2217,8 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
2197
2217
  const tcJson = partialToolCalls.length > 0 ? JSON.stringify(partialToolCalls) : undefined;
2198
2218
  persistMessage(sessionId, "assistant", fullContent || "", tcJson, resultSegmentsJson, contextFlowJson);
2199
2219
  }
2220
+ // Stop the SSE keepalive heartbeat now that the turn is finishing.
2221
+ clearInterval(keepalive);
2200
2222
  activeStreams.delete(sessionId);
2201
2223
  sessionAbortControllers.delete(sessionId);
2202
2224
  sessionSteeringControllers.delete(sessionId);
@@ -2454,6 +2476,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
2454
2476
  "Content-Type": "text/event-stream",
2455
2477
  "Cache-Control": "no-cache",
2456
2478
  Connection: "keep-alive",
2479
+ "X-Accel-Buffering": "no",
2457
2480
  "Access-Control-Allow-Origin": reqOrigin,
2458
2481
  "Access-Control-Allow-Credentials": "true",
2459
2482
  });
@@ -2503,10 +2526,13 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
2503
2526
  const snapshotSeq = sessionStreamSeq.get(sessionId) ?? 0;
2504
2527
  let closed = false;
2505
2528
  let unsubscribe = () => { };
2529
+ let keepalive = null;
2506
2530
  const closeStream = () => {
2507
2531
  if (closed)
2508
2532
  return;
2509
2533
  closed = true;
2534
+ if (keepalive)
2535
+ clearInterval(keepalive);
2510
2536
  unsubscribe();
2511
2537
  try {
2512
2538
  reply.raw.end();
@@ -2516,6 +2542,18 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
2516
2542
  reply.raw.on("close", () => {
2517
2543
  closeStream();
2518
2544
  });
2545
+ // Keep the SSE connection alive during idle periods (long tool runs / slow
2546
+ // LLM responses) so browsers/proxies don't drop it with "fetch failed".
2547
+ keepalive = setInterval(() => {
2548
+ if (closed)
2549
+ return;
2550
+ try {
2551
+ reply.raw.write(`: keepalive\n\n`);
2552
+ }
2553
+ catch {
2554
+ closeStream();
2555
+ }
2556
+ }, 15_000);
2519
2557
  unsubscribe = subscribe(sessionId, snapshotSeq, (event) => {
2520
2558
  if (closed)
2521
2559
  return;