@jingyi0605/codingns4dsh 0.2.1-beta.7 → 0.2.1-beta.9
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 +3 -3
- package/README.md +9 -3
- 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 +26 -1
- package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -1
- package/data/build/dist/client/account-bar.d.ts.map +1 -1
- package/data/build/dist/client/account-bar.js +33 -21
- package/data/build/dist/client/account-bar.js.map +1 -1
- package/data/build/dist/client/avatar/desktop-bridge.js +1 -1
- package/data/build/dist/client/avatar/desktop-bridge.js.map +1 -1
- package/data/build/dist/client/avatar/desktop-view.d.ts +6 -2
- package/data/build/dist/client/avatar/desktop-view.d.ts.map +1 -1
- package/data/build/dist/client/avatar/desktop-view.js +48 -13
- package/data/build/dist/client/avatar/desktop-view.js.map +1 -1
- package/data/build/dist/client/avatar/floating.d.ts +5 -2
- package/data/build/dist/client/avatar/floating.d.ts.map +1 -1
- package/data/build/dist/client/avatar/floating.js +16 -5
- package/data/build/dist/client/avatar/floating.js.map +1 -1
- package/data/build/dist/client/avatar/notification-bubble.d.ts +24 -5
- package/data/build/dist/client/avatar/notification-bubble.d.ts.map +1 -1
- package/data/build/dist/client/avatar/notification-bubble.js +253 -66
- package/data/build/dist/client/avatar/notification-bubble.js.map +1 -1
- package/data/build/dist/client/avatar/notification-surface.d.ts +16 -0
- package/data/build/dist/client/avatar/notification-surface.d.ts.map +1 -0
- package/data/build/dist/client/avatar/notification-surface.js +54 -0
- package/data/build/dist/client/avatar/notification-surface.js.map +1 -0
- package/data/build/dist/client/avatar/reaction-badge.d.ts.map +1 -1
- package/data/build/dist/client/avatar/reaction-badge.js +11 -2
- package/data/build/dist/client/avatar/reaction-badge.js.map +1 -1
- package/data/build/dist/client/bundle.js +2628 -566
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/cli-slots.d.ts.map +1 -1
- package/data/build/dist/client/cli-slots.js +26 -2
- package/data/build/dist/client/cli-slots.js.map +1 -1
- package/data/build/dist/client/client.assistant-notifications.js.map +1 -1
- package/data/build/dist/client/client.assistant-workbench.js +235 -109
- package/data/build/dist/client/client.assistant-workbench.js.map +1 -1
- package/data/build/dist/client/client.delegate-command.js +6 -6
- package/data/build/dist/client/client.delegate-command.js.map +1 -1
- package/data/build/dist/client/client.manager.js +46 -9
- package/data/build/dist/client/client.manager.js.map +1 -1
- package/data/build/dist/client/client.native-workspace-store.js +39 -3
- package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
- package/data/build/dist/client/client.session-translation.js +54 -0
- package/data/build/dist/client/client.session-translation.js.map +1 -0
- package/data/build/dist/client/client.theme.js +2 -0
- package/data/build/dist/client/client.theme.js.map +1 -1
- package/data/build/dist/client/client.transport.js +123 -11
- package/data/build/dist/client/client.transport.js.map +1 -1
- package/data/build/dist/client/desktop-assistant.js +57927 -387
- package/data/build/dist/client/features/assistant-conversation-message.d.ts +2 -1
- package/data/build/dist/client/features/assistant-conversation-message.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-conversation-message.js +59 -24
- package/data/build/dist/client/features/assistant-conversation-message.js.map +1 -1
- package/data/build/dist/client/features/assistant-notification-store.d.ts +8 -2
- package/data/build/dist/client/features/assistant-notification-store.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-notification-store.js +45 -1
- package/data/build/dist/client/features/assistant-notification-store.js.map +1 -1
- package/data/build/dist/client/features/assistant-record-style.js +11 -4
- package/data/build/dist/client/features/assistant-record-style.js.map +1 -1
- package/data/build/dist/client/features/assistant-workbench.d.ts +4 -0
- package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-workbench.js +27 -1
- package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
- package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
- package/data/build/dist/client/features/global-voice-assistant.js +46 -8
- package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
- package/data/build/dist/client/features/index.d.ts +1 -0
- package/data/build/dist/client/features/index.d.ts.map +1 -1
- package/data/build/dist/client/features/index.js +3 -0
- package/data/build/dist/client/features/index.js.map +1 -1
- package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/client/features/peer-host.js +130 -17
- package/data/build/dist/client/features/peer-host.js.map +1 -1
- package/data/build/dist/client/features/session-translation.d.ts +3 -0
- package/data/build/dist/client/features/session-translation.d.ts.map +1 -0
- package/data/build/dist/client/features/session-translation.js +116 -0
- package/data/build/dist/client/features/session-translation.js.map +1 -0
- package/data/build/dist/client/index.d.ts.map +1 -1
- package/data/build/dist/client/index.js +6 -1
- package/data/build/dist/client/index.js.map +1 -1
- package/data/build/dist/client/locales/assistantWorkbench.d.ts +17 -3
- package/data/build/dist/client/locales/assistantWorkbench.d.ts.map +1 -1
- package/data/build/dist/client/locales/assistantWorkbench.js +15 -11
- package/data/build/dist/client/locales/assistantWorkbench.js.map +1 -1
- package/data/build/dist/client/locales/panels.d.ts.map +1 -1
- package/data/build/dist/client/locales/panels.js +62 -0
- package/data/build/dist/client/locales/panels.js.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts +4 -0
- package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.js +40 -1
- package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-remote-events.d.ts +14 -0
- package/data/build/dist/client/peer-host-remote-events.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-remote-events.js +92 -3
- package/data/build/dist/client/peer-host-remote-events.js.map +1 -1
- package/data/build/dist/client/session-file-links.d.ts +11 -0
- package/data/build/dist/client/session-file-links.d.ts.map +1 -0
- package/data/build/dist/client/{peer-host-file-links.js → session-file-links.js} +13 -3
- package/data/build/dist/client/session-file-links.js.map +1 -0
- package/data/build/dist/client/session-translation-chat.d.ts +6 -0
- package/data/build/dist/client/session-translation-chat.d.ts.map +1 -0
- package/data/build/dist/client/session-translation-chat.js +686 -0
- package/data/build/dist/client/session-translation-chat.js.map +1 -0
- package/data/build/dist/client/style.css +2561 -0
- package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
- package/data/build/dist/client/subscription-slot.js +5 -1
- package/data/build/dist/client/subscription-slot.js.map +1 -1
- package/data/build/dist/client/theme.d.ts +2 -0
- package/data/build/dist/client/theme.d.ts.map +1 -1
- package/data/build/dist/client/theme.js +3 -0
- package/data/build/dist/client/theme.js.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.js +43 -15
- package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts +9 -1
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js +65 -0
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +21 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js +100 -3
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts +11 -1
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.js +80 -14
- package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts +13 -0
- package/data/build/dist/host/cli-adapters/codex-file-citations.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/codex-file-citations.js +271 -0
- package/data/build/dist/host/cli-adapters/codex-file-citations.js.map +1 -0
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts +8 -1
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.js +45 -2
- package/data/build/dist/host/cli-adapters/command-code-acp-loader.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +8 -2
- 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 +32 -3
- 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 +27 -0
- package/data/build/dist/host/cli-adapters/command-code-history.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-history.js +131 -1
- package/data/build/dist/host/cli-adapters/command-code-history.js.map +1 -1
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js +9 -9
- package/data/build/dist/host/cli-adapters/delegation-mention-rewrite.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts +13 -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 +95 -12
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +287 -19
- package/data/build/dist/host/cli-adapters/feature.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 +108 -47
- package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/legacy-session-settings.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/legacy-session-settings.js +7 -2
- package/data/build/dist/host/cli-adapters/legacy-session-settings.js.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +4 -2
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.js +78 -31
- package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts +1 -1
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +83 -9
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +5 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.js +90 -25
- package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +22 -5
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.d.ts +1 -0
- package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.js +3 -0
- package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-server.js +2 -2
- package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
- package/data/build/dist/host/cli-bridge/command-code-mod.js +21 -21
- package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
- package/data/build/dist/host/cli-bridge/dispatch.js +19 -19
- package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.d.ts +32 -0
- package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.js +137 -1
- package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +20 -20
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/controller.d.ts +3 -0
- package/data/build/dist/host/desktop-assistant/controller.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/controller.js +49 -4
- package/data/build/dist/host/desktop-assistant/controller.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/mac-agent.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/mac-agent.js +15 -3
- package/data/build/dist/host/desktop-assistant/mac-agent.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/win-agent.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/win-agent.js +21 -3
- package/data/build/dist/host/desktop-assistant/win-agent.js.map +1 -1
- package/data/build/dist/host/features/assistant-management-tools.d.ts +2 -1
- package/data/build/dist/host/features/assistant-management-tools.d.ts.map +1 -1
- package/data/build/dist/host/features/assistant-management-tools.js +10 -3
- package/data/build/dist/host/features/assistant-management-tools.js.map +1 -1
- package/data/build/dist/host/features/assistant-notification-events.js +1 -1
- package/data/build/dist/host/features/assistant-notification-events.js.map +1 -1
- package/data/build/dist/host/features/assistant-notifications.d.ts +8 -1
- package/data/build/dist/host/features/assistant-notifications.d.ts.map +1 -1
- package/data/build/dist/host/features/assistant-notifications.js +114 -12
- package/data/build/dist/host/features/assistant-notifications.js.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.d.ts +2 -2
- package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.js +89 -2
- package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
- package/data/build/dist/host/features/index.d.ts +1 -0
- package/data/build/dist/host/features/index.d.ts.map +1 -1
- package/data/build/dist/host/features/index.js +3 -0
- package/data/build/dist/host/features/index.js.map +1 -1
- package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/host/features/peer-host.js +41 -5
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/features/session-translation-service.d.ts +31 -0
- package/data/build/dist/host/features/session-translation-service.d.ts.map +1 -0
- package/data/build/dist/host/features/session-translation-service.js +451 -0
- package/data/build/dist/host/features/session-translation-service.js.map +1 -0
- package/data/build/dist/host/features/session-translation.d.ts +5 -0
- package/data/build/dist/host/features/session-translation.d.ts.map +1 -0
- package/data/build/dist/host/features/session-translation.js +37 -0
- package/data/build/dist/host/features/session-translation.js.map +1 -0
- package/data/build/dist/host/features/types.d.ts +6 -1
- package/data/build/dist/host/features/types.d.ts.map +1 -1
- package/data/build/dist/host/image-artifact-store.d.ts +21 -0
- package/data/build/dist/host/image-artifact-store.d.ts.map +1 -0
- package/data/build/dist/host/image-artifact-store.js +136 -0
- package/data/build/dist/host/image-artifact-store.js.map +1 -0
- package/data/build/dist/host/index.d.ts.map +1 -1
- package/data/build/dist/host/index.js +3 -0
- package/data/build/dist/host/index.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts +7 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +23 -4
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.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 +2 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
- package/data/build/dist/host/native-session-bridge.d.ts +16 -1
- package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
- package/data/build/dist/host/native-session-bridge.js +69 -9
- package/data/build/dist/host/native-session-bridge.js.map +1 -1
- package/data/build/dist/host/rpc.js +4 -4
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/host/session-changes.d.ts.map +1 -1
- package/data/build/dist/host/session-changes.js +196 -13
- package/data/build/dist/host/session-changes.js.map +1 -1
- package/data/build/dist/host/settings.d.ts.map +1 -1
- package/data/build/dist/host/settings.js +8 -0
- package/data/build/dist/host/settings.js.map +1 -1
- package/data/build/dist/shared/assistant-message-timeline.d.ts +11 -0
- package/data/build/dist/shared/assistant-message-timeline.d.ts.map +1 -1
- package/data/build/dist/shared/assistant-message-timeline.js +19 -0
- package/data/build/dist/shared/assistant-message-timeline.js.map +1 -1
- package/data/build/dist/shared/assistant-notifications.d.ts +35 -1
- package/data/build/dist/shared/assistant-notifications.d.ts.map +1 -1
- package/data/build/dist/shared/assistant-notifications.js +8 -0
- package/data/build/dist/shared/assistant-notifications.js.map +1 -1
- package/data/build/dist/shared/assistant-session-messages.d.ts +13 -0
- package/data/build/dist/shared/assistant-session-messages.d.ts.map +1 -0
- package/data/build/dist/shared/assistant-session-messages.js +155 -0
- package/data/build/dist/shared/assistant-session-messages.js.map +1 -0
- package/data/build/dist/shared/contracts/assistant.d.ts +13 -0
- package/data/build/dist/shared/contracts/assistant.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +25 -2
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.d.ts +6 -0
- package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.js +3 -0
- package/data/build/dist/shared/contracts/config.js.map +1 -1
- package/data/build/dist/shared/contracts/session-translation.d.ts +58 -0
- package/data/build/dist/shared/contracts/session-translation.d.ts.map +1 -0
- package/data/build/dist/shared/contracts/session-translation.js +23 -0
- package/data/build/dist/shared/contracts/session-translation.js.map +1 -0
- package/data/build/dist/shared/contracts/version.d.ts +1 -1
- package/data/build/dist/shared/contracts/version.js +1 -1
- package/data/build/dist/shared/delegation-carrier.js +6 -6
- package/data/build/dist/shared/delegation-carrier.js.map +1 -1
- package/data/build/dist/shared/desktop-assistant.d.ts +10 -3
- package/data/build/dist/shared/desktop-assistant.d.ts.map +1 -1
- package/data/build/dist/shared/desktop-assistant.js +46 -14
- package/data/build/dist/shared/desktop-assistant.js.map +1 -1
- package/data/build/dist/shared/index.d.ts +2 -1
- package/data/build/dist/shared/index.d.ts.map +1 -1
- package/data/build/dist/shared/index.js +2 -1
- package/data/build/dist/shared/index.js.map +1 -1
- package/package.json +17 -15
- package/profile/README.md +2 -2
- package/profile/package.json +2 -2
- package/profile/version.json +1 -1
- package/version.json +1 -1
- package/data/build/dist/client/peer-host-file-links.d.ts +0 -8
- package/data/build/dist/client/peer-host-file-links.d.ts.map +0 -1
- package/data/build/dist/client/peer-host-file-links.js.map +0 -1
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { fromMarkdown } from 'mdast-util-from-markdown';
|
|
2
|
+
const CITATION_PREFIX = ':codex-file-citation{';
|
|
3
|
+
const FILE_LINK_URI_SCHEMES = new Set(['about', 'blob', 'data', 'file', 'ftp', 'http', 'https', 'mailto', 'ssh', 'tel', 'urn', 'vscode', 'ws', 'wss']);
|
|
4
|
+
/** Codex 引用按正文 item 暂存,不能将半条指令提前追加到 DSH 的增量日志。 */
|
|
5
|
+
export class CodexFileCitationNormalizer {
|
|
6
|
+
markdown = new MarkdownFileLinkNormalizer();
|
|
7
|
+
pending = '';
|
|
8
|
+
message;
|
|
9
|
+
*push(chunk) {
|
|
10
|
+
for (const citation of this.pushCitation(chunk))
|
|
11
|
+
yield* this.markdown.push(citation);
|
|
12
|
+
}
|
|
13
|
+
*flush() {
|
|
14
|
+
for (const citation of this.flushCitations())
|
|
15
|
+
yield* this.markdown.push(citation);
|
|
16
|
+
yield* this.markdown.flush();
|
|
17
|
+
}
|
|
18
|
+
*pushCitation(chunk) {
|
|
19
|
+
if (chunk.type !== 'text-delta') {
|
|
20
|
+
// 用量和推理可以穿插在正文 delta 之间,不代表正文 item 已经结束。
|
|
21
|
+
if (chunk.type !== 'usage' && chunk.type !== 'reasoning-delta' && chunk.type !== 'reasoning-snapshot')
|
|
22
|
+
yield* this.flushCitations();
|
|
23
|
+
yield chunk;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (this.message?.messageId !== chunk.messageId)
|
|
27
|
+
yield* this.flushCitations();
|
|
28
|
+
this.message = chunk;
|
|
29
|
+
this.pending += chunk.text;
|
|
30
|
+
let text = '';
|
|
31
|
+
while (this.pending !== '') {
|
|
32
|
+
const start = this.pending.indexOf(CITATION_PREFIX);
|
|
33
|
+
if (start < 0) {
|
|
34
|
+
// 只保留可能是下一条指令开头的后缀;普通正文立即输出。
|
|
35
|
+
let retained = Math.min(this.pending.length, CITATION_PREFIX.length - 1);
|
|
36
|
+
while (retained > 0 && !CITATION_PREFIX.startsWith(this.pending.slice(-retained)))
|
|
37
|
+
retained -= 1;
|
|
38
|
+
text += this.pending.slice(0, this.pending.length - retained);
|
|
39
|
+
this.pending = retained === 0 ? '' : this.pending.slice(-retained);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
text += this.pending.slice(0, start);
|
|
43
|
+
this.pending = this.pending.slice(start);
|
|
44
|
+
const end = citationEnd(this.pending);
|
|
45
|
+
if (end < 0)
|
|
46
|
+
break;
|
|
47
|
+
const citation = this.pending.slice(0, end + 1);
|
|
48
|
+
text += citationLink(citation);
|
|
49
|
+
this.pending = this.pending.slice(end + 1);
|
|
50
|
+
}
|
|
51
|
+
if (text !== '')
|
|
52
|
+
yield { ...chunk, text };
|
|
53
|
+
}
|
|
54
|
+
/** 消息、工具、step 和终态边界原样结算未闭合指令,保留所属 messageId。 */
|
|
55
|
+
*flushCitations() {
|
|
56
|
+
const text = this.pending;
|
|
57
|
+
this.pending = '';
|
|
58
|
+
if (text !== '' && this.message !== undefined)
|
|
59
|
+
yield { ...this.message, text };
|
|
60
|
+
this.message = undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** 保留整条消息的 Markdown 上下文,只追加已确定的前缀,不能回写已发出的 delta。 */
|
|
64
|
+
class MarkdownFileLinkNormalizer {
|
|
65
|
+
source = '';
|
|
66
|
+
emitted = 0;
|
|
67
|
+
message;
|
|
68
|
+
*push(chunk) {
|
|
69
|
+
if (chunk.type !== 'text-delta') {
|
|
70
|
+
if (chunk.type !== 'usage' && chunk.type !== 'reasoning-delta' && chunk.type !== 'reasoning-snapshot')
|
|
71
|
+
yield* this.flush();
|
|
72
|
+
yield chunk;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (this.message?.messageId !== chunk.messageId)
|
|
76
|
+
yield* this.flush();
|
|
77
|
+
this.message = chunk;
|
|
78
|
+
const settled = this.emitted === this.source.length;
|
|
79
|
+
this.source += chunk.text;
|
|
80
|
+
// 已确定的上下文中,普通文字不改变链接/代码语法,无需重新解析整条消息。
|
|
81
|
+
if (settled && !/[\[\]()`~\r\n]/u.test(chunk.text)) {
|
|
82
|
+
this.emitted = this.source.length;
|
|
83
|
+
yield chunk;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
yield* this.drain(false);
|
|
87
|
+
}
|
|
88
|
+
*flush() {
|
|
89
|
+
yield* this.drain(true);
|
|
90
|
+
this.source = '';
|
|
91
|
+
this.emitted = 0;
|
|
92
|
+
this.message = undefined;
|
|
93
|
+
}
|
|
94
|
+
*drain(final) {
|
|
95
|
+
if (this.message === undefined || this.emitted === this.source.length)
|
|
96
|
+
return;
|
|
97
|
+
const replacements = [];
|
|
98
|
+
let safeEnd = this.source.length;
|
|
99
|
+
const visit = (node) => {
|
|
100
|
+
const start = node.position?.start.offset;
|
|
101
|
+
const end = node.position?.end.offset;
|
|
102
|
+
if (start === undefined || end === undefined || end <= this.emitted)
|
|
103
|
+
return;
|
|
104
|
+
if (node.type === 'link') {
|
|
105
|
+
const labelEnd = node.children.at(-1)?.position?.end.offset ?? start + 1;
|
|
106
|
+
const separator = this.source.indexOf('](', labelEnd);
|
|
107
|
+
// 自动链接没有 ](;仅处理显式 Markdown 文件链接,保留标签、标题和括号。
|
|
108
|
+
if (this.source[start] === '[' && separator >= start && separator < end) {
|
|
109
|
+
let targetStart = separator + 2;
|
|
110
|
+
while (/\s/u.test(this.source[targetStart] ?? ''))
|
|
111
|
+
targetStart += 1;
|
|
112
|
+
const angle = this.source[targetStart] === '<';
|
|
113
|
+
const pathStart = targetStart + (angle ? 1 : 0);
|
|
114
|
+
let pathEnd = pathStart;
|
|
115
|
+
let depth = 0;
|
|
116
|
+
for (; pathEnd < end; pathEnd += 1) {
|
|
117
|
+
const character = this.source[pathEnd];
|
|
118
|
+
if (character === '\\') {
|
|
119
|
+
pathEnd += 1;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (angle) {
|
|
123
|
+
if (character === '>')
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (/\s/u.test(character) || (character === ')' && depth === 0))
|
|
128
|
+
break;
|
|
129
|
+
if (character === '(')
|
|
130
|
+
depth += 1;
|
|
131
|
+
else if (character === ')')
|
|
132
|
+
depth -= 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const target = this.source.slice(pathStart, pathEnd);
|
|
136
|
+
const normalized = fileLineTarget(target);
|
|
137
|
+
if (normalized !== target)
|
|
138
|
+
replacements.push({ start: pathStart, end: pathEnd, text: normalized });
|
|
139
|
+
}
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (node.type === 'code') {
|
|
143
|
+
// 未收到换行前,``` 仍可能变成普通行内文本(例如随后出现另一组反引号)。
|
|
144
|
+
if (!final && !this.source.slice(start, end).includes('\n'))
|
|
145
|
+
safeEnd = Math.min(safeEnd, start);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (node.type === 'inlineCode' || node.type === 'html' || node.type === 'image')
|
|
149
|
+
return;
|
|
150
|
+
if (node.type === 'text' && !final) {
|
|
151
|
+
// 未闭合的标签或代码跨度可能在后续分片中包住链接,必须等语法确定后再输出。
|
|
152
|
+
for (let index = Math.max(start, this.emitted); index < end; index += 1) {
|
|
153
|
+
const character = this.source[index];
|
|
154
|
+
if (character === '\\') {
|
|
155
|
+
index += 1;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (character === '[') {
|
|
159
|
+
const close = this.source.indexOf(']', index + 1);
|
|
160
|
+
if (close >= 0 && close + 1 < this.source.length && this.source[close + 1] !== '(')
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const pendingFence = character === '~'
|
|
164
|
+
&& /^ {0,3}~*$/u.test(this.source.slice(this.source.lastIndexOf('\n', index - 1) + 1, index))
|
|
165
|
+
&& /^~*$/u.test(this.source.slice(index));
|
|
166
|
+
if (character === '`' || character === '[' || pendingFence) {
|
|
167
|
+
safeEnd = Math.min(safeEnd, index);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if ('children' in node)
|
|
173
|
+
for (const child of node.children)
|
|
174
|
+
visit(child);
|
|
175
|
+
};
|
|
176
|
+
visit(fromMarkdown(this.source));
|
|
177
|
+
safeEnd = Math.max(safeEnd, this.emitted);
|
|
178
|
+
let cursor = this.emitted;
|
|
179
|
+
let text = '';
|
|
180
|
+
for (const replacement of replacements) {
|
|
181
|
+
if (replacement.start < cursor || replacement.end > safeEnd)
|
|
182
|
+
continue;
|
|
183
|
+
text += this.source.slice(cursor, replacement.start) + replacement.text;
|
|
184
|
+
cursor = replacement.end;
|
|
185
|
+
}
|
|
186
|
+
text += this.source.slice(cursor, safeEnd);
|
|
187
|
+
this.emitted = safeEnd;
|
|
188
|
+
if (text !== '')
|
|
189
|
+
yield { ...this.message, text };
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function fileLineTarget(target) {
|
|
193
|
+
const match = /:([1-9]\d*)(?:-([1-9]\d*))?$/u.exec(target);
|
|
194
|
+
if (match === null || !Number.isSafeInteger(Number(match[1])))
|
|
195
|
+
return target;
|
|
196
|
+
const path = target.slice(0, match.index);
|
|
197
|
+
const start = Number(match[1]);
|
|
198
|
+
const end = match[2] === undefined ? undefined : Number(match[2]);
|
|
199
|
+
if (end !== undefined && (!Number.isSafeInteger(end) || end < start))
|
|
200
|
+
return target;
|
|
201
|
+
// 裸盘符加数字仍是 Windows 路径片段,不把它误当成无扩展名文件。
|
|
202
|
+
if (/^[a-z]:[1-9]\d*(?:-[1-9]\d*)?$/iu.test(target))
|
|
203
|
+
return target;
|
|
204
|
+
// Windows 盘符不属于 URI scheme;常见 URI 即使没有 // 也必须原样保留。
|
|
205
|
+
const scheme = /^([a-z][\w+.-]*):/iu.exec(target)?.[1]?.toLowerCase();
|
|
206
|
+
if (scheme !== undefined && !/^[a-z]:[/\\]/iu.test(target) && FILE_LINK_URI_SCHEMES.has(scheme))
|
|
207
|
+
return target;
|
|
208
|
+
if (/^[/\\]{2}/u.test(path) || /:\d+$/u.test(path))
|
|
209
|
+
return target;
|
|
210
|
+
if (/[?#\u0000-\u001f\u007f]/u.test(path))
|
|
211
|
+
return target;
|
|
212
|
+
return `${path}#L${match[1]}${end === undefined ? '' : `-L${match[2]}`}`;
|
|
213
|
+
}
|
|
214
|
+
/** 引号里的花括号属于路径或属性,不能提前截断指令。 */
|
|
215
|
+
function citationEnd(text) {
|
|
216
|
+
let quote = '';
|
|
217
|
+
for (let index = CITATION_PREFIX.length; index < text.length; index += 1) {
|
|
218
|
+
const character = text[index];
|
|
219
|
+
if (quote !== '') {
|
|
220
|
+
if (character === '\\' && (text[index + 1] === quote || text[index + 1] === '\\'))
|
|
221
|
+
index += 1;
|
|
222
|
+
else if (character === quote)
|
|
223
|
+
quote = '';
|
|
224
|
+
}
|
|
225
|
+
else if (character === '"' || character === "'")
|
|
226
|
+
quote = character;
|
|
227
|
+
else if (character === '}')
|
|
228
|
+
return index;
|
|
229
|
+
}
|
|
230
|
+
return -1;
|
|
231
|
+
}
|
|
232
|
+
function citationLink(citation) {
|
|
233
|
+
const attributes = citation.slice(CITATION_PREFIX.length, -1);
|
|
234
|
+
const values = new Map();
|
|
235
|
+
// 保留 Windows 路径的字面反斜杠,不按 JSON 转义解释 \n、\t 等路径片段。
|
|
236
|
+
const pattern = /\s*([\w-]+)\s*=\s*(?:"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)'|([^\s"']+))/gu;
|
|
237
|
+
let consumed = 0;
|
|
238
|
+
for (const match of attributes.matchAll(pattern)) {
|
|
239
|
+
if (match.index !== consumed || values.has(match[1]))
|
|
240
|
+
return citation;
|
|
241
|
+
consumed = match.index + match[0].length;
|
|
242
|
+
values.set(match[1], match[2] ?? match[3] ?? match[4]);
|
|
243
|
+
}
|
|
244
|
+
if (attributes.slice(consumed).trim() !== '')
|
|
245
|
+
return citation;
|
|
246
|
+
const path = values.get('path');
|
|
247
|
+
const purpose = values.get('purpose');
|
|
248
|
+
if (values.get('mode') === 'live' || (purpose !== 'output' && purpose !== 'source') || path === undefined || path.trim() === '')
|
|
249
|
+
return citation;
|
|
250
|
+
// 盘符不是 URI scheme;live 标识及真正的 URI 都不能作为本地文件打开。
|
|
251
|
+
if (/^[a-z][\w+.-]*:/iu.test(path) && !/^[a-z]:[/\\]/iu.test(path))
|
|
252
|
+
return citation;
|
|
253
|
+
if (/[\u0000-\u001f\u007f]/u.test(path) || /^[/\\]{2}/u.test(path))
|
|
254
|
+
return citation;
|
|
255
|
+
// DSH Markdown 的 openFile delegate 接收本地路径,并沿当前会话路由到 Host。
|
|
256
|
+
// 对路径逐段编码,避免空格、#、? 和 % 被误作 Markdown 或 URI 分隔符。
|
|
257
|
+
const normalized = path.replace(/\\/gu, '/').replace(/^\/(?=[a-z]:\/)/iu, '');
|
|
258
|
+
let target = normalized.split('/').map((segment) => encodeURIComponent(segment).replace(/%3A/giu, ':')).join('/');
|
|
259
|
+
const start = values.get('line_start');
|
|
260
|
+
const end = values.get('line_end');
|
|
261
|
+
if (start !== undefined && /^[1-9]\d*$/u.test(start) && Number.isSafeInteger(Number(start))) {
|
|
262
|
+
target += `#L${start}`;
|
|
263
|
+
if (end !== undefined && /^[1-9]\d*$/u.test(end) && Number.isSafeInteger(Number(end)) && Number(end) >= Number(start))
|
|
264
|
+
target += `-L${end}`;
|
|
265
|
+
}
|
|
266
|
+
const label = path.replace(/[\\`*_[\]<>&]/gu, '\\$&');
|
|
267
|
+
// 完整属性作为 Markdown title 保留下来,包括 purpose、行号和额外引用信息。
|
|
268
|
+
const title = attributes.replace(/[\\"&]/gu, '\\$&');
|
|
269
|
+
return `[${label}](<${target}> "${title}")`;
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=codex-file-citations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-file-citations.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/codex-file-citations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command Code ACP
|
|
2
|
+
* Command Code ACP 兼容桥。
|
|
3
3
|
*
|
|
4
4
|
* Command Code 1.74.3 的 ACP 服务把 ask_user_question 映射成
|
|
5
5
|
* session/request_permission,并且只从 outcome.optionId 还原固定选项文本。
|
|
6
|
+
*
|
|
7
|
+
* 同一份 bundle 还只把内置模型目录当作可选模型白名单:ACP 的 availableModels()
|
|
8
|
+
* 与 Agent 的 selectableModels() 都来自 catalogModels(),因此 providers.json 里
|
|
9
|
+
* 声明的 BYOK 模型(例如 mcgrox/deepseek-v4.1-flash)会在 session/set_model 时被
|
|
10
|
+
* 拒绝成 `Unknown model: ...`,而 CLI 自己的默认模型走另一条路径不受影响。这里
|
|
11
|
+
* 把 BYOK 模型补进内存中的目录,使 ACP 会话能切换并真正路由到对应提供者。
|
|
12
|
+
*
|
|
6
13
|
* 这个 loader 只改写内存中的 cli.mjs,不修改用户安装的 npm 包或 Desktop
|
|
7
14
|
* 目录;当上游实现已经变化时保持原模块不变。
|
|
8
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-code-acp-loader.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command-code-acp-loader.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,aAAa;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnD;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;AAI9E,0DAA0D;AAC1D,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAMzG"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command Code ACP
|
|
2
|
+
* Command Code ACP 兼容桥。
|
|
3
3
|
*
|
|
4
4
|
* Command Code 1.74.3 的 ACP 服务把 ask_user_question 映射成
|
|
5
5
|
* session/request_permission,并且只从 outcome.optionId 还原固定选项文本。
|
|
6
|
+
*
|
|
7
|
+
* 同一份 bundle 还只把内置模型目录当作可选模型白名单:ACP 的 availableModels()
|
|
8
|
+
* 与 Agent 的 selectableModels() 都来自 catalogModels(),因此 providers.json 里
|
|
9
|
+
* 声明的 BYOK 模型(例如 mcgrox/deepseek-v4.1-flash)会在 session/set_model 时被
|
|
10
|
+
* 拒绝成 `Unknown model: ...`,而 CLI 自己的默认模型走另一条路径不受影响。这里
|
|
11
|
+
* 把 BYOK 模型补进内存中的目录,使 ACP 会话能切换并真正路由到对应提供者。
|
|
12
|
+
*
|
|
6
13
|
* 这个 loader 只改写内存中的 cli.mjs,不修改用户安装的 npm 包或 Desktop
|
|
7
14
|
* 目录;当上游实现已经变化时保持原模块不变。
|
|
8
15
|
*/
|
|
@@ -13,7 +20,7 @@ export async function load(url, context, nextLoad) {
|
|
|
13
20
|
if (!url.endsWith(COMMAND_CODE_CLI_SUFFIX) || loaded.format !== 'module' || loaded.source === undefined)
|
|
14
21
|
return loaded;
|
|
15
22
|
const source = typeof loaded.source === 'string' ? loaded.source : new TextDecoder().decode(loaded.source);
|
|
16
|
-
const patched = patchCommandCodeAcpQuestion(source);
|
|
23
|
+
const patched = patchCommandCodeAcpByokModels(patchCommandCodeAcpQuestion(source));
|
|
17
24
|
return patched === source ? loaded : { ...loaded, source: patched, shortCircuit: true };
|
|
18
25
|
}
|
|
19
26
|
/**
|
|
@@ -36,4 +43,40 @@ function patchCommandCodeAcpQuestion(source) {
|
|
|
36
43
|
patched = patched.replace(questionDeclaration, `${helper}${questionDeclaration}`);
|
|
37
44
|
return patched;
|
|
38
45
|
}
|
|
46
|
+
/** 上游 `catalogModels()` 的原始声明;命中不到说明实现已变化,保持模块不变。 */
|
|
47
|
+
const CATALOG_MODELS_DECLARATION = 'function catalogModels(){return Object.values(RL).filter(e=>!e.hidden).map(e=>({id:e.id,name:e.name,description:e.description||null}))}';
|
|
48
|
+
/**
|
|
49
|
+
* 注入到 bundle 的 BYOK 目录补充函数。
|
|
50
|
+
*
|
|
51
|
+
* 用 `process.getBuiltinModule` 取 fs/os,避免依赖 cli.mjs 压缩后的导入别名。
|
|
52
|
+
* 每次调用重读 providers.json,用户改完 BYOK 配置无需重启 ACP 进程;文件不存在
|
|
53
|
+
* 或解析失败时返回空数组,目录行为与上游完全一致。
|
|
54
|
+
*/
|
|
55
|
+
const BYOK_MODELS_HELPER = 'function codingNsByokModels(){try{' +
|
|
56
|
+
'const fs=process.getBuiltinModule("node:fs"),os=process.getBuiltinModule("node:os");' +
|
|
57
|
+
'const p=os.homedir()+"/.commandcode/providers.json";' +
|
|
58
|
+
'if(!fs.existsSync(p))return[];' +
|
|
59
|
+
'const c=JSON.parse(fs.readFileSync(p,"utf8"));' +
|
|
60
|
+
'const m=c&&"object"==typeof c.provider?c.provider:c&&"object"==typeof c.providers?c.providers:null;' +
|
|
61
|
+
'if(!m)return[];' +
|
|
62
|
+
'const out=[];' +
|
|
63
|
+
'for(const id of Object.keys(m)){const v=m[id];if(!v||"object"!=typeof v.models)continue;' +
|
|
64
|
+
'for(const name of Object.keys(v.models))out.push({id:id+"/"+name,name:id+"/"+name,description:"string"==typeof v.name?v.name:"byok"})}' +
|
|
65
|
+
'return out}catch{return[]}}';
|
|
66
|
+
/** 打补丁后的 `catalogModels()`:内置目录在前,BYOK 模型去重后追加。 */
|
|
67
|
+
const BYOK_MODELS_DECLARATION = BYOK_MODELS_HELPER +
|
|
68
|
+
'function catalogModels(){const a=Object.values(RL).filter(e=>!e.hidden).map(e=>({id:e.id,name:e.name,description:e.description||null}));' +
|
|
69
|
+
'for(const e of codingNsByokModels())if(!a.some(n=>n.id===e.id))a.push(e);return a}';
|
|
70
|
+
/**
|
|
71
|
+
* 把 providers.json 声明的 BYOK 模型并入模型目录。
|
|
72
|
+
*
|
|
73
|
+
* `catalogModels()` 同时喂给 ACP 的 availableModels() 与 Agent 的 selectableModels(),
|
|
74
|
+
* 是唯一的校验收口;只补这一处即可让 session/set_model 与后续请求路由同时生效。
|
|
75
|
+
* 重复 id(BYOK 提供者与内置目录同名)保留内置条目,避免同一模型出现两次。
|
|
76
|
+
*/
|
|
77
|
+
function patchCommandCodeAcpByokModels(source) {
|
|
78
|
+
if (!source.includes(CATALOG_MODELS_DECLARATION))
|
|
79
|
+
return source;
|
|
80
|
+
return source.replace(CATALOG_MODELS_DECLARATION, BYOK_MODELS_DECLARATION);
|
|
81
|
+
}
|
|
39
82
|
//# sourceMappingURL=command-code-acp-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-code-acp-loader.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command-code-acp-loader.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-acp-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAsB,EAAE,QAAkB;IAChF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IAC3C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACtH,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1G,MAAM,OAAO,GAAG,6BAA6B,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAA;IAClF,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;AACzF,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,MAAc;IACjD,MAAM,mBAAmB,GAAG,sCAAsC,CAAA;IAClE,MAAM,eAAe,GAAG,qEAAqE,CAAA;IAC7F,MAAM,cAAc,GAAG,yHAAyH,CAAA;IAChJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,MAAM,CAAA;IAEjI,MAAM,MAAM,GAAG,6eAA6e,CAAA;IAC5f,MAAM,mBAAmB,GAAG,qHAAqH,CAAA;IACjJ,MAAM,kBAAkB,GAAG,gLAAgL,CAAA;IAC3M,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAA;IAClE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IAC7D,mDAAmD;IACnD,qDAAqD;IACrD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,MAAM,GAAG,mBAAmB,EAAE,CAAC,CAAA;IACjF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,qDAAqD;AACrD,MAAM,0BAA0B,GAC9B,yIAAyI,CAAA;AAE3I;;;;;;GAMG;AACH,MAAM,kBAAkB,GACtB,oCAAoC;IACpC,sFAAsF;IACtF,sDAAsD;IACtD,gCAAgC;IAChC,gDAAgD;IAChD,qGAAqG;IACrG,iBAAiB;IACjB,eAAe;IACf,0FAA0F;IAC1F,wIAAwI;IACxI,6BAA6B,CAAA;AAE/B,mDAAmD;AACnD,MAAM,uBAAuB,GAC3B,kBAAkB;IAClB,0IAA0I;IAC1I,oFAAoF,CAAA;AAEtF;;;;;;GAMG;AACH,SAAS,6BAA6B,CAAC,MAAc;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAAE,OAAO,MAAM,CAAA;IAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,uBAAuB,CAAC,CAAA;AAC5E,CAAC"}
|
|
@@ -35,8 +35,14 @@ export declare class CommandCodeDriver implements CodingNsCliDriver {
|
|
|
35
35
|
readonly protocol: 'command' | 'acp';
|
|
36
36
|
readonly capabilities: readonly CodingNsCliCapability[];
|
|
37
37
|
};
|
|
38
|
-
/**
|
|
39
|
-
|
|
38
|
+
/**
|
|
39
|
+
* print 回合由驱动自己维护 Provider turn 边界;ACP 回合的整个 agent 循环跑在
|
|
40
|
+
* 一个 `session/prompt` 里,驱动无法在中间结束 llm/stream,只能交给 Registry
|
|
41
|
+
* 在工具完成后挂起同一个迭代器分步。
|
|
42
|
+
*/
|
|
43
|
+
get supportsSegmentedTurns(): boolean;
|
|
44
|
+
/** ACP 回合由 Registry 按工具边界挂起并续读同一个迭代器。 */
|
|
45
|
+
get supportsToolStepSplitting(): boolean;
|
|
40
46
|
private readonly homeDirectory;
|
|
41
47
|
private readonly binaries;
|
|
42
48
|
private readonly runSpawnSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-code-driver.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-driver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAKrD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAElB,+BAA+B,EAC/B,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAWjH,OAAO,
|
|
1
|
+
{"version":3,"file":"command-code-driver.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/command-code-driver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAKrD,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAElB,+BAA+B,EAC/B,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC1B,yBAAyB,EACzB,oBAAoB,EACrB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAWjH,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC/B,MAAM,2BAA2B,CAAA;AAqNlC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAA;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;IACzC,yBAAyB;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,yBAAyB,CAAC,YAAY,CAAC,CAAA;IAC7D,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAiCD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAA;QAC3B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;QAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAA;QACpC,QAAQ,CAAC,YAAY,EAAE,SAAS,qBAAqB,EAAE,CAAA;KACxD,CAAA;IACD;;;;OAIG;IACH,IAAI,sBAAsB,IAAI,OAAO,CAAwC;IAC7E,yCAAyC;IACzC,IAAI,yBAAyB,IAAI,OAAO,CAAwC;IAChF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,QAAQ,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClH,QAAQ,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,6BAA6B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9G,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsD;IACpF,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,iBAAiB,CAAgD;IACzE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;gBAE/C,OAAO,GAAE,wBAA6B;IAwElD,qDAAqD;IACrD,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,yBAAyB,EAAE,CAAC;IAIpF,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAInF,2DAA2D;IACrD,UAAU,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC;IASlG,yDAAyD;YAC3C,iBAAiB;IAe/B,OAAO,CAAC,gBAAgB;IAQxB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI9H,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAItG,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAInH,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,2BAAuC,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI7L,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,2BAAuC,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAInM,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,8BAA8B;IAI7Q,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjF,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlG,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAIvK,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAIzG,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAIzG,WAAW,CAAC,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIxN,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAOzF,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA+CpD,kDAAkD;YACpC,qBAAqB;IAkB7B,YAAY,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAwDxF,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,kBAAkB,CAAC;IAqClF,OAAO,IAAI,IAAI;IAUf,iDAAiD;IACjD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK7C,2CAA2C;IAC3C,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,SAAS;IAuDjB;;;;;;;;OAQG;YACW,eAAe;IAqD7B,8CAA8C;IAC9C,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,aAAa;IA6BrB,uCAAuC;IACjC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD,mCAAmC;IACnC,OAAO,CAAC,mBAAmB;IAc3B,4CAA4C;YAC9B,WAAW;YA2FV,WAAW;IA4D1B,OAAO,CAAC,WAAW;CAapB"}
|
|
@@ -14,7 +14,7 @@ import { commandCodeNativeAgentArgs, commandCodeNativeAgentEnvironment, subagent
|
|
|
14
14
|
import { getSubagentBridge } from '../cli-bridge/bridge-holder.js';
|
|
15
15
|
import { AcpCliDriver } from './acp-cli-driver.js';
|
|
16
16
|
import { knownCommandCodeContextWindow } from './model-catalog.js';
|
|
17
|
-
import { CommandCodeHistory, } from './command-code-history.js';
|
|
17
|
+
import { CommandCodeHistory, CommandCodeUsageTail, } from './command-code-history.js';
|
|
18
18
|
const WINDOWS = process.platform === 'win32';
|
|
19
19
|
const COMMAND_CODE_BINARIES = WINDOWS
|
|
20
20
|
? ['command-code', 'commandcode', 'cmdc']
|
|
@@ -196,8 +196,14 @@ function commandCodePermissionArgs(permission) {
|
|
|
196
196
|
*/
|
|
197
197
|
export class CommandCodeDriver {
|
|
198
198
|
descriptor;
|
|
199
|
-
/**
|
|
200
|
-
|
|
199
|
+
/**
|
|
200
|
+
* print 回合由驱动自己维护 Provider turn 边界;ACP 回合的整个 agent 循环跑在
|
|
201
|
+
* 一个 `session/prompt` 里,驱动无法在中间结束 llm/stream,只能交给 Registry
|
|
202
|
+
* 在工具完成后挂起同一个迭代器分步。
|
|
203
|
+
*/
|
|
204
|
+
get supportsSegmentedTurns() { return this.acpDriver === undefined; }
|
|
205
|
+
/** ACP 回合由 Registry 按工具边界挂起并续读同一个迭代器。 */
|
|
206
|
+
get supportsToolStepSplitting() { return this.acpDriver !== undefined; }
|
|
201
207
|
homeDirectory;
|
|
202
208
|
binaries;
|
|
203
209
|
runSpawnSync;
|
|
@@ -229,6 +235,10 @@ export class CommandCodeDriver {
|
|
|
229
235
|
const acpCapabilities = [...legacyCapabilities, 'permission', 'questions'];
|
|
230
236
|
this.descriptor = { id: 'command-code', name: 'Command Code', protocol: options.enableAcp === true ? 'acp' : 'command', capabilities: options.enableAcp === true ? acpCapabilities : legacyCapabilities };
|
|
231
237
|
if (options.enableAcp === true) {
|
|
238
|
+
// ACP 只在 prompt 结束时给出整轮累计用量。这里按 canonical transcript 的增量
|
|
239
|
+
// 把每次模型请求的用量单独交给驱动,ContextMeter 才不会把整轮累计(实测
|
|
240
|
+
// 17.6M)当成当前上下文占用。
|
|
241
|
+
const usageTail = new CommandCodeUsageTail(this.homeDirectory);
|
|
232
242
|
this.acpDriver = new AcpCliDriver({
|
|
233
243
|
binaries: this.binaries,
|
|
234
244
|
spawnSync: this.runSpawnSync,
|
|
@@ -245,6 +255,25 @@ export class CommandCodeDriver {
|
|
|
245
255
|
readQuestionRequest: readCommandCodeQuestionRequest,
|
|
246
256
|
decidePermission: commandCodeAcpPermissionDecision,
|
|
247
257
|
enrichUsage: enrichCommandCodeUsage,
|
|
258
|
+
stepUsage: {
|
|
259
|
+
begin: (input, providerSessionId) => {
|
|
260
|
+
usageTail.begin(providerSessionId, input.cwd ?? process.cwd());
|
|
261
|
+
},
|
|
262
|
+
take: (input, providerSessionId) => {
|
|
263
|
+
const delta = usageTail.take(providerSessionId, input.cwd ?? process.cwd());
|
|
264
|
+
if (delta === null)
|
|
265
|
+
return null;
|
|
266
|
+
// 只给原始四桶:上下文窗口与占用由 ACP 驱动合并 Provider 的 usage_update
|
|
267
|
+
// 之后再补齐,避免这里先把 contextTokens 写成请求规模、盖掉真实占用。
|
|
268
|
+
const usage = usageChunk({
|
|
269
|
+
inputTokens: delta.inputTokens,
|
|
270
|
+
outputTokens: delta.outputTokens,
|
|
271
|
+
cacheReadTokens: delta.cacheReadTokens,
|
|
272
|
+
cacheWriteTokens: delta.cacheWriteTokens,
|
|
273
|
+
});
|
|
274
|
+
return usage?.type === 'usage' ? usage : null;
|
|
275
|
+
},
|
|
276
|
+
},
|
|
248
277
|
probeReason: 'Command Code ACP 不公开可安全读取的会话索引',
|
|
249
278
|
});
|
|
250
279
|
this.respondPermission = (sessionId, response) => this.acpDriver.respondPermission(sessionId, response);
|