@jingyi0605/codingns4dsh 0.2.0-beta.2 → 0.2.0-rc3
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.en.md +4 -4
- package/README.md +18 -7
- package/assets/provider-icons/antigravity.svg +39 -0
- package/assets/provider-icons/codebuddy.svg +37 -0
- package/assets/provider-icons/cursor-cli.svg +1 -0
- package/assets/provider-icons/kiro-cli.svg +11 -0
- package/assets/provider-icons/minimax-code.svg +4 -0
- package/assets/provider-icons/qoder-cn.svg +5 -0
- package/assets/provider-icons/qoder.svg +5 -0
- package/assets/provider-icons/workbuddy.svg +29 -0
- package/assets/provider-icons/zcode.svg +14 -0
- package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.d.ts.map +1 -1
- package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +78 -1
- package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
- package/data/build/dist/client/account-bar.d.ts +2 -1
- package/data/build/dist/client/account-bar.d.ts.map +1 -1
- package/data/build/dist/client/account-bar.js +21 -16
- package/data/build/dist/client/account-bar.js.map +1 -1
- package/data/build/dist/client/bundle.js +8147 -2158
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/cli-catalog.d.ts +1 -1
- package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
- package/data/build/dist/client/cli-catalog.js +11 -5
- package/data/build/dist/client/cli-catalog.js.map +1 -1
- package/data/build/dist/client/cli-slots.d.ts.map +1 -1
- package/data/build/dist/client/cli-slots.js +127 -21
- package/data/build/dist/client/cli-slots.js.map +1 -1
- package/data/build/dist/client/debug/ui.d.ts +2 -1
- package/data/build/dist/client/debug/ui.d.ts.map +1 -1
- package/data/build/dist/client/debug/ui.js +41 -34
- package/data/build/dist/client/debug/ui.js.map +1 -1
- package/data/build/dist/client/delegate-command.d.ts +17 -0
- package/data/build/dist/client/delegate-command.d.ts.map +1 -0
- package/data/build/dist/client/delegate-command.js +597 -0
- package/data/build/dist/client/delegate-command.js.map +1 -0
- package/data/build/dist/client/delegate-plan.d.ts +40 -0
- package/data/build/dist/client/delegate-plan.d.ts.map +1 -0
- package/data/build/dist/client/delegate-plan.js +63 -0
- package/data/build/dist/client/delegate-plan.js.map +1 -0
- package/data/build/dist/client/delegate-ui-dom.d.ts +86 -0
- package/data/build/dist/client/delegate-ui-dom.d.ts.map +1 -0
- package/data/build/dist/client/delegate-ui-dom.js +647 -0
- package/data/build/dist/client/delegate-ui-dom.js.map +1 -0
- package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
- package/data/build/dist/client/external-tool-stream.js +44 -36
- package/data/build/dist/client/external-tool-stream.js.map +1 -1
- package/data/build/dist/client/features/cli-adapters.d.ts +7 -2
- package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
- package/data/build/dist/client/features/cli-adapters.js +153 -95
- package/data/build/dist/client/features/cli-adapters.js.map +1 -1
- package/data/build/dist/client/features/debug.d.ts.map +1 -1
- package/data/build/dist/client/features/debug.js +5 -3
- package/data/build/dist/client/features/debug.js.map +1 -1
- package/data/build/dist/client/features/file-management.d.ts.map +1 -1
- package/data/build/dist/client/features/file-management.js +7 -4
- package/data/build/dist/client/features/file-management.js.map +1 -1
- package/data/build/dist/client/features/lan-access-panel.js +10 -10
- package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
- package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
- package/data/build/dist/client/features/lan-access.js +8 -3
- package/data/build/dist/client/features/lan-access.js.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.js +9 -7
- package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
- package/data/build/dist/client/features/login-protection.js +2 -2
- package/data/build/dist/client/features/login-protection.js.map +1 -1
- package/data/build/dist/client/features/mobile-access-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/mobile-access-panel.js +8 -7
- package/data/build/dist/client/features/mobile-access-panel.js.map +1 -1
- package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
- package/data/build/dist/client/features/mobile-access.js +6 -2
- package/data/build/dist/client/features/mobile-access.js.map +1 -1
- package/data/build/dist/client/features/peer-host.d.ts +6 -4
- package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/client/features/peer-host.js +459 -27
- package/data/build/dist/client/features/peer-host.js.map +1 -1
- package/data/build/dist/client/features/reverse-proxy.js +2 -2
- package/data/build/dist/client/features/reverse-proxy.js.map +1 -1
- package/data/build/dist/client/features/terminal-enhancement.js +2 -2
- package/data/build/dist/client/features/terminal-enhancement.js.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement.js +8 -3
- package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
- package/data/build/dist/client/file-management-dom.d.ts +3 -0
- package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
- package/data/build/dist/client/file-management-dom.js +41 -30
- package/data/build/dist/client/file-management-dom.js.map +1 -1
- package/data/build/dist/client/git-history-graph.d.ts +2 -2
- package/data/build/dist/client/git-history-graph.d.ts.map +1 -1
- package/data/build/dist/client/git-history-graph.js +2 -2
- package/data/build/dist/client/git-history-graph.js.map +1 -1
- package/data/build/dist/client/git-management.d.ts +2 -0
- package/data/build/dist/client/git-management.d.ts.map +1 -1
- package/data/build/dist/client/git-management.js +103 -75
- package/data/build/dist/client/git-management.js.map +1 -1
- package/data/build/dist/client/git-workspace-events.d.ts +7 -0
- package/data/build/dist/client/git-workspace-events.d.ts.map +1 -0
- package/data/build/dist/client/git-workspace-events.js +32 -0
- package/data/build/dist/client/git-workspace-events.js.map +1 -0
- package/data/build/dist/client/index.d.ts +2 -0
- package/data/build/dist/client/index.d.ts.map +1 -1
- package/data/build/dist/client/index.js +6 -5
- package/data/build/dist/client/index.js.map +1 -1
- package/data/build/dist/client/locale.d.ts +7 -0
- package/data/build/dist/client/locale.d.ts.map +1 -1
- package/data/build/dist/client/locale.js +140 -42
- package/data/build/dist/client/locale.js.map +1 -1
- package/data/build/dist/client/locales/debug.d.ts +9 -0
- package/data/build/dist/client/locales/debug.d.ts.map +1 -0
- package/data/build/dist/client/locales/debug.js +163 -0
- package/data/build/dist/client/locales/debug.js.map +1 -0
- package/data/build/dist/client/locales/fileWorkspace.d.ts +9 -0
- package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -0
- package/data/build/dist/client/locales/fileWorkspace.js +139 -0
- package/data/build/dist/client/locales/fileWorkspace.js.map +1 -0
- package/data/build/dist/client/locales/git.d.ts +9 -0
- package/data/build/dist/client/locales/git.d.ts.map +1 -0
- package/data/build/dist/client/locales/git.js +223 -0
- package/data/build/dist/client/locales/git.js.map +1 -0
- package/data/build/dist/client/locales/panels.d.ts +9 -0
- package/data/build/dist/client/locales/panels.d.ts.map +1 -0
- package/data/build/dist/client/locales/panels.js +33 -0
- package/data/build/dist/client/locales/panels.js.map +1 -0
- package/data/build/dist/client/locales/peerHost.d.ts +9 -0
- package/data/build/dist/client/locales/peerHost.d.ts.map +1 -0
- package/data/build/dist/client/locales/peerHost.js +153 -0
- package/data/build/dist/client/locales/peerHost.js.map +1 -0
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts +9 -0
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -0
- package/data/build/dist/client/locales/peerHostWorkspace.js +69 -0
- package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -0
- package/data/build/dist/client/locales/terminalAuth.d.ts +9 -0
- package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -0
- package/data/build/dist/client/locales/terminalAuth.js +71 -0
- package/data/build/dist/client/locales/terminalAuth.js.map +1 -0
- package/data/build/dist/client/locales/usage.d.ts +9 -0
- package/data/build/dist/client/locales/usage.d.ts.map +1 -0
- package/data/build/dist/client/locales/usage.js +215 -0
- package/data/build/dist/client/locales/usage.js.map +1 -0
- package/data/build/dist/client/mobile-session-interaction.d.ts +44 -0
- package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -0
- package/data/build/dist/client/mobile-session-interaction.js +308 -0
- package/data/build/dist/client/mobile-session-interaction.js.map +1 -0
- package/data/build/dist/client/mobile-sidebar-gestures.d.ts +55 -7
- package/data/build/dist/client/mobile-sidebar-gestures.d.ts.map +1 -1
- package/data/build/dist/client/mobile-sidebar-gestures.js +339 -40
- package/data/build/dist/client/mobile-sidebar-gestures.js.map +1 -1
- package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts +10 -2
- package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts.map +1 -1
- package/data/build/dist/client/mobile-sidebar-rail-dom.js +14 -6
- package/data/build/dist/client/mobile-sidebar-rail-dom.js.map +1 -1
- package/data/build/dist/client/model-catalog-cache.d.ts +5 -0
- package/data/build/dist/client/model-catalog-cache.d.ts.map +1 -0
- package/data/build/dist/client/model-catalog-cache.js +58 -0
- package/data/build/dist/client/model-catalog-cache.js.map +1 -0
- package/data/build/dist/client/peer-host-aggregate-refresh.d.ts +7 -0
- package/data/build/dist/client/peer-host-aggregate-refresh.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-aggregate-refresh.js +13 -1
- package/data/build/dist/client/peer-host-aggregate-refresh.js.map +1 -1
- package/data/build/dist/client/peer-host-connection-button.d.ts +14 -1
- package/data/build/dist/client/peer-host-connection-button.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-connection-button.js +12 -4
- package/data/build/dist/client/peer-host-connection-button.js.map +1 -1
- package/data/build/dist/client/peer-host-management-panel.d.ts +3 -0
- package/data/build/dist/client/peer-host-management-panel.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-management-panel.js +83 -79
- package/data/build/dist/client/peer-host-management-panel.js.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts +17 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.js +54 -8
- package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-native-store-projection.d.ts +6 -2
- package/data/build/dist/client/peer-host-native-store-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-store-projection.js +308 -10
- package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-scoped-client.js +5 -5
- package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.d.ts +8 -0
- package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.js +48 -28
- package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
- package/data/build/dist/client/provider-icon-assets.js +18 -0
- package/data/build/dist/client/provider-icon-assets.js.map +1 -1
- package/data/build/dist/client/provider-icons.d.ts +8 -2
- package/data/build/dist/client/provider-icons.d.ts.map +1 -1
- package/data/build/dist/client/provider-icons.js +28 -7
- package/data/build/dist/client/provider-icons.js.map +1 -1
- package/data/build/dist/client/pwa-install-prompt.d.ts +4 -1
- package/data/build/dist/client/pwa-install-prompt.d.ts.map +1 -1
- package/data/build/dist/client/pwa-install-prompt.js +8 -7
- package/data/build/dist/client/pwa-install-prompt.js.map +1 -1
- package/data/build/dist/client/quick-phrase-layout.d.ts +11 -0
- package/data/build/dist/client/quick-phrase-layout.d.ts.map +1 -1
- package/data/build/dist/client/quick-phrase-layout.js +20 -0
- package/data/build/dist/client/quick-phrase-layout.js.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.js +20 -8
- package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
- package/data/build/dist/client/remote-web-context.js +10 -6
- package/data/build/dist/client/remote-web-context.js.map +1 -1
- package/data/build/dist/client/service-tier.d.ts +54 -0
- package/data/build/dist/client/service-tier.d.ts.map +1 -0
- package/data/build/dist/client/service-tier.js +78 -0
- package/data/build/dist/client/service-tier.js.map +1 -0
- package/data/build/dist/client/session-changed-files-view.d.ts +8 -1
- package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
- package/data/build/dist/client/session-changed-files-view.js +71 -28
- package/data/build/dist/client/session-changed-files-view.js.map +1 -1
- package/data/build/dist/client/settings-anchor.d.ts +9 -3
- package/data/build/dist/client/settings-anchor.d.ts.map +1 -1
- package/data/build/dist/client/settings-anchor.js +8 -2
- package/data/build/dist/client/settings-anchor.js.map +1 -1
- package/data/build/dist/client/settings-promo-styles.d.ts +28 -0
- package/data/build/dist/client/settings-promo-styles.d.ts.map +1 -0
- package/data/build/dist/client/settings-promo-styles.js +58 -0
- package/data/build/dist/client/settings-promo-styles.js.map +1 -0
- package/data/build/dist/client/settings-promo.d.ts +14 -0
- package/data/build/dist/client/settings-promo.d.ts.map +1 -0
- package/data/build/dist/client/settings-promo.js +68 -0
- package/data/build/dist/client/settings-promo.js.map +1 -0
- package/data/build/dist/client/settings-section.d.ts +2 -1
- package/data/build/dist/client/settings-section.d.ts.map +1 -1
- package/data/build/dist/client/settings-section.js +10 -7
- package/data/build/dist/client/settings-section.js.map +1 -1
- package/data/build/dist/client/subscription-slot.d.ts +4 -1
- package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
- package/data/build/dist/client/subscription-slot.js +497 -56
- package/data/build/dist/client/subscription-slot.js.map +1 -1
- package/data/build/dist/client/terminal/model.d.ts +94 -4
- package/data/build/dist/client/terminal/model.d.ts.map +1 -1
- package/data/build/dist/client/terminal/model.js +392 -33
- package/data/build/dist/client/terminal/model.js.map +1 -1
- package/data/build/dist/client/terminal/recovery.d.ts +16 -1
- package/data/build/dist/client/terminal/recovery.d.ts.map +1 -1
- package/data/build/dist/client/terminal/recovery.js +101 -39
- package/data/build/dist/client/terminal/recovery.js.map +1 -1
- package/data/build/dist/client/terminal/styles.d.ts +10 -0
- package/data/build/dist/client/terminal/styles.d.ts.map +1 -1
- package/data/build/dist/client/terminal/styles.js +27 -3
- package/data/build/dist/client/terminal/styles.js.map +1 -1
- package/data/build/dist/client/terminal/ui.d.ts +3 -2
- package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
- package/data/build/dist/client/terminal/ui.js +216 -103
- package/data/build/dist/client/terminal/ui.js.map +1 -1
- package/data/build/dist/client/terminal/xterm-view.d.ts +8 -1
- package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
- package/data/build/dist/client/terminal/xterm-view.js +394 -34
- package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
- package/data/build/dist/client/workspace-session-archive-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-archive-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-archive-dom.js +131 -45
- package/data/build/dist/client/workspace-session-archive-dom.js.map +1 -1
- package/data/build/dist/client/workspace-session-logo-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-logo-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-logo-dom.js +3 -1
- package/data/build/dist/client/workspace-session-logo-dom.js.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.js +46 -17
- package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +10 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +20 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
- package/data/build/dist/host/browser-text.d.ts +30 -0
- package/data/build/dist/host/browser-text.d.ts.map +1 -0
- package/data/build/dist/host/browser-text.js +105 -0
- package/data/build/dist/host/browser-text.js.map +1 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +58 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js +271 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts +30 -0
- package/data/build/dist/host/cli-adapters/antigravity-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/antigravity-driver.js +210 -0
- package/data/build/dist/host/cli-adapters/antigravity-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts +28 -2
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js +74 -4
- package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-model-options.js +22 -9
- package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts +139 -0
- package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js +1721 -0
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/codebuddy-subscription.d.ts +53 -0
- package/data/build/dist/host/cli-adapters/codebuddy-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/codebuddy-subscription.js +778 -0
- package/data/build/dist/host/cli-adapters/codebuddy-subscription.js.map +1 -0
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts +22 -0
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.js +254 -7
- package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +43 -3
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js +681 -74
- package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-history.d.ts +147 -0
- package/data/build/dist/host/cli-adapters/command-code-history.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/command-code-history.js +659 -0
- package/data/build/dist/host/cli-adapters/command-code-history.js.map +1 -0
- package/data/build/dist/host/cli-adapters/cursor-driver.d.ts +12 -0
- package/data/build/dist/host/cli-adapters/cursor-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/cursor-driver.js +20 -0
- package/data/build/dist/host/cli-adapters/cursor-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/custom-upstream-classifier.d.ts +67 -0
- package/data/build/dist/host/cli-adapters/custom-upstream-classifier.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/custom-upstream-classifier.js +169 -0
- package/data/build/dist/host/cli-adapters/custom-upstream-classifier.js.map +1 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +48 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js +111 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -0
- package/data/build/dist/host/cli-adapters/delegation-authorization.d.ts +19 -0
- package/data/build/dist/host/cli-adapters/delegation-authorization.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/delegation-authorization.js +49 -0
- package/data/build/dist/host/cli-adapters/delegation-authorization.js.map +1 -0
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts +34 -0
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +121 -0
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +32 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +121 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -0
- package/data/build/dist/host/cli-adapters/driver.d.ts +6 -0
- package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js +5 -4
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts +16 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +73 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -0
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +459 -26
- package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.js +21 -5
- package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.js +24 -7
- package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +22 -6
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.js +118 -21
- package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.js +25 -4
- package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kiro-driver.d.ts +12 -0
- package/data/build/dist/host/cli-adapters/kiro-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/kiro-driver.js +18 -0
- package/data/build/dist/host/cli-adapters/kiro-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +11 -2
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +26 -6
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
- package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts +23 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.js +120 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.js.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +56 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.js +544 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts +35 -5
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/model-catalog.js +213 -8
- package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +81 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +299 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts +4 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.js +4 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.js.map +1 -0
- package/data/build/dist/host/cli-adapters/native-team-proxy.js +18 -15
- package/data/build/dist/host/cli-adapters/native-team-proxy.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +57 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.js +126 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -0
- package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts +75 -0
- package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/new-api-subscription.js +959 -0
- package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -0
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.js +22 -10
- package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js +24 -7
- package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +41 -4
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.js +254 -40
- package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/qoder-driver.d.ts +71 -0
- package/data/build/dist/host/cli-adapters/qoder-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/qoder-driver.js +553 -0
- package/data/build/dist/host/cli-adapters/qoder-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts +31 -0
- package/data/build/dist/host/cli-adapters/qoder-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/qoder-subscription.js +178 -0
- package/data/build/dist/host/cli-adapters/qoder-subscription.js.map +1 -0
- package/data/build/dist/host/cli-adapters/registry-holder.d.ts +4 -0
- package/data/build/dist/host/cli-adapters/registry-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/registry-holder.js +9 -0
- package/data/build/dist/host/cli-adapters/registry-holder.js.map +1 -0
- package/data/build/dist/host/cli-adapters/registry.d.ts +54 -2
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +224 -18
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.d.ts +10 -1
- package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.js +60 -6
- package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +16 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js +150 -26
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts +10 -1
- package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/stream-normalizer.js +23 -0
- package/data/build/dist/host/cli-adapters/stream-normalizer.js.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts +5 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.js +112 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +57 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.js +843 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +28 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.js +212 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +27 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.js +51 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts +39 -0
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-server.js +140 -0
- package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +29 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.js +91 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -0
- package/data/build/dist/host/cli-bridge/dispatch.d.ts +19 -0
- package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/dispatch.js +128 -0
- package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -0
- package/data/build/dist/host/cli-bridge/injections.d.ts +28 -0
- package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/injections.js +131 -0
- package/data/build/dist/host/cli-bridge/injections.js.map +1 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts +8 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +170 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -0
- package/data/build/dist/host/features/lan-access-dsh.d.ts.map +1 -1
- package/data/build/dist/host/features/lan-access-dsh.js +6 -2
- package/data/build/dist/host/features/lan-access-dsh.js.map +1 -1
- package/data/build/dist/host/features/peer-host.d.ts +21 -1
- package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/host/features/peer-host.js +176 -31
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/features/types.d.ts +2 -0
- package/data/build/dist/host/features/types.d.ts.map +1 -1
- package/data/build/dist/host/index.d.ts +15 -1
- package/data/build/dist/host/index.d.ts.map +1 -1
- package/data/build/dist/host/index.js +48 -2
- package/data/build/dist/host/index.js.map +1 -1
- package/data/build/dist/host/lan-access-dsh.d.ts +7 -1
- package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
- package/data/build/dist/host/lan-access-dsh.js +95 -19
- package/data/build/dist/host/lan-access-dsh.js.map +1 -1
- package/data/build/dist/host/login-attempt-guard.d.ts +55 -0
- package/data/build/dist/host/login-attempt-guard.d.ts.map +1 -0
- package/data/build/dist/host/login-attempt-guard.js +201 -0
- package/data/build/dist/host/login-attempt-guard.js.map +1 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +3 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +2 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +9 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts +8 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +9 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts +7 -0
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +31 -3
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts +2 -0
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js +26 -7
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-assets.d.ts +6 -4
- package/data/build/dist/host/modules/pwa/pwa-assets.d.ts.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-assets.js +11 -9
- package/data/build/dist/host/modules/pwa/pwa-assets.js.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts +3 -0
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.js +6 -4
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.js.map +1 -1
- package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
- package/data/build/dist/host/native-session-bridge.js +106 -59
- package/data/build/dist/host/native-session-bridge.js.map +1 -1
- package/data/build/dist/host/rpc.js +8 -2
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/host/settings.d.ts.map +1 -1
- package/data/build/dist/host/settings.js +14 -4
- package/data/build/dist/host/settings.js.map +1 -1
- package/data/build/dist/host/terminal/backends/local-pty-backend.d.ts.map +1 -1
- package/data/build/dist/host/terminal/backends/local-pty-backend.js +14 -0
- package/data/build/dist/host/terminal/backends/local-pty-backend.js.map +1 -1
- package/data/build/dist/host/terminal/backends/tmux-backend.d.ts +40 -1
- package/data/build/dist/host/terminal/backends/tmux-backend.d.ts.map +1 -1
- package/data/build/dist/host/terminal/backends/tmux-backend.js +291 -18
- package/data/build/dist/host/terminal/backends/tmux-backend.js.map +1 -1
- package/data/build/dist/host/terminal/runtime-adapter.d.ts +32 -0
- package/data/build/dist/host/terminal/runtime-adapter.d.ts.map +1 -1
- package/data/build/dist/host/terminal/runtime-adapter.js +8 -0
- package/data/build/dist/host/terminal/runtime-adapter.js.map +1 -1
- package/data/build/dist/host/terminal/runtime-manager.d.ts +3 -0
- package/data/build/dist/host/terminal/runtime-manager.d.ts.map +1 -1
- package/data/build/dist/host/terminal/runtime-manager.js +92 -4
- package/data/build/dist/host/terminal/runtime-manager.js.map +1 -1
- package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
- package/data/build/dist/host/terminal/terminal-controller.js +58 -6
- package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
- package/data/build/dist/host/terminal/terminal-process-service.d.ts.map +1 -1
- package/data/build/dist/host/terminal/terminal-process-service.js +12 -2
- package/data/build/dist/host/terminal/terminal-process-service.js.map +1 -1
- package/data/build/dist/host/terminal/terminal-service.d.ts +41 -4
- package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -1
- package/data/build/dist/host/terminal/terminal-service.js +551 -61
- package/data/build/dist/host/terminal/terminal-service.js.map +1 -1
- package/data/build/dist/index.d.ts +2 -2
- package/data/build/dist/index.d.ts.map +1 -1
- package/data/build/dist/index.js +2 -2
- package/data/build/dist/index.js.map +1 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +69 -2
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.d.ts +63 -10
- package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.js +57 -5
- package/data/build/dist/shared/contracts/config.js.map +1 -1
- package/data/build/dist/shared/contracts/peer-host.d.ts +2 -0
- package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
- package/data/build/dist/shared/contracts/subscription.d.ts +20 -1
- package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/subscription.js.map +1 -1
- package/data/build/dist/shared/contracts/terminal.d.ts +8 -1
- package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/version.d.ts +1 -1
- package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/version.js +1 -1
- package/data/build/dist/shared/contracts/version.js.map +1 -1
- package/data/build/dist/shared/debug.d.ts +8 -0
- package/data/build/dist/shared/debug.d.ts.map +1 -1
- package/data/build/dist/shared/debug.js +43 -7
- package/data/build/dist/shared/debug.js.map +1 -1
- package/data/build/dist/shared/delegation-carrier.d.ts +24 -0
- package/data/build/dist/shared/delegation-carrier.d.ts.map +1 -0
- package/data/build/dist/shared/delegation-carrier.js +111 -0
- package/data/build/dist/shared/delegation-carrier.js.map +1 -0
- package/data/build/dist/shared/index.d.ts +3 -3
- package/data/build/dist/shared/index.d.ts.map +1 -1
- package/data/build/dist/shared/index.js +2 -2
- package/data/build/dist/shared/index.js.map +1 -1
- package/data/build/dist/shared/terminal-input.d.ts +8 -0
- package/data/build/dist/shared/terminal-input.d.ts.map +1 -0
- package/data/build/dist/shared/terminal-input.js +10 -0
- package/data/build/dist/shared/terminal-input.js.map +1 -0
- package/data/build/dist/transport/debug.d.ts +7 -0
- package/data/build/dist/transport/debug.d.ts.map +1 -1
- package/data/build/dist/transport/debug.js +33 -5
- package/data/build/dist/transport/debug.js.map +1 -1
- package/data/build/dist/transport/index.d.ts +1 -1
- package/data/build/dist/transport/index.d.ts.map +1 -1
- package/data/build/dist/transport/index.js +1 -1
- package/data/build/dist/transport/index.js.map +1 -1
- package/data/build/dist/typert.host.js +1 -1
- package/data/build/dist/typert.host.js.map +1 -1
- package/package.json +3 -1
- package/profile/README.md +2 -2
- package/profile/package.json +2 -2
- package/profile/version.json +1 -1
- package/version.json +1 -1
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 最小 MCP stdio server:把外部 CLI 的子代理调用转发到 Host 桥接端点。
|
|
3
|
+
*
|
|
4
|
+
* 只依赖 Node 内置能力,由外部 CLI 以 `node <entry.js>` 直接启动;桥接地址、
|
|
5
|
+
* 令牌和 DSH 会话身份全部来自进程环境,不读取磁盘上的任何配置。
|
|
6
|
+
*/
|
|
7
|
+
const BRIDGE_URL = (process.env.CODINGNS_BRIDGE_URL ?? '').replace(/\/+$/u, '');
|
|
8
|
+
const BRIDGE_TOKEN = process.env.CODINGNS_BRIDGE_TOKEN ?? '';
|
|
9
|
+
const SESSION_ID = process.env.CODINGNS_DSH_SESSION_ID ?? '';
|
|
10
|
+
const ADAPTER_ID = process.env.CODINGNS_ADAPTER_ID ?? '';
|
|
11
|
+
const DISPATCH_TIMEOUT_MS = 16 * 60_000;
|
|
12
|
+
const TOOL_DEFINITION = {
|
|
13
|
+
name: 'agent_subagent',
|
|
14
|
+
description: 'Plan and execute external Agent subtasks in independent DSH sessions. Use action=start to create, action=wait to await a child session, and action=read to inspect it. Respect depends_on before starting dependent work.',
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: 'object',
|
|
17
|
+
properties: {
|
|
18
|
+
prompt: { type: 'string', description: '完整、自包含的子任务说明。' },
|
|
19
|
+
agent: { type: 'string', description: '外部编码 Agent id;缺省沿用当前会话的 Agent。' },
|
|
20
|
+
model: { type: 'string', description: '可选模型覆盖。' },
|
|
21
|
+
description: { type: 'string', description: '给子代理的简短标题。' },
|
|
22
|
+
subagent_type: { type: 'string', description: '子代理类型提示(explore/plan/general)。' },
|
|
23
|
+
action: { type: 'string', enum: ['start', 'wait', 'read'] },
|
|
24
|
+
child_session_id: { type: 'string' },
|
|
25
|
+
timeout_ms: { type: 'number' },
|
|
26
|
+
depends_on: { type: 'array', items: { type: 'string' } },
|
|
27
|
+
},
|
|
28
|
+
required: [],
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
let buffer = '';
|
|
33
|
+
process.stdin.setEncoding('utf8');
|
|
34
|
+
process.stdin.on('data', (chunk) => {
|
|
35
|
+
buffer += chunk;
|
|
36
|
+
let index = buffer.indexOf('\n');
|
|
37
|
+
while (index >= 0) {
|
|
38
|
+
const line = buffer.slice(0, index).trim();
|
|
39
|
+
buffer = buffer.slice(index + 1);
|
|
40
|
+
if (line !== '')
|
|
41
|
+
void handleLine(line);
|
|
42
|
+
index = buffer.indexOf('\n');
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
process.stdin.on('end', () => process.exit(0));
|
|
46
|
+
async function handleLine(line) {
|
|
47
|
+
let message;
|
|
48
|
+
try {
|
|
49
|
+
message = JSON.parse(line);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (typeof message !== 'object' || message === null)
|
|
55
|
+
return;
|
|
56
|
+
const request = message;
|
|
57
|
+
const id = request.id;
|
|
58
|
+
// 通知没有 id,不需要响应。
|
|
59
|
+
if (id === undefined || id === null)
|
|
60
|
+
return;
|
|
61
|
+
const method = typeof request.method === 'string' ? request.method : '';
|
|
62
|
+
try {
|
|
63
|
+
if (method === 'initialize') {
|
|
64
|
+
respond(id, {
|
|
65
|
+
protocolVersion: readProtocolVersion(request.params),
|
|
66
|
+
capabilities: { tools: {} },
|
|
67
|
+
serverInfo: { name: 'codingns-subagent-bridge', version: '0.2.0' },
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (method === 'ping') {
|
|
72
|
+
respond(id, {});
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (method === 'tools/list') {
|
|
76
|
+
respond(id, { tools: [TOOL_DEFINITION] });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (method === 'tools/call') {
|
|
80
|
+
respond(id, await callTool(request.params));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
respondError(id, -32601, `Method not found: ${method}`);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
respondError(id, -32603, error instanceof Error ? error.message : String(error));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function callTool(params) {
|
|
90
|
+
const record = asRecord(params);
|
|
91
|
+
const name = typeof record?.name === 'string' ? record.name : '';
|
|
92
|
+
if (name !== TOOL_DEFINITION.name)
|
|
93
|
+
return textResult(`未知工具: ${name}`, true);
|
|
94
|
+
const args = asRecord(record?.arguments) ?? {};
|
|
95
|
+
const action = args.action === 'wait' || args.action === 'read' ? args.action : 'start';
|
|
96
|
+
const prompt = typeof args.prompt === 'string' ? args.prompt : '';
|
|
97
|
+
if (action === 'start' && prompt.trim() === '')
|
|
98
|
+
return textResult('start 操作的 prompt 不能为空', true);
|
|
99
|
+
if (BRIDGE_URL === '' || BRIDGE_TOKEN === '' || SESSION_ID === '')
|
|
100
|
+
return textResult('Codingns4DSH 子代理桥接未配置', true);
|
|
101
|
+
try {
|
|
102
|
+
const response = await fetch(`${BRIDGE_URL}/v1/dispatch`, {
|
|
103
|
+
method: 'POST',
|
|
104
|
+
headers: { authorization: `Bearer ${BRIDGE_TOKEN}`, 'content-type': 'application/json' },
|
|
105
|
+
body: JSON.stringify({
|
|
106
|
+
sessionId: SESSION_ID,
|
|
107
|
+
prompt,
|
|
108
|
+
action,
|
|
109
|
+
...(typeof args.child_session_id === 'string' && args.child_session_id.trim() !== '' ? { childSessionId: args.child_session_id.trim() } : {}),
|
|
110
|
+
...(Array.isArray(args.depends_on) ? { dependsOn: args.depends_on.filter((item) => typeof item === 'string' && item.trim() !== '').map((item) => item.trim()) } : {}),
|
|
111
|
+
...(typeof args.timeout_ms === 'number' && Number.isFinite(args.timeout_ms) ? { timeoutMs: args.timeout_ms } : {}),
|
|
112
|
+
...(typeof args.agent === 'string' && args.agent.trim() !== '' ? { agent: args.agent.trim() } : { agent: ADAPTER_ID }),
|
|
113
|
+
...(typeof args.model === 'string' && args.model.trim() !== '' ? { model: args.model.trim() } : {}),
|
|
114
|
+
...(typeof args.description === 'string' && args.description.trim() !== '' ? { description: args.description.trim() } : {}),
|
|
115
|
+
...(typeof args.subagent_type === 'string' && args.subagent_type.trim() !== '' ? { subagentType: args.subagent_type.trim() } : {}),
|
|
116
|
+
}),
|
|
117
|
+
signal: AbortSignal.timeout(DISPATCH_TIMEOUT_MS),
|
|
118
|
+
});
|
|
119
|
+
const payload = await readJsonRecord(response);
|
|
120
|
+
if (!response.ok) {
|
|
121
|
+
const detail = typeof payload?.error === 'string' && payload.error.trim() !== '' ? payload.error.trim() : `HTTP ${String(response.status)}`;
|
|
122
|
+
return textResult(`子代理桥接请求失败:${detail}`, true);
|
|
123
|
+
}
|
|
124
|
+
if (payload?.ok !== true) {
|
|
125
|
+
const safePayload = payload ?? {};
|
|
126
|
+
const status = safePayload.status;
|
|
127
|
+
if (status === 'creating' || status === 'running') {
|
|
128
|
+
return textResult(JSON.stringify({
|
|
129
|
+
status,
|
|
130
|
+
completed: safePayload.completed === true,
|
|
131
|
+
...(typeof safePayload.childSessionId === 'string' ? { childSessionId: safePayload.childSessionId } : {}),
|
|
132
|
+
text: typeof safePayload.text === 'string' ? safePayload.text : '子代理仍在运行。',
|
|
133
|
+
}), false);
|
|
134
|
+
}
|
|
135
|
+
const detail = typeof safePayload.error === 'string' && safePayload.error.trim() !== '' ? safePayload.error.trim() : '桥接端未返回具体错误。';
|
|
136
|
+
return textResult(`子代理执行失败:${detail}`, true);
|
|
137
|
+
}
|
|
138
|
+
const text = typeof payload.text === 'string' && payload.text.trim() !== '' ? payload.text : '子代理已完成,但没有文本输出。';
|
|
139
|
+
return textResult(text, false);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
return textResult(`子代理桥接不可达:${error instanceof Error ? error.message : String(error)}`, true);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function textResult(text, isError) {
|
|
146
|
+
return { content: [{ type: 'text', text }], ...(isError ? { isError: true } : {}) };
|
|
147
|
+
}
|
|
148
|
+
async function readJsonRecord(response) {
|
|
149
|
+
try {
|
|
150
|
+
return asRecord(await response.json());
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function readProtocolVersion(params) {
|
|
157
|
+
const record = asRecord(params);
|
|
158
|
+
return typeof record?.protocolVersion === 'string' && record.protocolVersion !== '' ? record.protocolVersion : '2024-11-05';
|
|
159
|
+
}
|
|
160
|
+
function respond(id, result) {
|
|
161
|
+
process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', id, result })}\n`);
|
|
162
|
+
}
|
|
163
|
+
function respondError(id, code, message) {
|
|
164
|
+
process.stdout.write(`${JSON.stringify({ jsonrpc: '2.0', id, error: { code, message } })}\n`);
|
|
165
|
+
}
|
|
166
|
+
function asRecord(value) {
|
|
167
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value) ? value : undefined;
|
|
168
|
+
}
|
|
169
|
+
export {};
|
|
170
|
+
//# sourceMappingURL=mcp-stdio-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio-entry.js","sourceRoot":"","sources":["../../../../../src/host/cli-bridge/mcp-stdio-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lan-access-dsh.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEtE,OAAO,EAA8G,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"lan-access-dsh.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEtE,OAAO,EAA8G,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAI3K,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,8CAA8C;AAC9C,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CA2D9H"}
|
|
@@ -2,6 +2,7 @@ import { DEFAULT_LAN_ACCESS_DSH_PWA_SETTINGS } from '../../shared/contracts/conf
|
|
|
2
2
|
import { createLanAccessDshRpcHandler, createNodeLanAccessDshRuntime, FileLanAccessDshLoginStore, LanAccessDshProxy } from '../lan-access-dsh.js';
|
|
3
3
|
import { createLanAccessDshPwaProvider, PwaPushService } from '../modules/pwa/index.js';
|
|
4
4
|
import { createPwaSessionNotification } from '../modules/pwa/pwa-session-notifications.js';
|
|
5
|
+
import { resolveHostPushLocale } from '../browser-text.js';
|
|
5
6
|
/** Host 侧“局域网访问 DSH”模块,只管理一条 DSH Web 监听映射。 */
|
|
6
7
|
export function createLanAccessDshFeature(options = {}) {
|
|
7
8
|
return {
|
|
@@ -25,7 +26,10 @@ export function createLanAccessDshFeature(options = {}) {
|
|
|
25
26
|
proxy.setLoginConfig(loginConfig);
|
|
26
27
|
// 推送只保存订阅与 VAPID 私钥;是否真的订阅由浏览器侧在用户开启时决定。
|
|
27
28
|
const push = new PwaPushService();
|
|
28
|
-
context.resources.add(context.services.rpc.register('lanAccessDsh', createLanAccessDshRpcHandler(proxy, settings, loginStore, {
|
|
29
|
+
context.resources.add(context.services.rpc.register('lanAccessDsh', createLanAccessDshRpcHandler(proxy, settings, loginStore, {
|
|
30
|
+
push,
|
|
31
|
+
resolveLocale: () => resolveHostPushLocale(context.services.settingsProvider),
|
|
32
|
+
})));
|
|
29
33
|
// 推送订阅由浏览器显式开启;开启后把原生会话完成/等待输入事件转成通知。
|
|
30
34
|
// 事件监听属于局域网功能生命周期,停用模块时随资源一起释放。
|
|
31
35
|
const nativeSessions = context.services.nativeSessions;
|
|
@@ -35,7 +39,7 @@ export function createLanAccessDshFeature(options = {}) {
|
|
|
35
39
|
const pwa = settings?.get().lanAccessDsh.pwa;
|
|
36
40
|
if (pwa?.enabled !== true || pwa.notifications !== 'push')
|
|
37
41
|
return;
|
|
38
|
-
const payload = createPwaSessionNotification({ session, event });
|
|
42
|
+
const payload = createPwaSessionNotification({ session, event, locale: resolveHostPushLocale(context.services.settingsProvider) });
|
|
39
43
|
if (payload === null)
|
|
40
44
|
return;
|
|
41
45
|
void push.sendToAll(payload).catch((error) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lan-access-dsh.js","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAoD,MAAM,kCAAkC,CAAA;AACxI,OAAO,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,iBAAiB,EAA4B,MAAM,sBAAsB,CAAA;AAC3K,OAAO,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"lan-access-dsh.js","sourceRoot":"","sources":["../../../../../src/host/features/lan-access-dsh.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { FeatureModule } from '../../shared/contracts/feature.js';
|
|
2
2
|
import type { CodingNsHostServices } from './types.js';
|
|
3
|
-
import type { PeerHostRecord, PeerHostClientRecord } from '../../shared/contracts/peer-host.js';
|
|
3
|
+
import type { AggregateHostResult, PeerHostRecord, PeerHostClientRecord } from '../../shared/contracts/peer-host.js';
|
|
4
|
+
import { type HostScope } from '../../shared/contracts/peer-host.js';
|
|
4
5
|
import type { AggregateHostSource } from '../modules/peer-host/peer-host-aggregate-service.js';
|
|
6
|
+
import { VirtualWorkspaceRegistry } from '../modules/peer-host/peer-host-virtual-registry.js';
|
|
5
7
|
import { type PeerHostRemoteConnector } from '../modules/peer-host/host-ws-proxy-service.js';
|
|
6
8
|
import { type PeerHostRelayTransportFactory } from '../modules/peer-host/peer-host-relay.js';
|
|
9
|
+
import { type VirtualIdResolver } from '../modules/peer-host/peer-host-native-protocol.js';
|
|
7
10
|
export interface PeerHostFeatureOptions {
|
|
8
11
|
readonly stateDirectory?: string;
|
|
9
12
|
readonly ownerUserId?: string;
|
|
@@ -18,5 +21,22 @@ export interface PeerHostFeatureOptions {
|
|
|
18
21
|
}
|
|
19
22
|
/** PeerHost Host 模块;配置、握手和目标登录态只在 Host 进程内装配。 */
|
|
20
23
|
export declare function createPeerHostFeature(options?: PeerHostFeatureOptions): FeatureModule<CodingNsHostServices>;
|
|
24
|
+
/**
|
|
25
|
+
* 为原生 Remote 请求补充“聚合尚未确认”的临时 ID 解析。
|
|
26
|
+
*
|
|
27
|
+
* session/create 返回后,客户端会马上打开 session/follow;此时 Host 侧聚合
|
|
28
|
+
* Registry 可能还没有新会话,但请求 scope 已经携带了真实 sessionId。只允许
|
|
29
|
+
* 解析与当前目标 Host、工作区和会话 scope 完全匹配的虚拟 ID,避免把任意旧 ID
|
|
30
|
+
* 当成可路由资源。
|
|
31
|
+
*/
|
|
32
|
+
export declare function createScopedNativeIdResolver(registry: VirtualWorkspaceRegistry, scope: HostScope): VirtualIdResolver;
|
|
33
|
+
/**
|
|
34
|
+
* 用 DSH 原生注册表补齐本地工作区。
|
|
35
|
+
*
|
|
36
|
+
* 本地摘要还在启动、会话服务暂时不可读时,聚合 source 可能只返回远端结果。
|
|
37
|
+
* 顺序 Registry 仍必须知道本地 ID,否则客户端无法把本地项转换成混合顺序中的
|
|
38
|
+
* 虚拟 ID。这里仅补齐排序所需的最小记录,真实会话仍由本机 DSH Store 提供。
|
|
39
|
+
*/
|
|
40
|
+
export declare function ensureLocalWorkspaceSummaries(results: readonly AggregateHostResult[], ctx: CodingNsHostServices['dshContext']): readonly AggregateHostResult[];
|
|
21
41
|
export declare function toPeerHostClientRecord(record: PeerHostRecord): PeerHostClientRecord;
|
|
22
42
|
//# sourceMappingURL=peer-host.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-host.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/peer-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAetD,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"peer-host.d.ts","sourceRoot":"","sources":["../../../../../src/host/features/peer-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAetD,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAEpH,OAAO,EAA4H,KAAK,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC9L,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAG9F,OAAO,EAAoC,wBAAwB,EAAE,MAAM,oDAAoD,CAAA;AAG/H,OAAO,EAAgD,KAAK,uBAAuB,EAAE,MAAM,+CAA+C,CAAA;AAE1I,OAAO,EAA0D,KAAK,6BAA6B,EAAE,MAAM,yCAAyC,CAAA;AASpJ,OAAO,EAAyG,KAAK,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AAMjM,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAA;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAA;IAChD,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,6BAA6B,CAAA;IACvD,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAA;CAC1E;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAoa/G;AA8KD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,GAAG,iBAAiB,CAmBpH;AAaD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,mBAAmB,EAAE,EACvC,GAAG,EAAE,oBAAoB,CAAC,YAAY,CAAC,GACtC,SAAS,mBAAmB,EAAE,CAoChC;AAoBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB,CAOnF"}
|
|
@@ -7,7 +7,7 @@ import { PeerHostHandshakeService } from '../modules/peer-host/peer-host-handsha
|
|
|
7
7
|
import { PeerHostSessionService } from '../modules/peer-host/peer-host-session.js';
|
|
8
8
|
import { PeerHostHttpProxyService } from '../modules/peer-host/host-api-proxy-service.js';
|
|
9
9
|
import { EncryptedFilePeerHostCredentialStore, FilePeerHostRecordStore, PeerHostStore, } from '../modules/peer-host/peer-host-store.js';
|
|
10
|
-
import { createVirtualSessionId, createVirtualWorkspaceId, normalizePeerHostColor } from '../../shared/contracts/peer-host.js';
|
|
10
|
+
import { createVirtualSessionId, createVirtualWorkspaceId, normalizePeerHostColor, parseVirtualSessionId, parseVirtualWorkspaceId } from '../../shared/contracts/peer-host.js';
|
|
11
11
|
import { PeerHostAggregateService } from '../modules/peer-host/peer-host-aggregate-service.js';
|
|
12
12
|
import { resolveDshNativeDispatch } from '../modules/peer-host/peer-host-native-dispatch.js';
|
|
13
13
|
import { FileAggregateWorkspaceOrderStore, VirtualWorkspaceRegistry } from '../modules/peer-host/peer-host-virtual-registry.js';
|
|
@@ -22,9 +22,10 @@ import { createPeerHostDiagnosticSink, toPeerHostDiagnosticSnapshot } from '../m
|
|
|
22
22
|
import { AggregatedHostTransportService } from '../modules/peer-host/aggregated-host-transport.js';
|
|
23
23
|
import { createDshNativeSummarySource } from '../modules/peer-host/dsh-native-summary-source.js';
|
|
24
24
|
import { createPeerHostRemoteSummarySource, readPeerHostRemoteWorkspaceCandidates } from '../modules/peer-host/peer-host-remote-summary-source.js';
|
|
25
|
-
import { callPeerNativeRpc, openPeerNativeStream, readNativeRpcEnvelope } from '../modules/peer-host/peer-host-native-transport.js';
|
|
25
|
+
import { callPeerCliRpc, callPeerNativeRpc, openPeerNativeStream, readNativeRpcEnvelope } from '../modules/peer-host/peer-host-native-transport.js';
|
|
26
26
|
import { createAggregateHostSource } from '../modules/peer-host/peer-host-aggregate-service.js';
|
|
27
27
|
import { encodeNativeResponseBytes, isDshNativeRemoteMethod, rewriteNativeRequestIds, rewriteNativeResponseIds } from '../modules/peer-host/peer-host-native-protocol.js';
|
|
28
|
+
import { resolveCodingNsDebugLevel } from '../../shared/debug.js';
|
|
28
29
|
/** 原生 Remote 流句柄的存活窗口;每次轮询续期,超时仍未再被轮询即回收。 */
|
|
29
30
|
const NATIVE_STREAM_TTL_MS = 600_000;
|
|
30
31
|
/** PeerHost Host 模块;配置、握手和目标登录态只在 Host 进程内装配。 */
|
|
@@ -36,17 +37,12 @@ export function createPeerHostFeature(options = {}) {
|
|
|
36
37
|
enabledByDefault: false,
|
|
37
38
|
dependencies: [],
|
|
38
39
|
runtime: 'host',
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{ capability: 'peer-host.aggregated-transport', required: false, fallback: 'degrade' },
|
|
46
|
-
{ capability: 'peer-host.target-capabilities', required: false, fallback: 'degrade' },
|
|
47
|
-
{ capability: 'peer-host.local-plugin-baseline', required: false, fallback: 'degrade' },
|
|
48
|
-
{ capability: 'peer-host.relay-route', required: false, fallback: 'degrade' },
|
|
49
|
-
],
|
|
40
|
+
// PeerHost 的 Host 服务由本 Feature 在 start() 中按当前状态目录创建,
|
|
41
|
+
// 不属于 DSH Context 的启动前注入能力。把它们写进 requires 会在
|
|
42
|
+
// capabilityProfile 已经冻结之后才去查找尚未创建的局部实例,导致每次
|
|
43
|
+
// 启动都产生 CAPABILITY_UNAVAILABLE,但对实际启动没有任何帮助。
|
|
44
|
+
// 真正由 DSH 提供的能力仍由 capability registry 在入口处统一探测;
|
|
45
|
+
// Relay 也继续在连接器内部按显式 transport 注入情况降级。
|
|
50
46
|
},
|
|
51
47
|
async start(context) {
|
|
52
48
|
const stateDirectory = options.stateDirectory ?? process.env.CODINGNS4DSH_STATE_DIR?.trim() ?? join(homedir(), '.config', 'codingns4dsh');
|
|
@@ -71,9 +67,18 @@ export function createPeerHostFeature(options = {}) {
|
|
|
71
67
|
let workspaceOrderHydrated = false;
|
|
72
68
|
const nativeStreams = new Map();
|
|
73
69
|
const dshNativeDispatch = resolveDshNativeDispatch(context.services.dshContext);
|
|
70
|
+
const debugLevel = resolveCodingNsDebugLevel();
|
|
74
71
|
const diagnostics = createPeerHostDiagnosticSink({
|
|
75
|
-
enabled:
|
|
76
|
-
sink: (event, snapshot) =>
|
|
72
|
+
enabled: debugLevel !== 'off',
|
|
73
|
+
sink: (event, snapshot) => {
|
|
74
|
+
const failed = snapshot.status !== 'ready' || snapshot.lastErrorCode !== null;
|
|
75
|
+
if (debugLevel === 'warn' && !failed)
|
|
76
|
+
return;
|
|
77
|
+
if (failed)
|
|
78
|
+
console.warn('[codingns4dsh:peer-host]', { event, ...snapshot });
|
|
79
|
+
else
|
|
80
|
+
console.info('[codingns4dsh:peer-host]', { event, ...snapshot });
|
|
81
|
+
},
|
|
77
82
|
});
|
|
78
83
|
const lanConnector = options.connectRemote ?? createPeerHostRemoteConnector();
|
|
79
84
|
const relayConnector = createPeerHostRelayConnector({ ...(options.relayTransport === undefined ? {} : { transport: options.relayTransport }) });
|
|
@@ -82,6 +87,38 @@ export function createPeerHostFeature(options = {}) {
|
|
|
82
87
|
: lanConnector(record, accessToken, scope);
|
|
83
88
|
const localHostId = process.env.CODINGNS4DSH_HOST_ID?.trim() || ownerUserId;
|
|
84
89
|
const localSummarySource = createDshNativeSummarySource(context.services.dshContext, context.services.nativeSessions);
|
|
90
|
+
/**
|
|
91
|
+
* 聚合前确保目标 Host 已完成握手和认证。
|
|
92
|
+
*
|
|
93
|
+
* PeerHost 的记录状态是运行时缓存,不是登录凭据本身:远端返回 401 后
|
|
94
|
+
* 状态会暂时变成 session_required,下一次聚合必须主动用持久化的 refresh
|
|
95
|
+
* token/账号密码恢复,否则只要没有手工点“测试”,该目标就会永远被跳过。
|
|
96
|
+
*/
|
|
97
|
+
const preparePeerHost = async (input) => {
|
|
98
|
+
if (input.status === 'disabled' || input.status === 'identity_changed')
|
|
99
|
+
return null;
|
|
100
|
+
let record = input;
|
|
101
|
+
if (record.status === 'session_required') {
|
|
102
|
+
await sessions.refresh(record.id).catch(() => undefined);
|
|
103
|
+
record = (await store.get(record.id)) ?? record;
|
|
104
|
+
}
|
|
105
|
+
else if (record.status !== 'ready') {
|
|
106
|
+
// configured/unreachable/version_mismatch 等状态都可能只是上一次启动
|
|
107
|
+
// 或网络抖动留下的缓存;自动重试等价于管理面板的“测试”。
|
|
108
|
+
record = await handshake.check(record.id);
|
|
109
|
+
}
|
|
110
|
+
if (record.status !== 'ready')
|
|
111
|
+
return null;
|
|
112
|
+
// 即使 access token 尚未到期,也检查一次当前认证状态;临近过期时这里
|
|
113
|
+
// 会 refresh,refresh token 失效时会用保存的账号密码静默重登。
|
|
114
|
+
try {
|
|
115
|
+
await sessions.getAccessToken(record.id);
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return (await store.get(record.id)) ?? record;
|
|
121
|
+
};
|
|
85
122
|
const buildSources = async () => {
|
|
86
123
|
if (options.aggregateSources !== undefined)
|
|
87
124
|
return options.aggregateSources();
|
|
@@ -91,8 +128,9 @@ export function createPeerHostFeature(options = {}) {
|
|
|
91
128
|
hostLabel: '当前 Host',
|
|
92
129
|
source: localSummarySource,
|
|
93
130
|
})];
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
const preparedRecords = await Promise.all((await store.list()).map((record) => preparePeerHost(record).catch(() => null)));
|
|
132
|
+
for (const record of preparedRecords) {
|
|
133
|
+
if (record === null || record.status !== 'ready')
|
|
96
134
|
continue;
|
|
97
135
|
sources.push(createAggregateHostSource({
|
|
98
136
|
hostId: localHostId,
|
|
@@ -104,6 +142,7 @@ export function createPeerHostFeature(options = {}) {
|
|
|
104
142
|
transport: {
|
|
105
143
|
rpc: (request) => callPeerNativeRpc(httpProxy, record.id, request),
|
|
106
144
|
stream: (request) => openPeerNativeStream(httpProxy, record.id, request),
|
|
145
|
+
cli: (request) => callPeerCliRpc(httpProxy, record.id, request),
|
|
107
146
|
},
|
|
108
147
|
// 默认只投影用户显式添加的远端工作区;未添加时不展示该 Host 的任何工作区。
|
|
109
148
|
visibleWorkspaceIds: record.visibleWorkspaceIds ?? [],
|
|
@@ -114,15 +153,10 @@ export function createPeerHostFeature(options = {}) {
|
|
|
114
153
|
};
|
|
115
154
|
/** 远端工作区候选的唯一读取入口;不过滤可见性,供"添加工作区"选择器使用。 */
|
|
116
155
|
const readRemoteWorkspaceCandidates = async (peerHostId) => {
|
|
117
|
-
|
|
118
|
-
if (
|
|
156
|
+
const configured = await store.get(peerHostId);
|
|
157
|
+
if (configured === null)
|
|
119
158
|
throw new CodingNsRpcError('PEER_HOST_NOT_FOUND', 'PeerHost 不存在');
|
|
120
|
-
|
|
121
|
-
// 再回管理面板手工登录一次。
|
|
122
|
-
if (record.status === 'session_required') {
|
|
123
|
-
await sessions.refresh(peerHostId).catch(() => undefined);
|
|
124
|
-
record = await store.get(peerHostId);
|
|
125
|
-
}
|
|
159
|
+
const record = await preparePeerHost(configured);
|
|
126
160
|
if (record === null || record.status !== 'ready') {
|
|
127
161
|
throw new CodingNsRpcError('PEER_HOST_NOT_READY', 'PeerHost 尚未通过握手检查');
|
|
128
162
|
}
|
|
@@ -297,7 +331,10 @@ export function createPeerHostFeature(options = {}) {
|
|
|
297
331
|
}
|
|
298
332
|
case 'wsEndpoint': return wsEndpoint;
|
|
299
333
|
case 'aggregate': {
|
|
300
|
-
|
|
334
|
+
// 顺序 Registry 必须认识本地工作区,即使本地 session 摘要在启动瞬间
|
|
335
|
+
// 还没有准备好。否则 order 只会留下远端 ID,客户端拖拽到本地项时
|
|
336
|
+
// 只能拒绝请求,表现为远端永远被固定在列表顶部。
|
|
337
|
+
const results = ensureLocalWorkspaceSummaries(await aggregate.load(await buildSources()), context.services.dshContext);
|
|
301
338
|
workspaceRegistry.replace(results);
|
|
302
339
|
if (!workspaceOrderHydrated) {
|
|
303
340
|
await workspaceRegistry.hydrateOrder();
|
|
@@ -309,15 +346,16 @@ export function createPeerHostFeature(options = {}) {
|
|
|
309
346
|
const action = input.action === undefined ? 'get' : requiredString(input.action, 'action');
|
|
310
347
|
if (action === 'get') {
|
|
311
348
|
return {
|
|
312
|
-
|
|
349
|
+
// 返回完整墓碑顺序;远端摘要短暂缺失时,客户端仍需知道其拖拽位置。
|
|
350
|
+
orderedWorkspaceIds: workspaceRegistry.listPersistedWorkspaceIds(),
|
|
313
351
|
persistedWorkspaceIds: workspaceRegistry.listPersistedWorkspaceIds(),
|
|
314
352
|
};
|
|
315
353
|
}
|
|
316
354
|
if (action === 'move') {
|
|
317
|
-
const workspaceId = requiredString(input.virtualWorkspaceId, 'virtualWorkspaceId');
|
|
355
|
+
const workspaceId = resolveWorkspaceOrderId(requiredString(input.virtualWorkspaceId, 'virtualWorkspaceId'), workspaceRegistry, localHostId);
|
|
318
356
|
const before = input.beforeVirtualWorkspaceId === null || input.beforeVirtualWorkspaceId === undefined
|
|
319
357
|
? null
|
|
320
|
-
: requiredString(input.beforeVirtualWorkspaceId, 'beforeVirtualWorkspaceId');
|
|
358
|
+
: resolveWorkspaceOrderId(requiredString(input.beforeVirtualWorkspaceId, 'beforeVirtualWorkspaceId'), workspaceRegistry, localHostId);
|
|
321
359
|
return { orderedWorkspaceIds: await workspaceRegistry.move(workspaceId, before) };
|
|
322
360
|
}
|
|
323
361
|
throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 PeerHost workspaceOrder 操作: ${action}`);
|
|
@@ -349,7 +387,7 @@ export function createPeerHostFeature(options = {}) {
|
|
|
349
387
|
const scope = parseScope(input.scope);
|
|
350
388
|
// 远端流与 unary 一样需要双向 ID 改写:请求要换回目标 Host 的真实 ID,
|
|
351
389
|
// 帧里的 ID 要重新编码成虚拟 ID,否则原生会话流认不出目标 Host 的会话。
|
|
352
|
-
const payload = rewriteNativeRequestIds(method, input.payload, workspaceRegistry);
|
|
390
|
+
const payload = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
|
|
353
391
|
// 句柄由 nativeStreamNext/Close 轮询管理,不绑定本次 HTTP 请求的 signal:
|
|
354
392
|
// 该 signal 会在 nativeStream 响应返回后立即中止,导致第一次 next 直接结束。
|
|
355
393
|
const stream = aggregatedTransport.openStream({ scope, method, payload });
|
|
@@ -410,7 +448,7 @@ export function createPeerHostFeature(options = {}) {
|
|
|
410
448
|
if (!isDshNativeRemoteMethod(method))
|
|
411
449
|
throw new CodingNsRpcError('CODINGNS_RPC_NOT_FOUND', `未知 DSH 原生 Remote 方法: ${method}`);
|
|
412
450
|
const scope = parseScope(input.scope);
|
|
413
|
-
const rewritten = rewriteNativeRequestIds(method, input.payload, workspaceRegistry);
|
|
451
|
+
const rewritten = rewriteNativeRequestIds(method, input.payload, createScopedNativeIdResolver(workspaceRegistry, scope));
|
|
414
452
|
const value = await aggregatedTransport.rpc({ scope, method, payload: rewritten });
|
|
415
453
|
const virtualHostId = scope.targetHostId ?? scope.hostId;
|
|
416
454
|
return encodeNativeResponseBytes(rewriteNativeResponseIds(value, (id) => createVirtualWorkspaceId(virtualHostId, id), (id) => createVirtualSessionId(virtualHostId, id)));
|
|
@@ -611,6 +649,40 @@ function requiredString(value, field) {
|
|
|
611
649
|
throw new TypeError(`${field} 不能为空`);
|
|
612
650
|
return value.trim();
|
|
613
651
|
}
|
|
652
|
+
/**
|
|
653
|
+
* 为原生 Remote 请求补充“聚合尚未确认”的临时 ID 解析。
|
|
654
|
+
*
|
|
655
|
+
* session/create 返回后,客户端会马上打开 session/follow;此时 Host 侧聚合
|
|
656
|
+
* Registry 可能还没有新会话,但请求 scope 已经携带了真实 sessionId。只允许
|
|
657
|
+
* 解析与当前目标 Host、工作区和会话 scope 完全匹配的虚拟 ID,避免把任意旧 ID
|
|
658
|
+
* 当成可路由资源。
|
|
659
|
+
*/
|
|
660
|
+
export function createScopedNativeIdResolver(registry, scope) {
|
|
661
|
+
return {
|
|
662
|
+
resolveWorkspace(id) {
|
|
663
|
+
const known = registry.resolveWorkspace(id);
|
|
664
|
+
if (known !== null)
|
|
665
|
+
return known;
|
|
666
|
+
if (scope.targetHostId === null)
|
|
667
|
+
return null;
|
|
668
|
+
const parsed = parseVirtualWorkspaceId(id);
|
|
669
|
+
if (parsed === null || parsed.hostId !== scope.targetHostId || parsed.workspaceId !== scope.workspaceId)
|
|
670
|
+
return null;
|
|
671
|
+
return { workspaceId: parsed.workspaceId, targetHostId: scope.targetHostId };
|
|
672
|
+
},
|
|
673
|
+
resolveSession(id) {
|
|
674
|
+
const known = registry.resolveSession(id);
|
|
675
|
+
if (known !== null)
|
|
676
|
+
return known;
|
|
677
|
+
if (scope.targetHostId === null || scope.sessionId === null)
|
|
678
|
+
return null;
|
|
679
|
+
const parsed = parseVirtualSessionId(id);
|
|
680
|
+
if (parsed === null || parsed.hostId !== scope.targetHostId || parsed.sessionId !== scope.sessionId)
|
|
681
|
+
return null;
|
|
682
|
+
return { sessionId: parsed.sessionId, targetHostId: scope.targetHostId };
|
|
683
|
+
},
|
|
684
|
+
};
|
|
685
|
+
}
|
|
614
686
|
function parseScope(value) {
|
|
615
687
|
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
616
688
|
throw new TypeError('scope 必须是对象');
|
|
@@ -623,6 +695,79 @@ function parseScope(value) {
|
|
|
623
695
|
throw new TypeError('scope.scopeGeneration 无效');
|
|
624
696
|
return { hostId, targetHostId, workspaceId, sessionId, scopeGeneration: scope.scopeGeneration };
|
|
625
697
|
}
|
|
698
|
+
/**
|
|
699
|
+
* 用 DSH 原生注册表补齐本地工作区。
|
|
700
|
+
*
|
|
701
|
+
* 本地摘要还在启动、会话服务暂时不可读时,聚合 source 可能只返回远端结果。
|
|
702
|
+
* 顺序 Registry 仍必须知道本地 ID,否则客户端无法把本地项转换成混合顺序中的
|
|
703
|
+
* 虚拟 ID。这里仅补齐排序所需的最小记录,真实会话仍由本机 DSH Store 提供。
|
|
704
|
+
*/
|
|
705
|
+
export function ensureLocalWorkspaceSummaries(results, ctx) {
|
|
706
|
+
if (ctx === undefined)
|
|
707
|
+
return results;
|
|
708
|
+
const local = results.find((host) => host.targetHostId === null);
|
|
709
|
+
if (local === undefined)
|
|
710
|
+
return results;
|
|
711
|
+
let registry;
|
|
712
|
+
try {
|
|
713
|
+
registry = ctx.get('workspaceRegistry');
|
|
714
|
+
}
|
|
715
|
+
catch {
|
|
716
|
+
return results;
|
|
717
|
+
}
|
|
718
|
+
if (!isRecordValue(registry) || typeof registry.list !== 'function')
|
|
719
|
+
return results;
|
|
720
|
+
let raw;
|
|
721
|
+
try {
|
|
722
|
+
const listed = registry.list();
|
|
723
|
+
raw = Array.isArray(listed) ? listed : [];
|
|
724
|
+
}
|
|
725
|
+
catch {
|
|
726
|
+
return results;
|
|
727
|
+
}
|
|
728
|
+
const known = new Set(local.workspaces.map((workspace) => workspace.workspaceId));
|
|
729
|
+
const missing = raw.flatMap((item) => {
|
|
730
|
+
if (!isRecordValue(item))
|
|
731
|
+
return [];
|
|
732
|
+
const workspaceId = textValue(item.id) ?? textValue(item.workspaceId) ?? textValue(item.key);
|
|
733
|
+
if (workspaceId === undefined || known.has(workspaceId))
|
|
734
|
+
return [];
|
|
735
|
+
const path = textValue(item.path) ?? textValue(item.cwd) ?? workspaceId;
|
|
736
|
+
return [{
|
|
737
|
+
key: `${local.hostId}:${workspaceId}`,
|
|
738
|
+
hostId: local.hostId,
|
|
739
|
+
targetHostId: null,
|
|
740
|
+
workspaceId,
|
|
741
|
+
displayName: textValue(item.displayName) ?? textValue(item.title) ?? textValue(item.name) ?? workspaceId,
|
|
742
|
+
path,
|
|
743
|
+
hostLabel: local.hostLabel,
|
|
744
|
+
availability: 'ready',
|
|
745
|
+
sessions: [],
|
|
746
|
+
}];
|
|
747
|
+
});
|
|
748
|
+
if (missing.length === 0)
|
|
749
|
+
return results;
|
|
750
|
+
return results.map((host) => host.targetHostId === null
|
|
751
|
+
? { ...host, workspaces: [...host.workspaces, ...missing] }
|
|
752
|
+
: host);
|
|
753
|
+
}
|
|
754
|
+
function isRecordValue(value) {
|
|
755
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
756
|
+
}
|
|
757
|
+
function textValue(value) {
|
|
758
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
759
|
+
}
|
|
760
|
+
/** 将初始化竞态期间原生列表传来的本地裸 ID解析为顺序 Registry 的虚拟 ID。 */
|
|
761
|
+
function resolveWorkspaceOrderId(value, registry, localHostId) {
|
|
762
|
+
if (parseVirtualWorkspaceId(value) !== null)
|
|
763
|
+
return value;
|
|
764
|
+
const local = registry.list().find((workspace) => workspace.targetHostId === null && workspace.workspaceId === value);
|
|
765
|
+
if (local !== undefined)
|
|
766
|
+
return local.virtualWorkspaceId;
|
|
767
|
+
// 启动竞态下 Registry 可能还没有完成首轮 aggregate;本地 Host ID 是稳定的,
|
|
768
|
+
// 先生成同一格式的虚拟 ID并写入墓碑顺序,后续 aggregate 会补齐记录。
|
|
769
|
+
return createVirtualWorkspaceId(localHostId, value);
|
|
770
|
+
}
|
|
626
771
|
export function toPeerHostClientRecord(record) {
|
|
627
772
|
return {
|
|
628
773
|
...record,
|