@jingyi0605/codingns 0.6.1 → 0.7.0
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/bin/codingns.mjs +225 -0
- package/dist/public/assets/AdaptiveButlerPage-B8mg25ze.js +3 -0
- package/dist/public/assets/{App-Dsf3ooXU.js → App-C2lNmeKL.js} +6 -6
- package/dist/public/assets/{BootstrapPage-CE0m1qSR.js → BootstrapPage-CAVA-a8h.js} +1 -1
- package/dist/public/assets/ConversationPage-B6BGOX4C.js +6 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-Dxarr_Wf.js → DesktopDetachPreviewPage-B37DUL15.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-VytPwJ4c.js → DesktopWindowPage-CDA6l7lm.js} +1 -1
- package/dist/public/assets/{FileContextPanel-DwFzLsOp.js → FileContextPanel-CMGTtAB6.js} +1 -1
- package/dist/public/assets/{GitSidebar-CH6WqTrM.js → GitSidebar--DCqBiGL.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-DcxKM00P.js → MobileCreateSessionSheet-THIrIzJ3.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-C5rIKQT6.js → MobileTopHeaderFrame-D-X7pVnV.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-CfUnHgv_.js → MobileWorkspaceSwitcherHeader-Cczi7RYu.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-CgMvVZwa.js → RelayConnectEntryPage-D417tgWj.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-CFul__z1.js → ServerSettingsModal-BdTxbRbU.js} +1 -1
- package/dist/public/assets/SessionIndexPage-D5iefVcc.js +1 -0
- package/dist/public/assets/SettingsPage-iCFe_DHP.js +2 -0
- package/dist/public/assets/{TerminalManagerPanel-BbORd-ee.js → TerminalManagerPanel-CtldwWz8.js} +1 -1
- package/dist/public/assets/{TerminalPage-DWHv6mlu.js → TerminalPage-DAzQTmQC.js} +19 -19
- package/dist/public/assets/{TerminalRuntimeFallbackModal-B29YxbQe.js → TerminalRuntimeFallbackModal-DLOhAvaq.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-Dx9cv9hu.js → ToolFilesPage-D7thcDEv.js} +1 -1
- package/dist/public/assets/{ToolGitPage-D7H3vAia.js → ToolGitPage-uPRsxdcn.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-PqQWxsy-.js → ToolProcessesPage-B1uOk0Ef.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-CX05Pe_4.js → ToolsHomePage-rU3V8mmh.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-CchkAC75.js → WorkbenchLandingPage-BudM2C69.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-Dybarc1V.js +244 -0
- package/dist/public/assets/WorkbenchModal-DMQutm1x.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Cy4WBbzq.js +1 -0
- package/dist/public/assets/{WorkbenchShellRoute-RGZpA0_J.css → WorkbenchShellRoute-DhQo_0vu.css} +1 -1
- package/dist/public/assets/{WorkspaceDebugDetailPage-Deqy2_pO.js → WorkspaceDebugDetailPage-CHqo-uDf.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-Cvf-ZdlB.js → WorkspaceDetailPage-CGkAH1W-.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-Dsyvqyk1.js → WorkspaceHomePage-CfuPVITd.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-DROQJ9v3.js → client-runtime-manager-CKbtaemV.js} +1 -1
- package/dist/public/assets/file-tree-icon-Bc0KADEl.js +3 -0
- package/dist/public/assets/index-DNRyROOG.css +1 -0
- package/dist/public/assets/index-oGylLBIX.js +42 -0
- package/dist/public/assets/{login-direct-candidate-resolver-DotM530R.js → login-direct-candidate-resolver-DjJMbqB7.js} +1 -1
- package/dist/public/assets/model-switch-api-T55eW6D4.js +1 -0
- package/dist/public/assets/{preferences-service-BG6GKG29.js → preferences-service-BTKBl5xM.js} +1 -1
- package/dist/public/assets/realtime-client-ww7MnbTD.js +1 -0
- package/dist/public/assets/{relay-entry-pmr-c42O.js → relay-entry-sdeFnTbY.js} +1 -1
- package/dist/public/assets/styles-BjPytabP.css +1 -0
- package/dist/public/assets/{terminal-runtime-meta-8_uRZf7h.js → terminal-runtime-meta-Cvt1ID92.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-DWX7LXQu.js → useRegisteredDebugTemplates-O-ymgLd9.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.js +21 -1
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-base-url-resolver.d.ts +16 -0
- package/dist/server/config/opencode-base-url-resolver.js +154 -0
- package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
- package/dist/server/helpers/wechat-claw-runtime/main.d.ts +1 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js +38 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js +32 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.d.ts +16 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js +209 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.d.ts +18 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js +135 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js +394 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js +64 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.d.ts +167 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js +3 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js +160 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js +24 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/server.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js +36 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js.map +1 -0
- package/dist/server/middlewares/auth-guard.js +4 -1
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +20 -2
- package/dist/server/modules/butler/butler-control-session-service.js +121 -74
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-profile-service.js +16 -4
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.js +44 -15
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/channels/channel-bridge-service.d.ts +55 -0
- package/dist/server/modules/channels/channel-bridge-service.js +340 -0
- package/dist/server/modules/channels/channel-bridge-service.js.map +1 -0
- package/dist/server/modules/channels/channel-controller.d.ts +52 -0
- package/dist/server/modules/channels/channel-controller.js +54 -0
- package/dist/server/modules/channels/channel-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-delivery-service.d.ts +63 -0
- package/dist/server/modules/channels/channel-delivery-service.js +429 -0
- package/dist/server/modules/channels/channel-delivery-service.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-controller.d.ts +15 -0
- package/dist/server/modules/channels/channel-gateway-controller.js +16 -0
- package/dist/server/modules/channels/channel-gateway-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-service.d.ts +24 -0
- package/dist/server/modules/channels/channel-gateway-service.js +56 -0
- package/dist/server/modules/channels/channel-gateway-service.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-adapters.d.ts +46 -0
- package/dist/server/modules/channels/channel-platform-adapters.js +315 -0
- package/dist/server/modules/channels/channel-platform-adapters.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-catalog.d.ts +3 -0
- package/dist/server/modules/channels/channel-platform-catalog.js +42 -0
- package/dist/server/modules/channels/channel-platform-catalog.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-scheduler.d.ts +31 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js +93 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-service.d.ts +46 -0
- package/dist/server/modules/channels/channel-polling-service.js +176 -0
- package/dist/server/modules/channels/channel-polling-service.js.map +1 -0
- package/dist/server/modules/channels/channel-service.d.ts +108 -0
- package/dist/server/modules/channels/channel-service.js +397 -0
- package/dist/server/modules/channels/channel-service.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-client.d.ts +51 -0
- package/dist/server/modules/channels/wechat-claw-client.js +245 -0
- package/dist/server/modules/channels/wechat-claw-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.d.ts +4 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js +13 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.d.ts +14 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js +95 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.d.ts +16 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js +133 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.d.ts +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js +2 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js.map +1 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js +125 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
- package/dist/server/modules/opencli/opencli-controller.js +30 -0
- package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
- package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
- package/dist/server/modules/opencli/opencli-health-service.js +106 -0
- package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
- package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
- package/dist/server/modules/opencli/opencli-management-service.js +152 -0
- package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
- package/dist/server/modules/provider/provider-catalog-service.d.ts +45 -0
- package/dist/server/modules/provider/provider-catalog-service.js +204 -0
- package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
- package/dist/server/modules/provider/provider-controller.d.ts +16 -2
- package/dist/server/modules/provider/provider-controller.js +49 -6
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
- package/dist/server/modules/provider/provider-disabled.js +45 -0
- package/dist/server/modules/provider/provider-disabled.js.map +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +3 -3
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +12 -8
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/provider/provider-runtime-state-service.d.ts +24 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js +141 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js.map +1 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
- package/dist/server/modules/sessions/session-history-service.d.ts +9 -3
- package/dist/server/modules/sessions/session-history-service.js +198 -62
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +8 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +99 -88
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
- package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +18 -1
- package/dist/server/modules/sessions/session-provider-config-service.js +142 -17
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
- package/dist/server/modules/skills/skill-manager-service.js +26 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +2 -0
- package/dist/server/modules/tasks/task-types.js +2 -0
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/routes/channels.d.ts +3 -0
- package/dist/server/routes/channels.js +16 -0
- package/dist/server/routes/channels.js.map +1 -0
- package/dist/server/routes/opencli.d.ts +3 -0
- package/dist/server/routes/opencli.js +7 -0
- package/dist/server/routes/opencli.js.map +1 -0
- package/dist/server/routes/providers.js +5 -2
- package/dist/server/routes/providers.js.map +1 -1
- package/dist/server/routes/public.d.ts +2 -1
- package/dist/server/routes/public.js +3 -1
- package/dist/server/routes/public.js.map +1 -1
- package/dist/server/server/create-server.d.ts +30 -0
- package/dist/server/server/create-server.js +104 -12
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/http/error-handler.js +59 -3
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/storage/repositories/channel-account-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-account-repository.js +153 -0
- package/dist/server/storage/repositories/channel-account-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-delivery-repository.d.ts +13 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js +156 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js +144 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-thread-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-thread-repository.js +152 -0
- package/dist/server/storage/repositories/channel-thread-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-control-repository.js +51 -0
- package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js +50 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +53 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +180 -0
- package/dist/server/types/domain.d.ts +132 -0
- package/dist/server/ws/workbench-ws-hub.js +8 -2
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +28 -11
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +61 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +5 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +94 -21
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-Dw72U3hG.js +0 -3
- package/dist/public/assets/ConversationPage-8wOY7SX-.js +0 -4
- package/dist/public/assets/SessionIndexPage-B-tRhBXC.js +0 -1
- package/dist/public/assets/SettingsPage-C9LGxSQZ.js +0 -1
- package/dist/public/assets/WorkbenchLayout-pOZvEqp7.js +0 -3
- package/dist/public/assets/WorkbenchModal-ColqvV6a.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-C0_h4lP6.js +0 -1
- package/dist/public/assets/file-tree-icon-Bp3Ntt7u.js +0 -31
- package/dist/public/assets/index-B84Po2NA.css +0 -1
- package/dist/public/assets/index-C-0oeG_5.js +0 -42
- package/dist/public/assets/model-switch-api-Bh9nYslz.js +0 -1
- package/dist/public/assets/session-runtime-machine-YN84QBlr.js +0 -21
- package/dist/public/assets/styles-CsEMfdaS.css +0 -1
- /package/dist/public/assets/{styles-DRVvx_kv.js → styles-lhQGDlPF.js} +0 -0
|
@@ -16,15 +16,20 @@ export class SessionLiveRuntimeRouterService {
|
|
|
16
16
|
listQueuedMessages = async (sessionId, userId) => this.resolveServiceForSession(sessionId).listQueuedMessages(sessionId, userId);
|
|
17
17
|
deleteQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).deleteQueuedMessage(sessionId, userId, queueItemId);
|
|
18
18
|
steerQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).steerQueuedMessage(sessionId, userId, queueItemId);
|
|
19
|
-
getClaudeHookBridgeConfig = () => this.primaryService.getClaudeHookBridgeConfig();
|
|
20
|
-
ingestClaudeHookEvent = async (payload) => {
|
|
19
|
+
getClaudeHookBridgeConfig = (provider) => this.primaryService.getClaudeHookBridgeConfig(provider);
|
|
20
|
+
ingestClaudeHookEvent = async (providerOrPayload, payload) => {
|
|
21
|
+
const provider = typeof providerOrPayload === "string" ? providerOrPayload : null;
|
|
21
22
|
for (const service of this.services) {
|
|
22
|
-
const result =
|
|
23
|
+
const result = provider
|
|
24
|
+
? await service.ingestClaudeHookEvent(provider, payload)
|
|
25
|
+
: await service.ingestClaudeHookEvent(providerOrPayload);
|
|
23
26
|
if (!result.ignored || result.sessionId) {
|
|
24
27
|
return result;
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
|
-
return
|
|
30
|
+
return provider
|
|
31
|
+
? this.primaryService.ingestClaudeHookEvent(provider, payload)
|
|
32
|
+
: this.primaryService.ingestClaudeHookEvent(providerOrPayload);
|
|
28
33
|
};
|
|
29
34
|
resolveLiveActivityObservation = (sessionId) => this.findOwningService(sessionId)?.resolveLiveActivityObservation(sessionId) ?? null;
|
|
30
35
|
resolveServiceForSession(sessionId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-live-runtime-router-service.js","sourceRoot":"","sources":["../../../../src/modules/sessions/session-live-runtime-router-service.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,+BAA+B;IAIvB;IAHF,QAAQ,CAAiD;IAE1E,YACmB,cAAmD,EACpE,iBAAiE;QADhD,mBAAc,GAAd,cAAc,CAAqC;QAGpE,IAAI,CAAC,QAAQ,GAAG,CAAC,cAAc,EAAE,GAAG,iBAAiB,CAAC,CAAC;IACzD,CAAC;IAEQ,gBAAgB,GAAkD,KAAK,EAAE,KAAK,EAAE,EAAE,CACzF,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAErC,eAAe,GAAiD,KAAK,EAAE,KAAK,EAAE,EAAE,CACvF,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAE/D,kBAAkB,GAAoD,KAAK,EAAE,KAAK,EAAE,EAAE,CAC7F,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAElE,iBAAiB,GAAmD,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CACvG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEvE,gBAAgB,GAAkD,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CACrG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEtE,gBAAgB,GAAG,CAC1B,SAAiB,EACjB,UAA+F,EACzE,EAAE,CACxB,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAE1E,sBAAsB,GAAwD,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CACjH,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAE5E,sBAAsB,GAAwD,KAAK,EAC1F,SAAS,EACT,MAAM,EACN,SAAS,EACT,KAAK,EACL,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAEjG,kBAAkB,GAAoD,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CACzG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAExE,mBAAmB,GAAqD,KAAK,EACpF,SAAS,EACT,MAAM,EACN,WAAW,EACX,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAEzF,kBAAkB,GAAoD,KAAK,EAClF,SAAS,EACT,MAAM,EACN,WAAW,EACX,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAExF,yBAAyB,GAA2D,
|
|
1
|
+
{"version":3,"file":"session-live-runtime-router-service.js","sourceRoot":"","sources":["../../../../src/modules/sessions/session-live-runtime-router-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,9 @@ import type { SessionAttachmentInput } from "./session-message-attachment-servic
|
|
|
14
14
|
import { SessionMessageAttachmentService } from "./session-message-attachment-service.js";
|
|
15
15
|
import { type SessionPermissionEnvelope, type SessionPermissionReplyInput, type SessionPermissionRequestView } from "./session-permission-request-service.js";
|
|
16
16
|
import type { SessionHistoryEnvelope, SessionHistoryMessageWithOrigin, SessionHistoryService } from "./session-history-service.js";
|
|
17
|
+
import { type ClaudeCompatibleProviderId } from "./claude-compatible-provider-registry.js";
|
|
17
18
|
import { SessionProviderConfigService } from "./session-provider-config-service.js";
|
|
19
|
+
import type { OpenCliSessionPromptService } from "../opencli/opencli-session-prompt-service.js";
|
|
18
20
|
interface RuntimeSendOptions {
|
|
19
21
|
model?: string | null;
|
|
20
22
|
reasoningLevel?: string | null;
|
|
@@ -154,7 +156,7 @@ interface SessionTerminalStateEvent {
|
|
|
154
156
|
source: "runtime" | "external_runtime";
|
|
155
157
|
}
|
|
156
158
|
interface ClaudeHookBridgeConfig {
|
|
157
|
-
provider:
|
|
159
|
+
provider: ClaudeCompatibleProviderId;
|
|
158
160
|
bridgeUrl: string;
|
|
159
161
|
token: string;
|
|
160
162
|
scriptPath: string;
|
|
@@ -188,6 +190,7 @@ export declare class SessionLiveRuntimeService {
|
|
|
188
190
|
private readonly sessionStatusSnapshotRepository;
|
|
189
191
|
private readonly sessionProviderConfigService;
|
|
190
192
|
private readonly config;
|
|
193
|
+
private readonly openCliSessionPromptService;
|
|
191
194
|
private readonly providerRuntimeService;
|
|
192
195
|
private readonly sessionActivityAuthorityService;
|
|
193
196
|
private readonly sessionPermissionRequestService;
|
|
@@ -202,15 +205,15 @@ export declare class SessionLiveRuntimeService {
|
|
|
202
205
|
private readonly queueDispatchSessions;
|
|
203
206
|
private readonly queueRetryTimers;
|
|
204
207
|
private readonly pendingSendDebugTracesBySessionId;
|
|
205
|
-
constructor(sessionHistoryService: SessionHistoryService, sessionMessageAttachmentService: SessionMessageAttachmentService, workspaceService: WorkspaceService, sessionChangedFileService: SessionChangedFileService, sessionBindingRepository: SessionBindingRepository, authUserRepository: AuthUserRepository, sessionSendQueueRepository: SessionSendQueueRepository, sessionIndexRepository: SessionIndexRepository, sessionStateRepository: SessionStateRepository, sessionStatusSnapshotRepository: SessionStatusSnapshotRepository, sessionProviderConfigService: SessionProviderConfigService, config: HostConfig, sessionActivityAuthorityService?: SessionActivityAuthorityService);
|
|
208
|
+
constructor(sessionHistoryService: SessionHistoryService, sessionMessageAttachmentService: SessionMessageAttachmentService, workspaceService: WorkspaceService, sessionChangedFileService: SessionChangedFileService, sessionBindingRepository: SessionBindingRepository, authUserRepository: AuthUserRepository, sessionSendQueueRepository: SessionSendQueueRepository, sessionIndexRepository: SessionIndexRepository, sessionStateRepository: SessionStateRepository, sessionStatusSnapshotRepository: SessionStatusSnapshotRepository, sessionProviderConfigService: SessionProviderConfigService, config: HostConfig, sessionActivityAuthorityService?: SessionActivityAuthorityService, openCliSessionPromptService?: OpenCliSessionPromptService | null);
|
|
206
209
|
startLiveSession(input: StartLiveSessionInput): Promise<LiveMessageAcceptedResult>;
|
|
207
210
|
sendLiveMessage(input: SendLiveMessageInput): Promise<LiveMessageAcceptedResult>;
|
|
208
211
|
listQueuedMessages(sessionId: string, userId: string): Promise<SessionQueueItemView[]>;
|
|
209
212
|
enqueueLiveMessage(input: SendLiveMessageInput): Promise<SessionQueueItemView>;
|
|
210
213
|
steerQueuedMessage(sessionId: string, userId: string, queueItemId: string): Promise<SteerQueuedMessageResult>;
|
|
211
214
|
deleteQueuedMessage(sessionId: string, userId: string, queueItemId: string): Promise<DeleteQueuedMessageResult>;
|
|
212
|
-
getClaudeHookBridgeConfig(): ClaudeHookBridgeConfig;
|
|
213
|
-
ingestClaudeHookEvent(
|
|
215
|
+
getClaudeHookBridgeConfig(provider?: ClaudeCompatibleProviderId): ClaudeHookBridgeConfig;
|
|
216
|
+
ingestClaudeHookEvent(providerOrPayload: ClaudeCompatibleProviderId | ClaudeHookEventPayload, payload?: ClaudeHookEventPayload): Promise<{
|
|
214
217
|
accepted: boolean;
|
|
215
218
|
ignored: boolean;
|
|
216
219
|
sessionId: string | null;
|
|
@@ -238,6 +241,7 @@ export declare class SessionLiveRuntimeService {
|
|
|
238
241
|
private applyExternalRuntimeUpdate;
|
|
239
242
|
private startRuntimeRun;
|
|
240
243
|
private sendLiveMessageDirect;
|
|
244
|
+
private composeProviderPrompt;
|
|
241
245
|
private dispatchNextQueuedMessage;
|
|
242
246
|
private maybeDispatchQueuedMessages;
|
|
243
247
|
private shouldBlockQueueDispatch;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, mkdirSync,
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { performance } from "node:perf_hooks";
|
|
4
4
|
import { ClaudeRuntimeAdapter, CodexRuntimeAdapter, GeminiRuntimeAdapter, KimiRuntimeAdapter, LegnaRuntimeAdapter, OpenCodeRuntimeAdapter, ProviderRuntimeService } from "@codingns/session-sync-core";
|
|
@@ -8,8 +8,10 @@ import { isPerfDebugEnabled, logPerformance } from "../../shared/utils/perf-log.
|
|
|
8
8
|
import { logPermissionDebug } from "../../shared/utils/permission-debug-log.js";
|
|
9
9
|
import { nowIso } from "../../shared/utils/time.js";
|
|
10
10
|
import { SessionActivityAuthorityService } from "./session-activity-authority-service.js";
|
|
11
|
+
import { createProviderCapabilityBlockedError } from "../provider/provider-disabled.js";
|
|
11
12
|
import { SessionPermissionRequestService } from "./session-permission-request-service.js";
|
|
12
13
|
import { appendSessionProviderErrorContext, mapSessionProviderError } from "./session-provider-error-mapper.js";
|
|
14
|
+
import { buildClaudeCompatibleHookBridgeUrl, buildClaudeCompatibleRawStoreRef, buildClaudeCompatibleSessionTitle, findClaudeCompatibleSessionFile, isClaudeCompatibleProvider } from "./claude-compatible-provider-registry.js";
|
|
13
15
|
import { ClaudeRuntimeHelperAdapter } from "./claude-runtime-helper-client.js";
|
|
14
16
|
import { CodexAppServerHelperClient } from "./codex-app-server-helper-client.js";
|
|
15
17
|
const OPENCODE_ORDER_DEBUG_ENABLED = /^(1|true|yes)$/i.test(process.env.CODINGNS_OPENCODE_ORDER_DEBUG?.trim() ?? "");
|
|
@@ -30,6 +32,7 @@ export class SessionLiveRuntimeService {
|
|
|
30
32
|
sessionStatusSnapshotRepository;
|
|
31
33
|
sessionProviderConfigService;
|
|
32
34
|
config;
|
|
35
|
+
openCliSessionPromptService;
|
|
33
36
|
providerRuntimeService;
|
|
34
37
|
sessionActivityAuthorityService;
|
|
35
38
|
sessionPermissionRequestService;
|
|
@@ -44,7 +47,7 @@ export class SessionLiveRuntimeService {
|
|
|
44
47
|
queueDispatchSessions = new Set();
|
|
45
48
|
queueRetryTimers = new Map();
|
|
46
49
|
pendingSendDebugTracesBySessionId = new Map();
|
|
47
|
-
constructor(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, sessionBindingRepository, authUserRepository, sessionSendQueueRepository, sessionIndexRepository, sessionStateRepository, sessionStatusSnapshotRepository, sessionProviderConfigService, config, sessionActivityAuthorityService = new SessionActivityAuthorityService()) {
|
|
50
|
+
constructor(sessionHistoryService, sessionMessageAttachmentService, workspaceService, sessionChangedFileService, sessionBindingRepository, authUserRepository, sessionSendQueueRepository, sessionIndexRepository, sessionStateRepository, sessionStatusSnapshotRepository, sessionProviderConfigService, config, sessionActivityAuthorityService = new SessionActivityAuthorityService(), openCliSessionPromptService = null) {
|
|
48
51
|
this.sessionHistoryService = sessionHistoryService;
|
|
49
52
|
this.sessionMessageAttachmentService = sessionMessageAttachmentService;
|
|
50
53
|
this.workspaceService = workspaceService;
|
|
@@ -57,6 +60,7 @@ export class SessionLiveRuntimeService {
|
|
|
57
60
|
this.sessionStatusSnapshotRepository = sessionStatusSnapshotRepository;
|
|
58
61
|
this.sessionProviderConfigService = sessionProviderConfigService;
|
|
59
62
|
this.config = config;
|
|
63
|
+
this.openCliSessionPromptService = openCliSessionPromptService;
|
|
60
64
|
this.sessionActivityAuthorityService = sessionActivityAuthorityService;
|
|
61
65
|
this.sessionPermissionRequestService = new SessionPermissionRequestService(sessionHistoryService, sessionBindingRepository, authUserRepository, workspaceService, config, async (envelope) => {
|
|
62
66
|
await this.emitExternalRuntimeEnvelope(envelope);
|
|
@@ -97,9 +101,10 @@ export class SessionLiveRuntimeService {
|
|
|
97
101
|
this.ensurePendingSessionBinding(sessionId, workspace.id, input.provider, providerBinding);
|
|
98
102
|
const persistedAttachments = this.persistMessageAttachments(sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
|
|
99
103
|
const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(input.provider, input.content, persistedAttachments.runtimeAttachments);
|
|
104
|
+
const resolvedProviderPrompt = this.composeProviderPrompt(input.provider, providerPrompt, providerLaunchContext.runtimeEnv);
|
|
100
105
|
const providerInstructionFilePath = resolveRuntimeInstructionFilePath(input.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
|
|
101
|
-
this.ensureCapability(capabilities
|
|
102
|
-
this.ensureCapability(capabilities
|
|
106
|
+
this.ensureCapability(capabilities, "provider", "canStartSession", "provider 不支持 start-live");
|
|
107
|
+
this.ensureCapability(capabilities, "provider", "canSendMessage", "provider 不支持实时对话");
|
|
103
108
|
const launchRuntimeStartedAtMs = performance.now();
|
|
104
109
|
const handle = await this.launchRuntimeRun({
|
|
105
110
|
sessionId,
|
|
@@ -117,7 +122,7 @@ export class SessionLiveRuntimeService {
|
|
|
117
122
|
model: input.runtimeOptions?.model ?? null,
|
|
118
123
|
reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
|
|
119
124
|
permissionMode: input.runtimeOptions?.permissionMode ?? null,
|
|
120
|
-
providerPrompt,
|
|
125
|
+
providerPrompt: resolvedProviderPrompt,
|
|
121
126
|
providerInstructionFilePath,
|
|
122
127
|
attachments: persistedAttachments.runtimeAttachments
|
|
123
128
|
}
|
|
@@ -171,7 +176,7 @@ export class SessionLiveRuntimeService {
|
|
|
171
176
|
if (!shouldAwaitStartBindingBeforeAcceptedUserLookup(input.provider)) {
|
|
172
177
|
void startBindingTask;
|
|
173
178
|
}
|
|
174
|
-
const acceptedAt = acceptedMessage?.timestamp ??
|
|
179
|
+
const acceptedAt = acceptedMessage?.timestamp ?? requestStartedAt;
|
|
175
180
|
const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
|
|
176
181
|
const session = this.resolveStartedSession({
|
|
177
182
|
sessionId,
|
|
@@ -353,16 +358,25 @@ export class SessionLiveRuntimeService {
|
|
|
353
358
|
deleted: true
|
|
354
359
|
};
|
|
355
360
|
}
|
|
356
|
-
getClaudeHookBridgeConfig() {
|
|
357
|
-
return buildClaudeHookBridgeConfig(this.config);
|
|
358
|
-
}
|
|
359
|
-
async ingestClaudeHookEvent(payload) {
|
|
360
|
-
const
|
|
361
|
+
getClaudeHookBridgeConfig(provider = "claude-code") {
|
|
362
|
+
return buildClaudeHookBridgeConfig(this.config, provider);
|
|
363
|
+
}
|
|
364
|
+
async ingestClaudeHookEvent(providerOrPayload, payload) {
|
|
365
|
+
const hasExplicitProvider = typeof providerOrPayload === "string"
|
|
366
|
+
&& isClaudeCompatibleProvider(providerOrPayload);
|
|
367
|
+
const provider = hasExplicitProvider
|
|
368
|
+
? providerOrPayload
|
|
369
|
+
: "claude-code";
|
|
370
|
+
const resolvedPayload = hasExplicitProvider
|
|
371
|
+
? (payload ?? {})
|
|
372
|
+
: providerOrPayload;
|
|
373
|
+
const hookEventName = normalizeClaudeHookEventName(resolvedPayload.hook_event_name);
|
|
361
374
|
logPermissionDebug("claude_hook_event.ingest.begin", {
|
|
375
|
+
provider,
|
|
362
376
|
hookEventName,
|
|
363
|
-
sessionId:
|
|
364
|
-
cwd:
|
|
365
|
-
transcriptPath:
|
|
377
|
+
sessionId: resolvedPayload.session_id ?? null,
|
|
378
|
+
cwd: resolvedPayload.cwd ?? null,
|
|
379
|
+
transcriptPath: resolvedPayload.transcript_path ?? null
|
|
366
380
|
});
|
|
367
381
|
if (!hookEventName) {
|
|
368
382
|
throw new AppError({
|
|
@@ -388,23 +402,23 @@ export class SessionLiveRuntimeService {
|
|
|
388
402
|
hookEventName,
|
|
389
403
|
route: "handleClaudePreToolUse"
|
|
390
404
|
});
|
|
391
|
-
return this.sessionPermissionRequestService.handleClaudePreToolUse(
|
|
405
|
+
return this.sessionPermissionRequestService.handleClaudePreToolUse(resolvedPayload, provider);
|
|
392
406
|
}
|
|
393
407
|
if (hookEventName === "PermissionRequest") {
|
|
394
408
|
logPermissionDebug("claude_hook_event.route", {
|
|
395
409
|
hookEventName,
|
|
396
410
|
route: "handleClaudePermissionRequest"
|
|
397
411
|
});
|
|
398
|
-
return this.sessionPermissionRequestService.handleClaudePermissionRequest(
|
|
412
|
+
return this.sessionPermissionRequestService.handleClaudePermissionRequest(resolvedPayload, provider);
|
|
399
413
|
}
|
|
400
|
-
const providerSessionId = normalizeRequiredText(
|
|
401
|
-
const workspacePath = normalizeRequiredText(
|
|
414
|
+
const providerSessionId = normalizeRequiredText(resolvedPayload.session_id, "session_id");
|
|
415
|
+
const workspacePath = normalizeRequiredText(resolvedPayload.cwd, "cwd");
|
|
402
416
|
const workspace = this.workspaceService.findWorkspaceByPath(workspacePath);
|
|
403
417
|
if (!workspace) {
|
|
404
418
|
logPermissionDebug("claude_hook_event.workspace_not_found", {
|
|
405
419
|
hookEventName,
|
|
406
|
-
sessionId:
|
|
407
|
-
cwd:
|
|
420
|
+
sessionId: resolvedPayload.session_id ?? null,
|
|
421
|
+
cwd: resolvedPayload.cwd ?? null
|
|
408
422
|
});
|
|
409
423
|
return {
|
|
410
424
|
accepted: true,
|
|
@@ -414,13 +428,14 @@ export class SessionLiveRuntimeService {
|
|
|
414
428
|
};
|
|
415
429
|
}
|
|
416
430
|
const binding = await this.resolveClaudeExternalBinding({
|
|
431
|
+
provider,
|
|
417
432
|
providerSessionId,
|
|
418
433
|
workspaceId: workspace.id,
|
|
419
434
|
workspacePath: workspace.path,
|
|
420
|
-
transcriptPath: normalizeOptionalText(
|
|
435
|
+
transcriptPath: normalizeOptionalText(resolvedPayload.transcript_path)
|
|
421
436
|
});
|
|
422
437
|
const timestamp = nowIso();
|
|
423
|
-
const runtimeUpdate = mapClaudeHookToRuntimeUpdate(hookEventName,
|
|
438
|
+
const runtimeUpdate = mapClaudeHookToRuntimeUpdate(hookEventName, resolvedPayload, timestamp);
|
|
424
439
|
logPermissionDebug("claude_hook_event.runtime_update", {
|
|
425
440
|
hookEventName,
|
|
426
441
|
sessionId: binding.sessionId,
|
|
@@ -445,6 +460,7 @@ export class SessionLiveRuntimeService {
|
|
|
445
460
|
};
|
|
446
461
|
}
|
|
447
462
|
await this.applyExternalRuntimeUpdate({
|
|
463
|
+
provider,
|
|
448
464
|
sessionId: binding.sessionId,
|
|
449
465
|
workspaceId: workspace.id,
|
|
450
466
|
providerSessionId,
|
|
@@ -506,7 +522,7 @@ export class SessionLiveRuntimeService {
|
|
|
506
522
|
if (externalRuntimeSnapshot) {
|
|
507
523
|
return {
|
|
508
524
|
sessionId,
|
|
509
|
-
provider:
|
|
525
|
+
provider: externalRuntimeSnapshot.provider,
|
|
510
526
|
providerSessionId: externalRuntimeSnapshot.providerSessionId,
|
|
511
527
|
runningState: resolution.runningState,
|
|
512
528
|
hasActiveRun: externalHasActiveRun,
|
|
@@ -900,10 +916,10 @@ export class SessionLiveRuntimeService {
|
|
|
900
916
|
}
|
|
901
917
|
async resolveClaudeExternalBinding(input) {
|
|
902
918
|
const rawStoreRef = input.transcriptPath ??
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
let binding = this.sessionBindingRepository.findByProviderSession(
|
|
906
|
-
this.sessionBindingRepository.findByRawStoreRef(
|
|
919
|
+
findClaudeCompatibleSessionFile(this.config, input.provider, input.workspacePath, input.providerSessionId) ??
|
|
920
|
+
buildClaudeCompatibleRawStoreRef(this.config, input.provider, input.workspacePath, input.providerSessionId);
|
|
921
|
+
let binding = this.sessionBindingRepository.findByProviderSession(input.provider, input.providerSessionId) ??
|
|
922
|
+
this.sessionBindingRepository.findByRawStoreRef(input.provider, rawStoreRef);
|
|
907
923
|
if (!binding) {
|
|
908
924
|
const userIds = this.authUserRepository.listIds();
|
|
909
925
|
const bootstrapUserId = userIds[0] ?? null;
|
|
@@ -916,8 +932,8 @@ export class SessionLiveRuntimeService {
|
|
|
916
932
|
});
|
|
917
933
|
}
|
|
918
934
|
binding =
|
|
919
|
-
this.sessionBindingRepository.findByProviderSession(
|
|
920
|
-
this.sessionBindingRepository.findByRawStoreRef(
|
|
935
|
+
this.sessionBindingRepository.findByProviderSession(input.provider, input.providerSessionId) ??
|
|
936
|
+
this.sessionBindingRepository.findByRawStoreRef(input.provider, rawStoreRef);
|
|
921
937
|
}
|
|
922
938
|
if (binding) {
|
|
923
939
|
return {
|
|
@@ -928,19 +944,19 @@ export class SessionLiveRuntimeService {
|
|
|
928
944
|
const sessionId = createId();
|
|
929
945
|
const timestamp = nowIso();
|
|
930
946
|
this.sessionHistoryService.persistSessionBinding(sessionId, input.workspaceId, {
|
|
931
|
-
provider:
|
|
947
|
+
provider: input.provider,
|
|
932
948
|
providerSessionId: input.providerSessionId,
|
|
933
949
|
rawStoreRef
|
|
934
950
|
});
|
|
935
951
|
this.sessionIndexRepository.upsert({
|
|
936
952
|
sessionId,
|
|
937
953
|
workspaceId: input.workspaceId,
|
|
938
|
-
provider:
|
|
954
|
+
provider: input.provider,
|
|
939
955
|
parentSessionId: null,
|
|
940
956
|
sessionKind: "default",
|
|
941
957
|
isSubagent: false,
|
|
942
958
|
subagentLabel: null,
|
|
943
|
-
title:
|
|
959
|
+
title: buildClaudeCompatibleSessionTitle(input.provider, input.providerSessionId),
|
|
944
960
|
messageCount: 0,
|
|
945
961
|
isArchived: false,
|
|
946
962
|
lastMessageAt: null,
|
|
@@ -1021,7 +1037,7 @@ export class SessionLiveRuntimeService {
|
|
|
1021
1037
|
if (input.runningState === "running") {
|
|
1022
1038
|
this.externalRuntimeSnapshots.set(input.sessionId, {
|
|
1023
1039
|
sessionId: input.sessionId,
|
|
1024
|
-
provider:
|
|
1040
|
+
provider: input.provider,
|
|
1025
1041
|
providerSessionId: input.providerSessionId,
|
|
1026
1042
|
rawStoreRef: input.rawStoreRef,
|
|
1027
1043
|
runningState: input.runningState,
|
|
@@ -1064,7 +1080,7 @@ export class SessionLiveRuntimeService {
|
|
|
1064
1080
|
this.runtimeMessageSeenSessions.delete(request.sessionId);
|
|
1065
1081
|
this.runtimeHistoryFallbackSentSessions.delete(request.sessionId);
|
|
1066
1082
|
this.clearExternalRuntimeInterruptSuppression(request.sessionId);
|
|
1067
|
-
if (request.provider
|
|
1083
|
+
if (isClaudeCompatibleProvider(request.provider)) {
|
|
1068
1084
|
this.clearExternalRuntimeSnapshot(request.sessionId);
|
|
1069
1085
|
}
|
|
1070
1086
|
const handle = await this.launchRuntimeRun(request, mode, providerBinding);
|
|
@@ -1105,18 +1121,18 @@ export class SessionLiveRuntimeService {
|
|
|
1105
1121
|
const activeRun = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
1106
1122
|
const externalRuntimeSnapshot = this.getFreshExternalRuntimeSnapshot(runtimeSessionId);
|
|
1107
1123
|
const hasActiveRun = Boolean(activeRun && isActiveRuntimeState(activeRun.runningState));
|
|
1108
|
-
if (hasActiveRun && activeRun?.provider
|
|
1124
|
+
if (hasActiveRun && isClaudeCompatibleProvider(activeRun?.provider)) {
|
|
1109
1125
|
this.clearExternalRuntimeSnapshot(runtimeSessionId);
|
|
1110
1126
|
}
|
|
1111
1127
|
if (hasActiveRun
|
|
1112
1128
|
|| (!activeRun &&
|
|
1113
|
-
session.provider
|
|
1129
|
+
isClaudeCompatibleProvider(session.provider) &&
|
|
1114
1130
|
externalRuntimeSnapshot &&
|
|
1115
1131
|
isActiveRuntimeState(externalRuntimeSnapshot.runningState))) {
|
|
1116
1132
|
this.assertProviderBindingStableDuringActiveRun(existingBinding, resolvedProviderBinding);
|
|
1117
1133
|
}
|
|
1118
1134
|
if (!activeRun &&
|
|
1119
|
-
session.provider
|
|
1135
|
+
isClaudeCompatibleProvider(session.provider) &&
|
|
1120
1136
|
externalRuntimeSnapshot &&
|
|
1121
1137
|
isActiveRuntimeState(externalRuntimeSnapshot.runningState)) {
|
|
1122
1138
|
throw new AppError({
|
|
@@ -1142,8 +1158,9 @@ export class SessionLiveRuntimeService {
|
|
|
1142
1158
|
const resolvedAttachments = persistedAttachments
|
|
1143
1159
|
?? this.persistMessageAttachments(input.sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
|
|
1144
1160
|
const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(session.provider, input.content, resolvedAttachments.runtimeAttachments);
|
|
1161
|
+
const resolvedProviderPrompt = this.composeProviderPrompt(session.provider, providerPrompt, providerLaunchContext.runtimeEnv);
|
|
1145
1162
|
const providerInstructionFilePath = resolveRuntimeInstructionFilePath(session.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
|
|
1146
|
-
this.ensureCapability(capabilities
|
|
1163
|
+
this.ensureCapability(capabilities, "sessionId", "canSendMessage", "provider 不支持实时对话");
|
|
1147
1164
|
const runtimeRequest = {
|
|
1148
1165
|
sessionId: input.sessionId,
|
|
1149
1166
|
workspaceId: session.workspaceId,
|
|
@@ -1160,7 +1177,7 @@ export class SessionLiveRuntimeService {
|
|
|
1160
1177
|
model: input.runtimeOptions?.model ?? null,
|
|
1161
1178
|
reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
|
|
1162
1179
|
permissionMode: input.runtimeOptions?.permissionMode ?? null,
|
|
1163
|
-
providerPrompt,
|
|
1180
|
+
providerPrompt: resolvedProviderPrompt,
|
|
1164
1181
|
providerInstructionFilePath,
|
|
1165
1182
|
attachments: resolvedAttachments.runtimeAttachments
|
|
1166
1183
|
}
|
|
@@ -1219,7 +1236,7 @@ export class SessionLiveRuntimeService {
|
|
|
1219
1236
|
this.logSendDebugStep(debugTrace, "accepted_user_lookup", acceptedLookupStartedAtMs, {
|
|
1220
1237
|
matched: Boolean(acceptedMessage)
|
|
1221
1238
|
});
|
|
1222
|
-
const acceptedAt = acceptedMessage?.timestamp ??
|
|
1239
|
+
const acceptedAt = acceptedMessage?.timestamp ?? requestStartedAt;
|
|
1223
1240
|
this.sessionHistoryService.resolveMessageOriginByClientRequestId(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null, acceptedAt);
|
|
1224
1241
|
const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
|
|
1225
1242
|
this.refreshSyntheticSessionTitle(session, input.content, input.userId);
|
|
@@ -1251,6 +1268,16 @@ export class SessionLiveRuntimeService {
|
|
|
1251
1268
|
throw error;
|
|
1252
1269
|
}
|
|
1253
1270
|
}
|
|
1271
|
+
composeProviderPrompt(_provider, basePrompt, _runtimeEnv) {
|
|
1272
|
+
const normalizedBasePrompt = basePrompt?.trim() ?? "";
|
|
1273
|
+
if (!normalizedBasePrompt) {
|
|
1274
|
+
return null;
|
|
1275
|
+
}
|
|
1276
|
+
// OpenCLI 约束必须走 runtime skill / runtime 环境本身,不能再内联到用户消息里。
|
|
1277
|
+
// Codex / Claude 会优先把 providerPrompt 当成真实用户输入发送;一旦这里拼上
|
|
1278
|
+
// OpenCLI 提示,就会覆盖或污染用户原始内容,导致模型只对提示词本身作答。
|
|
1279
|
+
return normalizedBasePrompt;
|
|
1280
|
+
}
|
|
1254
1281
|
async dispatchNextQueuedMessage(sessionId) {
|
|
1255
1282
|
if (this.queueDispatchSessions.has(sessionId)) {
|
|
1256
1283
|
return;
|
|
@@ -1328,7 +1355,7 @@ export class SessionLiveRuntimeService {
|
|
|
1328
1355
|
if (externalRuntimeSnapshot && isActiveRuntimeState(externalRuntimeSnapshot.runningState)) {
|
|
1329
1356
|
return true;
|
|
1330
1357
|
}
|
|
1331
|
-
if (session.provider
|
|
1358
|
+
if (isClaudeCompatibleProvider(session.provider) && isPendingSessionRunningState(session.runningState)) {
|
|
1332
1359
|
return true;
|
|
1333
1360
|
}
|
|
1334
1361
|
return false;
|
|
@@ -1356,7 +1383,7 @@ export class SessionLiveRuntimeService {
|
|
|
1356
1383
|
}
|
|
1357
1384
|
async resolveQueueDispatchSession(sessionId, userId) {
|
|
1358
1385
|
const session = this.sessionHistoryService.getSession(sessionId, userId);
|
|
1359
|
-
if (session.provider
|
|
1386
|
+
if (!isClaudeCompatibleProvider(session.provider)
|
|
1360
1387
|
|| !isPendingSessionRunningState(session.runningState)) {
|
|
1361
1388
|
return session;
|
|
1362
1389
|
}
|
|
@@ -2032,7 +2059,7 @@ export class SessionLiveRuntimeService {
|
|
|
2032
2059
|
};
|
|
2033
2060
|
}
|
|
2034
2061
|
async maybeEmitRuntimeHistoryFallback(sessionId, event) {
|
|
2035
|
-
if (event.provider
|
|
2062
|
+
if (!isClaudeCompatibleProvider(event.provider)) {
|
|
2036
2063
|
return;
|
|
2037
2064
|
}
|
|
2038
2065
|
if (event.status === "starting") {
|
|
@@ -2053,16 +2080,11 @@ export class SessionLiveRuntimeService {
|
|
|
2053
2080
|
this.runtimeHistoryFallbackSentSessions.add(sessionId);
|
|
2054
2081
|
await this.emitExternalRuntimeEnvelope(envelope);
|
|
2055
2082
|
}
|
|
2056
|
-
ensureCapability(
|
|
2057
|
-
if (
|
|
2083
|
+
ensureCapability(capabilities, field, capability, detail) {
|
|
2084
|
+
if (capabilities[capability]) {
|
|
2058
2085
|
return;
|
|
2059
2086
|
}
|
|
2060
|
-
throw
|
|
2061
|
-
statusCode: 400,
|
|
2062
|
-
errorCode: "CAPABILITY_NOT_SUPPORTED",
|
|
2063
|
-
detail,
|
|
2064
|
-
field
|
|
2065
|
-
});
|
|
2087
|
+
throw createProviderCapabilityBlockedError(capabilities, field, detail);
|
|
2066
2088
|
}
|
|
2067
2089
|
upsertSnapshot(sessionId, input) {
|
|
2068
2090
|
this.sessionStatusSnapshotRepository.upsert({
|
|
@@ -2074,7 +2096,7 @@ export class SessionLiveRuntimeService {
|
|
|
2074
2096
|
shouldIgnoreClaudeExternalRuntimeUpdate(sessionId) {
|
|
2075
2097
|
const runtimeSnapshot = this.getLiveRuntimeSnapshot(sessionId);
|
|
2076
2098
|
return Boolean(runtimeSnapshot &&
|
|
2077
|
-
runtimeSnapshot.provider
|
|
2099
|
+
isClaudeCompatibleProvider(runtimeSnapshot.provider) &&
|
|
2078
2100
|
isActiveRuntimeState(runtimeSnapshot.runningState));
|
|
2079
2101
|
}
|
|
2080
2102
|
clearExternalRuntimeSnapshot(sessionId) {
|
|
@@ -2116,7 +2138,7 @@ export class SessionLiveRuntimeService {
|
|
|
2116
2138
|
async resolveActiveClaudePermissionSession(input) {
|
|
2117
2139
|
const activeSnapshots = this.providerRuntimeService
|
|
2118
2140
|
.listSnapshots()
|
|
2119
|
-
.filter((snapshot) => snapshot.provider ===
|
|
2141
|
+
.filter((snapshot) => snapshot.provider === input.provider &&
|
|
2120
2142
|
snapshot.workspaceId === input.workspaceId &&
|
|
2121
2143
|
isActiveRuntimeState(snapshot.runningState));
|
|
2122
2144
|
if (activeSnapshots.length !== 1) {
|
|
@@ -2128,9 +2150,9 @@ export class SessionLiveRuntimeService {
|
|
|
2128
2150
|
}
|
|
2129
2151
|
const rawStoreRef = input.transcriptPath ??
|
|
2130
2152
|
activeSnapshot.rawStoreRef ??
|
|
2131
|
-
|
|
2153
|
+
buildClaudeCompatibleRawStoreRef(this.config, input.provider, input.workspacePath, input.providerSessionId);
|
|
2132
2154
|
this.sessionHistoryService.persistSessionBinding(activeSnapshot.sessionId, input.workspaceId, {
|
|
2133
|
-
provider:
|
|
2155
|
+
provider: input.provider,
|
|
2134
2156
|
providerSessionId: input.providerSessionId,
|
|
2135
2157
|
rawStoreRef
|
|
2136
2158
|
});
|
|
@@ -2445,7 +2467,8 @@ function waitForAcceptedUserLookupWindow() {
|
|
|
2445
2467
|
});
|
|
2446
2468
|
}
|
|
2447
2469
|
function createProviderRuntimeAdapters(config, options = {}) {
|
|
2448
|
-
const claudeHookBridgeConfig = buildClaudeHookBridgeConfig(config);
|
|
2470
|
+
const claudeHookBridgeConfig = buildClaudeHookBridgeConfig(config, "claude-code");
|
|
2471
|
+
const legnaHookBridgeConfig = buildClaudeHookBridgeConfig(config, "legna-code");
|
|
2449
2472
|
const claudeAdapter = process.env.VITEST
|
|
2450
2473
|
? new ClaudeRuntimeAdapter({
|
|
2451
2474
|
homeDir: config.claudeCodeHomeDir,
|
|
@@ -2473,7 +2496,12 @@ function createProviderRuntimeAdapters(config, options = {}) {
|
|
|
2473
2496
|
new LegnaRuntimeAdapter({
|
|
2474
2497
|
homeDir: config.legnaCodeHomeDir,
|
|
2475
2498
|
commandPath: config.legnaCodeCliPath,
|
|
2476
|
-
legacyClaudeHomeDir: config.claudeCodeHomeDir
|
|
2499
|
+
legacyClaudeHomeDir: config.claudeCodeHomeDir,
|
|
2500
|
+
hookBridge: {
|
|
2501
|
+
url: legnaHookBridgeConfig.bridgeUrl,
|
|
2502
|
+
token: config.claudeHookBridgeToken,
|
|
2503
|
+
scriptPath: legnaHookBridgeConfig.scriptPath
|
|
2504
|
+
}
|
|
2477
2505
|
}),
|
|
2478
2506
|
new CodexRuntimeAdapter({
|
|
2479
2507
|
homeDir: config.codexHomeDir,
|
|
@@ -2506,7 +2534,9 @@ function createProviderRuntimeAdapters(config, options = {}) {
|
|
|
2506
2534
|
}),
|
|
2507
2535
|
new OpenCodeRuntimeAdapter({
|
|
2508
2536
|
baseUrl: config.opencodeBaseUrl,
|
|
2509
|
-
baseUrlResolver: config.opencodeBaseUrlResolver?.resolve.bind(config.opencodeBaseUrlResolver)
|
|
2537
|
+
baseUrlResolver: config.opencodeBaseUrlResolver?.resolve.bind(config.opencodeBaseUrlResolver),
|
|
2538
|
+
acquireManagedServerLease: config.opencodeBaseUrlResolver?.acquireManagedServerLease.bind(config.opencodeBaseUrlResolver),
|
|
2539
|
+
releaseManagedServerLease: config.opencodeBaseUrlResolver?.releaseManagedServerLease.bind(config.opencodeBaseUrlResolver)
|
|
2510
2540
|
})
|
|
2511
2541
|
],
|
|
2512
2542
|
disposables
|
|
@@ -2518,11 +2548,14 @@ function resolveRuntimeInstructionFilePath(provider, workspacePath, explicitFile
|
|
|
2518
2548
|
const resolvedExplicit = path.resolve(normalizedExplicit);
|
|
2519
2549
|
return existsSync(resolvedExplicit) ? resolvedExplicit : null;
|
|
2520
2550
|
}
|
|
2521
|
-
const
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2551
|
+
const defaultInstructionFileNames = {
|
|
2552
|
+
"claude-code": "CLAUDE.md",
|
|
2553
|
+
"legna-code": "LEGNA.md"
|
|
2554
|
+
};
|
|
2555
|
+
const defaultInstructionFileName = defaultInstructionFileNames[provider];
|
|
2556
|
+
const defaultInstructionPath = defaultInstructionFileName
|
|
2557
|
+
? path.join(workspacePath, defaultInstructionFileName)
|
|
2558
|
+
: null;
|
|
2526
2559
|
if (!defaultInstructionPath) {
|
|
2527
2560
|
return null;
|
|
2528
2561
|
}
|
|
@@ -2530,12 +2563,12 @@ function resolveRuntimeInstructionFilePath(provider, workspacePath, explicitFile
|
|
|
2530
2563
|
? path.resolve(defaultInstructionPath)
|
|
2531
2564
|
: null;
|
|
2532
2565
|
}
|
|
2533
|
-
function buildClaudeHookBridgeConfig(config) {
|
|
2534
|
-
const bridgeUrl =
|
|
2566
|
+
function buildClaudeHookBridgeConfig(config, provider) {
|
|
2567
|
+
const bridgeUrl = buildClaudeCompatibleHookBridgeUrl(config, provider);
|
|
2535
2568
|
const scriptPath = resolveClaudeHookBridgeScriptPath();
|
|
2536
2569
|
const command = `node "${scriptPath}" --url "${bridgeUrl}" --token "${config.claudeHookBridgeToken}"`;
|
|
2537
2570
|
return {
|
|
2538
|
-
provider
|
|
2571
|
+
provider,
|
|
2539
2572
|
bridgeUrl,
|
|
2540
2573
|
token: config.claudeHookBridgeToken,
|
|
2541
2574
|
scriptPath,
|
|
@@ -2565,28 +2598,6 @@ function resolveClaudeHookBridgeScriptPath() {
|
|
|
2565
2598
|
}
|
|
2566
2599
|
return candidates[0];
|
|
2567
2600
|
}
|
|
2568
|
-
function buildClaudeRawStoreRef(homeDir, workspacePath, sessionId) {
|
|
2569
|
-
return path.join(homeDir, "projects", workspaceSlug(workspacePath), `${sessionId}.jsonl`);
|
|
2570
|
-
}
|
|
2571
|
-
function findClaudeSessionFile(homeDir, sessionId) {
|
|
2572
|
-
const projectsDir = path.join(homeDir, "projects");
|
|
2573
|
-
if (!existsSync(projectsDir)) {
|
|
2574
|
-
return null;
|
|
2575
|
-
}
|
|
2576
|
-
const candidates = readdirSync(projectsDir, { withFileTypes: true })
|
|
2577
|
-
.filter((entry) => entry.isDirectory())
|
|
2578
|
-
.map((entry) => path.join(projectsDir, entry.name, `${sessionId}.jsonl`))
|
|
2579
|
-
.filter((candidate) => existsSync(candidate));
|
|
2580
|
-
return candidates[0] ?? null;
|
|
2581
|
-
}
|
|
2582
|
-
function workspaceSlug(workspacePath) {
|
|
2583
|
-
const trimmed = workspacePath.replace(/[\\/]+$/, "");
|
|
2584
|
-
const normalizedDriveLetter = trimmed.replace(/^[A-Z](?=:)/, (value) => value.toLowerCase());
|
|
2585
|
-
return normalizedDriveLetter
|
|
2586
|
-
.replaceAll(":", "-")
|
|
2587
|
-
.replaceAll("\\", "-")
|
|
2588
|
-
.replaceAll("/", "-");
|
|
2589
|
-
}
|
|
2590
2601
|
function normalizeOptionalBindingValue(value) {
|
|
2591
2602
|
const normalized = value?.trim();
|
|
2592
2603
|
return normalized && normalized.length > 0 ? normalized : null;
|