@jingyi0605/codingns 0.3.6 → 0.5.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/README.md +3 -0
- package/bin/codingns.mjs +913 -1
- package/dist/public/assets/AdaptiveButlerPage-B153lk5H.css +1 -0
- package/dist/public/assets/AdaptiveButlerPage-R-XZw7pd.js +3 -0
- package/dist/public/assets/App-DUAg5urj.css +1 -0
- package/dist/public/assets/App-DkvE5EyM.js +30 -0
- package/dist/public/assets/BootstrapPage-Vu5oEJ8z.js +1 -0
- package/dist/public/assets/ConversationPage-Cjpg6g0J.js +2 -0
- package/dist/public/assets/DesktopDetachPreviewPage-BgeEqbc5.js +1 -0
- package/dist/public/assets/DesktopWindowPage-1WelvxdH.js +2 -0
- package/dist/public/assets/FileContextPanel-D_ghXJuW.js +1 -0
- package/dist/public/assets/GitSidebar-D9f9Jxwr.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-DLq5qPkx.js +1 -0
- package/dist/public/assets/MobileSheet-DLg-gX1t.js +1 -0
- package/dist/public/assets/MobileTopHeaderFrame-DArgZI7L.js +1 -0
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-0ywJKfBQ.js +1 -0
- package/dist/public/assets/ServerSettingsModal-izoYMx9U.js +1 -0
- package/dist/public/assets/SessionIndexPage-C5aG8FIv.js +1 -0
- package/dist/public/assets/SettingsPage-HJIC-P-4.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-DpyUTo9k.js +1 -0
- package/dist/public/assets/{TerminalPage-D00S4KM6.js → TerminalPage-CtKXIU0h.js} +19 -19
- package/dist/public/assets/TerminalRuntimeFallbackModal-CRhOQOsT.js +1 -0
- package/dist/public/assets/ToolFilesPage-DcYPsS-e.js +1 -0
- package/dist/public/assets/ToolGitPage-CsPl89ty.js +1 -0
- package/dist/public/assets/ToolProcessesPage-D0dvR8xK.js +1 -0
- package/dist/public/assets/ToolsHomePage-4fP-KRiv.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-kvlfyxRo.js +1 -0
- package/dist/public/assets/WorkbenchLayout-ByFw4eeu.js +3 -0
- package/dist/public/assets/WorkbenchModal-Ctob14VR.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-BUITtdAg.css +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Kw7JEZI3.js +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-Com5kEXJ.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-D0Lrx4Uz.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-wR8d3aP9.js +1 -0
- package/dist/public/assets/butler-records-events-DgWCG364.js +1 -0
- package/dist/public/assets/default-session-permission-mode-CcGwR4Kk.js +1 -0
- package/dist/public/assets/event-DvH9tcej.js +1 -0
- package/dist/public/assets/file-tree-icon-UFVoVzhM.js +31 -0
- package/dist/public/assets/index-Byp9hJ0c.js +42 -0
- package/dist/public/assets/index-_52jxu4a.css +1 -0
- package/dist/public/assets/preferences-service-KIYeE2gk.js +1 -0
- package/dist/public/assets/session-runtime-machine-0KNSSPp5.js +17 -0
- package/dist/public/assets/styles-BWPBZvze.css +1 -0
- package/dist/public/assets/styles-CSUx5LGe.js +1 -0
- package/dist/public/assets/terminal-runtime-meta-AWXJpN4r.js +1 -0
- package/dist/public/assets/useRegisteredDebugTemplates-DBDRdptr.js +1 -0
- package/dist/public/assets/window-BWqRixxq.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/middlewares/auth-guard.d.ts +4 -0
- package/dist/server/middlewares/auth-guard.js +42 -4
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +234 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js +365 -0
- package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +262 -2
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +737 -3
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/auth/auth-controller.d.ts +11 -1
- package/dist/server/modules/auth/auth-controller.js +61 -2
- package/dist/server/modules/auth/auth-controller.js.map +1 -1
- package/dist/server/modules/auth/auth-device-display-name.d.ts +10 -0
- package/dist/server/modules/auth/auth-device-display-name.js +190 -0
- package/dist/server/modules/auth/auth-device-display-name.js.map +1 -0
- package/dist/server/modules/auth/auth-service.d.ts +80 -5
- package/dist/server/modules/auth/auth-service.js +333 -23
- package/dist/server/modules/auth/auth-service.js.map +1 -1
- package/dist/server/modules/butler/assistant-automation-service.d.ts +112 -0
- package/dist/server/modules/butler/assistant-automation-service.js +832 -0
- package/dist/server/modules/butler/assistant-automation-service.js.map +1 -0
- package/dist/server/modules/butler/assistant-automation-trigger.d.ts +94 -0
- package/dist/server/modules/butler/assistant-automation-trigger.js +400 -0
- package/dist/server/modules/butler/assistant-automation-trigger.js.map +1 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.d.ts +32 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js +93 -0
- package/dist/server/modules/butler/assistant-sandbox-cleanup-scheduler.js.map +1 -0
- package/dist/server/modules/butler/assistant-sandbox-service.d.ts +69 -0
- package/dist/server/modules/butler/assistant-sandbox-service.js +399 -0
- package/dist/server/modules/butler/assistant-sandbox-service.js.map +1 -0
- package/dist/server/modules/butler/butler-action-context-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-action-context-service.js +8 -2
- package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
- package/dist/server/modules/butler/butler-auth-service.js +7 -2
- package/dist/server/modules/butler/butler-auth-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +11 -1
- package/dist/server/modules/butler/butler-control-session-service.js +173 -40
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-timer-scheduler.d.ts +32 -0
- package/dist/server/modules/butler/butler-control-timer-scheduler.js +93 -0
- package/dist/server/modules/butler/butler-control-timer-scheduler.js.map +1 -0
- package/dist/server/modules/butler/butler-control-timer-service.d.ts +42 -0
- package/dist/server/modules/butler/butler-control-timer-service.js +132 -0
- package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -0
- package/dist/server/modules/butler/butler-controller.d.ts +42 -2
- package/dist/server/modules/butler/butler-controller.js +79 -12
- package/dist/server/modules/butler/butler-controller.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.d.ts +2 -1
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js +27 -25
- package/dist/server/modules/butler/butler-follow-up-evaluation-instruction-adapter.js.map +1 -1
- package/dist/server/modules/butler/butler-follow-up-service.d.ts +41 -5
- package/dist/server/modules/butler/butler-follow-up-service.js +568 -371
- package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +4 -1
- package/dist/server/modules/butler/butler-inbox-analysis-service.js +18 -4
- package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -1
- package/dist/server/modules/butler/butler-inbox-service.js +1 -0
- package/dist/server/modules/butler/butler-inbox-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.js +2 -5
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-project-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-project-service.js +7 -1
- package/dist/server/modules/butler/butler-project-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.d.ts +5 -1
- package/dist/server/modules/butler/butler-session-service.js +26 -1
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-summary-service.js +2 -1
- package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
- package/dist/server/modules/butler/butler-workspace-context.d.ts +4 -1
- package/dist/server/modules/butler/butler-workspace-context.js +204 -58
- package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
- package/dist/server/modules/butler/patrol-execution-service.js +2 -1
- package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
- package/dist/server/modules/butler/provider-adapter-registry.d.ts +3 -0
- package/dist/server/modules/butler/provider-adapter-registry.js +18 -1
- package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -1
- package/dist/server/modules/butler/verification-run-service.d.ts +9 -2
- package/dist/server/modules/butler/verification-run-service.js +188 -34
- package/dist/server/modules/butler/verification-run-service.js.map +1 -1
- package/dist/server/modules/debug-target/debug-target-controller.js +1 -1
- package/dist/server/modules/debug-target/debug-target-controller.js.map +1 -1
- package/dist/server/modules/debug-target/debug-target-service.d.ts +7 -2
- package/dist/server/modules/debug-target/debug-target-service.js +563 -100
- package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
- package/dist/server/modules/git/git-command-helper-client.d.ts +1 -0
- package/dist/server/modules/git/git-command-helper-client.js +19 -26
- package/dist/server/modules/git/git-command-helper-client.js.map +1 -1
- package/dist/server/modules/git/git-command-runner.js +19 -1
- package/dist/server/modules/git/git-command-runner.js.map +1 -1
- package/dist/server/modules/preferences/profile-service.d.ts +3 -1
- package/dist/server/modules/preferences/profile-service.js +74 -3
- package/dist/server/modules/preferences/profile-service.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +1 -1
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +5 -3
- package/dist/server/modules/provider/provider-discovery-helper-client.js +129 -43
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +44 -0
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +83 -3
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.d.ts +10 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-identity-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.d.ts +48 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js +11 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-packets.js.map +1 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.d.ts +74 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js +302 -0
- package/dist/server/modules/relay-tunnel/crypto/relay-tunnel-protocol.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.d.ts +33 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js +57 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-controller.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.d.ts +9 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js +25 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-edge-proof.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.d.ts +18 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js +230 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-gateway-service.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.d.ts +41 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +443 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.d.ts +111 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +771 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js +23 -1
- package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +2 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +78 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +84 -2
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/provider-session-delete-cli.d.ts +15 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js +148 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -0
- package/dist/server/modules/sessions/session-controller.d.ts +4 -1
- package/dist/server/modules/sessions/session-controller.js +4 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +24 -1
- package/dist/server/modules/sessions/session-history-service.js +401 -42
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.d.ts +25 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +42 -0
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -0
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +6 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +130 -28
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js +22 -0
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-origin-utils.d.ts +12 -0
- package/dist/server/modules/sessions/session-message-origin-utils.js +45 -0
- package/dist/server/modules/sessions/session-message-origin-utils.js.map +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +1 -0
- package/dist/server/modules/sessions/session-permission-request-service.js +367 -5
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +32 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-usage-guard-service.d.ts +37 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js +179 -0
- package/dist/server/modules/sessions/session-provider-usage-guard-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.d.ts +17 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js +465 -0
- package/dist/server/modules/sessions/session-provider-usage-limit.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.d.ts +8 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js +26 -0
- package/dist/server/modules/skills/assistant-runtime-skill-catalog.js.map +1 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.d.ts +9 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js +55 -0
- package/dist/server/modules/skills/assistant-runtime-skill-cleanup.js.map +1 -0
- package/dist/server/modules/skills/builtin-skill-service.js +1 -6
- package/dist/server/modules/skills/builtin-skill-service.js.map +1 -1
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +19 -12
- package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +9 -3
- package/dist/server/modules/skills/skill-controller.d.ts +2 -2
- package/dist/server/modules/skills/skill-controller.js +9 -1
- package/dist/server/modules/skills/skill-controller.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +26 -1
- package/dist/server/modules/skills/skill-manager-service.js +346 -90
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/skills/skill-name-policy.d.ts +2 -0
- package/dist/server/modules/skills/skill-name-policy.js +10 -0
- package/dist/server/modules/skills/skill-name-policy.js.map +1 -0
- package/dist/server/modules/tailscale/tailscale-service.d.ts +2 -0
- package/dist/server/modules/tailscale/tailscale-service.js +21 -8
- package/dist/server/modules/tailscale/tailscale-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-client.d.ts +5 -2
- package/dist/server/modules/tasks/task-helper-client.js +118 -38
- package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process.js +94 -3
- package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +6 -0
- package/dist/server/modules/tasks/task-types.js +7 -1
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/terminal/command-template-service.d.ts +9 -0
- package/dist/server/modules/terminal/command-template-service.js +87 -5
- package/dist/server/modules/terminal/command-template-service.js.map +1 -1
- package/dist/server/modules/terminal/template-reverse-proxy-service.js +71 -3
- package/dist/server/modules/terminal/template-reverse-proxy-service.js.map +1 -1
- package/dist/server/modules/terminal/terminal-controller.d.ts +3 -0
- package/dist/server/modules/terminal/terminal-controller.js +41 -0
- package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
- package/dist/server/modules/workbench/workbench-service.d.ts +3 -0
- package/dist/server/modules/workbench/workbench-service.js +4 -3
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-file-watcher.d.ts +14 -6
- package/dist/server/modules/workbench/workspace-file-watcher.js +267 -57
- package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +2 -0
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +32 -3
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-manager.d.ts +9 -1
- package/dist/server/modules/worktree/worktree-manager.js +9 -1
- package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
- package/dist/server/routes/assistant.js +49 -0
- package/dist/server/routes/assistant.js.map +1 -1
- package/dist/server/routes/auth.js +4 -0
- package/dist/server/routes/auth.js.map +1 -1
- package/dist/server/routes/butler.js +5 -0
- package/dist/server/routes/butler.js.map +1 -1
- package/dist/server/routes/sessions.js +1 -0
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/system.d.ts +2 -1
- package/dist/server/routes/system.js +13 -1
- package/dist/server/routes/system.js.map +1 -1
- package/dist/server/server/create-server.d.ts +18 -0
- package/dist/server/server/create-server.js +113 -20
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/utils/tokens.d.ts +3 -1
- package/dist/server/shared/utils/tokens.js +9 -2
- package/dist/server/shared/utils/tokens.js.map +1 -1
- package/dist/server/storage/repositories/assistant-automation-run-repository.d.ts +12 -0
- package/dist/server/storage/repositories/assistant-automation-run-repository.js +139 -0
- package/dist/server/storage/repositories/assistant-automation-run-repository.js.map +1 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.d.ts +17 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.js +179 -0
- package/dist/server/storage/repositories/assistant-automation-task-repository.js.map +1 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +18 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +191 -0
- package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-device-repository.d.ts +22 -0
- package/dist/server/storage/repositories/auth-device-repository.js +97 -0
- package/dist/server/storage/repositories/auth-device-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-device-session-repository.d.ts +17 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js +82 -0
- package/dist/server/storage/repositories/auth-device-session-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-login-event-repository.d.ts +9 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js +53 -0
- package/dist/server/storage/repositories/auth-login-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/auth-token-repository.d.ts +4 -0
- package/dist/server/storage/repositories/auth-token-repository.js +58 -5
- package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-session-repository.js +27 -3
- package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
- package/dist/server/storage/repositories/butler-control-timer-repository.d.ts +15 -0
- package/dist/server/storage/repositories/butler-control-timer-repository.js +157 -0
- package/dist/server/storage/repositories/butler-control-timer-repository.js.map +1 -0
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js +21 -3
- package/dist/server/storage/repositories/butler-follow-up-task-repository.js.map +1 -1
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.d.ts +8 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js +52 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-identity-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.d.ts +10 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js +153 -0
- package/dist/server/storage/repositories/instance-relay-tunnel-repository.js.map +1 -0
- package/dist/server/storage/repositories/instance-tailscale-repository.js +6 -3
- package/dist/server/storage/repositories/instance-tailscale-repository.js.map +1 -1
- package/dist/server/storage/repositories/managed-skill-repository.d.ts +2 -1
- package/dist/server/storage/repositories/managed-skill-repository.js +14 -4
- package/dist/server/storage/repositories/managed-skill-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-message-attachment-repository.d.ts +2 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js +24 -0
- package/dist/server/storage/repositories/session-message-attachment-repository.js.map +1 -1
- package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
- package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
- package/dist/server/storage/sqlite/client.js +534 -2
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +228 -4
- package/dist/server/types/domain.d.ts +170 -2
- package/dist/server/ws/workbench-ws-hub.d.ts +14 -8
- package/dist/server/ws/workbench-ws-hub.js +369 -209
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-auth-guard.js +1 -4
- package/dist/server/ws/ws-auth-guard.js.map +1 -1
- package/dist/server/ws/ws-server.d.ts +1 -1
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js +80 -0
- package/node_modules/@codingns/session-sync-core/dist/codex-resume-history.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +122 -4
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +17 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +437 -51
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +7 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +240 -27
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +108 -2
- package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +101 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +4 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +44 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +153 -60
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/services.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/services.js +24 -8
- package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +6 -0
- package/package.json +1 -1
- package/scripts/postinstall.mjs +0 -33
- package/dist/public/assets/index-BlOinYqR.js +0 -122
- package/dist/public/assets/index-Dg_7g6lA.css +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ProviderSubscription } from "@codingns/session-sync-core";
|
|
2
|
+
import type { SessionHistoryEnvelope } from "./session-history-service.js";
|
|
3
|
+
import type { SessionLiveRuntimeService, SessionRuntimeEnvelope } from "./session-live-runtime-service.js";
|
|
4
|
+
export type SessionRuntimeRouterServiceContract = Pick<SessionLiveRuntimeService, "startLiveSession" | "sendLiveMessage" | "enqueueLiveMessage" | "getSessionRuntime" | "interruptSession" | "subscribeRuntime" | "listPermissionRequests" | "replyPermissionRequest" | "listQueuedMessages" | "deleteQueuedMessage" | "steerQueuedMessage" | "getClaudeHookBridgeConfig" | "ingestClaudeHookEvent" | "resolveLiveActivityObservation">;
|
|
5
|
+
export declare class SessionLiveRuntimeRouterService implements SessionRuntimeRouterServiceContract {
|
|
6
|
+
private readonly primaryService;
|
|
7
|
+
private readonly services;
|
|
8
|
+
constructor(primaryService: SessionRuntimeRouterServiceContract, delegatedServices: readonly SessionRuntimeRouterServiceContract[]);
|
|
9
|
+
readonly startLiveSession: SessionLiveRuntimeService["startLiveSession"];
|
|
10
|
+
readonly sendLiveMessage: SessionLiveRuntimeService["sendLiveMessage"];
|
|
11
|
+
readonly enqueueLiveMessage: SessionLiveRuntimeService["enqueueLiveMessage"];
|
|
12
|
+
readonly getSessionRuntime: SessionLiveRuntimeService["getSessionRuntime"];
|
|
13
|
+
readonly interruptSession: SessionLiveRuntimeService["interruptSession"];
|
|
14
|
+
readonly subscribeRuntime: (sessionId: string, onEnvelope: (envelope: SessionRuntimeEnvelope | SessionHistoryEnvelope) => Promise<void> | void) => ProviderSubscription;
|
|
15
|
+
readonly listPermissionRequests: SessionLiveRuntimeService["listPermissionRequests"];
|
|
16
|
+
readonly replyPermissionRequest: SessionLiveRuntimeService["replyPermissionRequest"];
|
|
17
|
+
readonly listQueuedMessages: SessionLiveRuntimeService["listQueuedMessages"];
|
|
18
|
+
readonly deleteQueuedMessage: SessionLiveRuntimeService["deleteQueuedMessage"];
|
|
19
|
+
readonly steerQueuedMessage: SessionLiveRuntimeService["steerQueuedMessage"];
|
|
20
|
+
readonly getClaudeHookBridgeConfig: SessionLiveRuntimeService["getClaudeHookBridgeConfig"];
|
|
21
|
+
readonly ingestClaudeHookEvent: SessionLiveRuntimeService["ingestClaudeHookEvent"];
|
|
22
|
+
readonly resolveLiveActivityObservation: SessionLiveRuntimeService["resolveLiveActivityObservation"];
|
|
23
|
+
private resolveServiceForSession;
|
|
24
|
+
private findOwningService;
|
|
25
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export class SessionLiveRuntimeRouterService {
|
|
2
|
+
primaryService;
|
|
3
|
+
services;
|
|
4
|
+
constructor(primaryService, delegatedServices) {
|
|
5
|
+
this.primaryService = primaryService;
|
|
6
|
+
this.services = [primaryService, ...delegatedServices];
|
|
7
|
+
}
|
|
8
|
+
startLiveSession = async (input) => this.primaryService.startLiveSession(input);
|
|
9
|
+
sendLiveMessage = async (input) => this.resolveServiceForSession(input.sessionId).sendLiveMessage(input);
|
|
10
|
+
enqueueLiveMessage = async (input) => this.resolveServiceForSession(input.sessionId).enqueueLiveMessage(input);
|
|
11
|
+
getSessionRuntime = async (sessionId, userId) => this.resolveServiceForSession(sessionId).getSessionRuntime(sessionId, userId);
|
|
12
|
+
interruptSession = async (sessionId, userId) => this.resolveServiceForSession(sessionId).interruptSession(sessionId, userId);
|
|
13
|
+
subscribeRuntime = (sessionId, onEnvelope) => this.resolveServiceForSession(sessionId).subscribeRuntime(sessionId, onEnvelope);
|
|
14
|
+
listPermissionRequests = async (sessionId, userId) => this.resolveServiceForSession(sessionId).listPermissionRequests(sessionId, userId);
|
|
15
|
+
replyPermissionRequest = async (sessionId, userId, requestId, input) => this.resolveServiceForSession(sessionId).replyPermissionRequest(sessionId, userId, requestId, input);
|
|
16
|
+
listQueuedMessages = async (sessionId, userId) => this.resolveServiceForSession(sessionId).listQueuedMessages(sessionId, userId);
|
|
17
|
+
deleteQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).deleteQueuedMessage(sessionId, userId, queueItemId);
|
|
18
|
+
steerQueuedMessage = async (sessionId, userId, queueItemId) => this.resolveServiceForSession(sessionId).steerQueuedMessage(sessionId, userId, queueItemId);
|
|
19
|
+
getClaudeHookBridgeConfig = () => this.primaryService.getClaudeHookBridgeConfig();
|
|
20
|
+
ingestClaudeHookEvent = async (payload) => {
|
|
21
|
+
for (const service of this.services) {
|
|
22
|
+
const result = await service.ingestClaudeHookEvent(payload);
|
|
23
|
+
if (!result.ignored || result.sessionId) {
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return this.primaryService.ingestClaudeHookEvent(payload);
|
|
28
|
+
};
|
|
29
|
+
resolveLiveActivityObservation = (sessionId) => this.findOwningService(sessionId)?.resolveLiveActivityObservation(sessionId) ?? null;
|
|
30
|
+
resolveServiceForSession(sessionId) {
|
|
31
|
+
return this.findOwningService(sessionId) ?? this.primaryService;
|
|
32
|
+
}
|
|
33
|
+
findOwningService(sessionId) {
|
|
34
|
+
for (const service of this.services) {
|
|
35
|
+
if (service.resolveLiveActivityObservation(sessionId)) {
|
|
36
|
+
return service;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=session-live-runtime-router-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -18,6 +18,7 @@ interface RuntimeSendOptions {
|
|
|
18
18
|
model?: string | null;
|
|
19
19
|
reasoningLevel?: string | null;
|
|
20
20
|
permissionMode?: string | null;
|
|
21
|
+
providerInstructionFilePath?: string | null;
|
|
21
22
|
attachments?: SessionAttachmentInput[];
|
|
22
23
|
}
|
|
23
24
|
interface StartLiveSessionInput {
|
|
@@ -188,6 +189,7 @@ export declare class SessionLiveRuntimeService {
|
|
|
188
189
|
private readonly externalRuntimeSnapshots;
|
|
189
190
|
private readonly runtimeListeners;
|
|
190
191
|
private readonly terminalStateListeners;
|
|
192
|
+
private readonly deadRuntimeReconciliationSessions;
|
|
191
193
|
private readonly runtimeMessageSeenSessions;
|
|
192
194
|
private readonly runtimeHistoryFallbackSentSessions;
|
|
193
195
|
private readonly queueDispatchSessions;
|
|
@@ -217,6 +219,10 @@ export declare class SessionLiveRuntimeService {
|
|
|
217
219
|
dispose(): Promise<void>;
|
|
218
220
|
private subscribeExternalRuntime;
|
|
219
221
|
private emitExternalRuntimeEnvelope;
|
|
222
|
+
private getLiveRuntimeSnapshot;
|
|
223
|
+
private demoteDeadRuntimeSnapshot;
|
|
224
|
+
private scheduleDeadRuntimeReconciliation;
|
|
225
|
+
private reconcileDeadRuntimeSession;
|
|
220
226
|
private buildSessionActivityEnvelope;
|
|
221
227
|
private resolveRuntimeSessionId;
|
|
222
228
|
private isLinkedGeminiRuntimeSession;
|
|
@@ -33,6 +33,7 @@ export class SessionLiveRuntimeService {
|
|
|
33
33
|
externalRuntimeSnapshots = new Map();
|
|
34
34
|
runtimeListeners = new Map();
|
|
35
35
|
terminalStateListeners = new Set();
|
|
36
|
+
deadRuntimeReconciliationSessions = new Set();
|
|
36
37
|
runtimeMessageSeenSessions = new Set();
|
|
37
38
|
runtimeHistoryFallbackSentSessions = new Set();
|
|
38
39
|
queueDispatchSessions = new Set();
|
|
@@ -78,6 +79,7 @@ export class SessionLiveRuntimeService {
|
|
|
78
79
|
this.ensurePendingSessionBinding(sessionId, workspace.id, input.provider);
|
|
79
80
|
const persistedAttachments = this.persistMessageAttachments(sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
|
|
80
81
|
const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(input.provider, input.content, persistedAttachments.runtimeAttachments);
|
|
82
|
+
const providerInstructionFilePath = resolveRuntimeInstructionFilePath(input.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
|
|
81
83
|
this.ensureCapability(capabilities.canStartSession, "provider", "provider 不支持 start-live");
|
|
82
84
|
this.ensureCapability(capabilities.canSendMessage, "provider", "provider 不支持实时对话");
|
|
83
85
|
const launchRuntimeStartedAtMs = performance.now();
|
|
@@ -96,6 +98,7 @@ export class SessionLiveRuntimeService {
|
|
|
96
98
|
reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
|
|
97
99
|
permissionMode: input.runtimeOptions?.permissionMode ?? null,
|
|
98
100
|
providerPrompt,
|
|
101
|
+
providerInstructionFilePath,
|
|
99
102
|
attachments: persistedAttachments.runtimeAttachments
|
|
100
103
|
}
|
|
101
104
|
}, "start");
|
|
@@ -238,16 +241,6 @@ export class SessionLiveRuntimeService {
|
|
|
238
241
|
field: "queueItemId"
|
|
239
242
|
});
|
|
240
243
|
}
|
|
241
|
-
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
242
|
-
const runtimeSnapshot = this.providerRuntimeService.getSnapshot(runtimeSessionId);
|
|
243
|
-
if (!runtimeSnapshot || !isActiveRuntimeState(runtimeSnapshot.runningState)) {
|
|
244
|
-
throw new AppError({
|
|
245
|
-
statusCode: 409,
|
|
246
|
-
errorCode: "SESSION_NOT_RUNNING",
|
|
247
|
-
detail: "当前会话不在运行中,无法立刻引导这条消息",
|
|
248
|
-
field: "queueItemId"
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
244
|
const capabilities = await this.sessionHistoryService.getSessionCapabilities(sessionId);
|
|
252
245
|
if (capabilities.inRunInputMode === "none") {
|
|
253
246
|
throw new AppError({
|
|
@@ -275,6 +268,8 @@ export class SessionLiveRuntimeService {
|
|
|
275
268
|
runtimeAttachments: restoredAttachments
|
|
276
269
|
};
|
|
277
270
|
try {
|
|
271
|
+
// 队列里的“引导”语义是立刻发这条,而不是死盯着“必须命中当前 run”。
|
|
272
|
+
// 有 active run 时走原生 steer;空闲时就直接起新一轮,把指定队列项先发出去。
|
|
278
273
|
const result = await this.sendLiveMessageDirect({
|
|
279
274
|
sessionId,
|
|
280
275
|
userId,
|
|
@@ -439,7 +434,7 @@ export class SessionLiveRuntimeService {
|
|
|
439
434
|
}
|
|
440
435
|
async getSessionRuntime(sessionId, userId) {
|
|
441
436
|
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
442
|
-
const runtimeSnapshot = this.
|
|
437
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
443
438
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(runtimeSessionId) ?? null;
|
|
444
439
|
const runtimeHasActiveRun = runtimeSnapshot ? isActiveRuntimeState(runtimeSnapshot.runningState) : false;
|
|
445
440
|
const externalHasActiveRun = externalRuntimeSnapshot
|
|
@@ -529,7 +524,7 @@ export class SessionLiveRuntimeService {
|
|
|
529
524
|
}
|
|
530
525
|
resolveLiveActivityObservation(sessionId) {
|
|
531
526
|
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
532
|
-
const runtimeSnapshot = this.
|
|
527
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
533
528
|
if (runtimeSnapshot) {
|
|
534
529
|
return createRuntimeActivityObservation(runtimeSessionId, runtimeSnapshot);
|
|
535
530
|
}
|
|
@@ -542,8 +537,17 @@ export class SessionLiveRuntimeService {
|
|
|
542
537
|
async interruptSession(sessionId, userId) {
|
|
543
538
|
this.sessionHistoryService.getSession(sessionId, userId);
|
|
544
539
|
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
545
|
-
const runtime = this.
|
|
540
|
+
const runtime = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
541
|
+
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(runtimeSessionId) ?? null;
|
|
546
542
|
if (!runtime || (runtime.runningState !== "running" && runtime.runningState !== "starting")) {
|
|
543
|
+
if (externalRuntimeSnapshot && isActiveRuntimeState(externalRuntimeSnapshot.runningState)) {
|
|
544
|
+
throw new AppError({
|
|
545
|
+
statusCode: 409,
|
|
546
|
+
errorCode: "CAPABILITY_NOT_SUPPORTED",
|
|
547
|
+
detail: "当前 Claude 外部运行仍在进行,但现有链路不支持中断",
|
|
548
|
+
field: "sessionId"
|
|
549
|
+
});
|
|
550
|
+
}
|
|
547
551
|
throw new AppError({
|
|
548
552
|
statusCode: 409,
|
|
549
553
|
errorCode: "SESSION_NOT_RUNNING",
|
|
@@ -584,7 +588,7 @@ export class SessionLiveRuntimeService {
|
|
|
584
588
|
}
|
|
585
589
|
subscribeRuntime(sessionId, onEnvelope) {
|
|
586
590
|
const runtimeSessionId = this.resolveRuntimeSessionId(sessionId);
|
|
587
|
-
const runtimeSnapshot = this.
|
|
591
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
588
592
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(runtimeSessionId) ?? null;
|
|
589
593
|
const initialActivityEnvelope = this.buildSessionActivityEnvelope(sessionId, runtimeSessionId);
|
|
590
594
|
if (runtimeSnapshot) {
|
|
@@ -685,8 +689,74 @@ export class SessionLiveRuntimeService {
|
|
|
685
689
|
await listener(envelope);
|
|
686
690
|
}));
|
|
687
691
|
}
|
|
692
|
+
getLiveRuntimeSnapshot(sessionId) {
|
|
693
|
+
const snapshot = this.providerRuntimeService.getSnapshot(sessionId);
|
|
694
|
+
if (!snapshot) {
|
|
695
|
+
return null;
|
|
696
|
+
}
|
|
697
|
+
if (!isActiveRuntimeState(snapshot.runningState)) {
|
|
698
|
+
return snapshot;
|
|
699
|
+
}
|
|
700
|
+
if (this.providerRuntimeService.isRunHealthy(sessionId) === false) {
|
|
701
|
+
this.demoteDeadRuntimeSnapshot(snapshot);
|
|
702
|
+
this.scheduleDeadRuntimeReconciliation(snapshot);
|
|
703
|
+
return null;
|
|
704
|
+
}
|
|
705
|
+
return snapshot;
|
|
706
|
+
}
|
|
707
|
+
demoteDeadRuntimeSnapshot(snapshot) {
|
|
708
|
+
const updatedAt = nowIso();
|
|
709
|
+
for (const userId of this.authUserRepository.listIds()) {
|
|
710
|
+
const current = this.sessionStateRepository.findBySessionAndUser(snapshot.sessionId, userId);
|
|
711
|
+
if (!current || !isPendingSessionRunningState(current.runningState) || current.activitySource !== "runtime") {
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
this.sessionStateRepository.upsert({
|
|
715
|
+
...current,
|
|
716
|
+
runningState: "interrupted",
|
|
717
|
+
activitySource: "runtime",
|
|
718
|
+
completedAt: updatedAt,
|
|
719
|
+
updatedAt
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
this.sessionActivityAuthorityService.observe({
|
|
723
|
+
sessionId: snapshot.sessionId,
|
|
724
|
+
runId: buildRuntimeRunId(snapshot.sessionId, snapshot.startedAt),
|
|
725
|
+
runningState: "interrupted",
|
|
726
|
+
source: "authoritative_runtime",
|
|
727
|
+
confidence: "strong",
|
|
728
|
+
detail: "Host 检测到这轮运行已经异常结束,已自动回收残留运行态",
|
|
729
|
+
interruptSource: "runtime",
|
|
730
|
+
errorCode: null,
|
|
731
|
+
observedAt: updatedAt
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
scheduleDeadRuntimeReconciliation(snapshot) {
|
|
735
|
+
if (this.deadRuntimeReconciliationSessions.has(snapshot.sessionId)) {
|
|
736
|
+
return;
|
|
737
|
+
}
|
|
738
|
+
this.deadRuntimeReconciliationSessions.add(snapshot.sessionId);
|
|
739
|
+
void this.reconcileDeadRuntimeSession(snapshot).finally(() => {
|
|
740
|
+
this.deadRuntimeReconciliationSessions.delete(snapshot.sessionId);
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
async reconcileDeadRuntimeSession(snapshot) {
|
|
744
|
+
await this.providerRuntimeService.abandonRun(snapshot.sessionId).catch(() => {
|
|
745
|
+
return;
|
|
746
|
+
});
|
|
747
|
+
for (const userId of this.authUserRepository.listIds()) {
|
|
748
|
+
await this.sessionHistoryService.refreshRuntimeFallbackSession(snapshot.sessionId, userId).catch(() => {
|
|
749
|
+
return;
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
const envelope = this.buildSessionActivityEnvelope(snapshot.sessionId, snapshot.sessionId);
|
|
753
|
+
if (envelope) {
|
|
754
|
+
await this.emitExternalRuntimeEnvelope(envelope);
|
|
755
|
+
}
|
|
756
|
+
void this.dispatchNextQueuedMessage(snapshot.sessionId);
|
|
757
|
+
}
|
|
688
758
|
buildSessionActivityEnvelope(sessionId, runtimeSessionId = sessionId) {
|
|
689
|
-
const runtimeSnapshot = this.
|
|
759
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
690
760
|
if (runtimeSnapshot) {
|
|
691
761
|
const resolution = this.sessionActivityAuthorityService.observe(createRuntimeActivityObservation(runtimeSessionId, runtimeSnapshot));
|
|
692
762
|
return {
|
|
@@ -968,6 +1038,7 @@ export class SessionLiveRuntimeService {
|
|
|
968
1038
|
const resolvedAttachments = persistedAttachments
|
|
969
1039
|
?? this.persistMessageAttachments(input.sessionId, input.clientRequestId, input.runtimeOptions?.attachments ?? []);
|
|
970
1040
|
const providerPrompt = this.sessionMessageAttachmentService.buildProviderPrompt(session.provider, input.content, resolvedAttachments.runtimeAttachments);
|
|
1041
|
+
const providerInstructionFilePath = resolveRuntimeInstructionFilePath(session.provider, workspace.path, input.runtimeOptions?.providerInstructionFilePath ?? null);
|
|
971
1042
|
this.ensureCapability(capabilities.canSendMessage, "sessionId", "provider 不支持实时对话");
|
|
972
1043
|
const runtimeRequest = {
|
|
973
1044
|
sessionId: input.sessionId,
|
|
@@ -984,11 +1055,12 @@ export class SessionLiveRuntimeService {
|
|
|
984
1055
|
reasoningLevel: input.runtimeOptions?.reasoningLevel ?? null,
|
|
985
1056
|
permissionMode: input.runtimeOptions?.permissionMode ?? null,
|
|
986
1057
|
providerPrompt,
|
|
1058
|
+
providerInstructionFilePath,
|
|
987
1059
|
attachments: resolvedAttachments.runtimeAttachments
|
|
988
1060
|
}
|
|
989
1061
|
};
|
|
990
1062
|
const runtimeSessionId = this.resolveRuntimeSessionId(input.sessionId);
|
|
991
|
-
const activeRun = this.
|
|
1063
|
+
const activeRun = this.getLiveRuntimeSnapshot(runtimeSessionId);
|
|
992
1064
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(runtimeSessionId);
|
|
993
1065
|
if (activeRun &&
|
|
994
1066
|
activeRun.provider === "claude-code" &&
|
|
@@ -1008,14 +1080,29 @@ export class SessionLiveRuntimeService {
|
|
|
1008
1080
|
}
|
|
1009
1081
|
if (activeRun && isActiveRuntimeState(activeRun.runningState)) {
|
|
1010
1082
|
const submitStartedAtMs = performance.now();
|
|
1011
|
-
|
|
1012
|
-
.
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1083
|
+
try {
|
|
1084
|
+
await this.providerRuntimeService.submitToActiveRun(runtimeSessionId, runtimeRequest.options);
|
|
1085
|
+
this.logSendDebugStep(debugTrace, "submit_to_active_run", submitStartedAtMs, {
|
|
1086
|
+
runtimeMode,
|
|
1087
|
+
activeRunState: activeRun.runningState
|
|
1088
|
+
});
|
|
1089
|
+
}
|
|
1090
|
+
catch (error) {
|
|
1091
|
+
const mapped = mapSessionProviderError(error);
|
|
1092
|
+
// 运行时句柄还没来得及收尾时,steer 可能会撞上 provider 已终态。
|
|
1093
|
+
// 这里直接失败只会把一条正常消息变成偶发 409,属于纯粹的坏味道。
|
|
1094
|
+
if (mapped.errorCode === "SESSION_NOT_RUNNING") {
|
|
1095
|
+
await this.providerRuntimeService.abandonRun(runtimeSessionId);
|
|
1096
|
+
const restartRuntimeStartedAtMs = performance.now();
|
|
1097
|
+
await this.startRuntimeRun(runtimeRequest, input.userId, runtimeMode);
|
|
1098
|
+
this.logSendDebugStep(debugTrace, "restart_runtime_after_stale_active_run", restartRuntimeStartedAtMs, {
|
|
1099
|
+
runtimeMode
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
else {
|
|
1103
|
+
throw mapped;
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1019
1106
|
}
|
|
1020
1107
|
else {
|
|
1021
1108
|
const startRuntimeStartedAtMs = performance.now();
|
|
@@ -1031,6 +1118,7 @@ export class SessionLiveRuntimeService {
|
|
|
1031
1118
|
matched: Boolean(acceptedMessage)
|
|
1032
1119
|
});
|
|
1033
1120
|
const acceptedAt = acceptedMessage?.timestamp ?? nowIso();
|
|
1121
|
+
this.sessionHistoryService.resolveMessageOriginByClientRequestId(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null, acceptedAt);
|
|
1034
1122
|
const boundAttachments = this.sessionMessageAttachmentService.bindClientRequestToMessage(input.sessionId, input.clientRequestId, acceptedMessage?.messageId ?? null);
|
|
1035
1123
|
this.refreshSyntheticSessionTitle(session, input.content, input.userId);
|
|
1036
1124
|
this.markSendDebugResponseReady(debugTrace, {
|
|
@@ -1067,7 +1155,7 @@ export class SessionLiveRuntimeService {
|
|
|
1067
1155
|
}
|
|
1068
1156
|
this.queueDispatchSessions.add(sessionId);
|
|
1069
1157
|
try {
|
|
1070
|
-
const runtimeSnapshot = this.
|
|
1158
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(sessionId);
|
|
1071
1159
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(sessionId);
|
|
1072
1160
|
if ((runtimeSnapshot && isActiveRuntimeState(runtimeSnapshot.runningState))
|
|
1073
1161
|
|| (externalRuntimeSnapshot && isActiveRuntimeState(externalRuntimeSnapshot.runningState))) {
|
|
@@ -1130,7 +1218,7 @@ export class SessionLiveRuntimeService {
|
|
|
1130
1218
|
void this.dispatchNextQueuedMessage(session.sessionId);
|
|
1131
1219
|
}
|
|
1132
1220
|
shouldBlockQueueDispatch(session) {
|
|
1133
|
-
const runtimeSnapshot = this.
|
|
1221
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(session.sessionId);
|
|
1134
1222
|
if (runtimeSnapshot && isActiveRuntimeState(runtimeSnapshot.runningState)) {
|
|
1135
1223
|
return true;
|
|
1136
1224
|
}
|
|
@@ -1170,7 +1258,7 @@ export class SessionLiveRuntimeService {
|
|
|
1170
1258
|
|| !isPendingSessionRunningState(session.runningState)) {
|
|
1171
1259
|
return session;
|
|
1172
1260
|
}
|
|
1173
|
-
const runtimeSnapshot = this.
|
|
1261
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(sessionId);
|
|
1174
1262
|
const externalRuntimeSnapshot = this.externalRuntimeSnapshots.get(sessionId);
|
|
1175
1263
|
if ((runtimeSnapshot && isActiveRuntimeState(runtimeSnapshot.runningState))
|
|
1176
1264
|
|| (externalRuntimeSnapshot && isActiveRuntimeState(externalRuntimeSnapshot.runningState))) {
|
|
@@ -1668,7 +1756,7 @@ export class SessionLiveRuntimeService {
|
|
|
1668
1756
|
});
|
|
1669
1757
|
}
|
|
1670
1758
|
shouldIgnoreClaudeExternalRuntimeUpdate(sessionId) {
|
|
1671
|
-
const runtimeSnapshot = this.
|
|
1759
|
+
const runtimeSnapshot = this.getLiveRuntimeSnapshot(sessionId);
|
|
1672
1760
|
return Boolean(runtimeSnapshot &&
|
|
1673
1761
|
runtimeSnapshot.provider === "claude-code" &&
|
|
1674
1762
|
isActiveRuntimeState(runtimeSnapshot.runningState));
|
|
@@ -2056,6 +2144,20 @@ function createProviderRuntimeAdapters(config, options = {}) {
|
|
|
2056
2144
|
disposables
|
|
2057
2145
|
};
|
|
2058
2146
|
}
|
|
2147
|
+
function resolveRuntimeInstructionFilePath(provider, workspacePath, explicitFilePath) {
|
|
2148
|
+
const normalizedExplicit = explicitFilePath?.trim();
|
|
2149
|
+
if (normalizedExplicit) {
|
|
2150
|
+
const resolvedExplicit = path.resolve(normalizedExplicit);
|
|
2151
|
+
return existsSync(resolvedExplicit) ? resolvedExplicit : null;
|
|
2152
|
+
}
|
|
2153
|
+
if (provider !== "claude-code") {
|
|
2154
|
+
return null;
|
|
2155
|
+
}
|
|
2156
|
+
const defaultClaudeInstructionPath = path.join(workspacePath, "CLAUDE.md");
|
|
2157
|
+
return existsSync(defaultClaudeInstructionPath)
|
|
2158
|
+
? path.resolve(defaultClaudeInstructionPath)
|
|
2159
|
+
: null;
|
|
2160
|
+
}
|
|
2059
2161
|
function buildClaudeHookBridgeConfig(config) {
|
|
2060
2162
|
const bridgeUrl = `http://127.0.0.1:${config.port}/api/providers/claude-code/hook-bridge/events`;
|
|
2061
2163
|
const scriptPath = resolveClaudeHookBridgeScriptPath();
|