@cloudcli-ai/cloudcli 1.37.2 → 1.37.3
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-CJntskwA.js} +1 -1
- package/dist/assets/{arc-B8jF-ja9.js → arc-CIfH4uMN.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-C_Wur_CU.js → architectureDiagram-T3A2C74G-_IpEkukg.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-Cq4P1i8t.js → blockDiagram-VBNYF7ZC-BttxrpgZ.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-C1wG4eUj.js → c4Diagram-5PPSVZJV-g51dSRr1.js} +1 -1
- package/dist/assets/channel-C5xU9jMw.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-B8fnBG6E.js → chunk-2GRJ4B5K-D_-LbQUa.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-WdfPooPJ.js → chunk-2Q5K7J3B-BtlHzwaO.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-DhZJuG2E.js → chunk-5RXB4S5H-UzkpvpAT.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-B0rjslal.js → chunk-5VM5RSS4-BKwx5Gag.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-CG2Oj4jL.js → chunk-6Q2QTUOP-D_KEBH5f.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-rrl2lRxY.js → chunk-GF5L2VYU-rK2DGyto.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CjVbrVMA.js → chunk-JWPE2WC7-CeBl_N9i.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-CRzKgU8S.js → chunk-KBJHAD2P-BiQLWVIr.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DBz4GTZF.js → chunk-RYQCIY6F-C1knVGV5.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-wHxalsXk.js → chunk-XXDRQBXY-CtKbJkvF.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-CRrL3vp7.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-CRrL3vp7.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-s1hygY8e.js → cose-bilkent-JH36ORCC-DjX8y40Z.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-C4LGV15i.js → cynefin-VYW2F7L2-DM6YeRba.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-C5uhu7B3.js → cynefinDiagram-MW4NZA55-wZJ-vy5B.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-B-OBTewm.js → dagre-VZM6K2ZE-BzP0ejkH.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-BjGKQxih.js → diagram-7IWD3JNH-BTL_j23J.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-BMKz1X2L.js → diagram-B4RE2ZJO-Cf1Norgu.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-DNh-GhKC.js → diagram-LBJQPF4R-DPiUEKr-.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-BaTG9jPT.js → diagram-Q27KOJAE-CTcTpiz5.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-BUwo2OvJ.js → diagram-UB23O5K3-DPMSdYm0.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-DAZgfzX2.js → ebnfDiagram-BXEA7PRR-7yvD6uiF.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-1w1CcGEb.js → erDiagram-JOGREHBK-CfgeDoV6.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-D4EII8Jj.js → flowDiagram-UKHOOZJN-B27ng5zu.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-ChvJZAgB.js → ganttDiagram-PKOTCBZU-CcC6b_7t.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DtOn41S8.js → gitGraphDiagram-DS77QQ5N-BX5kPGrO.js} +1 -1
- package/dist/assets/index-BTDHQ6Id.css +32 -0
- package/dist/assets/index-sFfz8iBR.js +4931 -0
- package/dist/assets/{infoDiagram-6WML65LV-DN_PVEJZ.js → infoDiagram-6WML65LV-CUP-SlN4.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-DbkF1kXb.js → ishikawaDiagram-WSZJBQD7-BTTDhOpX.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-pJwmhddE.js → journeyDiagram-NVQOT4AX-ARXcc61m.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-PPAPgNp5.js → kanban-definition-27J2QSJJ-BieMpqMA.js} +1 -1
- package/dist/assets/{linear-iPR-J9f7.js → linear-61vxjRnP.js} +1 -1
- package/dist/assets/{mermaid.core-BEUL86Z6.js → mermaid.core-nhnwkfQx.js} +5 -5
- package/dist/assets/{mindmap-definition-FAOFIHXS-BvZoBib7.js → mindmap-definition-FAOFIHXS-Cm6x5vT1.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-DhYreaUd.js → pegDiagram-VL7TDLO6-CcYBq_9H.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-CrOHlyD0.js → pieDiagram-7S7Q4E2Y-CfvIjfzo.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-D4g5yH3t.js → quadrantDiagram-CIZ2JOQS-SgYoWPNb.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-Dj39lHlf.js → railroadDiagram-AXF67PYL-D2Mu5E_f.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-1AS4Zgm_.js → requirementDiagram-LRYGKXZP-Azwe_k4Q.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-CKlMn19P.js → sankeyDiagram-W5VNT64P-DN1Ju3PA.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-B_j3qyvo.js → sequenceDiagram-SI44F4Z6-Bj4qC34S.js} +1 -1
- package/dist/assets/server.browser-CtX3Hdl5.js +27 -0
- package/dist/assets/{sizeCapture-X5ZJPWSS-Bp2Op16v.js → sizeCapture-X5ZJPWSS-Co4PdklG.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-C0cN6DoY.js → stateDiagram-OKZ733FA-nOvL9dRC.js} +1 -1
- package/dist/assets/stateDiagram-v2-UEYNNEHI-DNv8ppw7.js +1 -0
- package/dist/assets/{swimlanes-SLNWSIFB-BEvXOV9b.js → swimlanes-SLNWSIFB-CCK3wMid.js} +2 -2
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-DnfbNQEp.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-zdJQinvZ.js → timeline-definition-Z64GVDOM-BC29RNFm.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-pZlZCtEo.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-B9AlLQup.js → wardleyDiagram-T6FBY63Y-De8k2-zM.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-DTJX48Qg.js → xychartDiagram-ELKLHX3M-Bk8ykH0w.js} +1 -1
- package/dist/index.html +3 -3
- package/dist-server/server/index.js +7 -3
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/agent/agent.routes.js +2 -2
- package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
- package/dist-server/server/modules/agent/tests/agent.routes.test.js +30 -1
- 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 +32 -1
- package/dist-server/server/modules/database/migrations.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 +137 -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 +92 -0
- package/dist-server/server/modules/database/schema.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/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/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 +20 -1
- 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 +35 -6
- 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 +168 -38
- package/dist-server/server/modules/providers/list/claude/claude-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-sessions.provider.js +388 -50
- 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 +16 -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 +60 -49
- 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 +1565 -432
- 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-runtime.provider.js +8 -6
- 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 +258 -6
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +24 -0
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-capabilities.service.js +14 -0
- package/dist-server/server/modules/providers/services/provider-capabilities.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-history-cache.service.js +87 -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 +179 -9
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-auth.test.js +52 -0
- package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
- 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-sessions.test.js +465 -39
- package/dist-server/server/modules/providers/tests/claude-sessions.test.js.map +1 -1
- 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-runtime.test.js +51 -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 +304 -15
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/opencode-models.test.js +117 -4
- package/dist-server/server/modules/providers/tests/opencode-models.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/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 +120 -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 +45 -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 +163 -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 +255 -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 +10 -44
- 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 +166 -9
- 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 +9 -3
- package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
- 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/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 +80 -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/utils.js +34 -0
- package/dist-server/server/shared/utils.js.map +1 -1
- package/package.json +19 -16
- package/server/index.ts +11 -4
- package/server/modules/agent/agent.routes.ts +2 -2
- package/server/modules/agent/tests/agent.routes.test.ts +33 -1
- 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 +37 -0
- 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 +196 -3
- package/server/modules/database/repositories/user-preferences.db.ts +80 -0
- package/server/modules/database/schema.ts +96 -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/projects/services/project-delete.service.ts +13 -1
- package/server/modules/projects/services/project-star.service.ts +2 -2
- package/server/modules/providers/index.ts +4 -0
- package/server/modules/providers/list/claude/claude-auth.provider.ts +21 -1
- package/server/modules/providers/list/claude/claude-fork.provider.ts +57 -0
- package/server/modules/providers/list/claude/claude-models.provider.ts +38 -6
- package/server/modules/providers/list/claude/claude-runtime.provider.js +188 -39
- package/server/modules/providers/list/claude/claude-sessions.provider.ts +478 -54
- 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 +16 -0
- package/server/modules/providers/list/codex/{codex-runtime.provider.js → codex-runtime.provider.ts} +93 -66
- package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +9 -0
- package/server/modules/providers/list/codex/codex-sessions.provider.ts +1806 -477
- package/server/modules/providers/list/codex/codex.provider.ts +3 -0
- package/server/modules/providers/list/cursor/cursor-runtime.provider.js +8 -6
- package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +0 -1
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +279 -6
- package/server/modules/providers/provider.routes.ts +31 -0
- package/server/modules/providers/services/provider-capabilities.service.ts +23 -0
- package/server/modules/providers/services/provider-token-usage.service.ts +166 -39
- package/server/modules/providers/services/session-history-cache.service.ts +139 -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 +201 -9
- package/server/modules/providers/tests/claude-auth.test.ts +58 -0
- package/server/modules/providers/tests/claude-models.test.ts +87 -0
- package/server/modules/providers/tests/claude-sessions.test.ts +552 -40
- 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-runtime.test.ts +58 -0
- package/server/modules/providers/tests/codex-session-fork.test.ts +59 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +337 -15
- package/server/modules/providers/tests/opencode-models.test.ts +166 -8
- package/server/modules/providers/tests/provider-token-usage.service.test.ts +188 -1
- package/server/modules/providers/tests/session-fork.test.ts +173 -0
- package/server/modules/providers/tests/session-history-cache.service.test.ts +143 -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 +67 -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 +203 -0
- package/server/modules/scheduled-messages/services/scheduled-messages.service.ts +121 -0
- package/server/modules/scheduled-messages/tests/scheduled-messages.test.ts +310 -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/index.ts +8 -0
- package/server/modules/websocket/services/chat-run-registry.service.ts +17 -50
- package/server/modules/websocket/services/chat-session-writer.service.ts +36 -6
- package/server/modules/websocket/services/chat-websocket.service.ts +244 -15
- package/server/modules/websocket/services/session-upsert-broadcast.service.ts +108 -0
- package/server/modules/websocket/services/shell-websocket.service.ts +10 -3
- 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/session-upsert-broadcast.test.ts +138 -0
- package/server/modules/websocket/tests/shell-websocket.service.test.ts +108 -0
- package/server/shared/claude-cli-path.ts +24 -6
- package/server/shared/index.ts +3 -0
- package/server/shared/interfaces.ts +62 -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/types.ts +123 -2
- package/server/shared/utils.ts +40 -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
|
@@ -120,10 +120,13 @@ export class ClaudeSkillsProvider extends SkillsProvider {
|
|
|
120
120
|
if (!pluginName) {
|
|
121
121
|
continue;
|
|
122
122
|
}
|
|
123
|
+
// A plugin may ship commands, skills, or both, and the CLI offers
|
|
124
|
+
// both halves. Reading only the first folder found hid every skill
|
|
125
|
+
// that sits beside a commands folder -- and hid the whole plugin when
|
|
126
|
+
// its commands are in a format this reader does not take.
|
|
123
127
|
const commandsPath = path.join(pluginFolder, 'commands');
|
|
124
128
|
if (await pathExistsAsDirectory(commandsPath)) {
|
|
125
129
|
skills.push(...(await this.listPluginCommandSkills(commandsPath, pluginId, pluginName)));
|
|
126
|
-
continue;
|
|
127
130
|
}
|
|
128
131
|
const skillsPath = path.join(pluginFolder, 'skills');
|
|
129
132
|
if (!(await pathExistsAsDirectory(skillsPath))) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-skills.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude-skills.provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-skills.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude-skills.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { AbstractProvider } from '../../../../modules/providers/shared/base/abst
|
|
|
2
2
|
import { ClaudeProviderAuth } from '../../../../modules/providers/list/claude/claude-auth.provider.js';
|
|
3
3
|
import { ClaudeProviderModels } from '../../../../modules/providers/list/claude/claude-models.provider.js';
|
|
4
4
|
import { claudeRuntime } from '../../../../modules/providers/list/claude/claude-runtime.provider.js';
|
|
5
|
+
import { ClaudeForkProvider } from '../../../../modules/providers/list/claude/claude-fork.provider.js';
|
|
5
6
|
import { ClaudeMcpProvider } from '../../../../modules/providers/list/claude/claude-mcp.provider.js';
|
|
6
7
|
import { ClaudeSessionSynchronizer } from '../../../../modules/providers/list/claude/claude-session-synchronizer.provider.js';
|
|
7
8
|
import { ClaudeSessionsProvider } from '../../../../modules/providers/list/claude/claude-sessions.provider.js';
|
|
@@ -14,6 +15,7 @@ export class ClaudeProvider extends AbstractProvider {
|
|
|
14
15
|
skills = new ClaudeSkillsProvider();
|
|
15
16
|
sessions = new ClaudeSessionsProvider();
|
|
16
17
|
sessionSynchronizer = new ClaudeSessionSynchronizer();
|
|
18
|
+
fork = new ClaudeForkProvider();
|
|
17
19
|
constructor() {
|
|
18
20
|
super('claude');
|
|
19
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yEAAyE,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/claude/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,4DAA4D,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,yEAAyE,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AAWjG,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IACzC,OAAO,GAAqB,aAAa,CAAC;IAC1C,MAAM,GAAoB,IAAI,oBAAoB,EAAE,CAAC;IACrD,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAC9B,IAAI,GAAkB,IAAI,kBAAkB,EAAE,CAAC;IAC/C,MAAM,GAAoB,IAAI,oBAAoB,EAAE,CAAC;IACrD,QAAQ,GAAsB,IAAI,sBAAsB,EAAE,CAAC;IAC3D,mBAAmB,GAAiC,IAAI,yBAAyB,EAAE,CAAC;IACpF,IAAI,GAAkB,IAAI,kBAAkB,EAAE,CAAC;IAExD;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { stat } from 'node:fs/promises';
|
|
3
|
+
import { createRequire } from 'node:module';
|
|
4
|
+
import readline from 'node:readline';
|
|
5
|
+
import { AppError } from '../../../../shared/utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* Minimal JSON-RPC client for `codex app-server`.
|
|
8
|
+
*
|
|
9
|
+
* Codex ships two entry points and they expose different things. The
|
|
10
|
+
* `@openai/codex-sdk` this app runs conversations through is a wrapper around
|
|
11
|
+
* `codex exec`, and its whole surface is `startThread` and `resumeThread` —
|
|
12
|
+
* there is no way to branch a thread or to resume one partway. The same
|
|
13
|
+
* binary's `app-server` subcommand speaks JSON-RPC and does have that
|
|
14
|
+
* primitive, `thread/fork`, which is what the Codex IDE clients build their
|
|
15
|
+
* own "fork" and "edit an earlier message" on top of.
|
|
16
|
+
*
|
|
17
|
+
* So this is a second transport to the same CLI, opened only for the
|
|
18
|
+
* operations the SDK cannot express. Everything else still goes through the
|
|
19
|
+
* SDK.
|
|
20
|
+
*/
|
|
21
|
+
/** How long a single request may take before the child is killed. */
|
|
22
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
23
|
+
/**
|
|
24
|
+
* Resolves the `codex` launcher shipped in node_modules.
|
|
25
|
+
*
|
|
26
|
+
* Deliberately not the `codex` on PATH: a machine can have a second, older
|
|
27
|
+
* install, and the protocol this speaks is only guaranteed against the
|
|
28
|
+
* version this package depends on.
|
|
29
|
+
*/
|
|
30
|
+
function resolveCodexLauncher() {
|
|
31
|
+
const require_ = createRequire(import.meta.url);
|
|
32
|
+
try {
|
|
33
|
+
return require_.resolve('@openai/codex/bin/codex.js');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
throw new AppError('The Codex CLI package is not installed, so Codex conversations cannot be branched.', {
|
|
37
|
+
code: 'CODEX_APP_SERVER_UNAVAILABLE',
|
|
38
|
+
statusCode: 501,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Runs one exchange against a freshly spawned `codex app-server`.
|
|
44
|
+
*
|
|
45
|
+
* A process per operation rather than a pooled long-lived one: the handshake
|
|
46
|
+
* costs a fraction of a second, forking happens at most once per user action,
|
|
47
|
+
* and a shared child would need lifecycle handling — restarts, back-pressure,
|
|
48
|
+
* a crash taking every pending fork with it — for no measurable gain next to
|
|
49
|
+
* the model turn that follows.
|
|
50
|
+
*/
|
|
51
|
+
async function withAppServer(run) {
|
|
52
|
+
const launcher = resolveCodexLauncher();
|
|
53
|
+
const child = spawn(process.execPath, [launcher, 'app-server'], {
|
|
54
|
+
env: process.env,
|
|
55
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
56
|
+
});
|
|
57
|
+
// The server logs sandbox and skill warnings to stderr on every start. They
|
|
58
|
+
// are not failures and drowning the app log in them helps nobody, so stderr
|
|
59
|
+
// is only kept around to explain a spawn that dies.
|
|
60
|
+
let stderr = '';
|
|
61
|
+
child.stderr?.on('data', (chunk) => {
|
|
62
|
+
stderr = (stderr + String(chunk)).slice(-2000);
|
|
63
|
+
});
|
|
64
|
+
let nextRequestId = 1;
|
|
65
|
+
const pending = new Map();
|
|
66
|
+
let exitReason = null;
|
|
67
|
+
const reader = readline.createInterface({ input: child.stdout });
|
|
68
|
+
reader.on('line', (line) => {
|
|
69
|
+
if (!line.trim()) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
let message;
|
|
73
|
+
try {
|
|
74
|
+
message = JSON.parse(line);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Server-to-client notifications and any non-JSON banner are not
|
|
78
|
+
// replies to anything this client asked for.
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (typeof message.id !== 'number') {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
pending.get(message.id)?.(message);
|
|
85
|
+
pending.delete(message.id);
|
|
86
|
+
});
|
|
87
|
+
const failPending = (reason) => {
|
|
88
|
+
exitReason = reason;
|
|
89
|
+
for (const resolve of pending.values()) {
|
|
90
|
+
resolve({ error: { message: reason } });
|
|
91
|
+
}
|
|
92
|
+
pending.clear();
|
|
93
|
+
};
|
|
94
|
+
child.on('error', (error) => failPending(error.message));
|
|
95
|
+
child.on('exit', (code, signal) => {
|
|
96
|
+
failPending(`codex app-server exited (code ${code ?? 'null'}, signal ${signal ?? 'null'})`);
|
|
97
|
+
});
|
|
98
|
+
// A child that dies mid-request leaves its pipes broken, and the next write
|
|
99
|
+
// raises EPIPE on the stream rather than at the call site. Without a
|
|
100
|
+
// listener that is an unhandled 'error' event, which takes the whole server
|
|
101
|
+
// down over one failed fork.
|
|
102
|
+
child.stdin?.on('error', (error) => failPending(error.message));
|
|
103
|
+
child.stdout?.on('error', (error) => failPending(error.message));
|
|
104
|
+
child.stderr?.on('error', () => { });
|
|
105
|
+
const call = (method, params) => new Promise((resolve, reject) => {
|
|
106
|
+
if (exitReason) {
|
|
107
|
+
reject(new AppError(`Codex app-server is not running: ${exitReason}`, {
|
|
108
|
+
code: 'CODEX_APP_SERVER_UNAVAILABLE',
|
|
109
|
+
statusCode: 502,
|
|
110
|
+
}));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const id = nextRequestId++;
|
|
114
|
+
const timer = setTimeout(() => {
|
|
115
|
+
pending.delete(id);
|
|
116
|
+
reject(new AppError(`Codex app-server did not answer "${method}" within ${REQUEST_TIMEOUT_MS}ms.`, {
|
|
117
|
+
code: 'CODEX_APP_SERVER_TIMEOUT',
|
|
118
|
+
statusCode: 504,
|
|
119
|
+
}));
|
|
120
|
+
}, REQUEST_TIMEOUT_MS);
|
|
121
|
+
pending.set(id, (response) => {
|
|
122
|
+
clearTimeout(timer);
|
|
123
|
+
if (response.error) {
|
|
124
|
+
reject(new AppError(response.error.message || `Codex app-server rejected "${method}".`, {
|
|
125
|
+
code: 'CODEX_APP_SERVER_ERROR',
|
|
126
|
+
statusCode: 502,
|
|
127
|
+
details: { method, rpcCode: response.error.code },
|
|
128
|
+
}));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
resolve(response.result);
|
|
132
|
+
});
|
|
133
|
+
child.stdin?.write(`${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\n`);
|
|
134
|
+
});
|
|
135
|
+
try {
|
|
136
|
+
// `capabilities` is deliberately empty. `thread/fork` with `lastTurnId` is
|
|
137
|
+
// in the stable protocol; only `beforeTurnId` and the turn-listing methods
|
|
138
|
+
// are gated behind `experimentalApi`, and neither is needed here.
|
|
139
|
+
await call('initialize', {
|
|
140
|
+
clientInfo: { name: 'cloudcli', title: 'CloudCLI', version: '1' },
|
|
141
|
+
capabilities: {},
|
|
142
|
+
});
|
|
143
|
+
child.stdin?.write(`${JSON.stringify({ jsonrpc: '2.0', method: 'initialized', params: {} })}\n`);
|
|
144
|
+
return await run(call);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
if (error instanceof AppError && exitReason) {
|
|
148
|
+
throw new AppError(`${error.message}${stderr ? ` — ${stderr.trim().split('\n').slice(-1)[0]}` : ''}`, {
|
|
149
|
+
code: error.code,
|
|
150
|
+
statusCode: error.statusCode,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
reader.close();
|
|
157
|
+
child.kill();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
export const codexAppServer = {
|
|
161
|
+
/**
|
|
162
|
+
* Copies a thread into a new one that ends at `lastTurnId`, or copies the
|
|
163
|
+
* whole thread when it is omitted.
|
|
164
|
+
*
|
|
165
|
+
* `lastTurnId` is inclusive of the turn it names, which is the same
|
|
166
|
+
* convention the app's edit anchor uses ("the last row to keep").
|
|
167
|
+
*
|
|
168
|
+
* `cwd` decides the working directory recorded in the copy's `session_meta`,
|
|
169
|
+
* and that field is what the session indexer keys a session's project off —
|
|
170
|
+
* omitting it would file every fork under whatever directory this server
|
|
171
|
+
* happens to be running from.
|
|
172
|
+
*/
|
|
173
|
+
async forkThread(input) {
|
|
174
|
+
return withAppServer(async (call) => {
|
|
175
|
+
const result = await call('thread/fork', {
|
|
176
|
+
threadId: input.threadId,
|
|
177
|
+
...(input.lastTurnId ? { lastTurnId: input.lastTurnId } : {}),
|
|
178
|
+
...(input.cwd ? { cwd: input.cwd } : {}),
|
|
179
|
+
});
|
|
180
|
+
const threadId = typeof result?.thread?.id === 'string' ? result.thread.id : '';
|
|
181
|
+
const path = typeof result?.thread?.path === 'string' ? result.thread.path : '';
|
|
182
|
+
if (!threadId || !path) {
|
|
183
|
+
throw new AppError('Codex reported a fork without a thread id or transcript path.', {
|
|
184
|
+
code: 'FORK_FAILED',
|
|
185
|
+
statusCode: 502,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// Confirmed rather than trusted: both callers are about to point a
|
|
189
|
+
// database row at this file, and a row naming a transcript that is not
|
|
190
|
+
// there is a session that can never be opened.
|
|
191
|
+
try {
|
|
192
|
+
await stat(path);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
throw new AppError('Codex reported a fork but wrote no transcript for it.', {
|
|
196
|
+
code: 'FORK_FAILED',
|
|
197
|
+
statusCode: 502,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return { threadId, path };
|
|
201
|
+
});
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
//# sourceMappingURL=codex-app-server.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-app-server.client.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-app-server.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { codexAppServer } from '../../../../modules/providers/list/codex/codex-app-server.client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Branches a Codex conversation into an independent thread.
|
|
4
|
+
*
|
|
5
|
+
* `thread/fork` writes a real rollout with its own thread id and a
|
|
6
|
+
* `forked_from_id` back-reference, which is what makes the copy resumable
|
|
7
|
+
* rather than an inert duplicate of the file.
|
|
8
|
+
*
|
|
9
|
+
* One difference from the Claude fork worth knowing about: Codex's unit is a
|
|
10
|
+
* turn, not a row. `upToAnchorId` names the turn a user message belongs to and
|
|
11
|
+
* the cut is inclusive of it, so forking from a message keeps that message
|
|
12
|
+
* *and the answer it got*. Claude's `upToMessageId` can stop at the prompt
|
|
13
|
+
* itself. There is no way to express the finer cut here — a turn is written as
|
|
14
|
+
* one thing — and the coarser one is the more useful of the two anyway.
|
|
15
|
+
*/
|
|
16
|
+
export class CodexForkProvider {
|
|
17
|
+
async forkSession(input) {
|
|
18
|
+
// `title` is deliberately not forwarded. The sidebar name lives in this
|
|
19
|
+
// app's own session row, and naming the thread inside Codex would mean a
|
|
20
|
+
// second call that could fail after the fork already succeeded.
|
|
21
|
+
const fork = await codexAppServer.forkThread({
|
|
22
|
+
threadId: input.providerSessionId,
|
|
23
|
+
lastTurnId: input.upToAnchorId,
|
|
24
|
+
cwd: input.projectPath,
|
|
25
|
+
});
|
|
26
|
+
// The path is the one the server reported and already confirmed on disk,
|
|
27
|
+
// not one derived from the source: a fork lands in today's date directory
|
|
28
|
+
// rather than beside the transcript it was copied from.
|
|
29
|
+
return { providerSessionId: fork.threadId, jsonlPath: fork.path };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=codex-fork.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-fork.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-fork.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAC;AAG3F;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,WAAW,CAAC,KAMjB;QACC,wEAAwE;QACxE,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;YAC3C,QAAQ,EAAE,KAAK,CAAC,iBAAiB;YACjC,UAAU,EAAE,KAAK,CAAC,YAAY;YAC9B,GAAG,EAAE,KAAK,CAAC,WAAW;SACvB,CAAC,CAAC;QAEH,yEAAyE;QACzE,0EAA0E;QAC1E,wDAAwD;QACxD,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;CACF"}
|
|
@@ -6,6 +6,22 @@ import { buildDefaultProviderCurrentActiveModel, readObjectRecord, readOptionalS
|
|
|
6
6
|
/** Curated Codex catalog shipped as immutable CloudCLI defaults. */
|
|
7
7
|
export const CODEX_PREDEFINED_MODELS = {
|
|
8
8
|
OPTIONS: [
|
|
9
|
+
{
|
|
10
|
+
value: 'gpt-6-astra',
|
|
11
|
+
label: 'GPT-6 Astra',
|
|
12
|
+
description: 'Our most capable model for complex, demanding work.',
|
|
13
|
+
effort: {
|
|
14
|
+
default: 'low',
|
|
15
|
+
values: [
|
|
16
|
+
{ value: 'low' },
|
|
17
|
+
{ value: 'medium' },
|
|
18
|
+
{ value: 'high' },
|
|
19
|
+
{ value: 'xhigh' },
|
|
20
|
+
{ value: 'max' },
|
|
21
|
+
{ value: 'ultra' },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
9
25
|
{
|
|
10
26
|
value: 'gpt-5.6-sol',
|
|
11
27
|
label: 'GPT-5.6 Sol',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-models.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-models.provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codex-models.provider.js","sourceRoot":"","sources":["../../../../../../server/modules/providers/list/codex/codex-models.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,15 +8,17 @@
|
|
|
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
|
import { Codex } from '@openai/codex-sdk';
|
|
16
|
-
import { appendFilesInputTag, buildCodexInputItems, normalizeImageDescriptors } from '../../../../shared/
|
|
14
|
+
import { appendFilesInputTag, buildCodexInputItems, normalizeImageDescriptors, createCompleteMessage, createNormalizedMessage, } from '../../../../shared/index.js';
|
|
17
15
|
import { notifyRunFailed, notifyRunStopped } from '../../../../modules/notifications/index.js';
|
|
18
|
-
import { createCompleteMessage, createNormalizedMessage } from '../../../../shared/utils.js';
|
|
19
16
|
const activeCodexSessions = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* Item types whose in-flight updates are worth showing. These are the ones a
|
|
19
|
+
* user waits on — a shell command's output, an MCP call, and the running plan.
|
|
20
|
+
*/
|
|
21
|
+
const PROGRESSIVE_CODEX_ITEM_TYPES = new Set(['command_execution', 'mcp_tool_call', 'todo_list']);
|
|
20
22
|
function readUsageNumber(value) {
|
|
21
23
|
const parsed = Number(value);
|
|
22
24
|
return Number.isFinite(parsed) ? parsed : 0;
|
|
@@ -56,12 +58,16 @@ function transformCodexEvent(event) {
|
|
|
56
58
|
if (!item) {
|
|
57
59
|
return { type: event.type, item: null };
|
|
58
60
|
}
|
|
59
|
-
//
|
|
61
|
+
// `itemId` is the SDK's stable per-item id. Carrying it through means an
|
|
62
|
+
// in-progress row and its later completion normalize to the same message
|
|
63
|
+
// id, so the client updates one transcript entry instead of appending a
|
|
64
|
+
// new one for every progress tick.
|
|
60
65
|
switch (item.type) {
|
|
61
66
|
case 'agent_message':
|
|
62
67
|
return {
|
|
63
68
|
type: 'item',
|
|
64
69
|
itemType: 'agent_message',
|
|
70
|
+
itemId: item.id,
|
|
65
71
|
message: {
|
|
66
72
|
role: 'assistant',
|
|
67
73
|
content: item.text
|
|
@@ -71,6 +77,7 @@ function transformCodexEvent(event) {
|
|
|
71
77
|
return {
|
|
72
78
|
type: 'item',
|
|
73
79
|
itemType: 'reasoning',
|
|
80
|
+
itemId: item.id,
|
|
74
81
|
message: {
|
|
75
82
|
role: 'assistant',
|
|
76
83
|
content: item.text,
|
|
@@ -81,6 +88,7 @@ function transformCodexEvent(event) {
|
|
|
81
88
|
return {
|
|
82
89
|
type: 'item',
|
|
83
90
|
itemType: 'command_execution',
|
|
91
|
+
itemId: item.id,
|
|
84
92
|
command: item.command,
|
|
85
93
|
output: item.aggregated_output,
|
|
86
94
|
exitCode: item.exit_code,
|
|
@@ -90,6 +98,7 @@ function transformCodexEvent(event) {
|
|
|
90
98
|
return {
|
|
91
99
|
type: 'item',
|
|
92
100
|
itemType: 'file_change',
|
|
101
|
+
itemId: item.id,
|
|
93
102
|
changes: item.changes,
|
|
94
103
|
status: item.status
|
|
95
104
|
};
|
|
@@ -97,6 +106,7 @@ function transformCodexEvent(event) {
|
|
|
97
106
|
return {
|
|
98
107
|
type: 'item',
|
|
99
108
|
itemType: 'mcp_tool_call',
|
|
109
|
+
itemId: item.id,
|
|
100
110
|
server: item.server,
|
|
101
111
|
tool: item.tool,
|
|
102
112
|
arguments: item.arguments,
|
|
@@ -108,18 +118,21 @@ function transformCodexEvent(event) {
|
|
|
108
118
|
return {
|
|
109
119
|
type: 'item',
|
|
110
120
|
itemType: 'web_search',
|
|
121
|
+
itemId: item.id,
|
|
111
122
|
query: item.query
|
|
112
123
|
};
|
|
113
124
|
case 'todo_list':
|
|
114
125
|
return {
|
|
115
126
|
type: 'item',
|
|
116
127
|
itemType: 'todo_list',
|
|
128
|
+
itemId: item.id,
|
|
117
129
|
items: item.items
|
|
118
130
|
};
|
|
119
131
|
case 'error':
|
|
120
132
|
return {
|
|
121
133
|
type: 'item',
|
|
122
134
|
itemType: 'error',
|
|
135
|
+
itemId: item.id,
|
|
123
136
|
message: {
|
|
124
137
|
role: 'error',
|
|
125
138
|
content: item.message
|
|
@@ -129,6 +142,7 @@ function transformCodexEvent(event) {
|
|
|
129
142
|
return {
|
|
130
143
|
type: 'item',
|
|
131
144
|
itemType: item.type,
|
|
145
|
+
itemId: item.id,
|
|
132
146
|
item: item
|
|
133
147
|
};
|
|
134
148
|
}
|
|
@@ -184,7 +198,9 @@ function mapPermissionModeToCodexOptions(permissionMode) {
|
|
|
184
198
|
default:
|
|
185
199
|
return {
|
|
186
200
|
sandboxMode: 'workspace-write',
|
|
187
|
-
|
|
201
|
+
// Current Codex CLI versions reject the retired `untrusted` policy.
|
|
202
|
+
// Keep sandboxing enabled; exec cannot grant interactive approval requests.
|
|
203
|
+
approvalPolicy: 'on-request'
|
|
188
204
|
};
|
|
189
205
|
}
|
|
190
206
|
}
|
|
@@ -194,7 +210,7 @@ function mapPermissionModeToCodexOptions(permissionMode) {
|
|
|
194
210
|
* @param {object} options - Options including cwd, sessionId, model, permissionMode
|
|
195
211
|
* @param {WebSocket|object} ws - WebSocket connection or response writer
|
|
196
212
|
*/
|
|
197
|
-
|
|
213
|
+
async function queryCodex(command, options = {}, ws, context) {
|
|
198
214
|
const { sessionId, sessionSummary, cwd, projectPath, model, effort, images, files, permissionMode = 'default' } = options;
|
|
199
215
|
// Callers pass the stable app session id; the SDK resumes threads with the
|
|
200
216
|
// provider-native id recorded on the session row.
|
|
@@ -215,6 +231,12 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
215
231
|
let capturedSessionId = providerSessionId;
|
|
216
232
|
let sessionCreatedSent = false;
|
|
217
233
|
let terminalFailure = null;
|
|
234
|
+
// Codex surfaces API failures as streamed error items/turn.failed events, and
|
|
235
|
+
// then the SDK also throws "Codex Exec exited with code N: <stderr>" once the
|
|
236
|
+
// process dies. Showing both means the rendered error is followed by a raw
|
|
237
|
+
// stderr dump of unrelated CLI log lines, so the thrown wrapper is dropped
|
|
238
|
+
// when the stream already reported the failure.
|
|
239
|
+
let errorSurfaced = false;
|
|
218
240
|
const abortController = new AbortController();
|
|
219
241
|
// Session-map key: the app session id when the caller supplied one, else
|
|
220
242
|
// the provider-native thread id once captured (legacy/direct API callers).
|
|
@@ -262,7 +284,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
262
284
|
for await (const event of streamedTurn.events) {
|
|
263
285
|
// Capture thread/session id lazily from the stream (Codex emits this asynchronously).
|
|
264
286
|
if (event.type === 'thread.started') {
|
|
265
|
-
const discoveredSessionId = event.thread_id ||
|
|
287
|
+
const discoveredSessionId = event.thread_id || null;
|
|
266
288
|
if (discoveredSessionId && !capturedSessionId) {
|
|
267
289
|
capturedSessionId = discoveredSessionId;
|
|
268
290
|
registerSession(sessionKey());
|
|
@@ -280,15 +302,25 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
280
302
|
break;
|
|
281
303
|
}
|
|
282
304
|
if (sessionKey()) {
|
|
283
|
-
const session = activeCodexSessions.get(sessionKey());
|
|
305
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
284
306
|
if (session?.status === 'aborted') {
|
|
285
307
|
break;
|
|
286
308
|
}
|
|
287
309
|
}
|
|
288
|
-
|
|
310
|
+
// Progress events used to be dropped, so a long shell command or a
|
|
311
|
+
// growing plan showed nothing until it finished. They are forwarded now;
|
|
312
|
+
// every item carries a stable id, so the client replaces the row it
|
|
313
|
+
// already has rather than stacking a new one per tick. Text items are
|
|
314
|
+
// still skipped mid-flight because assistant prose arrives through the
|
|
315
|
+
// separate streaming path.
|
|
316
|
+
if ((event.type === 'item.started' || event.type === 'item.updated')
|
|
317
|
+
&& !PROGRESSIVE_CODEX_ITEM_TYPES.has(event.item?.type)) {
|
|
289
318
|
continue;
|
|
290
319
|
}
|
|
291
320
|
const transformed = transformCodexEvent(event);
|
|
321
|
+
if (transformed.type === 'error' || transformed.itemType === 'error') {
|
|
322
|
+
errorSurfaced = true;
|
|
323
|
+
}
|
|
292
324
|
// Normalize the transformed event into NormalizedMessage(s) via adapter
|
|
293
325
|
const normalizedMsgs = context.normalizeMessage(transformed, capturedSessionId || sessionId || null);
|
|
294
326
|
for (const msg of normalizedMsgs) {
|
|
@@ -296,6 +328,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
296
328
|
}
|
|
297
329
|
if (event.type === 'turn.failed' && !terminalFailure) {
|
|
298
330
|
terminalFailure = event.error || new Error('Turn failed');
|
|
331
|
+
errorSurfaced = true;
|
|
299
332
|
// Notifications are app-facing, so they carry the app session id.
|
|
300
333
|
notifyRunFailed({
|
|
301
334
|
userId: ws?.userId || null,
|
|
@@ -315,7 +348,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
315
348
|
}
|
|
316
349
|
// Send the terminal completion event — skipped for aborted runs, whose
|
|
317
350
|
// terminal `complete` (aborted: true) was already sent by abort-session.
|
|
318
|
-
const runSession =
|
|
351
|
+
const runSession = activeCodexSessions.get(sessionKey() || '');
|
|
319
352
|
const runAborted = runSession?.status === 'aborted' || abortController.signal.aborted;
|
|
320
353
|
if (!runAborted) {
|
|
321
354
|
sendMessage(ws, createCompleteMessage({
|
|
@@ -336,18 +369,21 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
336
369
|
}
|
|
337
370
|
}
|
|
338
371
|
catch (error) {
|
|
339
|
-
const session =
|
|
372
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
373
|
+
const runError = error instanceof Error ? error : new Error(String(error));
|
|
340
374
|
const wasAborted = session?.status === 'aborted' ||
|
|
341
|
-
|
|
342
|
-
|
|
375
|
+
runError.name === 'AbortError' ||
|
|
376
|
+
runError.message.toLowerCase().includes('aborted');
|
|
343
377
|
if (!wasAborted) {
|
|
344
378
|
console.error('[Codex] Error:', error);
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
379
|
+
if (!errorSurfaced) {
|
|
380
|
+
// Check if Codex SDK is available for a clearer error message
|
|
381
|
+
const installed = await context.isProviderInstalled();
|
|
382
|
+
const errorContent = !installed
|
|
383
|
+
? 'Codex CLI is not configured. Please set up authentication first.'
|
|
384
|
+
: runError.message;
|
|
385
|
+
sendMessage(ws, createNormalizedMessage({ kind: 'error', content: errorContent, sessionId: capturedSessionId || sessionId || null, provider: 'codex' }));
|
|
386
|
+
}
|
|
351
387
|
sendMessage(ws, createCompleteMessage({
|
|
352
388
|
provider: 'codex',
|
|
353
389
|
sessionId: capturedSessionId || sessionId || null,
|
|
@@ -367,7 +403,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
367
403
|
finally {
|
|
368
404
|
// Update session status
|
|
369
405
|
if (sessionKey()) {
|
|
370
|
-
const session = activeCodexSessions.get(sessionKey());
|
|
406
|
+
const session = activeCodexSessions.get(sessionKey() || '');
|
|
371
407
|
if (session) {
|
|
372
408
|
session.status = session.status === 'aborted' ? 'aborted' : 'completed';
|
|
373
409
|
}
|
|
@@ -379,7 +415,7 @@ export async function queryCodex(command, options = {}, ws, context) {
|
|
|
379
415
|
* @param {string} sessionId - Session ID to abort
|
|
380
416
|
* @returns {boolean} - Whether abort was successful
|
|
381
417
|
*/
|
|
382
|
-
|
|
418
|
+
function abortCodexSession(sessionId) {
|
|
383
419
|
const session = activeCodexSessions.get(sessionId);
|
|
384
420
|
if (!session) {
|
|
385
421
|
return false;
|
|
@@ -393,32 +429,7 @@ export function abortCodexSession(sessionId) {
|
|
|
393
429
|
}
|
|
394
430
|
return true;
|
|
395
431
|
}
|
|
396
|
-
/**
|
|
397
|
-
* Check if a session is active
|
|
398
|
-
* @param {string} sessionId - Session ID to check
|
|
399
|
-
* @returns {boolean} - Whether session is active
|
|
400
|
-
*/
|
|
401
|
-
export function isCodexSessionActive(sessionId) {
|
|
402
|
-
const session = activeCodexSessions.get(sessionId);
|
|
403
|
-
return session?.status === 'running';
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Get all active sessions
|
|
407
|
-
* @returns {Array} - Array of active session info
|
|
408
|
-
*/
|
|
409
|
-
export function getActiveCodexSessions() {
|
|
410
|
-
const sessions = [];
|
|
411
|
-
for (const [id, session] of activeCodexSessions.entries()) {
|
|
412
|
-
if (session.status === 'running') {
|
|
413
|
-
sessions.push({
|
|
414
|
-
id,
|
|
415
|
-
status: session.status,
|
|
416
|
-
startedAt: session.startedAt
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
return sessions;
|
|
421
|
-
}
|
|
432
|
+
/** Used by the providers module's CodexProvider to run and abort SDK turns. */
|
|
422
433
|
export const codexRuntime = {
|
|
423
434
|
run: queryCodex,
|
|
424
435
|
abort: abortCodexSession,
|