@cloudcli-ai/cloudcli 1.37.2 → 1.37.4
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 +269 -0
- package/dist/assets/{abnfDiagram-N423BO3Z-C4UAoHJb.js → abnfDiagram-N423BO3Z-Dmkwx38H.js} +1 -1
- package/dist/assets/{arc-B8jF-ja9.js → arc-DLe9AYuO.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-C_Wur_CU.js → architectureDiagram-T3A2C74G-CBbbbNUW.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-Cq4P1i8t.js → blockDiagram-VBNYF7ZC-CaMEaWu4.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-C1wG4eUj.js → c4Diagram-5PPSVZJV-DhjMgNnR.js} +1 -1
- package/dist/assets/channel-CWrmwsir.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-B8fnBG6E.js → chunk-2GRJ4B5K-yjl3-F-i.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-WdfPooPJ.js → chunk-2Q5K7J3B-DsAYaWEP.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-DhZJuG2E.js → chunk-5RXB4S5H-Bt5qmqOX.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-B0rjslal.js → chunk-5VM5RSS4-yWrWVvUt.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-CG2Oj4jL.js → chunk-6Q2QTUOP-Dt66K5xb.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-rrl2lRxY.js → chunk-GF5L2VYU-DA0vzaj4.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CjVbrVMA.js → chunk-JWPE2WC7-CUkbx96V.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-CRzKgU8S.js → chunk-KBJHAD2P-DWKxx1WH.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DBz4GTZF.js → chunk-RYQCIY6F-BqluplN0.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-wHxalsXk.js → chunk-XXDRQBXY-DelKg3Xf.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-COAGCC6w.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-COAGCC6w.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-s1hygY8e.js → cose-bilkent-JH36ORCC-DHV93-Em.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-C4LGV15i.js → cynefin-VYW2F7L2-B9HZgoGX.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-C5uhu7B3.js → cynefinDiagram-MW4NZA55-hFjjEQg8.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-B-OBTewm.js → dagre-VZM6K2ZE-CpeVOC7V.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-BjGKQxih.js → diagram-7IWD3JNH-D0H1UoRA.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-BMKz1X2L.js → diagram-B4RE2ZJO-6Y7BQUup.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-DNh-GhKC.js → diagram-LBJQPF4R-C0nNOwht.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-BaTG9jPT.js → diagram-Q27KOJAE-En6QlOVX.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-BUwo2OvJ.js → diagram-UB23O5K3-CmPiNeGD.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-DAZgfzX2.js → ebnfDiagram-BXEA7PRR-Bygzp1Qt.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-1w1CcGEb.js → erDiagram-JOGREHBK-CwScRfzl.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-D4EII8Jj.js → flowDiagram-UKHOOZJN-bKX-0xP6.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-ChvJZAgB.js → ganttDiagram-PKOTCBZU-DtZPKXGd.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DtOn41S8.js → gitGraphDiagram-DS77QQ5N-CUOtdL1o.js} +1 -1
- package/dist/assets/index-CdjIFxM2.js +5004 -0
- package/dist/assets/index-DgafhGTF.css +32 -0
- package/dist/assets/{infoDiagram-6WML65LV-DN_PVEJZ.js → infoDiagram-6WML65LV-ciRQTS0h.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-DbkF1kXb.js → ishikawaDiagram-WSZJBQD7-CgjhQZ84.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-pJwmhddE.js → journeyDiagram-NVQOT4AX-BsbQSeIW.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-PPAPgNp5.js → kanban-definition-27J2QSJJ-CrwzY9Jw.js} +1 -1
- package/dist/assets/{linear-iPR-J9f7.js → linear-BUaCDr6l.js} +1 -1
- package/dist/assets/{mermaid.core-BEUL86Z6.js → mermaid.core-ClgdUU0j.js} +5 -5
- package/dist/assets/{mindmap-definition-FAOFIHXS-BvZoBib7.js → mindmap-definition-FAOFIHXS-BictljY1.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-DhYreaUd.js → pegDiagram-VL7TDLO6-BXdByy_U.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-CrOHlyD0.js → pieDiagram-7S7Q4E2Y-uZsMfkRX.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-D4g5yH3t.js → quadrantDiagram-CIZ2JOQS-7lCv4QIj.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-Dj39lHlf.js → railroadDiagram-AXF67PYL-07dxIWbi.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-1AS4Zgm_.js → requirementDiagram-LRYGKXZP-Cb31Yv1_.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-CKlMn19P.js → sankeyDiagram-W5VNT64P-X0YPSyF9.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-B_j3qyvo.js → sequenceDiagram-SI44F4Z6-BdBxSIlP.js} +1 -1
- package/dist/assets/server.browser-CtX3Hdl5.js +27 -0
- package/dist/assets/{sizeCapture-X5ZJPWSS-Bp2Op16v.js → sizeCapture-X5ZJPWSS-DQM5xAyD.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-C0cN6DoY.js → stateDiagram-OKZ733FA-DJ3xkLUF.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-vAaE4zNo.js +1 -0
- package/dist/assets/{swimlanes-SLNWSIFB-BEvXOV9b.js → swimlanes-SLNWSIFB-rjfYdW0w.js} +2 -2
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-TV2IF4Nq.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-zdJQinvZ.js → timeline-definition-Z64GVDOM-DZMra5do.js} +1 -1
- package/dist/assets/{vendor-codemirror-OwyKSvPE.js → vendor-codemirror-CYrSt7-U.js} +18 -18
- package/dist/assets/{vennDiagram-T6HMQDX7-DuF1uZMY.js → vennDiagram-T6HMQDX7-BevD8uu0.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-B9AlLQup.js → wardleyDiagram-T6FBY63Y-DsIyXB7z.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-DTJX48Qg.js → xychartDiagram-ELKLHX3M-G3PlF3ko.js} +1 -1
- package/dist/index.html +3 -3
- package/dist-server/server/index.js +11 -4
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/agent/agent.module.js +9 -2
- package/dist-server/server/modules/agent/agent.module.js.map +1 -1
- package/dist-server/server/modules/agent/agent.routes.js +177 -130
- package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
- package/dist-server/server/modules/agent/tests/agent-run-registration.test.js +306 -0
- package/dist-server/server/modules/agent/tests/agent-run-registration.test.js.map +1 -0
- package/dist-server/server/modules/agent/tests/agent.routes.test.js +48 -2
- package/dist-server/server/modules/agent/tests/agent.routes.test.js.map +1 -1
- package/dist-server/server/modules/browser-use/browser-use.routes.js +39 -33
- package/dist-server/server/modules/browser-use/browser-use.routes.js.map +1 -1
- package/dist-server/server/modules/database/connection.js +1 -1
- package/dist-server/server/modules/database/connection.js.map +1 -1
- package/dist-server/server/modules/database/index.js +5 -0
- package/dist-server/server/modules/database/index.js.map +1 -1
- package/dist-server/server/modules/database/migrations.js +45 -1
- package/dist-server/server/modules/database/migrations.js.map +1 -1
- package/dist-server/server/modules/database/repositories/provider-models.js +60 -6
- package/dist-server/server/modules/database/repositories/provider-models.js.map +1 -1
- package/dist-server/server/modules/database/repositories/scheduled-messages.db.js +71 -0
- package/dist-server/server/modules/database/repositories/scheduled-messages.db.js.map +1 -0
- package/dist-server/server/modules/database/repositories/session-drafts.db.js +105 -0
- package/dist-server/server/modules/database/repositories/session-drafts.db.js.map +1 -0
- package/dist-server/server/modules/database/repositories/sessions.db.js +144 -5
- package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
- package/dist-server/server/modules/database/repositories/user-preferences.db.js +65 -0
- package/dist-server/server/modules/database/repositories/user-preferences.db.js.map +1 -0
- package/dist-server/server/modules/database/schema.js +99 -0
- package/dist-server/server/modules/database/schema.js.map +1 -1
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +99 -0
- package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +39 -0
- package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js +105 -0
- package/dist-server/server/modules/database/tests/user-preferences.db.integration.test.js.map +1 -0
- package/dist-server/server/modules/file-tree/file-tree.module.js +2 -1
- package/dist-server/server/modules/file-tree/file-tree.module.js.map +1 -1
- package/dist-server/server/modules/file-tree/file-tree.service.js +44 -7
- package/dist-server/server/modules/file-tree/file-tree.service.js.map +1 -1
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js +126 -1
- package/dist-server/server/modules/file-tree/tests/file-tree.service.test.js.map +1 -1
- package/dist-server/server/modules/git/git-branch-diff.service.js +142 -0
- package/dist-server/server/modules/git/git-branch-diff.service.js.map +1 -0
- package/dist-server/server/modules/git/git-branch.service.js.map +1 -1
- package/dist-server/server/modules/git/git.routes.js +92 -5
- package/dist-server/server/modules/git/git.routes.js.map +1 -1
- package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js +160 -0
- package/dist-server/server/modules/git/tests/git-branch-diff.service.test.js.map +1 -0
- package/dist-server/server/modules/projects/project-clone.routes.js +108 -0
- package/dist-server/server/modules/projects/project-clone.routes.js.map +1 -0
- package/dist-server/server/modules/projects/projects.routes.js +13 -66
- package/dist-server/server/modules/projects/projects.routes.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-clone-request.service.js +36 -0
- package/dist-server/server/modules/projects/services/project-clone-request.service.js.map +1 -0
- package/dist-server/server/modules/projects/services/project-clone.service.js +86 -32
- package/dist-server/server/modules/projects/services/project-clone.service.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-delete.service.js +12 -1
- package/dist-server/server/modules/projects/services/project-delete.service.js.map +1 -1
- package/dist-server/server/modules/projects/services/project-star.service.js +2 -2
- package/dist-server/server/modules/projects/services/project-star.service.js.map +1 -1
- package/dist-server/server/modules/projects/tests/project-clone.routes.test.js +191 -0
- package/dist-server/server/modules/projects/tests/project-clone.routes.test.js.map +1 -0
- package/dist-server/server/modules/projects/tests/project-clone.service.test.js +275 -0
- package/dist-server/server/modules/projects/tests/project-clone.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/index.js +3 -0
- package/dist-server/server/modules/providers/index.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js +62 -9
- package/dist-server/server/modules/providers/list/claude/claude-auth.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js +46 -0
- package/dist-server/server/modules/providers/list/claude/claude-fork.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js +31 -12
- package/dist-server/server/modules/providers/list/claude/claude-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js +472 -53
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js +38 -11
- package/dist-server/server/modules/providers/list/claude/claude-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +1007 -60
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js +4 -1
- package/dist-server/server/modules/providers/list/claude/claude-skills.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude.provider.js +2 -0
- package/dist-server/server/modules/providers/list/claude/claude.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +204 -0
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js +32 -0
- package/dist-server/server/modules/providers/list/codex/codex-fork.provider.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +47 -0
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +71 -53
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js +8 -0
- package/dist-server/server/modules/providers/list/codex/codex-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js +1621 -431
- package/dist-server/server/modules/providers/list/codex/codex-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex.provider.js +2 -0
- package/dist-server/server/modules/providers/list/codex/codex.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js +9 -2
- package/dist-server/server/modules/providers/list/cursor/cursor-auth.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js +16 -8
- package/dist-server/server/modules/providers/list/cursor/cursor-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +274 -9
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
- package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +19 -2
- package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +134 -2
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js +100 -0
- package/dist-server/server/modules/providers/services/claude-cli-liveness.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js +97 -0
- package/dist-server/server/modules/providers/services/claude-settings-permissions.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js +23 -1
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +59 -5
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-runtime.service.js +8 -0
- package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js +139 -35
- package/dist-server/server/modules/providers/services/provider-token-usage.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js +2 -4
- package/dist-server/server/modules/providers/services/session-conversations-search.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-history-cache.service.js +91 -0
- package/dist-server/server/modules/providers/services/session-history-cache.service.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js +105 -32
- package/dist-server/server/modules/providers/services/session-synchronizer.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js +3 -60
- package/dist-server/server/modules/providers/services/sessions-watcher.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/sessions.service.js +252 -12
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-auth.test.js +183 -0
- package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-background-work.test.js +172 -0
- package/dist-server/server/modules/providers/tests/claude-background-work.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-compaction.test.js +84 -0
- package/dist-server/server/modules/providers/tests/claude-compaction.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-message-model.test.js +123 -0
- package/dist-server/server/modules/providers/tests/claude-message-model.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-models.test.js +39 -0
- package/dist-server/server/modules/providers/tests/claude-models.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js +265 -0
- package/dist-server/server/modules/providers/tests/claude-runtime-hold.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js +1815 -33
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js +228 -0
- package/dist-server/server/modules/providers/tests/claude-settings-permissions.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js +16 -0
- package/dist-server/server/modules/providers/tests/claude-subagent-echo.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/claude-token-budget.test.js +85 -0
- package/dist-server/server/modules/providers/tests/claude-token-budget.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-message-editing.test.js +338 -0
- package/dist-server/server/modules/providers/tests/codex-message-editing.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-models.test.js +25 -0
- package/dist-server/server/modules/providers/tests/codex-models.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-runtime.test.js +83 -0
- package/dist-server/server/modules/providers/tests/codex-runtime.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-session-fork.test.js +54 -0
- package/dist-server/server/modules/providers/tests/codex-session-fork.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js +354 -15
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/cursor-auth.test.js +167 -0
- package/dist-server/server/modules/providers/tests/cursor-auth.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/opencode-models.test.js +196 -4
- package/dist-server/server/modules/providers/tests/opencode-models.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +19 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js +30 -0
- package/dist-server/server/modules/providers/tests/provider-capabilities.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +79 -1
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +164 -1
- package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js +190 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/session-fork.test.js +113 -0
- package/dist-server/server/modules/providers/tests/session-fork.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js +139 -0
- package/dist-server/server/modules/providers/tests/session-history-cache.service.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js +90 -0
- package/dist-server/server/modules/providers/tests/session-orphan-prune.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js +122 -0
- package/dist-server/server/modules/providers/tests/session-synchronizer-coalescing.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/sessions.service.test.js +219 -1
- package/dist-server/server/modules/providers/tests/sessions.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/skills.test.js +15 -3
- package/dist-server/server/modules/providers/tests/skills.test.js.map +1 -1
- package/dist-server/server/modules/scheduled-messages/index.js +5 -0
- package/dist-server/server/modules/scheduled-messages/index.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js +47 -0
- package/dist-server/server/modules/scheduled-messages/scheduled-messages.routes.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js +175 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js +95 -0
- package/dist-server/server/modules/scheduled-messages/services/scheduled-messages.service.js.map +1 -0
- package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js +290 -0
- package/dist-server/server/modules/scheduled-messages/tests/scheduled-messages.test.js.map +1 -0
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js +23 -23
- package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -1
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js +48 -0
- package/dist-server/server/modules/taskmaster/tests/taskmaster.routes.test.js.map +1 -1
- package/dist-server/server/modules/user/tests/user.service.test.js +70 -0
- package/dist-server/server/modules/user/tests/user.service.test.js.map +1 -1
- package/dist-server/server/modules/user/user.module.js +10 -1
- package/dist-server/server/modules/user/user.module.js.map +1 -1
- package/dist-server/server/modules/user/user.routes.js +44 -0
- package/dist-server/server/modules/user/user.routes.js.map +1 -1
- package/dist-server/server/modules/user/user.service.js +75 -0
- package/dist-server/server/modules/user/user.service.js.map +1 -1
- package/dist-server/server/modules/voice/tests/voice.service.test.js +3 -2
- package/dist-server/server/modules/voice/tests/voice.service.test.js.map +1 -1
- package/dist-server/server/modules/websocket/index.js +7 -0
- package/dist-server/server/modules/websocket/index.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-run-registry.service.js +37 -49
- package/dist-server/server/modules/websocket/services/chat-run-registry.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-session-writer.service.js +35 -5
- package/dist-server/server/modules/websocket/services/chat-session-writer.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +204 -10
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js +94 -0
- package/dist-server/server/modules/websocket/services/session-upsert-broadcast.service.js.map +1 -0
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js +236 -20
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js +137 -0
- package/dist-server/server/modules/websocket/tests/chat-background-subscribe.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js +263 -0
- package/dist-server/server/modules/websocket/tests/chat-edit-send.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js +29 -3
- package/dist-server/server/modules/websocket/tests/chat-run-registry.test.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +96 -0
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js +106 -0
- package/dist-server/server/modules/websocket/tests/session-upsert-broadcast.test.js.map +1 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js +500 -0
- package/dist-server/server/modules/websocket/tests/shell-websocket.service.test.js.map +1 -1
- package/dist-server/server/shared/claude-cli-path.js +22 -5
- package/dist-server/server/shared/claude-cli-path.js.map +1 -1
- package/dist-server/server/shared/index.js +3 -0
- package/dist-server/server/shared/index.js.map +1 -0
- package/dist-server/server/shared/message-unification.js +376 -0
- package/dist-server/server/shared/message-unification.js.map +1 -0
- package/dist-server/server/shared/tests/claude-cli-path.test.js +45 -1
- package/dist-server/server/shared/tests/claude-cli-path.test.js.map +1 -1
- package/dist-server/server/shared/tests/message-unification.test.js +174 -0
- package/dist-server/server/shared/tests/message-unification.test.js.map +1 -0
- package/dist-server/server/shared/tests/read-only-roots.test.js +124 -0
- package/dist-server/server/shared/tests/read-only-roots.test.js.map +1 -0
- package/dist-server/server/shared/tests/strip-ansi-sequences.test.js +31 -0
- package/dist-server/server/shared/tests/strip-ansi-sequences.test.js.map +1 -0
- package/dist-server/server/shared/utils.js +160 -0
- package/dist-server/server/shared/utils.js.map +1 -1
- package/electron/desktopWindow.js +6 -0
- package/electron/viewHost.js +25 -2
- package/package.json +20 -17
- package/server/index.ts +16 -5
- package/server/modules/agent/agent.module.ts +11 -1
- package/server/modules/agent/agent.routes.ts +200 -142
- package/server/modules/agent/tests/agent-run-registration.test.ts +348 -0
- package/server/modules/agent/tests/agent.routes.test.ts +51 -2
- package/server/modules/browser-use/browser-use.routes.ts +96 -33
- package/server/modules/database/connection.ts +2 -1
- package/server/modules/database/index.ts +10 -0
- package/server/modules/database/migrations.ts +51 -0
- package/server/modules/database/repositories/provider-models.ts +79 -6
- package/server/modules/database/repositories/scheduled-messages.db.ts +127 -0
- package/server/modules/database/repositories/session-drafts.db.ts +171 -0
- package/server/modules/database/repositories/sessions.db.ts +204 -3
- package/server/modules/database/repositories/user-preferences.db.ts +80 -0
- package/server/modules/database/schema.ts +103 -0
- package/server/modules/database/tests/provider-models.db.integration.test.ts +113 -0
- package/server/modules/database/tests/sessions.db.integration.test.ts +52 -0
- package/server/modules/database/tests/user-preferences.db.integration.test.ts +135 -0
- package/server/modules/file-tree/file-tree.module.ts +2 -1
- package/server/modules/file-tree/file-tree.service.ts +49 -7
- package/server/modules/file-tree/tests/file-tree.service.test.ts +163 -1
- package/server/modules/git/git-branch-diff.service.ts +204 -0
- package/server/modules/git/git-branch.service.ts +2 -12
- package/server/modules/git/git.routes.ts +100 -6
- package/server/modules/git/tests/git-branch-diff.service.test.ts +210 -0
- package/server/modules/projects/project-clone.routes.ts +142 -0
- package/server/modules/projects/projects.routes.ts +16 -81
- package/server/modules/projects/services/project-clone-request.service.ts +56 -0
- package/server/modules/projects/services/project-clone.service.ts +102 -34
- package/server/modules/projects/services/project-delete.service.ts +13 -1
- package/server/modules/projects/services/project-star.service.ts +2 -2
- package/server/modules/projects/tests/project-clone.routes.test.ts +246 -0
- package/server/modules/projects/tests/project-clone.service.test.ts +376 -0
- package/server/modules/providers/index.ts +4 -0
- package/server/modules/providers/list/claude/claude-auth.provider.ts +81 -11
- package/server/modules/providers/list/claude/claude-fork.provider.ts +57 -0
- package/server/modules/providers/list/claude/claude-models.provider.ts +37 -17
- package/server/modules/providers/list/claude/claude-runtime.provider.js +510 -54
- package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +40 -14
- package/server/modules/providers/list/claude/claude-sessions.provider.ts +1195 -63
- package/server/modules/providers/list/claude/claude-skills.provider.ts +4 -1
- package/server/modules/providers/list/claude/claude.provider.ts +3 -0
- package/server/modules/providers/list/codex/codex-app-server.client.ts +243 -0
- package/server/modules/providers/list/codex/codex-fork.provider.ts +40 -0
- package/server/modules/providers/list/codex/codex-models.provider.ts +47 -0
- package/server/modules/providers/list/codex/{codex-runtime.provider.js → codex-runtime.provider.ts} +105 -70
- package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +9 -0
- package/server/modules/providers/list/codex/codex-sessions.provider.ts +1847 -455
- package/server/modules/providers/list/codex/codex.provider.ts +3 -0
- package/server/modules/providers/list/cursor/cursor-auth.provider.ts +10 -2
- package/server/modules/providers/list/cursor/cursor-runtime.provider.js +17 -8
- package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +0 -1
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +297 -9
- package/server/modules/providers/list/opencode/opencode-runtime.provider.js +5 -2
- package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +30 -2
- package/server/modules/providers/provider.routes.ts +162 -2
- package/server/modules/providers/services/claude-cli-liveness.service.ts +121 -0
- package/server/modules/providers/services/claude-settings-permissions.service.ts +127 -0
- package/server/modules/providers/services/provider-capabilities.service.ts +40 -1
- package/server/modules/providers/services/provider-models.service.ts +71 -4
- package/server/modules/providers/services/provider-runtime.service.ts +11 -0
- package/server/modules/providers/services/provider-token-usage.service.ts +166 -39
- package/server/modules/providers/services/session-conversations-search.service.ts +2 -5
- package/server/modules/providers/services/session-history-cache.service.ts +150 -0
- package/server/modules/providers/services/session-synchronizer.service.ts +125 -38
- package/server/modules/providers/services/sessions-watcher.service.ts +3 -64
- package/server/modules/providers/services/sessions.service.ts +309 -17
- package/server/modules/providers/tests/claude-auth.test.ts +208 -0
- package/server/modules/providers/tests/claude-background-work.test.ts +213 -0
- package/server/modules/providers/tests/claude-compaction.test.ts +101 -0
- package/server/modules/providers/tests/claude-message-model.test.ts +160 -0
- package/server/modules/providers/tests/claude-models.test.ts +87 -0
- package/server/modules/providers/tests/claude-runtime-hold.test.ts +309 -0
- package/server/modules/providers/tests/claude-sessions.test.ts +2167 -37
- package/server/modules/providers/tests/claude-settings-permissions.test.ts +271 -0
- package/server/modules/providers/tests/claude-subagent-echo.test.ts +25 -0
- package/server/modules/providers/tests/claude-token-budget.test.ts +104 -0
- package/server/modules/providers/tests/codex-message-editing.test.ts +419 -0
- package/server/modules/providers/tests/codex-models.test.ts +37 -0
- package/server/modules/providers/tests/codex-runtime.test.ts +94 -0
- package/server/modules/providers/tests/codex-session-fork.test.ts +59 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +396 -15
- package/server/modules/providers/tests/cursor-auth.test.ts +187 -0
- package/server/modules/providers/tests/opencode-models.test.ts +266 -8
- package/server/modules/providers/tests/opencode-sessions.test.ts +40 -1
- package/server/modules/providers/tests/provider-capabilities.service.test.ts +37 -0
- package/server/modules/providers/tests/provider-models.service.test.ts +99 -1
- package/server/modules/providers/tests/provider-token-usage.service.test.ts +188 -1
- package/server/modules/providers/tests/provider.routes.test.ts +230 -1
- package/server/modules/providers/tests/session-fork.test.ts +173 -0
- package/server/modules/providers/tests/session-history-cache.service.test.ts +165 -0
- package/server/modules/providers/tests/session-orphan-prune.test.ts +107 -0
- package/server/modules/providers/tests/session-synchronizer-coalescing.test.ts +136 -0
- package/server/modules/providers/tests/sessions.service.test.ts +303 -1
- package/server/modules/providers/tests/skills.test.ts +21 -5
- package/server/modules/scheduled-messages/index.ts +8 -0
- package/server/modules/scheduled-messages/scheduled-messages.routes.ts +68 -0
- package/server/modules/scheduled-messages/services/scheduled-message-dispatcher.service.ts +216 -0
- package/server/modules/scheduled-messages/services/scheduled-messages.service.ts +121 -0
- package/server/modules/scheduled-messages/tests/scheduled-messages.test.ts +354 -0
- package/server/modules/taskmaster/taskmaster.routes.ts +23 -33
- package/server/modules/taskmaster/tests/taskmaster.routes.test.ts +57 -0
- package/server/modules/user/tests/user.service.test.ts +90 -0
- package/server/modules/user/user.module.ts +10 -1
- package/server/modules/user/user.routes.ts +44 -0
- package/server/modules/user/user.service.ts +105 -0
- package/server/modules/voice/tests/voice.service.test.ts +3 -2
- package/server/modules/websocket/README.md +4 -2
- package/server/modules/websocket/index.ts +8 -0
- package/server/modules/websocket/services/chat-run-registry.service.ts +45 -54
- package/server/modules/websocket/services/chat-session-writer.service.ts +36 -6
- package/server/modules/websocket/services/chat-websocket.service.ts +302 -16
- package/server/modules/websocket/services/session-upsert-broadcast.service.ts +108 -0
- package/server/modules/websocket/services/shell-websocket.service.ts +276 -22
- package/server/modules/websocket/tests/chat-background-subscribe.test.ts +167 -0
- package/server/modules/websocket/tests/chat-edit-send.test.ts +309 -0
- package/server/modules/websocket/tests/chat-run-registry.test.ts +34 -3
- package/server/modules/websocket/tests/chat-stop-task.test.ts +127 -0
- package/server/modules/websocket/tests/session-upsert-broadcast.test.ts +138 -0
- package/server/modules/websocket/tests/shell-websocket.service.test.ts +629 -0
- package/server/shared/claude-cli-path.ts +24 -6
- package/server/shared/index.ts +3 -0
- package/server/shared/interfaces.ts +91 -0
- package/server/shared/message-unification.ts +449 -0
- package/server/shared/tests/claude-cli-path.test.ts +58 -1
- package/server/shared/tests/message-unification.test.ts +218 -0
- package/server/shared/tests/read-only-roots.test.ts +139 -0
- package/server/shared/tests/strip-ansi-sequences.test.ts +42 -0
- package/server/shared/types.ts +382 -7
- package/server/shared/utils.ts +176 -0
- package/dist/assets/channel-_falYbU1.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-Dn-3CfpR.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-Dn-3CfpR.js +0 -1
- package/dist/assets/index-CzPLBvXT.css +0 -32
- package/dist/assets/index-DFkBBuSA.js +0 -1549
- package/dist/assets/stateDiagram-v2-UEYNNEHI-BvBxUUrZ.js +0 -1
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CsE-x4YK.js +0 -8
package/server/modules/providers/list/codex/{codex-runtime.provider.js → codex-runtime.provider.ts}
RENAMED
|
@@ -8,29 +8,48 @@
|
|
|
8
8
|
* ## Usage
|
|
9
9
|
*
|
|
10
10
|
* - codexRuntime.run(command, options, writer, context) - Execute a streamed prompt
|
|
11
|
-
* -
|
|
12
|
-
* - isCodexSessionActive(sessionId) - Check if a session is running
|
|
13
|
-
* - getActiveCodexSessions() - List all active sessions
|
|
11
|
+
* - codexRuntime.abort(sessionId) - Cancel an active session
|
|
14
12
|
*/
|
|
15
13
|
|
|
16
14
|
import { Codex } from '@openai/codex-sdk';
|
|
15
|
+
import type { ModelReasoningEffort, Thread, ThreadOptions } from '@openai/codex-sdk';
|
|
17
16
|
|
|
18
17
|
import {
|
|
19
18
|
appendFilesInputTag,
|
|
20
19
|
buildCodexInputItems,
|
|
21
|
-
normalizeImageDescriptors
|
|
22
|
-
|
|
20
|
+
normalizeImageDescriptors,
|
|
21
|
+
createCompleteMessage,
|
|
22
|
+
createNormalizedMessage,
|
|
23
|
+
} from '@/shared/index.js';
|
|
23
24
|
import { notifyRunFailed, notifyRunStopped } from '@/modules/notifications/index.js';
|
|
24
|
-
import {
|
|
25
|
+
import type { AnyRecord, ProviderRuntimeContext, ProviderRuntimeWriter } from '@/shared/index.js';
|
|
26
|
+
|
|
27
|
+
type ActiveCodexSession = {
|
|
28
|
+
thread: Thread;
|
|
29
|
+
codex: Codex;
|
|
30
|
+
status: 'running' | 'aborted' | 'completed';
|
|
31
|
+
abortController: AbortController;
|
|
32
|
+
startedAt: string;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const activeCodexSessions = new Map<string, ActiveCodexSession>();
|
|
36
|
+
|
|
37
|
+
// Codex CLI requires non-whitespace stdin even when --image arguments are
|
|
38
|
+
// present, so attachment-only turns need a small text instruction.
|
|
39
|
+
const CODEX_IMAGE_ONLY_PROMPT = 'Please analyze the attached image(s).';
|
|
25
40
|
|
|
26
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Item types whose in-flight updates are worth showing. These are the ones a
|
|
43
|
+
* user waits on — a shell command's output, an MCP call, and the running plan.
|
|
44
|
+
*/
|
|
45
|
+
const PROGRESSIVE_CODEX_ITEM_TYPES = new Set(['command_execution', 'mcp_tool_call', 'todo_list']);
|
|
27
46
|
|
|
28
|
-
function readUsageNumber(value) {
|
|
47
|
+
function readUsageNumber(value: unknown) {
|
|
29
48
|
const parsed = Number(value);
|
|
30
49
|
return Number.isFinite(parsed) ? parsed : 0;
|
|
31
50
|
}
|
|
32
51
|
|
|
33
|
-
function extractCodexTokenBudget(event) {
|
|
52
|
+
function extractCodexTokenBudget(event: AnyRecord) {
|
|
34
53
|
const info = event?.info || event?.payload?.info || event?.usage?.info;
|
|
35
54
|
const usage = info?.total_token_usage || event?.usage?.total_token_usage || event?.usage;
|
|
36
55
|
if (!usage || typeof usage !== 'object') {
|
|
@@ -58,7 +77,7 @@ function extractCodexTokenBudget(event) {
|
|
|
58
77
|
* @param {object} event - SDK event
|
|
59
78
|
* @returns {object} - Transformed event for WebSocket
|
|
60
79
|
*/
|
|
61
|
-
function transformCodexEvent(event) {
|
|
80
|
+
function transformCodexEvent(event: AnyRecord): AnyRecord {
|
|
62
81
|
// Map SDK event types to a consistent format
|
|
63
82
|
switch (event.type) {
|
|
64
83
|
case 'item.started':
|
|
@@ -69,12 +88,16 @@ function transformCodexEvent(event) {
|
|
|
69
88
|
return { type: event.type, item: null };
|
|
70
89
|
}
|
|
71
90
|
|
|
72
|
-
//
|
|
91
|
+
// `itemId` is the SDK's stable per-item id. Carrying it through means an
|
|
92
|
+
// in-progress row and its later completion normalize to the same message
|
|
93
|
+
// id, so the client updates one transcript entry instead of appending a
|
|
94
|
+
// new one for every progress tick.
|
|
73
95
|
switch (item.type) {
|
|
74
96
|
case 'agent_message':
|
|
75
97
|
return {
|
|
76
98
|
type: 'item',
|
|
77
99
|
itemType: 'agent_message',
|
|
100
|
+
itemId: item.id,
|
|
78
101
|
message: {
|
|
79
102
|
role: 'assistant',
|
|
80
103
|
content: item.text
|
|
@@ -85,6 +108,7 @@ function transformCodexEvent(event) {
|
|
|
85
108
|
return {
|
|
86
109
|
type: 'item',
|
|
87
110
|
itemType: 'reasoning',
|
|
111
|
+
itemId: item.id,
|
|
88
112
|
message: {
|
|
89
113
|
role: 'assistant',
|
|
90
114
|
content: item.text,
|
|
@@ -96,6 +120,7 @@ function transformCodexEvent(event) {
|
|
|
96
120
|
return {
|
|
97
121
|
type: 'item',
|
|
98
122
|
itemType: 'command_execution',
|
|
123
|
+
itemId: item.id,
|
|
99
124
|
command: item.command,
|
|
100
125
|
output: item.aggregated_output,
|
|
101
126
|
exitCode: item.exit_code,
|
|
@@ -106,6 +131,7 @@ function transformCodexEvent(event) {
|
|
|
106
131
|
return {
|
|
107
132
|
type: 'item',
|
|
108
133
|
itemType: 'file_change',
|
|
134
|
+
itemId: item.id,
|
|
109
135
|
changes: item.changes,
|
|
110
136
|
status: item.status
|
|
111
137
|
};
|
|
@@ -114,6 +140,7 @@ function transformCodexEvent(event) {
|
|
|
114
140
|
return {
|
|
115
141
|
type: 'item',
|
|
116
142
|
itemType: 'mcp_tool_call',
|
|
143
|
+
itemId: item.id,
|
|
117
144
|
server: item.server,
|
|
118
145
|
tool: item.tool,
|
|
119
146
|
arguments: item.arguments,
|
|
@@ -126,6 +153,7 @@ function transformCodexEvent(event) {
|
|
|
126
153
|
return {
|
|
127
154
|
type: 'item',
|
|
128
155
|
itemType: 'web_search',
|
|
156
|
+
itemId: item.id,
|
|
129
157
|
query: item.query
|
|
130
158
|
};
|
|
131
159
|
|
|
@@ -133,6 +161,7 @@ function transformCodexEvent(event) {
|
|
|
133
161
|
return {
|
|
134
162
|
type: 'item',
|
|
135
163
|
itemType: 'todo_list',
|
|
164
|
+
itemId: item.id,
|
|
136
165
|
items: item.items
|
|
137
166
|
};
|
|
138
167
|
|
|
@@ -140,6 +169,7 @@ function transformCodexEvent(event) {
|
|
|
140
169
|
return {
|
|
141
170
|
type: 'item',
|
|
142
171
|
itemType: 'error',
|
|
172
|
+
itemId: item.id,
|
|
143
173
|
message: {
|
|
144
174
|
role: 'error',
|
|
145
175
|
content: item.message
|
|
@@ -150,6 +180,7 @@ function transformCodexEvent(event) {
|
|
|
150
180
|
return {
|
|
151
181
|
type: 'item',
|
|
152
182
|
itemType: item.type,
|
|
183
|
+
itemId: item.id,
|
|
153
184
|
item: item
|
|
154
185
|
};
|
|
155
186
|
}
|
|
@@ -196,7 +227,7 @@ function transformCodexEvent(event) {
|
|
|
196
227
|
* @param {string} permissionMode - 'default', 'acceptEdits', or 'bypassPermissions'
|
|
197
228
|
* @returns {object} - { sandboxMode, approvalPolicy }
|
|
198
229
|
*/
|
|
199
|
-
function mapPermissionModeToCodexOptions(permissionMode) {
|
|
230
|
+
function mapPermissionModeToCodexOptions(permissionMode: string): Pick<ThreadOptions, 'sandboxMode' | 'approvalPolicy'> {
|
|
200
231
|
switch (permissionMode) {
|
|
201
232
|
case 'acceptEdits':
|
|
202
233
|
return {
|
|
@@ -212,7 +243,9 @@ function mapPermissionModeToCodexOptions(permissionMode) {
|
|
|
212
243
|
default:
|
|
213
244
|
return {
|
|
214
245
|
sandboxMode: 'workspace-write',
|
|
215
|
-
|
|
246
|
+
// Current Codex CLI versions reject the retired `untrusted` policy.
|
|
247
|
+
// Keep sandboxing enabled; exec cannot grant interactive approval requests.
|
|
248
|
+
approvalPolicy: 'on-request'
|
|
216
249
|
};
|
|
217
250
|
}
|
|
218
251
|
}
|
|
@@ -223,7 +256,12 @@ function mapPermissionModeToCodexOptions(permissionMode) {
|
|
|
223
256
|
* @param {object} options - Options including cwd, sessionId, model, permissionMode
|
|
224
257
|
* @param {WebSocket|object} ws - WebSocket connection or response writer
|
|
225
258
|
*/
|
|
226
|
-
|
|
259
|
+
async function queryCodex(
|
|
260
|
+
command: string,
|
|
261
|
+
options: AnyRecord = {},
|
|
262
|
+
ws: ProviderRuntimeWriter,
|
|
263
|
+
context: ProviderRuntimeContext,
|
|
264
|
+
) {
|
|
227
265
|
const {
|
|
228
266
|
sessionId,
|
|
229
267
|
sessionSummary,
|
|
@@ -248,16 +286,22 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
248
286
|
const selectedModel = catalog.OPTIONS.find((option) => option.value === resolvedModel) || null;
|
|
249
287
|
const allowedEfforts = selectedModel?.effort?.values?.map((value) => value.value) || [];
|
|
250
288
|
const resolvedEffort = typeof effort === 'string' && effort !== 'default' && allowedEfforts.includes(effort)
|
|
251
|
-
? effort
|
|
289
|
+
? effort as ModelReasoningEffort
|
|
252
290
|
: undefined;
|
|
253
291
|
|
|
254
|
-
let codex;
|
|
255
|
-
let thread;
|
|
292
|
+
let codex: Codex;
|
|
293
|
+
let thread: Thread;
|
|
256
294
|
// Provider-native thread id (starts as the resume id, or is captured from
|
|
257
295
|
// the stream for brand-new sessions).
|
|
258
296
|
let capturedSessionId = providerSessionId;
|
|
259
297
|
let sessionCreatedSent = false;
|
|
260
|
-
let terminalFailure = null;
|
|
298
|
+
let terminalFailure: { message: string } | null = null;
|
|
299
|
+
// Codex surfaces API failures as streamed error items/turn.failed events, and
|
|
300
|
+
// then the SDK also throws "Codex Exec exited with code N: <stderr>" once the
|
|
301
|
+
// process dies. Showing both means the rendered error is followed by a raw
|
|
302
|
+
// stderr dump of unrelated CLI log lines, so the thrown wrapper is dropped
|
|
303
|
+
// when the stream already reported the failure.
|
|
304
|
+
let errorSurfaced = false;
|
|
261
305
|
const abortController = new AbortController();
|
|
262
306
|
// Session-map key: the app session id when the caller supplied one, else
|
|
263
307
|
// the provider-native thread id once captured (legacy/direct API callers).
|
|
@@ -266,7 +310,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
266
310
|
try {
|
|
267
311
|
codex = new Codex();
|
|
268
312
|
|
|
269
|
-
const threadOptions = {
|
|
313
|
+
const threadOptions: ThreadOptions = {
|
|
270
314
|
workingDirectory,
|
|
271
315
|
skipGitRepoCheck: true,
|
|
272
316
|
sandboxMode,
|
|
@@ -281,7 +325,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
281
325
|
thread = codex.startThread(threadOptions);
|
|
282
326
|
}
|
|
283
327
|
|
|
284
|
-
const registerSession = (id) => {
|
|
328
|
+
const registerSession = (id: string | null) => {
|
|
285
329
|
if (!id) {
|
|
286
330
|
return;
|
|
287
331
|
}
|
|
@@ -301,8 +345,12 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
301
345
|
// Execute with streaming. Turns with image attachments send structured
|
|
302
346
|
// input items so Codex reads the images from their local asset paths.
|
|
303
347
|
const promptWithFiles = appendFilesInputTag(command, files);
|
|
304
|
-
const
|
|
305
|
-
|
|
348
|
+
const normalizedImages = normalizeImageDescriptors(images);
|
|
349
|
+
const promptWithImageFallback = !promptWithFiles.trim() && normalizedImages.length > 0
|
|
350
|
+
? CODEX_IMAGE_ONLY_PROMPT
|
|
351
|
+
: promptWithFiles;
|
|
352
|
+
const turnInput = normalizedImages.length > 0
|
|
353
|
+
? buildCodexInputItems(promptWithImageFallback, normalizedImages, workingDirectory)
|
|
306
354
|
: promptWithFiles;
|
|
307
355
|
const streamedTurn = await thread.runStreamed(turnInput, {
|
|
308
356
|
signal: abortController.signal
|
|
@@ -311,7 +359,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
311
359
|
for await (const event of streamedTurn.events) {
|
|
312
360
|
// Capture thread/session id lazily from the stream (Codex emits this asynchronously).
|
|
313
361
|
if (event.type === 'thread.started') {
|
|
314
|
-
const discoveredSessionId = event.thread_id ||
|
|
362
|
+
const discoveredSessionId = event.thread_id || null;
|
|
315
363
|
if (discoveredSessionId && !capturedSessionId) {
|
|
316
364
|
capturedSessionId = discoveredSessionId;
|
|
317
365
|
registerSession(sessionKey());
|
|
@@ -332,17 +380,29 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
332
380
|
break;
|
|
333
381
|
}
|
|
334
382
|
if (sessionKey()) {
|
|
335
|
-
const session = activeCodexSessions.get(sessionKey());
|
|
383
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
336
384
|
if (session?.status === 'aborted') {
|
|
337
385
|
break;
|
|
338
386
|
}
|
|
339
387
|
}
|
|
340
388
|
|
|
341
|
-
|
|
389
|
+
// Progress events used to be dropped, so a long shell command or a
|
|
390
|
+
// growing plan showed nothing until it finished. They are forwarded now;
|
|
391
|
+
// every item carries a stable id, so the client replaces the row it
|
|
392
|
+
// already has rather than stacking a new one per tick. Text items are
|
|
393
|
+
// still skipped mid-flight because assistant prose arrives through the
|
|
394
|
+
// separate streaming path.
|
|
395
|
+
if (
|
|
396
|
+
(event.type === 'item.started' || event.type === 'item.updated')
|
|
397
|
+
&& !PROGRESSIVE_CODEX_ITEM_TYPES.has(event.item?.type)
|
|
398
|
+
) {
|
|
342
399
|
continue;
|
|
343
400
|
}
|
|
344
401
|
|
|
345
402
|
const transformed = transformCodexEvent(event);
|
|
403
|
+
if (transformed.type === 'error' || transformed.itemType === 'error') {
|
|
404
|
+
errorSurfaced = true;
|
|
405
|
+
}
|
|
346
406
|
|
|
347
407
|
// Normalize the transformed event into NormalizedMessage(s) via adapter
|
|
348
408
|
const normalizedMsgs = context.normalizeMessage(transformed, capturedSessionId || sessionId || null);
|
|
@@ -352,6 +412,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
352
412
|
|
|
353
413
|
if (event.type === 'turn.failed' && !terminalFailure) {
|
|
354
414
|
terminalFailure = event.error || new Error('Turn failed');
|
|
415
|
+
errorSurfaced = true;
|
|
355
416
|
// Notifications are app-facing, so they carry the app session id.
|
|
356
417
|
notifyRunFailed({
|
|
357
418
|
userId: ws?.userId || null,
|
|
@@ -373,7 +434,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
373
434
|
|
|
374
435
|
// Send the terminal completion event — skipped for aborted runs, whose
|
|
375
436
|
// terminal `complete` (aborted: true) was already sent by abort-session.
|
|
376
|
-
const runSession =
|
|
437
|
+
const runSession = activeCodexSessions.get(sessionKey() || '');
|
|
377
438
|
const runAborted = runSession?.status === 'aborted' || abortController.signal.aborted;
|
|
378
439
|
if (!runAborted) {
|
|
379
440
|
sendMessage(ws, createCompleteMessage({
|
|
@@ -394,22 +455,25 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
394
455
|
}
|
|
395
456
|
|
|
396
457
|
} catch (error) {
|
|
397
|
-
const session =
|
|
458
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
459
|
+
const runError = error instanceof Error ? error : new Error(String(error));
|
|
398
460
|
const wasAborted =
|
|
399
461
|
session?.status === 'aborted' ||
|
|
400
|
-
|
|
401
|
-
|
|
462
|
+
runError.name === 'AbortError' ||
|
|
463
|
+
runError.message.toLowerCase().includes('aborted');
|
|
402
464
|
|
|
403
465
|
if (!wasAborted) {
|
|
404
466
|
console.error('[Codex] Error:', error);
|
|
405
467
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
468
|
+
if (!errorSurfaced) {
|
|
469
|
+
// Check if Codex SDK is available for a clearer error message
|
|
470
|
+
const installed = await context.isProviderInstalled();
|
|
471
|
+
const errorContent = !installed
|
|
472
|
+
? 'Codex CLI is not configured. Please set up authentication first.'
|
|
473
|
+
: runError.message;
|
|
411
474
|
|
|
412
|
-
|
|
475
|
+
sendMessage(ws, createNormalizedMessage({ kind: 'error', content: errorContent, sessionId: capturedSessionId || sessionId || null, provider: 'codex' }));
|
|
476
|
+
}
|
|
413
477
|
sendMessage(ws, createCompleteMessage({
|
|
414
478
|
provider: 'codex',
|
|
415
479
|
sessionId: capturedSessionId || sessionId || null,
|
|
@@ -429,7 +493,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
429
493
|
} finally {
|
|
430
494
|
// Update session status
|
|
431
495
|
if (sessionKey()) {
|
|
432
|
-
const session = activeCodexSessions.get(sessionKey());
|
|
496
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
433
497
|
if (session) {
|
|
434
498
|
session.status = session.status === 'aborted' ? 'aborted' : 'completed';
|
|
435
499
|
}
|
|
@@ -442,7 +506,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
442
506
|
* @param {string} sessionId - Session ID to abort
|
|
443
507
|
* @returns {boolean} - Whether abort was successful
|
|
444
508
|
*/
|
|
445
|
-
|
|
509
|
+
function abortCodexSession(sessionId: string) {
|
|
446
510
|
const session = activeCodexSessions.get(sessionId);
|
|
447
511
|
|
|
448
512
|
if (!session) {
|
|
@@ -459,36 +523,7 @@ export function abortCodexSession(sessionId) {
|
|
|
459
523
|
return true;
|
|
460
524
|
}
|
|
461
525
|
|
|
462
|
-
/**
|
|
463
|
-
* Check if a session is active
|
|
464
|
-
* @param {string} sessionId - Session ID to check
|
|
465
|
-
* @returns {boolean} - Whether session is active
|
|
466
|
-
*/
|
|
467
|
-
export function isCodexSessionActive(sessionId) {
|
|
468
|
-
const session = activeCodexSessions.get(sessionId);
|
|
469
|
-
return session?.status === 'running';
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* Get all active sessions
|
|
474
|
-
* @returns {Array} - Array of active session info
|
|
475
|
-
*/
|
|
476
|
-
export function getActiveCodexSessions() {
|
|
477
|
-
const sessions = [];
|
|
478
|
-
|
|
479
|
-
for (const [id, session] of activeCodexSessions.entries()) {
|
|
480
|
-
if (session.status === 'running') {
|
|
481
|
-
sessions.push({
|
|
482
|
-
id,
|
|
483
|
-
status: session.status,
|
|
484
|
-
startedAt: session.startedAt
|
|
485
|
-
});
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
return sessions;
|
|
490
|
-
}
|
|
491
|
-
|
|
526
|
+
/** Used by the providers module's CodexProvider to run and abort SDK turns. */
|
|
492
527
|
export const codexRuntime = {
|
|
493
528
|
run: queryCodex,
|
|
494
529
|
abort: abortCodexSession,
|
|
@@ -499,10 +534,10 @@ export const codexRuntime = {
|
|
|
499
534
|
* @param {WebSocket|object} ws - WebSocket or response writer
|
|
500
535
|
* @param {object} data - Data to send
|
|
501
536
|
*/
|
|
502
|
-
function sendMessage(ws, data) {
|
|
537
|
+
function sendMessage(ws: ProviderRuntimeWriter, data: unknown) {
|
|
503
538
|
try {
|
|
504
|
-
if (ws.
|
|
505
|
-
//
|
|
539
|
+
if (ws.isWebSocketWriter) {
|
|
540
|
+
// The gateway writer handles stringification
|
|
506
541
|
ws.send(data);
|
|
507
542
|
} else if (typeof ws.send === 'function') {
|
|
508
543
|
// Raw WebSocket - stringify here
|
|
@@ -122,6 +122,15 @@ export class CodexSessionSynchronizer implements IProviderSessionSynchronizer {
|
|
|
122
122
|
return null;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
// A thread a session was edited off is left on disk on purpose, but it is
|
|
126
|
+
// nobody's conversation any more. Re-indexing it would add a sidebar entry
|
|
127
|
+
// for the version the user edited away from — and for a session that was
|
|
128
|
+
// itself discovered from disk, whose app id is its original thread id, it
|
|
129
|
+
// would hand the row back to that thread.
|
|
130
|
+
if (sessionsDb.isProviderSessionSuperseded(parsed.sessionId, this.provider)) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
|
|
125
134
|
// App-created sessions are keyed by an app id, so disk-discovered provider
|
|
126
135
|
// ids must be resolved through the provider-id mapping first.
|
|
127
136
|
const existingSession = sessionsDb.getSessionByProviderSessionId(parsed.sessionId)
|