@jait/gateway 0.1.461 → 0.1.463
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/api-contracts.d.ts +29 -0
- package/dist/api-contracts.d.ts.map +1 -0
- package/dist/api-contracts.js +2 -0
- package/dist/api-contracts.js.map +1 -0
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +15 -8
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +185 -0
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/schema.d.ts +71 -35
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +21 -19
- package/dist/db/schema.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +108 -67
- package/dist/index.js.map +1 -1
- package/dist/memory/contracts.d.ts +2 -1
- package/dist/memory/contracts.d.ts.map +1 -1
- package/dist/memory/service.d.ts +1 -0
- package/dist/memory/service.d.ts.map +1 -1
- package/dist/memory/service.js +110 -11
- package/dist/memory/service.js.map +1 -1
- package/dist/memory/sqlite-backend.d.ts +1 -0
- package/dist/memory/sqlite-backend.d.ts.map +1 -1
- package/dist/memory/sqlite-backend.js +15 -0
- package/dist/memory/sqlite-backend.js.map +1 -1
- package/dist/plugins/contracts.d.ts +1 -1
- package/dist/plugins/contracts.d.ts.map +1 -1
- package/dist/plugins/manager.d.ts +2 -2
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +3 -3
- package/dist/plugins/manager.js.map +1 -1
- package/dist/providers/contracts.d.ts +2 -61
- package/dist/providers/contracts.d.ts.map +1 -1
- package/dist/providers/jait-provider.js +6 -6
- package/dist/providers/jait-provider.js.map +1 -1
- package/dist/providers/model-fetchers.d.ts +18 -0
- package/dist/providers/model-fetchers.d.ts.map +1 -0
- package/dist/providers/model-fetchers.js +136 -0
- package/dist/providers/model-fetchers.js.map +1 -0
- package/dist/providers/provider-auth.d.ts +1 -0
- package/dist/providers/provider-auth.d.ts.map +1 -1
- package/dist/providers/provider-auth.js +33 -4
- package/dist/providers/provider-auth.js.map +1 -1
- package/dist/providers/registry.d.ts +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +2 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/routes/architecture.js +10 -10
- package/dist/routes/architecture.js.map +1 -1
- package/dist/routes/auth.js +10 -10
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/chat.d.ts +2 -2
- package/dist/routes/chat.d.ts.map +1 -1
- package/dist/routes/chat.js +197 -77
- package/dist/routes/chat.js.map +1 -1
- package/dist/routes/environment.d.ts +2 -2
- package/dist/routes/environment.d.ts.map +1 -1
- package/dist/routes/environment.js +11 -11
- package/dist/routes/environment.js.map +1 -1
- package/dist/routes/filesystem.d.ts +1 -1
- package/dist/routes/filesystem.js +1 -1
- package/dist/routes/git.js +1 -1
- package/dist/routes/git.js.map +1 -1
- package/dist/routes/jobs.js +2 -2
- package/dist/routes/jobs.js.map +1 -1
- package/dist/routes/mcp-server.d.ts +1 -1
- package/dist/routes/mcp-server.d.ts.map +1 -1
- package/dist/routes/mcp-server.js +13 -13
- package/dist/routes/mcp-server.js.map +1 -1
- package/dist/routes/preview.js +1 -1
- package/dist/routes/preview.js.map +1 -1
- package/dist/routes/project.d.ts +16 -0
- package/dist/routes/project.d.ts.map +1 -0
- package/dist/routes/{workspace.js → project.js} +100 -100
- package/dist/routes/project.js.map +1 -0
- package/dist/routes/projects.d.ts +15 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/{workspaces.js → projects.js} +98 -98
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +1 -96
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/reminders.d.ts +2 -2
- package/dist/routes/reminders.d.ts.map +1 -1
- package/dist/routes/reminders.js +39 -17
- package/dist/routes/reminders.js.map +1 -1
- package/dist/routes/repo-proposals.d.ts.map +1 -1
- package/dist/routes/repo-proposals.js +16 -10
- package/dist/routes/repo-proposals.js.map +1 -1
- package/dist/routes/repositories.d.ts +2 -2
- package/dist/routes/repositories.d.ts.map +1 -1
- package/dist/routes/repositories.js +7 -6
- package/dist/routes/repositories.js.map +1 -1
- package/dist/routes/sessions.d.ts +2 -2
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +20 -20
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/terminals.js +7 -7
- package/dist/routes/terminals.js.map +1 -1
- package/dist/routes/threads.js +2 -2
- package/dist/routes/threads.js.map +1 -1
- package/dist/scheduler/hooks.d.ts +1 -1
- package/dist/scheduler/hooks.d.ts.map +1 -1
- package/dist/scheduler/hooks.js +5 -5
- package/dist/scheduler/hooks.js.map +1 -1
- package/dist/scheduler/service.d.ts +3 -3
- package/dist/scheduler/service.d.ts.map +1 -1
- package/dist/scheduler/service.js +8 -8
- package/dist/scheduler/service.js.map +1 -1
- package/dist/security/path-guard.d.ts +6 -6
- package/dist/security/path-guard.d.ts.map +1 -1
- package/dist/security/path-guard.js +8 -8
- package/dist/security/path-guard.js.map +1 -1
- package/dist/security/sandbox-manager.d.ts +5 -5
- package/dist/security/sandbox-manager.d.ts.map +1 -1
- package/dist/security/sandbox-manager.js +14 -14
- package/dist/security/sandbox-manager.js.map +1 -1
- package/dist/security/tool-permissions.d.ts +1 -1
- package/dist/security/tool-permissions.d.ts.map +1 -1
- package/dist/security/tool-profiles.d.ts.map +1 -1
- package/dist/security/tool-profiles.js +15 -12
- package/dist/security/tool-profiles.js.map +1 -1
- package/dist/server.d.ts +4 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -16
- package/dist/server.js.map +1 -1
- package/dist/services/architecture-diagrams.d.ts +3 -3
- package/dist/services/architecture-diagrams.d.ts.map +1 -1
- package/dist/services/architecture-diagrams.js +19 -19
- package/dist/services/architecture-diagrams.js.map +1 -1
- package/dist/services/git.d.ts +1 -1
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +3 -3
- package/dist/services/git.js.map +1 -1
- package/dist/services/live-view-manager.d.ts +1 -1
- package/dist/services/live-view-manager.d.ts.map +1 -1
- package/dist/services/live-view-manager.js +2 -2
- package/dist/services/live-view-manager.js.map +1 -1
- package/dist/services/plans.d.ts +2 -13
- package/dist/services/plans.d.ts.map +1 -1
- package/dist/services/plans.js.map +1 -1
- package/dist/services/preview-runner.d.ts +5 -5
- package/dist/services/preview-runner.d.ts.map +1 -1
- package/dist/services/preview-runner.js +19 -19
- package/dist/services/preview-runner.js.map +1 -1
- package/dist/services/preview.d.ts +2 -2
- package/dist/services/preview.d.ts.map +1 -1
- package/dist/services/preview.js +8 -8
- package/dist/services/preview.js.map +1 -1
- package/dist/services/project-repositories.d.ts +35 -0
- package/dist/services/project-repositories.d.ts.map +1 -0
- package/dist/services/{workspace-repositories.js → project-repositories.js} +34 -34
- package/dist/services/project-repositories.js.map +1 -0
- package/dist/services/project-state.d.ts +8 -0
- package/dist/services/project-state.d.ts.map +1 -0
- package/dist/services/{workspace-state.js → project-state.js} +25 -25
- package/dist/services/project-state.js.map +1 -0
- package/dist/services/{workspace-watcher.d.ts → project-watcher.d.ts} +8 -8
- package/dist/services/project-watcher.d.ts.map +1 -0
- package/dist/services/{workspace-watcher.js → project-watcher.js} +7 -7
- package/dist/services/project-watcher.js.map +1 -0
- package/dist/services/{workspaces.d.ts → projects.d.ts} +13 -13
- package/dist/services/projects.d.ts.map +1 -0
- package/dist/services/{workspaces.js → projects.js} +54 -54
- package/dist/services/projects.js.map +1 -0
- package/dist/services/reminders.d.ts +16 -4
- package/dist/services/reminders.d.ts.map +1 -1
- package/dist/services/reminders.js +152 -11
- package/dist/services/reminders.js.map +1 -1
- package/dist/services/repo-proposals.d.ts +3 -14
- package/dist/services/repo-proposals.d.ts.map +1 -1
- package/dist/services/repo-proposals.js.map +1 -1
- package/dist/services/repositories.d.ts +3 -13
- package/dist/services/repositories.d.ts.map +1 -1
- package/dist/services/repositories.js +10 -2
- package/dist/services/repositories.js.map +1 -1
- package/dist/services/session-search.d.ts +34 -0
- package/dist/services/session-search.d.ts.map +1 -0
- package/dist/services/session-search.js +137 -0
- package/dist/services/session-search.js.map +1 -0
- package/dist/services/session-state.js +1 -1
- package/dist/services/sessions.d.ts +22 -22
- package/dist/services/sessions.d.ts.map +1 -1
- package/dist/services/sessions.js +21 -21
- package/dist/services/sessions.js.map +1 -1
- package/dist/services/threads.d.ts +3 -50
- package/dist/services/threads.d.ts.map +1 -1
- package/dist/services/threads.js.map +1 -1
- package/dist/services/users.d.ts +4 -4
- package/dist/services/users.d.ts.map +1 -1
- package/dist/services/users.js +16 -16
- package/dist/services/users.js.map +1 -1
- package/dist/sessions/contracts.d.ts +4 -4
- package/dist/sessions/contracts.d.ts.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/surfaces/browser.js +1 -1
- package/dist/surfaces/browser.js.map +1 -1
- package/dist/surfaces/contracts.d.ts +1 -1
- package/dist/surfaces/contracts.d.ts.map +1 -1
- package/dist/surfaces/filesystem.d.ts +1 -1
- package/dist/surfaces/filesystem.d.ts.map +1 -1
- package/dist/surfaces/filesystem.js +18 -18
- package/dist/surfaces/filesystem.js.map +1 -1
- package/dist/surfaces/remote-filesystem.d.ts +2 -2
- package/dist/surfaces/remote-filesystem.d.ts.map +1 -1
- package/dist/surfaces/remote-filesystem.js +6 -6
- package/dist/surfaces/remote-filesystem.js.map +1 -1
- package/dist/surfaces/terminal.js +2 -2
- package/dist/surfaces/terminal.js.map +1 -1
- package/dist/tools/agent-loop.d.ts +15 -0
- package/dist/tools/agent-loop.d.ts.map +1 -1
- package/dist/tools/agent-loop.js +121 -14
- package/dist/tools/agent-loop.js.map +1 -1
- package/dist/tools/agent-tools.d.ts.map +1 -1
- package/dist/tools/agent-tools.js +2 -1
- package/dist/tools/agent-tools.js.map +1 -1
- package/dist/tools/architecture-tools.js +8 -8
- package/dist/tools/architecture-tools.js.map +1 -1
- package/dist/tools/browser-tools.d.ts +1 -1
- package/dist/tools/browser-tools.d.ts.map +1 -1
- package/dist/tools/browser-tools.js +3 -3
- package/dist/tools/browser-tools.js.map +1 -1
- package/dist/tools/chat-modes.d.ts +1 -1
- package/dist/tools/chat-modes.d.ts.map +1 -1
- package/dist/tools/chat-modes.js +2 -0
- package/dist/tools/chat-modes.js.map +1 -1
- package/dist/tools/contracts.d.ts +1 -1
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/core/execute.d.ts +1 -1
- package/dist/tools/core/execute.d.ts.map +1 -1
- package/dist/tools/core/execute.js +1 -1
- package/dist/tools/core/execute.js.map +1 -1
- package/dist/tools/core/get-fs.d.ts +9 -9
- package/dist/tools/core/get-fs.d.ts.map +1 -1
- package/dist/tools/core/get-fs.js +20 -20
- package/dist/tools/core/get-fs.js.map +1 -1
- package/dist/tools/core/jait.d.ts +3 -3
- package/dist/tools/core/jait.d.ts.map +1 -1
- package/dist/tools/core/jait.js +9 -9
- package/dist/tools/core/jait.js.map +1 -1
- package/dist/tools/core/read.d.ts +1 -1
- package/dist/tools/core/read.d.ts.map +1 -1
- package/dist/tools/core/search.d.ts +2 -2
- package/dist/tools/core/search.d.ts.map +1 -1
- package/dist/tools/core/search.js +5 -5
- package/dist/tools/core/search.js.map +1 -1
- package/dist/tools/cron-tools.js +2 -2
- package/dist/tools/cron-tools.js.map +1 -1
- package/dist/tools/elevated-tools.js +3 -3
- package/dist/tools/elevated-tools.js.map +1 -1
- package/dist/tools/file-tools.js +4 -4
- package/dist/tools/file-tools.js.map +1 -1
- package/dist/tools/index.d.ts +7 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +14 -7
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +8 -4
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +58 -11
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/preview-tools.d.ts +1 -1
- package/dist/tools/preview-tools.d.ts.map +1 -1
- package/dist/tools/preview-tools.js +10 -10
- package/dist/tools/preview-tools.js.map +1 -1
- package/dist/tools/{workspace-tools.d.ts → project-tools.d.ts} +4 -4
- package/dist/tools/project-tools.d.ts.map +1 -0
- package/dist/tools/{workspace-tools.js → project-tools.js} +28 -28
- package/dist/tools/project-tools.js.map +1 -0
- package/dist/tools/prompts/claude-prompt.js +4 -4
- package/dist/tools/prompts/default-openai-prompt.js +1 -1
- package/dist/tools/prompts/default-prompt.js +1 -1
- package/dist/tools/prompts/gemini-prompt.js +4 -4
- package/dist/tools/prompts/gpt5-prompt.js +3 -3
- package/dist/tools/prompts/gpt51-prompt.js +2 -2
- package/dist/tools/prompts/gpt52-prompt.js +2 -2
- package/dist/tools/prompts/prompt-registry.d.ts +2 -2
- package/dist/tools/prompts/prompt-registry.d.ts.map +1 -1
- package/dist/tools/prompts/prompt-registry.js +5 -5
- package/dist/tools/prompts/prompt-registry.js.map +1 -1
- package/dist/tools/prompts/shared-sections.d.ts +3 -3
- package/dist/tools/prompts/shared-sections.d.ts.map +1 -1
- package/dist/tools/prompts/shared-sections.js +12 -10
- package/dist/tools/prompts/shared-sections.js.map +1 -1
- package/dist/tools/prompts/xai-prompt.js +2 -2
- package/dist/tools/remote-executor.d.ts +7 -7
- package/dist/tools/remote-executor.d.ts.map +1 -1
- package/dist/tools/remote-executor.js +14 -13
- package/dist/tools/remote-executor.js.map +1 -1
- package/dist/tools/repo-proposal-tools.js +5 -5
- package/dist/tools/repo-proposal-tools.js.map +1 -1
- package/dist/tools/session-search-tools.d.ts +12 -0
- package/dist/tools/session-search-tools.d.ts.map +1 -0
- package/dist/tools/session-search-tools.js +59 -0
- package/dist/tools/session-search-tools.js.map +1 -0
- package/dist/tools/ssh-tools.js +1 -1
- package/dist/tools/ssh-tools.js.map +1 -1
- package/dist/tools/surface-tools.d.ts +1 -1
- package/dist/tools/surface-tools.d.ts.map +1 -1
- package/dist/tools/surface-tools.js +2 -2
- package/dist/tools/surface-tools.js.map +1 -1
- package/dist/tools/terminal-tools.d.ts +2 -2
- package/dist/tools/terminal-tools.d.ts.map +1 -1
- package/dist/tools/terminal-tools.js +10 -10
- package/dist/tools/terminal-tools.js.map +1 -1
- package/dist/tools/thread-tools.d.ts.map +1 -1
- package/dist/tools/thread-tools.js +53 -8
- package/dist/tools/thread-tools.js.map +1 -1
- package/dist/tools/token-estimator.d.ts.map +1 -1
- package/dist/tools/token-estimator.js +30 -1
- package/dist/tools/token-estimator.js.map +1 -1
- package/dist/tools/tool-names.d.ts +2 -1
- package/dist/tools/tool-names.d.ts.map +1 -1
- package/dist/tools/tool-names.js +2 -1
- package/dist/tools/tool-names.js.map +1 -1
- package/dist/voice-assistant/service.d.ts +1 -1
- package/dist/voice-assistant/service.js +4 -4
- package/dist/voice-assistant/tools.d.ts +2 -2
- package/dist/voice-assistant/tools.d.ts.map +1 -1
- package/dist/voice-assistant/tools.js +14 -14
- package/dist/voice-assistant/tools.js.map +1 -1
- package/dist/ws.d.ts +1 -1
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +2 -2
- package/dist/ws.js.map +1 -1
- package/package.json +2 -2
- package/web-dist/assets/{_basePickBy-BxTNhXHf.js → _basePickBy-BM8eesD4.js} +1 -1
- package/web-dist/assets/{_baseUniq-BzmTBuCK.js → _baseUniq-BM6-oAti.js} +1 -1
- package/web-dist/assets/{arc-D_str31s.js → arc-DCuHZnW6.js} +1 -1
- package/web-dist/assets/{architectureDiagram-2XIMDMQ5-iGpZ5eMv.js → architectureDiagram-2XIMDMQ5-CbghC0Jt.js} +1 -1
- package/web-dist/assets/{blockDiagram-WCTKOSBZ-CzaQqynl.js → blockDiagram-WCTKOSBZ-CY4EJBQ6.js} +1 -1
- package/web-dist/assets/{c4Diagram-IC4MRINW-PyiTG4vY.js → c4Diagram-IC4MRINW-CWy0R6Nw.js} +1 -1
- package/web-dist/assets/channel-C4yEM23r.js +1 -0
- package/web-dist/assets/{chunk-4BX2VUAB-D0T3UNJp.js → chunk-4BX2VUAB-Dc3yo1Gc.js} +1 -1
- package/web-dist/assets/{chunk-55IACEB6-CEZ65WgK.js → chunk-55IACEB6-ugBuFkg4.js} +1 -1
- package/web-dist/assets/{chunk-FMBD7UC4-P5kWRofC.js → chunk-FMBD7UC4-cu6QQh2a.js} +1 -1
- package/web-dist/assets/{chunk-JSJVCQXG-Cn1owVt4.js → chunk-JSJVCQXG-DTdBqiLF.js} +1 -1
- package/web-dist/assets/{chunk-KX2RTZJC-CC0b6eqX.js → chunk-KX2RTZJC-DFApvQwT.js} +1 -1
- package/web-dist/assets/{chunk-NQ4KR5QH-CNIgo-1z.js → chunk-NQ4KR5QH-4yOScl2J.js} +1 -1
- package/web-dist/assets/{chunk-QZHKN3VN-DF6TeuK6.js → chunk-QZHKN3VN-CM38B0WV.js} +1 -1
- package/web-dist/assets/{chunk-WL4C6EOR-DaZTFehP.js → chunk-WL4C6EOR-eBVrWGce.js} +1 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-QCajg6F3.js +1 -0
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-QCajg6F3.js +1 -0
- package/web-dist/assets/clone-Dqpxz3OJ.js +1 -0
- package/web-dist/assets/{cose-bilkent-S5V4N54A-BxdF5cV-.js → cose-bilkent-S5V4N54A-HHRRPeV9.js} +1 -1
- package/web-dist/assets/{dagre-KLK3FWXG-Dm4scFIL.js → dagre-KLK3FWXG-aAUSG7Mo.js} +1 -1
- package/web-dist/assets/{diagram-E7M64L7V-Bne6RKl6.js → diagram-E7M64L7V-BJt3zK9H.js} +1 -1
- package/web-dist/assets/{diagram-IFDJBPK2-j2mQ5C5l.js → diagram-IFDJBPK2-BSK9w0bb.js} +1 -1
- package/web-dist/assets/{diagram-P4PSJMXO-CdzuLWEw.js → diagram-P4PSJMXO-DylDASun.js} +1 -1
- package/web-dist/assets/{erDiagram-INFDFZHY-DZrdptsJ.js → erDiagram-INFDFZHY-C2CoituG.js} +1 -1
- package/web-dist/assets/{flowDiagram-PKNHOUZH-DgjJzAMy.js → flowDiagram-PKNHOUZH-C2UR2xxJ.js} +1 -1
- package/web-dist/assets/{ganttDiagram-A5KZAMGK-BUK9KV20.js → ganttDiagram-A5KZAMGK-ClxfUfSR.js} +1 -1
- package/web-dist/assets/{gitGraphDiagram-K3NZZRJ6-D30kLUud.js → gitGraphDiagram-K3NZZRJ6-CHp_onyn.js} +1 -1
- package/web-dist/assets/{graph-Uq5Ey2rZ.js → graph-CG2WS7_t.js} +1 -1
- package/web-dist/assets/{index-Ceg7oKI4.js → index-BwYKBEGE.js} +1 -1
- package/web-dist/assets/index-CPIpYLuw.js +1504 -0
- package/web-dist/assets/index-CjPicmz_.css +32 -0
- package/web-dist/assets/{index-Dl_78WX8.js → index-DwvrR7An.js} +1 -1
- package/web-dist/assets/{infoDiagram-LFFYTUFH-CcayyObn.js → infoDiagram-LFFYTUFH-D-1oFNFC.js} +1 -1
- package/web-dist/assets/{ishikawaDiagram-PHBUUO56-CoNyYrRv.js → ishikawaDiagram-PHBUUO56-DWcJu4vD.js} +1 -1
- package/web-dist/assets/{journeyDiagram-4ABVD52K-DhNuQwoO.js → journeyDiagram-4ABVD52K-CyrGxq5f.js} +1 -1
- package/web-dist/assets/{kanban-definition-K7BYSVSG-CiBoEtT_.js → kanban-definition-K7BYSVSG-Bq9ecx3z.js} +1 -1
- package/web-dist/assets/{layout-CclAjc31.js → layout-DnxR75j6.js} +1 -1
- package/web-dist/assets/{linear-D0T2Ue4i.js → linear-Bj4ZUyD2.js} +1 -1
- package/web-dist/assets/{mindmap-definition-YRQLILUH-Bs5KOLlF.js → mindmap-definition-YRQLILUH-CCzvprBn.js} +1 -1
- package/web-dist/assets/{pieDiagram-SKSYHLDU-D5ft8t9O.js → pieDiagram-SKSYHLDU-xDO_MmaO.js} +1 -1
- package/web-dist/assets/{quadrantDiagram-337W2JSQ-CTrNOfNq.js → quadrantDiagram-337W2JSQ-DACNxopk.js} +1 -1
- package/web-dist/assets/{requirementDiagram-Z7DCOOCP-Lfkxswx5.js → requirementDiagram-Z7DCOOCP-CMqe5H--.js} +1 -1
- package/web-dist/assets/{sankeyDiagram-WA2Y5GQK-D7VXd1gH.js → sankeyDiagram-WA2Y5GQK-jn75MYj4.js} +1 -1
- package/web-dist/assets/{sequenceDiagram-2WXFIKYE-BobMUXZE.js → sequenceDiagram-2WXFIKYE-C8afKJhS.js} +1 -1
- package/web-dist/assets/{stateDiagram-RAJIS63D-BiTIuwsM.js → stateDiagram-RAJIS63D-Ftq6oKpa.js} +1 -1
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-DaZO7yY_.js +1 -0
- package/web-dist/assets/{timeline-definition-YZTLITO2-rKlur9hp.js → timeline-definition-YZTLITO2-DQ4bUy-3.js} +1 -1
- package/web-dist/assets/{treemap-KZPCXAKY-BtERtPNk.js → treemap-KZPCXAKY-C9ovvl15.js} +1 -1
- package/web-dist/assets/{vennDiagram-LZ73GAT5-Ke0QhSrP.js → vennDiagram-LZ73GAT5-D3O9WbYV.js} +1 -1
- package/web-dist/assets/{xychartDiagram-JWTSCODW-Cl96gv3X.js → xychartDiagram-JWTSCODW-UqN90bHw.js} +1 -1
- package/web-dist/index.html +2 -2
- package/dist/routes/workspace.d.ts +0 -16
- package/dist/routes/workspace.d.ts.map +0 -1
- package/dist/routes/workspace.js.map +0 -1
- package/dist/routes/workspaces.d.ts +0 -15
- package/dist/routes/workspaces.d.ts.map +0 -1
- package/dist/routes/workspaces.js.map +0 -1
- package/dist/services/workspace-repositories.d.ts +0 -35
- package/dist/services/workspace-repositories.d.ts.map +0 -1
- package/dist/services/workspace-repositories.js.map +0 -1
- package/dist/services/workspace-state.d.ts +0 -8
- package/dist/services/workspace-state.d.ts.map +0 -1
- package/dist/services/workspace-state.js.map +0 -1
- package/dist/services/workspace-watcher.d.ts.map +0 -1
- package/dist/services/workspace-watcher.js.map +0 -1
- package/dist/services/workspaces.d.ts.map +0 -1
- package/dist/services/workspaces.js.map +0 -1
- package/dist/tools/workspace-tools.d.ts.map +0 -1
- package/dist/tools/workspace-tools.js.map +0 -1
- package/web-dist/assets/channel-Dpmc9iFy.js +0 -1
- package/web-dist/assets/classDiagram-VBA2DB6C-yqgzo6kv.js +0 -1
- package/web-dist/assets/classDiagram-v2-RAHNMMFH-yqgzo6kv.js +0 -1
- package/web-dist/assets/clone-BV2MQMkR.js +0 -1
- package/web-dist/assets/index-Bir79SR1.css +0 -32
- package/web-dist/assets/index-CPsRY9iy.js +0 -1503
- package/web-dist/assets/stateDiagram-v2-FVOUBMTO-BxQjvEWb.js +0 -1
package/dist/routes/chat.js
CHANGED
|
@@ -3,7 +3,7 @@ import {} from "../config.js";
|
|
|
3
3
|
import { FileSystemSurface } from "../surfaces/filesystem.js";
|
|
4
4
|
import { extractTodoResultItems } from "../providers/todo-result.js";
|
|
5
5
|
import { RemoteCliProvider } from "../providers/remote-cli-provider.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolveProjectRoot } from "../tools/core/get-fs.js";
|
|
7
7
|
import { existsSync } from "node:fs";
|
|
8
8
|
import { messages as messagesTable } from "../db/schema.js";
|
|
9
9
|
import { eq } from "drizzle-orm";
|
|
@@ -40,7 +40,7 @@ function buildCliProviderSystemPrompt(provider, model, mode, promptCtx) {
|
|
|
40
40
|
backend: provider,
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
function buildExternalProviderContextFlow(requestProvider, model, setupMessage, systemPrompt, userContent, sentAt, note) {
|
|
43
|
+
function buildExternalProviderContextFlow(requestProvider, model, setupMessage, systemPrompt, userContent, sentAt, note, memory) {
|
|
44
44
|
const messages = [
|
|
45
45
|
{ role: "system", content: setupMessage },
|
|
46
46
|
];
|
|
@@ -52,6 +52,7 @@ function buildExternalProviderContextFlow(requestProvider, model, setupMessage,
|
|
|
52
52
|
provider: requestProvider,
|
|
53
53
|
...(model ? { model } : {}),
|
|
54
54
|
note,
|
|
55
|
+
...(memory ? { memory } : {}),
|
|
55
56
|
rounds: [{
|
|
56
57
|
round: 1,
|
|
57
58
|
createdAt: sentAt,
|
|
@@ -60,6 +61,79 @@ function buildExternalProviderContextFlow(requestProvider, model, setupMessage,
|
|
|
60
61
|
}],
|
|
61
62
|
};
|
|
62
63
|
}
|
|
64
|
+
function truncateForMemoryBlock(value, max = 220) {
|
|
65
|
+
const compact = value.replace(/\s+/g, " ").trim();
|
|
66
|
+
if (compact.length <= max)
|
|
67
|
+
return compact;
|
|
68
|
+
return `${compact.slice(0, max - 1)}…`;
|
|
69
|
+
}
|
|
70
|
+
function shouldIncludeContactMemories(content) {
|
|
71
|
+
return /\b(based on what you know|remember|preference|preferences|prefer|my usual|about me|what do you know)\b/i.test(content);
|
|
72
|
+
}
|
|
73
|
+
function memorySourceLabel(entry) {
|
|
74
|
+
return `${entry.source.type}:${entry.source.id}@${entry.source.surface}`;
|
|
75
|
+
}
|
|
76
|
+
function toContextFlowMemoryEntry(entry) {
|
|
77
|
+
return {
|
|
78
|
+
id: entry.id,
|
|
79
|
+
scope: entry.scope,
|
|
80
|
+
source: memorySourceLabel(entry),
|
|
81
|
+
sourceType: entry.source.type,
|
|
82
|
+
sourceId: entry.source.id,
|
|
83
|
+
sourceSurface: entry.source.surface,
|
|
84
|
+
updatedAt: entry.updatedAt,
|
|
85
|
+
content: truncateForMemoryBlock(entry.content),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function buildRelevantMemoryPromptBlock(entries) {
|
|
89
|
+
const lines = entries.slice(0, 5).map((entry) => {
|
|
90
|
+
const content = truncateForMemoryBlock(entry.content);
|
|
91
|
+
return `- [id=${entry.id} scope=${entry.scope} source=${memorySourceLabel(entry)} updated=${entry.updatedAt}] ${content}`;
|
|
92
|
+
});
|
|
93
|
+
return [
|
|
94
|
+
"<relevant_memory>",
|
|
95
|
+
"Use these memories only when they are directly relevant. Do not mention memory IDs unless the user asks for provenance.",
|
|
96
|
+
...lines,
|
|
97
|
+
"</relevant_memory>",
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
100
|
+
async function retrieveRelevantMemoryContext(memoryService, content) {
|
|
101
|
+
const query = content.trim();
|
|
102
|
+
if (!memoryService || !query)
|
|
103
|
+
return null;
|
|
104
|
+
const projectMemories = await memoryService.search(query, 5, "project");
|
|
105
|
+
const byId = new Map();
|
|
106
|
+
for (const entry of projectMemories)
|
|
107
|
+
byId.set(entry.id, entry);
|
|
108
|
+
if (shouldIncludeContactMemories(query)) {
|
|
109
|
+
const contactMemories = await memoryService.search(query, Math.max(0, 5 - byId.size), "contact");
|
|
110
|
+
for (const entry of contactMemories)
|
|
111
|
+
byId.set(entry.id, entry);
|
|
112
|
+
}
|
|
113
|
+
const entries = [...byId.values()].slice(0, 5);
|
|
114
|
+
if (entries.length === 0) {
|
|
115
|
+
return {
|
|
116
|
+
block: "",
|
|
117
|
+
flow: {
|
|
118
|
+
query,
|
|
119
|
+
retrieved: [],
|
|
120
|
+
injectedIds: [],
|
|
121
|
+
ignoredIds: [],
|
|
122
|
+
savedIds: [],
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
block: buildRelevantMemoryPromptBlock(entries),
|
|
128
|
+
flow: {
|
|
129
|
+
query,
|
|
130
|
+
retrieved: entries.map(toContextFlowMemoryEntry),
|
|
131
|
+
injectedIds: entries.map((entry) => entry.id),
|
|
132
|
+
ignoredIds: [],
|
|
133
|
+
savedIds: [],
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
63
137
|
function buildSyntheticSkillToolCall(skills) {
|
|
64
138
|
if (skills.length === 0)
|
|
65
139
|
return null;
|
|
@@ -129,9 +203,9 @@ function parseUserDisplaySegments(raw) {
|
|
|
129
203
|
});
|
|
130
204
|
continue;
|
|
131
205
|
}
|
|
132
|
-
if (record.type === "
|
|
206
|
+
if (record.type === "project" && typeof record.path === "string") {
|
|
133
207
|
segments.push({
|
|
134
|
-
type: "
|
|
208
|
+
type: "project",
|
|
135
209
|
path: record.path,
|
|
136
210
|
name: typeof record.name === "string" ? record.name : record.path.split("/").pop() ?? record.path,
|
|
137
211
|
});
|
|
@@ -142,7 +216,7 @@ function parseUserDisplaySegments(raw) {
|
|
|
142
216
|
type: "terminal",
|
|
143
217
|
terminalId: record.terminalId,
|
|
144
218
|
name: typeof record.name === "string" ? record.name : record.terminalId,
|
|
145
|
-
...(typeof record.
|
|
219
|
+
...(typeof record.projectRoot === "string" ? { projectRoot: record.projectRoot } : {}),
|
|
146
220
|
...(parseDisplayLineRange(record) ? { lineRange: parseDisplayLineRange(record) } : {}),
|
|
147
221
|
...(typeof record.selectedText === "string" ? { selectedText: record.selectedText } : {}),
|
|
148
222
|
});
|
|
@@ -618,7 +692,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
618
692
|
let memoryService;
|
|
619
693
|
let ws;
|
|
620
694
|
let sessionStateService;
|
|
621
|
-
let
|
|
695
|
+
let projectService;
|
|
622
696
|
let providerRegistry;
|
|
623
697
|
let skillRegistry;
|
|
624
698
|
if (depsOrDb && typeof depsOrDb === "object" && "sessionService" in depsOrDb) {
|
|
@@ -633,7 +707,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
633
707
|
memoryService = deps.memoryService;
|
|
634
708
|
ws = deps.ws;
|
|
635
709
|
sessionStateService = deps.sessionState;
|
|
636
|
-
|
|
710
|
+
projectService = deps.projectService;
|
|
637
711
|
providerRegistry = deps.providerRegistry;
|
|
638
712
|
skillRegistry = deps.skillRegistry;
|
|
639
713
|
}
|
|
@@ -835,6 +909,28 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
835
909
|
app.log.error(err, "Failed to persist message");
|
|
836
910
|
}
|
|
837
911
|
}
|
|
912
|
+
function updateLatestAssistantContextFlow(sessionId, contextFlow) {
|
|
913
|
+
if (!db)
|
|
914
|
+
return;
|
|
915
|
+
try {
|
|
916
|
+
const rows = db
|
|
917
|
+
.select()
|
|
918
|
+
.from(messagesTable)
|
|
919
|
+
.where(eq(messagesTable.sessionId, sessionId))
|
|
920
|
+
.orderBy(messagesTable.createdAt)
|
|
921
|
+
.all();
|
|
922
|
+
const lastAssistant = [...rows].reverse().find((row) => row.role === "assistant");
|
|
923
|
+
if (!lastAssistant)
|
|
924
|
+
return;
|
|
925
|
+
db.update(messagesTable)
|
|
926
|
+
.set({ contextFlow })
|
|
927
|
+
.where(eq(messagesTable.id, lastAssistant.id))
|
|
928
|
+
.run();
|
|
929
|
+
}
|
|
930
|
+
catch (err) {
|
|
931
|
+
app.log.error(err, "Failed to update assistant context flow");
|
|
932
|
+
}
|
|
933
|
+
}
|
|
838
934
|
// ── Tool execution helper ──────────────────────────────────────────
|
|
839
935
|
async function executeTool(toolName, args, sessionId, auth, onOutputChunk, signal) {
|
|
840
936
|
if (!toolRegistry) {
|
|
@@ -844,15 +940,15 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
844
940
|
return { ok: false, message: "Cancelled" };
|
|
845
941
|
}
|
|
846
942
|
const sessionRecord = sessionService?.getById(sessionId);
|
|
847
|
-
const
|
|
848
|
-
?
|
|
943
|
+
const projectRecord = sessionRecord?.projectId
|
|
944
|
+
? projectService?.getById(sessionRecord.projectId, auth?.userId)
|
|
849
945
|
: null;
|
|
850
|
-
const wsPath =
|
|
946
|
+
const wsPath = projectRecord?.rootPath ?? sessionRecord?.projectPath;
|
|
851
947
|
const context = {
|
|
852
948
|
sessionId,
|
|
853
949
|
actionId: uuidv7(),
|
|
854
|
-
|
|
855
|
-
?
|
|
950
|
+
projectRoot: surfaceRegistry
|
|
951
|
+
? resolveProjectRoot(surfaceRegistry, sessionId, wsPath)
|
|
856
952
|
: (wsPath?.trim() || process.cwd()),
|
|
857
953
|
requestedBy: "agent",
|
|
858
954
|
userId: auth?.userId,
|
|
@@ -989,16 +1085,16 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
989
1085
|
};
|
|
990
1086
|
// Build conversation history (hydrate from DB if needed)
|
|
991
1087
|
hydrateSession(sessionId);
|
|
992
|
-
// Resolve
|
|
1088
|
+
// Resolve project root so the system prompt includes it
|
|
993
1089
|
const sessionRecord = sessionService?.getById(sessionId);
|
|
994
|
-
const
|
|
995
|
-
?
|
|
1090
|
+
const projectRecord = sessionRecord?.projectId
|
|
1091
|
+
? projectService?.getById(sessionRecord.projectId, authUser.id)
|
|
996
1092
|
: null;
|
|
997
1093
|
const wsRoot = surfaceRegistry
|
|
998
|
-
?
|
|
999
|
-
: ((
|
|
1094
|
+
? resolveProjectRoot(surfaceRegistry, sessionId, projectRecord?.rootPath ?? sessionRecord?.projectPath)
|
|
1095
|
+
: ((projectRecord?.rootPath ?? sessionRecord?.projectPath)?.trim() || process.cwd());
|
|
1000
1096
|
const promptCtx = {
|
|
1001
|
-
|
|
1097
|
+
projectRoot: wsRoot,
|
|
1002
1098
|
skills: skillRegistry?.listEnabled(),
|
|
1003
1099
|
responseStyle,
|
|
1004
1100
|
backend: llmRuntime.backend,
|
|
@@ -1009,7 +1105,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1009
1105
|
]);
|
|
1010
1106
|
}
|
|
1011
1107
|
else {
|
|
1012
|
-
// Update system prompt if mode/model/
|
|
1108
|
+
// Update system prompt if mode/model/project changed mid-session
|
|
1013
1109
|
const h = sessionHistory.get(sessionId);
|
|
1014
1110
|
const modePrompt = buildSystemPrompt(chatMode, modelEndpoint, promptCtx);
|
|
1015
1111
|
if (h[0]?.role === "system" && h[0].content !== modePrompt) {
|
|
@@ -1045,8 +1141,8 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1045
1141
|
}
|
|
1046
1142
|
try {
|
|
1047
1143
|
sessionService?.touch(sessionId);
|
|
1048
|
-
if (sessionRecord?.
|
|
1049
|
-
|
|
1144
|
+
if (sessionRecord?.projectId) {
|
|
1145
|
+
projectService?.touch(sessionRecord.projectId);
|
|
1050
1146
|
}
|
|
1051
1147
|
}
|
|
1052
1148
|
catch { /* session may not exist */ }
|
|
@@ -1077,6 +1173,9 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1077
1173
|
const matchedSkills = (promptCtx.skills ?? []).filter((skill) => matchedSkillIds.has(skill.id));
|
|
1078
1174
|
const turnSkillToolCall = buildSyntheticSkillToolCall(matchedSkills);
|
|
1079
1175
|
emitSyntheticSkillToolCall(sessionId, turnSkillToolCall, safeWrite, emitToSubscribers);
|
|
1176
|
+
const relevantMemory = await retrieveRelevantMemoryContext(memoryService, content);
|
|
1177
|
+
const memoryFlow = relevantMemory?.flow;
|
|
1178
|
+
const memoryBlock = relevantMemory?.block;
|
|
1080
1179
|
const providerLabel = requestProvider === "codex"
|
|
1081
1180
|
? "Codex"
|
|
1082
1181
|
: requestProvider === "claude-code"
|
|
@@ -1099,9 +1198,9 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1099
1198
|
// ══ CLI Provider path (codex / claude-code via MCP) ══════════
|
|
1100
1199
|
if (requestProvider && requestProvider !== "jait" && providerRegistry) {
|
|
1101
1200
|
const cliWsRoot = surfaceRegistry
|
|
1102
|
-
?
|
|
1103
|
-
: ((
|
|
1104
|
-
// Detect if the
|
|
1201
|
+
? resolveProjectRoot(surfaceRegistry, sessionId, projectRecord?.rootPath ?? sessionRecord?.projectPath)
|
|
1202
|
+
: ((projectRecord?.rootPath ?? sessionRecord?.projectPath)?.trim() || process.cwd());
|
|
1203
|
+
// Detect if the project lives on a remote node (e.g. Windows
|
|
1105
1204
|
// desktop) and route the CLI provider session there instead of
|
|
1106
1205
|
// trying to spawn codex/claude-code locally on the gateway.
|
|
1107
1206
|
const pathExistsLocally = existsSync(cliWsRoot);
|
|
@@ -1143,11 +1242,11 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1143
1242
|
safeWrite(`data: ${JSON.stringify({ type: "provider_fallback", from: requestProvider, to: "jait", reason })}\n\n`);
|
|
1144
1243
|
}
|
|
1145
1244
|
else {
|
|
1146
|
-
console.log(`[chat/cli] session=${sessionId} wsRoot="${cliWsRoot}" session.
|
|
1245
|
+
console.log(`[chat/cli] session=${sessionId} wsRoot="${cliWsRoot}" session.projectPath="${sessionRecord?.projectPath}" surfaces=${surfaceRegistry?.getBySession(sessionId)?.length ?? 0}`);
|
|
1147
1246
|
// Ensure a FileSystemSurface exists for this session so we can
|
|
1148
1247
|
// back up files before CLI providers (Codex/Claude) write them,
|
|
1149
1248
|
// enabling the keep/discard (undo) flow.
|
|
1150
|
-
// Use _skipBroadcast so the UI doesn't open the
|
|
1249
|
+
// Use _skipBroadcast so the UI doesn't open the project panel.
|
|
1151
1250
|
let cliFsSurface = null;
|
|
1152
1251
|
if (surfaceRegistry) {
|
|
1153
1252
|
const fsId = `fs-${sessionId}`;
|
|
@@ -1161,7 +1260,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1161
1260
|
surfaceRegistry.onSurfaceStarted = null;
|
|
1162
1261
|
const started = await surfaceRegistry.startSurface("filesystem", fsId, {
|
|
1163
1262
|
sessionId,
|
|
1164
|
-
|
|
1263
|
+
projectRoot: cliWsRoot,
|
|
1165
1264
|
});
|
|
1166
1265
|
surfaceRegistry.onSurfaceStarted = prevHandler;
|
|
1167
1266
|
cliFsSurface = started;
|
|
@@ -1171,7 +1270,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1171
1270
|
}
|
|
1172
1271
|
const mcpServers = [providerRegistry.buildJaitMcpServerRef(config, getRequestBaseUrl(request), {
|
|
1173
1272
|
sessionId,
|
|
1174
|
-
|
|
1273
|
+
projectRoot: cliWsRoot,
|
|
1175
1274
|
})];
|
|
1176
1275
|
// ── Reuse an existing CLI session if one is alive for this Jait session ──
|
|
1177
1276
|
const cachedCliSession = activeCliSessions.get(sessionId);
|
|
@@ -1204,11 +1303,11 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1204
1303
|
activeCliSessions.set(sessionId, { providerId: requestProvider, runtimeMode, providerSessionId, provider: cliProvider });
|
|
1205
1304
|
console.log(`[chat/cli] Started new ${requestProvider}/${runtimeMode}${isRemote ? " (remote)" : ""} session ${providerSessionId} for ${sessionId}`);
|
|
1206
1305
|
}
|
|
1207
|
-
// Tell the frontend about the execution context (node,
|
|
1306
|
+
// Tell the frontend about the execution context (node, project)
|
|
1208
1307
|
safeWrite(`data: ${JSON.stringify({
|
|
1209
1308
|
type: "session_info",
|
|
1210
1309
|
provider: requestProvider,
|
|
1211
|
-
|
|
1310
|
+
projectPath: cliWsRoot,
|
|
1212
1311
|
isRemote,
|
|
1213
1312
|
...(remoteNodeInfo ? { remoteNode: remoteNodeInfo } : {}),
|
|
1214
1313
|
})}\n\n`);
|
|
@@ -1394,9 +1493,10 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1394
1493
|
});
|
|
1395
1494
|
const responseStyleBlock = getResponseStyleInstructions(responseStyle);
|
|
1396
1495
|
const cliSystemPrompt = buildCliProviderSystemPrompt(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, chatMode, promptCtx);
|
|
1397
|
-
|
|
1496
|
+
const cliUserContent = memoryBlock ? `${memoryBlock}\n\n${content}` : content;
|
|
1497
|
+
let cliContent = cliUserContent;
|
|
1398
1498
|
if (isNewCliSession) {
|
|
1399
|
-
cliContent = formatExternalProviderFirstTurn(cliSystemPrompt,
|
|
1499
|
+
cliContent = formatExternalProviderFirstTurn(cliSystemPrompt, cliUserContent);
|
|
1400
1500
|
}
|
|
1401
1501
|
else if (responseStyleBlock) {
|
|
1402
1502
|
cliContent = `<responseStyle>\n${responseStyleBlock}\n</responseStyle>\n\n${cliContent}`;
|
|
@@ -1437,7 +1537,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1437
1537
|
: "Jait did not paste its internal system prompt into this provider turn.",
|
|
1438
1538
|
"Provider-native hidden system prompts may still exist inside the CLI provider and are not visible to Jait.",
|
|
1439
1539
|
].join("\n");
|
|
1440
|
-
const cliContextFlow = buildExternalProviderContextFlow(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, setupContent, cliSystemPrompt,
|
|
1540
|
+
const cliContextFlow = buildExternalProviderContextFlow(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, setupContent, cliSystemPrompt, cliUserContent, sentAt, "CLI providers keep their own session context. This captures the Jait setup metadata, the external-provider system prompt, and the user turn content. On reused CLI sessions, the system prompt is shown for inspection even though it was only sent when Jait initialized or recovered the provider session.", memoryFlow);
|
|
1441
1541
|
contextFlowJson = JSON.stringify(cliContextFlow);
|
|
1442
1542
|
safeWrite(`data: ${JSON.stringify({ type: "context_flow", ...cliContextFlow })}\n\n`);
|
|
1443
1543
|
emitToSubscribers(sessionId, { type: "context_flow", ...cliContextFlow });
|
|
@@ -1473,7 +1573,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1473
1573
|
});
|
|
1474
1574
|
const refreshedSystemPrompt = buildCliProviderSystemPrompt(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, chatMode, promptCtx);
|
|
1475
1575
|
let recoveryContent = content;
|
|
1476
|
-
recoveryContent = formatExternalProviderFirstTurn(refreshedSystemPrompt,
|
|
1576
|
+
recoveryContent = formatExternalProviderFirstTurn(refreshedSystemPrompt, cliUserContent);
|
|
1477
1577
|
const sentAt = new Date().toISOString();
|
|
1478
1578
|
const setupContent = [
|
|
1479
1579
|
"CLI provider recovery session setup captured by Jait.",
|
|
@@ -1486,7 +1586,7 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1486
1586
|
"Jait pasted its external-provider system prompt into this recovery provider session turn.",
|
|
1487
1587
|
"Provider-native hidden system prompts may still exist inside the CLI provider and are not visible to Jait.",
|
|
1488
1588
|
].join("\n");
|
|
1489
|
-
const cliContextFlow = buildExternalProviderContextFlow(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, setupContent, refreshedSystemPrompt,
|
|
1589
|
+
const cliContextFlow = buildExternalProviderContextFlow(requestProvider, typeof body["model"] === "string" ? body["model"] : undefined, setupContent, refreshedSystemPrompt, cliUserContent, sentAt, "CLI providers keep their own session context. This captures the Jait recovery setup metadata, the current Jait session system prompt, and the user turn content.", memoryFlow);
|
|
1490
1590
|
contextFlowJson = JSON.stringify(cliContextFlow);
|
|
1491
1591
|
safeWrite(`data: ${JSON.stringify({ type: "context_flow", ...cliContextFlow })}\n\n`);
|
|
1492
1592
|
emitToSubscribers(sessionId, { type: "context_flow", ...cliContextFlow });
|
|
@@ -1627,47 +1727,64 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1627
1727
|
}
|
|
1628
1728
|
};
|
|
1629
1729
|
const contextRounds = [];
|
|
1630
|
-
const
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1730
|
+
const injectedMemoryMessage = memoryBlock
|
|
1731
|
+
? { role: "system", content: memoryBlock }
|
|
1732
|
+
: null;
|
|
1733
|
+
if (injectedMemoryMessage)
|
|
1734
|
+
history.push(injectedMemoryMessage);
|
|
1735
|
+
let result;
|
|
1736
|
+
try {
|
|
1737
|
+
result = await runAgentLoop({
|
|
1738
|
+
llm: llmRuntime,
|
|
1739
|
+
history,
|
|
1740
|
+
toolSchemas,
|
|
1741
|
+
hasTools,
|
|
1742
|
+
sessionId,
|
|
1743
|
+
auth: {
|
|
1744
|
+
userId: authUser.id,
|
|
1745
|
+
apiKeys: userApiKeys,
|
|
1746
|
+
providerId: swarmWorkerProvider ?? requestProvider,
|
|
1747
|
+
model: requestBodyModel || undefined,
|
|
1748
|
+
jaitBackend,
|
|
1749
|
+
runtimeMode: requestRuntimeMode ?? undefined,
|
|
1750
|
+
},
|
|
1751
|
+
abort: streamAbort,
|
|
1752
|
+
maxRounds: MAX_TOOL_ROUNDS,
|
|
1753
|
+
parallel: true,
|
|
1754
|
+
toolRegistry,
|
|
1755
|
+
disabledTools,
|
|
1756
|
+
mode: chatMode,
|
|
1757
|
+
onEvent,
|
|
1758
|
+
onContext: (round) => {
|
|
1759
|
+
contextRounds.push(round);
|
|
1760
|
+
contextFlowJson = JSON.stringify({
|
|
1761
|
+
provider: "jait",
|
|
1762
|
+
model: llmRuntime.openaiModel,
|
|
1763
|
+
rounds: contextRounds,
|
|
1764
|
+
...(memoryFlow ? { memory: memoryFlow } : {}),
|
|
1765
|
+
});
|
|
1766
|
+
const event = {
|
|
1767
|
+
type: "context_flow",
|
|
1768
|
+
provider: "jait",
|
|
1769
|
+
model: llmRuntime.openaiModel,
|
|
1770
|
+
rounds: contextRounds,
|
|
1771
|
+
...(memoryFlow ? { memory: memoryFlow } : {}),
|
|
1772
|
+
};
|
|
1773
|
+
emitToSubscribers(sessionId, event);
|
|
1774
|
+
safeWrite(`data: ${JSON.stringify(event)}\n\n`);
|
|
1775
|
+
},
|
|
1776
|
+
onPersist: (sid, role, content, tc, seg, thinking) => persistMessage(sid, role, content, tc, seg, contextFlowJson, thinking),
|
|
1777
|
+
priorFingerprints: sessionFingerprints.get(sessionId),
|
|
1778
|
+
log: app.log,
|
|
1779
|
+
}, executeTool, steering);
|
|
1780
|
+
}
|
|
1781
|
+
finally {
|
|
1782
|
+
if (injectedMemoryMessage) {
|
|
1783
|
+
const index = history.indexOf(injectedMemoryMessage);
|
|
1784
|
+
if (index >= 0)
|
|
1785
|
+
history.splice(index, 1);
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1671
1788
|
fullContent = result.content;
|
|
1672
1789
|
partialToolCalls = result.executedToolCalls;
|
|
1673
1790
|
if (turnSkillToolCall) {
|
|
@@ -1687,21 +1804,24 @@ export function registerChatRoutes(app, config, depsOrDb, sessionServiceArg) {
|
|
|
1687
1804
|
provider: "jait",
|
|
1688
1805
|
model: llmRuntime.openaiModel,
|
|
1689
1806
|
rounds: contextRounds,
|
|
1807
|
+
...(memoryFlow ? { memory: memoryFlow } : {}),
|
|
1690
1808
|
});
|
|
1691
1809
|
const finalEvent = {
|
|
1692
1810
|
type: "context_flow",
|
|
1693
1811
|
provider: "jait",
|
|
1694
1812
|
model: llmRuntime.openaiModel,
|
|
1695
1813
|
rounds: contextRounds,
|
|
1814
|
+
...(memoryFlow ? { memory: memoryFlow } : {}),
|
|
1696
1815
|
};
|
|
1697
1816
|
emitToSubscribers(sessionId, finalEvent);
|
|
1698
1817
|
safeWrite(`data: ${JSON.stringify(finalEvent)}\n\n`);
|
|
1699
1818
|
}
|
|
1700
1819
|
if (contextFlowJson) {
|
|
1701
|
-
const lastAssistant = [...history].reverse().find((msg) => msg.role === "assistant"
|
|
1820
|
+
const lastAssistant = [...history].reverse().find((msg) => msg.role === "assistant");
|
|
1702
1821
|
if (lastAssistant) {
|
|
1703
1822
|
lastAssistant.contextFlow = JSON.parse(contextFlowJson);
|
|
1704
1823
|
}
|
|
1824
|
+
updateLatestAssistantContextFlow(sessionId, contextFlowJson);
|
|
1705
1825
|
}
|
|
1706
1826
|
// Track executed tool calls for retry API
|
|
1707
1827
|
sessionExecutedToolCalls.set(sessionId, result.executedToolCalls);
|