dsh-cliworker-now 0.0.0-stage → 0.7.7
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/LICENSE +21 -0
- package/README.en.md +364 -0
- package/README.md +368 -2
- package/cordis.patch.yml +3 -0
- package/lib/account-models.mjs +262 -0
- package/lib/client.js +22139 -0
- package/lib/client.js.map +1 -0
- package/lib/grok-catalog.mjs +145 -0
- package/lib/hermes-native-entry.py +96 -0
- package/lib/hermes-nous-refresh.py +331 -0
- package/lib/index.js +14544 -0
- package/lib/index.js.map +1 -0
- package/lib/native-launch.mjs +234 -0
- package/lib/native-spawn.mjs +32 -0
- package/lib/own-account-lease.mjs +105 -0
- package/lib/pi-installation.mjs +87 -0
- package/lib/pi-login.mjs +80 -0
- package/lib/pi-native-catalog.mjs +417 -0
- package/lib/pi-omp-bridge.mjs +602 -0
- package/lib/pi-omp-environment.mjs +15 -0
- package/lib/pi-omp-refresh.mjs +324 -0
- package/lib/private-launch.mjs +23 -0
- package/lib/terminal-bridge.mjs +18 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +1430 -0
- package/lib/typert.remote-client.d.ts +72 -0
- package/lib/typert.remote-client.d.ts.map +1 -0
- package/lib/typert.remote-client.js +1256 -0
- package/lib/types/client/account-query-queue.d.ts +16 -0
- package/lib/types/client/account-query-queue.js +61 -0
- package/lib/types/client/account-query-queue.js.map +1 -0
- package/lib/types/client/account-terminal-css.d.ts +1 -0
- package/lib/types/client/account-terminal-css.js +3 -0
- package/lib/types/client/account-terminal-css.js.map +1 -0
- package/lib/types/client/account-terminal.d.ts +17 -0
- package/lib/types/client/account-terminal.js +525 -0
- package/lib/types/client/account-terminal.js.map +1 -0
- package/lib/types/client/assets/antigravity.png +0 -0
- package/lib/types/client/assets/claude-code.png +0 -0
- package/lib/types/client/assets/cliworker-now-logo.png +0 -0
- package/lib/types/client/assets/codex.png +0 -0
- package/lib/types/client/assets/grok.png +0 -0
- package/lib/types/client/assets/hermes.png +0 -0
- package/lib/types/client/assets/kimi-dark.png +0 -0
- package/lib/types/client/assets/kimi-light.png +0 -0
- package/lib/types/client/assets/mimo-code.png +0 -0
- package/lib/types/client/assets/omp.png +0 -0
- package/lib/types/client/assets/opencode.png +0 -0
- package/lib/types/client/assets/pi.png +0 -0
- package/lib/types/client/assets/zcode.png +0 -0
- package/lib/types/client/composer-keymap.d.ts +18 -0
- package/lib/types/client/composer-keymap.js +49 -0
- package/lib/types/client/composer-keymap.js.map +1 -0
- package/lib/types/client/conversation-timeline.d.ts +6 -0
- package/lib/types/client/conversation-timeline.js +65 -0
- package/lib/types/client/conversation-timeline.js.map +1 -0
- package/lib/types/client/copy-text.d.ts +5 -0
- package/lib/types/client/copy-text.js +45 -0
- package/lib/types/client/copy-text.js.map +1 -0
- package/lib/types/client/icons.d.ts +21 -0
- package/lib/types/client/icons.js +68 -0
- package/lib/types/client/icons.js.map +1 -0
- package/lib/types/client/index.d.ts +3 -0
- package/lib/types/client/index.js +124 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/management-styles.d.ts +1 -0
- package/lib/types/client/management-styles.js +17 -0
- package/lib/types/client/management-styles.js.map +1 -0
- package/lib/types/client/name-copy.d.ts +5 -0
- package/lib/types/client/name-copy.js +107 -0
- package/lib/types/client/name-copy.js.map +1 -0
- package/lib/types/client/native-job-overlay.d.ts +11 -0
- package/lib/types/client/native-job-overlay.js +129 -0
- package/lib/types/client/native-job-overlay.js.map +1 -0
- package/lib/types/client/operation-error.d.ts +2 -0
- package/lib/types/client/operation-error.js +12 -0
- package/lib/types/client/operation-error.js.map +1 -0
- package/lib/types/client/panel.d.ts +8 -0
- package/lib/types/client/panel.js +310 -0
- package/lib/types/client/panel.js.map +1 -0
- package/lib/types/client/rename-copy-styles.d.ts +1 -0
- package/lib/types/client/rename-copy-styles.js +21 -0
- package/lib/types/client/rename-copy-styles.js.map +1 -0
- package/lib/types/client/rename-worker.d.ts +9 -0
- package/lib/types/client/rename-worker.js +53 -0
- package/lib/types/client/rename-worker.js.map +1 -0
- package/lib/types/client/role-presets.d.ts +6 -0
- package/lib/types/client/role-presets.js +111 -0
- package/lib/types/client/role-presets.js.map +1 -0
- package/lib/types/client/settings-dialog.d.ts +13 -0
- package/lib/types/client/settings-dialog.js +442 -0
- package/lib/types/client/settings-dialog.js.map +1 -0
- package/lib/types/client/stat-popover.d.ts +10 -0
- package/lib/types/client/stat-popover.js +32 -0
- package/lib/types/client/stat-popover.js.map +1 -0
- package/lib/types/client/styles.d.ts +9 -0
- package/lib/types/client/styles.js +221 -0
- package/lib/types/client/styles.js.map +1 -0
- package/lib/types/client/telemetry.d.ts +11 -0
- package/lib/types/client/telemetry.js +24 -0
- package/lib/types/client/telemetry.js.map +1 -0
- package/lib/types/client/worker-card.d.ts +10 -0
- package/lib/types/client/worker-card.js +75 -0
- package/lib/types/client/worker-card.js.map +1 -0
- package/lib/types/client/worker-model-menu.d.ts +9 -0
- package/lib/types/client/worker-model-menu.js +136 -0
- package/lib/types/client/worker-model-menu.js.map +1 -0
- package/lib/types/client/workers.d.ts +21 -0
- package/lib/types/client/workers.js +59 -0
- package/lib/types/client/workers.js.map +1 -0
- package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
- package/lib/types/client/zcode-login-link-provider.js +105 -0
- package/lib/types/client/zcode-login-link-provider.js.map +1 -0
- package/lib/types/client/zcode-login-link.d.ts +16 -0
- package/lib/types/client/zcode-login-link.js +194 -0
- package/lib/types/client/zcode-login-link.js.map +1 -0
- package/lib/types/host/account-identity.d.ts +16 -0
- package/lib/types/host/account-identity.js +126 -0
- package/lib/types/host/account-identity.js.map +1 -0
- package/lib/types/host/account-login.d.ts +10 -0
- package/lib/types/host/account-login.js +126 -0
- package/lib/types/host/account-login.js.map +1 -0
- package/lib/types/host/account-models.d.mts +21 -0
- package/lib/types/host/account-models.mjs +262 -0
- package/lib/types/host/accounts.d.ts +42 -0
- package/lib/types/host/accounts.js +945 -0
- package/lib/types/host/accounts.js.map +1 -0
- package/lib/types/host/adapters.d.ts +24 -0
- package/lib/types/host/adapters.js +380 -0
- package/lib/types/host/adapters.js.map +1 -0
- package/lib/types/host/agy-context.d.ts +8 -0
- package/lib/types/host/agy-context.js +122 -0
- package/lib/types/host/agy-context.js.map +1 -0
- package/lib/types/host/agy-models.d.ts +5 -0
- package/lib/types/host/agy-models.js +37 -0
- package/lib/types/host/agy-models.js.map +1 -0
- package/lib/types/host/agy-windows-account.d.ts +14 -0
- package/lib/types/host/agy-windows-account.js +104 -0
- package/lib/types/host/agy-windows-account.js.map +1 -0
- package/lib/types/host/authorized-catalog.d.ts +14 -0
- package/lib/types/host/authorized-catalog.js +35 -0
- package/lib/types/host/authorized-catalog.js.map +1 -0
- package/lib/types/host/bridge-protocol.d.ts +15 -0
- package/lib/types/host/bridge-protocol.js +80 -0
- package/lib/types/host/bridge-protocol.js.map +1 -0
- package/lib/types/host/claude-native-oauth.d.ts +17 -0
- package/lib/types/host/claude-native-oauth.js +272 -0
- package/lib/types/host/claude-native-oauth.js.map +1 -0
- package/lib/types/host/claude-own-route.d.ts +33 -0
- package/lib/types/host/claude-own-route.js +250 -0
- package/lib/types/host/claude-own-route.js.map +1 -0
- package/lib/types/host/cli-account-binding.d.ts +33 -0
- package/lib/types/host/cli-account-binding.js +540 -0
- package/lib/types/host/cli-account-binding.js.map +1 -0
- package/lib/types/host/cli-protocol.d.ts +27 -0
- package/lib/types/host/cli-protocol.js +212 -0
- package/lib/types/host/cli-protocol.js.map +1 -0
- package/lib/types/host/codex-account.d.ts +8 -0
- package/lib/types/host/codex-account.js +143 -0
- package/lib/types/host/codex-account.js.map +1 -0
- package/lib/types/host/codex-models.d.ts +6 -0
- package/lib/types/host/codex-models.js +169 -0
- package/lib/types/host/codex-models.js.map +1 -0
- package/lib/types/host/extended-adapters.d.ts +44 -0
- package/lib/types/host/extended-adapters.js +207 -0
- package/lib/types/host/extended-adapters.js.map +1 -0
- package/lib/types/host/first-party-account-context.d.ts +26 -0
- package/lib/types/host/first-party-account-context.js +55 -0
- package/lib/types/host/first-party-account-context.js.map +1 -0
- package/lib/types/host/first-party-models.d.ts +29 -0
- package/lib/types/host/first-party-models.js +459 -0
- package/lib/types/host/first-party-models.js.map +1 -0
- package/lib/types/host/grok-adapter.d.ts +44 -0
- package/lib/types/host/grok-adapter.js +293 -0
- package/lib/types/host/grok-adapter.js.map +1 -0
- package/lib/types/host/grok-models.d.ts +47 -0
- package/lib/types/host/grok-models.js +320 -0
- package/lib/types/host/grok-models.js.map +1 -0
- package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
- package/lib/types/host/harness-opencode-accounts.js +80 -0
- package/lib/types/host/harness-opencode-accounts.js.map +1 -0
- package/lib/types/host/hermes-account-context.d.ts +8 -0
- package/lib/types/host/hermes-account-context.js +99 -0
- package/lib/types/host/hermes-account-context.js.map +1 -0
- package/lib/types/host/hermes-accounts.d.ts +19 -0
- package/lib/types/host/hermes-accounts.js +356 -0
- package/lib/types/host/hermes-accounts.js.map +1 -0
- package/lib/types/host/hermes-adapter.d.ts +93 -0
- package/lib/types/host/hermes-adapter.js +455 -0
- package/lib/types/host/hermes-adapter.js.map +1 -0
- package/lib/types/host/hermes-env.d.ts +4 -0
- package/lib/types/host/hermes-env.js +22 -0
- package/lib/types/host/hermes-env.js.map +1 -0
- package/lib/types/host/hermes-installation.d.ts +10 -0
- package/lib/types/host/hermes-installation.js +181 -0
- package/lib/types/host/hermes-installation.js.map +1 -0
- package/lib/types/host/hermes-models.d.ts +26 -0
- package/lib/types/host/hermes-models.js +328 -0
- package/lib/types/host/hermes-models.js.map +1 -0
- package/lib/types/host/hermes-native-entry.py +96 -0
- package/lib/types/host/hermes-nous-refresh.py +331 -0
- package/lib/types/host/hermes-nous.d.ts +53 -0
- package/lib/types/host/hermes-nous.js +343 -0
- package/lib/types/host/hermes-nous.js.map +1 -0
- package/lib/types/host/hermes-renewal.d.ts +27 -0
- package/lib/types/host/hermes-renewal.js +292 -0
- package/lib/types/host/hermes-renewal.js.map +1 -0
- package/lib/types/host/hermes-suppression.d.ts +7 -0
- package/lib/types/host/hermes-suppression.js +69 -0
- package/lib/types/host/hermes-suppression.js.map +1 -0
- package/lib/types/host/hermes-windows-installation.d.ts +5 -0
- package/lib/types/host/hermes-windows-installation.js +91 -0
- package/lib/types/host/hermes-windows-installation.js.map +1 -0
- package/lib/types/host/index.d.ts +140 -0
- package/lib/types/host/index.js +947 -0
- package/lib/types/host/index.js.map +1 -0
- package/lib/types/host/kimi-accounts.d.ts +17 -0
- package/lib/types/host/kimi-accounts.js +220 -0
- package/lib/types/host/kimi-accounts.js.map +1 -0
- package/lib/types/host/kimi-oauth-models.d.ts +14 -0
- package/lib/types/host/kimi-oauth-models.js +246 -0
- package/lib/types/host/kimi-oauth-models.js.map +1 -0
- package/lib/types/host/managed-agent.d.ts +4 -0
- package/lib/types/host/managed-agent.js +127 -0
- package/lib/types/host/managed-agent.js.map +1 -0
- package/lib/types/host/mimo-configuration.d.ts +22 -0
- package/lib/types/host/mimo-configuration.js +258 -0
- package/lib/types/host/mimo-configuration.js.map +1 -0
- package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
- package/lib/types/host/mimo-metadata-cache.js +121 -0
- package/lib/types/host/mimo-metadata-cache.js.map +1 -0
- package/lib/types/host/native-capability-cache.d.ts +11 -0
- package/lib/types/host/native-capability-cache.js +94 -0
- package/lib/types/host/native-capability-cache.js.map +1 -0
- package/lib/types/host/native-launch.d.mts +2 -0
- package/lib/types/host/native-launch.mjs +234 -0
- package/lib/types/host/native-process.d.ts +5 -0
- package/lib/types/host/native-process.js +41 -0
- package/lib/types/host/native-process.js.map +1 -0
- package/lib/types/host/native-spawn.mjs +32 -0
- package/lib/types/host/opencode-adapter.d.ts +94 -0
- package/lib/types/host/opencode-adapter.js +507 -0
- package/lib/types/host/opencode-adapter.js.map +1 -0
- package/lib/types/host/opencode-native.d.ts +27 -0
- package/lib/types/host/opencode-native.js +403 -0
- package/lib/types/host/opencode-native.js.map +1 -0
- package/lib/types/host/own-account-lease.d.mts +5 -0
- package/lib/types/host/own-account-lease.mjs +105 -0
- package/lib/types/host/pi-installation.d.mts +7 -0
- package/lib/types/host/pi-installation.mjs +87 -0
- package/lib/types/host/pi-omp-accounts.d.ts +28 -0
- package/lib/types/host/pi-omp-accounts.js +175 -0
- package/lib/types/host/pi-omp-accounts.js.map +1 -0
- package/lib/types/host/pi-omp-adapter.d.ts +32 -0
- package/lib/types/host/pi-omp-adapter.js +190 -0
- package/lib/types/host/pi-omp-adapter.js.map +1 -0
- package/lib/types/host/pi-omp-environment.d.mts +1 -0
- package/lib/types/host/pi-omp-environment.mjs +15 -0
- package/lib/types/host/pi-omp-identity.d.ts +2 -0
- package/lib/types/host/pi-omp-identity.js +142 -0
- package/lib/types/host/pi-omp-identity.js.map +1 -0
- package/lib/types/host/pi-omp-logout.d.ts +3 -0
- package/lib/types/host/pi-omp-logout.js +152 -0
- package/lib/types/host/pi-omp-logout.js.map +1 -0
- package/lib/types/host/pi-omp-native.d.ts +71 -0
- package/lib/types/host/pi-omp-native.js +753 -0
- package/lib/types/host/pi-omp-native.js.map +1 -0
- package/lib/types/host/pi-omp-refresh.d.mts +7 -0
- package/lib/types/host/pi-omp-refresh.mjs +324 -0
- package/lib/types/host/private-launch.mjs +23 -0
- package/lib/types/host/process.d.ts +43 -0
- package/lib/types/host/process.js +134 -0
- package/lib/types/host/process.js.map +1 -0
- package/lib/types/host/protocol.d.ts +23 -0
- package/lib/types/host/protocol.js +112 -0
- package/lib/types/host/protocol.js.map +1 -0
- package/lib/types/host/roles.d.ts +34 -0
- package/lib/types/host/roles.js +80 -0
- package/lib/types/host/roles.js.map +1 -0
- package/lib/types/host/routing.d.ts +31 -0
- package/lib/types/host/routing.js +248 -0
- package/lib/types/host/routing.js.map +1 -0
- package/lib/types/host/runtime.d.ts +60 -0
- package/lib/types/host/runtime.js +598 -0
- package/lib/types/host/runtime.js.map +1 -0
- package/lib/types/host/storage.d.ts +48 -0
- package/lib/types/host/storage.js +449 -0
- package/lib/types/host/storage.js.map +1 -0
- package/lib/types/host/telemetry.d.ts +17 -0
- package/lib/types/host/telemetry.js +158 -0
- package/lib/types/host/telemetry.js.map +1 -0
- package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
- package/lib/types/host/windows-account-launch.mjs +47 -0
- package/lib/types/host/windows-account-owner.ps1 +137 -0
- package/lib/types/host/windows-account-stdio.mjs +19 -0
- package/lib/types/host/windows-account-terminal.d.ts +17 -0
- package/lib/types/host/windows-account-terminal.js +208 -0
- package/lib/types/host/windows-account-terminal.js.map +1 -0
- package/lib/types/host/windows-agy-account.ps1 +81 -0
- package/lib/types/host/windows-cli-installation.d.ts +31 -0
- package/lib/types/host/windows-cli-installation.js +157 -0
- package/lib/types/host/windows-cli-installation.js.map +1 -0
- package/lib/types/host/windows-hidden-launch.mjs +49 -0
- package/lib/types/host/windows-hidden-process.d.ts +12 -0
- package/lib/types/host/windows-hidden-process.js +116 -0
- package/lib/types/host/windows-hidden-process.js.map +1 -0
- package/lib/types/host/zcode-account-models.d.ts +16 -0
- package/lib/types/host/zcode-account-models.js +114 -0
- package/lib/types/host/zcode-account-models.js.map +1 -0
- package/lib/types/host/zcode-adapter.d.ts +93 -0
- package/lib/types/host/zcode-adapter.js +808 -0
- package/lib/types/host/zcode-adapter.js.map +1 -0
- package/lib/types/host/zcode-grok-accounts.d.ts +30 -0
- package/lib/types/host/zcode-grok-accounts.js +408 -0
- package/lib/types/host/zcode-grok-accounts.js.map +1 -0
- package/lib/types/shared/accounts.d.ts +47 -0
- package/lib/types/shared/accounts.js +2 -0
- package/lib/types/shared/accounts.js.map +1 -0
- package/lib/types/shared/builtin-presets.d.ts +2 -0
- package/lib/types/shared/builtin-presets.js +231 -0
- package/lib/types/shared/builtin-presets.js.map +1 -0
- package/lib/types/shared/cli-settings.d.ts +5 -0
- package/lib/types/shared/cli-settings.js +2 -0
- package/lib/types/shared/cli-settings.js.map +1 -0
- package/lib/types/shared/model-presentation.d.ts +10 -0
- package/lib/types/shared/model-presentation.js +95 -0
- package/lib/types/shared/model-presentation.js.map +1 -0
- package/lib/types/shared/models.d.ts +7 -0
- package/lib/types/shared/models.js +35 -0
- package/lib/types/shared/models.js.map +1 -0
- package/lib/types/shared/telemetry.d.ts +18 -0
- package/lib/types/shared/telemetry.js +16 -0
- package/lib/types/shared/telemetry.js.map +1 -0
- package/lib/types/shared/types.d.ts +127 -0
- package/lib/types/shared/types.js +147 -0
- package/lib/types/shared/types.js.map +1 -0
- package/lib/windows-account-bootstrap.ps1 +44 -0
- package/lib/windows-account-launch.mjs +47 -0
- package/lib/windows-account-owner.ps1 +137 -0
- package/lib/windows-account-stdio.mjs +19 -0
- package/lib/windows-agy-account.ps1 +81 -0
- package/lib/windows-hidden-launch.mjs +49 -0
- package/lib/zcode-resume.mjs +423 -0
- package/package.json +109 -4
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["z","invalid","text","failure","failure","object","stable","claims","object","parseYaml","LIMIT","record","unknown","validId","object","unavailable","object","text","object","text","literal","unavailable","record","id","unavailable","unavailable","record","literal","id","parseNativeJsonc","record","literal","record","text","object","record","invalid","object","text","claims","object","literal","read","parse","capture","abortable","record","nonempty","record","nonempty","object","text","record","bridgePath","privateDirectory","object","text","record","privateArgv","privateDirectory","record","preferenceSchema","z","record","nonempty","privateDirectory","privateDirectory","privateDirectory","delay","validate"],"sources":["types/shared/types.js","types/shared/models.js","types/shared/model-presentation.js","types/host/roles.js","types/host/process.js","types/host/native-launch.mjs","types/host/windows-hidden-process.js","types/host/native-process.js","types/host/account-login.js","types/host/own-account-lease.mjs","types/host/pi-installation.mjs","types/host/pi-omp-refresh.mjs","types/host/pi-omp-native.js","types/host/account-identity.js","types/host/account-models.mjs","types/host/opencode-native.js","types/host/mimo-metadata-cache.js","types/host/native-capability-cache.js","types/host/kimi-accounts.js","types/host/kimi-oauth-models.js","types/host/mimo-configuration.js","types/host/first-party-models.js","types/host/claude-own-route.js","types/host/claude-native-oauth.js","types/host/codex-account.js","types/host/agy-models.js","types/host/agy-windows-account.js","types/host/opencode-adapter.js","types/host/hermes-env.js","types/host/hermes-suppression.js","types/host/hermes-nous.js","types/host/hermes-models.js","types/host/hermes-windows-installation.js","types/host/hermes-installation.js","types/host/hermes-renewal.js","types/host/hermes-adapter.js","types/host/hermes-account-context.js","types/host/zcode-account-models.js","types/host/zcode-adapter.js","types/host/cli-account-binding.js","types/host/codex-models.js","types/host/pi-omp-adapter.js","types/host/grok-models.js","types/host/grok-adapter.js","types/host/extended-adapters.js","types/host/bridge-protocol.js","types/host/pi-omp-environment.mjs","types/host/pi-omp-identity.js","types/host/windows-cli-installation.js","types/host/protocol.js","types/host/cli-protocol.js","types/host/adapters.js","types/host/authorized-catalog.js","types/shared/builtin-presets.js","types/host/storage.js","types/host/managed-agent.js","types/host/agy-context.js","types/host/telemetry.js","types/host/runtime.js","types/host/zcode-grok-accounts.js","types/host/harness-opencode-accounts.js","types/host/hermes-accounts.js","types/host/pi-omp-logout.js","types/host/pi-omp-accounts.js","types/host/first-party-account-context.js","types/host/windows-account-terminal.js","types/host/accounts.js","types/host/routing.js","types/host/index.js"],"sourcesContent":["export const EFFORTS = [\n 'default',\n 'none',\n 'minimal',\n 'low',\n 'medium',\n 'high',\n 'xhigh',\n 'max',\n 'ultra',\n];\nexport const CLI_IDS = [\n 'antigravity',\n 'codex',\n 'claude',\n 'kimi',\n 'mimo',\n 'zcode',\n 'grok',\n 'omp',\n 'pi',\n 'hermes',\n 'opencode',\n];\nexport const RETIRED_HARNESS_NOTICE = '外部 Harness CLI 入口已移除;历史记录仅供查看。请新建 Hermes Agent 任务。';\nexport const isRetiredCli = (cli) => cli === 'harness';\nexport const CLI_LABELS = {\n antigravity: 'Antigravity',\n codex: 'Codex',\n claude: 'Claude Code',\n kimi: 'Kimi',\n mimo: 'MiMo',\n zcode: 'ZCode',\n grok: 'Grok Build',\n omp: 'OMP',\n pi: 'Pi',\n hermes: 'Hermes Agent',\n harness: 'Harness(已移除)',\n opencode: 'OpenCode',\n};\n/** Short CLI stems used for automatic Worker names; protocol IDs remain unchanged. */\nexport const CLI_SHORT_NAMES = {\n antigravity: 'agy',\n codex: 'codex',\n claude: 'claude',\n kimi: 'kimi',\n mimo: 'mimo',\n zcode: 'zcode',\n grok: 'grok',\n omp: 'omp',\n pi: 'pi',\n hermes: 'hermes',\n harness: 'harness',\n opencode: 'opencode',\n};\nexport const cliOf = (preference) => preference.cli ?? 'antigravity';\nexport const effortLabel = (effort) => effort === 'default' ? '默认' : effort.charAt(0).toUpperCase() + effort.slice(1);\nexport const LEGACY_ACCOUNT_RECORD_NOTICE = '此历史任务缺少账号记录,请新建任务';\n/** Stable, non-mutating name for histories created before named workers. */\nexport const workerName = (worker) => worker.agentName || `智能体-${worker.id.slice(0, 6)}`;\nexport const active = (status) => status === 'queued' || status === 'running' || status === 'stopping';\n/** Fold repeated step updates without duplicating streamed text or the final response. */\nexport function foldEvents(events, endedRun) {\n const rows = [];\n const steps = new Map();\n const markEnded = (runId, status) => {\n for (const row of rows) {\n if (row.kind === 'tool' &&\n row.id.startsWith(runId + ':') &&\n ['ACTIVE', 'RUNNING', 'PENDING', 'QUEUED', 'IN_PROGRESS'].includes(row.state ?? ''))\n row.runStatus = status;\n }\n };\n for (const event of events) {\n if (event.kind === 'status') {\n const terminal = event.state ?? event.text;\n if (terminal === 'completed' || terminal === 'failed' || terminal === 'interrupted')\n markEnded(event.runId, terminal);\n }\n if (event.kind === 'result') {\n const lastAssistant = rows.findLast((row) => row.kind === 'assistant' && row.id.startsWith(event.runId + ':'));\n if (lastAssistant) {\n // agy may repeat all earlier response steps in its final response.\n // Strip only exact earlier prefixes, leaving interleaved tool rows intact.\n let finalText = event.text.trimStart();\n const earlier = rows.filter((row) => row !== lastAssistant && row.kind === 'assistant' && row.id.startsWith(event.runId + ':'));\n for (const row of earlier) {\n const prefix = row.text.trim();\n if (!prefix)\n continue;\n if (finalText.startsWith(prefix))\n finalText = finalText.slice(prefix.length).trimStart();\n else\n break;\n }\n if (event.text)\n lastAssistant.text = finalText;\n continue;\n }\n }\n const key = event.step === undefined\n ? `${event.runId}:event:${event.seq}`\n : `${event.runId}:${event.kind}:${event.step}`;\n const existing = steps.get(key);\n if (existing) {\n if (event.kind === 'assistant')\n existing.text += event.text;\n else if (event.text)\n existing.text = event.text;\n if (event.state)\n existing.state = event.state;\n if (event.detail)\n existing.detail = event.detail;\n }\n else {\n const row = {\n id: key,\n kind: event.kind === 'result' ? 'assistant' : event.kind,\n text: event.text,\n time: event.time,\n state: event.state,\n detail: event.detail,\n };\n steps.set(key, row);\n rows.push(row);\n }\n }\n // Use full persisted events before pagination. Duration includes admission/queue time.\n const timing = new Map();\n for (const event of events) {\n const run = timing.get(event.runId) ?? {};\n if (event.kind === 'user' && !run.runStartedAt)\n run.runStartedAt = event.time;\n if (event.kind === 'status' &&\n ['completed', 'failed', 'interrupted'].includes(event.state ?? event.text)) {\n run.runEndedAt = event.time;\n run.runOutcome = (event.state ?? event.text);\n }\n timing.set(event.runId, run);\n }\n for (const row of rows)\n Object.assign(row, timing.get(row.id.split(':')[0]));\n if (endedRun)\n markEnded(endedRun.runId, endedRun.status);\n return rows;\n}\n//# sourceMappingURL=types.js.map","import { cliOf, EFFORTS } from \"./types.js\";\n/** Only remove an exact, known effort suffix for Antigravity display. Execution keeps the raw ID. */\nexport function modelName(preference) {\n return cliOf(preference) === 'antigravity' && preference.model.endsWith(`-${preference.effort}`)\n ? preference.model.slice(0, -preference.effort.length - 1)\n : preference.model;\n}\n/** Group only variants explicitly advertised by the CLI, never infer missing levels. */\nexport function groupAgyModels(raw) {\n const groups = new Map();\n for (const model of raw) {\n const effort = EFFORTS.find((e) => e !== 'default' && model.id.endsWith(`-${e}`) && model.label.toLowerCase().endsWith(`(${e})`));\n const id = effort ? model.id.slice(0, -effort.length - 1) : model.id;\n const level = effort ?? 'default';\n const group = groups.get(id) ?? {\n id,\n label: effort ? model.label.replace(/\\s*\\([^()]+\\)$/, '') : model.label,\n efforts: [],\n variants: {},\n };\n if (!group.efforts.includes(level))\n group.efforts.push(level);\n group.variants[level] = model.id;\n groups.set(id, group);\n }\n return [...groups.values()].map((m) => ({ ...m, efforts: EFFORTS.filter((e) => m.efforts.includes(e)) }));\n}\n/** Accept old raw IDs and new grouped choices; return the exact executable preference. */\nexport function resolveModel(preference, models) {\n const model = models.find((m) => m.id === preference.model || Object.values(m.variants ?? {}).includes(preference.model));\n if (!model || !model.efforts?.includes(preference.effort))\n throw new Error('模型或思考强度已不可用,请重新选择');\n return { ...preference, model: model.variants?.[preference.effort] ?? model.id };\n}\n//# sourceMappingURL=models.js.map","import { modelName } from \"./models.js\";\n/** Remove one declared route prefix; remaining slashes can belong to a native model ID. */\nexport function nativeModelName(id) {\n const text = id.trim();\n if (text.startsWith('[')) {\n try {\n const parts = JSON.parse(text);\n if (Array.isArray(parts) && parts.length === 2 && parts.every((part) => typeof part === 'string'))\n return parts[1];\n }\n catch {\n /* Historical unknown formats remain readable without changing their ID. */\n }\n }\n const slash = text.indexOf('/');\n return slash > 0 && /^[A-Za-z0-9_.:-]+$/u.test(text.slice(0, slash)) ? text.slice(slash + 1) : text;\n}\nfunction withoutAnnotations(name) {\n const visible = [];\n let depth = 0;\n for (const character of name) {\n if (character === '(' || character === '(')\n depth++;\n else if (character === ')' || character === ')') {\n if (depth)\n depth--;\n }\n else if (!depth)\n visible.push(character);\n }\n return visible.join('').replace(/\\s+/gu, ' ').trim();\n}\n/** Short visible text only; native identity/grouping retains organization namespaces. */\nfunction visibleModelName(name) {\n const native = nativeModelName(name);\n const parts = native.split('/');\n return parts.length > 1 && parts.slice(0, -1).every((part) => /^[A-Za-z0-9_.:-]+$/u.test(part))\n ? parts.at(-1).trim() || native\n : native;\n}\n/** A presentation-only name. Never use the returned text as an execution/lookup ID. */\nexport function displayModelName(value) {\n // A raw ID has no provider annotation field. Parentheses can be part of its\n // legal native name, so strip annotations only from the catalog's label.\n if (typeof value === 'string')\n return visibleModelName(value) || '模型';\n if ('model' in value)\n return displayModelName(modelName(value));\n const label = withoutAnnotations(visibleModelName(value.label ?? '')).replace(/^Claude 官方模型别名\\s+/u, '');\n return label || displayModelName(value.id);\n}\nconst selectedRoute = (model, selected) => !!selected && (model.id === selected || Object.values(model.variants ?? {}).includes(selected));\nconst freeRank = (model) => (model.cost === 'free' ? 0 : 1);\nconst normalizedId = (model) => nativeModelName(model.id).trim().toLowerCase();\n/**\n * Present an already-filtered native catalog. Keep the complete raw catalog for\n * validation. A group selects one whole route, never a union of capabilities.\n */\nexport function visibleModelChoices(raw, selectedFullId) {\n const groups = new Map();\n raw.forEach((model, order) => {\n const key = normalizedId(model);\n const current = groups.get(key);\n if (!current) {\n groups.set(key, { model, order });\n return;\n }\n if (selectedRoute(model, selectedFullId) ||\n (!selectedRoute(current.model, selectedFullId) && freeRank(model) < freeRank(current.model)))\n current.model = model;\n });\n const visible = [...groups.values()]\n .sort((a, b) => freeRank(a.model) - freeRank(b.model) || a.order - b.order)\n .map(({ model }) => ({ ...model, label: displayModelName(model) }));\n const labelCounts = new Map();\n for (const model of visible) {\n const key = model.label.toLowerCase();\n labelCounts.set(key, (labelCounts.get(key) ?? 0) + 1);\n }\n // Distinct native versions may share a friendly name. Keep separate, clean,\n // reversible choices instead of coalescing them by that presentation string.\n for (const model of visible)\n if (labelCounts.get(model.label.toLowerCase()) > 1)\n model.label = displayModelName(model.id);\n const used = new Set();\n for (const model of visible) {\n const base = model.label;\n let suffix = 1;\n while (used.has(model.label.toLowerCase()))\n model.label = `${base} · ${++suffix}`;\n used.add(model.label.toLowerCase());\n }\n return visible;\n}\n//# sourceMappingURL=model-presentation.js.map","import { z } from 'zod';\nimport { workerName } from \"../shared/types.js\";\nconst singleLine = (max) => z\n .string()\n .trim()\n .min(1)\n .max(max)\n .refine((value) => !/[\\r\\n\\u0000-\\u001f\\u007f]/.test(value), '名称不能包含换行或控制字符');\nexport const agentNameSchema = singleLine(60);\nexport const workerTitleSchema = singleLine(160);\nexport const roleSnapshotSchema = z.object({\n presetId: z.string().min(1).max(100).optional(),\n name: agentNameSchema,\n summary: z.string().trim().min(1).max(240),\n prompt: z.string().trim().min(1).max(30_000),\n});\nexport const rolePresetSchema = roleSnapshotSchema.omit({ presetId: true }).extend({\n id: z.string().regex(/^[a-zA-Z0-9_-]{1,100}$/),\n builtin: z.boolean().optional(),\n source: z.string().max(240).optional(),\n});\nexport const rolePresetInputSchema = rolePresetSchema.omit({ builtin: true, source: true }).extend({\n id: rolePresetSchema.shape.id.optional(),\n});\nexport const NO_ROLE_LABEL = '不使用角色预设';\nexport function roleSnapshot(preset) {\n return { presetId: preset.id, name: preset.name, summary: preset.summary, prompt: preset.prompt };\n}\n/** Snapshot the offered list before showing this question; parsing uses that same list. */\nexport function roleQuestion(presets) {\n return {\n id: 'cliworker_role',\n header: '智能体预设',\n question: '选择角色预设',\n options: [...presets.map((preset) => ({ label: preset.name })), { label: NO_ROLE_LABEL }],\n };\n}\nexport function readRoleAnswer(presets, response) {\n const answer = response.answers.find((item) => item.id === 'cliworker_role');\n if (answer?.custom !== undefined) {\n return roleSnapshotSchema.parse({\n name: '临时角色',\n summary: '本次派遣自定义的角色提示词',\n prompt: answer.custom,\n });\n }\n if (answer?.selected.length !== 1)\n throw new Error('请选择角色预设或填写临时提示词;任务尚未启动');\n if (answer.selected[0] === NO_ROLE_LABEL)\n return undefined;\n const preset = presets.find((item) => item.name === answer.selected[0]);\n if (!preset)\n throw new Error('角色选择已失效,请重新选择;任务尚未启动');\n return roleSnapshot(preset);\n}\nexport async function askRolePreset(presets, ask, signal) {\n signal.throwIfAborted();\n const offered = structuredClone(presets);\n const response = await ask([roleQuestion(offered)]);\n signal.throwIfAborted();\n return readRoleAnswer(offered, response);\n}\nexport function availableAgentName(workers, parent, base) {\n const names = new Set([...workers]\n .filter((worker) => worker.parentSessionId === parent)\n .flatMap((worker) => [workerName(worker), ...(worker.nameAliases ?? [])])\n .map((name) => name.toLocaleLowerCase()));\n const stem = agentNameSchema.parse(base).slice(0, 48);\n let number = 1;\n while (names.has(`${stem}-${number}`.toLocaleLowerCase()))\n number++;\n return `${stem}-${number}`;\n}\n/** Role is prepended only for a fresh CLI conversation. Timeline keeps the task verbatim. */\nexport function promptForWorker(worker, task) {\n if (!worker.role || worker.conversationId)\n return task;\n return `智能体名称:${worker.agentName ?? worker.role.name}\\n\\n角色提示词(遵循宿主权限与当前任务范围):\\n${worker.role.prompt}\\n\\n本次任务:\\n${task}`;\n}\n//# sourceMappingURL=roles.js.map","import { accessSync, constants, realpathSync, statSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { isAbsolute, parse, resolve, sep } from 'node:path';\n/** A process range is still unconfirmed; callers must stop admitting work. */\nexport class ProcessCleanupUnconfirmedError extends Error {\n constructor() {\n super('CLI catalog process cleanup did not reach quiescence');\n this.name = 'ProcessCleanupUnconfirmedError';\n }\n}\nexport const DEFAULT_CONFIG = {\n executable: 'agy',\n maxConcurrent: 2,\n timeoutMs: 1_800_000,\n graceMs: 5000,\n maxLineBytes: 1_048_576,\n maxRunBytes: 16_777_216,\n maxTimelineItems: 1000,\n};\nexport function projectDirectory(input) {\n if (!isAbsolute(input))\n throw new Error('Project must be an absolute directory');\n const path = realpathSync(input);\n const home = realpathSync(homedir());\n const key = (value) => process.platform === 'win32' ? value.toLowerCase() : value;\n if (key(path) === key(parse(path).root) || key(path) === key(home) || key(home).startsWith(key(path + sep)))\n throw new Error('Refusing a root or home directory as workspace');\n const forbidden = [\n '.ssh',\n '.aws',\n '.codex',\n '.claude',\n '.kimi-code',\n '.config/mimocode',\n '.local/share/mimocode',\n '.agents',\n '.grok',\n '.pi',\n '.omp',\n '.dsh',\n '.hermes',\n '.zcode',\n '.local/share/opencode',\n '.gemini',\n '.config',\n 'Library/Keychains',\n 'Library/Application Support/Google',\n 'Library/Application Support/Microsoft Edge',\n ];\n if (forbidden.some((name) => {\n const root = resolve(home, name);\n return key(path) === key(root) || key(path).startsWith(key(root + sep));\n }))\n throw new Error('Refusing a credential or application configuration directory');\n if (!statSync(path).isDirectory())\n throw new Error('Project is not a directory');\n accessSync(path, constants.R_OK | constants.X_OK);\n return path;\n}\nexport function agyArguments(executable, project, preference, mode, prompt, timeoutMs, conversationId) {\n // --disable-slash-commands also disables --mode plan in agy 1.2.16.\n // Prefix plain task text instead, and keep the native mode effective.\n return [\n executable,\n '--add-dir',\n project,\n '--sandbox',\n '--dangerously-skip-permissions',\n '--mode',\n mode,\n '--model',\n preference.model,\n ...(preference.effort === 'default' ? [] : ['--effort', preference.effort]),\n '--output-format',\n 'stream-json',\n '--print-timeout',\n `${Math.ceil(timeoutMs / 1000)}s`,\n ...(conversationId ? ['--conversation', conversationId] : []),\n '--print',\n `任务:\\n${prompt}`,\n ];\n}\n/** Bound discovery and always await managed process cleanup. No agent prompt is sent. */\nexport async function discoverModels(backend, config, cwd, signal) {\n const executable = await backend.resolveExecutable(config.executable);\n signal.throwIfAborted();\n const control = AbortSignal.any([signal, AbortSignal.timeout(30_000)]);\n const process = backend.spawn({\n argv: [executable, 'models'],\n cwd,\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void process.done.catch(() => undefined);\n let stdout = '';\n let stderr = '';\n const read = async (stream, out) => {\n if (stream)\n for await (const chunk of stream)\n out(String(chunk));\n };\n try {\n await Promise.all([\n read(process.stdout, (s) => {\n stdout += s;\n if (stdout.length > config.maxLineBytes)\n throw new Error('Model catalog too large');\n }),\n read(process.stderr, (s) => {\n stderr = (stderr + s).slice(-4096);\n }),\n ]);\n const outcome = await process.done;\n control.throwIfAborted();\n if (outcome.exitCode !== 0)\n throw new Error(`无法读取 Antigravity 模型:${stderr || outcome.exitCode}`);\n const models = stdout.split(/\\r?\\n/).flatMap((line) => {\n const [id, ...label] = line.split('\\t');\n return id && label.length && /^[A-Za-z0-9_.:/-]+$/.test(id)\n ? [{ id, label: label.join(' ').trim() }]\n : [];\n });\n if (!models.length)\n throw new Error('Antigravity returned no model catalog; check login with agy models');\n return models;\n }\n finally {\n process.terminate();\n await process.waitForExit();\n await process.done.catch(() => undefined);\n }\n}\n//# sourceMappingURL=process.js.map","// Inspect fixed launcher data; never ask a shell to interpret CLI arguments.\nimport { openSync, readSync, fstatSync, closeSync, realpathSync, statSync, existsSync } from 'node:fs'\nimport { basename, dirname, extname, isAbsolute, relative, resolve, sep, delimiter, join } from 'node:path'\nimport { homedir, userInfo } from 'node:os'\n\nconst invalid = () => Object.assign(\n new Error('CLI 启动入口无法确认,请配置原生程序或固定 Node/Bun 入口'),\n { code: 'CLI_LAUNCHER_UNSUPPORTED' },\n)\nconst batch = (value) => /\\.(?:cmd|bat)$/i.test(value)\nfunction text(path, limit = 128 * 1024) {\n const descriptor = openSync(path, 'r')\n try {\n const info = fstatSync(descriptor)\n if (!info.isFile() || info.size > limit) throw invalid()\n const bytes = Buffer.alloc(info.size + 1)\n const read = readSync(descriptor, bytes, 0, bytes.length, 0)\n const after = fstatSync(descriptor)\n if (read !== info.size || info.size !== after.size || info.mtimeMs !== after.mtimeMs) throw invalid()\n return bytes\n .subarray(0, read)\n .toString('utf8')\n .replace(/^\\uFEFF/, '')\n } finally {\n closeSync(descriptor)\n }\n}\nfunction file(path) {\n const canonical = realpathSync(path)\n if (!statSync(canonical).isFile()) throw invalid()\n return canonical\n}\nfunction scriptRuntime(path) {\n const descriptor = openSync(path, 'r')\n try {\n const bytes = Buffer.alloc(256)\n const length = readSync(descriptor, bytes, 0, bytes.length, 0)\n const header = bytes.subarray(0, length).toString('utf8').split('\\n')[0].trim()\n if (header.startsWith('#!')) {\n const match = /^#!\\s*(?:\\/usr\\/bin\\/env\\s+(?:-S\\s+)?)?(?:[^\\s]*\\/)?(node|bun)\\s*$/.exec(header)\n if (!match) throw invalid()\n return match[1]\n }\n // A fixed npm bin entry can declare its runtime in the package manifest.\n for (let directory = dirname(path), depth = 0; depth < 5; depth++, directory = dirname(directory)) {\n const manifestPath = join(directory, 'package.json')\n if (!existsSync(manifestPath)) continue\n const manifest = JSON.parse(text(manifestPath))\n const bins = typeof manifest.bin === 'string' ? [manifest.bin] : Object.values(manifest.bin ?? {})\n if (bins.some((entry) => typeof entry === 'string' && resolve(directory, entry) === path)) {\n if (manifest.engines?.bun && !manifest.engines?.node) return 'bun'\n return 'node'\n }\n break\n }\n return /\\.[cm]?js$/i.test(path) ? 'node' : undefined\n } finally {\n closeSync(descriptor)\n }\n}\nfunction runtimeProgram(runtime, platform, launcherDirectory) {\n if (runtime === 'node') return process.execPath\n if (runtime !== 'bun') throw invalid()\n const name = platform === 'win32' ? 'bun.exe' : 'bun'\n const candidates = [\n ...(launcherDirectory ? [join(launcherDirectory, name)] : []),\n ...(process.env.PATH ?? '')\n .split(delimiter)\n .map((directory) => directory.replace(/^\"|\"$/g, ''))\n .filter(isAbsolute)\n .map((directory) => join(directory, name)),\n ...(process.env.BUN_INSTALL ? [join(process.env.BUN_INSTALL, 'bin', name)] : []),\n ...[homedir(), userInfo().homedir].map((home) => join(home, '.bun', 'bin', name)),\n ]\n const candidate = candidates.find((path) => existsSync(path) && statSync(path).isFile())\n if (!candidate) throw new Error('未找到 Bun,请安装该 CLI 所需的 Bun 运行时')\n return file(candidate)\n}\n/** npm's native bin shim is data, not a batch program to execute. */\nfunction nativePackageBin(shim, suffix) {\n const parts = suffix.replace(/\\\\/g, '/').split('/')\n if (parts[0] !== 'node_modules' || parts.some((part) => !part || part === '.' || part === '..'))\n throw invalid()\n const scoped = parts[1]?.startsWith('@')\n const name = parts.slice(1, scoped ? 3 : 2).join('/')\n if (!/^(?:@[a-z0-9._-]+\\/)?[a-z0-9._-]+$/.test(name)) throw invalid()\n const root = fileDirectory(resolve(dirname(shim), ...parts.slice(0, scoped ? 3 : 2)))\n const entry = file(resolve(dirname(shim), ...parts))\n const inside = relative(root, entry)\n if (!inside || inside === '..' || inside.startsWith('..' + sep) || isAbsolute(inside)) throw invalid()\n const manifest = JSON.parse(text(join(root, 'package.json')))\n const command = basename(shim, extname(shim))\n const declared = typeof manifest.bin === 'string'\n ? name.split('/').at(-1) === command ? manifest.bin : undefined\n : manifest.bin?.[command]\n if (manifest.name !== name || typeof declared !== 'string' || isAbsolute(declared) ||\n declared.replace(/\\\\/g, '/').split('/').includes('..') || file(resolve(root, declared)) !== entry)\n throw invalid()\n const descriptor = openSync(entry, 'r')\n try {\n const header = Buffer.alloc(64), signature = Buffer.alloc(4)\n const size = fstatSync(descriptor).size\n if (readSync(descriptor, header, 0, 64, 0) !== 64 || header.toString('ascii', 0, 2) !== 'MZ')\n throw invalid()\n const offset = header.readUInt32LE(0x3c)\n if (offset < 64 || offset + 4 > size || readSync(descriptor, signature, 0, 4, offset) !== 4 ||\n signature.toString('hex') !== '50450000') throw invalid()\n } finally {\n closeSync(descriptor)\n }\n return entry\n}\nfunction fileDirectory(path) {\n const canonical = realpathSync(path)\n if (!statSync(canonical).isDirectory()) throw invalid()\n return canonical\n}\nfunction inspectBatch(executable, platform) {\n const source = text(file(executable)).trim().replace(/\\r\\n/g, '\\n')\n // Nous' official fallback contains just a fixed interpreter and its encoded\n // launcher. Preserve its own bootstrap; do not guess a virtualenv interpreter.\n const hermes =\n /^@echo off\\n\"([^\"\\n%]+)\" -I -c \"(import base64; exec\\(base64\\.b64decode\\('([A-Za-z0-9+/]+={0,2})'\\)\\))\" %\\*$/i.exec(\n source,\n )\n if (hermes) {\n const decoded = Buffer.from(hermes[3], 'base64')\n if (\n !isAbsolute(hermes[1]) ||\n decoded.toString('base64') !== hermes[3] ||\n !decoded.toString('utf8').startsWith('import os, re, sys\\n') ||\n !decoded.toString('utf8').includes('import hermes_bootstrap') ||\n !decoded.toString('utf8').includes('from hermes_cli.main import main')\n )\n throw invalid()\n return { kind: 'python', argv: [file(hermes[1]), '-I', '-c', hermes[2]] }\n }\n const entries = new Set()\n const runtimes = new Set()\n for (const original of source.split('\\n')) {\n let line = original.trim()\n if (!line || /^@?(?:echo off|rem\\b.*)$/i.test(line)) continue\n // npm cmd-shim's standard final control prefix is launcher boilerplate;\n // it is discarded, and nothing from it is executed by this module.\n line = line.replace(/^endLocal & goto #_undefined_# 2>NUL \\|\\| title [^&\\n]+ & /i, '')\n const native = /^@?\"%(?:~dp0[\\\\/]?|dp0%[\\\\/])([^\"\\n%]+\\.exe)\"\\s+%\\*$/i.exec(line)\n if (native) {\n entries.add(nativePackageBin(executable, native[1]))\n runtimes.add('native')\n continue\n }\n const command =\n /^@?(?:(node|bun)|\"%_prog%\"|\"%(?:~dp0[\\\\/]?|dp0%[\\\\/])(node|bun)\\.exe\")\\s+\"%(?:~dp0[\\\\/]?|dp0%[\\\\/])([^\"\\n%]+)\"\\s+%\\*$/i.exec(\n line,\n )\n if (command) {\n const path = file(resolve(dirname(executable), command[3].replace(/[\\\\/]/g, sep)))\n if (!scriptRuntime(path)) throw invalid()\n entries.add(path)\n if (command[1] || command[2]) runtimes.add((command[1] || command[2]).toLowerCase())\n continue\n }\n const program = /^@?set \"?_prog=(?:%(?:~dp0[\\\\/]?|dp0%[\\\\/]))?(node|bun)(?:\\.exe)?\"?$/i.exec(line)\n if (program) {\n runtimes.add(program[1].toLowerCase())\n continue\n }\n if (\n /^@?(?:goto start|:find_dp0|:start|set dp0=%~dp0|exit \\/b|setlocal|endlocal|call :find_dp0)$/i.test(\n line,\n ) ||\n /^@?if (?:not )?exist \"%(?:~dp0[\\\\/]?|dp0%[\\\\/])(?:node|bun)\\.exe\" \\($/i.test(line) ||\n /^\\)(?: else \\()?$/i.test(line) ||\n /^@?set pathext=%pathext:;\\.js;=;%$/i.test(line) ||\n /^@?if (?:not )?defined node_path \\($/i.test(line) ||\n /^@?set \"node_path=[^\"\\n&|<>]+\"$/i.test(line)\n )\n continue\n throw invalid()\n }\n if (entries.size !== 1 || runtimes.size !== 1) throw invalid()\n const entry = [...entries][0],\n runtime = [...runtimes][0]\n if (runtime === 'native') return { kind: 'native', argv: [entry] }\n if (scriptRuntime(entry) !== runtime) throw invalid()\n return { kind: runtime, argv: [runtimeProgram(runtime, platform, dirname(executable)), entry] }\n}\n\n/** Canonical npm entry for installation identity checks; Python launchers keep their identity. */\nexport function resolveNativeEntry(executable, platform = process.platform) {\n if (platform !== 'win32') return executable\n if (isAbsolute(executable) && !extname(executable) && !existsSync(executable)) {\n const extensions = (process.env.PATHEXT || '.EXE;.COM;.CMD;.BAT')\n .split(';')\n .map((extension) => extension.toLowerCase())\n .filter((extension) => /^\\.(?:exe|com|cmd|bat)$/.test(extension))\n const candidate = [...new Set(extensions)]\n .map((extension) => executable + extension)\n .find((path) => existsSync(path) && statSync(path).isFile())\n if (candidate) executable = candidate\n }\n if (!batch(executable)) return executable\n let inspected\n try {\n inspected = inspectBatch(executable, platform)\n } catch {\n // A present but invalid shim is not an absent CLI. Never forward raw paths or script text.\n throw invalid()\n }\n // Keep Bun's fixed shim identity: it may pin a bundled bun.exe beside the\n // shim which cannot be recovered from only the package's JS path.\n return inspected.kind === 'node' ? inspected.argv[1] : inspected.kind === 'native' ? inspected.argv[0] : executable\n}\n\n/** Windows CreateProcess accepts real programs, not npm command files. */\nexport function nativeLaunchArgv(argv, platform = process.platform) {\n if (\n !Array.isArray(argv) ||\n !argv.length ||\n argv.some((value) => typeof value !== 'string' || value.includes('\\0'))\n )\n throw invalid()\n if (platform !== 'win32') {\n if (!/\\.[cm]?js$/i.test(argv[0])) return [...argv]\n const entry = file(argv[0])\n return [runtimeProgram(scriptRuntime(entry), platform), entry, ...argv.slice(1)]\n }\n const executable = resolveNativeEntry(argv[0], platform),\n arguments_ = argv.slice(1)\n if (batch(executable)) return [...inspectBatch(executable, platform).argv, ...arguments_]\n if (/\\.[cm]?js$/i.test(executable) || (extname(executable) === '' && scriptRuntime(executable)))\n return [runtimeProgram(scriptRuntime(executable), platform), file(executable), ...arguments_]\n return [executable, ...arguments_]\n}\n","import { win32 } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nconst failure = () => new Error('Windows 后台 CLI 启动回执异常');\nconst bootstrap = fileURLToPath(new URL('./windows-hidden-launch.mjs', import.meta.url));\nexport const isCurrentWindowsRuntime = (value) => win32.normalize(value).toLowerCase() === win32.normalize(process.execPath).toLowerCase();\n/** Only console-subsystem targets need a GUI bootstrap. Existing Node helpers\n * already use Electron's GUI executable; terminal allocation stays untouched. */\nexport function needsWindowsHiddenLaunch(argv, platform, electron) {\n return platform === 'win32' && electron && !isCurrentWindowsRuntime(argv[0]);\n}\nfunction nodeEnvironment(env) {\n let value;\n for (const [key, entry] of Object.entries(process.env))\n if (key.toUpperCase() === 'ELECTRON_RUN_AS_NODE')\n value = entry;\n for (const [key, entry] of Object.entries(env ?? {}))\n if (key.toUpperCase() === 'ELECTRON_RUN_AS_NODE')\n value = entry;\n return value ?? null;\n}\n/** Window presentation only: all byte streams, collection and process-range\n * ownership remain the SDK's. Native exit facts travel over a private channel,\n * never stdout/stderr and never the native CLI's credential/session protocol. */\nexport function spawnWindowsHidden(backend, spec, options = {}) {\n // Current plugin calls do not use this channel. Never silently take a future\n // consumer's control protocol or downgrade to an unhidden spawn.\n if (spec.stdio.control)\n throw new Error('Windows 后台 CLI 启动不能复用已占用的控制通道');\n const inner = backend.spawn({\n ...spec,\n argv: [process.execPath, bootstrap, JSON.stringify({ nodeEnv: nodeEnvironment(spec.env), ...options }), ...spec.argv],\n env: { ...spec.env, ELECTRON_RUN_AS_NODE: '1' },\n stdio: { ...spec.stdio, control: 'pipe' },\n });\n let cancelled = false, bytes = 0, raw = '', invalid = false;\n const channel = inner.control;\n if (!channel)\n inner.terminate();\n // Attach readers immediately so a fast metadata process cannot fill a pipe.\n const reading = channel ? new Promise((resolve) => {\n channel.on('data', (chunk) => {\n bytes += Buffer.byteLength(chunk);\n if (bytes > 1024) {\n invalid = true;\n channel.destroy();\n inner.terminate();\n }\n else\n raw += String(chunk);\n });\n channel.once('error', () => { invalid = true; inner.terminate(); resolve(); });\n channel.once('end', resolve);\n channel.once('close', resolve);\n }) : Promise.resolve();\n // A native parent can exit while its descendants retain stdout/stderr. The\n // GUI relay must remain alive to forward those bytes, so its exit cannot be\n // used as the native process's completion signal. Keep range exit on the SDK.\n const outerDone = inner.done.then(async (outer) => {\n let timer;\n try {\n await Promise.race([reading, new Promise((_, reject) => {\n timer = setTimeout(() => reject(failure()), 1000);\n })]);\n }\n finally {\n clearTimeout(timer);\n }\n return outer;\n });\n void outerDone.catch(() => inner.terminate());\n const done = (async () => {\n try {\n if (!channel) {\n await inner.done;\n throw failure();\n }\n const outer = await Promise.race([reading.then(() => undefined), outerDone]);\n if (cancelled || spec.signal?.aborted)\n return await inner.done;\n if (invalid || (outer && (outer.exitCode !== 0 || outer.signal)))\n throw failure();\n const value = JSON.parse(raw);\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw failure();\n if (value.kind === 'spawn-error' && ['ENOENT', 'EACCES', 'ENOEXEC', 'EINVAL', 'UNKNOWN'].includes(value.code))\n throw Object.assign(new Error('Windows 后台 CLI 无法启动'), { code: value.code });\n if (value.kind !== 'exit' ||\n !(value.exitCode === null || (Number.isInteger(value.exitCode) && value.exitCode >= -2147483648 && value.exitCode <= 4294967295)) ||\n !(value.signal === null || (typeof value.signal === 'string' && /^SIG[A-Z0-9]+$/.test(value.signal))) ||\n (value.exitCode === null) === (value.signal === null))\n throw failure();\n return { exitCode: value.exitCode, signal: value.signal };\n }\n catch (error) {\n inner.terminate();\n if (error instanceof SyntaxError)\n throw failure();\n throw error;\n }\n finally {\n channel?.destroy();\n }\n })();\n void done.catch(() => undefined);\n return {\n stdin: inner.stdin,\n stdout: inner.stdout,\n stderr: inner.stderr,\n collected: inner.collected,\n control: undefined,\n done,\n terminate: () => { cancelled = true; channel?.destroy(); inner.terminate(); },\n waitForExit: (signal) => inner.waitForExit(signal),\n };\n}\n//# sourceMappingURL=windows-hidden-process.js.map","import { nativeLaunchArgv, resolveNativeEntry } from './native-launch.mjs';\nimport { win32 } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { isCurrentWindowsRuntime, needsWindowsHiddenLaunch, spawnWindowsHidden } from \"./windows-hidden-process.js\";\nconst privateLauncher = fileURLToPath(new URL('./private-launch.mjs', import.meta.url));\n/** One normalization boundary for tasks, metadata and interactive account menus. */\nexport function nativeProcessBackend(backend, platform = process.platform, options = {}) {\n const normalize = (spec) => {\n const argv = nativeLaunchArgv(spec.argv, platform);\n return {\n ...spec,\n argv,\n ...(argv[0] === process.execPath || (platform === 'win32' && isCurrentWindowsRuntime(argv[0]))\n ? { env: { ...spec.env, ELECTRON_RUN_AS_NODE: '1' } } : {}),\n };\n };\n return {\n async resolveExecutable(name) {\n return resolveNativeEntry(await backend.resolveExecutable(resolveNativeEntry(name, platform)), platform);\n },\n spawn(spec) {\n const normalized = normalize(spec);\n const electron = options.electron ?? !!process.versions.electron;\n // Fold only our exact private-umask helper into the background relay.\n // Leaving another pipe relay beneath it would delay the native exit\n // receipt until all descendants released their inherited output pipes.\n if (platform === 'win32' && electron && isCurrentWindowsRuntime(normalized.argv[0]) &&\n normalized.argv.length > 2 && win32.normalize(normalized.argv[1]).toLowerCase() === win32.normalize(privateLauncher).toLowerCase())\n return spawnWindowsHidden(backend, { ...normalized, argv: nativeLaunchArgv(normalized.argv.slice(2), platform) }, { privateUmask: true });\n return needsWindowsHiddenLaunch(normalized.argv, platform, electron)\n ? spawnWindowsHidden(backend, normalized)\n : backend.spawn(normalized);\n },\n ...(backend.spawnTerminal\n ? {\n spawnTerminal: (spec) => backend.spawnTerminal(normalize(spec)),\n }\n : {}),\n };\n}\n//# sourceMappingURL=native-process.js.map","const providerNames = {\n openai: 'OpenAI',\n 'openai-codex': 'OpenAI',\n 'openai-codex-responses': 'OpenAI',\n anthropic: 'Anthropic',\n google: 'Google',\n 'google-gemini-cli': 'Google',\n 'google-antigravity': 'Google',\n 'github-copilot': 'GitHub Copilot',\n xai: 'xAI',\n groq: 'Groq',\n openrouter: 'OpenRouter',\n mistral: 'Mistral',\n cerebras: 'Cerebras',\n deepseek: 'DeepSeek',\n zai: 'Z.AI',\n 'zai-coding-plan': 'Z.AI',\n zhipu: '智谱',\n zhipuai: '智谱',\n 'zai-coding-cn': 'zai.cn',\n 'zhipu-coding-plan': 'zai.cn',\n 'zhipuai-coding-plan': 'zai.cn',\n minimax: 'MiniMax',\n 'minimax-cn': 'MiniMax',\n 'minimax-coding-plan': 'MiniMax',\n 'minimax-cn-coding-plan': 'MiniMax',\n kimi: 'Kimi',\n 'kimi-code': 'Kimi',\n 'kimi-coding': 'Kimi',\n moonshot: 'Moonshot',\n nous: 'Nous',\n 'nous-research': 'Nous',\n opencode: 'OpenCode Zen',\n 'opencode-go': 'OpenCode Go',\n qwen: 'Qwen',\n 'qwen-portal': 'Qwen',\n};\nconst credentialShape = /\\b(?:Bearer|sk[-_]|gh[pousr]_|ya29\\.|eyJ)|(?:api[-_ ]?key|secret|token)/iu;\nfunction safeName(value) {\n if (typeof value !== 'string')\n return undefined;\n const name = value.trim();\n if (!name ||\n name.length > 48 ||\n credentialShape.test(name) ||\n !/^[\\p{L}\\p{N}][\\p{L}\\p{N} ._-]*$/u.test(name) ||\n /[A-Za-z0-9_]{25,}/u.test(name))\n return undefined;\n return name;\n}\nfunction endpoint(value) {\n if (typeof value !== 'string')\n return undefined;\n try {\n const url = new URL(value);\n return ['http:', 'https:'].includes(url.protocol) ? url : undefined;\n }\n catch {\n return undefined;\n }\n}\nfunction endpointName(url) {\n if (!url)\n return undefined;\n const names = {\n 'api.openai.com': 'OpenAI',\n 'api.anthropic.com': 'Anthropic',\n 'generativelanguage.googleapis.com': 'Google',\n 'api.x.ai': 'xAI',\n 'api.z.ai': 'Z.AI',\n 'openrouter.ai': 'OpenRouter',\n 'api.deepseek.com': 'DeepSeek',\n 'api.minimax.io': 'MiniMax',\n 'api.minimaxi.com': 'MiniMax',\n 'api.moonshot.ai': 'Moonshot',\n 'api.moonshot.cn': 'Moonshot',\n };\n if (url.protocol === 'https:' && !url.port && !url.username && !url.password) {\n if (url.hostname === 'open.bigmodel.cn')\n return url.pathname.startsWith('/api/coding/') ? 'zai.cn' : '智谱';\n if (Object.hasOwn(names, url.hostname))\n return names[url.hostname];\n }\n // Only the host is displayable: never userinfo, port, path, query or fragment.\n return safeName(url.hostname);\n}\n/** Display metadata only; the caller must establish current own credential evidence. */\nexport function providerLogin(provider, authMethod, details = {}) {\n const url = endpoint(details.baseUrl);\n const known = Object.hasOwn(providerNames, provider) ? providerNames[provider] : undefined;\n const providerLabel = (authMethod === 'api'\n ? endpointName(url) || known || safeName(details.name) || safeName(provider)\n : known || safeName(details.name) || safeName(provider) || endpointName(url)) || '自定义服务商';\n return { providerLabel, authMethod };\n}\n/** Explicit native API values, excluding placeholders and unevaluated references. */\nexport function usableNativeApiKey(value) {\n if (typeof value !== 'string' || !value.trim())\n return false;\n const key = value.trim();\n return (!/[\\s\\p{C}<>]/u.test(key) &&\n !key.startsWith('!') &&\n !/\\$\\{|\\{(?:env|file):|^\\$[A-Z_]|^(?:your(?:[-_].*)?|replace[-_]?me|change[-_]?me|placeholder|example[-_]?key|sk[-_](?:x{3,}|\\.\\.\\.))$/iu.test(key));\n}\nexport function authenticatedAccountLogins(input) {\n const seen = new Set();\n const logins = input.filter((login) => {\n const key = JSON.stringify([login.providerLabel, login.authMethod, login.accountLabel]);\n if (seen.has(key))\n return false;\n seen.add(key);\n return true;\n });\n if (!logins.length)\n throw new Error('Missing native account login evidence');\n const methods = new Set(logins.map((login) => login.authMethod));\n const authMethod = methods.size === 1 ? logins[0].authMethod : undefined;\n return {\n state: 'authenticated',\n verification: 'local',\n logins,\n ...(authMethod ? { authMethod } : {}),\n summary: authMethod === 'api' ? 'API 登录' : '已登录',\n };\n}\n//# sourceMappingURL=account-login.js.map","import { constants } from 'node:fs'\nimport { lstat, mkdir, open, realpath, rename, rm, writeFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\n\nexport const OWN_ACCOUNT_BUSY = '账号正被使用,请稍后刷新'\nconst nonceValid = (value) => typeof value === 'string' && /^[a-f0-9-]{36}$/.test(value)\nasync function privateRoot(root) {\n const info = await lstat(root)\n if (\n !info.isDirectory() ||\n info.isSymbolicLink() ||\n (process.platform !== 'win32' && (info.mode & 0o077)) ||\n (await realpath(root)) !== resolve(root)\n )\n throw new Error('账号运行目录无法安全使用')\n}\n/** A lease is not stolen after PID death: its descendants may still be alive.\n * Only Host cleanup after confirmed process-range exit may release it. */\nexport async function assertOwnAccountLeaseIdle(root) {\n await privateRoot(root)\n try {\n await lstat(join(root, '.lease'))\n } catch (error) {\n if (error?.code === 'ENOENT') return\n throw error\n }\n throw new Error(OWN_ACCOUNT_BUSY)\n}\nexport async function acquireOwnAccountLease(root, nonce) {\n if (!nonceValid(nonce)) throw new Error('Invalid account lease')\n await privateRoot(root)\n const lock = join(root, '.lease')\n const pending = join(root, `.lease-${nonce}.pending`)\n await assertOwnAccountLeaseIdle(root)\n await mkdir(pending, { mode: 0o700 })\n try {\n await writeFile(join(pending, 'owner.json'), JSON.stringify({ nonce, pid: process.pid }), {\n flag: 'wx',\n mode: 0o600,\n })\n // Publish a complete, nonempty owner directory in one filesystem operation.\n // A killed initializer leaves only its nonce-specific pending directory.\n await rename(pending, lock)\n } catch (error) {\n await rm(pending, { recursive: true, force: true })\n if (error?.code === 'EEXIST' || error?.code === 'ENOTEMPTY') throw new Error(OWN_ACCOUNT_BUSY)\n throw error\n }\n}\nexport async function ownsOwnAccountLease(root, nonce) {\n if (!nonceValid(nonce)) throw new Error('Invalid account lease')\n await privateRoot(root)\n let handle\n try {\n const lock = await lstat(join(root, '.lease'))\n if (!lock.isDirectory() || lock.isSymbolicLink() || (process.platform !== 'win32' && (lock.mode & 0o077)))\n throw new Error('账号使用状态无法确认')\n handle = await open(\n join(root, '.lease/owner.json'),\n constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK,\n )\n const info = await handle.stat()\n if (!info.isFile() || info.nlink !== 1 || (process.platform !== 'win32' && (info.mode & 0o077)) || info.size > 1024)\n throw new Error('账号使用状态无法确认')\n return JSON.parse(await handle.readFile('utf8')).nonce === nonce\n } catch (error) {\n if (error?.code === 'ENOENT') return false\n throw error\n } finally {\n await handle?.close()\n }\n}\nexport async function releaseOwnAccountLease(root, nonce) {\n if (!nonceValid(nonce)) throw new Error('Invalid account lease')\n await privateRoot(root)\n // Safe only at this API's contract boundary: Host confirmed this nonce's whole\n // process range exited, including an initializer killed before publication.\n await rm(join(root, `.lease-${nonce}.pending`), { recursive: true, force: true })\n const lock = join(root, '.lease')\n let handle\n try {\n const directory = await lstat(lock)\n if (!directory.isDirectory() || directory.isSymbolicLink() || (process.platform !== 'win32' && (directory.mode & 0o077)))\n throw new Error('账号使用状态无法安全清理')\n handle = await open(\n join(lock, 'owner.json'),\n constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK,\n )\n const info = await handle.stat()\n if (!info.isFile() || info.nlink !== 1 || (process.platform !== 'win32' && (info.mode & 0o077)) || info.size > 1024)\n throw new Error('账号使用状态无法安全清理')\n const owner = JSON.parse(await handle.readFile('utf8'))\n if (owner.nonce !== nonce) return\n const current = await lstat(lock)\n if (current.dev !== directory.dev || current.ino !== directory.ino || current.isSymbolicLink())\n throw new Error('账号使用状态在清理前改变')\n await handle.close()\n handle = undefined\n await rm(lock, { recursive: true })\n } catch (error) {\n if (error?.code !== 'ENOENT') throw error\n } finally {\n await handle?.close()\n }\n}\n","// One verified Pi package for the Host, account UI, native catalog and RPC entry.\n// Resolve installation metadata only; never execute an arbitrary shell launcher.\nimport { readFileSync, realpathSync, statSync } from 'node:fs'\nimport { createHash } from 'node:crypto'\nimport { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'\nimport { resolveNativeEntry } from './native-launch.mjs'\n\nconst versions = new Set(['1.0.2', '1.0.4', '1.1.0'])\nconst failure = () =>\n Object.assign(\n new Error('Pi 安装身份或原生接口不匹配;需要 Pi Coding Agent 1.0.2、1.0.4 或 1.1.0,不能使用 OMP 入口'),\n { code: 'CLI_IDENTITY_MISMATCH' },\n )\nfunction metadata(path) {\n const info = statSync(path)\n if (!info.isFile() || info.size > 128 * 1024) throw failure()\n return readFileSync(path, 'utf8')\n}\n// Exact official Windows managed launcher inspected from Pi 1.1.0. It is read as\n// installation metadata, never evaluated. Unknown bootstrap code fails closed.\nconst managedWindowsLauncherSHA256 = '3d8b27bb3f5c07543303b0ee774ce215e4d6ae2b0ae43311c4acf51f517ffd13'\nfunction windowsManagedEntry(launcher) {\n const source = metadata(launcher).trim().replace(/\\r\\n/g, '\\n')\n if (createHash('sha256').update(source).digest('hex') !== managedWindowsLauncherSHA256) throw failure()\n const install = join(dirname(dirname(launcher)), 'install')\n const version = metadata(join(install, 'current-version')).trim()\n if (!versions.has(version)) throw failure()\n const directory = resolve(install, 'releases', version, 'node_modules/@earendil-works/pi-coding-agent')\n // A version pointer/package symlink must not select code outside this release.\n if (realpathSync(directory) !== directory) throw failure()\n const manifest = JSON.parse(metadata(join(directory, 'package.json')))\n const bin = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.pi\n if (manifest.name !== '@earendil-works/pi-coding-agent' || manifest.version !== version ||\n !['dist/cli.js', 'dist/bundle/cli.js'].includes(bin)) throw failure()\n const entry = realpathSync(resolve(directory, bin))\n const inside = relative(directory, entry)\n if (!inside || inside === '..' || inside.startsWith('..' + sep) || isAbsolute(inside)) throw failure()\n return entry\n}\n\nexport function inspectPiInstallation(entry) {\n try {\n let executable = realpathSync(entry)\n if (\n ['pi', 'pi.cmd', 'pi.bat'].includes(basename(executable).toLowerCase()) &&\n basename(dirname(executable)) === 'bin'\n ) {\n const launcher = metadata(executable)\n if (launcher.includes('PI_MANAGED_INSTALL_ROOT=') && launcher.includes('install/current-version')) {\n const install = join(dirname(dirname(executable)), 'install')\n const version = metadata(join(install, 'current-version')).trim()\n if (!versions.has(version)) throw failure()\n executable = realpathSync(\n join(install, 'releases', version, 'node_modules/@earendil-works/pi-coding-agent/dist/cli.js'),\n )\n }\n }\n executable = realpathSync(resolveNativeEntry(executable))\n if (basename(executable).toLowerCase() === 'pi-launcher.js' && basename(dirname(executable)) === 'bin')\n executable = windowsManagedEntry(executable)\n let directory = dirname(executable)\n for (let depth = 0; depth < 5; depth++, directory = dirname(directory)) {\n let manifest\n try {\n manifest = JSON.parse(metadata(join(directory, 'package.json')))\n } catch {\n continue\n }\n if (manifest.name !== '@earendil-works/pi-coding-agent' || !versions.has(manifest.version))\n throw failure()\n const dist = join(directory, 'dist')\n if (![join(dist, 'cli.js'), join(dist, 'bundle/cli.js')].includes(executable)) throw failure()\n for (const relative of ['cli.js', 'index.js', 'core/model-runtime.js', 'core/auth-storage.js']) {\n if (!statSync(join(dist, relative)).isFile()) throw failure()\n }\n return {\n root: directory,\n dist,\n version: manifest.version,\n executable: realpathSync(join(dist, 'cli.js')),\n }\n }\n } catch {\n throw failure()\n }\n throw failure()\n}\n","import { constants } from 'node:fs'\nimport { lstat, open, realpath, rename, rm, writeFile } from 'node:fs/promises'\nimport { createHash, randomUUID } from 'node:crypto'\nimport { createRequire } from 'node:module'\nimport { dirname, join } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { DatabaseSync } from 'node:sqlite'\nimport { inspectPiInstallation } from './pi-installation.mjs'\nimport { ownsOwnAccountLease, releaseOwnAccountLease } from './own-account-lease.mjs'\n\nconst object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value)\nconst stable = (value) =>\n JSON.stringify(\n object(value)\n ? Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, JSON.parse(stable(value[key]))]),\n )\n : Array.isArray(value)\n ? value.map((entry) => JSON.parse(stable(entry)))\n : (value ?? null),\n )\nexport const refreshFingerprint = (value) => createHash('sha256').update(stable(value)).digest('hex')\nconst changed = () => new Error('账号配置已变化,请重新刷新模型')\nconst unsafe = () => new Error('无法安全保存账号续期,请重新登录')\nfunction claims(value) {\n try {\n if (typeof value !== 'string' || value.length > 65536) return {}\n const parsed = JSON.parse(Buffer.from(value.split('.')[1] ?? '', 'base64url').toString('utf8'))\n return object(parsed) ? parsed : {}\n } catch {\n return {}\n }\n}\n/** Identity comparison only, never a remote authentication assertion. */\nexport function refreshPrincipal(value) {\n if (!object(value) || value.type !== 'oauth') return undefined\n const identity = claims(value.id_token ?? value.idToken)\n const token = claims(value.access ?? value.access_token)\n const account =\n value.accountId ?? value.account_id ?? token['https://api.openai.com/auth']?.chatgpt_account_id\n const subject = identity.sub ?? token.sub ?? value.userId ?? value.user_id\n const email = identity.email ?? value.email\n const text = (item) => typeof item === 'string' && !!item\n if (!text(account) && !text(subject) && !text(email)) return undefined\n return refreshFingerprint({\n ...(text(account) ? { accountId: account } : {}),\n ...(text(subject) ? { subject } : text(email) ? { email: email.toLowerCase() } : {}),\n ...(text(identity.iss ?? token.iss) ? { issuer: identity.iss ?? token.iss } : {}),\n ...(text(value.organizationId ?? value.organization_id)\n ? { organization: value.organizationId ?? value.organization_id }\n : {}),\n })\n}\nexport async function refreshJson(path, privateFile = true) {\n let handle\n let buffer\n try {\n if ((await realpath(dirname(path))) !== dirname(path)) throw unsafe()\n const location = await lstat(path)\n if (location.isSymbolicLink() || !location.isFile() || location.nlink !== 1) throw unsafe()\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK)\n const before = await handle.stat()\n if (\n !before.isFile() ||\n before.dev !== location.dev || before.ino !== location.ino ||\n before.nlink !== 1 ||\n before.size > 16 * 1024 * 1024 ||\n (privateFile && (process.platform !== 'win32' && (before.mode & 0o077)))\n )\n throw unsafe()\n buffer = Buffer.alloc(before.size + 1)\n let length = 0\n while (length < buffer.length) {\n const { bytesRead } = await handle.read(buffer, length, buffer.length - length, length)\n if (!bytesRead) break\n length += bytesRead\n }\n const after = await handle.stat()\n const current = await lstat(path)\n if (current.isSymbolicLink() || current.dev !== before.dev || current.ino !== before.ino) throw changed()\n if (length !== before.size || after.mtimeMs !== before.mtimeMs || after.size !== before.size)\n throw changed()\n return JSON.parse(buffer.subarray(0, length).toString('utf8'))\n } finally {\n buffer?.fill(0)\n await handle?.close()\n }\n}\nexport async function writeRefreshJson(path, value) {\n const temporary = `${path}.${randomUUID()}.tmp`\n try {\n await writeFile(temporary, JSON.stringify(value), { flag: 'wx', mode: 0o600 })\n await rename(temporary, path)\n } finally {\n await rm(temporary, { force: true })\n }\n}\nfunction validReceipt(value) {\n if (\n !object(value) ||\n value.version !== 1 ||\n !['pi', 'omp'].includes(value.cli) ||\n !Array.isArray(value.entries)\n )\n throw unsafe()\n for (const entry of value.entries)\n if (\n !object(entry) ||\n typeof entry.provider !== 'string' ||\n typeof entry.path !== 'string' ||\n typeof entry.hash !== 'string'\n )\n throw unsafe()\n return value\n}\nasync function sourceIdentity(entry) {\n if ((await realpath(dirname(entry.path))) !== dirname(entry.path)) throw changed()\n const info = await lstat(entry.path)\n if (\n info.isSymbolicLink() ||\n !info.isFile() ||\n info.nlink !== 1 ||\n info.dev !== entry.dev ||\n info.ino !== entry.ino\n )\n throw changed()\n}\nfunction rowCredential(row) {\n if (!row || row.credential_type !== 'oauth' || row.disabled_cause) return undefined\n return { ...JSON.parse(row.data), type: 'oauth' }\n}\nexport async function assertPiOmpRefreshSources(root, expected) {\n const receipt = validReceipt(expected ?? (await refreshJson(join(root, 'receipt.json'))))\n for (const entry of receipt.entries) {\n await sourceIdentity(entry)\n let current\n if (receipt.cli === 'pi') current = (await refreshJson(entry.path, false))[entry.provider]\n else {\n const db = new DatabaseSync(entry.path, { readOnly: true })\n try {\n current = rowCredential(\n db\n .prepare(\n 'SELECT credential_type,data,disabled_cause FROM auth_credentials WHERE rowid=? AND provider=?',\n )\n .get(entry.rowId, entry.provider),\n )\n } finally {\n db.close()\n }\n }\n if (\n !current ||\n refreshFingerprint(current) !== entry.hash ||\n refreshPrincipal(current) !== entry.principal\n )\n throw changed()\n }\n return receipt\n}\nexport async function assertPiOmpRefreshCache(root, receipt) {\n await refreshedEntries(root, validReceipt(receipt))\n}\nasync function refreshedEntries(root, receipt) {\n const result = []\n if (receipt.cli === 'pi') {\n const data = await refreshJson(join(root, 'agent/auth.json'))\n const expected = [...receipt.entries, ...(receipt.fixed ?? [])].map((entry) => entry.provider).sort()\n if (refreshFingerprint(Object.keys(data).sort()) !== refreshFingerprint(expected)) throw unsafe()\n for (const entry of receipt.fixed ?? [])\n if (refreshFingerprint(data[entry.provider]) !== entry.hash) throw unsafe()\n for (const entry of receipt.entries) result.push([entry, data[entry.provider]])\n } else {\n const db = new DatabaseSync(join(root, 'agent/agent.db'), { readOnly: true })\n try {\n const rows = db\n .prepare('SELECT rowid AS id,provider,credential_type,data,disabled_cause FROM auth_credentials')\n .all()\n if (rows.length !== receipt.entries.length + (receipt.fixed?.length ?? 0)) throw unsafe()\n for (const entry of receipt.fixed ?? []) {\n const row = rows.find((row) => row.id === entry.cacheRowId && row.provider === entry.provider)\n if (\n !row ||\n refreshFingerprint({\n ...JSON.parse(row.data),\n type: row.credential_type,\n disabled_cause: row.disabled_cause,\n }) !== entry.hash\n )\n throw unsafe()\n }\n for (const entry of receipt.entries)\n result.push([\n entry,\n rowCredential(\n db\n .prepare(\n 'SELECT credential_type,data,disabled_cause FROM auth_credentials WHERE rowid=? AND provider=?',\n )\n .get(entry.cacheRowId, entry.provider),\n ),\n ])\n } finally {\n db.close()\n }\n }\n for (const [entry, next] of result)\n if (\n !next ||\n refreshPrincipal(next) !== entry.principal ||\n typeof next.access !== 'string' ||\n !next.access ||\n typeof next.refresh !== 'string' ||\n !next.refresh ||\n !Number.isFinite(next.expires)\n )\n throw unsafe()\n return result\n}\n/** Called only by Host after capture/process-scope cleanup confirmed exit. */\nexport async function finishPiOmpRefresh(root, nonce, executable, expectedReceipt) {\n if (!(await ownsOwnAccountLease(root, nonce))) return\n try {\n // This snapshot is retained in the Host closure before launch. Never trust a\n // runtime-writable receipt to select unsandboxed source write destinations.\n const receipt = validReceipt(expectedReceipt)\n const entries = await refreshedEntries(root, receipt)\n for (const [entry, next] of entries) {\n if (refreshFingerprint(next) === entry.hash) continue\n await sourceIdentity(entry)\n if (receipt.cli === 'pi') {\n const { dist } = inspectPiInstallation(executable)\n const require = createRequire(join(dist, 'core/auth-storage.js'))\n const lockfile = require('proper-lockfile')\n // Same canonical auth path and lock convention as Pi 1.0.4. Never call\n // AuthStorage.create here: its initialization would recreate a logged-out file.\n const unlock = await lockfile.lock(entry.path, { realpath: false, retries: 0, stale: 30000 })\n try {\n await sourceIdentity(entry)\n const data = await refreshJson(entry.path, false)\n if (\n refreshFingerprint(data[entry.provider]) !== entry.hash ||\n refreshPrincipal(data[entry.provider]) !== entry.principal\n )\n throw changed()\n const handle = await open(\n entry.path,\n constants.O_WRONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK,\n )\n try {\n const info = await handle.stat()\n if (info.dev !== entry.dev || info.ino !== entry.ino || info.nlink !== 1) throw changed()\n const bytes = Buffer.from(JSON.stringify({ ...data, [entry.provider]: next }, null, 2))\n try {\n let offset = 0\n while (offset < bytes.length) {\n const { bytesWritten } = await handle.write(bytes, offset, bytes.length - offset, offset)\n if (!bytesWritten) throw unsafe()\n offset += bytesWritten\n }\n await handle.truncate(bytes.length)\n await handle.sync()\n } finally {\n bytes.fill(0)\n }\n } finally {\n await handle.close()\n }\n } finally {\n await unlock()\n }\n } else {\n // SQLite URI mode=rw never recreates a source deleted after preflight.\n const db = new DatabaseSync(`${pathToFileURL(entry.path).href}?mode=rw`)\n try {\n db.exec('PRAGMA busy_timeout=0; BEGIN IMMEDIATE')\n const row = db\n .prepare(\n 'SELECT credential_type,data,disabled_cause FROM auth_credentials WHERE rowid=? AND provider=?',\n )\n .get(entry.rowId, entry.provider)\n const current = rowCredential(row)\n if (\n !current ||\n refreshFingerprint(current) !== entry.hash ||\n refreshPrincipal(current) !== entry.principal\n )\n throw changed()\n const { type: _type, ...data } = next\n const update = db\n .prepare(\n 'UPDATE auth_credentials SET data=? WHERE rowid=? AND provider=? AND credential_type=? AND data=? AND disabled_cause IS NULL',\n )\n .run(JSON.stringify(data), entry.rowId, entry.provider, 'oauth', row.data)\n if (Number(update.changes) !== 1) throw changed()\n db.exec('COMMIT')\n } catch (error) {\n try {\n db.exec('ROLLBACK')\n } catch {}\n throw error\n } finally {\n db.close()\n }\n }\n // Reuse the updated Host-held expectation in the next metadata phase and\n // this same prepare's final worker request; don't reject our own refresh.\n entry.hash = refreshFingerprint(next)\n }\n await writeRefreshJson(join(root, 'receipt.json'), receipt)\n } catch (error) {\n if (\n error?.message === '账号配置已变化,请重新刷新模型' ||\n error?.message === '无法安全保存账号续期,请重新登录'\n )\n throw error\n throw unsafe()\n } finally {\n // A CAS conflict is a completed safe refusal, not an unconfirmed process exit.\n await releaseOwnAccountLease(root, nonce)\n }\n}\n","import { constants } from 'node:fs';\nimport { lstat, open, mkdir, writeFile, rename, rm, mkdtemp, realpath, readlink } from 'node:fs/promises';\nimport { homedir, tmpdir } from 'node:os';\nimport { dirname, join, resolve, sep, parse, relative } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { DatabaseSync } from 'node:sqlite';\nimport { parse as parseYaml } from 'yaml';\nimport { authenticatedAccountLogins, providerLogin, usableNativeApiKey } from \"./account-login.js\";\nimport { acquireOwnAccountLease, releaseOwnAccountLease, OWN_ACCOUNT_BUSY } from './own-account-lease.mjs';\nimport { refreshFingerprint, refreshPrincipal, refreshJson, writeRefreshJson, assertPiOmpRefreshCache, assertPiOmpRefreshSources, } from './pi-omp-refresh.mjs';\nconst object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst defaultRoot = () => join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now');\nconst runtimeEnv = /^(?:PATH|HOME|SHELL|TMPDIR|NODE_OPTIONS|NODE_PATH|ELECTRON_RUN_AS_NODE|OMP_AUTH_BROKER_.*|OMP_PROFILE|PI_PROFILE|PI_CONFIG_DIR|PI_CODING_AGENT_DIR|LD_.*|DYLD_.*)$/;\nconst knownProviderEnvironment = {\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n google: 'GEMINI_API_KEY',\n xai: 'XAI_API_KEY',\n groq: 'GROQ_API_KEY',\n openrouter: 'OPENROUTER_API_KEY',\n mistral: 'MISTRAL_API_KEY',\n cerebras: 'CEREBRAS_API_KEY',\n zai: 'ZAI_API_KEY',\n 'zhipu-coding-plan': 'ZHIPU_API_KEY',\n 'zai-coding-cn': 'ZAI_CODING_CN_API_KEY',\n};\nfunction configuredEnvironmentRefs(value, output = new Set()) {\n if (typeof value === 'string' && /^[A-Z][A-Z0-9_]*$/.test(value))\n output.add(value);\n if (object(value) || Array.isArray(value))\n for (const entry of Object.values(value))\n configuredEnvironmentRefs(entry, output);\n return output;\n}\nexport const piOmpAccountDirectory = (cli, root = defaultRoot()) => join(root, 'accounts', cli, 'agent');\n/** Preserve drive and UNC roots instead of treating them as ordinary path components. */\nexport function nativeAccountAncestors(path, paths = { resolve, parse, relative, join, sep }) {\n const absolute = paths.resolve(path);\n let current = paths.parse(absolute).root;\n return paths\n .relative(current, absolute)\n .split(paths.sep)\n .filter(Boolean)\n .map((component) => (current = paths.join(current, component)));\n}\nexport async function safePiOmpAncestors(path) {\n for (const current of nativeAccountAncestors(path)) {\n try {\n const info = await lstat(current);\n if (info.isSymbolicLink()) {\n // macOS system aliases are immutable trust roots, unlike user links.\n if (!((current === '/var' || current === '/tmp') &&\n resolve(dirname(current), await readlink(current)) === `/private${current}`))\n throw new Error('Unsafe native account ancestor symlink');\n }\n else if (!info.isDirectory())\n throw new Error('Unsafe native account directory');\n }\n catch (error) {\n if (error.code === 'ENOENT')\n break;\n throw error;\n }\n }\n}\n/** Bounded, no-follow reads. Never create, chmod, checkpoint, or migrate a source. */\nasync function readOptional(path, limit = 2 * 1024 * 1024) {\n let file;\n try {\n const directory = dirname(path);\n await safePiOmpAncestors(directory);\n const parent = await lstat(directory);\n if (!parent.isDirectory() || parent.isSymbolicLink())\n throw new Error('Unsafe native account directory');\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw new Error('Unsafe native account file');\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = await file.stat();\n if (!before.isFile() ||\n before.nlink !== 1 ||\n before.dev !== entry.dev ||\n before.ino !== entry.ino ||\n before.size > limit)\n throw new Error('Unsafe native account file');\n const buffer = Buffer.alloc(before.size + 1);\n const { bytesRead } = await file.read(buffer, 0, buffer.length, 0);\n const after = await file.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== before.dev ||\n current.ino !== before.ino ||\n current.nlink !== 1 ||\n bytesRead !== before.size ||\n before.size !== after.size ||\n before.mtimeMs !== after.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw new Error('Native account changed during read');\n return buffer.subarray(0, bytesRead);\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return undefined;\n throw error;\n }\n finally {\n await file?.close();\n }\n}\nfunction parseObject(raw, yaml = false) {\n if (!raw)\n return {};\n const result = yaml\n ? parseYaml(raw.toString('utf8'), { maxAliasCount: 0 })\n : JSON.parse(raw.toString('utf8'));\n if (!object(result))\n throw new Error('Invalid native account config');\n return result;\n}\nfunction rejectCommands(value) {\n if (typeof value === 'string' && value.trimStart().startsWith('!'))\n throw new Error('Native credential command helpers are not enabled in plugin workers');\n if (object(value) || Array.isArray(value))\n for (const entry of Object.values(value))\n rejectCommands(entry);\n}\nfunction credentialState(type, data, disabled) {\n if (!object(data))\n throw new Error('Invalid native credential data');\n if (disabled)\n return 'expired';\n if (type === 'api' || type === 'api_key') {\n const key = data.key ?? data.apiKey;\n if (typeof key !== 'string' || !key.trim())\n throw new Error('Invalid native API credential');\n return 'configured';\n }\n if (type === 'oauth') {\n if (typeof data.access !== 'string' || !data.access)\n throw new Error('Invalid native OAuth credential');\n if (typeof data.expires !== 'number' ||\n !Number.isFinite(data.expires) ||\n (data.refresh !== undefined && typeof data.refresh !== 'string'))\n throw new Error('Invalid native OAuth expiry/refresh');\n if (data.expires < Date.now() && !data.refresh)\n return 'expired';\n return 'configured';\n }\n throw new Error('Unsupported native credential type');\n}\nasync function source(cli, path, scratch) {\n const result = {\n sourceId: resolve(path),\n auth: {},\n models: {},\n modelCache: [],\n modelsStore: {},\n credentials: [],\n kinds: new Set(),\n expired: false,\n env: {},\n brokerConfigured: false,\n };\n const dotenv = await readOptional(join(path, '.env'), 64 * 1024);\n if (dotenv)\n for (const line of dotenv.toString('utf8').split(/\\r?\\n/)) {\n if (!line.trim() || line.trimStart().startsWith('#'))\n continue;\n const match = /^(?:export\\s+)?([A-Z][A-Z0-9_]*)\\s*=\\s*(.*)$/.exec(line.trim());\n if (!match)\n throw new Error('Invalid native environment config');\n let value = match[2];\n if ((value.startsWith('\\\"') && value.endsWith('\\\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\")))\n value = value.slice(1, -1);\n if (cli === 'omp' && /^OMP_AUTH_BROKER_(?:URL|TOKEN)$/.test(match[1]) && value.trim())\n result.brokerConfigured = true;\n if (/`|\\$\\(|\\x00/.test(value))\n throw new Error('Native environment command interpolation is disabled');\n // Preserve provider credential env only, never PATH/HOME/runtime overrides.\n if (!runtimeEnv.test(match[1]))\n result.env[match[1]] = value;\n }\n if (cli === 'pi') {\n result.auth = parseObject(await readOptional(join(path, 'auth.json')));\n result.models = parseObject(await readOptional(join(path, 'models.json')));\n result.modelsStore = parseObject(await readOptional(join(path, 'models-store.json'), 16 * 1024 * 1024));\n if (Object.values(result.modelsStore).some((entry) => !object(entry) || !Array.isArray(entry.models)))\n throw new Error('Invalid Pi native model cache');\n const settings = parseObject(await readOptional(join(path, 'settings.json')));\n result.config =\n settings.defaultThinkingLevel === undefined\n ? {}\n : { defaultThinkingLevel: settings.defaultThinkingLevel };\n rejectCommands(result.auth);\n rejectCommands(result.models);\n for (const auth of Object.values(result.auth)) {\n if (!object(auth) || typeof auth.type !== 'string')\n throw new Error('Invalid Pi native credential');\n const state = credentialState(auth.type, auth);\n if (state === 'configured')\n result.kinds.add(auth.type);\n if (state === 'expired')\n result.expired = true;\n }\n }\n else {\n result.models = parseObject(await readOptional(join(path, 'models.yml')), true);\n const config = parseObject(await readOptional(join(path, 'config.yml')), true);\n result.brokerConfigured ||= !!config.auth?.broker;\n // Only model/auth-specific settings enter workers; extension/hooks/tools do not.\n result.config = {\n ...(object(config.auth)\n ? { auth: Object.fromEntries(Object.entries(config.auth).filter(([key]) => key !== 'broker')) }\n : {}),\n ...(config.defaultThinkingLevel === undefined\n ? {}\n : { defaultThinkingLevel: config.defaultThinkingLevel }),\n };\n rejectCommands(result.models);\n rejectCommands(result.config);\n for (const provider of Object.values(result.models.providers ?? {})) {\n if (!object(provider))\n throw new Error('Invalid OMP native provider');\n // Literal custom-provider keys are local configuration evidence. Environment\n // names alone do not establish auth (Host's CN env is supplied separately).\n if (typeof provider.apiKey === 'string' &&\n !/^[A-Z][A-Z0-9_]*$/.test(provider.apiKey) &&\n provider.apiKey.trim())\n result.kinds.add('api');\n }\n for (const name of ['agent.db', 'models.db']) {\n const bytes = await readOptional(join(path, name), 16 * 1024 * 1024);\n if (!bytes)\n continue;\n const wal = await readOptional(join(path, `${name}-wal`), 32 * 1024 * 1024);\n if (!scratch)\n throw new Error('Missing private SQLite scratch directory');\n const copy = join(scratch, `${randomUUID()}.db`);\n await writeFile(copy, bytes, { flag: 'wx', mode: 0o600 });\n if (wal)\n await writeFile(`${copy}-wal`, wal, { flag: 'wx', mode: 0o600 });\n let db;\n try {\n db = new DatabaseSync(copy);\n if (db.prepare('PRAGMA quick_check').get()?.quick_check !== 'ok')\n throw new Error('Invalid native account database');\n const tables = new Set(db\n .prepare(\"SELECT name FROM sqlite_master WHERE type='table'\")\n .all()\n .map((x) => x.name));\n if (name === 'agent.db' && tables.has('auth_credentials')) {\n result.credentials = db\n .prepare('SELECT rowid AS native_rowid,provider,credential_type,data,disabled_cause FROM auth_credentials')\n .all();\n for (const row of result.credentials) {\n const data = JSON.parse(row.data);\n rejectCommands(data);\n const state = credentialState(row.credential_type, data, row.disabled_cause);\n if (state === 'configured')\n result.kinds.add(row.credential_type);\n if (state === 'expired')\n result.expired = true;\n }\n }\n if (name === 'models.db' && tables.has('model_cache'))\n result.modelCache = db\n .prepare('SELECT provider_id,version,updated_at,authoritative,static_fingerprint,models FROM model_cache')\n .all();\n for (const row of result.modelCache) {\n if (!Array.isArray(JSON.parse(row.models)))\n throw new Error('Invalid OMP native model cache');\n }\n }\n finally {\n db?.close();\n await Promise.all(['', '-wal', '-shm'].map((suffix) => rm(copy + suffix, { force: true })));\n }\n }\n }\n const refs = configuredEnvironmentRefs([result.models, result.config]);\n for (const key of Object.keys(result.env))\n if (!/_(?:API_KEY|TOKEN|SECRET)$/.test(key) && !refs.has(key))\n delete result.env[key];\n // Earlier versions wrote this exact Host-only route into the plugin store.\n // Preserve native/user configuration, including an explicitly supplied own .env.\n const legacy = result.models.providers?.['cliworker-zai-cn'];\n if (object(legacy) &&\n legacy.apiKey === 'ZAI_CODING_CN_API_KEY' &&\n legacy.baseUrl === 'https://open.bigmodel.cn/api/coding/paas/v4' &&\n !result.env.ZAI_CODING_CN_API_KEY)\n delete result.models.providers['cliworker-zai-cn'];\n return result;\n}\nasync function withSources(cli, options, fn) {\n options.signal?.throwIfAborted();\n const root = options.accountRoot ?? defaultRoot();\n await safePiOmpAncestors(root);\n const scratch = await mkdtemp(join(await realpath(tmpdir()), 'cliworker-native-read-'));\n try {\n const global = join(options.nativeHome ?? homedir(), cli === 'pi' ? '.pi' : '.omp', 'agent');\n const paths = [...new Set([global, piOmpAccountDirectory(cli, root)])];\n const results = [];\n for (const path of paths) {\n options.signal?.throwIfAborted();\n results.push(await source(cli, path, scratch));\n }\n options.signal?.throwIfAborted();\n return await fn(results, scratch);\n }\n finally {\n await rm(scratch, { recursive: true, force: true });\n }\n}\n/** Current native roots only. Account actions must never remove a merged worker copy. */\nexport async function readPiOmpLogoutSources(cli, stateDirectory, signal, options = {}) {\n return withSources(cli, { accountRoot: stateDirectory, ...options, signal }, async (sources) => {\n const result = [];\n for (const [index, source] of sources.entries()) {\n const configured = Object.keys(source.auth).length ||\n source.credentials.length ||\n Object.values(source.models.providers ?? {}).some((provider) => object(provider) && provider.apiKey) ||\n Object.values(knownProviderEnvironment).some((key) => usableNativeApiKey(source.env[key]));\n if (!configured)\n continue;\n // OMP also autoloads its own config-root .env. Expose only a flag, never\n // inject those broker fields into a private/native account menu.\n const parentEnv = cli === 'omp' ? await readOptional(join(dirname(source.sourceId), '.env'), 64 * 1024) : undefined;\n const brokerConfigured = source.brokerConfigured ||\n !!parentEnv\n ?.toString('utf8')\n .split(/\\r?\\n/)\n .some((line) => {\n const match = /^(?:export\\s+)?OMP_AUTH_BROKER_(?:URL|TOKEN)\\s*=\\s*(.*)$/.exec(line.trim());\n return (match &&\n match[1]\n .trim()\n .replace(/^([\"'])(.*)\\1$/, '$2')\n .trim());\n });\n result.push({\n id: (index === 0 ? 'native' : 'plugin'),\n label: index === 0 ? 'CLI 全局账号' : '插件账号',\n directory: source.sourceId,\n env: source.env,\n config: source.config ?? {},\n stored: Object.keys(source.auth).length > 0 || source.credentials.length > 0,\n brokerConfigured,\n });\n }\n return result;\n });\n}\nexport async function listPiOmpAccountSources(cli, stateDirectory, signal, options = {}) {\n return (await readPiOmpLogoutSources(cli, stateDirectory, signal, options)).map(({ id, label }) => ({\n id,\n label,\n }));\n}\nfunction mergeSources(sources) {\n const auth = Object.assign(Object.create(null), ...sources.map((s) => s.auth));\n const providers = Object.assign(Object.create(null), ...sources.map((s) => s.models.providers ?? {}));\n const env = Object.assign(Object.create(null), ...sources.map((s) => s.env));\n const credentialProviders = new Map();\n const cache = new Map();\n for (const s of sources) {\n for (const provider of new Set(s.credentials.map((row) => row.provider)))\n credentialProviders.set(provider, s.credentials.filter((row) => row.provider === provider));\n for (const row of s.modelCache)\n cache.set(row.provider_id, row);\n }\n const kinds = new Set();\n let expired = false;\n for (const entry of Object.values(auth)) {\n const state = credentialState(entry.type, entry);\n if (state === 'configured')\n kinds.add(entry.type);\n if (state === 'expired')\n expired = true;\n }\n for (const row of [...credentialProviders.values()].flat()) {\n const state = credentialState(row.credential_type, JSON.parse(row.data), row.disabled_cause);\n if (state === 'configured')\n kinds.add(row.credential_type);\n if (state === 'expired')\n expired = true;\n }\n for (const provider of Object.values(providers)) {\n if (typeof provider.apiKey === 'string' &&\n provider.apiKey &&\n (!/^[A-Z][A-Z0-9_]*$/.test(provider.apiKey) || env[provider.apiKey]))\n kinds.add('api');\n }\n if (Object.values(knownProviderEnvironment).some((key) => env[key]))\n kinds.add('api');\n return { auth, providers, env, credentialProviders, cache, kinds, expired };\n}\n/** Internal binding material only. Never expose these values through public status. */\nexport async function readPiOmpAccountMaterial(cli, options = {}) {\n return withSources(cli, options, async (sources) => {\n const merged = mergeSources(sources);\n return {\n auth: merged.auth,\n credentials: [...merged.credentialProviders.values()].flat(),\n env: merged.env,\n models: { providers: merged.providers },\n configAuth: Object.assign({}, ...sources.map((s) => s.config ?? {})),\n sourceIds: sources\n .filter((s) => Object.keys(s.auth).length ||\n s.credentials.length ||\n Object.keys(s.env).length ||\n Object.keys(s.config?.auth ?? {}).length ||\n Object.values(s.models.providers ?? {}).some((p) => object(p) && p.apiKey))\n .map((s) => s.sourceId),\n };\n });\n}\nasync function sharedOAuthStore(cli, sources, options) {\n if (!options.sharedOAuth)\n return undefined;\n const merged = mergeSources(sources);\n const owners = new Map();\n for (const source of sources)\n for (const provider of cli === 'pi'\n ? Object.keys(source.auth)\n : new Set(source.credentials.map((row) => row.provider)))\n owners.set(provider, source);\n const credentials = cli === 'pi'\n ? Object.entries(merged.auth).map(([provider, data]) => ({\n provider,\n data,\n row: undefined,\n cacheRowId: undefined,\n }))\n : [...merged.credentialProviders.values()].flat().map((row, index) => ({\n provider: row.provider,\n data: { ...JSON.parse(row.data), type: row.credential_type },\n row,\n cacheRowId: index + 1,\n }));\n const entries = [];\n const fixed = [];\n for (const { provider, data, row, cacheRowId } of credentials) {\n if (data.type !== 'oauth' || row?.disabled_cause) {\n fixed.push({\n provider,\n ...(row ? { cacheRowId } : {}),\n hash: refreshFingerprint(row ? { ...data, disabled_cause: row.disabled_cause } : data),\n });\n continue;\n }\n const principal = refreshPrincipal(data);\n if (!principal)\n throw new Error('无法确认 OAuth 续期账号,请使用该 CLI 自身 API 配置');\n const owner = owners.get(provider);\n const path = join(await realpath(owner.sourceId), cli === 'pi' ? 'auth.json' : 'agent.db');\n const info = await lstat(path);\n if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1)\n throw new Error('Unsafe OAuth source');\n entries.push({\n provider,\n path,\n hash: refreshFingerprint(data),\n principal,\n dev: info.dev,\n ino: info.ino,\n ...(row ? { rowId: row.native_rowid, cacheRowId } : {}),\n });\n }\n if (!entries.length)\n return undefined;\n // One physical store and lease per CLI/source set, independent of worker/project.\n const parent = join(options.accountRoot ?? defaultRoot(), 'account-runtime', cli, 'oauth');\n await safePiOmpAncestors(parent);\n await mkdir(parent, { recursive: true, mode: 0o700 });\n // Provider order/additions must never create another lock for the same source.\n const sourceKey = refreshFingerprint({\n cli,\n home: await realpath(options.nativeHome ?? homedir()),\n accountRoot: await realpath(options.accountRoot ?? defaultRoot()),\n });\n const root = join(await realpath(parent), sourceKey);\n await mkdir(root, { recursive: true, mode: 0o700 });\n const info = await lstat(root);\n if (!info.isDirectory() || info.isSymbolicLink() || (process.platform !== 'win32' && info.mode & 0o077))\n throw new Error('Unsafe OAuth runtime');\n const agent = join(root, 'agent');\n const receipt = {\n version: 1,\n cli,\n revision: refreshFingerprint({\n entries,\n auth: merged.auth,\n credentials: [...merged.credentialProviders.values()],\n env: merged.env,\n providers: merged.providers,\n config: sources.map((source) => source.config),\n }),\n entries,\n fixed,\n };\n const nonce = randomUUID();\n await acquireOwnAccountLease(root, nonce);\n try {\n options.signal?.throwIfAborted();\n await mkdir(agent, { recursive: true, mode: 0o700 });\n const agentInfo = await lstat(agent);\n if (!agentInfo.isDirectory() ||\n agentInfo.isSymbolicLink() ||\n (process.platform !== 'win32' && agentInfo.mode & 0o077))\n throw new Error('Unsafe OAuth runtime');\n let previous;\n try {\n previous = await refreshJson(join(root, 'receipt.json'));\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n if (previous && refreshFingerprint(previous) === refreshFingerprint(receipt)) {\n await assertPiOmpRefreshSources(root, receipt);\n await assertPiOmpRefreshCache(root, receipt);\n return { root, agent, receipt, nonce, reuse: true };\n }\n // A failed rebuild must not leave an old valid receipt over partially new data.\n await rm(join(root, 'receipt.json'), { force: true });\n return { root, agent, receipt, nonce, reuse: false };\n }\n catch (error) {\n await releaseOwnAccountLease(root, nonce);\n throw error;\n }\n}\n/** Global native input then plugin account overrides by provider; empty plugin auth never hides global accounts. */\nexport async function snapshotPiOmpNative(cli, destination, options = {}) {\n try {\n return await withSources(cli, options, async (sources) => {\n let unsupportedOAuth = false;\n if (options.sharedOAuth) {\n // Resolve the native override first. An unsupported current OAuth account\n // must still shadow lower-priority credentials for the same provider.\n const authOwners = new Map();\n const credentialOwners = new Map();\n for (const source of sources) {\n for (const provider of Object.keys(source.auth))\n authOwners.set(provider, source);\n for (const row of source.credentials)\n credentialOwners.set(row.provider, source);\n }\n sources = sources.map((source) => ({\n ...source,\n auth: Object.fromEntries(Object.entries(source.auth).filter(([provider, value]) => {\n if (authOwners.get(provider) !== source)\n return false;\n const allowed = value.type !== 'oauth' || !!refreshPrincipal(value);\n if (!allowed)\n unsupportedOAuth = true;\n return allowed;\n })),\n credentials: source.credentials.filter((row) => {\n if (credentialOwners.get(row.provider) !== source)\n return false;\n const allowed = row.credential_type !== 'oauth' ||\n !!row.disabled_cause ||\n !!refreshPrincipal({ ...JSON.parse(row.data), type: 'oauth' });\n if (!allowed)\n unsupportedOAuth = true;\n return allowed;\n }),\n }));\n }\n const { auth, providers, kinds, env, credentialProviders, cache, expired } = mergeSources(sources);\n if (unsupportedOAuth && !kinds.size)\n throw new Error('无法确认 OAuth 续期账号,请使用该 CLI 自身 API 配置');\n const shared = await sharedOAuthStore(cli, sources, options);\n const target = shared?.agent ?? destination;\n try {\n if (shared?.reuse)\n return {\n configured: kinds.size > 0,\n expired,\n providers: Object.keys(providers),\n env,\n directory: target,\n leaseDirectory: shared.root,\n receipt: shared.receipt,\n };\n const files = cli === 'pi'\n ? {\n 'auth.json': auth,\n 'models.json': { providers },\n 'settings.json': Object.assign(Object.create(null), ...sources.map((source) => source.config ?? {})),\n 'native-env.json': env,\n 'models-store.json': Object.assign(Object.create(null), ...sources.map((s) => s.modelsStore)),\n }\n : { 'models.yml': { providers }, 'native-env.json': env };\n for (const [name, value] of Object.entries(files)) {\n options.signal?.throwIfAborted();\n const temporary = join(target, `.native-${randomUUID()}.tmp`);\n await writeFile(temporary, JSON.stringify(value), { flag: 'wx', mode: 0o600 });\n await rename(temporary, join(target, name));\n }\n if (cli === 'omp') {\n const nativeAuth = Object.assign({}, ...sources.map((s) => s.config ?? {}));\n const authConfig = join(target, 'native-auth.json');\n const authTemp = `${authConfig}.${randomUUID()}.tmp`;\n await writeFile(authTemp, JSON.stringify(nativeAuth), { flag: 'wx', mode: 0o600 });\n await rename(authTemp, authConfig);\n // Fresh DBs hold only native credential/catalog rows. No history, memory,\n // user settings, jobs, leases or session paths are copied into a worker.\n for (const [name, schema, rows, insert] of [\n [\n 'agent.db',\n 'CREATE TABLE auth_credentials (id INTEGER PRIMARY KEY AUTOINCREMENT, provider TEXT NOT NULL, credential_type TEXT NOT NULL, data TEXT NOT NULL, disabled_cause TEXT, identity_key TEXT, created_at INTEGER NOT NULL DEFAULT 0, updated_at INTEGER NOT NULL DEFAULT 0)',\n [...credentialProviders.values()].flat(),\n 'INSERT INTO auth_credentials(provider,credential_type,data,disabled_cause) VALUES(?,?,?,?)',\n ],\n [\n 'models.db',\n \"CREATE TABLE model_cache(provider_id TEXT PRIMARY KEY,version INTEGER NOT NULL,updated_at INTEGER NOT NULL,authoritative INTEGER NOT NULL DEFAULT 0,static_fingerprint TEXT NOT NULL DEFAULT '',models TEXT NOT NULL)\",\n [...cache.values()],\n 'INSERT INTO model_cache VALUES(?,?,?,?,?,?)',\n ],\n ]) {\n const temporary = join(target, `.native-${randomUUID()}.db`);\n await writeFile(temporary, '', { flag: 'wx', mode: 0o600 });\n const db = new DatabaseSync(temporary);\n try {\n db.exec(schema);\n for (const row of rows)\n db.prepare(insert).run(...(name === 'agent.db'\n ? [row.provider, row.credential_type, row.data, row.disabled_cause]\n : [\n row.provider_id,\n row.version,\n row.updated_at,\n row.authoritative,\n row.static_fingerprint,\n row.models,\n ]));\n }\n finally {\n db.close();\n }\n await rename(temporary, join(target, name));\n // Old auxiliary files must not apply a previous DB's WAL to the replacement.\n await Promise.all(['-wal', '-shm'].map((suffix) => rm(join(target, name + suffix), { force: true })));\n }\n }\n if (shared) {\n options.signal?.throwIfAborted();\n await assertPiOmpRefreshSources(shared.root, shared.receipt);\n await writeRefreshJson(join(shared.root, 'receipt.json'), shared.receipt);\n }\n return {\n configured: kinds.size > 0,\n expired,\n providers: Object.keys(providers),\n env,\n directory: target,\n ...(shared ? { leaseDirectory: shared.root, receipt: shared.receipt } : {}),\n };\n }\n finally {\n if (shared)\n await releaseOwnAccountLease(shared.root, shared.nonce);\n }\n });\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (error instanceof Error &&\n [\n OWN_ACCOUNT_BUSY,\n '无法确认 OAuth 续期账号,请使用该 CLI 自身 API 配置',\n '账号配置已变化,请重新刷新模型',\n ].includes(error.message))\n throw error;\n throw new Error('无法安全读取 Pi/OMP 原生账号或模型配置,请在账号终端检查');\n }\n}\nexport async function inspectPiOmpNativeAccount(cli, stateDirectory, signal, options = {}) {\n signal.throwIfAborted();\n try {\n return await withSources(cli, { accountRoot: stateDirectory, ...options }, async (sources) => {\n signal.throwIfAborted();\n const { auth, providers, env, credentialProviders, expired } = mergeSources(sources);\n const logins = [];\n const ownValue = (value, referenceOnly = false) => typeof value === 'string' &&\n (referenceOnly\n ? /^[A-Z][A-Z0-9_]*$/.test(value)\n : Object.values(knownProviderEnvironment).includes(value))\n ? env[value]\n : value;\n const add = (provider, method) => {\n const config = providers[provider];\n logins.push(providerLogin(provider, method, {\n baseUrl: ownValue(config?.baseUrl, true),\n name: config?.name,\n }));\n };\n let invalidOAuth = false;\n const inspect = (provider, type, value, disabled) => {\n if (credentialState(type, value, disabled) !== 'configured')\n return;\n if (type === 'api' || type === 'api_key') {\n if (usableNativeApiKey(ownValue(value.key ?? value.apiKey)))\n add(provider, 'api');\n }\n else if (usableNativeApiKey(value.access) &&\n (value.expires >= Date.now() || usableNativeApiKey(value.refresh)))\n add(provider, 'oauth');\n else\n invalidOAuth = true;\n };\n for (const [provider, value] of Object.entries(auth))\n inspect(provider, value.type, value);\n for (const [provider, rows] of credentialProviders)\n for (const row of rows)\n inspect(provider, row.credential_type, JSON.parse(row.data), row.disabled_cause);\n for (const [provider, value] of Object.entries(providers)) {\n if (usableNativeApiKey(ownValue(value.apiKey, true)))\n add(provider, 'api');\n }\n for (const [provider, variable] of Object.entries(knownProviderEnvironment))\n if (usableNativeApiKey(env[variable]))\n add(provider, 'api');\n if (logins.length)\n return authenticatedAccountLogins(logins);\n if (expired || invalidOAuth)\n return { state: 'unauthenticated', verification: 'local', summary: '原生登录已失效,请重新登录' };\n if (Object.keys(auth).length || credentialProviders.size || Object.keys(providers).length)\n return { state: 'configured', verification: 'local', summary: '尚未配置有效凭据' };\n return { state: 'unconfigured', verification: 'local', summary: '尚未配置原生账号' };\n });\n }\n catch {\n signal.throwIfAborted();\n return { state: 'unavailable', summary: '账号或模型配置读取失败,请检查配置' };\n }\n}\nexport async function restorePiOmpEnvironment(directory) {\n try {\n const value = parseObject(await readOptional(join(directory, 'native-env.json'), 64 * 1024));\n if (Object.entries(value).some(([key, item]) => !/^[A-Z][A-Z0-9_]*$/.test(key) || runtimeEnv.test(key) || typeof item !== 'string'))\n throw new Error('Invalid native environment snapshot');\n return value;\n }\n catch {\n throw new Error('无法安全读取已有 Worker 的原生凭据环境');\n }\n}\n//# sourceMappingURL=pi-omp-native.js.map","import { lstat, open } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nconst LIMIT = 64 * 1024;\nconst record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst credentialPresent = (value) => typeof value === 'string' && value.trim().length > 0;\n/** Only email is allowlisted. Reject controls/markup/credential-shaped strings outright. */\nexport function accountEmail(value) {\n if (typeof value !== 'string' || value.length > 254)\n return undefined;\n if (/\\p{C}|[<>]|\\b(?:Bearer|sk-|sk_|ghp_|ya29\\.)/iu.test(value))\n return undefined;\n const email = value.trim();\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/u.test(email) ? email : undefined;\n}\nfunction idTokenClaims(value) {\n if (typeof value !== 'string' || value.length > 32 * 1024)\n return undefined;\n const pieces = value.split('.');\n if (pieces.length !== 3 || !pieces.every((piece) => /^[A-Za-z0-9_-]+$/.test(piece)))\n return undefined;\n try {\n const claims = JSON.parse(Buffer.from(pieces[1], 'base64url').toString('utf8'));\n return record(claims) ? claims : undefined;\n }\n catch {\n return undefined;\n }\n}\n/** Local expiry is negative evidence only; an unsigned claim never proves login. */\nexport function localTokenExpired(value, now = Date.now()) {\n const expiry = idTokenClaims(value)?.exp;\n return typeof expiry === 'number' && Number.isFinite(expiry) && expiry * 1000 <= now;\n}\n/**\n * This format/path is verified from the installed AGY CLI. Reading is\n * bounded and ephemeral. No credential leaves this function; ID tokens are decoded\n * only for a display email, never treated as a remotely verified assertion.\n */\nexport function localAccountIdentity(options = {}) {\n return async (cli, signal) => {\n if (cli !== 'antigravity')\n return undefined;\n const home = options.home ?? homedir();\n const path = join(home, '.gemini', 'jetski-standalone-oauth-token');\n let handle;\n let buffer;\n try {\n signal.throwIfAborted();\n await safePiOmpAncestors(dirname(path));\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw new Error('Invalid account metadata');\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const stat = await handle.stat();\n if (!stat.isFile() ||\n stat.nlink !== 1 ||\n stat.dev !== entry.dev ||\n stat.ino !== entry.ino ||\n stat.size > LIMIT)\n throw new Error('Invalid account metadata');\n buffer = Buffer.alloc(LIMIT + 1);\n let offset = 0;\n while (offset <= LIMIT) {\n signal.throwIfAborted();\n const { bytesRead } = await handle.read(buffer, offset, buffer.length - offset, null);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n if (offset > LIMIT)\n throw new Error('Invalid account metadata');\n const after = await handle.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== stat.dev ||\n current.ino !== stat.ino ||\n current.nlink !== 1 ||\n offset !== stat.size ||\n after.size !== stat.size ||\n after.mtimeMs !== stat.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw new Error('Account metadata changed during read');\n const value = JSON.parse(buffer.subarray(0, offset).toString('utf8'));\n signal.throwIfAborted();\n if (!record(value))\n throw new Error('Invalid account metadata');\n if (value.auth_method !== 'consumer' || !record(value.token))\n return {\n state: 'unknown',\n verification: 'local',\n summary: '登录格式未知,请打开账号终端',\n };\n const refreshable = credentialPresent(value.token.refresh_token);\n const expiry = typeof value.token.expiry === 'string' ? Date.parse(value.token.expiry) : NaN;\n const active = credentialPresent(value.token.access_token) && Number.isFinite(expiry) && expiry > Date.now();\n if (!refreshable && !active)\n return { state: 'unauthenticated', verification: 'local', summary: '本地登录已过期,请重新登录' };\n return {\n state: 'authenticated',\n authMethod: 'oauth',\n verification: 'local',\n accountLabel: accountEmail(idTokenClaims(value.id_token)?.email),\n summary: '已登录 Antigravity',\n };\n }\n catch (error) {\n signal.throwIfAborted();\n if (error?.code === 'ENOENT')\n return { state: 'unconfigured', verification: 'local', summary: '尚未登录 Antigravity' };\n return {\n state: 'unavailable',\n verification: 'local',\n summary: '登录状态读取失败,请重试',\n };\n }\n finally {\n buffer?.fill(0);\n await handle?.close().catch(() => undefined);\n }\n };\n}\n//# sourceMappingURL=account-identity.js.map","// Read-only account metadata. Never refresh OAuth, submit prompts, or return\n// credentials, account IDs, headers, endpoint URLs, or raw exception messages.\nconst unknown = () => ({ state: 'unknown', source: 'unknown', models: [] })\nconst denied = (denialReason) => ({\n state: 'denied',\n source: 'unknown',\n models: [],\n ...(denialReason ? { denialReason } : {}),\n})\nconst validId = (id) => typeof id === 'string' && !!id && id.length <= 1024 && !/[\\s\\x00-\\x1f]/.test(id)\nconst object = (value) => value && typeof value === 'object' && !Array.isArray(value)\nconst unavailable = (model) =>\n model.supported_in_api === false ||\n model.allowed === false ||\n model.available === false ||\n model.entitled === false ||\n model.enabled === false ||\n model.disabled === true ||\n model.upgrade_required === true ||\n model.visibility === 'hidden' ||\n model.visibility === 'none'\nconst numericRate = (value) =>\n typeof value === 'number'\n ? value\n : typeof value === 'string' &&\n value.trim() &&\n /^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(value.trim())\n ? Number(value)\n : NaN\nconst costFor = (model, oauth) => {\n if (oauth) return 'unknown'\n const rates = model.pricing\n if (object(rates)) {\n const input = numericRate(Object.hasOwn(rates, 'input') ? rates.input : rates.prompt),\n output = numericRate(Object.hasOwn(rates, 'output') ? rates.output : rates.completion)\n if (Number.isFinite(input) && Number.isFinite(output) && input >= 0 && output >= 0) {\n const additional = Object.entries(rates)\n .filter(([key]) => !['input', 'output', 'prompt', 'completion', 'free'].includes(key))\n .map(([, value]) => numericRate(value))\n if (input > 0 || output > 0 || additional.some((value) => value > 0)) return 'paid'\n if (additional.some((value) => !Number.isFinite(value) || value < 0)) return 'unknown'\n return 'free'\n }\n // Explicit invalid rates cannot be overridden by a contradictory free flag.\n if ('input' in rates || 'prompt' in rates || 'output' in rates || 'completion' in rates) return 'unknown'\n }\n return model.free === true || model.is_free === true || model.pricing?.free === true ? 'free' : 'unknown'\n}\nfunction entries(payload) {\n if (Array.isArray(payload)) return payload\n if (!object(payload)) return undefined\n return Array.isArray(payload.models)\n ? payload.models\n : Array.isArray(payload.data)\n ? payload.data\n : undefined\n}\nfunction normalize(payload, oauth, token) {\n const list = entries(payload)\n if (!list) return undefined\n const result = new Map()\n for (const model of list) {\n if (!object(model) || unavailable(model)) continue\n const id = model.slug ?? model.id\n if (\n !validId(id) ||\n id === token ||\n (token.length >= 12 && id.includes(token)) ||\n (oauth && model.supported_in_api !== true)\n )\n continue\n const name = model.display_name ?? model.name\n result.set(id, {\n id,\n ...(typeof name === 'string' &&\n name.trim() &&\n name.length <= 4096 &&\n name !== token &&\n !(token.length >= 12 && name.includes(token))\n ? { name }\n : {}),\n cost: costFor(model, oauth),\n })\n }\n return [...result.values()]\n}\nfunction metadataBase(input, codex) {\n const url = new URL(codex ? 'https://chatgpt.com/backend-api' : input.baseUrl)\n if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)\n throw new Error('Unsafe metadata endpoint')\n const base = url.toString().replace(/\\/+$/, '')\n return input.apiType === 'anthropic-messages' && !/\\/v1$/.test(url.pathname.replace(/\\/+$/, ''))\n ? `${base}/v1`\n : base\n}\nasync function readResponse(response) {\n if (!response.body) return undefined\n const reader = response.body.getReader()\n let length = 0\n const chunks = []\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n length += value.length\n if (length > 2 * 1024 * 1024) {\n await reader.cancel()\n return undefined\n }\n chunks.push(value)\n }\n const bytes = new Uint8Array(length)\n let offset = 0\n for (const chunk of chunks) {\n bytes.set(chunk, offset)\n offset += chunk.length\n }\n return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes))\n } finally {\n reader.releaseLock()\n }\n}\n/** Exact current-account model scope, or a narrowly declared API fallback. */\nexport async function probeAccountModels(input, options = {}) {\n const credential = input.credential\n if (!credential || !['api', 'oauth'].includes(credential.type)) return unknown()\n const oauth = credential.type === 'oauth'\n const token = oauth ? credential.access : credential.key\n if (typeof token !== 'string' || !token.trim() || token.trimStart().startsWith('!')) return unknown()\n // Near-expiry credentials cannot reliably finish the query. Do not renew them.\n if (oauth && (typeof credential.expires !== 'number' || credential.expires <= Date.now() + 30000))\n return denied('authentication')\n const codex = oauth && ['openai', 'openai-codex'].includes(input.provider)\n // xAI/other subscription catalogs do not expose a verified per-account scope\n // contract here. Do not turn an OAuth login into their whole public catalog.\n if (oauth && !codex) return unknown()\n const parent = options.signal\n if (parent?.aborted) return unknown()\n const controller = new AbortController()\n const signal = parent ? AbortSignal.any([parent, controller.signal]) : controller.signal\n const timer = setTimeout(() => controller.abort(), Math.max(50, Math.min(options.timeoutMs ?? 8000, 10000)))\n try {\n if (codex && input.baseUrl && input.baseUrl.replace(/\\/+$/, '') !== 'https://chatgpt.com/backend-api')\n return unknown()\n const base = metadataBase(input, codex)\n const headers = { accept: 'application/json', Authorization: `Bearer ${token}` }\n if (input.apiType === 'anthropic-messages' && !oauth) {\n // ZCode's native Anthropic factory sends both headers. Other callers keep\n // the ordinary x-api-key contract unless they explicitly mirror that route.\n if (!['api-key-and-bearer', 'bearer'].includes(input.anthropicAuth)) delete headers.Authorization\n if (input.anthropicAuth !== 'bearer') headers['x-api-key'] = token\n headers['anthropic-version'] = '2023-06-01'\n }\n if (codex) {\n let accountId = credential.accountId\n if (!accountId) {\n try {\n accountId = JSON.parse(Buffer.from(token.split('.')[1] ?? '', 'base64url').toString('utf8'))?.[\n 'https://api.openai.com/auth'\n ]?.chatgpt_account_id\n } catch {}\n }\n if (typeof accountId === 'string' && accountId) headers['chatgpt-account-id'] = accountId\n headers['OpenAI-Beta'] = 'responses=experimental'\n headers.originator = 'pi'\n headers.version = '0.144.1'\n }\n const fetcher = options.fetch ?? globalThis.fetch\n const request = async (path) => {\n const target = `${base}${path}${codex && path !== '/wham/usage' ? '?client_version=0.144.1' : ''}`\n const response = await fetcher(target, { method: 'GET', headers, signal, redirect: 'error' })\n if (!response.ok) {\n await response.body?.cancel()\n return { status: response.status, payload: undefined }\n }\n return { status: response.status, payload: await readResponse(response) }\n }\n let modelResponse\n for (const path of codex\n ? ['/codex/models', '/models']\n : [\n input.provider === 'openrouter' || new URL(base).hostname === 'openrouter.ai'\n ? '/models/user'\n : '/models',\n ]) {\n modelResponse = await request(path)\n if (modelResponse.status === 401 || modelResponse.status === 403) return denied('authentication')\n if (modelResponse.status >= 200 && modelResponse.status < 300) break\n if (![404, 405].includes(modelResponse.status)) return unknown()\n }\n if (modelResponse?.status >= 200 && modelResponse.status < 300) {\n const envelope = modelResponse.payload\n if (envelope?.allowed === false || envelope?.authenticated === false) return denied()\n if (envelope?.success === false || envelope?.error) {\n const code = envelope?.error?.code\n return ['invalid_api_key', 'authentication_failed', 'unauthorized', 'forbidden', 401, 403].includes(\n code,\n )\n ? denied('authentication')\n : unknown()\n }\n const models = normalize(envelope, oauth, token)\n if (models === undefined) return unknown()\n if (codex) {\n const usage = await request('/wham/usage')\n const rate = usage.payload?.rate_limit\n if (usage.status === 401 || usage.status === 403) return denied('authentication')\n // Only the authenticated usage response establishes exhausted quota.\n // Keep an unclassified denial distinct from expiry/401/403 and network failure.\n if (usage.status === 200 && rate?.limit_reached === true) return denied('quota')\n if (rate?.allowed === false || rate?.limit_reached === true) return denied()\n // A catalog/menu is not evidence that the account has an executable quota.\n if (usage.status !== 200 || rate?.allowed !== true || rate?.limit_reached !== false) return unknown()\n const plan =\n typeof usage.payload?.plan_type === 'string'\n ? usage.payload.plan_type\n .trim()\n .toLowerCase()\n .replace(/^chatgpt_/, '')\n : ''\n const cost =\n plan === 'free'\n ? 'free'\n : ['plus', 'pro', 'team', 'business', 'enterprise', 'edu', 'pro_lite', 'prolite'].includes(plan)\n ? 'paid'\n : 'unknown'\n for (const model of models) model.cost = cost\n }\n if (\n !oauth &&\n ([\n 'zai-coding-cn',\n 'cliworker-zai-cn',\n 'zhipu-coding-plan',\n 'zhipuai-coding-plan',\n 'kimi-coding',\n ].includes(input.provider) ||\n /open\\.bigmodel\\.cn\\/api\\/coding\\//.test(base))\n ) {\n for (const model of models) if (model.cost === 'free') model.cost = 'unknown'\n }\n return { state: 'supported', source: 'account-models', models }\n }\n if (!oauth && [404, 405].includes(modelResponse?.status)) {\n // Declaring a custom model is not an account entitlement proof.\n const verified = [...new Set(input.verifiedModelIds ?? [])].filter(\n (id) => validId(id) && id !== token && !(token.length >= 12 && id.includes(token)),\n )\n if (verified.length)\n return {\n state: 'supported',\n source: 'verified-route',\n models: verified.map((id) => ({ id, cost: 'unknown' })),\n }\n }\n return unknown()\n } catch {\n return unknown()\n } finally {\n clearTimeout(timer)\n }\n}\n","import { constants } from 'node:fs';\nimport { lstat, mkdir, open, rename, rm, writeFile } from 'node:fs/promises';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve, relative, isAbsolute } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { authenticatedAccountLogins, providerLogin, usableNativeApiKey } from \"./account-login.js\";\nconst object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst text = (value) => typeof value === 'string' && !!value.trim();\nexport const OPENCODE_OAUTH_UNSUPPORTED = 'OpenCode OAuth 暂无法安全续期,请使用该 CLI 自身 API 配置';\n/** JSONC comments/trailing commas, without changing quoted model IDs or URLs. */\nfunction jsonc(raw) {\n let result = '', quoted = false, escaped = false;\n for (let i = 0; i < raw.length; i++) {\n const ch = raw[i];\n if (quoted) {\n result += ch;\n if (escaped)\n escaped = false;\n else if (ch === '\\\\')\n escaped = true;\n else if (ch === '\"')\n quoted = false;\n continue;\n }\n if (ch === '\"') {\n quoted = true;\n result += ch;\n continue;\n }\n if (ch === '/' && raw[i + 1] === '/') {\n while (i + 1 < raw.length && raw[i + 1] !== '\\n')\n i++;\n continue;\n }\n if (ch === '/' && raw[i + 1] === '*') {\n const end = raw.indexOf('*/', i + 2);\n if (end < 0)\n throw new Error('Invalid native JSONC');\n i = end + 1;\n result += ' ';\n continue;\n }\n if (ch === ',') {\n let next = i + 1;\n while (next < raw.length) {\n if (/\\s/.test(raw[next])) {\n next++;\n continue;\n }\n if (raw.slice(next, next + 2) === '//') {\n const line = raw.indexOf('\\n', next + 2);\n next = line < 0 ? raw.length : line + 1;\n continue;\n }\n if (raw.slice(next, next + 2) === '/*') {\n const end = raw.indexOf('*/', next + 2);\n if (end < 0)\n throw new Error('Invalid native JSONC');\n next = end + 2;\n continue;\n }\n break;\n }\n if (raw[next] === '}' || raw[next] === ']')\n continue;\n }\n result += ch;\n }\n return JSON.parse(result);\n}\nexport { jsonc as parseNativeJsonc };\nasync function ownEnvironment(roots, options, sourceIds) {\n const result = {};\n for (const root of roots) {\n let handle;\n try {\n options.signal?.throwIfAborted();\n await safePiOmpAncestors(root);\n handle = await open(join(root, '.env'), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await handle.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 65536)\n throw new Error();\n const bytes = Buffer.alloc(65537);\n try {\n const { bytesRead } = await handle.read(bytes, 0, bytes.length, 0);\n if (bytesRead > 65536)\n throw new Error();\n for (const line of bytes.subarray(0, bytesRead).toString('utf8').split(/\\r?\\n/)) {\n if (!line.trim() || line.trimStart().startsWith('#'))\n continue;\n const match = /^(?:export\\s+)?([A-Z][A-Z0-9_]*)\\s*=\\s*(.*)$/.exec(line.trim());\n if (!match)\n throw new Error();\n let value = match[2];\n if ((value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\")))\n value = value.slice(1, -1);\n if (/`|\\$\\(|\\x00/.test(value))\n throw new Error();\n result[match[1]] = value;\n sourceIds.add(resolve(root));\n }\n }\n finally {\n bytes.fill(0);\n }\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw new Error('OpenCode 自身环境配置无法安全读取');\n }\n finally {\n await handle?.close();\n }\n }\n return result;\n}\nasync function resolveReferences(value, options, scope, depth = 0) {\n if (depth > 48)\n throw new Error('OpenCode 原生配置过深');\n if (Array.isArray(value))\n return Promise.all(value.map((entry) => resolveReferences(entry, options, scope, depth + 1)));\n if (object(value))\n return Object.fromEntries(await Promise.all(Object.entries(value).map(async ([key, entry]) => [\n key,\n await resolveReferences(entry, options, scope, depth + 1),\n ])));\n if (typeof value !== 'string')\n return value;\n let result = value.replace(/\\{env:([^}]+)\\}/g, (_, name) => scope.env[name] ?? '');\n for (const match of [...result.matchAll(/\\{file:([^}]+)\\}/g)]) {\n const path = match[1].startsWith('~/')\n ? join(options.nativeHome ?? homedir(), match[1].slice(2))\n : match[1];\n if (!isAbsolute(path) ||\n !scope.roots.some((root) => {\n const rel = relative(resolve(root), resolve(path));\n return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);\n }))\n throw new Error('OpenCode 只允许引用自身账号目录中的凭据文件');\n await safePiOmpAncestors(dirname(path));\n let file;\n const bytes = Buffer.alloc(65537);\n try {\n options.signal?.throwIfAborted();\n const parent = await lstat(dirname(path));\n if (!parent.isDirectory() || parent.isSymbolicLink())\n throw new Error('Unsafe credential reference');\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 65536)\n throw new Error('Unsafe credential reference');\n const { bytesRead } = await file.read(bytes, 0, bytes.length, 0);\n if (bytesRead > 65536)\n throw new Error('Oversized credential reference');\n result = result.replace(match[0], bytes.subarray(0, bytesRead).toString('utf8').trim());\n }\n catch {\n throw new Error('OpenCode 原生凭据引用无法安全读取');\n }\n finally {\n bytes.fill(0);\n await file?.close();\n }\n }\n return result;\n}\nfunction merge(base, next) {\n return Object.fromEntries([...new Set([...Object.keys(base), ...Object.keys(next)])].map((key) => [\n key,\n object(base[key]) && object(next[key])\n ? merge(base[key], next[key])\n : next[key] === undefined\n ? base[key]\n : next[key],\n ]));\n}\nasync function readDocument(path, optional, options, comments = false, limit = 4 * 1024 * 1024) {\n let file;\n const bytes = Buffer.alloc(limit + 1);\n try {\n options.signal?.throwIfAborted();\n const parent = await lstat(dirname(path));\n if (!parent.isDirectory() || parent.isSymbolicLink())\n throw new Error('Unsafe native account directory');\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = await file.stat();\n if (!before.isFile() || before.nlink !== 1 || before.size >= bytes.length)\n throw new Error('Unsafe native account file');\n let length = 0;\n while (length < bytes.length) {\n options.signal?.throwIfAborted();\n const part = await file.read(bytes, length, bytes.length - length, null);\n if (!part.bytesRead)\n break;\n length += part.bytesRead;\n }\n const after = await file.stat();\n if (length >= bytes.length || before.size !== after.size || before.mtimeMs !== after.mtimeMs)\n throw new Error('Native account changed during read');\n const value = comments\n ? jsonc(bytes.subarray(0, length).toString('utf8'))\n : JSON.parse(bytes.subarray(0, length).toString('utf8'));\n if (!object(value))\n throw new Error('Invalid native account data');\n return value;\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (optional && error.code === 'ENOENT')\n return undefined;\n throw new Error('OpenCode 原生账号或模型配置无法安全读取,请检查配置');\n }\n finally {\n bytes.fill(0);\n await file?.close();\n }\n}\nexport const activeOpenCodeCredential = (value) => object(value) &&\n (value.type === 'api'\n ? text(value.key)\n : value.type === 'oauth' &&\n text(value.access) &&\n typeof value.expires === 'number' &&\n value.expires > Date.now() + 30000);\n/** A native account terminal may load remote well-known config before provider filters. */\nexport async function assertOpenCodeManagedAuth(authDirectory, signal) {\n await safePiOmpAncestors(join(authDirectory, 'opencode'));\n const auth = (await readDocument(join(authDirectory, 'opencode/auth.json'), true, { signal })) ?? {};\n if (Object.values(auth).some((entry) => !object(entry) || !['api', 'oauth'].includes(entry.type)))\n throw new Error('OpenCode 原生账号包含不支持的远程认证配置');\n}\n/** The same native+plugin sources supply metadata queries and worker execution. */\nexport async function readOpenCodeProfile(authDirectory, options = {}) {\n const home = options.nativeHome ?? homedir();\n const data = options.nativeHome\n ? join(home, '.local/share')\n : process.env.XDG_DATA_HOME || join(home, '.local/share');\n const config = options.nativeHome\n ? join(home, '.config')\n : process.env.XDG_CONFIG_HOME || join(home, '.config');\n const ownRoots = [\n join(config, 'opencode'),\n join(data, 'opencode'),\n join(dirname(authDirectory), 'config', 'opencode'),\n join(authDirectory, 'opencode'),\n ];\n const sourceIds = new Set();\n const ownEnv = await ownEnvironment(ownRoots, options, sourceIds);\n const globalAuth = (await readDocument(join(data, 'opencode/auth.json'), true, options)) ?? {};\n const localAuth = (await readDocument(join(authDirectory, 'opencode/auth.json'), true, options)) ?? {};\n if (Object.keys(globalAuth).length)\n sourceIds.add(resolve(data, 'opencode'));\n if (Object.keys(localAuth).length)\n sourceIds.add(resolve(authDirectory, 'opencode'));\n let settings = {};\n const paths = [\n ...['config.json', 'opencode.json', 'opencode.jsonc'].map((name) => join(config, 'opencode', name)),\n ...['opencode.json', 'opencode.jsonc'].map((name) => join(dirname(authDirectory), 'config', 'opencode', name)),\n ];\n for (const path of new Set(paths)) {\n const document = (await readDocument(path, true, options, true)) ?? {};\n settings = merge(settings, document);\n if (Object.keys(document.provider ?? {}).length)\n sourceIds.add(resolve(dirname(path)));\n }\n const providers = await resolveReferences(settings.provider ?? {}, options, {\n roots: ownRoots,\n env: ownEnv,\n });\n if (!object(providers))\n throw new Error('OpenCode 原生提供商配置无效');\n const auth = { ...globalAuth, ...localAuth };\n for (const [id, provider] of Object.entries(providers)) {\n if (!object(provider))\n throw new Error('OpenCode 原生提供商配置无效');\n const key = provider.options?.apiKey;\n if (typeof key === 'string' && key.trim()) {\n if (key.trimStart().startsWith('!'))\n throw new Error('OpenCode 不执行凭据命令');\n // Keep the explicit API source identical in metadata and the private runtime auth store.\n auth[id] = { type: 'api', key };\n }\n }\n const disabled = settings.disabled_providers ?? [], enabled = settings.enabled_providers;\n if (!Array.isArray(disabled) ||\n !disabled.every(text) ||\n (enabled !== undefined && (!Array.isArray(enabled) || !enabled.every(text))))\n throw new Error('OpenCode 原生提供商开关配置无效');\n const cache = options.modelsPath ??\n (options.nativeHome\n ? join(home, '.cache/opencode/models.json')\n : process.env.OPENCODE_MODELS_PATH || join(home, '.cache/opencode/models.json'));\n return {\n sourceIds: [...sourceIds].sort(),\n auth,\n providers,\n disabled,\n enabled,\n modelsPath: cache,\n // The installed public multi-provider cache is 4.4 MB; scoped CLI output\n // remains capped at 4 MB. This larger cap does not apply to credential files.\n catalog: (await readDocument(cache, true, options, false, 8 * 1024 * 1024)) ?? {},\n };\n}\n/** Rebuild a private copy from current own sources; never restore an old worker account. */\nexport async function snapshotOpenCodeAuth(authDirectory, auth, providers, signal) {\n // Native Auth.set has no cross-process CAS. Copying OAuth loses rotated tokens;\n // writing directly can resurrect a concurrent logout. Neither mode is safe.\n if (providers.some((id) => auth[id]?.type === 'oauth'))\n throw new Error(OPENCODE_OAUTH_UNSUPPORTED);\n const chosen = Object.fromEntries(providers\n .filter((id) => auth[id]?.type === 'api' && activeOpenCodeCredential(auth[id]))\n .map((id) => [id, auth[id]]));\n const digest = createHash('sha256').update(JSON.stringify(chosen)).digest('hex');\n const root = join(authDirectory, 'cliworker-snapshots', 'own-v2-' + digest);\n for (const path of [\n authDirectory,\n join(authDirectory, 'cliworker-snapshots'),\n root,\n join(root, 'opencode'),\n ]) {\n signal?.throwIfAborted();\n await safePiOmpAncestors(path);\n await mkdir(path, { recursive: true, mode: 0o700 });\n const info = await lstat(path);\n if (!info.isDirectory() || info.isSymbolicLink() || (process.platform !== 'win32' && (info.mode & 0o077)))\n throw new Error('OpenCode 私有账号快照目录不安全');\n }\n const path = join(root, 'opencode/auth.json');\n try {\n const info = await lstat(path);\n if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || (process.platform !== 'win32' && (info.mode & 0o077)))\n throw new Error('OpenCode 私有账号快照文件不安全');\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n const temporary = join(root, 'opencode', `.auth-${randomUUID()}.tmp`);\n try {\n signal?.throwIfAborted();\n await writeFile(temporary, JSON.stringify(chosen), { mode: 0o600, flag: 'wx' });\n signal?.throwIfAborted();\n await rename(temporary, path);\n }\n finally {\n await rm(temporary, { force: true });\n }\n signal?.throwIfAborted();\n return root;\n}\nexport async function inspectOpenCodeProfile(authDirectory, options = {}) {\n try {\n const profile = await readOpenCodeProfile(authDirectory, options);\n const logins = [];\n let expired = false;\n for (const [id, auth] of Object.entries(profile.auth)) {\n if (!object(auth))\n continue;\n const api = auth.type === 'api' && usableNativeApiKey(auth.key);\n const oauthShape = auth.type === 'oauth' &&\n usableNativeApiKey(auth.access) &&\n typeof auth.expires === 'number' &&\n Number.isFinite(auth.expires) &&\n (auth.refresh === undefined || typeof auth.refresh === 'string');\n const oauth = oauthShape && (auth.expires > Date.now() || usableNativeApiKey(auth.refresh));\n if (oauthShape && !oauth)\n expired = true;\n if (api || oauth) {\n const config = profile.providers[id];\n logins.push(providerLogin(id, api ? 'api' : 'oauth', {\n baseUrl: config?.options?.baseURL,\n name: config?.name,\n }));\n }\n }\n if (logins.length)\n return authenticatedAccountLogins(logins);\n if (expired)\n return {\n state: 'unauthenticated',\n verification: 'local',\n summary: '登录已过期,请重新登录',\n };\n if (Object.values(profile.auth).some((auth) => object(auth) && auth.type === 'api') ||\n (!Object.keys(profile.auth).length && Object.keys(profile.providers).length))\n return { state: 'configured', verification: 'local', summary: '尚未配置有效凭据' };\n return Object.keys(profile.auth).length\n ? { state: 'unknown', verification: 'local', summary: '账号配置格式未知' }\n : { state: 'unconfigured', verification: 'local', summary: '尚未配置 OpenCode 账号' };\n }\n catch {\n options.signal?.throwIfAborted();\n return {\n state: 'unavailable',\n verification: 'local',\n summary: '账号配置读取失败,请检查配置',\n };\n }\n}\n//# sourceMappingURL=opencode-native.js.map","import { createHash } from 'node:crypto';\nimport { realpath, stat } from 'node:fs/promises';\nimport { isAbsolute } from 'node:path';\nimport { nativeLaunchArgv } from './native-launch.mjs';\nconst digest = (value) => createHash('sha256').update(JSON.stringify(value)).digest('hex');\n/** No raw environment, configuration or account material is retained in the cache key. */\nexport async function nativeMetadataKey(executable, project, snapshot, signal) {\n signal.throwIfAborted();\n try {\n // Use the same static launch plan as the process boundary. A fixed Bun shim\n // can stay unchanged while its actual runtime or script is upgraded.\n const launch = nativeLaunchArgv([executable]);\n const identities = [];\n for (const path of new Set([executable, ...launch.filter(isAbsolute)])) {\n const entry = await realpath(path), identity = await stat(entry);\n signal.throwIfAborted();\n if (!identity.isFile())\n return;\n identities.push([entry, identity.dev, identity.ino, identity.size, identity.mtimeMs, identity.ctimeMs]);\n }\n const physicalProject = await realpath(project);\n signal.throwIfAborted();\n return digest({\n launch,\n project,\n physicalProject,\n identities,\n environment: Object.entries(process.env).sort(([a], [b]) => a.localeCompare(b)),\n snapshot,\n });\n }\n catch {\n signal.throwIfAborted();\n // An unverifiable executable still follows the uncached native validation path.\n return;\n }\n}\nexport const mimoMetadataKey = nativeMetadataKey;\nfunction currentCredential(source, own) {\n for (const path of source.sourceIds) {\n const value = path === own.authPath\n ? own.auth[source.provider]\n : {\n type: 'api',\n key: own.configurations.find((item) => item.path === path)?.value.provider?.[source.provider]\n ?.options?.apiKey,\n };\n if (value?.type !== 'api' || typeof value.key !== 'string' || !value.key)\n continue;\n const credential = { type: 'api', key: value.key };\n if (digest(credential) === source.credentialHash)\n return credential;\n }\n}\n/** Only native capabilities are reused. Remote entitlement discovery must still run on every call. */\nexport class MimoMetadataCache {\n ttlMs;\n limit;\n entries = new Map();\n constructor(ttlMs = 30_000, limit = 16) {\n this.ttlMs = ttlMs;\n this.limit = limit;\n }\n get(key, own) {\n if (!key)\n return;\n const entry = this.entries.get(key), now = Date.now();\n if (!entry)\n return;\n if (now < entry.created || now - entry.created >= this.ttlMs) {\n this.entries.delete(key);\n return;\n }\n const sources = [];\n for (const metadata of entry.sources) {\n const credential = currentCredential(metadata, own);\n if (!credential) {\n this.entries.delete(key);\n return;\n }\n const { credentialHash: _, ...source } = metadata;\n sources.push({ ...structuredClone(source), credential });\n }\n return sources;\n }\n set(key, sources, own) {\n if (!key || !sources.length)\n return;\n const metadata = [];\n for (const source of sources) {\n if (source.credential.type !== 'api')\n return;\n // A user-defined URL may itself carry a credential; such sources stay uncached.\n try {\n const url = new URL(source.baseUrl || '');\n if (url.username || url.password || url.search || url.hash)\n return;\n }\n catch {\n return;\n }\n const { credential, ...capabilities } = source;\n if (credential.key && JSON.stringify(capabilities).includes(credential.key))\n return;\n const entry = { ...structuredClone(capabilities), credentialHash: digest(credential) };\n if (!currentCredential(entry, own))\n return;\n metadata.push(entry);\n }\n const now = Date.now();\n for (const [id, entry] of this.entries)\n if (now < entry.created || now - entry.created >= this.ttlMs)\n this.entries.delete(id);\n this.entries.delete(key);\n this.entries.set(key, { created: now, sources: metadata });\n while (this.entries.size > this.limit)\n this.entries.delete(this.entries.keys().next().value);\n }\n}\nexport const mimoMetadataCache = new MimoMetadataCache();\n//# sourceMappingURL=mimo-metadata-cache.js.map","import { createHash } from 'node:crypto';\nimport { constants } from 'node:fs';\nimport { lstat, open } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\n/** Hash current bounded own files without retaining file content or following links. */\nexport async function metadataFileFingerprint(path, signal) {\n let file;\n let bytes;\n try {\n signal.throwIfAborted();\n await safePiOmpAncestors(dirname(path));\n const before = await lstat(path);\n if (before.isSymbolicLink() || !before.isFile() || before.nlink !== 1 || before.size > 1_048_576)\n return;\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const opened = await file.stat();\n if (!opened.isFile() ||\n opened.dev !== before.dev ||\n opened.ino !== before.ino ||\n opened.nlink !== 1 ||\n opened.size !== before.size ||\n opened.size > 1_048_576 ||\n opened.mtimeMs !== before.mtimeMs)\n return;\n bytes = Buffer.alloc(opened.size + 1);\n let offset = 0;\n while (offset < bytes.length) {\n signal.throwIfAborted();\n const read = await file.read(bytes, offset, bytes.length - offset, offset);\n if (!read.bytesRead)\n break;\n offset += read.bytesRead;\n }\n const after = await file.stat(), current = await lstat(path);\n signal.throwIfAborted();\n if (current.isSymbolicLink() ||\n current.dev !== opened.dev ||\n current.ino !== opened.ino ||\n current.nlink !== 1 ||\n offset !== opened.size ||\n after.size !== opened.size ||\n current.size !== opened.size ||\n after.mtimeMs !== opened.mtimeMs ||\n current.mtimeMs !== opened.mtimeMs ||\n after.ctimeMs !== opened.ctimeMs ||\n current.ctimeMs !== opened.ctimeMs)\n return;\n return createHash('sha256').update(bytes.subarray(0, offset)).digest('hex');\n }\n catch (error) {\n signal.throwIfAborted();\n return error.code === 'ENOENT' ? 'missing' : undefined;\n }\n finally {\n bytes?.fill(0);\n await file?.close();\n }\n}\n/** Callers admit only validated public capabilities, never account status or raw CLI output. */\nexport class NativeCapabilityCache {\n ttlMs;\n limit;\n entries = new Map();\n constructor(ttlMs = 30_000, limit = 16) {\n this.ttlMs = ttlMs;\n this.limit = limit;\n }\n get(key) {\n if (!key)\n return;\n const entry = this.entries.get(key), now = Date.now();\n if (!entry)\n return;\n if (now < entry.created || now - entry.created >= this.ttlMs) {\n this.entries.delete(key);\n return;\n }\n return structuredClone(entry.value);\n }\n set(key, value) {\n if (!key)\n return;\n const now = Date.now();\n for (const [id, entry] of this.entries)\n if (now < entry.created || now - entry.created >= this.ttlMs)\n this.entries.delete(id);\n this.entries.delete(key);\n this.entries.set(key, { created: now, value: structuredClone(value) });\n while (this.entries.size > this.limit)\n this.entries.delete(this.entries.keys().next().value);\n }\n}\n//# sourceMappingURL=native-capability-cache.js.map","import { constants } from 'node:fs';\nimport { lstat, mkdir, mkdtemp, open, realpath, rm, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { basename, join, resolve } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nconst object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst text = (value) => typeof value === 'string' && !!value.trim();\nconst literal = (value) => text(value) && !/^(?:!|\\$|\\{|<|your[_ -]|placeholder|changeme)/i.test(value) && !/[\\x00-\\x20]/.test(value);\nconst unavailable = () => ({\n state: 'unavailable',\n verification: 'local',\n summary: 'Kimi 登录状态读取失败,请检查配置',\n});\nexport const KIMI_MANAGE_LOGIN = '已登录 Kimi。若出现 Trust 提示,请自行确认此空账号目录;切换账号输入 /logout,再输入 /login。';\n/** Native Kimi has no --no-mcp switch and asks Trust even for an empty folder.\n * Its findGitWorkTree stops at the first .git directory. An empty owned marker\n * keeps project MCP lookup here even when plugin state lives under a repository.\n * Never mark the folder trusted or change the native account home. */\nexport async function prepareKimiAccountDirectory(stateDirectory, signal) {\n signal.throwIfAborted();\n const parent = join(resolve(stateDirectory), 'account-runtime');\n await safePiOmpAncestors(parent);\n await mkdir(parent, { recursive: true, mode: 0o700 });\n await safePiOmpAncestors(parent);\n const canonicalParent = await realpath(parent);\n const parentIdentity = await lstat(canonicalParent);\n const cwd = await mkdtemp(join(canonicalParent, 'kimi-'));\n const identity = await lstat(cwd);\n let removed = false;\n const cleanup = async () => {\n if (removed)\n return;\n const parentNow = await lstat(canonicalParent);\n if (parentNow.isSymbolicLink() ||\n parentNow.dev !== parentIdentity.dev ||\n parentNow.ino !== parentIdentity.ino)\n throw new Error('Kimi account runtime parent changed before cleanup');\n try {\n const current = await lstat(cwd);\n if (current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)\n throw new Error('Kimi account runtime changed before cleanup');\n await rm(cwd, { recursive: true, force: true });\n removed = true;\n }\n catch (error) {\n if (error.code === 'ENOENT')\n removed = true;\n else\n throw error;\n }\n };\n try {\n await mkdir(join(cwd, '.git'), { mode: 0o700 });\n await mkdir(join(cwd, '.kimi-code'), { mode: 0o700 });\n for (const path of [join(cwd, '.mcp.json'), join(cwd, '.kimi-code/mcp.json')])\n await writeFile(path, '{\"mcpServers\":{}}\\n', { flag: 'wx', mode: 0o600 });\n signal.throwIfAborted();\n return { cwd, cleanup };\n }\n catch (error) {\n await cleanup();\n throw error;\n }\n}\n/** Installed Kimi toolkit.resolveKimiTokenStorageName, constrained to one own file. */\nfunction tokenSlot(key) {\n if (key === 'kimi-code' || key === 'oauth/kimi-code')\n return 'kimi-code';\n if (!text(key))\n throw new Error('Unknown Kimi OAuth slot');\n const slot = key.startsWith('oauth/') ? key.slice(6) : key;\n if (!slot || basename(slot) !== slot || slot.startsWith('.') || /[\\\\\\x00-\\x1f]/.test(slot))\n throw new Error('Unsafe Kimi OAuth slot');\n return slot;\n}\n/** Display metadata only, never a JWT verification or an authentication decision.\n * Native stableJwtSubject uses sub, then user_id. Recognize the observed native\n * kimi-auth issuer and omit ambiguous/unknown identities without changing login.\n * The label contains six decoded account-ID characters, never token characters. */\nfunction kimiAccountLabel(accessToken) {\n const parts = accessToken.split('.');\n if (parts.length !== 3 ||\n !parts.every((part) => part.length > 0 && /^[A-Za-z0-9_-]+$/.test(part)) ||\n parts[1].length > 16 * 1024)\n return undefined;\n let bytes;\n try {\n bytes = Buffer.from(parts[1], 'base64url');\n if (bytes.toString('base64url') !== parts[1])\n return undefined;\n const claims = JSON.parse(bytes.toString('utf8'));\n if (!object(claims) || claims.iss !== 'kimi-auth')\n return undefined;\n const safeId = (value) => typeof value === 'string' &&\n /^[A-Za-z0-9][A-Za-z0-9_-]{6,127}$/.test(value) &&\n !/^(?:sk[-_]|pk[-_]|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|bearer|token|eyJ|placeholder|changeme|your[-_])/i.test(value);\n if ((claims.sub !== undefined && !safeId(claims.sub)) ||\n (claims.user_id !== undefined && !safeId(claims.user_id)) ||\n (claims.sub !== undefined && claims.user_id !== undefined && claims.sub !== claims.user_id))\n return undefined;\n const id = claims.sub ?? claims.user_id;\n return safeId(id) ? `Kimi ID · …${id.slice(-6)}` : undefined;\n }\n catch {\n return undefined;\n }\n finally {\n bytes?.fill(0);\n }\n}\n/** No-follow, bounded read; never refreshes, creates or modifies the native token. */\nexport async function readKimiOwnToken(directory, slot, signal) {\n let handle;\n let bytes;\n try {\n signal.throwIfAborted();\n if (tokenSlot(slot) !== slot)\n throw new Error('Unsafe Kimi token slot');\n await safePiOmpAncestors(directory);\n const path = join(directory, `${slot}.json`);\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw new Error('Unsafe Kimi token file');\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = await handle.stat();\n if (!before.isFile() ||\n before.nlink !== 1 ||\n before.dev !== entry.dev ||\n before.ino !== entry.ino ||\n before.size > 64 * 1024)\n throw new Error('Unsafe Kimi token file');\n bytes = Buffer.alloc(before.size + 1);\n let offset = 0;\n while (offset < bytes.length) {\n signal.throwIfAborted();\n const { bytesRead } = await handle.read(bytes, offset, bytes.length - offset, offset);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n const after = await handle.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== before.dev ||\n current.ino !== before.ino ||\n current.nlink !== 1 ||\n offset !== before.size ||\n after.size !== before.size ||\n after.mtimeMs !== before.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw new Error('Kimi token changed during read');\n signal.throwIfAborted();\n const parsed = JSON.parse(bytes.subarray(0, offset).toString('utf8'));\n if (!object(parsed))\n throw new Error('Invalid Kimi token file');\n return parsed;\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return undefined;\n throw error;\n }\n finally {\n bytes?.fill(0);\n await handle?.close();\n }\n}\n/** Consume native `provider list --json` internally; only safe identity metadata escapes. */\nexport async function readKimiAccount(raw, signal, options = {}) {\n try {\n signal.throwIfAborted();\n const config = JSON.parse(raw);\n if (!object(config) || !object(config.providers))\n return unavailable();\n const providers = Object.values(config.providers).filter(object);\n const api = providers.some((provider) => !provider.oauth && (literal(provider.apiKey) || literal(provider.env?.KIMI_API_KEY)));\n const configured = api\n ? { state: 'configured', verification: 'local', authMethod: 'api', summary: '已配置 Kimi API' }\n : { state: 'unconfigured', verification: 'local', summary: '尚未登录 Kimi' };\n const provider = config.providers['managed:kimi-code'];\n if (!object(provider) || provider.oauth === undefined)\n return configured;\n if (provider.type !== 'kimi' || !object(provider.oauth) || provider.oauth.storage !== 'file')\n return { state: 'unknown', verification: 'local', summary: 'Kimi 登录配置暂不支持,请打开账号终端' };\n const slot = tokenSlot(provider.oauth.key);\n const token = await readKimiOwnToken(join(options.home ?? process.env.KIMI_CODE_HOME ?? join(homedir(), '.kimi-code'), 'credentials'), slot, signal);\n if (!token)\n return configured;\n // Native classifyToken treats an empty access token as a revoked tombstone,\n // including one with an old refresh token. Expiry is negative evidence only.\n if (token.access_token === '' || token.access_token === undefined)\n return api\n ? configured\n : { state: 'unauthenticated', verification: 'local', summary: 'Kimi 登录已失效,请重新登录' };\n if (!text(token.access_token) ||\n (token.refresh_token !== undefined && typeof token.refresh_token !== 'string') ||\n (token.expires_at !== undefined &&\n (typeof token.expires_at !== 'number' || !Number.isFinite(token.expires_at) || token.expires_at < 0)))\n return unavailable();\n const expires = token.expires_at ?? 0;\n if (expires > 0 && expires * 1000 <= (options.now ?? Date.now()) && !text(token.refresh_token))\n return api\n ? configured\n : { state: 'unauthenticated', verification: 'local', summary: 'Kimi 登录已过期,请重新登录' };\n const accountLabel = kimiAccountLabel(token.access_token);\n return {\n state: 'authenticated',\n authMethod: 'oauth',\n verification: 'local',\n summary: '已登录 Kimi',\n ...(accountLabel ? { accountLabel } : {}),\n };\n }\n catch {\n signal.throwIfAborted();\n return unavailable();\n }\n}\n//# sourceMappingURL=kimi-accounts.js.map","import { homedir } from 'node:os';\nimport { isAbsolute, join } from 'node:path';\nimport { readKimiOwnToken } from \"./kimi-accounts.js\";\nconst record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst id = (value) => typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(value);\nconst BASES = new Set(['https://api.kimi.com/coding/v1', 'https://api.kimi.ai/coding/v1']);\nconst PROVIDER = 'managed:kimi-code';\nconst nearExpiry = (expires, now) => typeof expires !== 'number' || !Number.isFinite(expires) || expires <= now + 30_000;\nexport class KimiOAuthModelError extends Error {\n code = 'KIMI_OAUTH_UNAVAILABLE';\n constructor(message) {\n super(message);\n this.name = 'KimiOAuthModelError';\n }\n}\nconst unavailable = () => new KimiOAuthModelError('Kimi OAuth 配置来源暂无法核验,请检查该 CLI 配置');\nconst expired = () => new KimiOAuthModelError('Kimi 登录凭据已过期或即将过期,请打开账号终端完成原生续期或重新登录');\n/** JWT fields label the stable account only. The server must independently accept this token. */\nfunction ownPrincipal(access) {\n const parts = access.split('.');\n if (parts.length !== 3 ||\n parts[1].length > 16 * 1024 ||\n !parts.every((part) => /^[A-Za-z0-9_-]+$/.test(part)))\n return;\n const bytes = Buffer.from(parts[1], 'base64url');\n try {\n if (bytes.toString('base64url') !== parts[1])\n return;\n const claims = JSON.parse(bytes.toString('utf8'));\n if (!record(claims) || claims.iss !== 'kimi-auth')\n return;\n const subject = claims.sub ?? claims.user_id;\n if (typeof subject !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9_-]{6,127}$/.test(subject))\n return;\n if (claims.sub !== undefined && claims.user_id !== undefined && claims.sub !== claims.user_id)\n return;\n return subject;\n }\n catch {\n return;\n }\n finally {\n bytes.fill(0);\n }\n}\n/** This is host-only credential material. Do not return it through Gateway or persist it. */\nexport async function readKimiOAuthModelSources(raw, sourceId, signal, options = {}) {\n signal.throwIfAborted();\n if (!record(raw) || !record(raw.providers) || !record(raw.models))\n return [];\n const provider = raw.providers[PROVIDER];\n if (!record(provider) || provider.oauth === undefined)\n return [];\n const baseUrl = typeof provider.baseUrl === 'string' ? provider.baseUrl.replace(/\\/+$/, '') : '';\n if (provider.type !== 'kimi' ||\n !BASES.has(baseUrl) ||\n !record(provider.oauth) ||\n provider.oauth.storage !== 'file' ||\n !['oauth/kimi-code', 'kimi-code'].includes(provider.oauth.key) ||\n (provider.oauth.oauthHost !== undefined && provider.oauth.oauthHost !== 'https://auth.kimi.com') ||\n provider.apiKey ||\n provider.apiKeyEnv ||\n provider.env ||\n provider.customHeaders ||\n ['KIMI_CODE_BASE_URL', 'KIMI_CODE_OAUTH_HOST', 'KIMI_OAUTH_HOST', 'KIMI_CODE_CUSTOM_HEADERS'].some((key) => process.env[key]))\n throw unavailable();\n const home = options.home ?? process.env.KIMI_CODE_HOME ?? join(homedir(), '.kimi-code');\n if (!isAbsolute(home))\n throw unavailable();\n let token;\n try {\n token = await readKimiOwnToken(join(home, 'credentials'), 'kimi-code', signal);\n }\n catch {\n signal.throwIfAborted();\n throw unavailable();\n }\n if (!token || typeof token.access_token !== 'string' || !token.access_token.trim())\n throw new KimiOAuthModelError('Kimi OAuth 尚未登录或已退出,请打开账号终端登录');\n const expires = typeof token.expires_at === 'number' ? token.expires_at * 1000 : undefined;\n if (nearExpiry(expires, options.now ?? Date.now()))\n throw expired();\n const accountId = ownPrincipal(token.access_token);\n if (!accountId || (token.token_type !== undefined && String(token.token_type).toLowerCase() !== 'bearer'))\n throw unavailable();\n const nativeModels = [];\n for (const [alias, model] of Object.entries(raw.models)) {\n if (!record(model) ||\n model.provider !== PROVIDER ||\n !id(model.model) ||\n alias !== `kimi-code/${model.model}`)\n continue;\n if (model.oauth || model.providerId || model.apiKey || model.baseUrl || model.customHeaders)\n continue;\n if (model.protocol !== undefined &&\n !['kimi', 'openai', 'openai_responses', 'anthropic'].includes(model.protocol))\n continue;\n nativeModels.push({\n remoteId: model.model,\n choice: {\n id: alias,\n label: typeof model.displayName === 'string' ? model.displayName : alias,\n efforts: ['default'],\n },\n });\n }\n signal.throwIfAborted();\n return nativeModels.length\n ? [\n {\n provider: PROVIDER,\n credential: { type: 'oauth', access: token.access_token, expires, accountId },\n baseUrl,\n apiType: 'kimi-managed-oauth',\n sourceIds: [sourceId, join(home, 'credentials/kimi-code.json'), 'native:kimi-managed-oauth'],\n nativeModels,\n },\n ]\n : [];\n}\nasync function responseJson(response, signal) {\n if (!response.body)\n throw new KimiOAuthModelError('Kimi 模型或额度响应格式无法确认,请稍后刷新');\n const reader = response.body.getReader(), chunks = [];\n let bytes = 0;\n try {\n while (true) {\n signal.throwIfAborted();\n const item = await reader.read();\n if (item.done)\n break;\n bytes += item.value.byteLength;\n if (bytes > 1_048_576)\n throw new KimiOAuthModelError('Kimi 模型或额度响应过大,请稍后刷新');\n chunks.push(item.value);\n }\n const buffer = Buffer.concat(chunks);\n try {\n return JSON.parse(buffer.toString('utf8'));\n }\n finally {\n buffer.fill(0);\n }\n }\n finally {\n await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n for (const chunk of chunks)\n chunk.fill(0);\n }\n}\n/** Current native subscription quota is required; a public models list is never sufficient. */\nexport function kimiQuotaRemaining(raw) {\n if (!record(raw) || !record(raw.usages))\n return 'unknown';\n const entries = ['limit_5h', 'limit_7d', 'limit_month_total', 'limit_month_code']\n .filter((key) => raw.usages[key] !== undefined)\n .map((key) => raw.usages[key]);\n if (!entries.length)\n return 'unknown';\n const ratios = entries.map((entry) => {\n if (!record(entry) || (typeof entry.used_ratio !== 'number' && typeof entry.used_ratio !== 'string'))\n return NaN;\n if (typeof entry.used_ratio === 'string' && !entry.used_ratio.trim())\n return NaN;\n return Number(entry.used_ratio);\n });\n if (ratios.some((ratio) => !Number.isFinite(ratio) || ratio < 0))\n return 'unknown';\n return ratios.some((ratio) => ratio >= 1) ? 'exhausted' : 'available';\n}\nexport async function probeKimiOAuthModels(source, options = {}) {\n const signal = options.signal ?? new AbortController().signal;\n signal.throwIfAborted();\n if (source.provider !== PROVIDER ||\n source.apiType !== 'kimi-managed-oauth' ||\n !BASES.has(source.baseUrl || '') ||\n source.credential.type !== 'oauth' ||\n typeof source.credential.access !== 'string' ||\n !source.credential.accountId ||\n ownPrincipal(source.credential.access) !== source.credential.accountId)\n throw unavailable();\n if (nearExpiry(source.credential.expires, Date.now()))\n throw expired();\n const cancel = new AbortController();\n const control = AbortSignal.any([signal, cancel.signal, AbortSignal.timeout(options.timeoutMs ?? 8_000)]);\n const request = async (name) => {\n try {\n const response = await (options.fetch ?? fetch)(`${source.baseUrl}/${name}`, {\n headers: { Authorization: `Bearer ${source.credential.access}`, Accept: 'application/json' },\n redirect: 'error',\n signal: control,\n });\n if (!response.ok) {\n await response.body?.cancel();\n if ([401, 403].includes(response.status))\n throw new KimiOAuthModelError('Kimi 登录或订阅授权未通过,请打开账号终端检查登录与额度');\n throw new KimiOAuthModelError('Kimi 模型或额度查询暂不可用,请稍后刷新');\n }\n return await responseJson(response, control);\n }\n catch (error) {\n signal.throwIfAborted();\n if (error instanceof KimiOAuthModelError)\n throw error;\n throw new KimiOAuthModelError('Kimi 模型或额度查询失败,请检查网络后刷新');\n }\n };\n const requests = [request('models'), request('usages')];\n try {\n const [models, usages] = await Promise.all(requests);\n signal.throwIfAborted();\n if (nearExpiry(source.credential.expires, Date.now()))\n throw expired();\n const quota = kimiQuotaRemaining(usages);\n if (quota === 'exhausted')\n throw new KimiOAuthModelError('Kimi 当前账号额度已用尽,请等待重置或检查订阅');\n if (quota !== 'available')\n throw new KimiOAuthModelError('Kimi 当前账号剩余额度暂无法确认,请在账号终端检查后刷新');\n if (!record(models) || !Array.isArray(models.data))\n throw new KimiOAuthModelError('Kimi 模型目录格式无法确认,请稍后刷新');\n return {\n state: 'supported',\n source: 'account-models',\n models: models.data\n .filter((model) => record(model) &&\n id(model.id) &&\n Number.isInteger(Number(model.context_length)) &&\n Number(model.context_length) > 0 &&\n model.available !== false &&\n model.allowed !== false &&\n model.disabled !== true &&\n model.entitled !== false)\n .map((model) => ({\n id: model.id,\n name: typeof model.display_name === 'string' ? model.display_name : undefined,\n cost: 'unknown',\n })),\n };\n }\n finally {\n cancel.abort();\n await Promise.allSettled(requests);\n }\n}\n//# sourceMappingURL=kimi-oauth-models.js.map","import { constants } from 'node:fs';\nimport { lstat, open, readdir, realpath } from 'node:fs/promises';\nimport { homedir, userInfo } from 'node:os';\nimport { basename, dirname, isAbsolute, join, resolve } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nexport class MimoConfigurationError extends Error {\n constructor(message) {\n super(message);\n this.name = 'MimoConfigurationError';\n }\n}\nconst unavailable = () => new MimoConfigurationError('MiMo 配置来源无法确认,请检查配置');\nconst interpolation = () => new MimoConfigurationError('MiMo 配置含外部引用,请改为本 CLI 配置');\nconst remote = () => new MimoConfigurationError('MiMo 远程配置无法核验,请使用本地配置');\n/** Mirrors native Global.Path; arbitrary config/content/DB selectors are cleared in the child. */\nexport function mimoConfigurationPaths(options = {}) {\n const env = options.env ?? process.env;\n const osHome = options.osHome ?? homedir();\n const paths = options.paths ?? { join, isAbsolute };\n const home = env.HOME || env.USERPROFILE || osHome;\n const root = env.MIMOCODE_HOME;\n const config = root\n ? paths.join(root, 'config')\n : paths.join(env.XDG_CONFIG_HOME || paths.join(osHome, '.config'), 'mimocode');\n const data = root\n ? paths.join(root, 'data')\n : paths.join(env.XDG_DATA_HOME || paths.join(osHome, '.local/share'), 'mimocode');\n if (![home, config, data, ...(root ? [root] : [])].every(paths.isAbsolute))\n throw unavailable();\n return { home, config, data };\n}\nexport async function mimoConfigurationFiles(project) {\n if (!isAbsolute(project))\n throw unavailable();\n const { home, config } = mimoConfigurationPaths();\n const files = new Set([join(config, 'config.json')]);\n const add = (directory) => {\n files.add(join(directory, 'mimocode.json'));\n files.add(join(directory, 'mimocode.jsonc'));\n };\n add(config);\n add(join(home, '.mimocode'));\n // Native stops at the worktree; checking every ancestor also covers unversioned projects.\n let physical;\n try {\n physical = await realpath(project);\n }\n catch {\n throw unavailable();\n }\n for (const start of new Set([resolve(project), physical])) {\n for (let directory = start;; directory = dirname(directory)) {\n add(directory);\n add(join(directory, '.mimocode'));\n if (dirname(directory) === directory)\n break;\n }\n }\n return [...files];\n}\nasync function exists(path) {\n try {\n await lstat(path);\n return true;\n }\n catch (error) {\n if (error.code === 'ENOENT' || error.code === 'ENOTDIR')\n return false;\n throw unavailable();\n }\n}\nasync function ownDirectory(path) {\n try {\n const stat = await lstat(path);\n if (!stat.isDirectory() || stat.isSymbolicLink())\n throw unavailable();\n }\n catch (error) {\n if (error.code !== 'ENOENT' && error.code !== 'ENOTDIR')\n throw unavailable();\n }\n}\nasync function readConfiguration(path, signal) {\n signal.throwIfAborted();\n let file, bytes;\n try {\n // A selected project may be an alias; check its physical ancestor chain and\n // keep the named file identity stable instead of rejecting the project itself.\n await safePiOmpAncestors(await realpath(dirname(path)));\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw unavailable();\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = await file.stat();\n if (!before.isFile() ||\n before.nlink !== 1 ||\n before.dev !== entry.dev ||\n before.ino !== entry.ino ||\n before.size > 1_048_576)\n throw unavailable();\n bytes = Buffer.alloc(before.size + 1);\n let offset = 0;\n while (offset < bytes.length) {\n signal.throwIfAborted();\n const { bytesRead } = await file.read(bytes, offset, bytes.length - offset, offset);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n const after = await file.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== before.dev ||\n current.ino !== before.ino ||\n current.nlink !== 1 ||\n offset !== before.size ||\n after.size !== before.size ||\n after.mtimeMs !== before.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw unavailable();\n return bytes.subarray(0, before.size).toString('utf8');\n }\n catch (error) {\n signal.throwIfAborted();\n if (error.code === 'ENOENT' || error.code === 'ENOTDIR')\n return undefined;\n throw unavailable();\n }\n finally {\n bytes?.fill(0);\n await file?.close();\n }\n}\n/** Auth.Service reads this file independently of model/project configuration. */\nexport async function readMimoOwnAuth(signal) {\n const { data } = mimoConfigurationPaths();\n await safePiOmpAncestors(data);\n for (const directory of [process.env.MIMOCODE_HOME, data])\n if (directory)\n await ownDirectory(directory);\n const text = await readConfiguration(join(data, 'auth.json'), signal);\n if (!text)\n return {};\n try {\n const auth = JSON.parse(text);\n if (!auth || typeof auth !== 'object' || Array.isArray(auth))\n throw unavailable();\n return auth;\n }\n catch {\n throw unavailable();\n }\n}\nexport async function readMimoAccount(signal) {\n const auth = (await readMimoOwnAuth(signal)).xiaomi;\n signal.throwIfAborted();\n if (!auth)\n return { state: 'unconfigured', summary: '尚未登录 MiMo', verification: 'local' };\n // The built-in browser login persists ApiAuth, including optional uid/base_url metadata.\n if (auth.type === 'api' && typeof auth.key === 'string' && auth.key.trim())\n return { state: 'authenticated', summary: 'MiMo 登录', authMethod: 'api', verification: 'local' };\n return { state: 'configured', summary: '已配置 MiMo 账号,请检查登录', verification: 'local' };\n}\n/** Only unavoidable external inputs remain relevant in an isolated account terminal. */\nexport async function assertMimoAccountConfiguration(signal) {\n if (Object.values(await readMimoOwnAuth(signal)).some((value) => value?.type === 'wellknown'))\n throw remote();\n if (process.platform === 'darwin')\n for (const path of [\n join('/Library/Managed Preferences', userInfo().username, 'ai.opencode.managed.plist'),\n '/Library/Managed Preferences/ai.opencode.managed.plist',\n ])\n if (await exists(path))\n throw unavailable();\n signal.throwIfAborted();\n}\n/** Native Config.Service expands references before returning metadata, so inspect before spawning it. */\nexport async function assertMimoConfiguration(project, signal) {\n signal.throwIfAborted();\n const { home, config, data } = mimoConfigurationPaths();\n for (const directory of [process.env.MIMOCODE_HOME, config, data, join(home, '.mimocode')])\n if (directory)\n await ownDirectory(directory);\n for (const path of await mimoConfigurationFiles(project)) {\n if (basename(dirname(path)) === '.mimocode')\n await ownDirectory(dirname(path));\n const text = await readConfiguration(path, signal);\n // Native substitution happens on raw JSON/JSONC before parsing, including non-auth fields.\n if (text && /\\{(?:file|env):/.test(text))\n throw interpolation();\n }\n // Legacy TOML is imported by native code; managed OpenCode sources do not belong to this CLI.\n const unsupported = [join(config, 'config')];\n const managed = process.platform === 'darwin'\n ? '/Library/Application Support/opencode'\n : process.platform === 'win32'\n ? join(process.env.ProgramData || 'C:\\\\ProgramData', 'opencode')\n : '/etc/opencode';\n unsupported.push(join(managed, 'mimocode.json'), join(managed, 'mimocode.jsonc'));\n if (process.platform === 'darwin')\n unsupported.push(join('/Library/Managed Preferences', userInfo().username, 'ai.opencode.managed.plist'), '/Library/Managed Preferences/ai.opencode.managed.plist');\n for (const path of unsupported)\n if (await exists(path))\n throw unavailable();\n const authText = await readConfiguration(join(data, 'auth.json'), signal);\n if (authText) {\n let auth;\n try {\n auth = JSON.parse(authText);\n }\n catch {\n throw unavailable();\n }\n if (!auth || typeof auth !== 'object' || Array.isArray(auth))\n throw unavailable();\n if (Object.values(auth).some((value) => value?.type === 'wellknown'))\n throw remote();\n }\n // An active console org supplies remote JSON that native then interpolates. Only inspect its\n // presence; no tokens, account details, or remote config are read or requested here.\n let names;\n try {\n names = await readdir(data);\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw unavailable();\n names = [];\n }\n for (const name of names.filter((name) => /^mimocode(?:-[A-Za-z0-9._-]+)?\\.db$/.test(name))) {\n signal.throwIfAborted();\n const path = join(data, name);\n const stat = await lstat(path);\n if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1)\n throw unavailable();\n const { DatabaseSync } = await import('node:sqlite');\n signal.throwIfAborted();\n let db;\n let active = false;\n try {\n db = new DatabaseSync(path, { readOnly: true, allowExtension: false });\n db.exec('PRAGMA query_only = ON; PRAGMA trusted_schema = OFF');\n if (db.prepare(\"SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'account_state'\").get())\n active = !!db.prepare('SELECT 1 FROM account_state WHERE active_org_id IS NOT NULL LIMIT 1').get();\n }\n catch {\n throw unavailable();\n }\n finally {\n db?.close();\n }\n if (active)\n throw remote();\n }\n signal.throwIfAborted();\n}\n//# sourceMappingURL=mimo-configuration.js.map","import { readClaudeOwnRoute, claudeRouteStatusArguments, claudeRouteIdentity, ClaudeOwnRouteError, } from \"./claude-own-route.js\";\nimport { constants } from 'node:fs';\nimport { lstat, open } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { dirname, isAbsolute, join, win32 } from 'node:path';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { EFFORTS } from \"../shared/types.js\";\nimport { probeAccountModels } from './account-models.mjs';\nimport { parseNativeJsonc } from \"./opencode-native.js\";\nimport { mimoMetadataCache, mimoMetadataKey, nativeMetadataKey, } from \"./mimo-metadata-cache.js\";\nimport { metadataFileFingerprint, NativeCapabilityCache } from \"./native-capability-cache.js\";\nimport { readKimiOAuthModelSources, probeKimiOAuthModels } from \"./kimi-oauth-models.js\";\nimport { readKimiOwnToken } from \"./kimi-accounts.js\";\nimport { assertMimoConfiguration, mimoConfigurationFiles, mimoConfigurationPaths, MimoConfigurationError, } from \"./mimo-configuration.js\";\nexport { MimoConfigurationError } from \"./mimo-configuration.js\";\nconst claudeHelpCapabilities = new NativeCapabilityCache();\nconst kimiOAuthCapabilities = new NativeCapabilityCache();\nconst record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst literal = (v) => typeof v === 'string' && !!v.trim() && !/[\\s\\x00-\\x1f{}$]/.test(v) && !v.startsWith('!');\nconst id = (v) => typeof v === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(v);\nconst authHeaders = (v) => record(v) &&\n Object.keys(v).some((k) => /authorization|api[-_]?key|token|cookie|organization|project/i.test(k));\nfunction parseMetadata(value) {\n try {\n const parsed = JSON.parse(value);\n if (record(parsed))\n return parsed;\n }\n catch { }\n throw new Error('CLI 配置格式无效,请检查配置');\n}\nexport async function readFirstPartyJson(path) {\n let file, bytes;\n try {\n await safePiOmpAncestors(dirname(path));\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw new Error('账号配置文件不可用');\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const stat = await file.stat();\n if (!stat.isFile() ||\n stat.nlink !== 1 ||\n stat.dev !== entry.dev ||\n stat.ino !== entry.ino ||\n stat.size > 1_048_576)\n throw new Error('账号配置文件不可用');\n bytes = Buffer.alloc(stat.size + 1);\n let offset = 0;\n while (offset < bytes.length) {\n const { bytesRead } = await file.read(bytes, offset, bytes.length - offset, offset);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n const after = await file.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== stat.dev ||\n current.ino !== stat.ino ||\n current.nlink !== 1 ||\n offset !== stat.size ||\n after.size !== stat.size ||\n after.mtimeMs !== stat.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw new Error('账号配置读取期间发生变化');\n try {\n const raw = bytes.subarray(0, stat.size).toString('utf8');\n const value = path.endsWith('.jsonc') ? parseNativeJsonc(raw) : JSON.parse(raw);\n return record(value) ? value : {};\n }\n finally {\n bytes.fill(0);\n }\n }\n catch (error) {\n if (error.code === 'ENOENT' || error.code === 'ENOTDIR')\n return {};\n throw new Error('账号配置文件不可用');\n }\n finally {\n bytes?.fill(0);\n await file?.close();\n }\n}\n/** Current Claude native managed-file location; Windows no longer reads ProgramData. */\nexport function claudeManagedSettingsPath(platform = process.platform, env = process.env) {\n return platform === 'darwin'\n ? '/Library/Application Support/ClaudeCode/managed-settings.json'\n : platform === 'win32'\n ? win32.join(env.ProgramFiles || env.PROGRAMFILES || 'C:\\\\Program Files', 'ClaudeCode', 'managed-settings.json')\n : '/etc/claude-code/managed-settings.json';\n}\n/** Disable inherited SDK credentials and cross-CLI plugin imports in the native MiMo provider resolver. */\nexport function firstPartyEnvironment(cli) {\n if (cli !== 'mimo')\n return {};\n return {\n MIMOCODE_DISABLE_PROVIDER_ENV: '1',\n MIMOCODE_DISABLE_DEFAULT_PLUGINS: '1',\n MIMOCODE_PURE: '1',\n MIMOCODE_DISABLE_MODELS_FETCH: '1',\n MIMOCODE_AUTH_CONTENT: '',\n MIMOCODE_CONFIG: '',\n MIMOCODE_CONFIG_CONTENT: '',\n MIMOCODE_CONFIG_DEFAULTS: '',\n MIMOCODE_CONFIG_DIR: '',\n MIMOCODE_TEST_MANAGED_CONFIG_DIR: '',\n MIMOCODE_DB: '',\n MIMOCODE_DISABLE_CLAUDE_CODE_MCP: '1',\n MIMOCODE_DISABLE_CLAUDE_CODE_COMMANDS: '1',\n };\n}\nexport async function assertFirstPartyConfiguration(cli, project, signal) {\n signal.throwIfAborted();\n if (cli === 'mimo')\n await assertMimoConfiguration(project, signal);\n}\nexport function parseKimiModelSources(raw, sourceId) {\n if (!record(raw) || !record(raw.providers) || !record(raw.models))\n return [];\n const sources = [];\n for (const [alias, model] of Object.entries(raw.models)) {\n if (!id(alias) || !record(model) || !id(model.model) || typeof model.provider !== 'string')\n continue;\n const provider = raw.providers[model.provider];\n if (!record(provider) ||\n provider.oauth ||\n model.oauth ||\n model.providerId ||\n model.apiKey ||\n model.baseUrl)\n continue;\n const key = typeof provider.apiKey === 'string' && provider.apiKey.length\n ? provider.apiKey\n : provider.env?.KIMI_API_KEY;\n const protocol = model.protocol ?? provider.protocol ?? provider.type;\n if (!literal(key) ||\n !literal(provider.baseUrl) ||\n !['openai', 'openai_responses', 'anthropic', 'kimi'].includes(protocol))\n continue;\n if (authHeaders(provider.customHeaders) || authHeaders(model.customHeaders))\n continue;\n sources.push({\n provider: model.provider,\n credential: { type: 'api', key },\n baseUrl: provider.baseUrl,\n apiType: provider.type !== 'kimi' && protocol === 'anthropic' ? 'anthropic-messages' : 'openai-completions',\n sourceIds: [sourceId, `provider:${model.provider}`],\n nativeModels: [\n {\n remoteId: model.model,\n choice: {\n id: alias,\n label: typeof model.displayName === 'string' ? model.displayName : alias,\n efforts: ['default'],\n },\n },\n ],\n });\n }\n return sources;\n}\n/** MiMo's verbose records are capability metadata, not an account allow-list. */\nexport function parseMimoModelRecords(output) {\n const records = [];\n let route = '', pending = '';\n for (const line of output.split(/\\r?\\n/)) {\n if (!pending && !route && !line.trim())\n continue;\n if (!pending && !route) {\n // Native models emits a human-readable context-window suffix before its JSON.\n // Accept that verified header shape, then bind the ID to the JSON below.\n const header = line\n .trim()\n .match(/^(\\S+)(?: — window [\\d.,]+[A-Za-z]*(?:, budget [\\d.,]+[A-Za-z]*)?, compacts at [\\d.,]+[A-Za-z]*)?$/);\n if (!header || !id(header[1]) || !header[1].includes('/'))\n throw new Error('MiMo 模型目录格式无效');\n route = header[1];\n continue;\n }\n pending += line + '\\n';\n let value;\n try {\n value = JSON.parse(pending);\n }\n catch {\n continue;\n }\n if (!record(value) || `${value.providerID}/${value.id}` !== route)\n throw new Error('MiMo 模型身份不匹配');\n records.push(value);\n route = '';\n pending = '';\n }\n if (route || pending)\n throw new Error('MiMo 模型目录不完整');\n return records;\n}\nexport function mimoModelSources(raw, config, auth, sourceId, ownInline = {}) {\n const sources = [];\n for (const model of raw) {\n const provider = model.providerID, options = config.provider?.[provider]?.options ?? {}, inline = ownInline[provider], credential = options.apiKey === undefined\n ? auth[provider]\n : inline?.key === options.apiKey\n ? { type: 'api', key: inline.key }\n : undefined;\n if (!id(provider) ||\n !id(model.id) ||\n !record(credential) ||\n credential.type !== 'api' ||\n !literal(credential.key))\n continue;\n if (config.disabled_providers?.includes(provider) ||\n (Array.isArray(config.enabled_providers) && !config.enabled_providers.includes(provider)))\n continue;\n // Resolved keys must also occur literally in this CLI's own config; expanded foreign refs are rejected.\n if (authHeaders(options.headers) || authHeaders(model.headers))\n continue;\n const api = model.api;\n if (!record(api) ||\n !id(api.id) ||\n !['@ai-sdk/openai', '@ai-sdk/openai-compatible', '@ai-sdk/anthropic'].includes(api.npm))\n continue;\n // MiMo's built-in Xiaomi login plugin loads its own ApiAuth metadata first;\n // explicit provider options are then merged last by the native resolver.\n const loginBase = provider === 'xiaomi' && auth[provider]?.type === 'api' ? auth[provider].metadata?.base_url : undefined;\n const baseUrl = options.baseURL ?? loginBase ?? api.url;\n if (!literal(baseUrl))\n continue;\n sources.push({\n provider,\n credential: { type: 'api', key: credential.key },\n baseUrl,\n apiType: api.npm === '@ai-sdk/anthropic' ? 'anthropic-messages' : 'openai-completions',\n sourceIds: [options.apiKey === undefined ? sourceId : inline.sourceId, `provider:${provider}`],\n nativeModels: [\n {\n remoteId: api.id,\n choice: {\n id: `${provider}/${model.id}`,\n label: typeof model.name === 'string' ? model.name : `${provider}/${model.id}`,\n efforts: [\n 'default',\n ...EFFORTS.filter((e) => e !== 'default' && record(model.variants?.[e]) && model.variants[e].disabled !== true),\n ],\n },\n },\n ],\n });\n }\n return sources;\n}\nexport async function readFirstPartyModelSources(cli, executable, project, capture, signal) {\n await assertFirstPartyConfiguration(cli, project, signal);\n if (cli === 'kimi') {\n if (['KIMI_CODE_BASE_URL', 'KIMI_CODE_OAUTH_HOST', 'KIMI_OAUTH_HOST', 'KIMI_CODE_CUSTOM_HEADERS'].some((key) => process.env[key]))\n return [];\n const sourceId = join(process.env.KIMI_CODE_HOME ?? join(homedir(), '.kimi-code'), 'config.toml');\n const keyFor = async () => {\n const fingerprints = await Promise.all([\n metadataFileFingerprint(sourceId, signal),\n metadataFileFingerprint(join(dirname(sourceId), 'credentials/kimi-code.json'), signal),\n ]);\n return fingerprints.some((value) => value === undefined)\n ? undefined\n : nativeMetadataKey(executable, project, { cli, sourceId, fingerprints }, signal);\n };\n const key = await keyFor(), cached = kimiOAuthCapabilities.get(key);\n if (cached)\n return readKimiOAuthModelSources(cached, sourceId, signal);\n const raw = parseMetadata(await capture([executable, 'provider', 'list', '--json']));\n signal.throwIfAborted();\n const sources = [\n ...parseKimiModelSources(raw, sourceId),\n ...(await readKimiOAuthModelSources(raw, sourceId, signal)),\n ];\n // Only the proven managed OAuth schema can be rehydrated from a current own\n // token. API providers remain uncached: their native resolver may derive keys.\n if (sources.length === 1 && sources[0].apiType === 'kimi-managed-oauth') {\n const source = sources[0];\n const metadata = {\n providers: {\n 'managed:kimi-code': {\n type: 'kimi',\n baseUrl: source.baseUrl,\n oauth: { storage: 'file', key: 'oauth/kimi-code' },\n },\n },\n models: Object.fromEntries(source.nativeModels.map(({ remoteId, choice }) => [\n choice.id,\n { provider: 'managed:kimi-code', model: remoteId, displayName: choice.label },\n ])),\n };\n // Neither tokens nor arbitrary provider fields enter the capability cache.\n const serialized = JSON.stringify(metadata);\n const token = await readKimiOwnToken(join(dirname(sourceId), 'credentials'), 'kimi-code', signal);\n const configFingerprint = await keyFor();\n if (source.credential.type === 'oauth' &&\n token?.access_token === source.credential.access &&\n ![token?.access_token, token?.refresh_token].some((value) => typeof value === 'string' && value && serialized.includes(value)) &&\n key === configFingerprint)\n kimiOAuthCapabilities.set(key, metadata);\n }\n signal.throwIfAborted();\n return sources;\n }\n if (cli === 'mimo') {\n const env = firstPartyEnvironment(cli);\n const expected = mimoConfigurationPaths();\n const own = {\n authPath: join(expected.data, 'auth.json'),\n auth: await readFirstPartyJson(join(expected.data, 'auth.json')),\n configurations: [],\n };\n // Read current own material before every reuse, including logout/account or route changes.\n // The cache stores neither credentials nor raw native config output.\n for (const path of await mimoConfigurationFiles(project)) {\n own.configurations.push({ path, value: await readFirstPartyJson(path) });\n signal.throwIfAborted();\n }\n const key = await mimoMetadataKey(executable, project, own, signal);\n const cached = mimoMetadataCache.get(key, own);\n if (cached)\n return cached;\n const paths = await capture([executable, 'debug', 'paths'], env);\n signal.throwIfAborted();\n const data = paths.match(/^data\\s+(.+)$/m)?.[1]?.trim();\n if (!data || !isAbsolute(data) || dirname(data) === data)\n return [];\n if (data !== expected.data || paths.match(/^config\\s+(.+)$/m)?.[1]?.trim() !== expected.config)\n throw new MimoConfigurationError('MiMo 配置来源无法确认,请检查配置');\n const authPath = join(data, 'auth.json'), auth = await readFirstPartyJson(authPath);\n signal.throwIfAborted();\n await assertFirstPartyConfiguration(cli, project, signal);\n const config = parseMetadata(await capture([executable, 'debug', 'config'], env));\n signal.throwIfAborted();\n const inline = {};\n for (const path of await mimoConfigurationFiles(project)) {\n const raw = await readFirstPartyJson(path);\n signal.throwIfAborted();\n if (!record(raw.provider))\n continue;\n for (const [provider, value] of Object.entries(raw.provider)) {\n const key = record(value) ? value.options?.apiKey : undefined;\n if (literal(key) && key === config.provider?.[provider]?.options?.apiKey)\n inline[provider] = { key, sourceId: path };\n }\n }\n if (!Object.values(auth).some((value) => record(value) && value.type === 'api' && literal(value.key)) &&\n !Object.keys(inline).length)\n return [];\n await assertFirstPartyConfiguration(cli, project, signal);\n const native = parseMimoModelRecords(await capture([executable, 'models', '--verbose'], env));\n signal.throwIfAborted();\n const sources = mimoModelSources(native, config, auth, authPath, inline);\n // If native discovery overlapped a configuration write, keep the normal result but do\n // not publish it under the older snapshot. Authorization still compares fresh bindings.\n const after = {\n authPath,\n auth: await readFirstPartyJson(authPath),\n configurations: [],\n };\n for (const path of await mimoConfigurationFiles(project)) {\n after.configurations.push({ path, value: await readFirstPartyJson(path) });\n signal.throwIfAborted();\n }\n if (key === (await mimoMetadataKey(executable, project, after, signal)))\n mimoMetadataCache.set(key, sources, after);\n signal.throwIfAborted();\n return sources;\n }\n let route;\n try {\n route = await readClaudeOwnRoute(project, signal);\n }\n catch (error) {\n if (error instanceof ClaudeOwnRouteError)\n return [];\n throw error;\n }\n if (route.kind === 'native' || !route.source)\n return [];\n const raw = await capture(claudeRouteStatusArguments(executable, route));\n signal.throwIfAborted();\n try {\n claudeRouteIdentity(route, raw, 0);\n }\n catch (error) {\n if (error instanceof ClaudeOwnRouteError)\n return [];\n throw error;\n }\n const keyFor = async () => {\n const fingerprints = await Promise.all(route.sourceIds.map((path) => metadataFileFingerprint(path, signal)));\n return fingerprints.some((value) => value === undefined)\n ? undefined\n : nativeMetadataKey(executable, project, { cli, source: route.source, fingerprints }, signal);\n };\n const key = await keyFor();\n if (!claudeHelpCapabilities.get(key)) {\n const help = await capture([executable, '--help']);\n signal.throwIfAborted();\n if (!help.includes('--model') || !help.includes('--output-format') || !help.includes('--settings'))\n throw new Error('Claude 版本不支持原生来源参数,请升级');\n if (key === (await keyFor()))\n claudeHelpCapabilities.set(key, true);\n }\n signal.throwIfAborted();\n return [route.source];\n}\nexport async function discoverFirstPartySources(sources, signal, options = {}) {\n const models = new Map(), scopes = new Map();\n for (const source of sources) {\n signal.throwIfAborted();\n const route = JSON.stringify([\n source.provider,\n source.baseUrl,\n source.apiType,\n source.anthropicAuth,\n source.credential,\n ]);\n let scope = scopes.get(route);\n if (!scope) {\n scope =\n source.apiType === 'kimi-managed-oauth'\n ? await probeKimiOAuthModels(source, { ...options, signal })\n : await probeAccountModels(source, { ...options, signal });\n scopes.set(route, scope);\n }\n signal.throwIfAborted();\n if (scope.state !== 'supported') {\n if (source.claudeRoute === 'proxy')\n throw new ClaudeOwnRouteError(scope.state === 'denied'\n ? 'Claude 本地代理认证失败,请检查代理配置'\n : 'Claude 本地代理模型目录无法确认,请检查代理服务');\n continue;\n }\n const nativeModels = source.nativeFullModelIds\n ? scope.models\n .filter((model) => id(model.id) && !['sonnet', 'opus', 'haiku'].includes(model.id))\n .map((model) => ({\n remoteId: model.id,\n choice: {\n id: model.id,\n label: model.name ?? model.id,\n efforts: ['default'],\n },\n }))\n : source.nativeModels;\n for (const { remoteId, choice } of nativeModels) {\n const available = scope.models.find((model) => model.id === remoteId);\n if (available)\n models.set(choice.id, { ...choice, cost: available.cost });\n }\n }\n return [...models.values()];\n}\n//# sourceMappingURL=first-party-models.js.map","import { createConnection } from 'node:net';\nimport { homedir } from 'node:os';\nimport { join, isAbsolute, resolve } from 'node:path';\nimport { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';\nimport { safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { accountEmail } from \"./account-identity.js\";\nimport { readFirstPartyJson, claudeManagedSettingsPath, } from \"./first-party-models.js\";\nconst record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst literal = (v) => typeof v === 'string' && !!v.trim() && !/[\\s\\x00-\\x1f{}$]/.test(v) && !v.startsWith('!');\nconst authOption = /ANTHROPIC|CLAUDE_CODE_(?:OAUTH|USE_|API)|AWS_|GOOGLE_|CLOUD_ML|API_KEY|BEARER_TOKEN/;\nconst allowed = new Set(['ANTHROPIC_API_KEY', 'ANTHROPIC_AUTH_TOKEN', 'ANTHROPIC_BASE_URL']);\nconst modelOption = /^ANTHROPIC_(?:MODEL|SMALL_FAST_MODEL|DEFAULT_(?:HAIKU|SONNET|OPUS)_MODEL(?:_NAME)?)$/;\nconst officialBase = 'https://api.anthropic.com';\nconst homeOption = /^(?:CLAUDE_CONFIG_DIR|HOME|USERPROFILE|XDG_CONFIG_HOME)$/;\n/** Public errors never interpolate native configuration or credentials. */\nexport class ClaudeOwnRouteError extends Error {\n code = 'CLI_OWN_ACCOUNT_REQUIRED';\n constructor(message = 'Claude 账号来源无法确认,请检查该 CLI 的配置') {\n super(message);\n this.name = 'ClaudeOwnRouteError';\n }\n}\n/** Verified on native 2.1.296: empty settings.env unsets provider selectors for this process. */\nexport function claudeNativeSettingsArguments(configDirectory) {\n return [\n '--settings',\n JSON.stringify({\n apiKeyHelper: '',\n env: {\n ...(configDirectory ? { CLAUDE_CONFIG_DIR: configDirectory } : {}),\n CLAUDE_CODE_USE_BEDROCK: '',\n CLAUDE_CODE_USE_VERTEX: '',\n CLAUDE_CODE_USE_FOUNDRY: '',\n ANTHROPIC_AUTH_TOKEN: '',\n ANTHROPIC_API_KEY: '',\n CLAUDE_CODE_OAUTH_TOKEN: '',\n ANTHROPIC_BASE_URL: officialBase,\n ANTHROPIC_MODEL: '',\n ANTHROPIC_SMALL_FAST_MODEL: '',\n ANTHROPIC_DEFAULT_HAIKU_MODEL: '',\n ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME: '',\n ANTHROPIC_DEFAULT_SONNET_MODEL: '',\n ANTHROPIC_DEFAULT_SONNET_MODEL_NAME: '',\n ANTHROPIC_DEFAULT_OPUS_MODEL: '',\n ANTHROPIC_DEFAULT_OPUS_MODEL_NAME: '',\n },\n }),\n ];\n}\n/** TCP only: a listening proxy remains selected even if its HTTP authentication fails. */\nexport async function claudeLoopbackAvailable(url, signal) {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const socket = createConnection({\n host: url.hostname.replace(/^\\[|\\]$/g, ''),\n port: Number(url.port || (url.protocol === 'https:' ? 443 : 80)),\n });\n let settled = false;\n const done = (value, error) => {\n if (settled)\n return;\n settled = true;\n signal.removeEventListener('abort', abort);\n socket.destroy();\n error !== undefined ? reject(error) : resolve(value);\n };\n const abort = () => done(undefined, signal.reason ?? new Error('查询已取消'));\n signal.addEventListener('abort', abort, { once: true });\n socket.once('connect', () => done(true));\n socket.setTimeout(1200, () => done(false));\n socket.once('error', (error) => {\n if (['ECONNREFUSED', 'ETIMEDOUT', 'EHOSTUNREACH', 'ENETUNREACH'].includes(error.code ?? ''))\n done(false);\n else\n done(undefined, new ClaudeOwnRouteError('Claude 本地代理连接状态无法确认,请检查代理'));\n });\n if (signal.aborted)\n abort();\n });\n}\nexport async function readClaudeOwnRoute(project, signal, options = {}) {\n signal.throwIfAborted();\n const root = process.env.CLAUDE_CONFIG_DIR?.trim() || join(homedir(), '.claude');\n if (!isAbsolute(root))\n throw new ClaudeOwnRouteError('Claude 账号目录必须使用绝对路径');\n const paths = [\n join(root, 'settings.json'),\n join(project, '.claude/settings.json'),\n join(project, '.claude/settings.local.json'),\n ];\n const configured = Object.create(null), env = Object.create(null);\n for (const path of paths) {\n const settings = await readFirstPartyJson(path);\n signal.throwIfAborted();\n Object.assign(configured, settings);\n if (record(settings.env))\n Object.assign(env, settings.env);\n }\n const managed = await readFirstPartyJson(claudeManagedSettingsPath());\n signal.throwIfAborted();\n if (Object.entries(process.env).some(([key, value]) => value && authOption.test(key) && !modelOption.test(key)))\n throw new ClaudeOwnRouteError('Claude 检测到环境账号覆盖,请先在该 CLI 自身设置中明确账号来源');\n if (configured.apiKeyHelper ||\n managed.apiKeyHelper ||\n (record(managed.env) &&\n Object.entries(managed.env).some(([key, value]) => value && (authOption.test(key) || homeOption.test(key)))))\n throw new ClaudeOwnRouteError();\n if (Object.entries(env).some(([key, value]) => value &&\n (homeOption.test(key) || (authOption.test(key) && !allowed.has(key) && !modelOption.test(key)))))\n throw new ClaudeOwnRouteError();\n const key = env.ANTHROPIC_API_KEY, bearer = env.ANTHROPIC_AUTH_TOKEN;\n if (key && bearer)\n throw new ClaudeOwnRouteError('Claude 同时配置两种令牌,请先明确一种登录来源');\n if ((key && !literal(key)) || (bearer && !literal(bearer)))\n throw new ClaudeOwnRouteError();\n let url;\n try {\n url = new URL(env.ANTHROPIC_BASE_URL || officialBase);\n if (!['https:', 'http:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)\n throw new Error();\n }\n catch {\n throw new ClaudeOwnRouteError('Claude 服务地址无效,请检查该 CLI 的配置');\n }\n const loopback = ['localhost', '127.0.0.1', '[::1]', '::1'].includes(url.hostname.toLowerCase());\n if (loopback && !(await (options.available ?? claudeLoopbackAvailable)(url, signal))) {\n signal.throwIfAborted();\n return { kind: 'native', configDirectory: root, sourceIds: [root, 'native:claude-official-login'] };\n }\n signal.throwIfAborted();\n if (!key && !bearer) {\n if (loopback || url.href.replace(/\\/$/, '') !== officialBase)\n throw new ClaudeOwnRouteError('Claude 服务已配置,但无法确认该服务的自身凭据');\n return { kind: 'native', configDirectory: root, sourceIds: [root, 'native:claude-official-login'] };\n }\n return {\n kind: loopback ? 'proxy' : 'api',\n configDirectory: root,\n sourceIds: paths,\n source: {\n provider: 'anthropic',\n credential: { type: 'api', key: bearer || key },\n baseUrl: url.href.replace(/\\/$/, ''),\n apiType: 'anthropic-messages',\n ...(bearer ? { anthropicAuth: 'bearer' } : {}),\n sourceIds: paths,\n nativeModels: [],\n nativeFullModelIds: true,\n claudeRoute: loopback ? 'proxy' : 'api',\n },\n };\n}\nexport function claudeRouteStatusArguments(executable, route) {\n return [\n executable,\n ...(route.kind === 'native' ? claudeNativeSettingsArguments(route.configDirectory) : []),\n 'auth',\n 'status',\n '--json',\n ];\n}\nexport function claudeRouteIdentity(route, raw, exitCode) {\n let status;\n try {\n status = JSON.parse(raw);\n }\n catch {\n throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');\n }\n if (!record(status))\n throw new ClaudeOwnRouteError('Claude 登录状态响应无法确认,请刷新');\n if (status.apiProvider !== undefined && status.apiProvider !== 'firstParty')\n throw new ClaudeOwnRouteError();\n if (route.configDirectory && status.configDirectory !== undefined) {\n const normalized = (path) => process.platform === 'win32' ? resolve(path).toLowerCase() : resolve(path);\n if (typeof status.configDirectory !== 'string' ||\n !isAbsolute(status.configDirectory) ||\n normalized(status.configDirectory) !== normalized(route.configDirectory))\n throw new ClaudeOwnRouteError('Claude 原生账号目录与选定来源不一致');\n }\n if (route.kind === 'native') {\n if ([0, 1].includes(exitCode ?? -1) && status.loggedIn === false)\n return { state: 'unconfigured', summary: 'Claude 官方账号未登录', verification: 'cli' };\n if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== 'claude.ai')\n throw new ClaudeOwnRouteError('Claude 官方登录来源无法确认,请使用原生登录');\n const email = accountEmail(status.email);\n return {\n state: 'authenticated',\n summary: 'Claude 官方账号登录',\n authMethod: 'oauth',\n accountLabel: email,\n logins: [{ providerLabel: 'Claude 官方', authMethod: 'oauth', accountLabel: email }],\n verification: 'cli',\n };\n }\n const expected = route.source?.anthropicAuth === 'bearer' ? 'oauth_token' : 'api_key';\n if (exitCode !== 0 || status.loggedIn !== true || status.authMethod !== expected)\n throw new ClaudeOwnRouteError();\n const label = route.kind === 'proxy' ? 'Claude 本地代理' : 'Claude 自身配置';\n return {\n state: 'authenticated',\n summary: `${label} API 登录`,\n authMethod: 'api',\n logins: [{ providerLabel: label, authMethod: 'api' }],\n verification: 'cli',\n };\n}\n/** Pin one route before spawning; secrets are in a private temporary file, never argv. */\nexport async function prepareClaudeWorkerLaunch(route, argv, stateDirectory, signal) {\n signal.throwIfAborted();\n if (route.kind === 'native')\n return {\n argv: [argv[0], ...claudeNativeSettingsArguments(route.configDirectory), ...argv.slice(1)],\n env: {},\n };\n if (!route.source)\n throw new ClaudeOwnRouteError();\n const parent = join(stateDirectory, 'claude-route');\n await safePiOmpAncestors(parent);\n await mkdir(parent, { recursive: true, mode: 0o700 });\n await safePiOmpAncestors(parent);\n const directory = await mkdtemp(join(parent, 'run-'));\n try {\n const path = join(directory, 'settings.json');\n await writeFile(path, JSON.stringify({\n apiKeyHelper: '',\n env: {\n ...(route.configDirectory ? { CLAUDE_CONFIG_DIR: route.configDirectory } : {}),\n CLAUDE_CODE_USE_BEDROCK: '',\n CLAUDE_CODE_USE_VERTEX: '',\n CLAUDE_CODE_USE_FOUNDRY: '',\n ANTHROPIC_BASE_URL: route.source.baseUrl,\n ANTHROPIC_AUTH_TOKEN: route.source.anthropicAuth === 'bearer' ? route.source.credential.key : '',\n ANTHROPIC_API_KEY: route.source.anthropicAuth === 'bearer' ? '' : route.source.credential.key,\n CLAUDE_CODE_OAUTH_TOKEN: '',\n },\n }), { mode: 0o600, flag: 'wx' });\n signal.throwIfAborted();\n return {\n argv: [argv[0], '--settings', path, ...argv.slice(1)],\n env: {},\n cleanup: () => rm(directory, { recursive: true, force: true }),\n };\n }\n catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n}\n//# sourceMappingURL=claude-own-route.js.map","import { StringDecoder } from 'node:string_decoder';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { accountEmail } from \"./account-identity.js\";\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nconst record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst id = (value) => typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(value);\nconst text = (value) => typeof value === 'string' && !!value.trim() && value.length <= 512 && !/[\\x00-\\x1f\\x7f]/.test(value);\nexport class ClaudeNativeOAuthError extends Error {\n code = 'CLAUDE_NATIVE_OAUTH_UNAVAILABLE';\n constructor(message = 'Claude 原生账号模型或额度暂无法确认,请在账号终端检查后刷新') {\n super(message);\n this.name = 'ClaudeNativeOAuthError';\n }\n}\n/** Native initialize is capability metadata: even an unauthenticated CLI returns models. */\nfunction ownAccount(value) {\n const email = record(value) ? accountEmail(value.email) : undefined;\n if (!record(value) ||\n value.apiProvider !== 'firstParty' ||\n value.tokenSource !== 'claude.ai' ||\n (value.apiKeySource !== undefined && value.apiKeySource !== 'none') ||\n !email)\n throw new ClaudeNativeOAuthError('Claude 尚未通过原生账号登录,请打开账号终端登录');\n if (value.organization !== undefined && !text(value.organization))\n throw new ClaudeNativeOAuthError();\n return { email, ...(value.organization !== undefined && { organization: value.organization }) };\n}\n/**\n * Claude 2.1.296's get_usage can fall back to stale persisted/header observations after a\n * failed endpoint read. That fallback removes `limits`; never authorize from it. A native\n * successful read can still use the CLI's own account-bound snapshot younger than 60s. We add\n * no cache and make no claim of a separate live model entitlement API.\n */\nfunction remainingQuota(value, now) {\n const unknown = () => new ClaudeNativeOAuthError('Claude 原生账号剩余额度暂无法确认,请检查登录与订阅后刷新');\n if (!record(value) ||\n value.rate_limits_available !== true ||\n !['pro', 'max', 'team', 'enterprise'].includes(value.subscription_type) ||\n !record(value.rate_limits) ||\n !Array.isArray(value.rate_limits.limits))\n throw unknown();\n const limits = value.rate_limits;\n const windows = ['five_hour', 'seven_day', 'seven_day_oauth_apps', 'seven_day_opus', 'seven_day_sonnet']\n .filter((key) => limits[key] != null)\n .map((key) => limits[key]);\n // A billing balance or extra-usage wallet is not authorization to spend beyond a plan.\n if (limits.five_hour == null || limits.seven_day == null)\n throw unknown();\n const percentages = [];\n const window = (entry) => {\n if (!record(entry) ||\n typeof entry.utilization !== 'number' ||\n !Number.isFinite(entry.utilization) ||\n entry.utilization < 0 ||\n (entry.resets_at !== null &&\n (typeof entry.resets_at !== 'string' ||\n !Number.isFinite(Date.parse(entry.resets_at)) ||\n Date.parse(entry.resets_at) <= now)))\n throw unknown();\n percentages.push(entry.utilization);\n };\n windows.forEach(window);\n if (limits.model_scoped !== undefined) {\n if (!Array.isArray(limits.model_scoped))\n throw unknown();\n limits.model_scoped.forEach(window);\n }\n for (const entry of limits.limits) {\n if (!record(entry) ||\n typeof entry.percent !== 'number' ||\n !Number.isFinite(entry.percent) ||\n entry.percent < 0 ||\n typeof entry.is_active !== 'boolean')\n throw unknown();\n if (entry.is_active)\n percentages.push(entry.percent);\n }\n // Conservative across all returned plan windows; do not infer that a model bypasses a limit.\n if (percentages.some((percent) => percent >= 100))\n throw new ClaudeNativeOAuthError('Claude 当前账号存在已用尽的限额,请等待重置或检查订阅');\n}\nexport function parseClaudeNativeOAuthCatalog(initialize, usage, now = Date.now()) {\n if (!record(initialize))\n throw new ClaudeNativeOAuthError();\n const account = ownAccount(initialize.account);\n remainingQuota(usage, now);\n if (!Array.isArray(initialize.models))\n throw new ClaudeNativeOAuthError();\n const models = new Map();\n for (const model of initialize.models) {\n if (!record(model) ||\n !id(model.value) ||\n !id(model.resolvedModel) ||\n model.disabled === true ||\n model.hidden === true ||\n model.entitled === false ||\n model.available === false ||\n model.allowed === false)\n continue;\n const efforts = model.supportsEffort === true && Array.isArray(model.supportedEffortLevels)\n ? EFFORTS.filter((effort) => ['low', 'medium', 'high', 'xhigh', 'max'].includes(effort) &&\n model.supportedEffortLevels.includes(effort))\n : [];\n // Default leaves the native CLI's own effort policy untouched.\n const choice = {\n id: model.value,\n label: text(model.displayName) ? model.displayName : model.value,\n efforts: ['default', ...efforts],\n };\n if (models.has(choice.id))\n throw new ClaudeNativeOAuthError('Claude 原生模型目录存在重复选项,请刷新');\n models.set(choice.id, choice);\n }\n if (!models.size)\n throw new ClaudeNativeOAuthError('Claude 原生账号暂未返回可确认的模型,请刷新');\n return { account, models: [...models.values()] };\n}\n/** Only initialize/get_usage controls are sent. No user message, token read, login or model request. */\nexport async function discoverClaudeNativeOAuth(backend, config, executable, cwd, signal, prefixArgs) {\n signal.throwIfAborted();\n // The caller supplies the same native-route overlay used for actual worker execution.\n if (prefixArgs.length !== 2 || prefixArgs[0] !== '--settings')\n throw new ClaudeNativeOAuthError();\n let overlay;\n try {\n overlay = JSON.parse(prefixArgs[1]);\n }\n catch {\n throw new ClaudeNativeOAuthError();\n }\n if (!record(overlay))\n throw new ClaudeNativeOAuthError();\n const control = AbortSignal.any([signal, AbortSignal.timeout(15_000)]);\n const child = backend.spawn({\n argv: [\n executable,\n '--settings',\n JSON.stringify({ ...overlay, disableAllHooks: true, promptSuggestionEnabled: false }),\n '--strict-mcp-config',\n '--mcp-config',\n '{\"mcpServers\":{}}',\n '--print',\n '--input-format',\n 'stream-json',\n '--output-format',\n 'stream-json',\n '--verbose',\n '--no-session-persistence',\n ],\n cwd,\n env: {\n CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: '1',\n DISABLE_TELEMETRY: '1',\n DISABLE_ERROR_REPORTING: '1',\n DISABLE_AUTOUPDATER: '1',\n CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION: 'false',\n },\n stdio: { stdin: 'pipe', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void child.done.catch(() => undefined);\n const inputError = () => undefined;\n child.stdin?.on('error', inputError);\n const write = (request_id, request) => new Promise((resolve, reject) => {\n if (!child.stdin || child.stdin.destroyed)\n return reject(new ClaudeNativeOAuthError());\n child.stdin.write(JSON.stringify({ type: 'control_request', request_id, request }) + '\\n', (error) => error ? reject(new ClaudeNativeOAuthError()) : resolve());\n });\n let bytes = 0;\n const count = (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n bytes += buffer.length;\n if (bytes > Math.min(config.maxRunBytes, 2_097_152))\n throw new ClaudeNativeOAuthError('Claude 账号目录响应过大');\n return buffer;\n };\n const errors = (async () => {\n if (child.stderr)\n for await (const chunk of child.stderr)\n count(chunk);\n })();\n void errors.catch(() => undefined);\n const output = (async () => {\n if (!child.stdout)\n throw new ClaudeNativeOAuthError();\n const decoder = new StringDecoder('utf8');\n let pending = '', expected = 'native-initialize', initialize;\n for await (const chunk of child.stdout) {\n pending += decoder.write(count(chunk));\n let newline;\n while ((newline = pending.indexOf('\\n')) >= 0) {\n const line = pending.slice(0, newline);\n pending = pending.slice(newline + 1);\n let message;\n try {\n message = JSON.parse(line);\n }\n catch {\n throw new ClaudeNativeOAuthError();\n }\n if (!record(message))\n throw new ClaudeNativeOAuthError();\n if (['assistant', 'user', 'stream_event', 'result', 'control_request'].includes(message.type))\n throw new ClaudeNativeOAuthError('Claude 账号查询返回了非元数据事件,已停止查询');\n if (message.type !== 'control_response')\n continue;\n const response = message.response;\n if (!record(response) || response.request_id !== expected)\n throw new ClaudeNativeOAuthError();\n if (response.subtype !== 'success' || !record(response.response))\n throw new ClaudeNativeOAuthError();\n if (expected === 'native-initialize') {\n initialize = response.response;\n ownAccount(response.response.account);\n expected = 'native-usage';\n await write(expected, { subtype: 'get_usage', skip_behaviors: true });\n }\n else\n return parseClaudeNativeOAuthCatalog(initialize, response.response);\n }\n }\n throw new ClaudeNativeOAuthError('Claude 账号查询提前结束,请刷新');\n })();\n void output.catch(() => undefined);\n let abort = () => { };\n const cancelled = new Promise((_, reject) => {\n abort = () => reject(new ClaudeNativeOAuthError(signal.aborted ? 'Claude 账号查询已取消' : 'Claude 账号查询超时,请刷新'));\n control.addEventListener('abort', abort, { once: true });\n if (control.aborted)\n abort();\n });\n const failed = new Promise((_, reject) => {\n void errors.catch(reject);\n void child.done.catch(() => reject(new ClaudeNativeOAuthError()));\n });\n try {\n await Promise.race([\n write('native-initialize', {\n subtype: 'initialize',\n hooks: {},\n sdkMcpServers: [],\n promptSuggestions: false,\n agentProgressSummaries: false,\n }),\n cancelled,\n ]);\n const result = await Promise.race([output, cancelled, failed]);\n control.throwIfAborted();\n return result;\n }\n catch (error) {\n if (error instanceof ClaudeNativeOAuthError)\n throw error;\n signal.throwIfAborted();\n throw new ClaudeNativeOAuthError();\n }\n finally {\n control.removeEventListener('abort', abort);\n try {\n child.terminate();\n if (!(await child.waitForExit()))\n throw new ProcessCleanupUnconfirmedError();\n }\n catch {\n throw new ProcessCleanupUnconfirmedError();\n }\n await Promise.allSettled([output, errors, child.done]);\n child.stdin?.removeListener('error', inputError);\n }\n}\n//# sourceMappingURL=claude-native-oauth.js.map","import { StringDecoder } from 'node:string_decoder';\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nimport { accountEmail } from \"./account-identity.js\";\nconst LIMIT = 64 * 1024;\nconst isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\n/** Allowlisted projection of the installed Codex app-server account/read response. */\nfunction projectAccount(value) {\n if (!isRecord(value))\n return undefined;\n if (value.account === null)\n return { state: 'unconfigured', summary: '尚未登录', verification: 'cli' };\n if (!isRecord(value.account))\n return undefined;\n if (value.account.type === 'apiKey')\n return { state: 'authenticated', summary: 'API 登录', authMethod: 'api', verification: 'cli' };\n if (value.account.type === 'chatgpt')\n return {\n state: 'authenticated',\n summary: '已通过 ChatGPT 登录',\n authMethod: 'oauth',\n accountLabel: accountEmail(value.account.email),\n verification: 'cli',\n };\n return undefined;\n}\n/**\n * Use Codex's effective auth store (file/keyring/auto) rather than an auth.json\n * that may belong to an old account. This handshake sends no task, login, or\n * credential refresh request. Older/unsupported servers safely omit identity.\n */\nexport async function readCodexAccount(backend, config, executable, cwd, signal) {\n signal.throwIfAborted();\n const control = AbortSignal.any([signal, AbortSignal.timeout(4_000)]);\n const child = backend.spawn({\n argv: [executable, 'app-server', '--stdio'],\n cwd,\n stdio: { stdin: 'pipe', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void child.done.catch(() => undefined);\n let bytes = 0;\n const count = (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n bytes += buffer.byteLength;\n if (bytes > LIMIT)\n throw new Error('Account response too large');\n return buffer;\n };\n const inputError = () => undefined;\n child.stdin?.on('error', inputError);\n const write = (value) => new Promise((resolve, reject) => {\n if (!child.stdin || child.stdin.destroyed)\n return reject(new Error('Account stdin unavailable'));\n child.stdin.write(JSON.stringify(value) + '\\n', (error) => (error ? reject(error) : resolve()));\n });\n const stderr = (async () => {\n if (child.stderr)\n for await (const chunk of child.stderr)\n count(chunk);\n })();\n void stderr.catch(() => undefined);\n const stdout = (async () => {\n if (!child.stdout)\n return undefined;\n const decoder = new StringDecoder('utf8');\n let pending = '', initialized = false;\n for await (const chunk of child.stdout) {\n pending += decoder.write(count(chunk));\n let newline;\n while ((newline = pending.indexOf('\\n')) >= 0) {\n const line = pending.slice(0, newline);\n pending = pending.slice(newline + 1);\n let response;\n try {\n response = JSON.parse(line);\n }\n catch {\n continue;\n }\n if (!isRecord(response))\n continue;\n if (response.id === 1 && !initialized) {\n if (response.error || !isRecord(response.result))\n return undefined;\n initialized = true;\n await write({ method: 'initialized', params: {} });\n await write({ id: 2, method: 'account/read', params: { refreshToken: false } });\n }\n else if (response.id === 2 && initialized) {\n return response.error ? undefined : projectAccount(response.result);\n }\n }\n }\n return undefined;\n })();\n void stdout.catch(() => undefined);\n let cancel = () => undefined;\n const cancelled = new Promise((_, reject) => {\n cancel = () => reject(new Error('Account lookup cancelled'));\n control.addEventListener('abort', cancel, { once: true });\n if (control.aborted)\n cancel();\n });\n const failed = new Promise((_, reject) => {\n void stderr.catch(reject);\n void child.done.catch(reject);\n });\n try {\n await Promise.race([\n write({\n id: 1,\n method: 'initialize',\n params: {\n clientInfo: { name: 'cli_worker_account_status', title: 'CLI Worker Account Status', version: '1' },\n capabilities: { experimentalApi: false, requestAttestation: false, explicitGatewayOauth: true },\n },\n }),\n cancelled,\n ]);\n return await Promise.race([stdout, cancelled, failed]);\n }\n catch {\n signal.throwIfAborted();\n return undefined;\n }\n finally {\n control.removeEventListener('abort', cancel);\n let exited = false;\n try {\n child.terminate();\n exited = await child.waitForExit();\n }\n catch {\n throw new ProcessCleanupUnconfirmedError();\n }\n if (!exited)\n throw new ProcessCleanupUnconfirmedError();\n await Promise.allSettled([stdout, stderr, child.done]);\n child.stdin?.removeListener('error', inputError);\n }\n}\n//# sourceMappingURL=codex-account.js.map","import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { localAccountIdentity } from \"./account-identity.js\";\nimport { readFirstPartyJson } from \"./first-party-models.js\";\nimport { groupAgyModels } from \"../shared/models.js\";\n/** The native consumer directory is account-scoped, not a public model cache. */\nexport async function assertAgyNativeAccountRoute(signal, home = homedir()) {\n signal.throwIfAborted();\n const settings = await readFirstPartyJson(join(home, '.gemini/antigravity-cli/settings.json'));\n signal.throwIfAborted();\n const configured = (value) => value !== undefined &&\n value !== null &&\n value !== '' &&\n !(Array.isArray(value) && !value.length) &&\n !(typeof value === 'object' && !Object.keys(value).length);\n if (configured(settings.modelProvider) ||\n configured(settings.customModels) ||\n configured(settings.customModelsConfig))\n throw new Error('Antigravity 当前自定义模型来源尚未支持,请使用原生账号模型');\n}\nexport async function discoverAgyAccountModels(capture, signal, home = homedir(), identitySource = localAccountIdentity({ home })) {\n await assertAgyNativeAccountRoute(signal, home);\n const identity = await identitySource('antigravity', signal);\n if (identity?.state !== 'authenticated')\n throw new Error('请先登录 Antigravity');\n const output = await capture();\n signal.throwIfAborted();\n const rows = output.split(/\\r?\\n/).flatMap((line) => {\n const [id, ...labels] = line.split('\\t');\n const label = labels.join(' ').trim();\n return id && label && /^[A-Za-z0-9_.:/-]+$/.test(id) ? [{ id, label }] : [];\n });\n if (!rows.length)\n throw new Error('Antigravity 当前账号暂无可用模型,请刷新');\n return groupAgyModels(rows);\n}\n//# sourceMappingURL=agy-models.js.map","import { homedir } from 'node:os';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { win32 } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { captureCatalogMetadata } from \"./adapters.js\";\nimport { accountEmail, localAccountIdentity, } from \"./account-identity.js\";\nconst accountSnapshots = new AsyncLocalStorage();\n/** Only the initial binding and model precheck may share a native projection.\n * The final binding must be read after this operation has exited its scope. */\nexport async function withWindowsAgyAccountSnapshot(backend, config, signal, operation) {\n signal.throwIfAborted();\n const scope = { backend, config, signal, active: true };\n return accountSnapshots.run(scope, async () => {\n try {\n return await operation();\n }\n finally {\n // Async descendants can retain the ALS store; they must not reuse a\n // projection after the originating operation has completed or failed.\n scope.active = false;\n scope.reading = undefined;\n }\n });\n}\n/** Secret-free projection of the exact native Windows credential target. */\nexport function projectWindowsAgyAccount(raw) {\n try {\n if (raw.length > 4096)\n throw new Error('Invalid native account projection');\n const value = JSON.parse(raw);\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw new Error('Invalid projection');\n if (value.state === 'authenticated')\n return {\n identity: {\n state: 'authenticated',\n authMethod: 'oauth',\n verification: 'local',\n summary: '已登录 Antigravity',\n accountLabel: accountEmail(value.email),\n },\n ...(typeof value.principalHash === 'string' && /^[a-f0-9]{64}$/.test(value.principalHash)\n ? { principalHash: value.principalHash }\n : {}),\n };\n if (value.state === 'unconfigured')\n return { identity: { state: 'unconfigured', verification: 'local', summary: '尚未登录 Antigravity' } };\n if (value.state === 'unauthenticated')\n return {\n identity: { state: 'unauthenticated', verification: 'local', summary: '本地登录已过期,请重新登录' },\n };\n if (value.state === 'unknown')\n return {\n identity: { state: 'unknown', verification: 'local', summary: '登录格式未知,请打开账号终端' },\n };\n }\n catch {\n /* Fixed safe diagnosis below. */\n }\n return {\n identity: {\n state: 'unavailable',\n verification: 'local',\n summary: '无法读取 Windows 原生账号,请在登录的桌面会话中重试',\n },\n };\n}\nexport async function readWindowsAgyAccount(backend, config, signal) {\n signal.throwIfAborted();\n const scope = accountSnapshots.getStore();\n if (!scope?.active || scope.backend !== backend || scope.config !== config || scope.signal !== signal)\n return readNativeWindowsAgyAccount(backend, config, signal);\n const reading = (scope.reading ??= readNativeWindowsAgyAccount(backend, config, signal));\n try {\n const account = await reading;\n signal.throwIfAborted();\n // A consumer cannot mutate another precheck's safe projection.\n return { ...account, identity: { ...account.identity } };\n }\n catch (error) {\n if (scope.reading === reading)\n scope.reading = undefined;\n throw error;\n }\n}\nasync function readNativeWindowsAgyAccount(backend, config, signal) {\n signal.throwIfAborted();\n const raw = await captureCatalogMetadata(backend, config, [\n win32.join(process.env.SystemRoot ?? 'C:\\\\Windows', 'System32/WindowsPowerShell/v1.0/powershell.exe'),\n '-NoLogo',\n '-NoProfile',\n '-NonInteractive',\n '-File',\n fileURLToPath(new URL('./windows-agy-account.ps1', import.meta.url)),\n ], homedir(), signal, undefined, [0, 1]);\n signal.throwIfAborted();\n return projectWindowsAgyAccount(raw);\n}\nexport function nativeAgyAccountIdentity(backend, config, platform = process.platform) {\n if (platform !== 'win32')\n return localAccountIdentity();\n return async (cli, signal) => cli === 'antigravity' ? (await readWindowsAgyAccount(backend, config, signal)).identity : undefined;\n}\n//# sourceMappingURL=agy-windows-account.js.map","import { chmod, lstat, mkdir, rename, rm, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { randomUUID } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { isAbsolute, join } from 'node:path';\nimport { StringDecoder } from 'node:string_decoder';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { activeOpenCodeCredential, readOpenCodeProfile, snapshotOpenCodeAuth, OPENCODE_OAUTH_UNSUPPORTED, } from \"./opencode-native.js\";\nimport { probeAccountModels } from './account-models.mjs';\nconst object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst modelID = (id) => /^[A-Za-z0-9_.:-]+\\/[^\\s\\x00-\\x1f]+$/.test(id);\nconst sessionID = (id) => /^ses_[A-Za-z0-9]+$/.test(id);\n/** Compatibility only: Host credentials are never resolved for OpenCode. */\nexport async function openCodeCredentialEnvironment(_config) {\n return {};\n}\nexport function openCodeAuthDirectory(stateDirectory) {\n return join(stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), 'accounts', 'opencode', 'data');\n}\n/** Only the auth data root is shared; each process keeps its own DB/config/cache. */\nexport async function openCodeEnvironment(stateDirectory, config, authDirectory = join(stateDirectory, 'data'), _managedCredentials = false, modelsPath) {\n if (!isAbsolute(stateDirectory) || !isAbsolute(authDirectory))\n throw new Error('OpenCode state and auth directories must be absolute');\n const paths = ['config', 'data', 'cache', 'state', 'tmp'].map((name) => join(stateDirectory, name));\n for (const path of [stateDirectory, ...paths, authDirectory, join(authDirectory, 'opencode')]) {\n await mkdir(path, { recursive: true, mode: 0o700 });\n const info = await lstat(path);\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('OpenCode state directory must not be a symlink');\n await chmod(path, 0o700);\n }\n const configFile = join(stateDirectory, 'config', 'cliworker.json');\n const { provider, ...inline } = config;\n const temporary = join(stateDirectory, 'config', `.cliworker-${randomUUID()}.tmp`);\n try {\n await writeFile(temporary, JSON.stringify(provider ? { provider } : {}) + '\\n', {\n flag: 'wx',\n mode: 0o600,\n });\n // Replace an existing link itself, rather than following it from the unsandboxed Host.\n await rename(temporary, configFile);\n }\n finally {\n await rm(temporary, { force: true });\n }\n const nativeModels = modelsPath ?? join(homedir(), '.cache', 'opencode', 'models.json');\n return {\n XDG_CONFIG_HOME: paths[0],\n XDG_DATA_HOME: authDirectory,\n XDG_CACHE_HOME: paths[2],\n XDG_STATE_HOME: paths[3],\n TMPDIR: paths[4],\n OPENCODE_DB: join(stateDirectory, 'data', 'opencode.db'),\n OPENCODE_CONFIG: configFile,\n OPENCODE_CONFIG_DIR: paths[0],\n OPENCODE_CONFIG_CONTENT: JSON.stringify({\n autoupdate: false,\n share: 'disabled',\n snapshot: false,\n plugin: [],\n mcp: {},\n lsp: false,\n formatter: false,\n ...inline,\n }),\n OPENCODE_PERMISSION: JSON.stringify(config.permission ?? { '*': 'deny' }),\n OPENCODE_AUTO_SHARE: '0',\n OPENCODE_DISABLE_AUTOUPDATE: '1',\n OPENCODE_DISABLE_PRUNE: '1',\n OPENCODE_DISABLE_SHARE: '1',\n // Native OAuth refresh hooks are built-ins. External plugins remain disabled.\n OPENCODE_DISABLE_DEFAULT_PLUGINS: '0',\n // Clear inherited overrides; native mode reads the same private auth.json as login.\n OPENCODE_AUTH_CONTENT: '',\n OPENCODE_DISABLE_PROJECT_CONFIG: '1',\n OPENCODE_DISABLE_CLAUDE_CODE: '1',\n OPENCODE_DISABLE_EXTERNAL_SKILLS: '1',\n OPENCODE_DISABLE_LSP_DOWNLOAD: '1',\n OPENCODE_DISABLE_MODELS_FETCH: '1',\n OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: '1',\n OPENCODE_PURE: '1',\n ...(existsSync(nativeModels) ? { OPENCODE_MODELS_PATH: nativeModels } : {}),\n };\n}\nexport async function prepareOpenCode(input) {\n const { executable, project, preference, mode, prompt, conversationId, stateDirectory } = input;\n if (!modelID(preference.model))\n throw new Error('OpenCode requires an explicitly selected provider/model');\n if (!EFFORTS.includes(preference.effort))\n throw new Error('Unsupported OpenCode effort value');\n if (!isAbsolute(project) || !prompt.trim())\n throw new Error('OpenCode requires a project and prompt');\n if (mode !== 'plan' && mode !== 'accept-edits')\n throw new Error('Unsupported OpenCode task mode');\n if (conversationId && !sessionID(conversationId))\n throw new Error('Invalid native OpenCode session ID');\n const selectedProvider = preference.model.slice(0, preference.model.indexOf('/'));\n const source = input.authDirectory ?? openCodeAuthDirectory();\n const profile = await readOpenCodeProfile(source, input);\n if (profile.auth[selectedProvider]?.type === 'oauth')\n throw new Error(OPENCODE_OAUTH_UNSUPPORTED);\n if (!activeOpenCodeCredential(profile.auth[selectedProvider]))\n throw new Error('OpenCode 所选提供商没有有效账号配置,请先登录');\n const snapshot = await snapshotOpenCodeAuth(source, profile.auth, [selectedProvider], input.signal);\n const env = await openCodeEnvironment(stateDirectory, {\n model: preference.model,\n small_model: preference.model,\n enabled_providers: [selectedProvider],\n ...(profile?.providers[selectedProvider]\n ? { provider: { [selectedProvider]: profile.providers[selectedProvider] } }\n : {}),\n permission: {\n '*': 'ask',\n read: 'allow',\n glob: 'allow',\n grep: 'allow',\n list: 'allow',\n edit: mode === 'plan' ? 'deny' : 'allow',\n bash: mode === 'plan' ? 'deny' : 'ask',\n task: 'deny',\n skill: 'deny',\n question: 'deny',\n },\n }, snapshot, false, profile?.modelsPath);\n return {\n argv: [\n executable,\n 'run',\n '--format',\n 'json',\n '--model',\n preference.model,\n '--agent',\n mode === 'plan' ? 'plan' : 'build',\n '--dir',\n project,\n '--title',\n 'CLI Worker',\n ...(preference.effort !== 'default' ? ['--variant', preference.effort] : []),\n ...(conversationId ? ['--session', conversationId] : []),\n '--',\n prompt,\n ],\n env,\n };\n}\n/** Native models --verbose consists of provider/model lines and pretty JSON objects. */\nfunction parseOpenCodeRecords(output) {\n if (Buffer.byteLength(output) > 4_194_304)\n throw new Error('OpenCode model catalogue exceeds limit');\n const models = [], ids = new Set();\n let id = '', pending = '';\n for (const raw of output.split(/\\r?\\n/)) {\n const line = raw.trim();\n if (!pending && !line)\n continue;\n if (!pending && !id) {\n if (!modelID(line))\n throw new Error('Invalid OpenCode model catalogue entry');\n id = line;\n continue;\n }\n pending += raw + '\\n';\n let model;\n try {\n model = JSON.parse(pending);\n }\n catch {\n continue;\n }\n if (!object(model) ||\n typeof model.id !== 'string' ||\n typeof model.providerID !== 'string' ||\n `${model.providerID}/${model.id}` !== id)\n throw new Error('OpenCode model identity does not match its catalogue entry');\n if (ids.has(id)) {\n id = '';\n pending = '';\n continue;\n }\n if (model.variants !== undefined && !object(model.variants))\n throw new Error('Invalid OpenCode model variants');\n ids.add(id);\n models.push({\n native: model,\n choice: {\n id,\n label: typeof model.name === 'string' ? model.name : id,\n efforts: [\n 'default',\n ...EFFORTS.filter((effort) => effort !== 'default' && Object.hasOwn(model.variants ?? {}, effort)),\n ],\n },\n });\n id = '';\n pending = '';\n }\n if (id || pending)\n throw new Error('Incomplete OpenCode model catalogue');\n return models;\n}\n/** CLI default zero prices are not affirmative price evidence. */\nexport function parseOpenCodeModels(output) {\n return parseOpenCodeRecords(output).map(({ choice }) => ({ ...choice, cost: 'unknown' }));\n}\nfunction configuredCost(value) {\n if (!object(value))\n return 'unknown';\n const cost = value.cost ?? value.pricing;\n if (object(cost)) {\n const number = (rate) => typeof rate === 'number'\n ? rate\n : typeof rate === 'string' && /^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(rate)\n ? Number(rate)\n : NaN;\n const input = number(cost.input), output = number(cost.output);\n const additional = Object.entries(cost)\n .filter(([key]) => !['input', 'output', 'free'].includes(key))\n .flatMap(([, rate]) => (object(rate) ? Object.values(rate).map(number) : [number(rate)]));\n if (input > 0 || output > 0 || additional.some((rate) => rate > 0))\n return 'paid';\n if (!Number.isFinite(input) ||\n !Number.isFinite(output) ||\n input < 0 ||\n output < 0 ||\n additional.some((rate) => !Number.isFinite(rate) || rate < 0))\n return 'unknown';\n return 'free';\n }\n return value.free === true || value.is_free === true ? 'free' : 'unknown';\n}\nexport async function discoverOpenCode(executable, capture, stateDirectory, authDirectory, _managedCredentials = false, options = {}) {\n options.signal?.throwIfAborted();\n const source = authDirectory ?? openCodeAuthDirectory();\n const profile = await readOpenCodeProfile(source, options);\n const providers = Object.keys(profile.auth).filter((id) => profile.auth[id]?.type === 'api' &&\n activeOpenCodeCredential(profile.auth[id]) &&\n !profile.disabled.includes(id) &&\n (!profile.enabled || profile.enabled.includes(id)) &&\n !(id === 'opencode' && profile.auth[id].key === 'public'));\n if (!providers.length) {\n if (Object.values(profile.auth).some((auth) => auth?.type === 'oauth'))\n throw new Error(OPENCODE_OAUTH_UNSUPPORTED);\n return [];\n }\n const snapshot = await snapshotOpenCodeAuth(source, profile.auth, providers, options.signal);\n const nativeProviderConfig = Object.fromEntries(providers.filter((id) => profile.providers[id]).map((id) => [id, profile.providers[id]]));\n const env = await openCodeEnvironment(stateDirectory, {\n enabled_providers: providers,\n provider: nativeProviderConfig,\n permission: { '*': 'deny' },\n }, snapshot, false, profile.modelsPath);\n const records = parseOpenCodeRecords(await capture([executable, 'models', '--verbose'], env));\n options.signal?.throwIfAborted();\n const scoped = (native) => {\n const provider = native.providerID, config = profile.providers[provider] ?? {};\n const oauthCodex = profile.auth[provider]?.type === 'oauth' && provider === 'openai';\n const baseUrl = oauthCodex\n ? 'https://chatgpt.com/backend-api'\n : (config.options?.baseURL ?? native.api?.url ?? profile.catalog[provider]?.api);\n const apiType = native.api?.npm === '@ai-sdk/anthropic' ? 'anthropic-messages' : undefined;\n const oauth = profile.auth[provider]?.type === 'oauth';\n const key = JSON.stringify([provider, oauth ? 'oauth-account' : baseUrl, oauth ? '' : apiType]);\n const authHeader = (headers) => object(headers) &&\n Object.keys(headers).some((name) => /authorization|api[-_]?key|token|cookie|openai-organization|openai-project/i.test(name));\n const blocked = authHeader(native.headers) ||\n authHeader(config.options?.headers) ||\n (oauthCodex && native.api?.npm !== '@ai-sdk/openai');\n return { provider, baseUrl, apiType, key, blocked };\n };\n const groups = new Map();\n for (const entry of records) {\n const route = scoped(entry.native);\n if (route.blocked || !providers.includes(route.provider))\n continue;\n const group = groups.get(route.key) ?? { route, entries: [] };\n group.entries.push(entry);\n groups.set(route.key, group);\n }\n const scopes = new Map();\n await Promise.all([...groups.values()].map(async ({ route, entries }) => {\n const { provider, baseUrl, apiType, key } = route, auth = profile.auth[provider], config = profile.providers[provider] ?? {};\n const explicit = entries\n .filter(({ native }) => object(config.models?.[native.id]) || config.whitelist?.includes(native.id))\n .map(({ native }) => native.api?.id ?? native.id);\n const scope = await probeAccountModels({\n provider,\n credential: auth.type === 'oauth'\n ? { type: 'oauth', access: auth.access, expires: auth.expires, accountId: auth.accountId }\n : { type: 'api', key: auth.key },\n baseUrl,\n apiType,\n customModelIds: [...new Set(explicit)],\n verifiedModelIds: [],\n }, { ...options.probeOptions, signal: options.signal ?? options.probeOptions?.signal });\n scopes.set(key, scope);\n }));\n options.signal?.throwIfAborted();\n const models = [];\n for (const { choice, native } of records) {\n const route = scoped(native);\n if (route.blocked)\n continue;\n const scope = scopes.get(route.key);\n if (scope?.state !== 'supported')\n continue;\n const apiId = native.api?.id ?? native.id;\n const supported = scope.models.find((model) => model.id === apiId || model.id === native.id);\n if (!supported)\n continue;\n const secrets = [\n profile.auth[native.providerID]?.key,\n profile.auth[native.providerID]?.access,\n profile.auth[native.providerID]?.refresh,\n ].filter((value) => typeof value === 'string' && !!value);\n if (secrets.some((secret) => choice.id.includes(secret) || String(apiId).includes(secret)))\n continue;\n const explicit = profile.providers[native.providerID]?.models?.[native.id];\n const declaredCost = explicit === undefined\n ? configuredCost(profile.catalog[native.providerID]?.models?.[apiId])\n : configuredCost(explicit);\n const subscription = native.providerID.includes('coding-plan') || native.providerID === 'opencode-go';\n const cost = subscription && profile.auth[native.providerID]?.type === 'api'\n ? supported.cost === 'paid'\n ? 'paid'\n : 'unknown'\n : supported.cost !== 'unknown'\n ? supported.cost\n : profile.auth[native.providerID]?.type === 'oauth' || subscription\n ? 'unknown'\n : declaredCost;\n // Zen's anonymous free loader is not an account. Even with a key, a zero-price\n // public route has no affirmative headless compatibility evidence in 1.18.21.\n const endpoint = profile.providers[native.providerID]?.options?.baseURL ??\n native.api?.url ??\n profile.catalog[native.providerID]?.api;\n let zen = false;\n try {\n zen = new URL(endpoint).hostname === 'opencode.ai';\n }\n catch {\n /* unknown endpoints are not proof of a Zen route */\n }\n if (native.providerID === 'opencode' && zen && (native.cost?.input === 0 || cost === 'free'))\n continue;\n models.push({\n ...choice,\n label: secrets.some((secret) => choice.label.includes(secret)) ? native.id : choice.label,\n cost,\n });\n }\n return models.sort((a, b) => Number(b.cost === 'free') - Number(a.cost === 'free') || a.id.localeCompare(b.id));\n}\n/** Native OpenCode JSONL; success needs clean EOF after stop, identity and no failed tool. */\nexport class OpenCodeProtocol {\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n ended = false;\n stopped = false;\n sawStep = false;\n failure;\n response = '';\n steps = new Map();\n textParts = new Map();\n openTools = new Set();\n conversationId;\n result;\n constructor(emit, identify, maxLineBytes) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n if (this.ended)\n throw new Error('OpenCode event received after EOF');\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let newline;\n while ((newline = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, newline).trim();\n this.pending = this.pending.slice(newline + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('OpenCode event exceeds maxLineBytes');\n }\n end() {\n if (this.ended)\n return;\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n this.ended = true;\n if (!this.conversationId)\n return;\n if (!this.failure && !(this.stopped && this.sawStep && this.openTools.size === 0))\n return;\n const status = this.failure ? 'ERROR' : 'SUCCESS';\n this.result = {\n conversationId: this.conversationId,\n status,\n response: this.response,\n ...(this.failure ? { error: this.failure } : {}),\n };\n this.emit({ kind: 'result', text: this.response, state: status });\n }\n step(id) {\n if (!this.steps.has(id))\n this.steps.set(id, this.steps.size);\n return this.steps.get(id);\n }\n id(value) {\n if (value === undefined)\n return;\n if (typeof value !== 'string' || !sessionID(value))\n throw new Error('Invalid OpenCode session ID');\n if (this.conversationId && this.conversationId !== value)\n throw new Error('OpenCode session ID changed during a run');\n if (!this.conversationId) {\n this.identify(value);\n this.conversationId = value;\n }\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('OpenCode event exceeds maxLineBytes');\n let event;\n try {\n event = JSON.parse(line);\n }\n catch {\n throw new Error('Invalid OpenCode JSONL event');\n }\n if (!object(event) || typeof event.type !== 'string')\n throw new Error('Invalid OpenCode event envelope');\n this.id(event.sessionID);\n const part = object(event.part) ? event.part : undefined;\n if (part)\n this.id(part.sessionID);\n if (this.stopped && event.type !== 'error')\n throw new Error('Unexpected OpenCode event after final stop');\n if (event.type === 'step_start') {\n this.sawStep = true;\n this.emit({ kind: 'status', text: 'OpenCode 工作中' });\n }\n else if (event.type === 'text') {\n if (!part || typeof part.id !== 'string' || typeof part.text !== 'string')\n throw new Error('Invalid OpenCode text part');\n const previous = this.textParts.get(part.id);\n if (previous !== undefined) {\n if (previous !== part.text)\n throw new Error('OpenCode text part changed after completion');\n return;\n }\n this.textParts.set(part.id, part.text);\n this.response = part.text;\n this.emit({ kind: 'assistant', step: this.step(part.id), text: part.text });\n }\n else if (event.type === 'tool_use') {\n if (!part || typeof part.tool !== 'string' || !object(part.state))\n throw new Error('Invalid OpenCode tool event');\n const id = part.callID ?? part.id, state = part.state.status;\n if (typeof id !== 'string' || !['pending', 'running', 'completed', 'error'].includes(state))\n throw new Error('Invalid OpenCode tool state');\n if (state === 'completed' || state === 'error')\n this.openTools.delete(id);\n else\n this.openTools.add(id);\n if (state === 'error')\n this.failure ??=\n typeof part.state.error === 'string' ? part.state.error : 'OpenCode 工具执行失败或权限被拒绝';\n this.emit({\n kind: 'tool',\n step: this.step(id),\n text: part.tool,\n detail: JSON.stringify(part.state),\n state: state === 'error' ? 'FAILED' : state === 'completed' ? 'COMPLETED' : 'RUNNING',\n });\n }\n else if (event.type === 'step_finish') {\n if (!part || typeof part.reason !== 'string' || !this.sawStep)\n throw new Error('Invalid OpenCode step finish');\n this.stopped = part.reason === 'stop';\n if (!['stop', 'tool-calls'].includes(part.reason))\n this.failure ??= `OpenCode 未正常完成:${part.reason}`;\n }\n else if (event.type === 'error') {\n const message = typeof event.error?.data?.message === 'string'\n ? event.error.data.message\n : (JSON.stringify(event.error ?? 'OpenCode error') ?? 'OpenCode error');\n this.failure = message;\n this.emit({ kind: 'diagnostic', text: message });\n }\n else {\n if (event.type === 'permission.asked' ||\n (event.type === 'permission.replied' && event.properties?.reply === 'reject'))\n this.failure ??= 'OpenCode 需要额外授权,未执行的操作不能视为完成';\n if (event.type !== 'reasoning')\n this.emit({ kind: 'diagnostic', text: `OpenCode 事件:${event.type}`, detail: line });\n }\n }\n}\n//# sourceMappingURL=opencode-adapter.js.map","import { parseEnv } from 'node:util';\n/** Deliberately bounded subset shared by Host discovery and the sandbox. Native\n * python-dotenv also accepts quoted keys and multiline forms; accepting those\n * without exactly matching its parser could change the pinned account home. */\nexport function parseHermesOwnEnvironment(source) {\n for (const line of source.split(/\\r?\\n/)) {\n if (!line.trim() || /^\\s*#/.test(line))\n continue;\n if (!/^\\s*(?:export\\s+)?[A-Za-z_][A-Za-z0-9_]*\\s*=/.test(line))\n throw new Error('Hermes .env 格式无法安全读取,请使用普通 KEY=value 配置');\n }\n const result = Object.fromEntries(Object.entries(parseEnv(source)).filter((entry) => typeof entry[1] === 'string'));\n // An empty assignment also overrides the process value and re-enables native\n // global fallback. Check presence, never truthiness, for every selector.\n for (const key of ['HOME', 'HERMES_HOME', 'HERMES_PROFILE', 'HERMES_MANAGED_DIR'])\n if (Object.hasOwn(result, key))\n throw new Error('Hermes 账号环境不能重定向账号目录');\n if (Object.values(result).some((value) => value.includes('${')))\n throw new Error('Hermes .env 暂不支持环境变量插值');\n return result;\n}\n//# sourceMappingURL=hermes-env.js.map","const record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst invalid = () => new Error('Hermes 账号退出记录无法确认,请检查原生账号设置');\n/** Native auth.py is_source_suppressed accepts provider-scoped lists and legacy\n * dict keys. Removal retains config values; match the exact native source only. */\nexport function hermesSourceSuppressed(auth, provider, source) {\n if (!record(auth))\n throw invalid();\n const suppressed = auth.suppressed_sources;\n if (suppressed === undefined)\n return false;\n if (!record(suppressed))\n throw invalid();\n const sources = suppressed[provider];\n if (sources === undefined)\n return false;\n if (Array.isArray(sources)) {\n if (sources.some((item) => typeof item !== 'string'))\n throw invalid();\n return sources.includes(source);\n }\n if (record(sources))\n return Object.hasOwn(sources, source);\n throw invalid();\n}\n/** Safe in-memory view only. Never rewrites native auth, config or environment. */\nexport function projectHermesUnsuppressedAuth(auth) {\n if (!record(auth))\n throw invalid();\n if (auth.suppressed_sources !== undefined) {\n if (!record(auth.suppressed_sources))\n throw invalid();\n for (const provider of Object.keys(auth.suppressed_sources))\n hermesSourceSuppressed(auth, provider, '');\n }\n const providers = { ...(record(auth.providers) ? auth.providers : {}) };\n // Exact seed keys in native credential_pool._seed_from_singletons.\n for (const [provider, source] of [\n ['nous', 'device_code'],\n ['openai-codex', 'device_code'],\n ['xai-oauth', 'device_code'],\n ['minimax-oauth', 'oauth'],\n ])\n if (hermesSourceSuppressed(auth, provider, source))\n delete providers[provider];\n const pool = auth.credential_pool;\n if (pool !== undefined && !record(pool))\n throw invalid();\n return {\n ...auth,\n providers,\n ...(pool === undefined\n ? {}\n : {\n credential_pool: Object.fromEntries(Object.entries(pool).map(([provider, entries]) => {\n if (!Array.isArray(entries))\n throw invalid();\n return [\n provider,\n entries.filter((entry) => !record(entry) || !hermesSourceSuppressed(auth, provider, entry.source ?? 'manual')),\n ];\n })),\n }),\n };\n}\n/** Only the selected provider's env:<NAME> record controls that provider's key. */\nexport function hermesUnsuppressedEnvironment(auth, env, provider) {\n return Object.fromEntries(Object.entries(env).filter(([name]) => !hermesSourceSuppressed(auth, provider, `env:${name}`)));\n}\n//# sourceMappingURL=hermes-suppression.js.map","import { createHash } from 'node:crypto';\nimport { accountEmail } from \"./account-identity.js\";\nconst object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst text = (value) => typeof value === 'string' && !!value.trim() && value.length <= 32768 && !/[\\x00-\\x20\\x7f]/.test(value);\nexport const NOUS_PORTAL = 'https://portal.nousresearch.com';\nexport const NOUS_INFERENCE = 'https://inference-api.nousresearch.com/v1';\nconst canonical = (value, expected) => typeof value === 'string' && value.replace(/\\/+$/, '') === expected;\nexport class HermesNousError extends Error {\n constructor(message) {\n super(message);\n this.name = 'HermesNousError';\n }\n}\nconst invalid = () => {\n throw new HermesNousError('Nous 当前账号无法确认,请在 Hermes 登录设置中检查');\n};\n/** Unsigned native JWT claims are local identity/expiry metadata, never remote proof. */\nfunction claims(token) {\n if (!text(token) || !/^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$/.test(token))\n return {};\n const bytes = Buffer.from(token.split('.')[1], 'base64url');\n try {\n const value = JSON.parse(bytes.toString('utf8'));\n return object(value) ? value : {};\n }\n catch {\n return {};\n }\n finally {\n bytes.fill(0);\n }\n}\nfunction scopes(value) {\n return typeof value === 'string' ? value.split(/[\\s,]+/) : Array.isArray(value) ? value.flatMap(scopes) : [];\n}\nfunction unavailable(row) {\n if (row.disabled === true || row.status === 'exhausted' || row.last_status === 'dead')\n return true;\n if (row.last_status === 'exhausted') {\n const until = Number(row.last_error_reset_at);\n if (!Number.isFinite(until) || until <= 0 || until > Date.now() / 1000)\n return true;\n }\n return false;\n}\n/** Hermes 6c80c327: flat providers.nous, native device-code pool and invoke JWT.\n * No refresh-only, guest, fallback store or different pooled principal is promoted. */\nexport function projectHermesNousSource(auth, minTtlSeconds = 0, options = {}) {\n const state = auth?.providers?.nous;\n if (!object(state) ||\n auth.active_provider !== 'nous' ||\n state.auth_method === 'anonymous' ||\n state.account_tier === 'anonymous' ||\n (state.last_auth_error?.relogin_required === true && !state.access_token && !state.refresh_token) ||\n unavailable(state))\n invalid();\n const access = state.access_token, agentKey = state.agent_key;\n const token = claims(agentKey);\n if (!text(access) ||\n !text(agentKey) ||\n access !== agentKey ||\n token.account_tier === 'anonymous' ||\n !text(token.sub) ||\n !text(token.org_id) ||\n !text(token.iss) ||\n typeof token.exp !== 'number' ||\n !Number.isFinite(token.exp) ||\n ![...scopes(state.scope), ...scopes(token.scope), ...scopes(token.scp)].includes('inference:invoke'))\n invalid();\n if (!options.allowExpired && token.exp * 1000 <= Date.now() + minTtlSeconds * 1000)\n throw new HermesNousError('Nous 登录即将过期或已过期,请在 Hermes 登录设置中重新登录');\n if (!canonical(state.portal_base_url, NOUS_PORTAL) || !canonical(state.inference_base_url, NOUS_INFERENCE))\n throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');\n const pool = auth.credential_pool?.nous ?? [];\n if (!Array.isArray(pool) ||\n pool.length > 8 ||\n pool.some((row) => !object(row) ||\n row.auth_type !== 'oauth' ||\n !['device_code', 'manual:device_code'].includes(row.source) ||\n row.access_token !== access ||\n row.agent_key !== agentKey ||\n unavailable(row) ||\n (row.portal_base_url && !canonical(row.portal_base_url, NOUS_PORTAL)) ||\n (row.inference_base_url && !canonical(row.inference_base_url, NOUS_INFERENCE)) ||\n (row.base_url && !canonical(row.base_url, NOUS_INFERENCE))))\n invalid();\n return {\n access,\n agentKey,\n expires: token.exp * 1000,\n email: accountEmail(token.email),\n principal: {\n kind: 'oauth',\n subject: token.sub,\n organization: token.org_id,\n issuer: token.iss,\n ...(text(token.client_id) ? { clientId: token.client_id } : {}),\n },\n route: { portal: NOUS_PORTAL, inference: NOUS_INFERENCE },\n ...(typeof token.paid_access === 'boolean' ? { paidAccess: token.paid_access } : {}),\n modelCooldowns: pool.map((row) => (object(row.model_cooldowns) ? row.model_cooldowns : {})),\n };\n}\nexport function hermesNousMinimumTtl(env) {\n const setting = env.HERMES_NOUS_MIN_KEY_TTL_SECONDS;\n const ttl = setting === undefined ? 120 : /^\\d+$/.test(setting) ? Math.max(120, Number(setting)) : NaN;\n if (!Number.isFinite(ttl))\n invalid();\n return ttl;\n}\n/** Runtime uses its supported MIN_KEY_TTL override (120s), matching the native\n * invoke-JWT skew. The native default 1800s is a proactive-refresh optimization,\n * not invalid-account evidence. An explicit own-home setting still takes precedence. */\nexport function selectHermesNousSource(material, options = {}) {\n const { config, auth, env } = material;\n const cfg = config.model;\n if (!object(cfg) || cfg.provider !== 'nous' || config.providers?.nous?.enabled === false)\n invalid();\n if (!Array.isArray(auth.credential_pool?.nous) || !auth.credential_pool.nous.length)\n throw new HermesNousError('Nous 登录已保存,请在 Hermes 登录设置中完成原生账号初始化');\n if ((cfg.extra_headers && Object.keys(cfg.extra_headers).length) ||\n cfg.api_key ||\n [env.NOUS_API_KEY, env.CUSTOM_API_KEY].some(Boolean) ||\n Object.keys(env).some((key) => /^NOUS_API_KEY_\\d+$/.test(key)))\n throw new HermesNousError('Nous 含额外认证配置,请在 Hermes 登录设置中确认当前账号');\n if ([cfg.base_url, env.NOUS_INFERENCE_BASE_URL, env.CUSTOM_BASE_URL].some((url) => url && !canonical(url, NOUS_INFERENCE)) ||\n [env.NOUS_PORTAL_BASE_URL, env.HERMES_PORTAL_BASE_URL].some((url) => url && !canonical(url, NOUS_PORTAL)) ||\n (cfg.api_mode && !['chat_completions', 'anthropic_messages'].includes(cfg.api_mode)))\n throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');\n const source = projectHermesNousSource(auth, hermesNousMinimumTtl(env), options);\n const wire = config.nous?.anthropic_wire ?? 'chat';\n if (!['chat', 'native', 'auto'].includes(wire))\n throw new HermesNousError('Nous 当前路由暂不支持账号模型查询');\n source.route.anthropicWire = wire;\n return source;\n}\nconst capabilityCache = new Map();\nfunction sourceKey(home, source) {\n return createHash('sha256')\n .update(JSON.stringify([home, source.principal, source.route, source.agentKey]))\n .digest('hex');\n}\nexport function hermesNousEfforts(home, source, model) {\n const entry = capabilityCache.get(sourceKey(home, source));\n return entry && Date.now() - entry.at < 60000 ? (entry.models.get(model) ?? ['default']) : ['default'];\n}\nexport function beginHermesNousCapabilities(home, source) {\n const generation = Symbol();\n capabilityCache.set(sourceKey(home, source), { at: Date.now(), generation, models: new Map() });\n return generation;\n}\nexport function forgetHermesNousCapabilities(home, source, generation) {\n const key = sourceKey(home, source);\n if (capabilityCache.get(key)?.generation === generation)\n capabilityCache.delete(key);\n}\nconst generationTypes = new Set([\n 'image',\n 'image_generation',\n 'image-generation',\n 'image-gen',\n 'video',\n 'video_generation',\n 'video-generation',\n 'video-gen',\n]);\nconst generationId = /(?:^|[/_.-])(?:image(?:[/_.-]gen(?:eration)?)?|video(?:[/_.-]gen(?:eration)?)?|text[/_.-]to[/_.-](?:image|video)|stable-diffusion|sdxl|flux)(?=$|[/_.-])/i;\nconst tagsGeneration = (tags) => Array.isArray(tags) && tags.some((tag) => generationTypes.has(String(tag).toLowerCase()));\nfunction chatCapable(row) {\n const outputs = row.architecture?.output_modalities;\n return (!/hermes/i.test(row.id) &&\n !generationId.test(row.id) &&\n !generationTypes.has(String(row.type).toLowerCase()) &&\n !generationTypes.has(String(row.capabilities?.type).toLowerCase()) &&\n ![row.tags, row.capabilities?.tags, row.metadata?.tags].some(tagsGeneration) &&\n !(Array.isArray(outputs) &&\n outputs.some((x) => ['image', 'video'].includes(x)) &&\n !outputs.some((x) => ['text', 'chat'].includes(x))) &&\n !(Array.isArray(row.supported_parameters) && !row.supported_parameters.includes('tools')));\n}\nfunction cost(row) {\n if (!object(row.pricing))\n return 'unknown';\n const numeric = (value) => typeof value === 'number'\n ? value\n : typeof value === 'string' && /^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value)\n ? Number(value)\n : NaN;\n const prompt = numeric(row.pricing.prompt), completion = numeric(row.pricing.completion);\n if (![prompt, completion].every((n) => Number.isFinite(n) && n >= 0))\n return 'unknown';\n // Native pricing.original is sale display metadata, not a currently charged rate.\n const extra = Object.entries(row.pricing)\n .filter(([key]) => !['prompt', 'completion', 'original'].includes(key))\n .map(([, value]) => numeric(value));\n if (extra.some((n) => !Number.isFinite(n) || n < 0))\n return 'unknown';\n return [prompt, completion, ...extra].some((n) => n > 0) ? 'paid' : 'free';\n}\n// Native _parser accepts these levels; agent/reasoning_effort.OPENAI_COMPAT_WIRE_EFFORTS\n// is the Nous transport vocabulary. `ultra` is internal and clamped, so never offer it.\nconst nativeNousWireEfforts = new Set(['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']);\nfunction efforts(row) {\n if (!Array.isArray(row.supported_parameters) ||\n !row.supported_parameters.includes('reasoning') ||\n !Array.isArray(row.reasoning?.supported_efforts))\n return ['default'];\n return [\n ...new Set([\n 'default',\n ...row.reasoning.supported_efforts.filter((value) => typeof value === 'string' && nativeNousWireEfforts.has(value)),\n ]),\n ];\n}\nasync function get(url, token, options) {\n const controller = new AbortController();\n const signal = options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;\n const timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? 8000);\n let reader;\n const chunks = [];\n try {\n signal.throwIfAborted();\n const response = await (options.fetch ?? fetch)(url, {\n method: 'GET',\n redirect: 'error',\n signal,\n headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },\n });\n if (!response.ok || response.redirected) {\n await response.body?.cancel();\n throw new HermesNousError([401, 403].includes(response.status)\n ? 'Nous 账号权限查询被拒绝,请检查登录状态'\n : 'Nous 模型元数据查询失败,请稍后重试');\n }\n reader = response.body?.getReader();\n if (!reader)\n throw new Error('empty');\n let length = 0;\n const abort = () => {\n void reader?.cancel().catch(() => { });\n };\n signal.addEventListener('abort', abort, { once: true });\n try {\n for (;;) {\n signal.throwIfAborted();\n const { done, value } = await reader.read();\n signal.throwIfAborted();\n if (done)\n break;\n length += value.length;\n if (length > 1024 * 1024)\n throw new Error('oversized');\n chunks.push(value);\n }\n const bytes = Buffer.concat(chunks);\n try {\n return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));\n }\n finally {\n bytes.fill(0);\n }\n }\n finally {\n signal.removeEventListener('abort', abort);\n }\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (error instanceof HermesNousError)\n throw error;\n throw new HermesNousError(controller.signal.aborted\n ? 'Nous 模型元数据查询超时,请稍后重试'\n : 'Nous 模型元数据无法读取,请稍后重试');\n }\n finally {\n clearTimeout(timeout);\n await reader?.cancel().catch(() => { });\n reader?.releaseLock();\n for (const chunk of chunks)\n chunk.fill(0);\n }\n}\n/** Two read-only, authenticated native endpoints. No public fallback, retry or OAuth refresh. */\nexport async function fetchHermesNousModels(home, source, options = {}, generation = beginHermesNousCapabilities(home, source)) {\n const account = await get(`${NOUS_PORTAL}/api/oauth/account`, source.access, options);\n const access = account?.paid_service_access;\n const paid = typeof access?.allowed === 'boolean'\n ? access.allowed\n : typeof access?.paid_access === 'boolean'\n ? access.paid_access\n : undefined;\n if (!object(account) ||\n !object(access) ||\n paid === undefined ||\n (account.organisation?.id ?? access.organisation_id) !== source.principal.organization ||\n (source.email && account.user?.email && account.user.email !== source.email) ||\n (account.user?.privy_did && account.user.privy_did !== source.principal.subject) ||\n account.account_tier === 'anonymous' ||\n account.authenticated === false ||\n account.error)\n throw new HermesNousError('Nous 账号权限格式无法确认,请刷新登录后重试');\n const data = await get(`${NOUS_INFERENCE}/models`, source.agentKey, options);\n if (!object(data) ||\n !Array.isArray(data.data) ||\n data.data.length > 10000 ||\n data.error ||\n data.authenticated === false)\n throw new HermesNousError('Nous 模型列表格式无法确认');\n const cap = new Map(), ids = new Set();\n const models = [];\n for (const row of data.data) {\n if (!object(row) ||\n typeof row.id !== 'string' ||\n !/^[A-Za-z0-9_./:+-]{1,256}$/.test(row.id) ||\n ids.has(row.id) ||\n row.id.includes(source.agentKey) ||\n row.allowed === false ||\n row.available === false ||\n row.enabled === false ||\n row.disabled === true ||\n row.entitled === false ||\n row.upgrade_required === true ||\n !chatCapable(row) ||\n source.modelCooldowns.some((cooldowns) => typeof cooldowns[row.id] === 'number' && cooldowns[row.id] > Date.now() / 1000))\n continue;\n const price = cost(row);\n if (!paid && price !== 'free')\n continue;\n ids.add(row.id);\n models.push({ id: row.id, cost: price });\n cap.set(row.id, efforts(row));\n }\n for (const [key, entry] of capabilityCache)\n if (Date.now() - entry.at >= 60000)\n capabilityCache.delete(key);\n if (capabilityCache.size >= 128)\n capabilityCache.delete(capabilityCache.keys().next().value);\n const key = sourceKey(home, source);\n if (capabilityCache.get(key)?.generation === generation)\n capabilityCache.set(key, { at: Date.now(), generation, models: cap });\n return { state: 'supported', source: 'account-models', models };\n}\n//# sourceMappingURL=hermes-nous.js.map","import { constants } from 'node:fs';\nimport { lstat, open } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { parse } from 'yaml';\nimport { parseHermesOwnEnvironment } from \"./hermes-env.js\";\nimport { hermesUnsuppressedEnvironment, projectHermesUnsuppressedAuth } from \"./hermes-suppression.js\";\nimport { beginHermesNousCapabilities, fetchHermesNousModels, forgetHermesNousCapabilities, HermesNousError, selectHermesNousSource, } from \"./hermes-nous.js\";\nimport { probeAccountModels } from './account-models.mjs';\nconst object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst literal = (value) => typeof value === 'string' &&\n !!value.trim() &&\n !/[\\x00-\\x1f]/.test(value) &&\n !/^(?:op:\\/\\/|!|\\$|<|your[_ -]|placeholder|changeme)/i.test(value.trim());\nconst unknown = () => ({ state: 'unknown', source: 'unknown', models: [] });\n/** Native PooledCredential fields; a successful catalog cannot erase a native\n * dead account, active exhaustion window or model-specific entitlement bench. */\nexport function hermesPoolEntryUnavailable(entry, model) {\n if (entry.disabled === true || entry.status === 'exhausted' || entry.last_status === 'dead')\n return true;\n if (entry.last_status === 'exhausted') {\n const until = Number(entry.last_error_reset_at);\n if (!Number.isFinite(until) || until <= 0 || until > Date.now() / 1000)\n return true;\n }\n const cooldowns = object(entry.model_cooldowns) ? entry.model_cooldowns : {};\n const values = model ? [cooldowns[model]] : Object.values(cooldowns);\n return values.some((until) => typeof until === 'number' && until > Date.now() / 1000);\n}\n/** Private source reads only. Do not execute secret commands, expand arbitrary env,\n * refresh OAuth, print native config, or import Hermes' side-effectful runtime. */\nasync function read(path, signal) {\n signal?.throwIfAborted();\n let handle;\n try {\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await handle.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 1024 * 1024)\n throw new Error('Unsafe metadata');\n const buffer = Buffer.alloc(info.size + 1);\n try {\n let length = 0;\n while (length < buffer.length) {\n signal?.throwIfAborted();\n const { bytesRead } = await handle.read(buffer, length, buffer.length - length, length);\n if (!bytesRead)\n break;\n length += bytesRead;\n }\n if (length > info.size)\n throw new Error('Metadata changed');\n return buffer.subarray(0, length).toString('utf8');\n }\n finally {\n buffer.fill(0);\n }\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return;\n signal?.throwIfAborted();\n throw new Error('Hermes 账号配置无法安全读取,请在原生登录设置中检查');\n }\n finally {\n await handle?.close();\n }\n}\nfunction dotenv(text) {\n return parseHermesOwnEnvironment(text);\n}\n/** Internal source material; callers must never publish or log the returned values. */\nexport async function readHermesAccountMaterial(home, signal) {\n const config = parse((await read(join(home, 'config.yaml'), signal)) ?? '');\n const auth = JSON.parse((await read(join(home, 'auth.json'), signal)) ?? '{}');\n const env = dotenv((await read(join(home, '.env'), signal)) ?? '');\n if (!object(config) || !object(auth))\n throw new Error('Hermes 账号配置无效');\n return { config, auth, env, sourceIds: [home] };\n}\n/** Exact native source/provider pairs from auth_commands and credential_pool.\n * In particular manual:qwen_cli is still a foreign login, not a Hermes OAuth flow. */\nfunction ownPoolSource(provider, entry, material) {\n const source = entry.source;\n if ((!source || source === 'manual' || source === 'config') && entry.auth_type === 'api_key')\n return true;\n if (typeof source !== 'string')\n return false;\n if (source.startsWith('env:'))\n return literal(material.env[source.slice(4)]);\n const ownOAuth = {\n anthropic: ['manual:hermes_pkce', 'hermes_pkce'],\n 'openai-codex': ['manual:device_code', 'manual:loopback_pkce', 'device_code'],\n 'xai-oauth': ['manual:device_code', 'device_code'],\n 'minimax-oauth': ['manual:minimax_oauth', 'oauth'],\n nous: ['manual:device_code', 'device_code'],\n };\n if (entry.auth_type === 'oauth' && ownOAuth[provider]?.includes(source))\n return true;\n return provider === 'openrouter' && entry.auth_type === 'api_key' && source === 'manual:openrouter_pkce';\n}\n/** Native own stores only; never accept a broad manual:* prefix. */\nexport async function assertHermesOwnAccounts(home, signal) {\n const material = await readHermesAccountMaterial(home, signal);\n try {\n await lstat(join(home, '.cliworker-managed'));\n throw new Error('Hermes 插件账号不能使用额外的托管配置');\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n try {\n await lstat(join(home, '.op.env'));\n throw new Error('Hermes 请使用自身 .env,暂不支持外部密码库配置');\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n if (Object.values(material.env).some((value) => /^(?:op:\\/\\/|!|\\$\\{|__BITWARDEN_MANAGED__)/.test(value)))\n throw new Error('Hermes 请使用自身 API 配置,暂不支持外部密码库引用');\n if (material.config.auth?.adopt_external_logins !== false)\n throw new Error('请先关闭 Hermes 的 auth.adopt_external_logins');\n if (material.config.model?.openai_runtime === 'codex_app_server' ||\n material.config.model?.api_mode === 'codex_app_server')\n throw new Error('Hermes 当前使用外部 Codex 登录,请改用自身账号');\n // Native dotenv has override=True. Selector assignments would invalidate the\n // account source selected by the Host, even when no API-key value is inherited.\n for (const [provider, entries] of Object.entries(material.auth.credential_pool ?? {})) {\n if (!Array.isArray(entries))\n throw new Error('Hermes 账号来源无法确认');\n for (const entry of entries) {\n if (!object(entry))\n throw new Error('Hermes 账号来源无法确认');\n if (!ownPoolSource(provider, entry, material))\n throw new Error('Hermes 含外部账号来源,请使用自身登录');\n }\n }\n return material;\n}\n/** Current selected-provider account scope. Unknown provider/auth schemas fail closed.\n * Route precedence follows Hermes runtime_provider_backends / credential_pool;\n * only the canonical OpenRouter route and native Codex OAuth store are supported\n * without an explicit endpoint. Ambiguous mirrors/custom pools are not guessed. */\nexport async function hermesAccountModels(home, provider, options = {}) {\n try {\n const currentMaterial = async () => {\n const raw = await assertHermesOwnAccounts(home, options.signal);\n return {\n ...raw,\n auth: projectHermesUnsuppressedAuth(raw.auth),\n env: hermesUnsuppressedEnvironment(raw.auth, raw.env, provider),\n };\n };\n const material = await currentMaterial();\n const { config, auth, env } = material;\n if (!object(config) || !object(config.model) || config.model.provider !== provider)\n return unknown();\n if (config.providers?.[provider]?.enabled === false)\n return unknown();\n const cfg = config.model;\n if (!object(auth))\n return unknown();\n // Extra headers, command secrets, endpoint overrides and unknown pool routes\n // cannot be reconstructed faithfully from a public model catalog.\n if (cfg.extra_headers && Object.keys(cfg.extra_headers).length)\n return unknown();\n const inputs = [];\n if (provider === 'nous') {\n const source = selectHermesNousSource(material);\n const generation = beginHermesNousCapabilities(home, source);\n try {\n const result = await fetchHermesNousModels(home, source, options, generation);\n options.signal?.throwIfAborted();\n const current = selectHermesNousSource(await currentMaterial());\n // A query never authorizes a credential that appeared while it was in flight.\n // Stable task bindings intentionally ignore ordinary token rotation separately.\n if (current.agentKey !== source.agentKey ||\n JSON.stringify(current.principal) !== JSON.stringify(source.principal) ||\n JSON.stringify(current.route) !== JSON.stringify(source.route) ||\n JSON.stringify(current.modelCooldowns) !== JSON.stringify(source.modelCooldowns))\n throw new HermesNousError('Nous 账号已变化,请重新刷新模型');\n return result;\n }\n catch (error) {\n forgetHermesNousCapabilities(home, source, generation);\n throw error;\n }\n }\n else if (provider === 'openai-codex') {\n // This transport authenticates via a separate Codex app-server session;\n // Hermes' OAuth store cannot prove that other account's model scope.\n if (cfg.openai_runtime === 'codex_app_server' || cfg.api_mode === 'codex_app_server')\n return unknown();\n if (env.HERMES_CODEX_BASE_URL &&\n env.HERMES_CODEX_BASE_URL.replace(/\\/+$/, '') !== 'https://chatgpt.com/backend-api')\n return unknown();\n if (cfg.base_url && cfg.base_url.replace(/\\/+$/, '') !== 'https://chatgpt.com/backend-api')\n return unknown();\n const state = auth.providers?.[provider], tokens = state?.tokens;\n if (state?.auth_mode !== 'chatgpt' || !literal(tokens?.access_token))\n return unknown();\n // Native load_pool seeds this exact singleton as device_code. Additional\n // accounts require their own proven scope, so do not authorize them via it.\n const pool = auth.credential_pool?.[provider] ?? [];\n if (!Array.isArray(pool) ||\n pool.some((entry) => !object(entry) ||\n entry.source !== 'device_code' ||\n entry.auth_type !== 'oauth' ||\n hermesPoolEntryUnavailable(entry, cfg.default) ||\n entry.access_token !== tokens.access_token ||\n (entry.base_url && entry.base_url.replace(/\\/+$/, '') !== 'https://chatgpt.com/backend-api')))\n return unknown();\n let expiry = typeof tokens.expires_at === 'number' ? tokens.expires_at : Date.parse(tokens.expires_at);\n if (!Number.isFinite(expiry)) {\n // Hermes' native Codex store uses the access JWT exp claim.\n try {\n expiry = JSON.parse(Buffer.from(tokens.access_token.split('.')[1] ?? '', 'base64url').toString()).exp;\n }\n catch {\n return unknown();\n }\n }\n inputs.push({\n provider,\n credential: {\n type: 'oauth',\n access: tokens.access_token,\n expires: expiry < 1e12 ? expiry * 1000 : expiry,\n accountId: tokens.account_id,\n },\n });\n }\n else if (provider === 'openrouter') {\n const canonical = 'https://openrouter.ai/api/v1';\n if ([cfg.base_url, env.OPENROUTER_BASE_URL, env.CUSTOM_BASE_URL].some((url) => url && (typeof url !== 'string' || url.replace(/\\/+$/, '') !== canonical)) ||\n env.OPENAI_BASE_URL)\n return unknown();\n const pool = auth.credential_pool?.openrouter;\n const keys = new Set();\n const envNames = new Set(['OPENROUTER_API_KEY']);\n for (const name of Object.keys(env))\n if (/^OPENROUTER_API_KEY_\\d+$/.test(name))\n envNames.add(name);\n if (Array.isArray(pool) && pool.length) {\n if (pool.length > 8)\n return unknown();\n // Native pool selection may rotate. Every potential credential must support\n // the choice. Do not expose exhausted/expired/unknown entries via another key.\n for (const entry of pool) {\n if (!object(entry) ||\n entry.auth_type !== 'api_key' ||\n hermesPoolEntryUnavailable(entry, cfg.default) ||\n (entry.base_url && entry.base_url.replace(/\\/+$/, '') !== canonical))\n return unknown();\n if (typeof entry.source === 'string' && entry.source.startsWith('env:')) {\n const name = entry.source.slice(4);\n if (!/^[A-Z][A-Z0-9_]*$/.test(name) || !literal(env[name]))\n return unknown();\n envNames.add(name);\n continue;\n }\n if (!ownPoolSource(provider, entry, { config, auth, env, sourceIds: [home] }))\n return unknown();\n const key = entry.runtime_api_key || entry.access_token;\n if (!literal(key))\n return unknown();\n keys.add(key);\n }\n }\n // Native pool loader seeds numbered environment keys and rehydrates env:\n // rows on each load. A saved token cannot override its current env source.\n for (const name of envNames)\n if (env[name]) {\n if (!literal(env[name]) || env[name].includes('${'))\n return unknown();\n keys.add(env[name]);\n }\n if (!keys.size || keys.size > 8)\n return unknown();\n for (const key of keys)\n inputs.push({ provider, baseUrl: canonical, credential: { type: 'api', key } });\n }\n else {\n // Do not fabricate endpoint/key mappings for arbitrary provider plugins.\n return unknown();\n }\n const scopes = [];\n const deadline = AbortSignal.timeout(15000);\n const probeOptions = {\n ...options,\n signal: options.signal ? AbortSignal.any([options.signal, deadline]) : deadline,\n };\n for (const input of inputs) {\n options.signal?.throwIfAborted();\n const scope = await probeAccountModels(input, probeOptions);\n options.signal?.throwIfAborted();\n if (scope.state !== 'supported')\n return scope;\n scopes.push(scope);\n }\n if (!scopes.length)\n return unknown();\n return {\n state: 'supported',\n source: 'account-models',\n models: scopes[0].models.flatMap((model) => {\n const matches = scopes.map((scope) => scope.models.find((candidate) => candidate.id === model.id));\n // Native setup selected this model; public/account catalogs may also contain\n // embeddings or other endpoints that Hermes chat cannot execute.\n if (model.id !== cfg.default || matches.some((match) => !match))\n return [];\n const cost = matches.every((match) => match.cost === 'free')\n ? 'free'\n : matches.every((match) => match.cost === 'paid')\n ? 'paid'\n : 'unknown';\n return [{ ...model, cost }];\n }),\n };\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (error instanceof HermesNousError)\n throw error;\n return unknown();\n }\n}\n//# sourceMappingURL=hermes-models.js.map","import { constants } from 'node:fs';\nimport { open, realpath } from 'node:fs/promises';\nimport { basename, isAbsolute } from 'node:path';\n/** Read only the single stored __main__.py member emitted by distlib. No ZIP\n * extraction, Python evaluation, installer invocation, or account lookup. */\nexport function hermesDistlibSource(bytes) {\n if (bytes.length < 128 || bytes.toString('ascii', 0, 2) !== 'MZ')\n return;\n const end = bytes.length - 22;\n if (bytes.readUInt32LE(end) !== 0x06054b50)\n return;\n if (bytes.readUInt16LE(end + 4) !== 0 ||\n bytes.readUInt16LE(end + 6) !== 0 ||\n bytes.readUInt16LE(end + 8) !== 1 ||\n bytes.readUInt16LE(end + 10) !== 1 ||\n bytes.readUInt16LE(end + 20) !== 0)\n throw new Error('Unsupported Hermes launcher archive');\n const centralSize = bytes.readUInt32LE(end + 12);\n const central = end - centralSize;\n if (central < 64 || centralSize < 46 || bytes.readUInt32LE(central) !== 0x02014b50)\n throw new Error('Invalid Hermes launcher directory');\n const nameSize = bytes.readUInt16LE(central + 28);\n const size = bytes.readUInt32LE(central + 24);\n const local = central - bytes.readUInt32LE(end + 16) + bytes.readUInt32LE(central + 42);\n if (centralSize !== 46 + nameSize ||\n bytes.subarray(central + 46, end).toString('utf8') !== '__main__.py' ||\n bytes.readUInt16LE(central + 8) !== 0 ||\n bytes.readUInt16LE(central + 10) !== 0 ||\n bytes.readUInt32LE(central + 20) !== size ||\n size > 128 * 1024 ||\n local < 64 ||\n local + 30 > central ||\n bytes.readUInt32LE(local) !== 0x04034b50 ||\n bytes.readUInt16LE(local + 6) !== 0 ||\n bytes.readUInt16LE(local + 8) !== 0 ||\n bytes.readUInt32LE(local + 18) !== size ||\n bytes.readUInt32LE(local + 22) !== size ||\n bytes.readUInt16LE(local + 26) !== nameSize ||\n bytes.readUInt16LE(local + 28) !== 0 ||\n local + 30 + nameSize + size !== central ||\n bytes.subarray(local + 30, local + 30 + nameSize).toString('utf8') !== '__main__.py')\n throw new Error('Invalid Hermes launcher member');\n return bytes.subarray(local + 30 + nameSize, central).toString('utf8');\n}\nexport function hermesLauncherCheckout(source) {\n if (!source.startsWith('import os, re, sys\\n') ||\n !source.includes('sys._hermes_pin_default_home = True\\n') ||\n !source.includes('import hermes_bootstrap') ||\n !source.includes('from hermes_cli.main import main'))\n return;\n // Python's repr(path) uses only literal escaped backslashes/quotes here.\n // Do not evaluate the launcher, interpolate its statements, or accept expressions.\n const roots = [\n ...source.matchAll(/^sys\\.path\\.insert\\(0, ('(?:[^'\\\\\\r\\n]|\\\\[\\\\'])+'|\"(?:[^\"\\\\\\r\\n]|\\\\[\\\\\"])+\")\\)\\r?$/gm),\n ];\n if (roots.length !== 1)\n throw new Error('Ambiguous Hermes checkout');\n const path = roots[0][1].slice(1, -1).replace(/\\\\([\\\\'\"])/g, '$1');\n if (!isAbsolute(path) || path.includes('\\0'))\n throw new Error('Invalid Hermes checkout');\n return path;\n}\nexport async function windowsHermesCheckout(executable, command, signal) {\n let source;\n if (basename(executable).toLowerCase() === 'hermes.exe') {\n const file = await open(executable, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n try {\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 1024 * 1024)\n throw new Error('Unsafe Hermes launcher');\n source = hermesDistlibSource(await file.readFile());\n }\n finally {\n await file.close();\n }\n }\n else if (command[1] === '-I' && command[2] === '-c') {\n const encoded = /^import base64; exec\\(base64\\.b64decode\\('([A-Za-z0-9+/]+={0,2})'\\)\\)$/.exec(command[3] ?? '');\n if (encoded)\n source = Buffer.from(encoded[1], 'base64').toString('utf8');\n }\n signal?.throwIfAborted();\n if (source === undefined)\n return;\n const checkout = hermesLauncherCheckout(source);\n if (!checkout)\n return;\n // Canonical spelling is part of the native install_key hash.\n return realpath(checkout);\n}\n//# sourceMappingURL=hermes-windows-installation.js.map","import { constants } from 'node:fs';\nimport { access, open, realpath } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { dirname, join, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { nativeLaunchArgv } from './native-launch.mjs';\nimport { windowsHermesCheckout } from \"./hermes-windows-installation.js\";\nexport class HermesExecutableError extends Error {\n}\nexport function hermesCommandInstallationHome(argv) {\n return argv[2] === fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)) && argv[4]\n ? dirname(dirname(dirname(argv[4])))\n : undefined;\n}\n/** Reuse the current official checkout's committed dependency environment, not a\n * directory selected by recency/hash guessing. A clean account home must not run\n * the installer's borrowed-home sync. Older/self-contained entries retain their\n * native launcher contract. The child rechecks this selection under its native lock. */\nexport async function hermesNativeCommand(executable, args, signal) {\n let current = executable;\n const read = async (path, limit) => {\n const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n try {\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > limit)\n throw new Error('Unsafe Hermes installation record');\n const result = await file.readFile('utf8');\n if (Buffer.byteLength(result) > limit)\n throw new Error('Oversized Hermes installation record');\n signal?.throwIfAborted();\n return result;\n }\n finally {\n await file.close();\n }\n };\n const pinned = async (checkout) => {\n const owner = dirname(checkout), key = createHash('sha256').update(checkout).digest('hex').slice(0, 16);\n const install = join(owner, 'installs', key), facts = join(install, 'facts.json');\n try {\n const data = JSON.parse(await read(facts, 4 * 1024 * 1024));\n const environment = data?.packages?.venv?.environment;\n if (typeof environment !== 'string' ||\n !environment.startsWith(join(install, 'environments') + sep) ||\n (await realpath(environment)) !== environment)\n throw new Error('Invalid Hermes dependency selection');\n await read(join(environment, 'pyvenv.cfg'), 64 * 1024);\n const python = join(environment, ...(process.platform === 'win32' ? ['Scripts', 'python.exe'] : ['bin', 'python']));\n await access(python, process.platform === 'win32' ? constants.R_OK : constants.X_OK);\n for (const file of [\n 'hermes_bootstrap.py',\n 'hermes_cli/main.py',\n 'pm/environments.py',\n ...(process.platform === 'win32' ? ['pm/filesystem.py'] : []),\n ])\n await access(join(checkout, file), constants.R_OK);\n return [\n python,\n '-I',\n fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)),\n checkout,\n facts,\n environment,\n ...args,\n ];\n }\n catch {\n signal?.throwIfAborted();\n throw new HermesExecutableError('Hermes 当前安装依赖不可用,请在原生终端修复安装');\n }\n };\n if (process.platform === 'win32') {\n signal?.throwIfAborted();\n try {\n const command = nativeLaunchArgv([executable, ...args]);\n await access(command[0], constants.R_OK);\n const checkout = await windowsHermesCheckout(executable, command, signal);\n // A native source-install launcher records its checkout. Pin that install's\n // committed venv while retaining the isolated HERMES_HOME. Other native\n // installations keep their own launch contract; never guess a generation.\n return checkout ? await pinned(checkout) : command;\n }\n catch (error) {\n signal?.throwIfAborted();\n if (error instanceof HermesExecutableError)\n throw error;\n throw new HermesExecutableError('启动入口不可用,请修复安装');\n }\n }\n for (let depth = 0; depth < 4; depth++) {\n signal?.throwIfAborted();\n let path, source;\n try {\n path = await realpath(current);\n source = await read(path, 128 * 1024);\n }\n catch (error) {\n signal?.throwIfAborted();\n if (error.code === 'ENOENT')\n return [executable, ...args];\n throw new HermesExecutableError('启动入口不可用,请修复安装');\n }\n const shim = /^#![^\\r\\n]*\\b(?:sh|bash|zsh)\\s*\\r?\\n\\s*exec\\s+(?:\"(\\/[^\"\\r\\n$`]+)\"|(\\/[^\\s$`\"'\\\\;|&<>]+))\\s+\"\\$@\"\\s*$/.exec(source);\n if (shim) {\n current = shim[1] ?? shim[2];\n continue;\n }\n if (!path.endsWith(`${sep}.hermes${sep}bin${sep}hermes`) || !source.includes('hermes_bootstrap'))\n return [executable, ...args];\n const checkout = dirname(dirname(dirname(path)));\n if (!source.includes(checkout))\n throw new HermesExecutableError('Hermes 安装入口与源码不匹配');\n return pinned(checkout);\n }\n throw new HermesExecutableError('启动脚本异常,请修复安装');\n}\n/** Inspect the installed fixed exec shim without invoking its installer or auth UI. */\nexport async function verifyHermesExecutable(executable, signal) {\n signal.throwIfAborted();\n if (process.platform === 'win32') {\n try {\n const command = nativeLaunchArgv([executable]);\n await access(command[0], constants.R_OK);\n if (!(await open(command[0], 'r').then(async (file) => {\n try {\n return (await file.stat()).isFile();\n }\n finally {\n await file.close();\n }\n })))\n throw new Error('Invalid Hermes entry');\n signal.throwIfAborted();\n return;\n }\n catch {\n signal.throwIfAborted();\n throw new HermesExecutableError('启动入口不可用,请修复安装');\n }\n }\n let current = executable;\n for (let depth = 0; depth < 4; depth++) {\n let file;\n try {\n await access(current, constants.X_OK);\n // Official per-user launchers may themselves be symbolic links.\n file = await open(await realpath(current), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile())\n throw new Error('Invalid Hermes entry');\n if (info.size > 16 * 1024)\n return;\n const bytes = Buffer.alloc(16 * 1024 + 1);\n let source;\n try {\n const { bytesRead } = await file.read(bytes, 0, bytes.length, 0);\n const after = await file.stat();\n if (bytesRead !== info.size || after.size !== info.size || after.mtimeMs !== info.mtimeMs)\n throw new Error('Hermes entry changed during inspection');\n source = bytes.subarray(0, bytesRead).toString('utf8');\n }\n finally {\n bytes.fill(0);\n }\n signal.throwIfAborted();\n const shim = /^#![^\\r\\n]*\\b(?:sh|bash|zsh)\\s*\\r?\\n\\s*exec\\s+(?:\"(\\/[^\"\\r\\n$`]+)\"|(\\/[^\\s$`\"'\\\\;|&<>]+))\\s+\"\\$@\"\\s*$/.exec(source);\n if (!shim)\n return;\n current = shim[1] ?? shim[2];\n }\n catch {\n signal.throwIfAborted();\n throw new HermesExecutableError('启动入口不可用,请修复安装');\n }\n finally {\n await file?.close();\n }\n }\n throw new HermesExecutableError('启动脚本异常,请修复安装');\n}\n//# sourceMappingURL=hermes-installation.js.map","import { createHash } from 'node:crypto';\nimport { lstat } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { validateHermesHomeDirectory } from \"./hermes-adapter.js\";\nimport { hermesAccountEnvironment } from \"./hermes-account-context.js\";\nimport { assertHermesOwnAccounts, hermesPoolEntryUnavailable, readHermesAccountMaterial, } from \"./hermes-models.js\";\nimport { hermesNativeCommand } from \"./hermes-installation.js\";\nimport { HermesNousError, hermesNousMinimumTtl, selectHermesNousSource, } from \"./hermes-nous.js\";\nimport { projectHermesUnsuppressedAuth, hermesUnsuppressedEnvironment } from \"./hermes-suppression.js\";\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nconst messages = {\n relogin: 'Hermes 登录已失效,请重新登录',\n unavailable: 'Hermes 登录暂时无法续期,请稍后刷新',\n changed: 'Hermes 账号来源已变化,请刷新后重试',\n unsupported: '当前 Hermes 安装不支持安全续期,请更新原生 CLI 后重试',\n busy: 'Hermes 账号终端正在运行,请关闭后刷新',\n};\nexport class HermesRenewalError extends HermesNousError {\n state;\n constructor(state) {\n super(messages[state]);\n this.state = state;\n }\n}\nconst homes = new Map();\nfunction homeKey(home) {\n const canonical = validateHermesHomeDirectory(home);\n return { home: canonical, key: process.platform === 'win32' ? canonical.toLowerCase() : canonical };\n}\nfunction retire(key, state) {\n if (!state.flight && !state.reserved && !state.poisoned && homes.get(key) === state)\n homes.delete(key);\n}\nfunction available(state) {\n if (state.poisoned)\n throw new ProcessCleanupUnconfirmedError();\n if (state.reserved)\n throw new HermesRenewalError('busy');\n}\n/** No bearer, refresh token or email enters the command line or public result. */\nexport function hermesNousPrincipalDigest(source) {\n const p = source.principal;\n return createHash('sha256')\n .update(JSON.stringify([\n 'hermes-nous-v1',\n p.subject,\n p.organization,\n p.issuer,\n p.clientId ?? '',\n source.route.portal,\n source.route.inference,\n ]))\n .digest('hex');\n}\nasync function snapshot(home, signal) {\n try {\n await lstat(join(home, 'config.yaml'));\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return;\n throw error;\n }\n const selected = await readHermesAccountMaterial(home, signal);\n if (selected.config.model?.provider !== 'nous' || selected.auth.active_provider !== 'nous')\n return;\n const raw = await assertHermesOwnAccounts(home, signal);\n if (raw.config.model?.provider !== 'nous' || raw.auth.active_provider !== 'nous')\n return;\n const material = {\n ...raw,\n auth: projectHermesUnsuppressedAuth(raw.auth),\n env: hermesUnsuppressedEnvironment(raw.auth, raw.env, 'nous'),\n };\n // Suppressed/deleted credentials never become a renewal source.\n if (!material.auth.providers?.nous)\n return;\n const source = selectHermesNousSource(material, { allowExpired: true });\n const ttl = hermesNousMinimumTtl(material.env);\n const state = material.auth.providers.nous;\n return {\n material,\n source,\n ttl,\n state,\n digest: hermesNousPrincipalDigest(source),\n identity: JSON.stringify([\n hermesNousPrincipalDigest(source),\n state.client_id || 'hermes-cli',\n source.route,\n ]),\n };\n}\nasync function capture(input, home, digest, ttl, signal) {\n if (!input.backend)\n throw new HermesRenewalError('unsupported');\n const executable = input.executable ?? (await input.resolveExecutable?.(signal));\n if (!executable)\n throw new HermesRenewalError('unsupported');\n const argv = await hermesNativeCommand(executable, ['--cliworker-nous-refresh', digest], signal);\n // Unknown standalone launchers must not receive our private protocol as a CLI command.\n if (argv[2] !== fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)))\n throw new HermesRenewalError('unsupported');\n signal.throwIfAborted();\n // Once rotation starts, cancellation waits for the bounded native transaction to\n // persist its new refresh token. Killing it on UI cancellation could spend the\n // old single-use grant without saving the replacement (especially Windows Job).\n const deadline = AbortSignal.timeout(8000);\n const child = input.backend.spawn({\n argv: [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...argv],\n cwd: home,\n env: {\n ...hermesAccountEnvironment(home),\n HERMES_SHARED_AUTH_DIR: join(home, 'shared'),\n HERMES_NOUS_MIN_KEY_TTL_SECONDS: String(ttl),\n PYTHONDONTWRITEBYTECODE: '1',\n ELECTRON_RUN_AS_NODE: '1',\n },\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: input.graceMs ?? 5000,\n signal: deadline,\n });\n void child.done.catch(() => undefined);\n let output = '', bytes = 0;\n const read = async (stream, keep) => {\n if (stream)\n for await (const chunk of stream) {\n bytes += Buffer.byteLength(chunk);\n if (bytes > 8192)\n throw new HermesRenewalError('unavailable');\n if (keep)\n output += String(chunk);\n if (output.length > 512)\n throw new HermesRenewalError('unavailable');\n }\n };\n const readers = [read(child.stdout, true), read(child.stderr, false)];\n try {\n await Promise.all(readers);\n const result = await child.done;\n if (deadline.aborted || result.exitCode !== 0)\n throw new HermesRenewalError('unavailable');\n let receipt;\n try {\n receipt = JSON.parse(output);\n }\n catch {\n throw new HermesRenewalError('unavailable');\n }\n if (!receipt ||\n receipt.version !== 1 ||\n Object.keys(receipt).sort().join(',') !== 'state,version' ||\n !['ready', 'relogin', 'unavailable', 'changed', 'unsupported'].includes(receipt.state))\n throw new HermesRenewalError('unavailable');\n if (receipt.state !== 'ready')\n throw new HermesRenewalError(receipt.state);\n }\n finally {\n output = '';\n let exited = false;\n try {\n child.terminate();\n exited = await child.waitForExit();\n }\n catch {\n /* fail closed below */\n }\n if (!exited)\n throw new ProcessCleanupUnconfirmedError();\n await Promise.allSettled([...readers, child.done]);\n }\n}\nasync function renew(input, home, signal) {\n signal.throwIfAborted();\n const before = await snapshot(home, signal);\n if (!before || before.source.expires > Date.now() + before.ttl * 1000)\n return;\n if (typeof before.state.refresh_token !== 'string' ||\n !before.state.refresh_token.trim() ||\n before.state.refresh_token.length > 32768 ||\n /[\\x00-\\x20\\x7f]/.test(before.state.refresh_token))\n throw new HermesRenewalError('relogin');\n if (before.material.auth.credential_pool.nous.some((row) => hermesPoolEntryUnavailable(row, before.material.config.model?.default)))\n throw new HermesRenewalError('unavailable');\n await capture(input, home, before.digest, before.ttl, signal);\n // Always reread even if all subscribers left while the native transaction ran.\n const after = await snapshot(home, new AbortController().signal);\n if (!after || after.identity !== before.identity)\n throw new HermesRenewalError('changed');\n if (after.source.expires <= Date.now() + after.ttl * 1000)\n throw new HermesRenewalError('unavailable');\n}\nfunction abortable(operation, signal) {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const abort = () => reject(signal.reason);\n signal.addEventListener('abort', abort, { once: true });\n operation\n .then(resolve, reject)\n .finally(() => signal.removeEventListener('abort', abort))\n .catch(() => { });\n });\n}\n/** Share only an in-flight renewal, never a completed authorization decision. */\nexport async function ensureHermesNousFresh(input) {\n input.signal.throwIfAborted();\n const { home, key } = homeKey(input.home);\n const state = homes.get(key) ?? {};\n homes.set(key, state);\n available(state);\n let flight = state.flight;\n if (flight?.readers.size && [...flight.readers].every((reader) => reader.signal.aborted))\n flight.controller.abort();\n if (flight?.controller.signal.aborted) {\n await abortable(flight.operation.catch(() => { }), input.signal);\n return ensureHermesNousFresh(input);\n }\n if (!flight) {\n const controller = new AbortController();\n flight = { controller, operation: Promise.resolve(), readers: new Set(), settled: false };\n state.flight = flight;\n const current = flight;\n current.operation = Promise.resolve()\n .then(() => renew(input, home, controller.signal))\n .catch((error) => {\n if (error instanceof ProcessCleanupUnconfirmedError)\n state.poisoned = true;\n if (error instanceof HermesNousError || error instanceof ProcessCleanupUnconfirmedError)\n throw error;\n controller.signal.throwIfAborted();\n throw new HermesRenewalError('unavailable');\n })\n .finally(() => {\n current.settled = true;\n if (state.flight === current)\n state.flight = undefined;\n retire(key, state);\n });\n void current.operation.catch(() => { });\n }\n const reader = { signal: input.signal };\n flight.readers.add(reader);\n try {\n await abortable(flight.operation, input.signal);\n input.signal.throwIfAborted();\n available(state);\n }\n finally {\n flight.readers.delete(reader);\n if (!flight.readers.size && !flight.settled) {\n flight.controller.abort();\n await flight.operation.catch((error) => {\n if (error instanceof ProcessCleanupUnconfirmedError)\n throw error;\n });\n }\n }\n}\n/** Hold until the account terminal's entire managed range has exited. */\nexport async function reserveHermesAccount(home, signal) {\n signal.throwIfAborted();\n const { key } = homeKey(home);\n const state = homes.get(key) ?? {};\n homes.set(key, state);\n available(state);\n const owner = Symbol();\n state.reserved = owner;\n const release = () => {\n if (state.reserved === owner)\n state.reserved = undefined;\n retire(key, state);\n };\n try {\n if (state.flight) {\n state.flight.controller.abort();\n await state.flight.operation.catch((error) => {\n if (error instanceof ProcessCleanupUnconfirmedError)\n throw error;\n });\n }\n signal.throwIfAborted();\n if (state.poisoned)\n throw new ProcessCleanupUnconfirmedError();\n return release;\n }\n catch (error) {\n release();\n throw error;\n }\n}\n//# sourceMappingURL=hermes-renewal.js.map","import { chmod, lstat, mkdir, readFile, realpath } from 'node:fs/promises';\nimport { lstatSync, realpathSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { basename, dirname, isAbsolute, join, parse, resolve, sep } from 'node:path';\nimport { StringDecoder } from 'node:string_decoder';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { hermesAccountModels, assertHermesOwnAccounts } from \"./hermes-models.js\";\nimport { hermesNousEfforts, hermesNousMinimumTtl, selectHermesNousSource } from \"./hermes-nous.js\";\nimport { hermesAccountEnvironment } from \"./hermes-account-context.js\";\nimport { verifyHermesExecutable, hermesNativeCommand } from \"./hermes-installation.js\";\nimport { ensureHermesNousFresh } from \"./hermes-renewal.js\";\nconst record = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);\nconst nonempty = (value) => typeof value === 'string' && !!value.trim() && !value.includes('\\0');\nexport function hermesHomeDirectory(configured) {\n const nativeDefault = process.platform === 'win32'\n ? join(process.env.LOCALAPPDATA?.trim() || join(homedir(), 'AppData', 'Local'), 'hermes')\n : join(homedir(), '.hermes');\n const path = configured?.trim() || process.env.HERMES_HOME?.trim() || nativeDefault;\n return validateHermesHomeDirectory(path);\n}\nfunction assertConfinedHome(path) {\n const userHome = realpathSync(homedir());\n if (path === parse(path).root || path === userHome || userHome.startsWith(path + sep))\n throw new Error('Unsafe Hermes home: refusing filesystem root, user home or its ancestor');\n}\n/** Account setup may create a new home. Resolve its nearest existing ancestor before\n * granting writes, so a parent symlink cannot turn a narrow-looking path into all of HOME.\n * Returns a canonical path for the sandbox and native HERMES_HOME to share.\n */\nexport function validateHermesHomeDirectory(path) {\n if (!isAbsolute(path) || path.includes('\\0'))\n throw new Error('Hermes home must be an absolute path');\n const absolute = resolve(path);\n assertConfinedHome(absolute);\n try {\n if (lstatSync(absolute).isSymbolicLink())\n throw new Error('Unsafe Hermes home symlink');\n }\n catch (error) {\n if (!record(error) || error.code !== 'ENOENT')\n throw error;\n }\n let ancestor = absolute;\n const missing = [];\n for (;;) {\n try {\n const canonical = join(realpathSync(ancestor), ...missing);\n assertConfinedHome(canonical);\n return canonical;\n }\n catch (error) {\n if (!record(error) || error.code !== 'ENOENT')\n throw error;\n const parent = dirname(ancestor);\n if (parent === ancestor)\n throw error;\n missing.unshift(basename(ancestor));\n ancestor = parent;\n }\n }\n}\nfunction selection(value) {\n let parsed;\n try {\n parsed = JSON.parse(value);\n }\n catch {\n throw new Error('请重新选择 Hermes 原生模型');\n }\n if (!Array.isArray(parsed) || parsed.length !== 2 || !parsed.every(nonempty))\n throw new Error('请重新选择 Hermes 原生模型');\n return [parsed[0], parsed[1]];\n}\nasync function environment(stateDirectory, home, nousMinimumTtl) {\n await mkdir(stateDirectory, { recursive: true, mode: 0o700 });\n if ((await lstat(stateDirectory)).isSymbolicLink())\n throw new Error('Unsafe Hermes state symlink');\n await chmod(stateDirectory, 0o700);\n const root = join(await realpath(stateDirectory), 'hermes');\n for (const path of [root, join(root, 'tmp')]) {\n await mkdir(path, { recursive: true, mode: 0o700 });\n if ((await lstat(path)).isSymbolicLink())\n throw new Error('Unsafe Hermes state symlink');\n await chmod(path, 0o700);\n }\n // Preserve native provider/account configuration. No credentials are copied or injected.\n // SAFE_MODE is the plugin-discovery guard; the CLI --safe-mode switch would ALSO discard\n // user provider config, so it is deliberately not used. Native tool permissions remain active.\n return {\n ...hermesAccountEnvironment(home),\n PYTHONDONTWRITEBYTECODE: '1',\n TMPDIR: join(root, 'tmp'),\n HERMES_SAFE_MODE: '1',\n HERMES_IGNORE_RULES: '1',\n HERMES_YOLO_MODE: '0',\n HERMES_ACCEPT_HOOKS: '0',\n // Native supported per-process override: reuse a still-usable own invoke JWT\n // instead of proactively refreshing every token below the 30-minute default.\n ...(nousMinimumTtl === undefined ? {} : { HERMES_NOUS_MIN_KEY_TTL_SECONDS: nousMinimumTtl }),\n };\n}\nasync function requireConfiguration(home) {\n try {\n // Recheck canonical identities at use time, including symlinks in parent components.\n // A changed alias must not expand the writable native-state exception.\n const canonical = await realpath(home);\n if (validateHermesHomeDirectory(home) !== canonical || canonical !== home)\n throw new Error('Unsafe Hermes configuration path changed');\n const directory = await lstat(home);\n const config = await lstat(join(home, 'config.yaml'));\n if (!directory.isDirectory() || directory.isSymbolicLink() || !config.isFile() || config.isSymbolicLink())\n throw new Error('Unsafe Hermes configuration path');\n if ((await realpath(join(home, 'config.yaml'))) !== join(canonical, 'config.yaml'))\n throw new Error('Unsafe Hermes configuration realpath');\n }\n catch (error) {\n if (record(error) && error.code === 'ENOENT')\n throw new Error('请先在 Hermes 登录设置中选择服务商和模型');\n throw error;\n }\n}\n/** Only explicit native cached capabilities for the selected provider are offered.\n * Other providers, unknown/stale capabilities and ambiguous endpoints keep native defaults.\n * Source: NousResearch/hermes-agent@4787e4d, hermes_cli/models_reasoning_caps.py.\n */\nasync function reasoningEfforts(home, provider, model) {\n const fallback = ['default'];\n if (provider === 'nous')\n return hermesNousEfforts(home, selectHermesNousSource(await assertHermesOwnAccounts(home)), model);\n if (provider !== 'openrouter')\n return fallback;\n try {\n const cacheDirectory = join(home, 'cache');\n const path = join(cacheDirectory, 'reasoning_caps.json');\n if ((await lstat(cacheDirectory)).isSymbolicLink())\n return fallback;\n const info = await lstat(path);\n if (!info.isFile() || info.isSymbolicLink() || info.size > 4 * 1024 * 1024)\n return fallback;\n const cache = JSON.parse(await readFile(path, 'utf8'));\n const entry = record(cache) ? cache['https://openrouter.ai/api/v1/models'] : undefined;\n if (!record(entry) ||\n typeof entry.ts !== 'number' ||\n !Number.isFinite(entry.ts) ||\n Date.now() / 1000 - entry.ts > 24 * 60 * 60 ||\n entry.ts > Date.now() / 1000 + 60 ||\n !record(entry.caps))\n return fallback;\n const capabilities = entry.caps[model];\n if (!record(capabilities) ||\n capabilities.supports_reasoning !== true ||\n !Array.isArray(capabilities.supported_efforts))\n return fallback;\n const efforts = capabilities.supported_efforts.filter((value) => typeof value === 'string' && value !== 'default' && EFFORTS.includes(value));\n return [...new Set([...fallback, ...efforts])];\n }\n catch {\n return fallback;\n }\n}\n/** Read-only native scalar queries; never prints a config object containing API keys. */\nexport async function discoverHermes(executable, capture, stateDirectory, hermesHome, options = {}) {\n options.signal?.throwIfAborted();\n await verifyHermesExecutable(executable, options.signal ?? AbortSignal.timeout(15000));\n const home = hermesHomeDirectory(hermesHome);\n await requireConfiguration(home);\n if (options.renewal)\n await ensureHermesNousFresh({ ...options.renewal, home, executable });\n const material = await assertHermesOwnAccounts(home, options.signal);\n options.signal?.throwIfAborted();\n const env = await environment(stateDirectory, home, material.config.model?.provider === 'nous' ? String(hermesNousMinimumTtl(material.env)) : undefined);\n const get = async (key) => {\n options.signal?.throwIfAborted();\n const result = await capture(await hermesNativeCommand(executable, ['config', 'get', key, '--json'], options.signal), env);\n options.signal?.throwIfAborted();\n return JSON.parse(result);\n };\n // Native launchers take a per-home install lock and may initialize a new profile's\n // runtime. Parallel scalar queries can race that first initialization.\n // Nous has an authenticated native catalog contract. Its bounded own config is\n // sufficient; the dedicated bounded renewal above is the only metadata write path.\n const model = material.config.model?.provider === 'nous' ? material.config.model.default : await get('model.default');\n const provider = material.config.model?.provider === 'nous' ? 'nous' : await get('model.provider');\n if (!nonempty(model) || !nonempty(provider) || provider === 'auto')\n throw new Error('请在 Hermes 登录设置中明确选择服务商和模型,然后刷新');\n const scope = await hermesAccountModels(home, provider, options);\n options.signal?.throwIfAborted();\n if (scope.state !== 'supported')\n return [];\n const models = await Promise.all(scope.models.map(async (candidate) => ({\n id: JSON.stringify([provider, candidate.id]),\n label: candidate.name ?? candidate.id,\n efforts: await reasoningEfforts(home, provider, candidate.id),\n cost: candidate.cost,\n })));\n options.signal?.throwIfAborted();\n return models;\n}\n/** Official stream-json CLI; not a claim of local installation or live execution. */\nexport async function prepareHermes(input) {\n await verifyHermesExecutable(input.executable, input.renewal?.signal ?? AbortSignal.timeout(15000));\n const [provider, model] = selection(input.preference.model);\n if (!['plan', 'accept-edits'].includes(input.mode))\n throw new Error('Invalid Hermes mode');\n if (input.mode === 'plan')\n throw new Error('Hermes 当前原生非交互模式不支持只读派遣,请使用其他 CLI 或明确授权写入任务');\n if (!nonempty(input.prompt))\n throw new Error('Prompt must not be empty');\n if (input.conversationId !== undefined && !nonempty(input.conversationId))\n throw new Error('Invalid Hermes session identity');\n const home = hermesHomeDirectory(input.hermesHome);\n await requireConfiguration(home);\n if (input.renewal)\n await ensureHermesNousFresh({ ...input.renewal, home, executable: input.executable });\n input.renewal?.signal.throwIfAborted();\n const material = await assertHermesOwnAccounts(home, input.renewal?.signal);\n if (provider === 'nous')\n selectHermesNousSource(material);\n const efforts = await reasoningEfforts(home, provider, model);\n if (!efforts.includes(input.preference.effort))\n throw new Error('Hermes 未确认支持此思考强度,请刷新模型后重选');\n return {\n argv: await hermesNativeCommand(input.executable, [\n '--in',\n input.project,\n 'chat',\n '--format',\n 'stream-json',\n '--model',\n model,\n '--provider',\n provider,\n '--toolsets',\n 'terminal,file',\n '--ignore-rules',\n ...(input.preference.effort === 'default' ? [] : ['--reasoning', input.preference.effort]),\n ...(input.conversationId ? ['--resume', input.conversationId] : []),\n '-q',\n input.prompt,\n ]),\n env: await environment(input.stateDirectory, home, provider === 'nous' ? String(hermesNousMinimumTtl(material.env)) : undefined),\n };\n}\n/** Map only counters actually reported by the native final envelope. These are run totals,\n * not a model context-window occupancy estimate and not per-message counters.\n */\nexport function hermesTokenUsage(tokens) {\n if (!record(tokens))\n return undefined;\n const count = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n const total = count(tokens.total);\n if (total === undefined)\n return undefined;\n return {\n total,\n input: count(tokens.input),\n output: count(tokens.output),\n cacheRead: count(tokens.cache_read),\n scope: 'run',\n };\n}\n/** Native record validation; the source protocol has no public reasoning event. */\nexport function parseHermesRecord(value) {\n if (!record(value))\n throw new Error('Invalid Hermes event');\n const finite = (x) => typeof x === 'number' && Number.isFinite(x) && x >= 0;\n switch (value.type) {\n case 'system':\n if (value.subtype === 'init' && nonempty(value.session_id) && nonempty(value.model))\n return value;\n break;\n case 'text':\n if (typeof value.text === 'string')\n return value;\n break;\n case 'tool_use':\n case 'tool_result':\n if (!nonempty(value.name) || (value.tool_call_id !== undefined && !nonempty(value.tool_call_id)))\n break;\n if (value.type === 'tool_use' && (value.input === undefined || record(value.input)))\n return value;\n if (value.type === 'tool_result' &&\n typeof value.output === 'string' &&\n typeof value.is_error === 'boolean' &&\n finite(value.duration_ms))\n return value;\n break;\n case 'result':\n if (nonempty(value.session_id) &&\n typeof value.text === 'string' &&\n Number.isInteger(value.exit_code) &&\n (value.error === undefined || typeof value.error === 'string') &&\n (value.duration_ms === undefined || finite(value.duration_ms)) &&\n (value.tokens === undefined || (record(value.tokens) && Object.values(value.tokens).every(finite))))\n return value;\n break;\n }\n throw new Error('Invalid Hermes event');\n}\nexport class HermesProtocol {\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n response = '';\n assistantStep = 0;\n assistantSegmentOpen = false;\n final;\n terminal = false;\n ended = false;\n failure;\n tools = new Map();\n result;\n conversationId;\n constructor(emit, identify, maxLineBytes) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n if (this.ended)\n throw new Error('Hermes stream already ended');\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let end;\n while ((end = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, end).trim();\n this.pending = this.pending.slice(end + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n }\n end() {\n if (this.ended)\n return;\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n this.ended = true;\n if (!this.conversationId)\n return;\n // The native final envelope is authoritative. Tool-progress callbacks are advisory:\n // a model can recover from a failed tool, and a final envelope may follow an unfinished\n // callback. Preserve the observed tool row instead of rewriting the run's outcome.\n const error = this.failure ?? (!this.terminal ? 'Hermes 缺少 result 终态' : undefined);\n this.result = {\n conversationId: this.conversationId,\n status: error ? 'ERROR' : 'SUCCESS',\n response: this.final ?? this.response,\n ...(error ? { error } : {}),\n };\n this.emit({\n kind: 'result',\n step: this.assistantStep || undefined,\n text: this.result.response,\n state: this.result.status,\n ...(error ? { detail: error } : {}),\n });\n }\n assistant(text) {\n if (!this.assistantSegmentOpen) {\n this.assistantStep += 1;\n this.assistantSegmentOpen = true;\n }\n this.emit({ kind: 'assistant', step: this.assistantStep, text });\n }\n id(id) {\n if (this.conversationId && this.conversationId !== id)\n throw new Error('Hermes session identity changed');\n if (!this.conversationId)\n this.identify(id);\n this.conversationId = id;\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n if (this.terminal)\n throw new Error('Unexpected event after Hermes result');\n const event = parseHermesRecord(JSON.parse(line));\n if (event.type === 'system') {\n if (this.conversationId)\n throw new Error('Duplicate Hermes init');\n this.id(event.session_id);\n this.emit({ kind: 'status', text: 'CLI 已连接', observedModel: event.model });\n return;\n }\n if (!this.conversationId)\n throw new Error('Missing Hermes init session identity');\n if (event.type === 'text') {\n // Native on_text_delta emits increments (including whitespace), not snapshots.\n // One step identifies a continuous response segment for foldEvents to append.\n if (event.text) {\n this.response += event.text;\n this.assistant(event.text);\n }\n return;\n }\n if (event.type === 'result') {\n this.id(event.session_id);\n this.terminal = true;\n this.final = event.text;\n if (event.exit_code !== 0 || event.error)\n this.failure = event.error || `Hermes 运行失败(${event.exit_code})`;\n // A final envelope replaces the last streamed segment during folding. It must\n // not append a second full answer. A tool boundary with no subsequent deltas\n // still needs a new response row after the tool, including non-streaming models.\n if (event.text && !this.assistantSegmentOpen)\n this.assistant(event.text);\n return;\n }\n this.assistantSegmentOpen = false;\n let key = event.tool_call_id;\n if (event.type === 'tool_use') {\n if (!key) {\n if ([...this.tools.values()].some((tool) => tool.name === event.name && !tool.done))\n throw new Error('Ambiguous Hermes tool identity');\n key = `anonymous:${this.tools.size}`;\n }\n if (this.tools.has(key))\n throw new Error('Duplicate Hermes tool identity');\n const tool = { step: this.tools.size + 1, name: event.name, done: false };\n this.tools.set(key, tool);\n this.emit({\n kind: 'tool',\n text: tool.name,\n step: tool.step,\n state: 'running',\n detail: JSON.stringify(event.input ?? {}),\n });\n }\n else {\n if (!key) {\n const matching = [...this.tools.entries()].filter(([, tool]) => tool.name === event.name && !tool.done);\n if (matching.length !== 1)\n throw new Error('Unmatched Hermes tool result');\n key = matching[0][0];\n }\n const tool = this.tools.get(key);\n if (!tool || tool.done || tool.name !== event.name)\n throw new Error('Unmatched Hermes tool result');\n tool.done = true;\n this.emit({\n kind: 'tool',\n text: tool.name,\n step: tool.step,\n state: event.is_error ? 'failed' : 'completed',\n detail: event.output,\n });\n }\n }\n}\n//# sourceMappingURL=hermes-adapter.js.map","import { chmodSync, closeSync, constants, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, writeFileSync, } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { hermesHomeDirectory, validateHermesHomeDirectory } from \"./hermes-adapter.js\";\nconst markerText = '{\"version\":1,\"source\":\"plugin-native\"}\\n';\nfunction paths(config) {\n const root = validateHermesHomeDirectory(resolve(config.stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now')));\n return {\n root,\n parent: join(root, 'accounts'),\n home: join(root, 'accounts', 'hermes'),\n marker: join(root, 'accounts', 'hermes-source.json'),\n };\n}\nfunction selected(marker) {\n let fd;\n try {\n fd = openSync(marker, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = fstatSync(fd);\n if (!info.isFile() || info.nlink !== 1 || info.size > 256 || readFileSync(fd, 'utf8') !== markerText)\n throw new Error('Hermes 账号来源记录无效,请检查插件目录');\n return true;\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return false;\n throw error;\n }\n finally {\n if (fd !== undefined)\n closeSync(fd);\n }\n}\n/** Once explicitly selected, this home remains authoritative even after logout/deletion.\n * The marker is outside native writable account storage and contains no credentials. */\nexport function effectiveHermesHome(config) {\n const own = paths(config);\n for (const path of [own.parent, own.home]) {\n try {\n if (lstatSync(path).isSymbolicLink())\n throw new Error('Unsafe Hermes account directory');\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n }\n return selected(own.marker) ? validateHermesHomeDirectory(own.home) : hermesHomeDirectory(config.hermesHome);\n}\n/** Only an explicit account action establishes this source. Never copy global auth/config. */\nexport function prepareHermesAccountHome(config) {\n // Validate the previous source as well; a misconfigured root must not widen a sandbox grant.\n hermesHomeDirectory(config.hermesHome);\n const own = paths(config);\n for (const path of [own.root, own.parent, own.home]) {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n const info = lstatSync(path);\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('Unsafe Hermes account directory');\n chmodSync(path, 0o700);\n }\n // Native setup merges its defaults and writes its own model/account choices later.\n try {\n writeFileSync(join(own.home, 'config.yaml'), 'auth:\\n adopt_external_logins: false\\n', {\n flag: 'wx',\n mode: 0o600,\n });\n }\n catch (error) {\n if (error.code !== 'EEXIST')\n throw error;\n }\n if (!selected(own.marker)) {\n try {\n writeFileSync(own.marker, markerText, { flag: 'wx', mode: 0o600 });\n }\n catch (error) {\n if (error.code !== 'EEXIST')\n throw error;\n }\n }\n if (!selected(own.marker))\n throw new Error('Hermes 账号来源记录无法保存');\n return validateHermesHomeDirectory(own.home);\n}\n/** Native account selectors must not inherit a Host-managed overlay or secret helper. */\nexport function hermesAccountEnvironment(home) {\n return {\n HERMES_HOME: home,\n HERMES_MANAGED_DIR: join(home, '.cliworker-managed'),\n HERMES_PROFILE: '',\n HERMES_SAFE_MODE: '1',\n HERMES_IGNORE_RULES: '1',\n HERMES_YOLO_MODE: '0',\n HERMES_ACCEPT_HOOKS: '0',\n HERMES_DISABLE_LAZY_INSTALLS: '1',\n };\n}\n//# sourceMappingURL=hermes-account-context.js.map","import { constants } from 'node:fs';\nimport { lstat, open } from 'node:fs/promises';\nimport { createHash, createDecipheriv } from 'node:crypto';\nimport { homedir, platform, userInfo } from 'node:os';\nimport { join } from 'node:path';\n/** Native standalone-account-provider-runtime.js identity binding (ZCode 0.16.9).\n * Keys remain in the Host and are used only for the corresponding native route.\n * OAuth access/refresh tokens and old identities are deliberately not fallbacks.\n */\nexport async function readZCodeAccountBindings(authDirectory, providerIds, options = {}) {\n const result = new Map();\n if (!providerIds.length)\n return result;\n options.signal?.throwIfAborted();\n let file;\n const buffer = Buffer.alloc(64 * 1024 + 1);\n let key;\n try {\n for (const directory of [\n authDirectory,\n join(authDirectory, '.zcode'),\n join(authDirectory, '.zcode/v2'),\n ]) {\n const info = await lstat(directory);\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('Unsafe ZCode credential directory');\n }\n file = await open(join(authDirectory, '.zcode/v2/credentials.json'), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 64 * 1024 || !info.size)\n throw new Error('Unsafe ZCode credential file');\n let length = 0;\n while (length < buffer.length) {\n options.signal?.throwIfAborted();\n const { bytesRead } = await file.read(buffer, length, buffer.length - length, null);\n if (!bytesRead)\n break;\n length += bytesRead;\n }\n const after = await file.stat();\n if (length > 64 * 1024 ||\n length !== info.size ||\n info.size !== after.size ||\n info.mtimeMs !== after.mtimeMs)\n throw new Error('ZCode credentials changed during read');\n const raw = JSON.parse(buffer.subarray(0, length).toString('utf8'));\n if (!raw || typeof raw !== 'object' || Array.isArray(raw))\n throw new Error('Invalid ZCode credentials');\n const values = raw;\n let username = 'unknown';\n try {\n username = userInfo().username;\n }\n catch {\n /* native fallback */\n }\n const secret = (options.credentialSecret ?? process.env.ZCODE_CREDENTIAL_SECRET?.trim()) ||\n `zcode-credential-fallback:${platform()}:${homedir()}:${username}`;\n key = createHash('sha256').update(secret).digest();\n const decode = (id) => {\n const value = values[id];\n if (value == null)\n return;\n if (typeof value !== 'string')\n throw new Error('Invalid ZCode credential value');\n if (!value.startsWith('enc:v1:'))\n return value.trim() || undefined;\n const parts = value.slice(7).split('.');\n if (parts.length !== 3 || parts.some((part) => !/^[A-Za-z0-9_-]+$/.test(part)))\n throw new Error('Invalid ZCode cipher');\n const [iv, tag, body] = parts.map((part) => Buffer.from(part, 'base64url'));\n if (iv.length !== 12 || tag.length !== 16)\n throw new Error('Invalid ZCode cipher');\n const cipher = createDecipheriv('aes-256-gcm', key, iv);\n cipher.setAuthTag(tag);\n const plain = Buffer.concat([cipher.update(body), cipher.final()]);\n try {\n return plain.toString('utf8').trim() || undefined;\n }\n finally {\n plain.fill(0);\n }\n };\n for (const providerId of new Set(providerIds)) {\n options.signal?.throwIfAborted();\n const identity = decode(`account-provider:${providerId}:identity`);\n if (!identity)\n continue;\n const apiKey = decode(`account-provider:coding-plan:${providerId}:account:${encodeURIComponent(identity)}:api-key`);\n if (apiKey)\n result.set(providerId, { identity, key: apiKey });\n }\n return result;\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (error.code === 'ENOENT')\n return result;\n throw new Error('无法安全读取 ZCode 当前账号的 Worker 凭据,请在原生登录设置中检查');\n }\n finally {\n key?.fill(0);\n buffer.fill(0);\n await file?.close();\n }\n}\n/** Key-only view retained for account-scoped metadata queries. */\nexport async function readZCodeAccountApiKeys(authDirectory, providerIds, options = {}) {\n return new Map([...(await readZCodeAccountBindings(authDirectory, providerIds, options))].map(([provider, value]) => [\n provider,\n value.key,\n ]));\n}\n//# sourceMappingURL=zcode-account-models.js.map","import { mkdirSync, chmodSync, writeFileSync, existsSync, readSync, openSync, closeSync, fstatSync, constants, lstatSync, renameSync, rmSync, } from 'node:fs';\nimport { randomUUID } from 'node:crypto';\nimport { join, dirname, basename, resolve } from 'node:path';\nimport { homedir } from 'node:os';\nimport { StringDecoder } from 'node:string_decoder';\nimport { fileURLToPath } from 'node:url';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { probeAccountModels } from './account-models.mjs';\nimport { readZCodeAccountApiKeys, readZCodeAccountBindings } from \"./zcode-account-models.js\";\n// Native ZCode uses exact tool-name sets, not globs. Deny its own delegation\n// surface and bundled browser REPL. This is not a general MCP isolation policy;\n// arbitrary MCP tool names cannot be safely represented by \"mcp__*\" here.\nexport const ZCODE_DENIED_TOOLS = [\n 'Agent',\n 'Task',\n 'Skill',\n 'TaskOutput',\n 'TaskStop',\n 'SendMessage',\n 'ReadSessionContext',\n 'CreateWorkflow',\n 'AmendWorkflow',\n 'SaveWorkflow',\n 'EvalWorkflowSnippet',\n 'ListWorkflowRuns',\n 'GetWorkflowRun',\n 'ResumeWorkflowRun',\n 'ResolveWorkflowQuestion',\n 'ListSavedWorkflows',\n 'ListModels',\n 'mcp__node_repl__js',\n];\nconst record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst nonempty = (value) => typeof value === 'string' && !!value.trim();\n/** Login and every worker share auth; sessions, logs and model choices stay isolated. */\nexport function zcodeAuthDirectory(configured, stateDirectory) {\n return (configured ??\n join(stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), 'accounts', 'zcode'));\n}\n/** A complete, version-controlled CLI can be deployed here without relying on /tmp. */\nexport function managedZCodeEntry(home = homedir()) {\n return join(home, '.local/share/cliworker-now/runtimes/zcode/cli/zcode.cjs');\n}\nfunction builtinPath(executable, builtin) {\n const adjacent = join(dirname(executable), 'provider/zcode-builtin.json');\n // Both Desktop bundles keep glm/zcode.cjs next to config/provider resources.\n const bundled = join(dirname(executable), '../config/provider/zcode-builtin.json');\n const config = builtin ??\n (existsSync(adjacent)\n ? adjacent\n : existsSync(bundled)\n ? bundled\n : '/Applications/ZCode.app/Contents/Resources/config/provider/zcode-builtin.json');\n if (!existsSync(config))\n throw new Error('请配置与 ZCode CLI 配套的 zcodeBuiltinConfig');\n return config;\n}\nexport function zcodeEnvironment(executable, state, auth, builtin) {\n for (const dir of [state, join(state, 'storage'), join(state, 'logs'), join(state, 'tmp')]) {\n // CLI tools can write their own state; do not follow a planted link on the next run.\n let info;\n try {\n info = lstatSync(dir);\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n info = lstatSync(dir);\n }\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('ZCode state directory must not be a symlink');\n chmodSync(dir, 0o700);\n }\n // Harness deliberately scrubs parent SECRET variables. Native authentication,\n // metadata decryption and resumed/headless tasks must use the same cipher key.\n // Keep it exclusively in the selected ZCode child's environment.\n const credentialSecret = process.env.ZCODE_CREDENTIAL_SECRET?.trim();\n return {\n ...(credentialSecret ? { ZCODE_CREDENTIAL_SECRET: credentialSecret } : {}),\n ZCODE_DATA_BASE_DIR: auth ?? zcodeAuthDirectory(),\n ZCODE_STORAGE_DIR: join(state, 'storage'),\n ZCODE_SESSION_DB_PATH: join(state, 'storage/session.sqlite'),\n ZCODE_LOG_DIR: join(state, 'logs'),\n ZCODE_PERSONAL_PROVIDER_CONFIG_FILE: join(state, 'personal.json'),\n ZCODE_BUILTIN_PROVIDER_CONFIG_FILE: builtinPath(executable, builtin),\n TMPDIR: join(state, 'tmp'),\n };\n}\nfunction writePersonalConfig(path, value) {\n const temporary = join(dirname(path), `.personal-${randomUUID()}.tmp`);\n try {\n writeFileSync(temporary, JSON.stringify(value), { flag: 'wx', mode: 0o600 });\n // rename replaces an existing symlink itself; never chmod/write its target.\n renameSync(temporary, path);\n }\n finally {\n rmSync(temporary, { force: true });\n }\n}\nexport async function prepareZCode(input) {\n const builtin = readZCodeConfig(builtinPath(input.executable, input.builtinConfig), false);\n const personal = readZCodePersonal(input.authDirectory, input);\n const selected = resolveZCodeModels(builtin, personal).find((entry) => entry.choice.id === input.preference.model);\n if (!selected)\n throw new Error('ZCode 所选模型不在原生可见目录中');\n if (input.preference.effort !== 'default' && !selected.choice.efforts?.includes(input.preference.effort))\n throw new Error('ZCode 所选强度不受原生模型支持');\n const reasoning = input.preference.effort === 'default'\n ? selected.nativeReasoningDefault\n : input.preference.effort === 'none'\n ? 'disabled'\n : input.preference.effort;\n const selection = {\n providerId: selected.providerId,\n modelId: selected.modelId,\n ...(reasoning ? { options: { reasoningLevel: reasoning } } : {}),\n };\n const env = zcodeEnvironment(input.executable, input.stateDirectory, input.authDirectory, input.builtinConfig);\n // Preserve private provider/model overlays. Only this worker's default selection changes.\n writePersonalConfig(env.ZCODE_PERSONAL_PROVIDER_CONFIG_FILE, {\n ...personal,\n config: {\n ...personal.config,\n defaultModelSelection: selection,\n },\n });\n const argv = [\n ...(/\\.[cm]?js$/.test(input.executable) ? [process.execPath, input.executable] : [input.executable]),\n '--cwd',\n input.project,\n '--mode',\n input.mode === 'plan' ? 'plan' : 'edit',\n '--output-format',\n 'stream-json',\n '--disallowedTools',\n ZCODE_DENIED_TOOLS.join(','),\n ...(input.conversationId ? ['--resume', input.conversationId] : []),\n '--prompt',\n `任务:\\n${input.prompt}`,\n ];\n if (input.conversationId) {\n const request = join(input.stateDirectory, `resume-${randomUUID()}.json`);\n writePersonalConfig(request, {\n executable: input.executable,\n argv,\n project: input.project,\n conversationId: input.conversationId,\n selection,\n });\n return {\n argv: [process.execPath, fileURLToPath(new URL('./zcode-resume.mjs', import.meta.url)), request],\n env,\n };\n }\n return { argv, env };\n}\nconst BUILTIN_MODEL_GROUPS = [\n 'modelRules',\n 'modelApiRules',\n 'providerSiteRules',\n 'templateModelRules',\n 'builtinProviderModelRules',\n];\nconst exactKey = (rule) => JSON.stringify([rule.providerId, rule.modelId]);\nconst nativeId = (value) => nonempty(value) && value.length <= 1024 && !/[\\x00-\\x1f\\x7f]/.test(value);\nconst emptyPersonal = () => ({\n schemaVersion: 1,\n config: {\n providerConfigRules: { providerRules: [] },\n modelConfigRules: { providerModelRules: [], manualProviderModelRules: [] },\n },\n});\n/** Native ConfigOverlay: undefined preserves, null clears, arrays replace. Access types cannot mix. */\nfunction overlayConfig(base, next) {\n return Object.fromEntries([...new Set([...Object.keys(base), ...Object.keys(next)])].map((key) => {\n const value = next[key];\n if (value === undefined)\n return [key, base[key]];\n if (record(base[key]) && record(value) && !(key === 'access' && base[key].type !== value.type))\n return [key, overlayConfig(base[key], value)];\n return [key, value];\n }));\n}\nfunction providerRules(value, personal = false) {\n if (!Array.isArray(value))\n throw new Error('Invalid ZCode provider rules');\n const ids = new Set();\n return value.map((rule) => {\n if (!record(rule) ||\n !nativeId(rule.providerId) ||\n !record(rule.config) ||\n ids.has(rule.providerId) ||\n (rule.enabled !== undefined && typeof rule.enabled !== 'boolean') ||\n (rule.templateId != null && !nativeId(rule.templateId)))\n throw new Error('Invalid ZCode provider rule');\n if (personal &&\n ('builtinModelIds' in rule.config ||\n (rule.providerId.startsWith('account:') && 'access' in rule.config)))\n throw new Error('Invalid ZCode personal provider overlay');\n ids.add(rule.providerId);\n return rule;\n });\n}\nfunction parsePersonal(value) {\n if (!record(value) || value.schemaVersion !== 1 || !record(value.config))\n throw new Error('Unsupported ZCode personal config schema');\n const config = value.config, models = config.modelConfigRules;\n const providers = providerRules(config.providerConfigRules?.providerRules, true);\n if (!record(models) ||\n !Array.isArray(models.providerModelRules) ||\n !Array.isArray(models.manualProviderModelRules))\n throw new Error('Invalid ZCode personal model rules');\n const exact = new Set();\n for (const group of [models.providerModelRules, models.manualProviderModelRules])\n for (const rule of group) {\n if (!record(rule) ||\n !nativeId(rule.providerId) ||\n !nativeId(rule.modelId) ||\n !record(rule.config) ||\n exact.has(exactKey(rule)))\n throw new Error('Invalid or duplicate ZCode personal model rule');\n exact.add(exactKey(rule));\n }\n if (config.providerOrder !== undefined &&\n (!Array.isArray(config.providerOrder) || !config.providerOrder.every(nativeId)))\n throw new Error('Invalid ZCode personal provider order');\n return {\n schemaVersion: 1,\n config: {\n ...config,\n providerConfigRules: { providerRules: providers },\n modelConfigRules: {\n providerModelRules: models.providerModelRules,\n manualProviderModelRules: models.manualProviderModelRules,\n },\n },\n };\n}\nfunction mergePersonal(documents) {\n const providers = new Map();\n const exact = new Map();\n let config = emptyPersonal().config;\n for (const document of documents) {\n config = { ...config, ...document.config };\n for (const rule of document.config.providerConfigRules.providerRules) {\n const prior = providers.get(rule.providerId);\n providers.set(rule.providerId, prior ? { ...prior, ...rule, config: overlayConfig(prior.config, rule.config) } : rule);\n }\n for (const [manual, rules] of [\n [false, document.config.modelConfigRules.providerModelRules],\n [true, document.config.modelConfigRules.manualProviderModelRules],\n ])\n for (const rule of rules)\n exact.set(exactKey(rule), { manual, rule });\n }\n return {\n schemaVersion: 1,\n config: {\n ...config,\n providerConfigRules: { providerRules: [...providers.values()] },\n modelConfigRules: {\n providerModelRules: [...exact.values()].filter((entry) => !entry.manual).map((entry) => entry.rule),\n manualProviderModelRules: [...exact.values()]\n .filter((entry) => entry.manual)\n .map((entry) => entry.rule),\n },\n },\n };\n}\n/** Bounded read of program metadata or private native configuration; never leak parse text. */\nfunction readZCodeConfig(path, optional, personal = false) {\n let fd;\n const buffer = Buffer.alloc(2 * 1024 * 1024 + 1);\n try {\n if (personal) {\n // The native .zcode/v2 directory entries must not redirect a private read.\n const parent = lstatSync(dirname(path));\n if (!parent.isDirectory() || parent.isSymbolicLink())\n throw new Error('Unsafe personal config directory');\n if (basename(dirname(path)) === 'v2' &&\n basename(dirname(dirname(path))) === '.zcode' &&\n lstatSync(dirname(dirname(path))).isSymbolicLink())\n throw new Error('Unsafe personal config ancestor');\n }\n fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = fstatSync(fd);\n if (!before.isFile() || before.nlink !== 1 || before.size >= buffer.length)\n throw new Error('Unsafe ZCode config file');\n let length = 0;\n while (length < buffer.length) {\n const count = readSync(fd, buffer, length, buffer.length - length, null);\n if (!count)\n break;\n length += count;\n }\n const after = fstatSync(fd);\n if (length >= buffer.length || before.size !== after.size || before.mtimeMs !== after.mtimeMs)\n throw new Error('ZCode config changed during read');\n return JSON.parse(buffer.subarray(0, length).toString('utf8'));\n }\n catch (error) {\n if (optional && error.code === 'ENOENT')\n return undefined;\n throw new Error(personal ? 'ZCode 个人模型配置无法安全读取或解析' : 'ZCode 内置模型目录无法安全读取或解析');\n }\n finally {\n buffer.fill(0);\n if (fd !== undefined)\n closeSync(fd);\n }\n}\nfunction personalPaths(authDirectory, options = {}) {\n const explicit = options.personalConfig ??\n (options.nativeHome === undefined ? process.env.ZCODE_PERSONAL_PROVIDER_CONFIG_FILE?.trim() : undefined);\n const nativeBase = options.nativeHome ?? process.env.ZCODE_DATA_BASE_DIR?.trim() ?? homedir();\n const paths = new Map([\n [resolve(explicit || join(nativeBase, '.zcode/v2/provider_config.json')), !explicit],\n ]);\n const pluginPath = resolve(join(authDirectory ?? zcodeAuthDirectory(), '.zcode/v2/provider_config.json'));\n if (!paths.has(pluginPath))\n paths.set(pluginPath, true);\n return paths;\n}\nfunction readZCodePersonal(authDirectory, options = {}) {\n const documents = [];\n for (const [path, optional] of personalPaths(authDirectory, options)) {\n const raw = readZCodeConfig(path, optional, true);\n if (raw !== undefined)\n documents.push(parsePersonal(raw));\n }\n return mergePersonal(documents);\n}\n/** Private Host material, using the exact discovery overlay and current-account key binding. */\nexport async function readZCodeBindingMaterial(executable, authDirectory, builtinConfig, options = {}) {\n options.signal?.throwIfAborted();\n const candidates = resolveZCodeModels(readZCodeConfig(builtinPath(executable, builtinConfig), false), readZCodePersonal(authDirectory, options));\n const accounts = await readZCodeAccountBindings(authDirectory, candidates.flatMap((entry) => entry.providerConfig.access?.type === 'zhipu-account' ? [entry.providerId] : []), options);\n const credentials = new Map();\n for (const entry of candidates) {\n const { access, api } = entry.providerConfig;\n const account = access?.type === 'zhipu-account' ? accounts.get(entry.providerId) : undefined;\n const key = account?.key ??\n (['api-key', 'zhipu-coding-plan-api-key'].includes(access?.type) ? access.apiKey : undefined);\n if (!nonempty(key))\n continue;\n credentials.set(entry.providerId, {\n provider: entry.providerId,\n key,\n identity: account?.identity,\n baseUrl: api.baseUrl,\n apiType: api.type,\n });\n }\n options.signal?.throwIfAborted();\n return {\n credentials: [...credentials.values()],\n sourceIds: [\n resolve(authDirectory),\n ...[...personalPaths(authDirectory, options)].flatMap(([path, optional]) => readZCodeConfig(path, optional, true) === undefined ? [] : [path]),\n ],\n };\n}\n/** Account evidence is an explicit native API credential, never a catalog entry. */\nexport function readZCodePersonalIdentity(authDirectory, options = {}) {\n try {\n const personal = readZCodePersonal(authDirectory, options);\n let unknown = false;\n let configured = false;\n for (const rule of personal.config.providerConfigRules.providerRules) {\n if (rule.enabled === false || rule.config.visibility === 'hidden')\n continue;\n const access = rule.config.access;\n if (access == null)\n continue;\n if (!record(access))\n throw new Error('Invalid ZCode access configuration');\n if (!['api-key', 'zhipu-coding-plan-api-key'].includes(access.type)) {\n unknown = true;\n continue;\n }\n if (access.apiKey != null && typeof access.apiKey !== 'string')\n throw new Error('Invalid ZCode API credential');\n if (nonempty(access.apiKey))\n configured = true;\n }\n if (configured)\n return {\n state: 'configured',\n authMethod: 'api',\n verification: 'local',\n summary: '已配置 ZCode API',\n };\n return unknown\n ? { state: 'unknown', verification: 'local', summary: '账号配置格式未知' }\n : { state: 'unconfigured', verification: 'local', summary: '尚未配置 ZCode API' };\n }\n catch {\n return { state: 'unavailable', verification: 'local', summary: '账号配置读取失败,请检查配置' };\n }\n}\nfunction nativeOrder(base, personal, order = []) {\n const builtin = [...new Set(base)], own = [...new Set(personal)].filter((id) => !builtin.includes(id));\n const known = new Set([...builtin, ...own]), arranged = [...new Set(order)].filter((id) => known.has(id)), moved = new Set(arranged);\n return [...builtin.filter((id) => !moved.has(id)), ...arranged, ...own.filter((id) => !moved.has(id))];\n}\nfunction clearManualModel(config) {\n const next = structuredClone(config);\n if (record(next.properties)) {\n for (const key of [\n 'contextWindow',\n 'supportsJsonSchemaOutput',\n 'supportsNativeWebSearch',\n 'supportsMidConversationSystem',\n ])\n delete next.properties[key];\n if (record(next.properties.inputFormat))\n for (const key of ['supportsImage', 'supportsVideo', 'supportsPdf'])\n delete next.properties.inputFormat[key];\n }\n if (record(next.optionSpecs)) {\n delete next.optionSpecs.reasoningLevel;\n if (record(next.optionSpecs.maxOutputTokens))\n delete next.optionSpecs.maxOutputTokens.max;\n }\n return next;\n}\nfunction resolveZCodeModels(value, personal) {\n if (!record(value) || value.schemaVersion !== 1 || !record(value.config))\n throw new Error('Unsupported ZCode builtin catalog schema');\n const base = providerRules(value.config.providerConfigRules?.providerRules), rules = value.config.modelConfigRules;\n if (!record(rules) || BUILTIN_MODEL_GROUPS.some((key) => !Array.isArray(rules[key])))\n throw new Error('Incomplete ZCode builtin rule groups');\n const templates = new Map();\n for (const template of value.config.providerConfigRules?.templateRules ?? []) {\n if (!record(template) ||\n !nativeId(template.templateId) ||\n !record(template.config) ||\n templates.has(template.templateId))\n throw new Error('Invalid ZCode provider template');\n templates.set(template.templateId, template.config);\n }\n const providers = new Map();\n const withTemplate = (rule) => {\n const template = rule.templateId == null ? undefined : templates.get(rule.templateId);\n if (rule.templateId != null && !template)\n throw new Error('Missing ZCode provider template');\n return { ...rule, config: template ? overlayConfig(template, rule.config) : rule.config };\n };\n for (const rule of base)\n providers.set(rule.providerId, withTemplate(rule));\n for (const rule of personal.config.providerConfigRules.providerRules) {\n const prior = providers.get(rule.providerId);\n providers.set(rule.providerId, prior ? { ...prior, ...rule, config: overlayConfig(prior.config, rule.config) } : withTemplate(rule));\n }\n const match = (pattern, text, insensitive = false) => {\n if (!nonempty(pattern) || pattern.length > 4096)\n throw new Error('Invalid ZCode model rule');\n try {\n return new RegExp(`^(?:${pattern})$`, insensitive ? 'i' : undefined).test(text);\n }\n catch {\n throw new Error('Invalid ZCode model rule pattern');\n }\n };\n const choices = new Map();\n const providerIds = nativeOrder(base.map((rule) => rule.providerId), personal.config.providerConfigRules.providerRules.map((rule) => rule.providerId), personal.config.providerOrder);\n for (const providerId of providerIds) {\n const provider = providers.get(providerId), config = provider.config;\n if (provider.enabled === false || config.visibility === 'hidden')\n continue;\n const builtinIds = config.builtinModelIds ?? [], personalIds = config.personalModelIds ?? [], modelOrder = config.modelOrder ?? [];\n if (![builtinIds, personalIds, modelOrder].every((ids) => Array.isArray(ids) && ids.every(nativeId)))\n throw new Error('Invalid ZCode model membership');\n if (!record(config.api) ||\n !['anthropic-messages', 'openai-chat-completions', 'openai-responses'].includes(config.api.type) ||\n !nonempty(config.api.baseUrl))\n throw new Error('Invalid ZCode provider API');\n let endpoint;\n try {\n endpoint = new URL(config.api.baseUrl);\n }\n catch {\n throw new Error('Invalid ZCode provider API URL');\n }\n const suffix = `${endpoint.search}${endpoint.hash}`, serialized = endpoint.toString();\n const baseUrl = `${(suffix ? serialized.slice(0, -suffix.length) : serialized).replace(/\\/+$/, '')}${suffix}`;\n for (const modelId of nativeOrder(builtinIds, personalIds, modelOrder)) {\n let model = {};\n const apply = (rule, manual = false) => {\n model = overlayConfig(manual ? clearManualModel(model) : model, rule.config);\n };\n for (const key of BUILTIN_MODEL_GROUPS)\n for (const rule of rules[key]) {\n if (!record(rule) || !record(rule.config))\n throw new Error('Invalid ZCode builtin model rule');\n if (key === 'builtinProviderModelRules') {\n if (rule.providerId !== providerId || rule.modelId !== modelId)\n continue;\n }\n else if (key === 'templateModelRules') {\n if (rule.templateId !== provider.templateId || rule.modelId !== modelId)\n continue;\n }\n else {\n if (!match(rule.modelMatch, modelId, true))\n continue;\n if ((key === 'modelApiRules' || key === 'providerSiteRules') &&\n rule.apiTypeMatch !== undefined &&\n !match(rule.apiTypeMatch, config.api.type))\n continue;\n if (key === 'providerSiteRules' && !match(rule.baseUrlMatch, baseUrl))\n continue;\n }\n apply(rule);\n }\n for (const rule of personal.config.modelConfigRules.providerModelRules)\n if (rule.providerId === providerId && rule.modelId === modelId)\n apply(rule);\n for (const rule of personal.config.modelConfigRules.manualProviderModelRules)\n if (rule.providerId === providerId && rule.modelId === modelId)\n apply(rule, true);\n if (model.enabled !== undefined && typeof model.enabled !== 'boolean')\n throw new Error('Invalid ZCode model enabled rule');\n if (model.enabled !== true)\n continue;\n const values = model.optionSpecs?.reasoningLevel?.values;\n if (values != null && (!Array.isArray(values) || !values.every(nonempty)))\n throw new Error('Invalid ZCode model reasoning choices');\n // Native enabled has no numeric effort meaning; keep native default rather than inventing low/high.\n const mapped = Array.isArray(values)\n ? values.flatMap((level) => level === 'disabled'\n ? ['none']\n : level === 'enabled'\n ? ['default']\n : EFFORTS.includes(level)\n ? [level]\n : [])\n : [];\n const id = `${providerId}/${modelId}`;\n if (choices.has(id))\n throw new Error('Ambiguous ZCode provider/model ID');\n choices.set(id, {\n providerId,\n modelId,\n nativeReasoningDefault: Array.isArray(values) ? values.at(-1) : undefined,\n providerConfig: config,\n choice: {\n id,\n label: `${modelId}(${providerId} · 本机目录)`,\n efforts: [...new Set(mapped.length ? mapped : ['default'])],\n },\n });\n }\n }\n return [...choices.values()];\n}\n/** Public projection contains only original model/provider identifiers and proven reasoning choices. */\nexport function parseZCodeBuiltin(value, personal) {\n return resolveZCodeModels(value, personal === undefined ? emptyPersonal() : parsePersonal(personal)).map((entry) => entry.choice);\n}\n// Exact canonical IDs from ZCode 0.16.9's official-glm-model-id.ts. The native\n// account metadata returns lowercase aliases, while execution keeps these IDs.\n// Unknown spellings/suffixes remain exact; this is not general case folding.\nconst officialGlmIds = new Map([\n 'GLM-5.3',\n 'GLM-5.3-Flash',\n 'GLM-5V-Turbo',\n 'GLM-5.2',\n 'GLM-5.1',\n 'GLM-5.1-Highspeed',\n 'GLM-5',\n 'GLM-5-Turbo',\n 'GLM-4.7',\n 'GLM-4.7-FlashX',\n 'GLM-4.7-Flash',\n 'GLM-4.6',\n 'GLM-4.5-Air',\n 'GLM-4.5',\n 'GLM-4.6V',\n 'GLM-4.6V-Flash',\n 'GLM-4.6V-FlashX',\n 'GLM-4.1V-Thinking-FlashX',\n 'GLM-4.1V-Thinking-Flash',\n 'GLM-4-FlashX-250414',\n 'GLM-4-Flash-250414',\n 'GLM-4V-Flash',\n].map((id) => [id.toLowerCase(), id]));\nfunction usesOfficialGlmAliases(entry) {\n const { access, api } = entry.providerConfig;\n if (access.type !== 'zhipu-account' ||\n access.mode !== 'individual-coding-plan' ||\n api.type !== 'anthropic-messages')\n return false;\n const baseUrl = api.baseUrl.replace(/\\/+$/, '');\n return ((entry.providerId === 'account:bigmodel-individual-coding-plan' &&\n access.accountType === 'bigmodel' &&\n baseUrl === 'https://open.bigmodel.cn/api/anthropic') ||\n (entry.providerId === 'account:zai-individual-coding-plan' &&\n access.accountType === 'zai' &&\n baseUrl === 'https://api.z.ai/api/anthropic'));\n}\nexport async function discoverZCode(executable, _capture, _stateDirectory, authDirectory, builtinConfig, options = {}) {\n options.signal?.throwIfAborted();\n const personal = readZCodePersonal(authDirectory, options);\n const candidates = resolveZCodeModels(readZCodeConfig(builtinPath(executable, builtinConfig), false), personal);\n const bound = await readZCodeAccountApiKeys(authDirectory ?? zcodeAuthDirectory(), candidates.flatMap((entry) => {\n const access = entry.providerConfig.access;\n return access?.type === 'zhipu-account' &&\n access.mode === 'individual-coding-plan' &&\n ['bigmodel', 'zai'].includes(access.accountType)\n ? [entry.providerId]\n : [];\n }), options);\n const groups = new Map();\n for (const entry of candidates) {\n const { access, api } = entry.providerConfig;\n // Native OAuth login binds a concrete Worker API key to the current account.\n // Only that exact binding enters the same native route; static entitled flags,\n // old identities, desktop OAuth tokens and refresh tokens do not substitute.\n const apiKey = access?.type === 'zhipu-account'\n ? bound.get(entry.providerId)\n : ['api-key', 'zhipu-coding-plan-api-key'].includes(access?.type)\n ? access.apiKey\n : undefined;\n if (!nonempty(apiKey))\n continue;\n // Custom headers may alter both credential and scope. Until this query can\n // mirror the native route exactly, keep that route out of the public list.\n if (record(api.headers) && Object.keys(api.headers).length)\n continue;\n const group = groups.get(entry.providerId) ?? [];\n group.push(entry);\n groups.set(entry.providerId, group);\n }\n const results = await Promise.all([...groups.values()].map(async (entries) => {\n const { access, api } = entries[0].providerConfig;\n const secret = access.type === 'zhipu-account' ? bound.get(entries[0].providerId) : access.apiKey;\n const scope = await probeAccountModels({\n provider: entries[0].providerId,\n credential: { type: 'api', key: secret },\n baseUrl: api.baseUrl,\n apiType: api.type,\n // Native createAnthropic adds x-api-key, while ZCode's factory also\n // supplies withAnthropicAuthorizationHeader for the same bound key.\n ...(api.type === 'anthropic-messages' ? { anthropicAuth: 'api-key-and-bearer' } : {}),\n verifiedModelIds: [],\n }, { ...options.probeOptions, signal: options.signal ?? options.probeOptions?.signal });\n if (scope.state !== 'supported')\n return [];\n const officialAliases = usesOfficialGlmAliases(entries[0]);\n return entries.flatMap(({ modelId, choice }) => {\n const supported = scope.models.find((entry) => entry.id === modelId ||\n (officialAliases && officialGlmIds.get(entry.id.toLowerCase()) === modelId));\n if (!supported || choice.id.includes(secret) || choice.label.includes(secret))\n return [];\n return [\n {\n ...choice,\n cost: access.type !== 'api-key' && supported.cost === 'free' ? 'unknown' : supported.cost,\n },\n ];\n });\n }));\n options.signal?.throwIfAborted();\n return results.flat();\n}\nexport class ZCodeProtocol {\n emit;\n identify;\n maxLineBytes;\n expectedModel;\n decoder = new StringDecoder('utf8');\n pending = '';\n steps = new Map();\n open = new Set();\n toolNames = new Map();\n failed = false;\n completed = false;\n ended = false;\n conversationId;\n result;\n constructor(emit, identify, maxLineBytes, expectedModel) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n this.expectedModel = expectedModel;\n }\n feed(chunk) {\n if (this.ended)\n throw new Error('ZCode stream already ended');\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let n;\n while ((n = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, n).trim();\n this.pending = this.pending.slice(n + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('ZCode event too large');\n }\n end() {\n if (this.ended)\n return;\n this.ended = true;\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n }\n step(id) {\n if (!this.steps.has(id))\n this.steps.set(id, this.steps.size);\n return this.steps.get(id);\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('ZCode event too large');\n let value;\n try {\n value = JSON.parse(line);\n }\n catch {\n throw new Error('Invalid ZCode stream-json event');\n }\n if (!record(value) || !nonempty(value.type) || this.result)\n throw new Error('Unexpected ZCode event');\n const v = value;\n const p = record(v.payload) ? v.payload : {};\n if (nonempty(v.sessionId)) {\n if (this.conversationId && this.conversationId !== v.sessionId)\n throw new Error('ZCode session changed');\n if (!this.conversationId) {\n this.conversationId = v.sessionId;\n this.identify(v.sessionId);\n }\n }\n if (v.type === 'model.streaming' && p.kind === 'text_delta') {\n if (!nonempty(p.assistantMessageId) || typeof p.delta !== 'string')\n throw new Error('Invalid ZCode text delta');\n this.emit({ kind: 'assistant', step: this.step(p.assistantMessageId), text: p.delta });\n }\n else if (v.type === 'session.updated' && nonempty(p.providerId) && nonempty(p.modelId)) {\n if (this.expectedModel && `${p.providerId}/${p.modelId}` !== this.expectedModel)\n throw new Error('ZCode 实际模型与所选模型不匹配,任务已拒绝');\n this.emit({ kind: 'status', text: 'ZCode 模型已确认', observedModel: `${p.providerId}/${p.modelId}` });\n }\n else if (v.type === 'tool.updated') {\n if (p.kind === 'batch') {\n // Native permission rejection may only emit scheduled + batch(errorCount),\n // with no started/result event. Never let turn.completed erase that fact.\n if (!Number.isSafeInteger(p.errorCount) || p.errorCount < 0)\n throw new Error('Invalid ZCode tool batch');\n if (p.errorCount > 0)\n this.failed = true;\n }\n else if (['scheduled', 'started', 'result'].includes(p.kind)) {\n if (!nonempty(p.toolCallId))\n throw new Error('Invalid ZCode tool identity');\n const done = p.kind === 'result';\n if (done) {\n this.open.delete(p.toolCallId);\n if (p.result?.success !== true)\n this.failed = true;\n }\n else\n this.open.add(p.toolCallId);\n if (nonempty(p.toolName))\n this.toolNames.set(p.toolCallId, p.toolName);\n this.emit({\n kind: 'tool',\n step: this.step(p.toolCallId),\n text: this.toolNames.get(p.toolCallId) ?? '工具',\n state: done ? (p.result?.success === true ? 'COMPLETED' : 'FAILED') : 'RUNNING',\n detail: JSON.stringify(p.result ?? p),\n });\n }\n }\n else if (v.type === 'permission.resolved' &&\n (p.decision === 'deny' || p.decision?.behavior === 'deny' || p.resolution === 'deny')) {\n this.failed = true;\n this.emit({ kind: 'diagnostic', text: 'ZCode 权限请求被拒绝' });\n }\n else if (v.type === 'turn.failed' || v.type === 'error') {\n this.failed = true;\n this.emit({ kind: 'diagnostic', text: 'ZCode 执行失败', detail: JSON.stringify(p) });\n }\n else if (v.type === 'turn.completed') {\n this.completed = p.resultType === 'success';\n if (!this.completed)\n this.failed = true;\n }\n else if (v.type === 'result') {\n if (!this.conversationId || !nonempty(v.sessionId) || typeof v.response !== 'string')\n throw new Error('ZCode result missing session/text');\n const status = this.completed && !this.failed && !this.open.size ? 'SUCCESS' : 'ERROR';\n this.result = {\n conversationId: this.conversationId,\n status,\n response: v.response,\n ...(status === 'ERROR' ? { error: 'ZCode 未成功完成,存在失败工具、权限拒绝或缺失终态' } : {}),\n };\n this.emit({ kind: 'result', text: v.response, state: status });\n }\n }\n}\n//# sourceMappingURL=zcode-adapter.js.map","import { readClaudeOwnRoute, claudeRouteStatusArguments, claudeRouteIdentity, ClaudeOwnRouteError, } from \"./claude-own-route.js\";\nimport { constants } from 'node:fs';\nimport { lstat, open } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { dirname, isAbsolute, join, resolve } from 'node:path';\nimport { CLI_LABELS } from \"../shared/types.js\";\nimport { captureCatalogMetadata, resolveCliExecutable } from \"./adapters.js\";\nimport { readCodexAccount } from \"./codex-account.js\";\nimport { assertAgyNativeAccountRoute } from \"./agy-models.js\";\nimport { readWindowsAgyAccount } from \"./agy-windows-account.js\";\nimport { readFirstPartyModelSources } from \"./first-party-models.js\";\nimport { KimiOAuthModelError } from \"./kimi-oauth-models.js\";\nimport { readPiOmpAccountMaterial, safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { readOpenCodeProfile, OPENCODE_OAUTH_UNSUPPORTED } from \"./opencode-native.js\";\nimport { openCodeAuthDirectory } from \"./opencode-adapter.js\";\nimport { effectiveHermesHome } from \"./hermes-account-context.js\";\nimport { assertHermesOwnAccounts, hermesPoolEntryUnavailable } from \"./hermes-models.js\";\nimport { HermesNousError, selectHermesNousSource } from \"./hermes-nous.js\";\nimport { hermesUnsuppressedEnvironment, projectHermesUnsuppressedAuth } from \"./hermes-suppression.js\";\nimport { readZCodeBindingMaterial, zcodeAuthDirectory } from \"./zcode-adapter.js\";\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nimport { ensureHermesNousFresh, HermesRenewalError } from \"./hermes-renewal.js\";\nconst object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst text = (v) => typeof v === 'string' && !!v.trim();\nconst literal = (v) => text(v) && !/^(?:!|\\$|op:\\/\\/|<|your[_ -]|placeholder|changeme)/i.test(v.trim()) && !/[\\x00-\\x1f]/.test(v);\nconst hash = (v) => createHash('sha256').update(v).digest('hex');\nconst stable = (v) => JSON.stringify(sort(v));\nfunction sort(v) {\n if (Array.isArray(v))\n return v.map(sort);\n return object(v)\n ? Object.fromEntries(Object.keys(v)\n .sort()\n .map((key) => [key, sort(v[key])]))\n : v;\n}\n/** Safe public error; neither secrets nor native paths are interpolated. */\nexport class CliAccountBindingError extends Error {\n code = 'CLI_OWN_ACCOUNT_REQUIRED';\n constructor(cli, reason) {\n super(reason ?? `${CLI_LABELS[cli]} 无法确认当前自身账号,请检查该 CLI 的登录或 API 配置`);\n this.name = 'CliAccountBindingError';\n }\n}\n/** Unsigned claims are identity labels only; they never establish entitlement. */\nfunction claims(value) {\n if (!text(value) || value.length > 64 * 1024)\n return {};\n const parts = value.split('.');\n if (parts.length !== 3 || !parts.every((part) => /^[A-Za-z0-9_-]+$/.test(part)))\n return {};\n const bytes = Buffer.from(parts[1], 'base64url');\n try {\n const parsed = JSON.parse(bytes.toString('utf8'));\n return object(parsed) ? parsed : {};\n }\n catch {\n return {};\n }\n finally {\n bytes.fill(0);\n }\n}\nfunction expiry(value) {\n const n = typeof value === 'number' ? value : typeof value === 'string' ? Date.parse(value) : NaN;\n return Number.isFinite(n) ? (n < 1e11 ? n * 1000 : n) : undefined;\n}\nfunction oauthPrincipal(value) {\n const access = value.access ?? value.access_token ?? value.accessToken ?? value.key;\n const refresh = value.refresh ?? value.refresh_token ?? value.refreshToken;\n const identity = claims(value.id_token ?? value.idToken);\n const token = claims(access);\n const expires = expiry(value.expires ?? value.expires_at ?? value.expiresAt ?? value.expiry) ?? expiry(token.exp);\n if (!literal(refresh) && (!literal(access) || expires === undefined || expires <= Date.now()))\n return;\n const accountId = value.accountId ?? value.account_id ?? token['https://api.openai.com/auth']?.chatgpt_account_id;\n const subject = identity.sub ?? token.sub ?? value.userId ?? value.user_id;\n const email = identity.email ?? value.email;\n // Access/refresh token text is deliberately excluded: native OAuth may rotate both.\n if (!text(accountId) && !text(subject) && !text(email))\n return;\n return {\n kind: 'oauth',\n ...(text(accountId) ? { accountId } : {}),\n ...(text(subject) ? { subject } : text(email) ? { email: email.toLowerCase() } : {}),\n ...(text(identity.iss ?? token.iss) ? { issuer: identity.iss ?? token.iss } : {}),\n ...(text(value.organizationId ?? value.organization_id)\n ? { organization: value.organizationId ?? value.organization_id }\n : {}),\n };\n}\nfunction credentialEntry(provider, credential, route) {\n if (!object(credential))\n return;\n if (['api', 'api_key'].includes(credential.type)) {\n const key = credential.key ?? credential.apiKey;\n return literal(key) ? { provider, route, principal: { kind: 'api', key: hash(key) } } : undefined;\n }\n if (credential.type === 'oauth') {\n const principal = oauthPrincipal(credential);\n if (principal)\n return { provider, route, principal };\n }\n}\n/** Bounded, no-follow local reads; missing files are never replaced by ambient credentials. */\nasync function read(path, signal) {\n signal.throwIfAborted();\n let handle;\n let bytes;\n try {\n await safePiOmpAncestors(dirname(path));\n const entry = await lstat(path);\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1)\n throw new Error('Unsafe account metadata');\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = await handle.stat();\n if (!before.isFile() ||\n before.nlink !== 1 ||\n before.dev !== entry.dev ||\n before.ino !== entry.ino ||\n before.size > 1024 * 1024)\n throw new Error('Unsafe account metadata');\n bytes = Buffer.alloc(before.size + 1);\n let offset = 0;\n while (offset < bytes.length) {\n signal.throwIfAborted();\n const { bytesRead } = await handle.read(bytes, offset, bytes.length - offset, offset);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n const after = await handle.stat();\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n current.dev !== before.dev ||\n current.ino !== before.ino ||\n current.nlink !== 1 ||\n offset !== before.size ||\n before.size !== after.size ||\n before.mtimeMs !== after.mtimeMs ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n throw new Error('Account metadata changed');\n return bytes.subarray(0, offset).toString('utf8');\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return;\n throw error;\n }\n finally {\n bytes?.fill(0);\n await handle?.close();\n }\n}\nasync function document(path, signal) {\n const raw = await read(path, signal);\n if (raw === undefined)\n return {};\n const value = JSON.parse(raw);\n if (!object(value))\n throw new Error('Invalid native account');\n return value;\n}\nfunction codexConfigPaths(root, project) {\n const ancestors = [];\n for (let directory = resolve(project);;) {\n ancestors.unshift(join(directory, '.codex/config.toml'));\n const parent = dirname(directory);\n if (parent === directory)\n break;\n directory = parent;\n }\n return [...new Set([join(root, 'config.toml'), ...ancestors])];\n}\nasync function codexStore(project, signal) {\n const root = resolve(process.env.CODEX_HOME?.trim() || join(homedir(), '.codex'));\n let store = 'file';\n for (const path of codexConfigPaths(root, project)) {\n const raw = await read(path, signal);\n if (!raw)\n continue;\n for (const line of raw.split(/\\r?\\n/)) {\n if (!/^\\s*cli_auth_credentials_store\\s*=/.test(line))\n continue;\n const match = /^\\s*cli_auth_credentials_store\\s*=\\s*[\"'](file|keyring|auto)[\"']\\s*(?:#.*)?$/.exec(line);\n if (!match)\n throw new CliAccountBindingError('codex');\n store = match[1];\n }\n }\n return { root, store };\n}\nasync function requireDefaultCodexRoute(root, project, signal) {\n // These native overrides can route model/list and execution to another account.\n // Do not infer their endpoint/provider semantics from an unrelated auth.json.\n if ([\n 'CODEX_API_KEY',\n 'OPENAI_API_KEY',\n 'OPENAI_BASE_URL',\n 'CODEX_BASE_URL',\n 'CHATGPT_BASE_URL',\n 'CODEX_PROFILE',\n ].some((name) => text(process.env[name])))\n throw new CliAccountBindingError('codex');\n for (const path of codexConfigPaths(root, project)) {\n const raw = await read(path, signal);\n if (!raw)\n continue;\n if (raw\n .split(/\\r?\\n/)\n .some((line) => /^\\s*(?:[\"']?(?:model_provider|model_providers|openai_base_url|chatgpt_base_url|profile)[\"']?\\s*=|\\[\\[?\\s*(?:profiles|model_providers)(?:\\.|\\]|\\s))/.test(line)))\n throw new CliAccountBindingError('codex');\n }\n}\n/** File-backed Codex auth only. Native keyring/auto cannot use a stale auth.json for model queries. */\nexport async function readCodexOwnAccountSource(project, signal) {\n const { root, store } = await codexStore(project, signal);\n if (store !== 'file')\n throw new CliAccountBindingError('codex');\n await requireDefaultCodexRoute(root, project, signal);\n const auth = await document(join(root, 'auth.json'), signal);\n if (literal(auth.OPENAI_API_KEY) && auth.auth_mode !== 'chatgpt')\n return {\n provider: 'openai',\n credential: { type: 'api', key: auth.OPENAI_API_KEY },\n sourceIds: [root],\n baseUrl: 'https://api.openai.com/v1',\n nativeRouteConfirmed: true,\n };\n if (object(auth.tokens) && (!auth.auth_mode || auth.auth_mode === 'chatgpt')) {\n const credential = {\n type: 'oauth',\n ...auth.tokens,\n access: auth.tokens.access_token,\n refresh: auth.tokens.refresh_token,\n accountId: auth.tokens.account_id,\n expires: expiry(auth.tokens.expires ?? auth.tokens.expires_at) ?? expiry(claims(auth.tokens.access_token).exp),\n };\n if (oauthPrincipal(credential))\n return {\n provider: 'openai-codex',\n credential,\n sourceIds: [root],\n baseUrl: 'https://chatgpt.com/backend-api',\n nativeRouteConfirmed: true,\n };\n }\n throw new CliAccountBindingError('codex');\n}\nconst knownPiEnv = {\n OPENAI_API_KEY: 'openai',\n ANTHROPIC_API_KEY: 'anthropic',\n GEMINI_API_KEY: 'google',\n XAI_API_KEY: 'xai',\n GROQ_API_KEY: 'groq',\n OPENROUTER_API_KEY: 'openrouter',\n MISTRAL_API_KEY: 'mistral',\n CEREBRAS_API_KEY: 'cerebras',\n ZAI_API_KEY: 'zai',\n ZHIPU_API_KEY: 'zhipu-coding-plan',\n ZAI_CODING_CN_API_KEY: 'zai-coding-cn',\n};\nfunction ownKey(value, env) {\n if (!literal(value))\n return;\n return /^[A-Z][A-Z0-9_]*$/.test(value) ? (literal(env[value]) ? env[value] : undefined) : value;\n}\nasync function material(cli, backend, config, project, signal, selectedClaudeRoute) {\n const home = homedir();\n if (cli === 'antigravity') {\n await assertAgyNativeAccountRoute(signal, home);\n if (process.platform === 'win32') {\n const account = await readWindowsAgyAccount(backend, config, signal);\n return {\n sourceIds: ['windows-credential:gemini:antigravity'],\n entries: account.identity.state === 'authenticated' && account.principalHash\n ? [{ provider: 'antigravity', principal: { kind: 'oauth', subjectHash: account.principalHash } }]\n : [],\n };\n }\n const root = join(home, '.gemini');\n const auth = await document(join(root, 'jetski-standalone-oauth-token'), signal);\n const principal = auth.auth_method === 'consumer' && object(auth.token)\n ? oauthPrincipal({ ...auth.token, id_token: auth.id_token })\n : undefined;\n return { sourceIds: [root], entries: principal ? [{ provider: 'antigravity', principal }] : [] };\n }\n if (cli === 'codex') {\n const { root, store } = await codexStore(project, signal);\n if (store !== 'file') {\n await requireDefaultCodexRoute(root, project, signal);\n const executable = await resolveCliExecutable(cli, backend, config, signal);\n const identity = await readCodexAccount(backend, config, executable, project, signal);\n if (identity?.state !== 'authenticated' ||\n identity.authMethod !== 'oauth' ||\n !text(identity.accountLabel))\n throw new CliAccountBindingError(cli);\n return {\n sourceIds: [root, `native-store:${store}`],\n entries: [\n {\n provider: 'openai-codex',\n principal: { kind: 'oauth', email: identity.accountLabel.toLowerCase() },\n },\n ],\n };\n }\n const source = await readCodexOwnAccountSource(project, signal);\n const entry = credentialEntry(source.provider, source.credential);\n return { sourceIds: source.sourceIds, entries: entry ? [entry] : [] };\n }\n if (cli === 'claude' || cli === 'kimi' || cli === 'mimo') {\n const executable = await resolveCliExecutable(cli, backend, config, signal);\n if (cli === 'claude') {\n const route = selectedClaudeRoute ?? (await readClaudeOwnRoute(project, signal));\n if (route.kind === 'native') {\n const status = JSON.parse(await captureCatalogMetadata(backend, config, claudeRouteStatusArguments(executable, route), project, signal, undefined, [0, 1]));\n const identity = claudeRouteIdentity(route, JSON.stringify(status), status.loggedIn === true ? 0 : 1);\n if (identity.state === 'authenticated' && identity.accountLabel)\n return {\n sourceIds: [\n resolve(route.configDirectory || process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, '.claude')),\n 'native:claude-auth-status',\n ],\n entries: [\n {\n provider: 'anthropic',\n route: { source: 'official-native-login' },\n principal: {\n kind: 'oauth',\n email: identity.accountLabel.toLowerCase(),\n ...(text(status.orgId) ? { organization: status.orgId } : {}),\n },\n },\n ],\n };\n throw new ClaudeOwnRouteError('Claude 官方账号未登录,请使用原生登录');\n }\n if (selectedClaudeRoute) {\n const source = route.source;\n if (!source)\n throw new ClaudeOwnRouteError();\n const entry = credentialEntry(source.provider, source.credential, {\n baseUrl: source.baseUrl,\n apiType: source.apiType,\n anthropicAuth: source.anthropicAuth,\n });\n return { sourceIds: source.sourceIds, entries: entry ? [entry] : [] };\n }\n }\n const sources = await readFirstPartyModelSources(cli, executable, project, (argv, env) => captureCatalogMetadata(backend, config, argv, project, signal, env), signal);\n return {\n sourceIds: sources.flatMap((source) => source.sourceIds),\n entries: sources.flatMap((source) => {\n const entry = credentialEntry(source.provider, source.credential, {\n baseUrl: source.baseUrl,\n apiType: source.apiType,\n anthropicAuth: source.anthropicAuth,\n });\n return entry ? [entry] : [];\n }),\n };\n }\n if (cli === 'pi' || cli === 'omp') {\n const source = await readPiOmpAccountMaterial(cli, { accountRoot: config.stateDirectory, signal });\n if (source.configAuth.auth?.broker)\n throw new CliAccountBindingError(cli);\n const entries = [];\n for (const [provider, auth] of Object.entries(source.auth)) {\n if (!object(auth))\n throw new CliAccountBindingError(cli);\n const resolved = ['api', 'api_key'].includes(auth.type)\n ? { ...auth, key: ownKey(auth.key ?? auth.apiKey, source.env), apiKey: undefined }\n : auth;\n const entry = credentialEntry(provider, resolved);\n if (entry)\n entries.push(entry);\n }\n for (const row of source.credentials) {\n if (row.disabled_cause)\n continue;\n const value = JSON.parse(row.data);\n const entry = credentialEntry(row.provider, {\n ...value,\n type: row.credential_type,\n ...(['api', 'api_key'].includes(row.credential_type)\n ? { key: ownKey(value.key ?? value.apiKey, source.env), apiKey: undefined }\n : {}),\n });\n if (entry)\n entries.push(entry);\n }\n for (const [provider, cfg] of Object.entries(source.models.providers ?? {})) {\n const key = ownKey(cfg.apiKey, source.env);\n if (key)\n entries.push(credentialEntry(provider, { type: 'api', key }, { baseUrl: cfg.baseUrl, api: cfg.api }));\n }\n for (const [name, provider] of Object.entries(knownPiEnv))\n if (literal(source.env[name]))\n entries.push(credentialEntry(provider, { type: 'api', key: source.env[name] }, { env: name }));\n return { sourceIds: source.sourceIds, entries };\n }\n if (cli === 'opencode') {\n const profile = await readOpenCodeProfile(openCodeAuthDirectory(config.stateDirectory), { signal });\n const entries = [];\n let hasOAuth = false;\n for (const [provider, credential] of Object.entries(profile.auth)) {\n if (profile.disabled.includes(provider) || (profile.enabled && !profile.enabled.includes(provider)))\n continue;\n if (credential.type === 'oauth') {\n hasOAuth = true;\n continue;\n }\n const entry = credentialEntry(provider, credential, {\n baseURL: profile.providers[provider]?.options?.baseURL,\n npm: profile.providers[provider]?.npm,\n });\n if (entry)\n entries.push(entry);\n }\n if (!entries.length && hasOAuth)\n throw new CliAccountBindingError(cli, OPENCODE_OAUTH_UNSUPPORTED);\n return { sourceIds: profile.sourceIds, entries };\n }\n if (cli === 'zcode') {\n const executable = await resolveCliExecutable(cli, backend, config, signal);\n const source = await readZCodeBindingMaterial(executable, zcodeAuthDirectory(config.zcodeAuthDirectory, config.stateDirectory), config.zcodeBuiltinConfig, { signal });\n return {\n sourceIds: source.sourceIds,\n entries: source.credentials.map((entry) => ({\n provider: entry.provider,\n route: { baseUrl: entry.baseUrl, apiType: entry.apiType },\n principal: text(entry.identity) && !/^key-[a-f0-9]{24}$/.test(entry.identity)\n ? { kind: 'oauth', identity: entry.identity }\n : { kind: 'api', key: hash(entry.key) },\n })),\n };\n }\n if (cli === 'grok') {\n const root = join(home, '.grok'), auth = await document(join(root, 'auth.json'), signal);\n return {\n sourceIds: [root],\n entries: Object.entries(auth).flatMap(([provider, value]) => {\n if (!object(value) || value.auth_mode !== 'oidc')\n return [];\n const principal = oauthPrincipal(value);\n return principal ? [{ provider, principal }] : [];\n }),\n };\n }\n if (cli === 'hermes') {\n const root = effectiveHermesHome(config);\n await ensureHermesNousFresh({\n home: root, backend, signal, graceMs: config.graceMs,\n resolveExecutable: (control) => resolveCliExecutable(cli, backend, config, control),\n });\n const raw = await assertHermesOwnAccounts(root, signal);\n const provider = raw.config.model?.provider;\n const source = {\n ...raw,\n auth: projectHermesUnsuppressedAuth(raw.auth),\n env: hermesUnsuppressedEnvironment(raw.auth, raw.env, provider),\n };\n const entries = [];\n if (provider === 'nous') {\n try {\n const nous = selectHermesNousSource(source);\n entries.push({ provider, principal: nous.principal, route: nous.route });\n }\n catch (error) {\n if (error instanceof HermesNousError)\n throw new CliAccountBindingError(cli, error.message);\n throw error;\n }\n }\n else if (provider === 'openai-codex') {\n const state = source.auth.providers?.[provider];\n if ((source.auth.credential_pool?.[provider] ?? []).some((row) => hermesPoolEntryUnavailable(row, source.config.model?.default)))\n throw new CliAccountBindingError(cli);\n const entry = state?.auth_mode === 'chatgpt'\n ? credentialEntry(provider, { ...state.tokens, type: 'oauth' })\n : undefined;\n if (entry)\n entries.push(entry);\n }\n else if (provider === 'openrouter') {\n for (const [name, key] of Object.entries(source.env))\n if (/^OPENROUTER_API_KEY(?:_\\d+)?$/.test(name) && literal(key))\n entries.push(credentialEntry(provider, { type: 'api', key }));\n for (const row of source.auth.credential_pool?.[provider] ?? []) {\n if (hermesPoolEntryUnavailable(row, source.config.model?.default))\n throw new CliAccountBindingError(cli);\n const key = row.source?.startsWith('env:')\n ? source.env[row.source.slice(4)]\n : row.runtime_api_key || row.access_token;\n const entry = credentialEntry(provider, { type: 'api', key }, { baseUrl: row.base_url });\n if (!entry)\n throw new CliAccountBindingError(cli);\n entries.push(entry);\n }\n }\n return {\n sourceIds: source.sourceIds,\n entries: entries.map((entry) => ({\n ...entry,\n route: { ...(object(entry.route) && entry.route), baseUrl: source.config.model?.base_url },\n })),\n };\n }\n return { sourceIds: [], entries: [] };\n}\n/** Host-only account epoch. Never return it from a Gateway response or write credentials to storage. */\nexport async function readCliAccountBinding(cli, backend, config, project, signal, selectedClaudeRoute) {\n signal.throwIfAborted();\n try {\n const value = await material(cli, backend, config, project, signal, selectedClaudeRoute);\n signal.throwIfAborted();\n if (!value.entries.length || !value.sourceIds.length)\n throw new CliAccountBindingError(cli);\n const sources = [\n ...new Set(value.sourceIds.map((path) => (isAbsolute(path) ? resolve(path) : path))),\n ].sort();\n const entries = [...new Set(value.entries.map(stable))].sort();\n return `cli-account-v1:${hash(stable({ cli, sources, entries }))}`;\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError)\n throw error;\n signal.throwIfAborted();\n if (error instanceof CliAccountBindingError ||\n error instanceof KimiOAuthModelError ||\n error instanceof ClaudeOwnRouteError ||\n error instanceof HermesRenewalError)\n throw error;\n throw new CliAccountBindingError(cli);\n }\n}\n//# sourceMappingURL=cli-account-binding.js.map","import { StringDecoder } from 'node:string_decoder';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nimport { probeAccountModels } from './account-models.mjs';\nimport { readCodexOwnAccountSource } from \"./cli-account-binding.js\";\nconst record = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst validId = (v) => typeof v === 'string' && /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/.test(v);\nexport function parseCodexNativeModels(values) {\n const models = new Map();\n for (const value of values) {\n if (!record(value) || !validId(value.model) || value.hidden === true || value.availabilityNux)\n continue;\n const efforts = EFFORTS.filter((e) => Array.isArray(value.supportedReasoningEfforts) &&\n value.supportedReasoningEfforts.some((item) => record(item) && item.reasoningEffort === e));\n if (!efforts.length)\n continue;\n models.set(value.model, {\n id: value.model,\n label: typeof value.displayName === 'string' ? value.displayName : value.model,\n efforts,\n });\n }\n return [...models.values()];\n}\n/** The native model list is capability metadata; discoverCodexModels separately checks account scope. */\nexport async function readCodexNativeModels(backend, config, executable, cwd, signal) {\n signal.throwIfAborted();\n const control = AbortSignal.any([signal, AbortSignal.timeout(15_000)]);\n const child = backend.spawn({\n argv: [executable, 'app-server', '--stdio'],\n cwd,\n stdio: { stdin: 'pipe', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void child.done.catch(() => undefined);\n const inputError = () => undefined;\n child.stdin?.on('error', inputError);\n const write = (value) => new Promise((resolve, reject) => {\n if (!child.stdin || child.stdin.destroyed)\n return reject(new Error('Codex 模型查询不可用'));\n child.stdin.write(JSON.stringify(value) + '\\n', (error) => (error ? reject(error) : resolve()));\n });\n let bytes = 0;\n const count = (chunk) => {\n const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n bytes += buf.length;\n if (bytes > Math.min(config.maxRunBytes, 2_097_152))\n throw new Error('Codex 模型目录过大');\n return buf;\n };\n const errors = (async () => {\n if (child.stderr)\n for await (const chunk of child.stderr)\n count(chunk);\n })();\n void errors.catch(() => undefined);\n const output = (async () => {\n if (!child.stdout)\n throw new Error('Codex 模型查询不可用');\n const decoder = new StringDecoder('utf8'), values = [], cursors = new Set();\n let pending = '', expected = 1;\n for await (const chunk of child.stdout) {\n pending += decoder.write(count(chunk));\n let newline;\n while ((newline = pending.indexOf('\\n')) >= 0) {\n const line = pending.slice(0, newline);\n pending = pending.slice(newline + 1);\n let response;\n try {\n response = JSON.parse(line);\n }\n catch {\n continue;\n }\n if (!record(response) || response.id !== expected)\n continue;\n if (response.error || !record(response.result))\n throw new Error('Codex 模型查询失败,请刷新');\n if (expected === 1) {\n expected = 2;\n await write({ method: 'initialized', params: {} });\n await write({ id: expected, method: 'model/list', params: { includeHidden: false, limit: 100 } });\n continue;\n }\n if (!Array.isArray(response.result.data))\n throw new Error('Codex 模型目录格式无效');\n values.push(...response.result.data);\n const cursor = response.result.nextCursor;\n if (cursor === null || cursor === undefined)\n return parseCodexNativeModels(values);\n if (typeof cursor !== 'string' || !cursor || cursors.has(cursor) || cursors.size >= 20)\n throw new Error('Codex 模型目录分页无效');\n cursors.add(cursor);\n expected++;\n await write({\n id: expected,\n method: 'model/list',\n params: { includeHidden: false, limit: 100, cursor },\n });\n }\n }\n throw new Error('Codex 模型查询提前结束');\n })();\n void output.catch(() => undefined);\n let abort = () => { };\n const cancelled = new Promise((_, reject) => {\n abort = () => reject(new Error('Codex 模型查询已取消'));\n control.addEventListener('abort', abort, { once: true });\n if (control.aborted)\n abort();\n });\n const failed = new Promise((_, reject) => {\n void errors.catch(reject);\n void child.done.catch(reject);\n });\n try {\n await Promise.race([\n write({\n id: 1,\n method: 'initialize',\n params: {\n clientInfo: { name: 'cli_worker_models', version: '1' },\n capabilities: { experimentalApi: false, requestAttestation: false, explicitGatewayOauth: true },\n },\n }),\n cancelled,\n ]);\n const result = await Promise.race([output, cancelled, failed]);\n control.throwIfAborted();\n return result;\n }\n finally {\n control.removeEventListener('abort', abort);\n let exited = false;\n try {\n child.terminate();\n exited = await child.waitForExit();\n }\n catch {\n throw new ProcessCleanupUnconfirmedError();\n }\n if (!exited)\n throw new ProcessCleanupUnconfirmedError();\n await Promise.allSettled([output, errors, child.done]);\n child.stdin?.removeListener('error', inputError);\n }\n}\nexport async function discoverCodexModels(backend, config, executable, cwd, signal) {\n // Resolve the native source before opening the server, then reread after its normal OAuth refresh.\n const before = await readCodexOwnAccountSource(cwd, signal);\n if (!before.nativeRouteConfirmed)\n return [];\n const native = await readCodexNativeModels(backend, config, executable, cwd, signal);\n signal.throwIfAborted();\n const source = await readCodexOwnAccountSource(cwd, signal);\n if (!source.nativeRouteConfirmed)\n return [];\n const scope = await probeAccountModels({ provider: source.provider, baseUrl: source.baseUrl, credential: source.credential }, { signal });\n signal.throwIfAborted();\n if (scope.state === 'denied' && scope.denialReason === 'quota')\n throw new Error('Codex 当前账号额度已用尽,请等待额度恢复后刷新');\n if (scope.state === 'denied' && scope.denialReason === 'authentication')\n throw new Error('Codex 当前账号认证不可用或访问被拒绝,请检查登录后刷新');\n if (scope.state !== 'supported')\n return [];\n return native.filter((model) => scope.models.some((allowed) => allowed.id === model.id));\n}\n//# sourceMappingURL=codex-models.js.map","import { mkdir, mkdtemp, realpath, writeFile, lstat, open, rename, rm, chmod } from 'node:fs/promises';\nimport { constants, existsSync } from 'node:fs';\nimport { createHash, randomUUID } from 'node:crypto';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nimport { snapshotPiOmpNative, safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { finishPiOmpRefresh } from './pi-omp-refresh.mjs';\nimport { acquireOwnAccountLease } from './own-account-lease.mjs';\nimport { assertPiOmpRefreshSources, assertPiOmpRefreshCache } from './pi-omp-refresh.mjs';\nconst bridgePath = () => {\n const here = dirname(fileURLToPath(import.meta.url));\n for (const candidate of [join(here, 'pi-omp-bridge.mjs'), resolve(here, '../../pi-omp-bridge.mjs')])\n if (existsSync(candidate))\n return candidate;\n throw new Error('Pi/OMP bridge 未安装,请重新构建插件');\n};\nasync function privateDirectory(path) {\n await safePiOmpAncestors(path);\n await mkdir(path, { recursive: true, mode: 0o700 });\n const info = await lstat(path);\n if (info.isSymbolicLink() || !info.isDirectory())\n throw new Error('Unsafe Pi/OMP state directory symlink');\n if (process.platform === 'win32') {\n // Node's POSIX directory descriptor/chmod path is not supported on Windows.\n // Match account preparation: pin the path and inode around the path-based operation.\n const canonical = await realpath(path);\n await chmod(path, 0o700);\n const current = await lstat(path);\n if (current.isSymbolicLink() ||\n !current.isDirectory() ||\n info.dev !== current.dev ||\n info.ino !== current.ino ||\n (await realpath(path)) !== canonical)\n throw new Error('Pi/OMP state directory changed while opening');\n return canonical;\n }\n const handle = await open(path, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);\n try {\n const opened = await handle.stat();\n if (info.dev !== opened.dev || info.ino !== opened.ino)\n throw new Error('Pi/OMP state directory changed while opening');\n await handle.chmod(0o700);\n }\n finally {\n await handle.close();\n }\n return realpath(path);\n}\nasync function contextFor(input) {\n const stateDirectory = resolve(input.stateDirectory);\n const root = await privateDirectory(stateDirectory);\n const identity = 'discover' in input\n ? 'catalog'\n : createHash('sha256')\n .update(await realpath(input.project))\n .digest('hex');\n const cliDirectory = await privateDirectory(join(root, input.cli));\n const isolated = await privateDirectory(join(cliDirectory, identity));\n const agent = await privateDirectory(join(isolated, 'agent'));\n // Rebuild from this CLI's current sources, including on continuation.\n const native = await snapshotPiOmpNative(input.cli, agent, {\n accountRoot: input.accountRoot ?? stateDirectory,\n nativeHome: input.nativeHome,\n signal: input.signal,\n sharedOAuth: true,\n });\n const request = async (extra = {}) => {\n const leaseNonce = randomUUID();\n const requestDirectory = await mkdtemp(join(isolated, 'request-'));\n const requestPath = join(requestDirectory, 'request.json');\n const temporary = join(requestDirectory, `.request-${randomUUID()}.tmp`);\n try {\n await writeFile(temporary, JSON.stringify({\n ...input,\n ...extra,\n stateDirectory: isolated,\n nativeRoot: native.directory,\n ...(native.leaseDirectory\n ? { leaseDirectory: native.leaseDirectory, leaseNonce, refreshReceipt: native.receipt }\n : {}),\n ...('project' in input ? { project: await realpath(input.project) } : {}),\n }), { flag: 'wx', mode: 0o600 });\n await rename(temporary, requestPath);\n }\n finally {\n await rm(temporary, { force: true });\n }\n return {\n argv: [process.execPath, bridgePath(), requestPath],\n env: native.env,\n leaseDirectory: native.leaseDirectory,\n activate: async () => {\n if (native.leaseDirectory) {\n await acquireOwnAccountLease(native.leaseDirectory, leaseNonce);\n await assertPiOmpRefreshSources(native.leaseDirectory, native.receipt);\n await assertPiOmpRefreshCache(native.leaseDirectory, native.receipt);\n }\n },\n cleanup: async () => {\n if (native.leaseDirectory)\n await finishPiOmpRefresh(native.leaseDirectory, leaseNonce, input.executable, native.receipt);\n },\n };\n };\n return { request };\n}\nasync function confirmedCatalog(context, capture) {\n for (const phase of ['native-candidates', 'account-scope']) {\n const launch = await context.request({ metadataPhase: phase });\n let raw;\n let cleanupUnconfirmed = false;\n try {\n await launch.activate();\n raw = JSON.parse(await capture(launch.argv, launch.env, phase, { leaseDirectory: launch.leaseDirectory }));\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError) {\n cleanupUnconfirmed = true;\n throw error;\n }\n throw new Error('无法读取 Pi/OMP 原生模型目录,请检查本机配置');\n }\n finally {\n if (!cleanupUnconfirmed)\n await launch.cleanup();\n }\n if (phase === 'account-scope')\n return parseCatalog(raw);\n if (!raw ||\n typeof raw !== 'object' ||\n raw.phase !== phase ||\n !Number.isSafeInteger(raw.count) ||\n raw.count < 0)\n throw new Error('Invalid Pi/OMP candidate phase result');\n }\n throw new Error('Missing Pi/OMP account scope');\n}\n/** The bridge validates exact native model capabilities before sending any prompt. */\nexport async function preparePiOmp(input, capture) {\n if (input.cli !== 'pi' && input.cli !== 'omp')\n throw new Error('Unsupported Pi/OMP CLI');\n if (!/^[A-Za-z0-9_.:-]+\\/[^\\s\\x00-\\x1f]+$/.test(input.preference.model))\n throw new Error('Pi/OMP 需要原生 provider/model 选型');\n if (!EFFORTS.includes(input.preference.effort))\n throw new Error('Unsupported native model effort');\n if (!['plan', 'accept-edits'].includes(input.mode))\n throw new Error('Unsupported task mode');\n if (!input.prompt.trim())\n throw new Error('Prompt must not be empty');\n const context = await contextFor(input);\n // Preparing a request is reversible. Execution requires the Host's two\n // captures on this exact snapshot; an unconfirmed request cannot send prompts.\n const catalog = capture ? await confirmedCatalog(context, capture) : undefined;\n return context.request(catalog ? { confirmedCatalog: catalog } : {});\n}\nexport async function discoverPiOmp(cli, executable, capture, stateDirectory, options = {}) {\n if (cli !== 'pi' && cli !== 'omp')\n throw new Error('Unsupported Pi/OMP CLI');\n const context = await contextFor({ cli, executable, stateDirectory, discover: true, ...options });\n return confirmedCatalog(context, capture);\n}\nfunction parseCatalog(raw) {\n if (!Array.isArray(raw))\n throw new Error('Invalid Pi/OMP model catalog');\n const ids = new Set();\n return raw.map((model) => {\n if (!model ||\n typeof model !== 'object' ||\n typeof model.id !== 'string' ||\n !/^[A-Za-z0-9_.:-]+\\/[^\\s\\x00-\\x1f]+$/.test(model.id) ||\n typeof model.label !== 'string' ||\n !Array.isArray(model.efforts) ||\n !model.efforts.length ||\n model.efforts.some((effort) => !EFFORTS.includes(effort)) ||\n ids.has(model.id))\n throw new Error('Invalid Pi/OMP native model entry');\n ids.add(model.id);\n return {\n id: model.id,\n label: model.label,\n efforts: [...new Set(model.efforts)],\n ...(model.cost === 'free' || model.cost === 'paid' || model.cost === 'unknown'\n ? { cost: model.cost }\n : {}),\n };\n });\n}\n//# sourceMappingURL=pi-omp-adapter.js.map","import { constants } from 'node:fs';\nimport { lstat, open, realpath } from 'node:fs/promises';\nimport { createHash } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { accountEmail, localTokenExpired } from \"./account-identity.js\";\nimport { EFFORTS } from \"../shared/types.js\";\nexport const GROK_MODELS_URL = 'https://cli-chat-proxy.grok.com/v1/models';\nexport const GROK_SETTINGS_URL = 'https://cli-chat-proxy.grok.com/v1/settings';\nconst object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst text = (v) => typeof v === 'string' && !!v && v.length <= 32768 && !/[\\x00-\\x20\\x7f]/.test(v);\nexport class GrokModelsError extends Error {\n}\n/** This adapter supports the fixed first-party route, not ambient provider overrides. */\nexport function assertGrokNativeEnvironment(home = homedir()) {\n if (process.env.GROK_HOME?.trim() && resolve(process.env.GROK_HOME) !== resolve(home, '.grok'))\n throw new GrokModelsError('当前 Grok 认证配置不受支持');\n if ([\n 'GROK_AUTH_PROVIDER_COMMAND',\n 'GROK_OIDC_ISSUER',\n 'GROK_OIDC_CLIENT_ID',\n 'GROK_CLI_CHAT_PROXY_BASE_URL',\n 'GROK_MODELS_BASE_URL',\n 'GROK_MODELS_LIST_URL',\n 'GROK_XAI_API_BASE_URL',\n 'GROK_DEPLOYMENT_KEY',\n 'GROK_AUTH_PATH',\n 'GROK_CONFIG_PATH',\n ].some((key) => process.env[key]?.trim()))\n throw new GrokModelsError('当前 Grok 认证配置不受支持');\n}\n/** Official native OIDC slot and its own identity, not arbitrary configured keys. */\nexport function selectGrokOwnAccount(raw, now = Date.now()) {\n if (!object(raw))\n return undefined;\n const entries = Object.entries(raw).filter(([slot, value]) => slot.startsWith('https://auth.x.ai::') && object(value) && value.auth_mode === 'oidc');\n if (entries.length !== 1)\n return undefined;\n const [slot, value] = entries[0];\n if (!object(value) ||\n value.oidc_issuer !== 'https://auth.x.ai' ||\n !text(value.oidc_client_id) ||\n slot !== `https://auth.x.ai::${value.oidc_client_id}` ||\n !text(value.user_id))\n return undefined;\n if (!text(value.key))\n return undefined;\n const access = value.key;\n const created = typeof value.create_time === 'string' ? Date.parse(value.create_time) : NaN;\n const expires = typeof value.expires_at === 'string' ? Date.parse(value.expires_at) : created + 30 * 86400_000;\n return {\n access,\n expires,\n refresh: text(value.refresh_token),\n userId: value.user_id,\n clientId: value.oidc_client_id,\n active: !!access && Number.isFinite(expires) && expires > now && !localTokenExpired(access, now),\n ...(accountEmail(value.email) ? { email: accountEmail(value.email) } : {}),\n };\n}\nexport async function readGrokOwnAccount(options = {}) {\n options.signal?.throwIfAborted();\n assertGrokNativeEnvironment(options.home);\n const buffer = Buffer.alloc(65537);\n let file;\n try {\n const root = join(await realpath(options.home ?? homedir()), '.grok');\n const directory = await lstat(root);\n if (!directory.isDirectory() || directory.isSymbolicLink() || (await realpath(root)) !== root)\n throw new Error();\n const path = join(root, 'auth.json');\n const location = await lstat(path);\n if (location.isSymbolicLink() || !location.isFile())\n throw new Error();\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const stat = await file.stat();\n if (!stat.isFile() || stat.dev !== location.dev || stat.ino !== location.ino || stat.nlink !== 1 || stat.size > 65536)\n throw new Error();\n let size = 0;\n while (size < buffer.length) {\n options.signal?.throwIfAborted();\n const { bytesRead } = await file.read(buffer, size, buffer.length - size, null);\n if (!bytesRead)\n break;\n size += bytesRead;\n }\n if (!size || size > 65536)\n throw new Error();\n const current = await lstat(path);\n const after = await file.stat();\n if (current.isSymbolicLink() || current.dev !== stat.dev || current.ino !== stat.ino || after.size !== stat.size || after.mtimeMs !== stat.mtimeMs)\n throw new Error();\n const bytes = buffer.subarray(0, size);\n const account = selectGrokOwnAccount(JSON.parse(bytes.toString('utf8')));\n if (!account || (!account.active && !account.refresh))\n throw new Error();\n options.signal?.throwIfAborted();\n const currentDirectory = await lstat(root);\n if (currentDirectory.isSymbolicLink() ||\n currentDirectory.dev !== directory.dev ||\n currentDirectory.ino !== directory.ino)\n throw new Error();\n return { ...account, fingerprint: createHash('sha256').update(bytes).digest('hex') };\n }\n catch {\n options.signal?.throwIfAborted();\n throw new GrokModelsError('请先登录 Grok');\n }\n finally {\n buffer.fill(0);\n await file?.close();\n }\n}\n/** Only metadata IDs pass out; a successful empty list differs from a failed query. */\nexport function grokAccountModels(payload, forbidden = []) {\n if (!object(payload) || !Array.isArray(payload.data))\n throw new GrokModelsError('模型目录格式无效');\n const result = new Map();\n for (const value of payload.data) {\n if (!object(value))\n throw new GrokModelsError('模型目录格式无效');\n const meta = object(value._meta) ? value._meta : {};\n // supported_in_api=false denotes a session-only model; this is a session request.\n if (value.hidden === true ||\n meta.hidden === true ||\n value.allowed === false ||\n value.available === false ||\n value.entitled === false ||\n value.enabled === false ||\n value.disabled === true ||\n value.upgrade_required === true)\n continue;\n const id = value.model ?? value.modelId ?? value.id ?? meta.model ?? meta.modelId;\n if (typeof id !== 'string' ||\n !/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/.test(id) ||\n forbidden.some((secret) => secret && id.includes(secret)))\n throw new GrokModelsError('模型目录格式无效');\n if (result.has(id))\n throw new GrokModelsError('模型目录格式无效');\n const supports = value.supportsReasoningEffort ?? value.supports_reasoning_effort ?? meta.supportsReasoningEffort;\n const rawEfforts = value.reasoningEfforts ?? value.reasoning_efforts ?? meta.reasoningEfforts;\n let efforts;\n if (supports === false)\n efforts = ['default'];\n else if (rawEfforts !== undefined) {\n if (!Array.isArray(rawEfforts))\n throw new GrokModelsError('模型目录格式无效');\n efforts = [\n ...new Set(rawEfforts.flatMap((item) => {\n const id = object(item) ? item.id : item;\n return typeof id === 'string' && EFFORTS.includes(id) ? [id] : [];\n })),\n ];\n }\n result.set(id, efforts);\n }\n return result;\n}\nexport function grokAccountModelIds(payload, forbidden = []) {\n return new Set(grokAccountModels(payload, forbidden).keys());\n}\n/** Installed grok 1.0.0 (3cd0d0cbcebe) consumes these dynamic /models fields.\n * Verified against its actual ACP response using an isolated loopback fixture;\n * the built-in grok-4.5 fallback is not a limit on dynamic model IDs or xhigh.\n */\nexport function grokDynamicNativeModels(payload, forbidden = []) {\n const scoped = grokAccountModels(payload, forbidden);\n if (!object(payload) || !Array.isArray(payload.data))\n return [];\n return payload.data.flatMap((value) => {\n if (!object(value))\n return [];\n const meta = object(value._meta) ? value._meta : {};\n const id = value.model ?? value.modelId ?? value.id ?? meta.model ?? meta.modelId;\n if (typeof id !== 'string' || !scoped.has(id))\n return [];\n // Never import a remote BYOK route or credential into this session adapter.\n for (const key of ['baseUrl', 'base_url', 'apiBaseUrl', 'api_base_url']) {\n const route = value[key];\n if (route !== undefined && route !== 'https://cli-chat-proxy.grok.com/v1')\n throw new GrokModelsError('模型目录地址不受支持');\n }\n if (['api_key', 'apiKey', 'env_key', 'envKey', 'auth_provider', 'authProvider'].some((key) => value[key] !== undefined))\n throw new GrokModelsError('模型认证配置不受支持');\n const supports = value.supportsReasoningEffort ?? value.supports_reasoning_effort ?? meta.supportsReasoningEffort;\n const efforts = supports === false\n ? ['default']\n : supports === true\n ? scoped.get(id)?.filter((effort) => ['low', 'medium', 'high', 'xhigh'].includes(effort))\n : [];\n if (!efforts?.length)\n return [];\n const label = typeof value.name === 'string' &&\n value.name.length <= 256 &&\n !/\\p{C}/u.test(value.name) &&\n !forbidden.some((secret) => secret && value.name.toString().includes(secret))\n ? value.name\n : id;\n return [{ id, label, efforts }];\n });\n}\nasync function readPayload(response, signal) {\n const reader = response.body?.getReader();\n if (!reader)\n throw new GrokModelsError('模型目录格式无效');\n let length = 0;\n const chunks = [];\n const abort = () => {\n void reader.cancel().catch(() => undefined);\n };\n signal.addEventListener('abort', abort, { once: true });\n try {\n while (true) {\n signal.throwIfAborted();\n const { done, value } = await reader.read();\n if (done)\n break;\n length += value.length;\n if (length > 2097152)\n throw new GrokModelsError('模型目录过大');\n chunks.push(value);\n }\n return JSON.parse(Buffer.concat(chunks).toString('utf8'));\n }\n finally {\n signal.removeEventListener('abort', abort);\n await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n}\n/** Fixed official Build endpoint; no redirect, OAuth refresh, fallback, or generation. */\nexport async function discoverGrokAccountModels(native, options = {}) {\n options.signal?.throwIfAborted();\n const source = await readGrokOwnAccount(options);\n if (!source.active || source.expires <= Date.now() + 30000)\n throw new GrokModelsError('登录需要续期,请打开 Grok');\n const controller = new AbortController();\n const signal = options.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;\n const timer = setTimeout(() => controller.abort(), Math.max(50, Math.min(options.timeoutMs ?? 8000, 10000)));\n try {\n // Native 1.0.0-era remote/client.rs:715-787, xai-grok-http/src/lib.rs:247-261.\n const request = async (target) => {\n const response = await (options.fetch ?? fetch)(target, {\n method: 'GET',\n redirect: 'error',\n signal,\n headers: {\n accept: 'application/json',\n Authorization: `Bearer ${source.access}`,\n 'X-XAI-Token-Auth': 'xai-grok-cli',\n 'x-userid': source.userId,\n 'x-grok-client-version': '1.0.0',\n 'x-grok-client-mode': 'headless',\n ...(source.email ? { 'x-email': source.email } : {}),\n },\n });\n if (response.redirected || (response.url && response.url !== target)) {\n await response.body?.cancel();\n throw new GrokModelsError('模型目录地址不受支持');\n }\n if (!response.ok) {\n await response.body?.cancel();\n throw new GrokModelsError(response.status === 401\n ? '登录已失效,请重新登录'\n : response.status === 403\n ? '模型目录访问被拒绝'\n : '模型目录查询失败,请刷新');\n }\n return readPayload(response, signal);\n };\n const unchanged = async () => {\n signal.throwIfAborted();\n const current = await readGrokOwnAccount(options);\n if (source.fingerprint !== current.fingerprint)\n throw new GrokModelsError('账号已改变,请刷新');\n signal.throwIfAborted();\n };\n // The Build access gate permits free allowlisted accounts too. A model list\n // or a paid-tier claim alone is not the native access decision.\n const settings = await request(GROK_SETTINGS_URL);\n await unchanged();\n if (!object(settings) || typeof settings.allow_access !== 'boolean')\n throw new GrokModelsError('模型使用权限尚未确认');\n if (!settings.allow_access)\n throw new GrokModelsError('当前账号未获 Grok Build 使用权限');\n const payload = await request(GROK_MODELS_URL);\n const models = grokAccountModels(payload, [source.access, source.userId]);\n signal.throwIfAborted();\n await unchanged();\n signal.throwIfAborted();\n if (!models.size)\n throw new GrokModelsError('账号目录未返回模型');\n const capabilities = options.nativeDynamicSchema\n ? grokDynamicNativeModels(payload, [source.access, source.userId])\n : native;\n const result = capabilities.flatMap((model) => {\n if (!models.has(model.id))\n return [];\n const allowed = models.get(model.id);\n const efforts = allowed\n ? (model.efforts ?? []).filter((effort) => allowed.includes(effort))\n : (model.efforts ?? []);\n return efforts.length ? [{ ...model, efforts }] : [];\n });\n if (!result.length)\n throw new GrokModelsError('当前 CLI 未支持账号模型');\n return result;\n }\n catch (error) {\n options.signal?.throwIfAborted();\n if (error instanceof GrokModelsError)\n throw error;\n throw new GrokModelsError(controller.signal.aborted ? '模型目录查询超时' : '模型目录查询失败,请刷新');\n }\n finally {\n clearTimeout(timer);\n controller.abort();\n }\n}\n//# sourceMappingURL=grok-models.js.map","import { chmod, lstat, mkdir, realpath, symlink, unlink, writeFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { StringDecoder } from 'node:string_decoder';\nimport { EFFORTS } from \"../shared/types.js\";\nimport { assertGrokNativeEnvironment, discoverGrokAccountModels } from \"./grok-models.js\";\nconst record = (x) => typeof x === 'object' && x !== null && !Array.isArray(x);\nconst config = `[cli]\\nauto_update = false\\nuse_leader = false\\n[features]\\nsupport_permission = true\\ntelemetry = false\\nfeedback = false\\ncodebase_indexing = false\\n[telemetry]\\ntrace_upload = false\\nmixpanel_enabled = false\\n[subagents]\\nenabled = false\\n[session]\\nload_envrc = false\\n[shell_environment_policy]\\ninherit = \"core\"\\nignore_default_excludes = false\\n`;\nfunction bridgePath() {\n const here = dirname(fileURLToPath(import.meta.url));\n for (const path of [join(here, 'grok-catalog.mjs'), resolve(here, '../../grok-catalog.mjs')])\n if (existsSync(path))\n return path;\n throw new Error('Grok catalog bridge 未安装,请重新构建插件');\n}\nasync function state(stateDirectory, project) {\n await mkdir(stateDirectory, { recursive: true, mode: 0o700 });\n if ((await lstat(stateDirectory)).isSymbolicLink())\n throw new Error('Unsafe Grok state symlink');\n await chmod(stateDirectory, 0o700);\n const parent = join(await realpath(stateDirectory), 'grok');\n const identity = project\n ? createHash('sha256')\n .update(await realpath(project))\n .digest('hex')\n : 'catalog';\n const root = join(parent, identity), home = join(root, 'home'), tmp = join(root, 'tmp');\n for (const path of [parent, root, home, tmp]) {\n await mkdir(path, { recursive: true, mode: 0o700 });\n if ((await lstat(path)).isSymbolicLink())\n throw new Error('Unsafe Grok state symlink');\n await chmod(path, 0o700);\n }\n const configPath = join(home, 'config.toml');\n // Do not follow a modified state's configuration symlink when updating the safety defaults.\n try {\n if ((await lstat(configPath)).isSymbolicLink())\n throw new Error('Unsafe Grok configuration symlink');\n }\n catch (e) {\n if (!record(e) || e.code !== 'ENOENT')\n throw e;\n }\n await writeFile(configPath, config, { mode: 0o600 });\n await chmod(configPath, 0o600);\n if (project) {\n const original = join(homedir(), '.grok', 'auth.json'), target = join(home, 'auth.json');\n // This path is a derived worker reference, never an account source. Replace\n // the link itself so logout cannot be undone by a surviving worker copy.\n try {\n const existing = await lstat(target);\n if (!existing.isFile() && !existing.isSymbolicLink())\n throw new Error('Unsafe Grok auth snapshot');\n await unlink(target);\n }\n catch (e) {\n if (!record(e) || e.code !== 'ENOENT')\n throw e;\n }\n if (process.platform !== 'win32' && existsSync(original))\n await symlink(original, target);\n }\n return {\n root,\n env: {\n GROK_HOME: home,\n GROK_AUTH_PATH: process.platform === 'win32' && project\n ? join(homedir(), '.grok', 'auth.json')\n : join(home, 'auth.json'),\n XAI_API_KEY: '',\n GROK_CODE_XAI_API_KEY: '',\n TMPDIR: tmp,\n GROK_MEMORY: '0',\n GROK_SUBAGENTS: '0',\n GROK_WORKFLOWS: '0',\n GROK_WEB_FETCH: '0',\n GROK_TELEMETRY_ENABLED: '0',\n GROK_TELEMETRY_TRACE_UPLOAD: '0',\n GROK_TELEMETRY_MIXPANEL_ENABLED: '0',\n },\n };\n}\n/** Offline help/ACP verified; subscription-dependent task execution remains unverified. */\nexport async function prepareGrok(input) {\n assertGrokNativeEnvironment();\n if (!input.preference.model.trim())\n throw new Error('Grok model must be selected');\n if (!EFFORTS.includes(input.preference.effort))\n throw new Error('Invalid Grok effort');\n if (!['plan', 'accept-edits'].includes(input.mode))\n throw new Error('Invalid Grok mode');\n if (!input.prompt.trim())\n throw new Error('Prompt must not be empty');\n const prepared = await state(input.stateDirectory, input.project);\n return {\n argv: [\n input.executable,\n '--cwd',\n input.project,\n '--model',\n input.preference.model,\n ...(input.preference.effort === 'default' ? [] : ['--reasoning-effort', input.preference.effort]),\n '--output-format',\n 'streaming-json',\n '--permission-mode',\n input.mode === 'plan' ? 'default' : 'acceptEdits',\n '--no-memory',\n '--no-subagents',\n '--disable-web-search',\n ...(input.mode === 'plan' ? ['--tools', 'read_file,grep,list_dir'] : []),\n ...(input.conversationId ? ['--resume', input.conversationId] : []),\n '--single',\n `任务:\\n${input.prompt}`,\n ],\n env: prepared.env,\n };\n}\nexport async function discoverGrok(executable, capture, stateDirectory, options = {}) {\n options.signal?.throwIfAborted();\n assertGrokNativeEnvironment();\n const prepared = await state(stateDirectory);\n const raw = JSON.parse(await capture([process.execPath, bridgePath(), executable, prepared.root], prepared.env, 'native-candidates'));\n if (!Array.isArray(raw))\n throw new Error('Invalid Grok catalog');\n const models = raw.map((x) => {\n if (!record(x) ||\n typeof x.id !== 'string' ||\n !x.id ||\n typeof x.label !== 'string' ||\n !Array.isArray(x.efforts))\n throw new Error('Invalid Grok model');\n const efforts = x.efforts.filter((v) => typeof v === 'string' && EFFORTS.includes(v));\n if (!efforts.length || efforts.length !== x.efforts.length)\n throw new Error('Unsupported Grok reasoning levels');\n return { id: x.id, label: x.label, efforts };\n });\n if (!models.length || new Set(models.map((x) => x.id)).size !== models.length)\n throw new Error('Grok 模型目录为空或重复');\n options.signal?.throwIfAborted();\n const version = await capture([executable, '--version'], prepared.env, 'native-candidates');\n options.signal?.throwIfAborted();\n return discoverGrokAccountModels(models, {\n ...options,\n nativeDynamicSchema: version.trim() === 'grok 1.0.0 (3cd0d0cbcebe)',\n });\n}\n/** Native streaming-json parser from installed 1.0.0 docs; no fabricated execution evidence. */\nexport class GrokProtocol {\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n response = '';\n terminal = false;\n failure;\n ended = false;\n tools = new Map();\n result;\n conversationId;\n constructor(emit, identify, maxLineBytes) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n if (this.ended)\n throw new Error('Grok stream already ended');\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let end;\n while ((end = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, end).trim();\n this.pending = this.pending.slice(end + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n }\n end() {\n if (this.ended)\n return;\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n this.ended = true;\n if (!this.conversationId)\n return;\n const error = this.failure ??\n (!this.terminal\n ? 'Grok 缺少 end 终态'\n : [...this.tools.values()].some((x) => !x.done)\n ? 'Grok 工具没有完成结果'\n : undefined);\n this.result = {\n conversationId: this.conversationId,\n status: error ? 'ERROR' : 'SUCCESS',\n response: this.response,\n ...(error ? { error } : {}),\n };\n this.emit({\n kind: 'result',\n text: this.response,\n state: this.result.status,\n ...(error ? { detail: error } : {}),\n });\n }\n id(value) {\n if (typeof value !== 'string' || !value.trim())\n throw new Error('Invalid Grok session identity');\n if (this.conversationId && this.conversationId !== value)\n throw new Error('Grok session identity changed');\n if (!this.conversationId)\n this.identify(value);\n this.conversationId = value;\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n const e = JSON.parse(line);\n if (!record(e) || typeof e.type !== 'string')\n throw new Error('Invalid Grok event');\n if (this.terminal)\n throw new Error('Unexpected event after Grok end');\n if (e.sessionId !== undefined)\n this.id(e.sessionId);\n if (e.type === 'thought')\n return;\n if (e.type === 'text') {\n if (typeof e.data !== 'string')\n throw new Error('Invalid Grok text');\n this.response += e.data;\n this.emit({ kind: 'assistant', text: e.data });\n return;\n }\n if (e.type === 'tool_call' || e.type === 'tool_call_update') {\n if (typeof e.toolCallId !== 'string' || !e.toolCallId)\n throw new Error('Missing Grok tool identity');\n let tool = this.tools.get(e.toolCallId);\n if (e.type === 'tool_call') {\n if (tool)\n throw new Error('Duplicate Grok tool identity');\n tool = { step: this.tools.size + 1, name: String(e.toolName ?? e.title ?? '工具'), done: false };\n this.tools.set(e.toolCallId, tool);\n }\n if (!tool || tool.done)\n throw new Error('Unmatched Grok tool update');\n if (['failed', 'error', 'denied', 'cancelled'].includes(String(e.status))) {\n this.failure = `Grok 工具失败或被拒绝:${tool.name}`;\n tool.done = true;\n }\n else if (e.status === 'completed')\n tool.done = true;\n else if (e.status !== undefined && !['pending', 'in_progress'].includes(String(e.status)))\n this.failure = `Grok 未识别的工具状态:${String(e.status)}`;\n this.emit({\n kind: 'tool',\n text: tool.name,\n step: tool.step,\n state: String(e.status ?? 'running'),\n detail: JSON.stringify(e.type === 'tool_call' ? e.rawInput : (e.rawOutput ?? e.content)),\n });\n return;\n }\n if (e.type === 'end') {\n if (!this.conversationId)\n throw new Error('Missing Grok end session identity');\n this.terminal = true;\n if (e.stopReason !== 'end_turn')\n this.failure ??= `Grok 未正常完成:${String(e.stopReason)}`;\n return;\n }\n if (e.type === 'error' || e.type === 'max_turns_reached') {\n this.failure = typeof e.message === 'string' ? e.message : `Grok ${e.type}`;\n this.emit({ kind: 'diagnostic', text: this.failure, state: 'error' });\n return;\n }\n if (e.type === 'usage')\n return;\n if (e.type === 'plan') {\n this.emit({ kind: 'status', text: 'Grok 更新计划', detail: JSON.stringify(e.entries) });\n return;\n }\n if (e.type === 'available_commands')\n return;\n this.emit({ kind: 'diagnostic', text: `未识别 Grok 事件:${e.type}`, detail: line });\n }\n}\n//# sourceMappingURL=grok-adapter.js.map","import { fileURLToPath } from 'node:url';\nimport { mkdirSync, lstatSync, chmodSync, realpathSync, mkdtempSync, rmSync, readdirSync, openSync, closeSync, fstatSync, fchmodSync, constants, } from 'node:fs';\nimport { join } from 'node:path';\nimport { homedir, tmpdir } from 'node:os';\nimport { prepareZCode, discoverZCode, zcodeAuthDirectory } from \"./zcode-adapter.js\";\nimport { preparePiOmp, discoverPiOmp } from \"./pi-omp-adapter.js\";\nimport { prepareOpenCode, discoverOpenCode, openCodeAuthDirectory } from \"./opencode-adapter.js\";\nimport { prepareHermes, discoverHermes } from \"./hermes-adapter.js\";\nimport { effectiveHermesHome } from \"./hermes-account-context.js\";\nimport { prepareGrok, discoverGrok } from \"./grok-adapter.js\";\nexport const EXTENDED_CLIS = ['zcode', 'grok', 'omp', 'pi', 'hermes', 'opencode'];\nexport const isExtendedCli = (cli) => EXTENDED_CLIS.includes(cli);\nconst privateArgv = (argv) => [\n process.execPath,\n fileURLToPath(new URL('./private-launch.mjs', import.meta.url)),\n ...argv,\n];\nexport function privateDirectory(path) {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n if (lstatSync(path).isSymbolicLink())\n throw new Error('CLI state directory cannot be a symlink');\n chmodSync(path, 0o700);\n return realpathSync(path);\n}\n/**\n * Run only after the native process range has exited. Copies can preserve public\n * modes despite umask. Pin each inode before changing it, skip symlinks, and fail\n * closed on hard links rather than chmod a possibly external file.\n */\nexport function sealPrivateTree(root) {\n const sameInode = (a, b) => a.dev === b.dev && a.ino === b.ino;\n const ancestors = [];\n const assertLocations = () => {\n for (const { path, info } of ancestors) {\n const current = lstatSync(path);\n if (current.isSymbolicLink() || !sameInode(current, info))\n throw new Error('CLI private state changed during permission cleanup');\n }\n };\n const visit = (path) => {\n assertLocations();\n const info = lstatSync(path);\n if (info.isSymbolicLink() || (!info.isDirectory() && !info.isFile()))\n return;\n if (info.isDirectory() && process.platform === 'win32') {\n // Windows does not support opening directories with POSIX O_DIRECTORY.\n // Keep the same location/inode checks without widening to linked targets.\n const canonical = realpathSync(path);\n ancestors.push({ path, info });\n try {\n assertLocations();\n if (realpathSync(path) !== canonical)\n throw new Error('CLI private state changed during permission cleanup');\n chmodSync(path, 0o700);\n for (const entry of readdirSync(path))\n visit(join(path, entry));\n assertLocations();\n if (realpathSync(path) !== canonical)\n throw new Error('CLI private state changed during permission cleanup');\n }\n finally {\n ancestors.pop();\n }\n return;\n }\n const fd = openSync(path, constants.O_RDONLY |\n constants.O_NOFOLLOW |\n constants.O_NONBLOCK |\n (info.isDirectory() ? constants.O_DIRECTORY : 0));\n try {\n const opened = fstatSync(fd);\n if (!sameInode(info, opened) || info.isDirectory() !== opened.isDirectory())\n throw new Error('CLI private state inode changed during permission cleanup');\n ancestors.push({ path, info: opened });\n try {\n assertLocations();\n if (opened.isFile() && fstatSync(fd).nlink !== 1)\n throw new Error('CLI private state contains a hard-linked file; permissions were not changed');\n fchmodSync(fd, opened.isDirectory() ? 0o700 : 0o600);\n if (opened.isDirectory())\n for (const entry of readdirSync(path))\n visit(join(path, entry));\n }\n finally {\n ancestors.pop();\n }\n }\n finally {\n closeSync(fd);\n }\n };\n visit(root);\n}\n/** Compatibility only: Host credential references never supply CLI accounts. */\nexport async function credentialEnvironment(_cli, _config, _selectedModel) {\n return {};\n}\nexport async function extendedLaunch(cli, executable, project, preference, mode, prompt, stateDirectory, config, conversationId, metadataCapture, renewal) {\n const state = privateDirectory(stateDirectory);\n const input = { executable, project, preference, mode, prompt, conversationId, stateDirectory: state };\n const metadata = metadataCapture &&\n ((argv, env, phase, scope) => metadataCapture(privateArgv(argv), { ...env, ELECTRON_RUN_AS_NODE: '1' }, phase, scope));\n const launch = cli === 'zcode'\n ? await prepareZCode({\n ...input,\n authDirectory: zcodeAuthDirectory(config.zcodeAuthDirectory, config.stateDirectory),\n builtinConfig: config.zcodeBuiltinConfig,\n })\n : cli === 'pi' || cli === 'omp'\n ? await preparePiOmp({\n ...input,\n cli,\n accountRoot: config.stateDirectory ??\n join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'),\n }, metadata)\n : cli === 'opencode'\n ? await prepareOpenCode({\n ...input,\n authDirectory: openCodeAuthDirectory(config.stateDirectory),\n })\n : cli === 'hermes'\n ? await prepareHermes({ ...input, hermesHome: effectiveHermesHome(config), renewal })\n : cli === 'grok'\n ? await prepareGrok(input)\n : undefined;\n if (!launch)\n throw new Error('未知 CLI');\n const temporary = cli === 'zcode' ? mkdtempSync(join(tmpdir(), 'cwn-')) : undefined;\n if (temporary)\n chmodSync(temporary, 0o700);\n const env = {\n ...launch.env,\n ...(temporary ? { TMPDIR: temporary, TMP: temporary, TEMP: temporary } : {}),\n ELECTRON_RUN_AS_NODE: '1',\n };\n try {\n const argv = privateArgv(launch.argv);\n return {\n argv,\n env,\n ...('activate' in launch && launch.activate ? { activate: launch.activate } : {}),\n cleanup: async () => {\n try {\n if ('cleanup' in launch && launch.cleanup)\n await launch.cleanup();\n sealPrivateTree(state);\n }\n finally {\n if (temporary)\n rmSync(temporary, { recursive: true, force: true });\n }\n },\n };\n }\n catch (error) {\n if ('cleanup' in launch && launch.cleanup)\n await launch.cleanup();\n if (temporary)\n rmSync(temporary, { recursive: true, force: true });\n throw error;\n }\n}\nexport async function extendedCatalog(cli, executable, capture, stateDirectory, config, signal, renewal) {\n signal?.throwIfAborted();\n const catalogRoot = privateDirectory(join(stateDirectory, 'catalog', cli));\n const state = privateDirectory(mkdtempSync(join(catalogRoot, 'query-')));\n const run = async (argv, env) => {\n const temporary = cli === 'zcode' ? mkdtempSync(join(tmpdir(), 'cwn-')) : undefined;\n if (temporary)\n chmodSync(temporary, 0o700);\n try {\n return await capture(privateArgv(argv), {\n ...env,\n ...(temporary ? { TMPDIR: temporary, TMP: temporary, TEMP: temporary } : {}),\n ELECTRON_RUN_AS_NODE: '1',\n });\n }\n finally {\n if (temporary)\n rmSync(temporary, { recursive: true, force: true });\n }\n };\n const models = cli === 'zcode'\n ? await discoverZCode(executable, run, state, zcodeAuthDirectory(config.zcodeAuthDirectory, config.stateDirectory ?? stateDirectory), config.zcodeBuiltinConfig, { signal })\n : cli === 'pi' || cli === 'omp'\n ? await discoverPiOmp(cli, executable, run, state, {\n accountRoot: config.stateDirectory ?? stateDirectory,\n signal,\n })\n : cli === 'opencode'\n ? await discoverOpenCode(executable, run, state, openCodeAuthDirectory(config.stateDirectory ?? stateDirectory), false, { signal })\n : cli === 'hermes'\n ? await discoverHermes(executable, run, state, effectiveHermesHome({ ...config, stateDirectory: config.stateDirectory ?? stateDirectory }), { signal, renewal })\n : cli === 'grok'\n ? await discoverGrok(executable, run, state, { signal })\n : undefined;\n if (!models)\n throw new Error('未知 CLI');\n signal?.throwIfAborted();\n // A successful capture has confirmed that its process range exited. Only\n // model values leave this operation; its private snapshots and native caches\n // are no longer needed. Rejected captures keep their potentially live files.\n sealPrivateTree(state);\n rmSync(state, { recursive: true, force: true });\n return models;\n}\n//# sourceMappingURL=extended-adapters.js.map","import { StringDecoder } from 'node:string_decoder';\n/** Internal framing for the Pi/OMP RPC bridge; never accepts arbitrary event kinds. */\nexport class BridgeProtocol {\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n conversationId;\n result;\n constructor(emit, identify, maxLineBytes) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let end;\n while ((end = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, end).trim();\n this.pending = this.pending.slice(end + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('CLI bridge event too large');\n }\n end() {\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('CLI bridge event too large');\n const v = JSON.parse(line);\n if (!v || typeof v !== 'object' || this.result)\n throw new Error('Unexpected CLI bridge frame');\n if (v.type === 'session') {\n if (typeof v.id !== 'string' || !v.id || (this.conversationId && this.conversationId !== v.id))\n throw new Error('CLI session identity changed');\n this.identify(v.id);\n this.conversationId = v.id;\n this.emit({\n kind: 'status',\n text: 'CLI 已连接',\n observedModel: typeof v.model === 'string' ? v.model : undefined,\n });\n }\n else if (v.type === 'event') {\n const e = v.event;\n if (!e || !['assistant', 'tool', 'status', 'diagnostic'].includes(e.kind) || typeof e.text !== 'string')\n throw new Error('Invalid bridge event');\n this.emit({\n kind: e.kind,\n text: e.text,\n ...(Number.isInteger(e.step) ? { step: e.step } : {}),\n ...(typeof e.state === 'string' ? { state: e.state } : {}),\n ...(typeof e.detail === 'string' ? { detail: e.detail } : {}),\n });\n }\n else if (v.type === 'result') {\n if (!this.conversationId && v.status === 'ERROR' && typeof v.error === 'string')\n throw new Error(v.error.slice(0, 4096));\n if (!this.conversationId || !['SUCCESS', 'ERROR'].includes(v.status) || typeof v.response !== 'string')\n throw new Error('Invalid bridge result');\n this.result = {\n conversationId: this.conversationId,\n status: v.status,\n response: v.response,\n error: typeof v.error === 'string' ? v.error : undefined,\n };\n this.emit({ kind: 'result', text: v.response, state: v.status });\n }\n else\n throw new Error('Unknown CLI bridge frame');\n }\n}\n//# sourceMappingURL=bridge-protocol.js.map","import { homedir } from 'node:os'\nimport { basename, dirname, relative, resolve } from 'node:path'\n\n/** OMP 16 resolves its config root with join(os.homedir(), PI_CONFIG_DIR).\n * Windows roots on another drive cannot be expressed relative to the real home.\n * Rebase only this child environment; Host account discovery retains the real home.\n */\nexport function ompConfigurationEnvironment(configRoot) {\n if (typeof configRoot !== 'string' || !configRoot.trim() || configRoot.includes('\\0'))\n throw new Error('Invalid OMP configuration root')\n const root = resolve(configRoot)\n if (process.platform === 'win32')\n return { HOME: dirname(root), USERPROFILE: dirname(root), PI_CONFIG_DIR: basename(root) }\n return { PI_CONFIG_DIR: relative(homedir(), root) }\n}\n","import { mkdir, mkdtemp, rm, open, realpath } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { inspectPiInstallation } from './pi-installation.mjs';\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\nimport { ompConfigurationEnvironment } from './pi-omp-environment.mjs';\nimport { nativeLaunchArgv } from './native-launch.mjs';\nconst mismatch = (message) => Object.assign(new Error(message), { code: 'CLI_IDENTITY_MISMATCH' });\n// This is installation capability evidence, never account or model evidence.\n// Only standalone native binaries qualify: script dependencies may change\n// without changing the launcher's own metadata.\nconst ompCapabilities = new Map();\nasync function binaryRevision(executable) {\n let handle;\n try {\n const path = await realpath(executable);\n handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await handle.stat({ bigint: true });\n if (!info.isFile())\n return undefined;\n const magic = Buffer.alloc(4);\n if ((await handle.read(magic, 0, 4, 0)).bytesRead !== 4)\n return undefined;\n let portableExecutable = false;\n if (magic.subarray(0, 2).toString('ascii') === 'MZ' && info.size >= 64n) {\n const offset = Buffer.alloc(4), signature = Buffer.alloc(4);\n if ((await handle.read(offset, 0, 4, 0x3c)).bytesRead === 4) {\n const pe = offset.readUInt32LE();\n portableExecutable =\n pe >= 64 &&\n BigInt(pe + 4) <= info.size &&\n (await handle.read(signature, 0, 4, pe)).bytesRead === 4 &&\n signature.toString('hex') === '50450000';\n }\n }\n if (!portableExecutable &&\n ![\n '7f454c46',\n 'cffaedfe',\n 'cefaedfe',\n 'feedfacf',\n 'feedface',\n 'cafebabe',\n 'bebafeca',\n 'cafebabf',\n 'bfbafeca',\n ].includes(magic.toString('hex')))\n return undefined;\n return {\n path,\n revision: [info.dev, info.ino, info.size, info.mtimeNs, info.ctimeNs].join(':'),\n };\n }\n catch {\n return undefined;\n }\n finally {\n await handle?.close();\n }\n}\n/** Runs only bounded --help metadata, never login, OAuth refresh or a model prompt. */\nexport async function verifyPiOmpExecutable(cli, executable, capture) {\n if (cli === 'pi')\n return inspectPiInstallation(executable).executable;\n let isPi = false;\n try {\n inspectPiInstallation(executable);\n isPi = true;\n }\n catch {\n // A standalone OMP binary has no Pi manifest; its native help must identify it.\n }\n if (isPi)\n throw mismatch('OMP 入口指向 Pi Coding Agent;二者是独立 CLI,请修正 OMP 程序路径');\n const before = await binaryRevision(executable);\n if (before && ompCapabilities.get(before.path) === before.revision)\n return executable;\n const root = await mkdtemp(join(tmpdir(), 'cliworker-omp-identity-'));\n let cleanupConfirmed = true;\n try {\n const windowsAgent = join(root, 'config', 'agent');\n if (process.platform === 'win32')\n await mkdir(windowsAgent, { recursive: true, mode: 0o700 });\n const argv = /\\.(?:[cm]?js|cmd|bat)$/i.test(executable)\n ? nativeLaunchArgv([executable, '--help'])\n : [executable, '--help'];\n const help = await capture(argv, root, {\n PI_CODING_AGENT_DIR: root,\n PI_CONFIG_DIR: root,\n OMP_PROFILE: '',\n PI_PROFILE: '',\n TMPDIR: root,\n ELECTRON_RUN_AS_NODE: '1',\n ...(process.platform === 'win32'\n ? {\n ...ompConfigurationEnvironment(join(root, 'config')),\n PI_CODING_AGENT_DIR: windowsAgent,\n TMP: root,\n TEMP: root,\n }\n : {}),\n });\n if (!/^omp v\\d+\\.\\d+\\.\\d+\\b/m.test(help) ||\n !/\\brpc\\b/.test(help) ||\n !/^\\s+setup\\s/m.test(help) ||\n !/^\\s+models\\s/m.test(help) ||\n [\n '--mode',\n '--config',\n '--thinking',\n '--session-dir',\n '--tools',\n '--no-rules',\n '--no-title',\n '--no-lsp',\n '--no-pty',\n '--approval-mode',\n ].some((flag) => !help.includes(flag)))\n throw mismatch('OMP 安装身份或原生接口不匹配;需要支持 RPC、models 和 setup 的 Oh My Pi,不能使用 Pi 入口');\n if (before) {\n const after = await binaryRevision(executable);\n if (after?.path === before.path && after.revision === before.revision) {\n ompCapabilities.delete(before.path);\n ompCapabilities.set(before.path, before.revision);\n if (ompCapabilities.size > 64)\n ompCapabilities.delete(ompCapabilities.keys().next().value);\n }\n }\n return executable;\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError)\n cleanupConfirmed = false;\n throw error;\n }\n finally {\n if (cleanupConfirmed)\n await rm(root, { recursive: true, force: true });\n }\n}\n//# sourceMappingURL=pi-omp-identity.js.map","import { closeSync, existsSync, fstatSync, lstatSync, openSync, readFileSync, readSync, realpathSync, statSync, } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, isAbsolute, join, resolve, win32 } from 'node:path';\nimport { resolveNativeEntry } from './native-launch.mjs';\nexport class WindowsCliInstallationError extends Error {\n installed;\n code = 'CLI_INSTALLATION_UNAVAILABLE';\n constructor(message, installed = false) {\n super(message);\n this.installed = installed;\n this.name = 'WindowsCliInstallationError';\n }\n}\nconst unavailableCodex = () => new WindowsCliInstallationError('Codex Windows 应用包入口无法确认,请检查安装', true);\nfunction directory(env, name, fallback) {\n const value = env[name]?.trim() || fallback;\n if (!isAbsolute(value))\n throw new WindowsCliInstallationError('Windows CLI 安装目录配置无效');\n return value;\n}\n/** Fixed installer locations only; never scan arbitrary drives or select a venv by recency. */\nexport function windowsCliCandidates(cli, options = {}) {\n const env = options.env ?? process.env, home = options.home ?? homedir();\n if (cli === 'codex') {\n const npm = join(directory(env, 'APPDATA', join(home, 'AppData', 'Roaming')), 'npm');\n return [join(npm, 'codex.cmd')];\n }\n const root = join(directory(env, 'LOCALAPPDATA', join(home, 'AppData', 'Local')), 'hermes');\n return [\n join(root, 'bin', 'hermes.exe'),\n join(root, 'bin', 'hermes.cmd'),\n join(root, 'hermes-agent', 'venv', 'Scripts', 'hermes.exe'),\n ];\n}\n/** A residue is not a runnable installation and is not evidence of an account. */\nexport function hasWindowsHermesInstallDirectory(options = {}) {\n const env = options.env ?? process.env, home = options.home ?? homedir();\n return existsSync(join(directory(env, 'LOCALAPPDATA', join(home, 'AppData', 'Local')), 'hermes'));\n}\nfunction nativePe(path) {\n const canonical = realpathSync(path), fd = openSync(canonical, 'r');\n try {\n const info = fstatSync(fd), head = Buffer.alloc(64), signature = Buffer.alloc(4);\n if (!info.isFile() || readSync(fd, head, 0, 64, 0) !== 64 || head.toString('ascii', 0, 2) !== 'MZ')\n throw new Error('Not a native PE file');\n const offset = head.readUInt32LE(0x3c);\n if (offset < 64 ||\n offset + 4 > info.size ||\n readSync(fd, signature, 0, 4, offset) !== 4 ||\n signature.toString('hex') !== '50450000')\n throw new Error('Invalid PE signature');\n return canonical;\n }\n finally {\n closeSync(fd);\n }\n}\n/** Validate an automatically discovered npm shim against Codex's own package, not just its name. */\nexport function validateWindowsCodexNpmEntry(path) {\n try {\n const root = join(dirname(path), 'node_modules', '@openai', 'codex');\n const manifestPath = join(root, 'package.json');\n if (statSync(manifestPath).size > 128 * 1024)\n throw new Error('Oversized package metadata');\n const data = JSON.parse(readFileSync(manifestPath, 'utf8'));\n const bin = typeof data.bin === 'string' ? data.bin : data.bin?.codex;\n if (data.name !== '@openai/codex' ||\n typeof bin !== 'string' ||\n isAbsolute(bin) ||\n bin.split(/[\\\\/]/).includes('..'))\n throw new Error('Mismatched package identity');\n const entry = resolveNativeEntry(path, 'win32');\n if (realpathSync(entry) !== realpathSync(resolve(root, bin)))\n throw new Error('Mismatched package entry');\n return path;\n }\n catch {\n throw new WindowsCliInstallationError('Codex npm 安装入口无法确认,请检查安装', true);\n }\n}\nexport function presentWindowsCliCandidate(cli, options = {}) {\n for (const path of windowsCliCandidates(cli, options)) {\n try {\n lstatSync(path);\n }\n catch (error) {\n if (['ENOENT', 'ENOTDIR'].includes(error.code ?? ''))\n continue;\n throw new WindowsCliInstallationError('Windows CLI 安装入口无法读取,请检查安装', true);\n }\n if (cli === 'codex')\n return validateWindowsCodexNpmEntry(path);\n try {\n const entry = resolveNativeEntry(path, 'win32');\n if (/\\.exe$/i.test(entry))\n nativePe(entry);\n else if (entry !== path || !/\\.cmd$/i.test(entry))\n throw new Error('Unsupported Hermes entry');\n // Fixed Python cmd launchers are statically checked by resolveNativeEntry;\n // the existing Hermes verifier preserves the installer's own interpreter.\n return path;\n }\n catch {\n throw new WindowsCliInstallationError('Hermes Windows 安装入口无法确认,请检查安装', true);\n }\n }\n return undefined;\n}\nconst codexFamily = 'OpenAI.Codex_2p2nqsd0c76g0';\nconst codexPublisher = 'CN=50BDFD77-8903-4850-9FFE-6E8522F64D5B';\n/** Query current-user registered packages, never guess the newest WindowsApps directory. */\nexport const CODEX_APPX_QUERY = `$ErrorActionPreference='Stop'; [Console]::OutputEncoding=[Text.UTF8Encoding]::new($false); $p=@(Get-AppxPackage -Name 'OpenAI.Codex'); if($p.Count -eq 0){'null';exit 0}; if($p.Count -ne 1){throw 'Ambiguous Codex package'}; $v=$p[0]; [ordered]@{name=$v.Name;family=$v.PackageFamilyName;fullName=$v.PackageFullName;publisher=$v.Publisher;signature=[string]$v.SignatureKind;status=[string]$v.Status;location=$v.InstallLocation}|ConvertTo-Json -Compress`;\n/** Exported separately for synthetic identity/relocation tests; no process or account access. */\nexport function codexAppxExecutable(raw, validateFile = nativePe) {\n try {\n const value = JSON.parse(raw.trim());\n if (value === null)\n return undefined;\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw new Error('Invalid package record');\n const p = value;\n if (p.name !== 'OpenAI.Codex' ||\n p.family !== codexFamily ||\n p.publisher !== codexPublisher ||\n p.signature !== 'Store' ||\n p.status !== 'Ok' ||\n typeof p.fullName !== 'string' ||\n !/^OpenAI\\.Codex_\\d+(?:\\.\\d+){3}_(?:x64|arm64|x86)__2p2nqsd0c76g0$/.test(p.fullName) ||\n typeof p.location !== 'string' ||\n !win32.isAbsolute(p.location) ||\n p.location.includes('\\0') ||\n p.location.startsWith('\\\\\\\\') ||\n win32.basename(p.location).toLowerCase() !== p.fullName.toLowerCase())\n throw new Error('Unverified package identity');\n const candidate = win32.join(p.location, 'app', 'resources', 'codex.exe');\n const canonical = validateFile(candidate);\n // A registered package's CLI must stay in that package; never follow a swapped link elsewhere.\n if (win32.normalize(canonical).toLowerCase() !== win32.normalize(candidate).toLowerCase())\n throw new Error('Redirected package entry');\n return canonical;\n }\n catch {\n throw unavailableCodex();\n }\n}\nexport async function findWindowsCodexAppx(capture, signal, env = process.env) {\n signal.throwIfAborted();\n const windows = env.SystemRoot || env.WINDIR || 'C:\\\\Windows';\n if (!win32.isAbsolute(windows))\n throw new WindowsCliInstallationError('Windows 系统目录配置无效');\n const command = win32.join(windows, 'System32', 'WindowsPowerShell', 'v1.0', 'powershell.exe');\n const encoded = Buffer.from(CODEX_APPX_QUERY, 'utf16le').toString('base64');\n const raw = await capture([command, '-NoLogo', '-NoProfile', '-NonInteractive', '-EncodedCommand', encoded], homedir());\n signal.throwIfAborted();\n return codexAppxExecutable(raw);\n}\n//# sourceMappingURL=windows-cli-installation.js.map","import { StringDecoder } from 'node:string_decoder';\nconst record = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);\n/** Antigravity 1.2.16 NDJSON framing, including split UTF-8 characters. */\nexport class AgyProtocol {\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n result;\n conversationId;\n constructor(emit, identify, maxLineBytes) {\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let end;\n while ((end = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, end).trim();\n this.pending = this.pending.slice(end + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n }\n end() {\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n }\n id(value) {\n if (typeof value !== 'string' || !value.trim())\n return;\n if (this.conversationId && this.conversationId !== value)\n throw new Error('CLI conversation_id changed during a run');\n this.identify(value);\n this.conversationId = value;\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n let value;\n try {\n value = JSON.parse(line);\n }\n catch {\n throw new Error('Invalid Antigravity stream-json event');\n }\n if (!record(value) || typeof value.event !== 'string')\n throw new Error('Missing Antigravity event discriminator');\n if (this.result)\n throw new Error('Unexpected event after CLI result');\n this.id(value.conversation_id);\n if (value.event === 'init') {\n this.emit({\n kind: 'status',\n text: 'CLI 已连接',\n detail: JSON.stringify(value.init ?? {}),\n observedModel: record(value.init) && typeof value.init.model === 'string' ? value.init.model : undefined,\n });\n }\n else if (value.event === 'step_update') {\n const step = value.step_update;\n if (!record(step))\n throw new Error('Invalid step_update payload');\n this.id(step.conversation_id);\n const number = typeof step.step_index === 'number' ? step.step_index : undefined;\n const state = typeof step.state === 'string' ? step.state : undefined;\n if (step.step_type === 'agent_response') {\n this.emit({\n kind: 'assistant',\n step: number,\n state,\n text: typeof step.text_delta === 'string' ? step.text_delta : '',\n });\n }\n else if (step.step_type === 'tool') {\n this.emit({\n kind: 'tool',\n step: number,\n state,\n text: String(step.tool_name ?? '工具'),\n detail: JSON.stringify(step.tool_info ?? {}, null, 2),\n });\n }\n }\n else if (value.event === 'result') {\n const result = value.result;\n if (!record(result) ||\n typeof result.conversation_id !== 'string' ||\n typeof result.status !== 'string' ||\n typeof result.response !== 'string')\n throw new Error('Invalid CLI result payload');\n this.id(result.conversation_id);\n this.result = {\n conversationId: result.conversation_id,\n status: result.status,\n response: result.response,\n error: typeof result.error === 'string' ? result.error : undefined,\n };\n this.emit({ kind: 'result', text: result.response, state: result.status });\n }\n else {\n this.emit({ kind: 'diagnostic', text: `未识别事件:${value.event}`, detail: line });\n }\n }\n}\n//# sourceMappingURL=protocol.js.map","import { StringDecoder } from 'node:string_decoder';\nconst object = (v) => !!v && typeof v === 'object' && !Array.isArray(v);\nconst text = (v) => (typeof v === 'string' ? v : (JSON.stringify(v) ?? ''));\n/** Normalizes only public CLI messages. Never synthesizes hidden reasoning. */\nexport class CliProtocol {\n cli;\n emit;\n identify;\n maxLineBytes;\n decoder = new StringDecoder('utf8');\n pending = '';\n steps = new Map();\n completed = new Set();\n lastAssistant = '';\n mimoFinished = false;\n openTools = new Set();\n conversationId;\n result;\n constructor(cli, emit, identify, maxLineBytes) {\n this.cli = cli;\n this.emit = emit;\n this.identify = identify;\n this.maxLineBytes = maxLineBytes;\n }\n feed(chunk) {\n this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);\n let end;\n while ((end = this.pending.indexOf('\\n')) >= 0) {\n const line = this.pending.slice(0, end).trim();\n this.pending = this.pending.slice(end + 1);\n if (line)\n this.line(line);\n }\n if (Buffer.byteLength(this.pending) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n }\n end() {\n this.pending += this.decoder.end();\n if (this.pending.trim())\n this.line(this.pending.trim());\n this.pending = '';\n // Kimi print mode has no terminal result envelope. Clean EOF + the exact\n // resume receipt + an assistant answer are required; runtime checks exit 0.\n if (this.cli === 'kimi' &&\n !this.result &&\n this.conversationId &&\n this.lastAssistant &&\n !this.openTools.size)\n this.finish('SUCCESS', this.lastAssistant);\n if (this.cli === 'mimo' && !this.result && this.conversationId && this.mimoFinished)\n this.finish('SUCCESS', this.lastAssistant);\n }\n id(id) {\n if (typeof id !== 'string' || !id.trim())\n return;\n if (this.conversationId && this.conversationId !== id)\n throw new Error('CLI session ID changed during a run');\n this.identify(id);\n this.conversationId = id;\n }\n step(id) {\n if (!this.steps.has(id))\n this.steps.set(id, this.steps.size);\n return this.steps.get(id);\n }\n assistant(id, content) {\n if (this.completed.has(id))\n return;\n this.completed.add(id);\n if (content) {\n this.lastAssistant = content;\n this.emit({ kind: 'assistant', step: this.step(id), text: content });\n }\n }\n tool(id, name, detail, done = false, failed = false) {\n if (done)\n this.openTools.delete(id);\n else\n this.openTools.add(id);\n this.emit({\n kind: 'tool',\n step: this.step(id),\n text: name,\n detail: text(detail),\n state: failed ? 'FAILED' : done ? 'COMPLETED' : 'RUNNING',\n });\n }\n finish(status, response, error) {\n if (this.result)\n throw new Error('Duplicate CLI result');\n if (!this.conversationId)\n throw new Error('CLI result is missing its session ID');\n this.result = { conversationId: this.conversationId, status, response, error };\n this.emit({ kind: 'result', text: response, state: status });\n }\n line(line) {\n if (Buffer.byteLength(line) > this.maxLineBytes)\n throw new Error('CLI event exceeds maxLineBytes');\n let v;\n try {\n v = JSON.parse(line);\n }\n catch {\n throw new Error(`Invalid ${this.cli} JSONL event`);\n }\n if (!object(v))\n throw new Error('Invalid CLI event object');\n // Claude may emit hook/metrics metadata after the result. It cannot modify\n // text, identity or the final result; contradictory terminal events fail.\n if (this.result) {\n if (v.type === 'result' ||\n v.type === 'turn.completed' ||\n v.type === 'turn.failed' ||\n v.type === 'error' ||\n v.role === 'assistant')\n throw new Error('Unexpected output after CLI result');\n this.id(v.session_id ?? v.thread_id);\n return;\n }\n if (this.cli === 'codex') {\n if (typeof v.type !== 'string')\n throw new Error('Missing Codex event discriminator');\n if (v.type === 'thread.started') {\n this.id(v.thread_id);\n this.emit({ kind: 'status', text: 'Codex 已连接' });\n }\n else if (v.type.startsWith('item.') && object(v.item)) {\n const item = v.item, id = String(item.id), done = v.type === 'item.completed';\n if (item.type === 'agent_message' && done)\n this.assistant(id, text(item.text ?? ''));\n else if (['command_execution', 'file_change', 'mcp_tool_call', 'web_search', 'todo_list'].includes(item.type))\n this.tool(id, item.command ?? item.tool ?? item.type, item, done, item.status === 'failed');\n // Reasoning items are deliberately omitted from the conversation view.\n }\n else if (v.type === 'turn.completed')\n this.finish('SUCCESS', this.lastAssistant);\n else if (v.type === 'turn.failed')\n this.finish('ERROR', this.lastAssistant, text(v.error));\n else if (v.type === 'error')\n this.emit({ kind: 'diagnostic', text: text(v.message ?? v.error) });\n }\n else if (this.cli === 'claude') {\n if (typeof v.type !== 'string')\n throw new Error('Missing Claude event discriminator');\n this.id(v.session_id);\n if (v.type === 'system' && v.subtype === 'init')\n this.emit({\n kind: 'status',\n text: 'Claude Code 已连接',\n observedModel: typeof v.model === 'string' ? v.model : undefined,\n });\n else if (v.type === 'assistant' && object(v.message)) {\n for (const [i, block] of (v.message.content ?? []).entries()) {\n if (block.type === 'text')\n this.assistant(`${v.message.id}:${i}`, text(block.text));\n else if (block.type === 'tool_use')\n this.tool(block.id, block.name, block.input);\n }\n }\n else if (v.type === 'user' && object(v.message)) {\n for (const block of v.message.content ?? [])\n if (block.type === 'tool_result')\n this.tool(block.tool_use_id, '', block.content, true, !!block.is_error);\n }\n else if (v.type === 'result') {\n const denied = Array.isArray(v.permission_denials) && v.permission_denials.length > 0;\n this.finish(v.is_error || denied || v.subtype !== 'success' ? 'ERROR' : 'SUCCESS', text(v.result ?? this.lastAssistant), denied ? '工具权限被拒绝;未执行的操作不能视为完成。' : v.errors ? text(v.errors) : undefined);\n }\n }\n else if (this.cli === 'mimo') {\n if (typeof v.type !== 'string')\n throw new Error('Missing MiMo event discriminator');\n this.id(v.sessionID);\n const part = v.part;\n if (v.type === 'step_start') {\n this.mimoFinished = false;\n this.emit({ kind: 'status', text: 'MiMo 工作中' });\n }\n else if (v.type === 'text' && object(part))\n this.assistant(String(part.id), text(part.text ?? ''));\n else if (v.type === 'tool_use' && object(part))\n this.tool(String(part.callID ?? part.id), part.tool ?? '工具', part.state, true, part.state?.status === 'error');\n else if (v.type === 'step_finish')\n this.mimoFinished = part?.reason === 'stop';\n else if (v.type === 'error')\n this.finish('ERROR', this.lastAssistant, text(v.error));\n }\n else {\n if (typeof v.role !== 'string')\n throw new Error('Missing Kimi role discriminator');\n if (v.role === 'meta' && v.type === 'session.resume_hint') {\n this.id(v.session_id);\n this.emit({ kind: 'status', text: 'Kimi 会话已保存' });\n }\n else if (v.role === 'assistant') {\n if (typeof v.content === 'string')\n this.assistant(`message:${this.steps.size}`, v.content);\n if (v.tool_calls?.length)\n this.lastAssistant = '';\n for (const call of v.tool_calls ?? [])\n this.tool(call.id, call.function?.name ?? '工具', call.function?.arguments ?? '');\n }\n else if (v.role === 'tool')\n this.tool(v.tool_call_id, '', v.content, true);\n else if (v.role === 'meta')\n this.emit({ kind: 'diagnostic', text: String(v.type ?? 'Kimi metadata'), detail: line });\n else\n throw new Error(`Unsupported Kimi message role: ${v.role}`);\n }\n }\n}\n//# sourceMappingURL=cli-protocol.js.map","import { readClaudeOwnRoute, claudeNativeSettingsArguments } from \"./claude-own-route.js\";\nimport { discoverClaudeNativeOAuth } from \"./claude-native-oauth.js\";\nimport { discoverCodexModels } from \"./codex-models.js\";\nimport { discoverAgyAccountModels } from \"./agy-models.js\";\nimport { discoverFirstPartySources, readFirstPartyModelSources } from \"./first-party-models.js\";\nimport { nativeAgyAccountIdentity } from \"./agy-windows-account.js\";\nimport { extendedCatalog, isExtendedCli } from \"./extended-adapters.js\";\nimport { ZCodeProtocol, managedZCodeEntry } from \"./zcode-adapter.js\";\nimport { HermesProtocol } from \"./hermes-adapter.js\";\nimport { GrokProtocol } from \"./grok-adapter.js\";\nimport { OpenCodeProtocol } from \"./opencode-adapter.js\";\nimport { BridgeProtocol } from \"./bridge-protocol.js\";\nimport { verifyPiOmpExecutable } from \"./pi-omp-identity.js\";\nimport { findWindowsCodexAppx, hasWindowsHermesInstallDirectory, presentWindowsCliCandidate, WindowsCliInstallationError, } from \"./windows-cli-installation.js\";\nimport { resolveModel } from \"../shared/models.js\";\nimport { existsSync, statSync, lstatSync, accessSync, constants } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { SubprocessExecutableNotFoundError } from '@deepseek-ai/dsh-subprocess';\nimport { CLI_LABELS, EFFORTS, cliOf, } from \"../shared/types.js\";\nimport { AgyProtocol } from \"./protocol.js\";\nimport { CliProtocol } from \"./cli-protocol.js\";\nimport { agyArguments, ProcessCleanupUnconfirmedError, } from \"./process.js\";\nconst managedPiEntry = () => join(homedir(), '.local/share/cliworker-now/runtimes/pi-1.0.2/node_modules/@earendil-works/pi-coding-agent/dist/cli.js');\nfunction entryPresent(path) {\n try {\n lstatSync(path);\n return true;\n }\n catch (error) {\n if (error.code === 'ENOENT' || error.code === 'ENOTDIR')\n return false;\n throw error;\n }\n}\nexport const executableFor = (cli, config) => {\n if (cli === 'harness')\n throw new Error('Harness CLI 已移除,请新建 Hermes 任务');\n if (cli === 'antigravity')\n return config.executable;\n const configured = config[`${cli}Executable`];\n if (configured && configured !== cli)\n return configured;\n // A deployed standalone runtime is shared across platforms. An explicit\n // custom executable still wins, and a missing deployment keeps native lookup.\n if (cli === 'zcode' && entryPresent(managedZCodeEntry()))\n return managedZCodeEntry();\n if (process.platform === 'win32') {\n const roots = [\n join(homedir(), '.local', 'bin'),\n join(homedir(), cli === 'pi'\n ? '.pi/agent/bin'\n : cli === 'grok'\n ? '.grok/bin'\n : cli === 'kimi'\n ? '.kimi-code/bin'\n : cli === 'mimo'\n ? '.mimocode/bin'\n : '.local/bin'),\n ];\n if (cli === 'zcode') {\n const programs = process.env.LOCALAPPDATA && join(process.env.LOCALAPPDATA, 'Programs');\n for (const root of [programs, process.env.ProgramFiles]) {\n if (!root)\n continue;\n const entry = join(root, 'ZCode', 'resources', 'glm', 'zcode.cjs');\n if (entryPresent(entry))\n return entry;\n }\n }\n for (const root of roots)\n for (const extension of ['.exe', '.com', '.cmd', '.bat']) {\n const entry = join(root, cli + extension);\n if (entryPresent(entry))\n return entry;\n }\n if (cli === 'codex' || cli === 'hermes') {\n const entry = presentWindowsCliCandidate(cli);\n if (entry)\n return entry;\n }\n return configured || cli;\n }\n if (cli === 'zcode')\n return '/Applications/ZCode.app/Contents/Resources/glm/zcode.cjs';\n if (cli === 'grok')\n return join(homedir(), '.grok/bin/grok');\n if (cli === 'pi') {\n const native = join(homedir(), '.local/bin/pi');\n if (entryPresent(native))\n return native;\n const official = join(homedir(), '.pi/agent/bin/pi');\n if (entryPresent(official))\n return official;\n }\n // Desktop processes do not source .zshrc. Recognize official per-user installers.\n const nativeDirectory = cli === 'kimi' ? '.kimi-code/bin' : cli === 'mimo' ? '.mimocode/bin' : '.local/bin';\n const nativePath = join(homedir(), nativeDirectory, cli);\n return existsSync(nativePath) ? nativePath : (configured ?? cli);\n};\n/** Read-only discovery with bounded output. Never persist or expose provider credentials. */\nexport async function captureCatalogMetadata(backend, config, argv, cwd, signal, env, allowedExitCodes = [0]) {\n signal.throwIfAborted();\n const control = AbortSignal.any([signal, AbortSignal.timeout(15000)]);\n const process = backend.spawn({\n argv,\n cwd,\n env,\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void process.done.catch(() => undefined);\n let output = '', bytes = 0;\n const read = async (stream, keep) => {\n if (stream)\n for await (const chunk of stream) {\n bytes += Buffer.byteLength(chunk);\n if (bytes > config.maxRunBytes)\n throw new Error('CLI discovery output too large');\n if (keep)\n output += String(chunk);\n }\n };\n const readers = [read(process.stdout, true), read(process.stderr, false)];\n try {\n await Promise.all(readers);\n const outcome = await process.done;\n control.throwIfAborted();\n if (outcome.exitCode === null || !allowedExitCodes.includes(outcome.exitCode))\n throw new Error('CLI 模型查询失败,请在终端检查该 CLI 配置');\n return output;\n }\n finally {\n let exited = false;\n try {\n process.terminate();\n exited = await process.waitForExit();\n }\n catch {\n throw new ProcessCleanupUnconfirmedError();\n }\n if (!exited)\n throw new ProcessCleanupUnconfirmedError();\n await Promise.allSettled([...readers, process.done]);\n }\n}\nconst capture = captureCatalogMetadata;\nexport async function catalogFor(cli, backend, config, cwd, signal) {\n const executable = await resolveCliExecutable(cli, backend, config, signal);\n signal.throwIfAborted();\n if (isExtendedCli(cli)) {\n const models = await extendedCatalog(cli, executable, (argv, env) => capture(backend, config, argv, cwd, signal, env), config.stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), config, signal, { backend, signal, graceMs: config.graceMs });\n if (!models.length)\n throw new Error(`${CLI_LABELS[cli]} 当前账号暂无可用模型,请登录或刷新`);\n return {\n cli,\n models,\n notice: '当前账号可用模型',\n };\n }\n if (cli === 'antigravity') {\n const models = await discoverAgyAccountModels(() => capture(backend, config, [executable, 'models'], cwd, signal), signal, undefined, nativeAgyAccountIdentity(backend, config));\n return { cli, models, notice: '当前账号可用模型' };\n }\n if (cli === 'codex') {\n const models = await discoverCodexModels(backend, config, executable, cwd, signal);\n if (!models.length)\n throw new Error('Codex 当前账号暂无可确认模型,请刷新');\n return { cli, models, notice: '当前账号可用模型' };\n }\n if (cli === 'claude' || cli === 'kimi' || cli === 'mimo') {\n const claudeRoute = cli === 'claude' ? await readClaudeOwnRoute(cwd, signal) : undefined;\n if (claudeRoute?.kind === 'native') {\n const { models } = await discoverClaudeNativeOAuth(backend, config, executable, cwd, signal, claudeNativeSettingsArguments(claudeRoute.configDirectory));\n return { cli, models, notice: 'Claude 官方账号当前可用模型' };\n }\n const sources = await readFirstPartyModelSources(cli, executable, cwd, (argv, env) => capture(backend, config, argv, cwd, signal, env), signal);\n const models = await discoverFirstPartySources(sources, signal);\n if (!models.length)\n throw new Error(`${CLI_LABELS[cli]} 当前账号暂无可确认模型,请检查配置`);\n return {\n cli,\n models,\n notice: claudeRoute?.kind === 'proxy' ? 'Claude 本地代理当前可用模型' : '当前账号可用模型',\n };\n }\n throw new Error('Unsupported CLI');\n}\n/** Official models --verbose prints provider/model followed by a pretty JSON object. */\nexport function parseMimoModels(output) {\n const models = [];\n let id = '', buffer = '';\n for (const line of output.split(/\\r?\\n/)) {\n if (!buffer && /^[A-Za-z0-9_.:-]+\\/[^\\s]+/.test(line)) {\n id = line.split(/\\s/)[0];\n continue;\n }\n if (!buffer && line.trim() !== '{')\n continue;\n buffer += line + '\\n';\n try {\n const model = JSON.parse(buffer);\n if (id)\n models.push({\n id,\n label: String(model.name ?? id),\n efforts: [\n 'default',\n ...Object.keys(model.variants ?? {}).filter((e) => e !== 'default' && EFFORTS.includes(e)),\n ],\n });\n id = '';\n buffer = '';\n }\n catch {\n /* Wait for the rest of the pretty-printed JSON object. */\n }\n }\n return models;\n}\nexport function validatePreference(preference, catalog) {\n if (cliOf(preference) !== catalog.cli)\n throw new Error('CLI 配置不匹配');\n resolveModel(preference, catalog.models);\n}\nexport function workerArguments(executable, project, preference, mode, prompt, timeoutMs, conversationId) {\n const cli = cliOf(preference);\n const task = `任务:\\n${prompt}`;\n if (cli === 'antigravity')\n return agyArguments(executable, project, preference, mode, prompt, timeoutMs, conversationId);\n if (cli === 'codex')\n return [\n executable,\n 'exec',\n ...(conversationId ? ['resume', conversationId] : []),\n '--json',\n '--skip-git-repo-check',\n '--model',\n preference.model,\n '-c',\n `model_reasoning_effort=${JSON.stringify(preference.effort)}`,\n '-c',\n `sandbox_mode=${JSON.stringify(mode === 'plan' ? 'read-only' : 'workspace-write')}`,\n '-c',\n 'approval_policy=\"never\"',\n task,\n ];\n if (cli === 'claude')\n return [\n executable,\n '--print',\n '--verbose',\n '--output-format',\n 'stream-json',\n '--model',\n preference.model,\n ...(preference.effort !== 'default' ? ['--effort', preference.effort] : []),\n '--permission-mode',\n mode === 'plan' ? 'plan' : 'acceptEdits',\n ...(conversationId ? ['--resume', conversationId] : []),\n task,\n ];\n if (cli === 'kimi') {\n if (mode === 'plan')\n throw new Error('Kimi 当前非交互模式不支持只读派遣,请使用其他 CLI 或明确授权写入任务');\n if (preference.effort !== 'default')\n throw new Error('Kimi CLI 不支持传入思考强度');\n return [\n executable,\n '--model',\n preference.model,\n '--output-format',\n 'stream-json',\n ...(conversationId ? ['--session', conversationId] : []),\n '-p',\n task,\n ];\n }\n if (cli === 'mimo')\n return [\n executable,\n 'run',\n '--format',\n 'json',\n '--model',\n preference.model,\n '--agent',\n mode === 'plan' ? 'plan' : 'build',\n ...(preference.effort !== 'default' ? ['--variant', preference.effort] : []),\n ...(conversationId ? ['--session', conversationId] : []),\n task,\n ];\n throw new Error(`${CLI_LABELS[cli]} 尚未接入`);\n}\nexport function protocolFor(cli, emit, identify, maxLineBytes, expectedModel) {\n if (cli === 'harness')\n throw new Error('Harness CLI 已移除,历史记录仅供查看');\n if (cli === 'zcode')\n return new ZCodeProtocol(emit, identify, maxLineBytes, expectedModel);\n if (cli === 'hermes')\n return new HermesProtocol(emit, identify, maxLineBytes);\n if (cli === 'grok')\n return new GrokProtocol(emit, identify, maxLineBytes);\n if (cli === 'opencode')\n return new OpenCodeProtocol(emit, identify, maxLineBytes);\n if (cli === 'pi' || cli === 'omp')\n return new BridgeProtocol(emit, identify, maxLineBytes);\n return cli === 'antigravity'\n ? new AgyProtocol(emit, identify, maxLineBytes)\n : new CliProtocol(cli, emit, identify, maxLineBytes);\n}\nexport async function resolveCliExecutable(cli, backend, config, signal = AbortSignal.timeout(15000)) {\n signal.throwIfAborted();\n const executable = executableFor(cli, config);\n let resolved;\n if (isExtendedCli(cli) && /\\.[cm]?js$/.test(executable) && existsSync(executable)) {\n // JavaScript launchers run through Node and need readability, not an executable bit.\n // A directory ending in .js is a broken configuration, not an installed CLI.\n if (!statSync(executable).isFile())\n throw new Error('CLI 脚本路径不是普通文件');\n accessSync(executable, constants.R_OK);\n resolved = executable;\n }\n else {\n const lookup = async () => {\n try {\n return await backend.resolveExecutable(executable);\n }\n catch (error) {\n const absent = error instanceof SubprocessExecutableNotFoundError || ['ENOENT', 'ENOTDIR'].includes(error.code);\n if (process.platform === 'win32' && executable === cli && absent &&\n cli === 'hermes' && hasWindowsHermesInstallDirectory())\n throw new WindowsCliInstallationError('检测到 Hermes 安装目录,但未找到可用 CLI 入口,请完成安装或配置已有入口');\n // Only an absent default PATH entry can use the legacy private install.\n // A broken or incompatible native/configured entry must remain an error.\n if (cli === 'pi' && executable === 'pi' && ['ENOENT', 'ENOTDIR'].includes(error.code)) {\n const managed = managedPiEntry();\n if (existsSync(managed) && statSync(managed).isFile()) {\n accessSync(managed, constants.R_OK);\n return managed;\n }\n }\n throw error;\n }\n };\n // Path lookup owns no process; it may be abandoned, but no late resolution\n // may start an identity probe after its caller has cancelled.\n const pathLookup = (read) => new Promise((resolve, reject) => {\n const abort = () => reject(signal.reason);\n signal.addEventListener('abort', abort, { once: true });\n void read()\n .then(resolve, reject)\n .finally(() => signal.removeEventListener('abort', abort));\n if (signal.aborted)\n abort();\n });\n try {\n resolved = await pathLookup(lookup);\n }\n catch (error) {\n signal.throwIfAborted();\n const absent = error instanceof SubprocessExecutableNotFoundError || ['ENOENT', 'ENOTDIR'].includes(error.code);\n if (process.platform !== 'win32' || cli !== 'codex' || executable !== cli || !absent)\n throw error;\n // Appx metadata owns a child process. Unlike pure PATH lookup, cancellation\n // must await its cleanup and preserve ProcessCleanupUnconfirmedError.\n const entry = await findWindowsCodexAppx((argv, cwd) => captureCatalogMetadata(backend, config, argv, cwd, signal), signal);\n signal.throwIfAborted();\n if (!entry)\n throw error;\n resolved = await pathLookup(() => backend.resolveExecutable(entry));\n }\n }\n signal.throwIfAborted();\n if (cli === 'pi' || cli === 'omp')\n return verifyPiOmpExecutable(cli, resolved, (argv, cwd, env) => captureCatalogMetadata(backend, config, argv, cwd, signal, env));\n return resolved;\n}\n//# sourceMappingURL=adapters.js.map","import { catalogFor, validatePreference } from \"./adapters.js\";\nimport { readCliAccountBinding } from \"./cli-account-binding.js\";\nimport { withWindowsAgyAccountSnapshot } from \"./agy-windows-account.js\";\nimport { resolveModel } from \"../shared/models.js\";\nimport { cliOf } from \"../shared/types.js\";\nexport const ACCOUNT_CHANGED = '账号已变更,请重新选择或新建任务';\n/** Private authorization state: never spread this object into a Remote response. */\nexport async function authorizedCatalog(cli, backend, config, project, signal, expected) {\n const discover = async () => {\n const binding = await readCliAccountBinding(cli, backend, config, project, signal);\n if (expected && binding !== expected)\n throw new Error(ACCOUNT_CHANGED);\n const catalog = await catalogFor(cli, backend, config, project, signal);\n return { binding, catalog };\n };\n const { binding, catalog } = cli === 'antigravity' && process.platform === 'win32'\n ? await withWindowsAgyAccountSnapshot(backend, config, signal, discover)\n : await discover();\n signal.throwIfAborted();\n // Deliberately outside the snapshot scope: logout, expiry and account changes\n // during native model discovery must still invalidate the returned directory.\n if (binding !== (await readCliAccountBinding(cli, backend, config, project, signal)))\n throw new Error(ACCOUNT_CHANGED);\n if (catalog.cli !== cli)\n throw new Error('CLI 模型目录身份不匹配');\n if (!catalog.models.length)\n throw new Error('暂无可确认的可用模型,请登录或刷新');\n return { catalog, binding };\n}\nexport async function authorizeSelection(preference, backend, config, project, signal, expected) {\n const result = await authorizedCatalog(cliOf(preference), backend, config, project, signal, expected);\n validatePreference(preference, result.catalog);\n return { ...result, preference: resolveModel(preference, result.catalog.models) };\n}\n//# sourceMappingURL=authorized-catalog.js.map","/** User-supplied novel roles, adapted for an arbitrary CLI Worker project. */\nconst PROJECT_CONTEXT = `\n使用当前任务指定的项目和资料。先核对目标章节或剧情单元、作者已确认的方向、正文状态、世界规则、人物资料和风格规范;不要假定原技能的文件、脚本、检索服务或其他智能体已经安装。关键资料缺失时明确指出缺口,只询问会改变任务范围、事实边界或授权的必要问题,不能编造来源或既有设定。\n若当前项目提供 Evidence Packet、Writer Packet、Issue Manifest 或工作流规范,优先复用同一检查点已有材料,并核对绑定的原文证据;它们不自动取代已锁定正文与作者确认。若迁移闸门为 shadow_pending,Packet 仅作定位或影子辅助。工具或资料不存在时以当前可读资料执行,注明实际覆盖范围、资料截止点、执行方式与降级原因;不得宣称已运行未运行的检查。负查只表示“在本次检查范围未发现”。\n区分正典、已确认设计、提案和待验证假设;未来章纲、未采用的 D&D 参考与推测不能充当已发生事实。涉及 D&D 的作品只使用项目已登记采用的规则。遵循宿主权限和作者本次授权,角色提示词不授予额外文件、命令或派遣权限。不要自行切换模型、CLI 或另派子智能体;需要额外复核而当前没有独立复核能力时,明确标记为单人检查,不伪造对抗过程。\n`.trim();\nconst withContext = (prompt) => `${prompt.trim()}\\n\\n【共同资料与执行边界】\\n${PROJECT_CONTEXT}`;\nexport const BUILTIN_ROLE_PRESETS = [\n {\n id: 'novel-audit-commercial-review',\n name: '商业审稿人',\n summary: '围绕章首承接、承诺兑现、节拍推进和章末吸引力,给出有证据的留存建议。',\n builtin: true,\n source: 'novel-audit-commercial-review',\n prompt: withContext(`\n你是小说商业审稿人,属于编辑岗。只报告商业证据、读者影响和建议,不修改正文、正典、章纲或审校队列。逻辑自洽与文风问题分别交给对应审校角色;这里只讨论其对目标读者继续阅读的直接影响。\n\n【入口与范围】\n读取目标章全文一次、作品定位,以及上一锁定章的接口或章末钩子。优先复用上游证据包;没有时按实际资料组织证据,不重复扫描整库。日常检查仅覆盖目标章和必要接口;按明确风险补查承诺、钩子或单元入口,只有跨章风险或作者明确要求全审时才扩大范围。审前最多询问四个真正缺口:章型、目标读者、关注信号、授权。\n\n【四个独有信号】\n每个信号只写一段“证据 → 读者反应 → 建议”,同一段落不要换维度重复论证。\n1. 章首承接:首章检查前 300 字是否建立具体问题;连载章检查是否接住上一章钩子,不能用首章标准机械评估每章。\n2. 承诺与兑现:检查章纲或前章承诺是否兑现、升级或有意延迟;延迟应有可核对的预期回收窗,合法延迟不是失信。\n3. 节拍和推进:场景是否改变事件、信息、关系、风险、目标、资源或时间压力;只指出连续无变化且影响阅读的段落。\n4. 章末下一点击力:结尾是否留下读者能理解的悬念、危机、收益或新目标,是否有明确继续阅读动机。\n\n【读者视角与复核】\n默认由你做一次顺读判断,明确注明“单人模拟”,不要声称真实读者测试。仅当首章、章首或章末风险、明显留存问题、全审或作者明确要求时,提出独立读者复核需要。若已获授权且确有独立复核结果,记录首次划走点和候选问题对下一章点击的影响;有分歧就保留双方证据,不伪造共识。\n\n【证据与去重】\n每条问题给出稳定 issue_id、原文位置与短引文、承诺/节拍/钩子证据、严重度、置信度、候选或确认状态、处置建议和是否获修改授权。其他审校已经报告的同一问题只引用其 issue_id 和一句商业影响,不重复原理、引文与修复方案。没有原文证据不能扣分或判断劝退;建议不能删掉已确认的核心爽点、改变出口或提前泄露正典。涉及重大方向只列待作者决定。\n\n【输出】\n先给主编结论、四信号判断和 Top 3,再列有效资产、毒点/劝退点、爽点与断章、留存建议和实际复核记录。需要兼容旧报告时再给九维评分:开篇吸引力、核心卖点、剧情节奏、爽点情绪、人物主动性、表层逻辑、语言可读性、章末钩子、长线潜力;共享同一证据,不写九遍论证。评分仅用于展示,不是定稿门禁。报告标明实际检查范围、资料截止点、证据包标识(如有)和降级情况。审稿不等于授权,不能把建议写成已执行修改。\n`),\n },\n {\n id: 'novel-audit-logic-check',\n name: '逻辑审校员',\n summary: '核对人物认知、状态资源、因果动机与时空连续性,定位漏洞并提出最小修复。',\n builtin: true,\n source: 'novel-audit-logic-check',\n prompt: withContext(`\n你是小说逻辑审校员,属于编辑岗。只报告问题、证据、影响和修复选项,不修改正文、正典、章纲或审校队列。保持作者、读者和角色三者的信息边界。\n\n【入口与覆盖】\n读取目标章全文一次,并取得上一锁定章最后场景或事件接口。先复用上游证据包;日常只对初读或确定性扫描发现的候选片段判断,不为普通段落生成空问题。按风险定向补查有关卡片;作者要求全项、跨章高风险或本书特化账目被触发时再扩大检查。只在目标、覆盖、关注族或授权不明时提问,最多四题。资料不足时明确覆盖盲区,不说“全书无问题”。\n\n【六个问题族】\n1. 认知与信息访问:角色知道、不知道、相信和可以据以行动的信息是什么,信息如何到达。\n2. 状态、资源与能力:伤势、装备、权限、法术位、额度等前后状态;能力范围、消耗和恢复是否相符。\n3. 因果与动机:目标、阻力、选择、行动和结果是否有前因,是否靠强行降智推进。\n4. 时间与空间:有效时间、路程、视线、位置、在场人物、倒叙与时间跳跃。\n5. 规则、身份与关系:世界法则、项目采用的规则、称呼、关系变化和系统权限。\n6. POV、环境与叙述连续性:焦点切换、门锁或痕迹、环境状态、不可靠叙述、读者可见信息和延迟揭示。\n\n【每条候选先建立证据卡】\n写出“前状态 → 原文事件 → 后状态”;分别列角色知道/不知道/相信/可操作信息、读者与叙述者可见信息、有效时间区间、地点和在场者。注明叙事许可为无、倒叙、不可靠叙述、焦点切换、计划揭示或未知,并绑定文件位置、行或字符锚点与短引文。\n先查合法叙事许可和信息差,再核对状态、资源和规则。不能把传闻、留白、合法反转、计划或伏笔当矛盾。台账与锁定正文冲突时以锁定正文为准,报告派生文件滞后;不要静默改台账。证据不足的候选应标不确定,不硬判成立。\n\n【按风险复核】\n日常局部判断由你完成,不默认全文读前两章或启动多轮对抗。严重问题、低置信度、许可不明项需要定向辩护:主动寻找能推翻指控的文本解释。只有作者要求完整对抗且获得实际独立结果时才报告猎手/辩护过程;剔除候选也要保留理由。复核结论不能自动变成改稿动作。\n\n【输出】\n先给整体评价和 Top 3–5,再列实际触发领域的账目核对、逻辑硬伤、因果断点、复核与未决事项。问题清单包含 issue_id、类型、原文 span、可检验的一句话、前后状态、知识主体、有效时间、叙事许可、绑定来源、confidence、severity(P0/P1/P2)、phase(candidate/confirmed/dismissed/uncertain)、disposition、authorized。confirmed 不等于 authorized;与其他审校同一问题沿用 ID。\n每个成立的问题都给最低成本的微创修复选项,涉及锁定内容标待作者确认。评分仅用于展示,不作为锁定门禁。说明实际范围、截止点、证据包(如有)与降级原因;不得把建议写成已执行结果。\n`),\n },\n {\n id: 'novel-audit-style-review',\n name: '文风审校员',\n summary: '结合小说语境和作品风格,检查模板腔、怪比喻、对白同质化与文风漂移。',\n builtin: true,\n source: 'novel-audit-style-review',\n prompt: withContext(`\n你是小说文风审校员,属于编辑岗。只报告问题、证据、影响和建议,不修改正文、正典或审校队列。逻辑和资源账目交逻辑审校,商业留存交商业审稿;不能将个人审美当作作品规则。\n\n【基准与范围】\n读取目标章一次,以当前项目的写作风格规范为权威基准,以前章已确认正文的风格指纹为实践基准。复用上游证据包,不重复构建或全库扫描;只在作者指定或高风险全审时读取更多基准章。最多询问四个会改变基准、覆盖或授权的缺口。没有基准证据时不能断言文风漂移,先报告局部语言现象和判断限制。\n\n【固定顺序:规则命中 → 片段 → 语境】\n1. 若当前项目实际提供 Renwei fiction lint,先按其小说配置运行,记录规则编号、文件、行号/字符范围、片段、统计范围、命中数和检查结果;默认排除 frontmatter、代码块和管理表格。不存在时明确未运行,人工检查只能称为人工语境检查,不虚构 lint 结果。\n2. 只对 lint 命中和读到的候选片段核对前后句、规则、风格规范与前章先例。没有可行动命中就不凑问题、不加载无关深层规则。\n3. 检查反向放行条件:功能化比喻、设定术语、项目已登记的 D&D 译名、合法氛围修辞和角色独有说话方式。计数不是语境结论。\n\n【指标边界】\n全书和单章指标分开,不能把全书阈值机械缩成单章。Renwei fiction 的章级或书级规则在单章少于两个命中时仅作 hint,不形成阻断性 FAIL;句子级规则要有最小样本和例外。单个短章的一处命中不能仅凭计数判失败。不使用 humanizer-zh 的非虚构指标,不将“人味密度”“第一人称插曲”等非小说指标套入小说。评分不参与逻辑门禁、锁定或自动改稿。\n\n【按命中启用检查族】\n- 模板腔与 AI 味:对白同质化、情绪直述、模板开场、陈腐身体反应、形容词或弱动词堆叠、欧化句式、排比填充、过渡套话、节奏机械化。\n- 作品特化:需要额外解码的怪比喻或拟人、生僻词堆砌;设定术语和已登记译名默认放行。\n- 风格一致性:禁用表达及额度、句长段落、对白指纹、心理密度、术语单位和项目约定 POV;不强行把所有作品改成同一种口吻。\n\n【复核与报告】\n日常由你作局部判断;刺眼、低置信度或许可不明的命中做一次反向复核,查放行条件与前章先例,并保留误报剔除理由。未经实际独立复核不得写“已完成双人辩论”。\n输出总体结论、有效文风资产、Top 3、问题清单、实际预扫描计数和复核记录;需要兼容时再给展示性评分。每项包含稳定 issue_id、原文 span、规则或判断依据、来源锚点、严重度、置信度、候选/确认/剔除状态、处置建议和是否获授权;与其他报告同一问题只引用 ID,不重复论证。示范改句仍是建议态,锁定正文的调整须由作者确认。报告写明范围、资料截止点及降级情况。\n`),\n },\n {\n id: 'novel-revise',\n name: '正文修订师',\n summary: '按作者授权与审查问题清单微创改稿,保留快照、差异记录和定向回归。',\n builtin: true,\n source: 'novel-revise',\n prompt: withContext(`\n你是小说正文修订师,属于主笔岗的最小授权执行角色。在这些小说角色中,只有本角色负责修改既有正文;小说主笔只创建或填充明确授权的草稿。审查报告、模型发现、“已确认问题”和顺手优化都不等于修改授权。\n\n【入口与授权清单】\n读取作者指令全文、目标正文、审查报告与相关权威资料。优先复用修订证据包;仅把它作为定位和证据组织,不能扩大授权。将意见整理成 Issue Manifest,每项包含稳定 issue_id、原文位置与短引文、绑定证据、修复边界、phase、disposition 和 authorized。只有 authorized=true 且 disposition 为 accept/revise 的事项可执行;confirmed 不等于授权。旧报告缺位置或授权时先列待确认,不能猜。状态、资源、时间、伏笔、规则或认知证据冲突时先说明,不脑补。\n\n【四级边界】\n- A 级:作者明确要求的句、段、剧情或逻辑修复,只在授权目标范围内改。\n- B 级自动连带:当前句或相邻句段中,为使 A 级成立所必需的最小修补;逐项说明“由任务 X 的 Y 处引发,受影响原文为……”。\n- B 级授权连带:跨段、跨场景,或影响伏笔、结果、人物动机、能力规则、后续因果;须作者逐项确认。快速档仅列待决,不执行。\n- C 级保护:其余正文完全锁定,包括同义词替换、美化、删细节、调节奏、重排揭示。\n- D 级额外发现:新发现只报告,不自动修改。\n\n【任务地图与档位】\n先展示任务地图:章节、实际范围、意见来源、资料截止点、授权条数、档位、每项 issue_id/span、必须改什么、最小连带及依据、待授权连带、禁止波及区域。\n快速档用于不超过三项局部小改,已有明确授权时展示地图后可直接执行 A 级与合法 B 级自动连带。完整档用于多意见、大改或定稿前修订,地图和授权级连带需作者确认后执行。作者允许你推荐方案并不自动扩大改稿权限。\n\n【执行与回归】\n1. 写入前在当前项目合适的归档位置创建不可覆盖的正文快照,报告真实路径;没有文件写入权限则只给建议和补丁。\n2. 逐条最小范围修改,不能全文重写。未经本轮明确授权,不改正典、章纲、台账或正文 frontmatter 管理状态。\n3. 生成 diff_manifest:文件、原/新 span、issue_id、权限级别、连带依据和实际字符差;使用项目差异工具前先确认它存在。发现未授权差异,先恢复或交作者决定。\n4. 快速档对照快照自查 C 级误伤;完整档在实际具备独立复核时核查 A/B/超授权,不追加文笔意见。没有独立复核则如实说明。\n5. 只回归受影响的状态/资源、时间/空间、认知/伏笔、规则或文风问题族,不重新引入无关全套审查。记录 reject/dismiss 理由以免误报复现。\n6. 回归出现新的状态、资源、时间、伏笔或认知风险时停止扩改并报告,不能用新一轮修改遮盖。\n\n【交付】\n报告执行元数据、实际修改与 issue_id、差异清单、必要连带、误伤检查、定向回归、额外发现但未修改事项、待作者决定事项和快照位置。区分建议与实际执行,不能把尚未写入的修改称为已完成。不自动定稿、关账、更新正典或推进任务看板;作者确认后才进入项目规定的后续流程。\n`),\n },\n {\n id: 'novel-start-plot-node',\n name: '剧情节点设计师',\n summary: '先建立入口、选择与出口的状态契约,再设计有因果、有代价的剧情节点。',\n builtin: true,\n source: 'novel-start-plot-node',\n prompt: withContext(`\n你是剧情节点设计师,属于策划岗。只产出提案态方案,不写正文,不修改章纲或正典,不把设想当作已发生事实。先确定节点的入口与出口,再讨论如何好看。\n\n【资料与最小询问】\n定位当前状态、所属剧情单元、已确认节点链、上一锁定章接口与相关正典。复用已有证据包和确认决策,不能用未来章纲或未采用规则补入口事实。\n如果作者未提供方向,先问是否有一句话想法,可跳过;有则归纳成两三行设计基准,冲突时列出冲突供作者选择。来自已确认拆分方案时沿用既定爽点、难度、代价、收益,只询问要调整的部分。最多七个必要选择问题:节点类型、主要爽点一至两个、难度与代价、真实选择及机会成本、收益或旧资产复用、特殊禁令、出口钩子。资料已有答案不重复问;作者授权由你决定时给推荐,并标明它仍是提案。\n\n【第一步:一页节点状态契约】\n- 入口:时间、地点、在场人物、状态、资源、能力、已知/未知/相信以及未解决问题。\n- 目标:限制条件、成功标准和失败代价。\n- 阻力:敌人、环境、时间、信息、资源或多目标冲突,以及对手反制。\n- 真实选择:至少明确 A 与 B,各自机会成本,不能假选择。\n- 预期出口:信息、资源、能力、风险、关系、位置、任务或认知的变化。\n- 知识边界:主角与对手知道/不知道/可操作什么,读者和叙述者可以看见什么。\n- 来源:逐项区分正典、已确认设计、提案、待验证假设,附现有来源锚点与资料截止点。\n这一轮只给契约,不扩写完整场景;列明待拍板项,等待作者确认或调整后再展开。已有明确确认可直接沿用,不能反复要求确认同一决定。\n\n【确认后的十三项设计】\n按节点需要取舍,不相关项注明不涉及,不凑篇幅:\n1. 目标、成败标准与入口;2. 阻力及时间/空间/规则限制、对手反制;3. 主角/对手/读者信息差与 POV;4. 关键行动、真实选择、机会成本;5. 前状态 → 事件 → 后状态的因果链;6. 一至两个核心爽点与期待兑现;7. 实力、知识或人物成长;8. 道具、资源和旧资产复用;9. 世界与主线推进;10. 状态变化与出口钩子;11. 风险、待验证项和最小备选;12. 章节包装建议;13. 与已确认节点链的接口和不可改约束。\n每项区分依据和新增提案。新规则、人物生死或阵营、主线因果、推翻锁定事实都列待作者确认。说明为什么该节点不能删、为什么导致下个节点、留下何种可复用资产;不是每个节点都必须升级、获装备、埋伏笔或顿悟,节点也不等于一章。\n\n【已有节点的评审】\n若任务是评审,先确定重点,按“问题—证据—影响—修复选项”输出,不改原方案;作者确认需要重设计后才进入设计流程。\n\n【输出与质量门】\n保留已确认设计要点、节点为什么存在/好看、留下什么、怎样推动长线、风险与待确认项。核对“入口 → 目标 → 阻力/限制 → 信息差 → 真实选择 → 行动与兑现 → 成长/资产 → 后置状态 → 出口钩子”是否闭合。不得为爽点临时加无依据规则、强行降智,或让系统替主角解释完整因果;未经作者确认不写入正文、章纲和正典。\n`),\n },\n {\n id: 'novel-start-plot-split',\n name: '剧情结构规划师',\n summary: '将剧情单元拆成因果相连的节点链,先给紧凑总览,再展开当前关键节点。',\n builtin: true,\n source: 'novel-start-plot-split',\n prompt: withContext(`\n你是剧情结构规划师,属于策划岗。负责将剧情单元拆成因果节点链,采用近细远粗的两阶段设计;只产出提案,不写正文,不把计划当成已发生事实。新增规则、人物生死、主线因果和推翻锁定事实必须保留作者确认边界。\n\n【一次资料预检】\n确认单元入口、出口、资源账目、已锁定节点和知识边界。优先复用上游证据包;只给单元标识时先读对应单元资料、当前状态和最近锁定章或事件接口,不机械为每种资料各查一次。未来章纲、未采用 D&D 参考、提案不能混进入口事实。资料不足则按缺口定向查阅,说明降级与盲区。\n\n【只问新增缺口】\n作者没有给方向时可询问一句话想法,有则用两三行形成基准并检查正典冲突。最多七个新增选择问题,覆盖主要功能/爽点、胜负难度、代价、收益、特殊禁令、是否可调顺序。已确认决策和资料已明确的目标、资源、人物、设定自动沿用。作者允许由你决定的项采用推荐,不再反复追问。\n\n【第一轮:单元契约与紧凑节点卡】\n先给一页提案态单元契约:入口的位置/时间/在场人物/资源能力/已知未知相信/未解决问题;单元目标;核心阻力与压力曲线;出口中必须变化的信息、资源、能力、关系、位置、风险或任务;核心兑现与后续接口。正典、已确认设计、提案、待验证假设分开标注。\n再用一张紧凑表列所有节点:节点名|当前问题|触发与核心行动|核心爽点或功能|前状态 → 后状态|知识边界|资产/代价|下一节点接口。涉及旧资产复用、系统权限和 D&D 采用状态时单独说明。\n按问题、因果、状态、压力的变化拆分,不按固定章数切割。每个节点至少改变信息、资源、能力、风险、关系、位置、任务或认知之一;删掉后下个节点仍自然成立的节点,应建议合并或删除。\n第一轮结束等待作者确认或调整节点链,并选择先展开哪一至两个节点;未经确认不自动展开全部细节,已有明确确认可沿用。\n\n【第二轮:只展开当前一至两个节点】\n按功能取舍:目标与成败标准;入口及前置条件;阻力、对手反制与时空约束;角色知道/不知道/相信/可操作信息及读者视野;真实选择与机会成本;行动、因果链和结果;一至两个核心爽点及人物作用;资产获得、消耗、损坏或复用与规则适配;后置状态及下节点接口;风险、待验证项和最低成本备选。不要强制每节点升级、获装备、埋伏笔或凑齐十三项。其余节点保持紧凑层级,按作者进一步要求再细化。\n\n【质量检查与报告】\n核对入口 → 阻力 → 选择 → 行动 → 结果闭环;知识越界、未来信息泄漏、系统替角色解题、旧资产复用、可验证状态变化、已锁定事实及作者禁令。冲突只标待确认,不能静默改设定或为爽点强行降智。\n输出已确认方向、单元入口与出口、节点总览、当前节点详细拆分、爽点与成长曲线、风险检查,标明第一轮/第二轮、来源锚点、资料截止点和实际证据范围。节点不等于章节;所有未确认内容保持提案态,未经作者确认不得写入章纲、正典或正文。\n`),\n },\n {\n id: 'novel-write',\n name: '小说主笔',\n summary: '依据已确认剧情和最小场景资料写作草稿,严格守住人物认知、状态与风格边界。',\n builtin: true,\n source: 'novel-write',\n prompt: withContext(`\n你是小说主笔,将作者已确认的节点或章纲转成场景草稿。只创建或填充明确授权的草稿,不修改既有待审、修订、锁定或已发布正文;这些改动应交正文修订师。不能替作者批准重大剧情方向,也不能把提案写成已发生事实。\n\n【入口检查】\n确认目标章节、已确认节点、主任务、章末变化和作者禁令。目标文件不存在时先确认章节文件及项目 frontmatter 约定;章纲不能直接当成正文。正文处于待审、修订、锁定或已发布状态时停止覆盖。节点或章纲仍是提案时,先交回策划确认,不能直接开写。\n\n【最小场景资料包】\n复用同一检查点的证据,按场景块准备最小 Writer Packet,不将整个资料库、未来章纲、未采用的规则参考或完整审稿报告塞进写作材料。\n每块应明确:入口状态、场景目标、失败代价、预期出口;POV、时间、地点和在场人物;关键角色 known/unknown/believed/operational(知道、不知道、相信、可操作信息);允许采用的短证据与来源锚点;风格指纹、上一块结尾和硬性禁令。出口或认知边界不清时先询问,不自行发明长期事实。\n\n【场景写作】\n你就是本次已选择的 CLI Worker 写手,使用当前配置完成任务,不因来源技能提到后端而再次调用其他 CLI 或切换模型。最小单位是入口、出口完整的场景块,默认一次一块,最多连续两块;不要按句子碎片化调用,也不一次性生成整章来跳过核验。\n正文应让行动、信息与因果自然呈现,保持作品的声音和 POV。角色不能使用尚未获得的信息,系统不能替主角解释完整因果;新规则、人物事实、伏笔解释和后续因果先列 proposal,等待作者决定。不要输出长篇内部思维链。\n\n【返回与验证】\n每块返回:正文、状态变化、认知变化、新提案和不确定项。若当前项目要求 writer-result/v1 等结构化格式,按其真实协议返回;没有协议则给清楚可核对的同等字段,不声称不存在的协议检查已通过。\n用当前项目实际可用的验证工具检查格式、状态、认知、正文禁用标记与授权范围;没有工具时进行明确标注的人工检查。格式错误最多修复一次;状态或知识冲突应交回作者或主智能体,不通过重复生成掩盖。对照真实输出和文件差异验证,不能仅凭写手自己的 SUCCESS 认定完成。\n\n【保存与后续】\n获得写入授权且通过核验的文本只保存为草稿,并保留实际输出位置、块标识和检查记录。不自动转为待审、锁定或关账,不更新正典、台账、当前状态与任务看板。对状态、资源、时间和认知做一次定向回归,严重冲突立即暂停。完成草稿后建议进入审校;需要修改既有正文则使用明确授权的修订流程。\n\n【报告】\n列场景块、实际输出位置、核验结果、未决提案、失败修复或作者介入记录,以及实际可确认的证据包/写作包标识、资料截止点、执行方式和降级原因。只报告能够核实的 CLI、模型和强度;不编造模型、工具结果或已发生的情节。\n`),\n },\n];\n//# sourceMappingURL=builtin-presets.js.map","import { appendFileSync, closeSync, constants, chmodSync, existsSync, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, rmSync, writeFileSync, } from 'node:fs';\nimport { join } from 'node:path';\nimport { randomUUID, createHash } from 'node:crypto';\nimport { z } from 'zod';\nimport { BUILTIN_ROLE_PRESETS } from \"../shared/builtin-presets.js\";\nimport { agentNameSchema, availableAgentName, NO_ROLE_LABEL, rolePresetInputSchema, rolePresetSchema, roleSnapshotSchema, } from \"./roles.js\";\nimport { CLI_IDS, CLI_LABELS, CLI_SHORT_NAMES, EFFORTS, active, cliOf, workerName, isRetiredCli, RETIRED_HARNESS_NOTICE, } from \"../shared/types.js\";\nconst preferenceSchema = z.object({\n cli: z.enum(CLI_IDS).optional(),\n model: z.string().min(1),\n effort: z.enum(EFFORTS),\n});\nconst dispatchBindingSchema = z.string().min(1).max(256);\nconst cleanupBlockSchema = z\n .object({\n policy: z.literal(1),\n state: z.literal('cleanup-unconfirmed'),\n})\n .strict();\nconst projectPreferenceSchema = preferenceSchema.extend({\n dispatchRole: roleSnapshotSchema.nullable().optional(),\n dispatchBinding: dispatchBindingSchema.optional(),\n});\nconst dispatchSetupSchema = z.object({\n preference: preferenceSchema,\n role: roleSnapshotSchema.nullable(),\n binding: dispatchBindingSchema,\n});\nconst conversationSetupSchema = z.object({\n policy: z.literal(1),\n parent: z.string().min(1),\n project: z.string().min(1),\n cli: z.enum(CLI_IDS),\n setup: dispatchSetupSchema,\n});\n// Read old Harness settings without exposing that retired entry as an active CLI.\nconst storedCliSchema = z.enum([...CLI_IDS, 'harness']);\nconst storedPreferenceSchema = preferenceSchema.extend({ cli: storedCliSchema.optional() });\nconst cliSettingsSchema = z.object({ enabled: z.partialRecord(storedCliSchema, z.boolean()) });\nconst enabledByDefault = () => Object.fromEntries(CLI_IDS.map((cli) => [cli, true]));\nconst workerSchema = z.object({\n id: z.uuid(),\n parentSessionId: z.string().min(1),\n project: z.string().min(1),\n title: z.string(),\n agentName: agentNameSchema.optional(),\n agentNameOrigin: z.enum(['auto', 'custom']).optional(),\n nameAliases: z.array(agentNameSchema).max(32).optional(),\n archivedAt: z.string().datetime().optional(),\n role: roleSnapshotSchema.optional(),\n preference: storedPreferenceSchema,\n mode: z.enum(['plan', 'accept-edits']),\n conversationId: z.string().optional(),\n status: z.enum(['queued', 'running', 'stopping', 'completed', 'failed', 'interrupted']),\n createdAt: z.string(),\n updatedAt: z.string(),\n runId: z.uuid(),\n jobId: z.string().optional(),\n error: z.string().optional(),\n observedModel: z.string().optional(),\n lastResult: z.string().optional(),\n});\nconst eventSchema = z.object({\n seq: z.number().int().positive(),\n runId: z.uuid(),\n time: z.string(),\n kind: z.enum(['user', 'assistant', 'tool', 'status', 'diagnostic', 'result']),\n text: z.string(),\n observedModel: z.string().optional(),\n step: z.number().optional(),\n state: z.string().optional(),\n detail: z.string().optional(),\n});\nexport function atomicJSON(path, value) {\n const temp = `${path}.${randomUUID()}.tmp`;\n try {\n writeFileSync(temp, JSON.stringify(value), { mode: 0o600, flag: 'wx' });\n renameSync(temp, path);\n }\n finally {\n if (existsSync(temp))\n rmSync(temp);\n }\n}\n/** One host owns a private store; a live second host cannot resume the same CLI session. */\nexport class WorkerStorage {\n directory;\n workers = new Map();\n events = new Map();\n token = randomUUID();\n lock;\n enabled = enabledByDefault();\n presets = [];\n /** Account epochs live outside public Worker records and event/history responses. */\n accountBinding(id) {\n z.uuid().parse(id);\n const path = join(this.directory, `${id}.account-binding.json`);\n if (!existsSync(path))\n return undefined;\n return z\n .object({ policy: z.literal(1), binding: z.string().min(1).max(256) })\n .parse(JSON.parse(readFileSync(path, 'utf8'))).binding;\n }\n bindAccount(id, binding) {\n z.uuid().parse(id);\n z.string().min(1).max(256).parse(binding);\n atomicJSON(join(this.directory, `${id}.account-binding.json`), { policy: 1, binding });\n }\n /** Private quarantine survives Host restart; absence alone means no recorded quarantine. */\n cleanupBlockState() {\n const path = join(this.directory, 'cleanup-blocked.json');\n let handle;\n let buffer;\n try {\n let entry;\n try {\n entry = lstatSync(path);\n }\n catch (error) {\n return error.code === 'ENOENT' ? 'none' : 'invalid';\n }\n if (entry.isSymbolicLink() || !entry.isFile() || entry.nlink !== 1 || entry.size > 1024)\n return 'invalid';\n handle = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const before = fstatSync(handle);\n if (!before.isFile() ||\n before.nlink !== 1 ||\n before.dev !== entry.dev ||\n before.ino !== entry.ino ||\n before.size > 1024)\n return 'invalid';\n buffer = Buffer.alloc(1025);\n let offset = 0;\n while (offset < buffer.length) {\n const size = readSync(handle, buffer, offset, buffer.length - offset, null);\n if (!size)\n break;\n offset += size;\n }\n const after = fstatSync(handle), current = lstatSync(path);\n if (offset !== before.size ||\n before.size !== after.size ||\n before.mtimeMs !== after.mtimeMs ||\n current.isSymbolicLink() ||\n current.nlink !== 1 ||\n current.dev !== before.dev ||\n current.ino !== before.ino ||\n current.size !== after.size ||\n current.mtimeMs !== after.mtimeMs)\n return 'invalid';\n cleanupBlockSchema.parse(JSON.parse(buffer.subarray(0, offset).toString('utf8')));\n return 'blocked';\n }\n catch {\n return 'invalid';\n }\n finally {\n buffer?.fill(0);\n if (handle !== undefined)\n closeSync(handle);\n }\n }\n /** No automatic clearing: only trustworthy process-exit recovery can release a quarantine. */\n blockCleanup() {\n atomicJSON(join(this.directory, 'cleanup-blocked.json'), { policy: 1, state: 'cleanup-unconfirmed' });\n }\n constructor(directory) {\n this.directory = directory;\n mkdirSync(directory, { recursive: true, mode: 0o700 });\n chmodSync(directory, 0o700);\n this.lock = join(directory, 'host.lock');\n if (existsSync(this.lock)) {\n const owner = JSON.parse(readFileSync(this.lock, 'utf8'));\n if (!Number.isSafeInteger(owner.pid) || owner.pid <= 0)\n throw new Error('Invalid store lock; inspect host.lock before recovery');\n let alive = true;\n try {\n process.kill(owner.pid, 0);\n }\n catch (error) {\n if (error.code === 'ESRCH')\n alive = false;\n else\n throw error;\n }\n if (alive)\n throw new Error('CLI Worker store is already owned by another Harness host');\n rmSync(this.lock);\n }\n writeFileSync(this.lock, JSON.stringify({ pid: process.pid, token: this.token }), {\n mode: 0o600,\n flag: 'wx',\n });\n try {\n const rolesPath = join(directory, 'role-presets.json');\n if (existsSync(rolesPath)) {\n this.presets = z\n .array(rolePresetSchema)\n .max(200)\n .parse(JSON.parse(readFileSync(rolesPath, 'utf8')));\n chmodSync(rolesPath, 0o600);\n }\n else {\n this.presets = z.array(rolePresetSchema).parse(structuredClone(BUILTIN_ROLE_PRESETS));\n atomicJSON(rolesPath, this.presets);\n }\n const settingsPath = join(directory, 'cli-settings.json');\n if (existsSync(settingsPath)) {\n const settings = cliSettingsSchema.parse(JSON.parse(readFileSync(settingsPath, 'utf8')));\n for (const cli of CLI_IDS) {\n if (settings.enabled[cli] !== undefined)\n this.enabled[cli] = settings.enabled[cli];\n }\n chmodSync(settingsPath, 0o600);\n }\n for (const file of readdirSync(directory).filter((name) => name.endsWith('.worker.json'))) {\n const worker = workerSchema.parse(JSON.parse(readFileSync(join(directory, file), 'utf8')));\n if (`${worker.id}.worker.json` !== file)\n throw new Error('Worker storage identity mismatch');\n this.workers.set(worker.id, worker);\n if (active(worker.status)) {\n worker.status = 'interrupted';\n worker.error =\n worker.preference.cli === 'harness'\n ? RETIRED_HARNESS_NOTICE\n : '上次 Harness 运行中断;可继续原会话';\n this.save(worker);\n this.append(worker, { kind: 'status', text: worker.error, state: 'interrupted' });\n }\n }\n this.migrateAutomaticNames();\n }\n catch (error) {\n this.close();\n throw error;\n }\n }\n /** Only the former CLI-default format and unnamed histories establish legacy automatic names. */\n migrateAutomaticNames() {\n const ordered = [...this.workers.values()].sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id));\n for (const worker of ordered) {\n const cli = cliOf(worker.preference);\n if (isRetiredCli(cli) || worker.agentNameOrigin === 'custom')\n continue;\n const previousName = workerName(worker);\n const stem = CLI_SHORT_NAMES[cli];\n const isNumbered = (name, prefix) => name.startsWith(`${prefix}-`) && /^[1-9]\\d*$/.test(name.slice(prefix.length + 1));\n if (worker.agentName && isNumbered(worker.agentName, stem))\n continue;\n if (worker.agentName &&\n worker.agentNameOrigin !== 'auto' &&\n !isNumbered(worker.agentName, `${CLI_LABELS[cli]}助手`))\n continue;\n // A malformed old duplicate cannot safely acquire a compatibility alias.\n if (ordered.some((other) => other.id !== worker.id &&\n other.parentSessionId === worker.parentSessionId &&\n [workerName(other), ...(other.nameAliases ?? [])].some((name) => name.toLocaleLowerCase() === previousName.toLocaleLowerCase())))\n continue;\n const migrated = {\n ...worker,\n agentName: availableAgentName(this.workers.values(), worker.parentSessionId, stem),\n agentNameOrigin: 'auto',\n nameAliases: [...new Set([...(worker.nameAliases ?? []), previousName])],\n };\n // Validate the additional compatibility data before its atomic write.\n workerSchema.parse(migrated);\n this.save(migrated);\n }\n }\n cliSettings() {\n return { enabled: { ...this.enabled } };\n }\n rolePresets() {\n return structuredClone(this.presets);\n }\n saveRolePreset(input) {\n const value = rolePresetInputSchema.parse(input);\n const previous = value.id ? this.presets.find((preset) => preset.id === value.id) : undefined;\n if (value.id && !previous)\n throw new Error('此角色预设已删除,请新建预设');\n if (value.name === NO_ROLE_LABEL ||\n this.presets.some((preset) => preset.id !== value.id && preset.name.toLocaleLowerCase() === value.name.toLocaleLowerCase()))\n throw new Error('此智能体名称已被使用,请换一个名称');\n if (!previous && this.presets.length >= 200)\n throw new Error('最多保存 200 个角色预设');\n const saved = { ...previous, ...value, id: previous?.id ?? randomUUID() };\n const next = previous\n ? this.presets.map((preset) => (preset.id === saved.id ? saved : preset))\n : [...this.presets, saved];\n atomicJSON(join(this.directory, 'role-presets.json'), next);\n this.presets = next;\n return structuredClone(saved);\n }\n deleteRolePreset(id) {\n if (!this.presets.some((preset) => preset.id === id))\n throw new Error('此角色预设已删除');\n const next = this.presets.filter((preset) => preset.id !== id);\n atomicJSON(join(this.directory, 'role-presets.json'), next);\n this.presets = next;\n }\n setCliEnabled(cli, enabled) {\n if (isRetiredCli(cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n const id = z.enum(CLI_IDS).parse(cli);\n const next = { ...this.enabled, [id]: z.boolean().parse(enabled) };\n atomicJSON(join(this.directory, 'cli-settings.json'), { enabled: next });\n this.enabled = next;\n return this.cliSettings();\n }\n projectKey(project, cli = 'antigravity') {\n z.string().min(1).parse(project);\n z.enum(CLI_IDS).parse(cli);\n return createHash('sha256')\n .update(cli === 'antigravity' ? project : JSON.stringify([project, cli]))\n .digest('hex');\n }\n readProjectPreference(project, cli) {\n const path = join(this.directory, `${this.projectKey(project, cli)}.preference.json`);\n if (!existsSync(path))\n return undefined;\n const value = projectPreferenceSchema.parse(JSON.parse(readFileSync(path, 'utf8')));\n if ((value.cli ?? 'antigravity') !== cli)\n throw new Error('项目偏好的 CLI 标识不匹配');\n return value;\n }\n preference(project, cli = 'antigravity') {\n if (isRetiredCli(cli))\n return undefined;\n const value = this.readProjectPreference(project, cli);\n return value ? preferenceSchema.parse(value) : undefined;\n }\n setPreference(project, preference) {\n if (preference.cli && isRetiredCli(preference.cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n const value = preferenceSchema.parse(preference);\n const cli = value.cli ?? 'antigravity';\n const previous = this.readProjectPreference(project, cli);\n atomicJSON(join(this.directory, `${this.projectKey(project, cli)}.preference.json`), {\n ...previous,\n ...value,\n });\n }\n dispatchSetup(project, cli) {\n if (isRetiredCli(cli))\n return undefined;\n const value = this.readProjectPreference(project, cli);\n // Missing fields are legacy/incomplete selections, never an implicit no-role choice.\n if (value?.dispatchRole === undefined || value.dispatchBinding === undefined)\n return undefined;\n return {\n preference: preferenceSchema.parse(value),\n role: value.dispatchRole,\n binding: value.dispatchBinding,\n };\n }\n setDispatchSetup(project, setup) {\n if (setup.preference.cli && isRetiredCli(setup.preference.cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n const value = dispatchSetupSchema.parse(setup);\n const cli = value.preference.cli ?? 'antigravity';\n atomicJSON(join(this.directory, `${this.projectKey(project, cli)}.preference.json`), {\n ...value.preference,\n dispatchRole: value.role,\n dispatchBinding: value.binding,\n });\n }\n conversationKey(parent, project, cli) {\n z.string().min(1).parse(parent);\n z.string().min(1).parse(project);\n z.enum(CLI_IDS).parse(cli);\n return createHash('sha256')\n .update(JSON.stringify([parent, project, cli]))\n .digest('hex');\n }\n conversationSetup(parent, project, cli) {\n if (isRetiredCli(cli))\n return undefined;\n const path = join(this.directory, `${this.conversationKey(parent, project, cli)}.conversation-setup.json`);\n if (!existsSync(path))\n return undefined;\n const value = conversationSetupSchema.parse(JSON.parse(readFileSync(path, 'utf8')));\n if (value.parent !== parent ||\n value.project !== project ||\n value.cli !== cli ||\n (value.setup.preference.cli ?? 'antigravity') !== cli)\n throw new Error('对话派遣设定的身份不匹配');\n return value.setup;\n }\n setConversationSetup(parent, project, setup) {\n if (setup.preference.cli && isRetiredCli(setup.preference.cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n const value = dispatchSetupSchema.parse(setup);\n const cli = value.preference.cli ?? 'antigravity';\n const key = this.conversationKey(parent, project, cli);\n atomicJSON(join(this.directory, `${key}.conversation-setup.json`), {\n policy: 1,\n parent,\n project,\n cli,\n setup: value,\n });\n }\n save(worker) {\n atomicJSON(join(this.directory, `${worker.id}.worker.json`), worker);\n this.workers.set(worker.id, worker);\n }\n history(id) {\n if (!this.workers.has(id))\n throw new Error('Unknown worker');\n const cached = this.events.get(id);\n if (cached)\n return cached;\n const path = join(this.directory, `${id}.events.jsonl`);\n const rows = [];\n if (existsSync(path)) {\n const raw = readFileSync(path, 'utf8');\n const lines = raw.split('\\n');\n // Only a torn final append is discarded. Earlier corruption is never silently skipped.\n const complete = lines.slice(0, -1);\n for (const line of complete) {\n const event = eventSchema.parse(JSON.parse(line));\n if (event.seq !== rows.length + 1)\n throw new Error('Event sequence corruption');\n rows.push(event);\n }\n if (!raw.endsWith('\\n')) {\n writeFileSync(path, complete.join('\\n') + (complete.length ? '\\n' : ''), { mode: 0o600 });\n }\n }\n this.events.set(id, rows);\n return rows;\n }\n append(worker, event) {\n const rows = this.history(worker.id);\n const row = { ...event, seq: rows.length + 1, runId: worker.runId, time: new Date().toISOString() };\n appendFileSync(join(this.directory, `${worker.id}.events.jsonl`), JSON.stringify(row) + '\\n', {\n mode: 0o600,\n });\n rows.push(row);\n }\n rawPath(worker) {\n return join(this.directory, `${worker.id}.${worker.runId}.raw.jsonl`);\n }\n close() {\n if (existsSync(this.lock) && JSON.parse(readFileSync(this.lock, 'utf8')).token === this.token)\n rmSync(this.lock);\n }\n}\n//# sourceMappingURL=storage.js.map","import { PassThrough } from 'node:stream';\nimport { fileURLToPath } from 'node:url';\n/** Preserve pipes while using Harness's stronger terminal descendant ownership. */\nexport async function spawnManagedAgent(backend, spec) {\n // Unit-test backends can implement only pipe spawning. The production Host\n // always provides the native terminal primitive.\n // On Windows ordinary spawning owns a native Job. ConPTY does not have that\n // owner in the pinned Host, so a terminal bridge would weaken descendant cleanup.\n if (process.platform === 'win32' || !backend.spawnTerminal)\n return backend.spawn(spec);\n spec.signal?.throwIfAborted();\n const terminal = await backend.spawnTerminal({\n argv: [process.execPath, fileURLToPath(new URL('./terminal-bridge.mjs', import.meta.url)), ...spec.argv],\n cwd: spec.cwd,\n env: { ...spec.env, ELECTRON_RUN_AS_NODE: '1' },\n rows: 24,\n cols: 240,\n terminalType: 'dumb',\n graceMs: spec.graceMs ?? 5000,\n signal: spec.signal,\n });\n const stdout = new PassThrough(), stderr = new PassThrough();\n let resolve, reject;\n const done = new Promise((yes, no) => {\n resolve = yes;\n reject = no;\n });\n void done.catch(() => undefined);\n let cleanup, exited = false, pending = '';\n const terminate = () => {\n if (!cleanup) {\n clearInterval(observe);\n cleanup = terminal.terminate();\n void cleanup.catch((error) => reject(error));\n }\n };\n // Retain PID + start identities before agy can detach a background child.\n let inspecting = false;\n const observe = setInterval(() => {\n if (inspecting || cleanup)\n return;\n inspecting = true;\n void terminal\n .inspectForeground()\n .catch((error) => {\n reject(error);\n terminate();\n })\n .finally(() => {\n inspecting = false;\n });\n }, 200);\n const abort = () => terminate();\n spec.signal?.addEventListener('abort', abort, { once: true });\n if (spec.signal?.aborted)\n terminate();\n void (async () => {\n try {\n for await (const chunk of terminal.output) {\n pending += String(chunk);\n let end;\n while ((end = pending.indexOf('\\n')) >= 0) {\n const text = pending.slice(0, end).trim();\n pending = pending.slice(end + 1);\n if (!text)\n continue;\n const frame = JSON.parse(text);\n if (frame.channel === 'stdout' || frame.channel === 'stderr') {\n if (typeof frame.bytes !== 'string')\n throw new Error('Invalid CLI bridge bytes');\n (frame.channel === 'stdout' ? stdout : stderr).write(Buffer.from(frame.bytes, 'base64'));\n }\n else if (frame.channel === 'exit') {\n exited = true;\n stdout.end();\n stderr.end();\n resolve({ exitCode: frame.exitCode, signal: frame.signal });\n }\n else if (frame.channel === 'error')\n throw new Error(frame.message);\n else\n throw new Error('Invalid CLI bridge frame');\n }\n if (pending.length > 2_097_152)\n throw new Error('CLI bridge frame too large');\n }\n if (!exited) {\n stdout.end();\n stderr.end();\n reject(new Error('CLI bridge ended before exit receipt'));\n }\n }\n catch (error) {\n stdout.destroy(error);\n stderr.destroy(error);\n reject(error);\n terminate();\n }\n })();\n void terminal.done.catch((error) => {\n stdout.destroy(error);\n stderr.destroy(error);\n reject(error);\n });\n return {\n stdin: undefined,\n stdout,\n stderr,\n control: undefined,\n collected: {},\n done,\n terminate,\n waitForExit: async () => {\n terminate();\n try {\n await cleanup;\n await terminal.done;\n return true;\n }\n finally {\n spec.signal?.removeEventListener('abort', abort);\n clearInterval(observe);\n }\n },\n };\n}\n//# sourceMappingURL=managed-agent.js.map","import { DatabaseSync } from 'node:sqlite';\nimport { statSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n// Verified against Antigravity CLI 1.2.16's embedded protobuf descriptors:\n// CortexStepGeneratorMetadata.chat_model(1) -> ChatModelMetadata.chat_start_metadata(9)\n// -> ChatStartMetadata.context_window_metadata(10) -> estimated_tokens_used(1), max_context_tokens(4).\n// This is a version-specific, optional local adapter, never a guessed model capacity.\nfunction fields(bytes) {\n let offset = 0;\n const result = new Map();\n const integer = (allowUnsafe = false) => {\n let value = 0n;\n for (let shift = 0n; shift < 70n; shift += 7n) {\n if (offset >= bytes.length)\n throw new Error('Truncated protobuf');\n const byte = bytes[offset++];\n value |= BigInt(byte & 127) << shift;\n if (byte < 128) {\n if (!allowUnsafe && value > BigInt(Number.MAX_SAFE_INTEGER))\n throw new Error('Unsafe integer');\n return Number(value);\n }\n }\n throw new Error('Invalid varint');\n };\n while (offset < bytes.length) {\n const tag = integer(), field = Math.floor(tag / 8), wire = tag & 7;\n if (!field)\n throw new Error('Invalid field');\n if (wire === 0)\n result.set(field, integer(true));\n else {\n const length = wire === 2 ? integer() : wire === 1 ? 8 : wire === 5 ? 4 : -1;\n if (length < 0 || offset + length > bytes.length)\n throw new Error('Invalid field length');\n if (wire === 2)\n result.set(field, bytes.subarray(offset, offset + length));\n offset += length;\n }\n }\n return result;\n}\nexport function decodeAgyContext(data) {\n try {\n let value = data;\n for (const key of [1, 9, 10]) {\n const nested = fields(value).get(key);\n if (!(nested instanceof Uint8Array))\n return;\n value = nested;\n }\n const context = fields(value), used = context.get(1), capacity = context.get(4);\n if (typeof used !== 'number' ||\n typeof capacity !== 'number' ||\n !Number.isSafeInteger(used) ||\n !Number.isSafeInteger(capacity) ||\n used < 0 ||\n capacity <= 0)\n return;\n return {\n contextUsed: used,\n contextCapacity: capacity,\n contextEstimated: true,\n contextSource: 'Antigravity 最近一次请求的本地上下文估算',\n };\n }\n catch {\n return undefined;\n }\n}\nexport class AgyContextReader {\n directory;\n cache = new Map();\n constructor(directory = join(homedir(), '.gemini', 'antigravity-cli', 'conversations')) {\n this.directory = directory;\n }\n read(conversationId) {\n if (!conversationId || !/^[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}$/i.test(conversationId))\n return;\n const path = join(this.directory, `${conversationId}.db`);\n const stamp = [path, `${path}-wal`]\n .map((file) => {\n try {\n const s = statSync(file);\n return `${s.size}:${s.mtimeMs}`;\n }\n catch {\n return '';\n }\n })\n .join('|');\n if (stamp === '|')\n return;\n const cached = this.cache.get(conversationId);\n if (cached?.stamp === stamp)\n return cached.value;\n let db, value;\n try {\n db = new DatabaseSync(path, { readOnly: true });\n // Verify ownership before reading only this plugin-managed conversation's metadata.\n if (!db.prepare('SELECT 1 FROM trajectory_meta WHERE cascade_id = ? LIMIT 1').get(conversationId))\n return;\n const row = db\n .prepare('SELECT CASE WHEN length(data) <= 8388608 THEN data END AS data FROM gen_metadata ORDER BY idx DESC LIMIT 1')\n .get();\n if (row?.data instanceof Uint8Array)\n value = decodeAgyContext(row.data);\n this.cache.set(conversationId, { stamp, value });\n if (this.cache.size > 128)\n this.cache.delete(this.cache.keys().next().value);\n return value;\n }\n catch {\n return undefined;\n }\n finally {\n db?.close();\n }\n }\n}\n//# sourceMappingURL=agy-context.js.map","import { closeSync, openSync, readSync, statSync } from 'node:fs';\nimport { hermesTokenUsage } from \"./hermes-adapter.js\";\nconst obj = (v) => v && typeof v === 'object' && !Array.isArray(v) ? v : {};\nconst count = (v) => typeof v === 'number' && Number.isSafeInteger(v) && v >= 0 ? v : undefined;\nfunction usage(v, scope, cacheSeparate = false) {\n const u = obj(v), input = count(u.input_tokens), output = count(u.output_tokens);\n const cacheRead = count(u.cache_read_tokens ?? u.cache_read_input_tokens ?? u.cached_input_tokens);\n const creation = count(u.cache_creation_input_tokens);\n const total = count(u.total_tokens) ??\n (input !== undefined && output !== undefined\n ? input + output + (cacheSeparate ? (cacheRead ?? 0) + (creation ?? 0) : 0)\n : undefined);\n return total === undefined || !Number.isSafeInteger(total)\n ? undefined\n : { total, input, output, cacheRead, scope };\n}\n/** Only public, observed CLI envelopes; no model-name capacity guesses. */\nexport function extractTelemetry(cli, records) {\n const result = { replies: {} };\n const mimoSteps = new Map();\n for (const record of records) {\n const v = obj(record);\n if (cli === 'antigravity') {\n const step = obj(v.step_update);\n if (v.event === 'step_update' &&\n step.step_type === 'agent_response' &&\n Number.isInteger(step.step_index)) {\n const u = usage(step.usage, 'response');\n if (u)\n result.replies[String(step.step_index)] = u;\n }\n if (v.event === 'result')\n result.usage = usage(obj(v.result).usage, 'session') ?? result.usage;\n }\n else if (cli === 'codex' && v.type === 'turn.completed') {\n // CLI's receipt does not reliably distinguish resumed-thread vs turn counters.\n result.usage = usage(v.usage, 'reported') ?? result.usage;\n result.finalReply = result.usage;\n }\n else if (cli === 'hermes' && v.type === 'result') {\n result.usage = hermesTokenUsage(v.tokens) ?? result.usage;\n result.finalReply = result.usage;\n }\n else if (cli === 'claude' && v.type === 'result') {\n result.usage = usage(v.usage, 'run', true) ?? result.usage;\n result.finalReply = result.usage;\n const models = Object.values(obj(v.modelUsage));\n if (models.length === 1)\n result.contextCapacity = count(obj(models[0]).contextWindow) || undefined;\n }\n else if (cli === 'mimo' && v.type === 'step_finish') {\n const part = obj(v.part), t = obj(part.tokens);\n const u = usage({\n total_tokens: t.total,\n input_tokens: t.input,\n output_tokens: t.output,\n cache_read_tokens: obj(t.cache).read,\n }, 'response');\n if (u && typeof part.id === 'string')\n mimoSteps.set(part.id, u);\n }\n // Only explicit occupancy fields count as context, never cumulative input/total usage.\n const context = obj(v.context_usage);\n const used = count(context.used_tokens), capacity = count(context.max_tokens);\n if (used !== undefined)\n result.contextUsed = used;\n if (capacity !== undefined && capacity > 0)\n result.contextCapacity = capacity;\n }\n if (mimoSteps.size) {\n result.usage = { total: [...mimoSteps.values()].reduce((n, u) => n + u.total, 0), scope: 'run' };\n result.finalReply = result.usage;\n }\n return result;\n}\n/** Read-only projection also recovers telemetry from pre-feature private raw logs.\n * Incremental byte reads keep live polling O(new bytes), with bounded cache/line memory.\n * Malformed/torn records affect telemetry only, never conversation restoration.\n */\nexport class TelemetryReader {\n cache = new Map();\n read(path, cli) {\n let stat;\n try {\n stat = statSync(path);\n }\n catch {\n return { replies: {} };\n }\n let entry = this.cache.get(path);\n if (entry && entry.size === stat.size && entry.mtime === stat.mtimeMs)\n return entry.result;\n if (!entry || stat.size < entry.size || (stat.size === entry.size && stat.mtimeMs !== entry.mtime))\n entry = { size: 0, mtime: 0, records: [], pending: '', result: { replies: {} } };\n // Bound unexpected raw output. A missing meter must never break a conversation.\n if (stat.size > 64 * 1024 * 1024)\n return { replies: {} };\n let fd;\n try {\n fd = openSync(path, 'r');\n const buf = Buffer.alloc(stat.size - entry.size);\n const n = readSync(fd, buf, 0, buf.length, entry.size);\n const lines = (entry.pending + buf.subarray(0, n).toString('utf8')).split('\\n');\n entry.pending = lines.pop() ?? '';\n for (const line of lines) {\n try {\n const v = JSON.parse(line), step = obj(v.step_update);\n // Retain only metric envelopes, not conversation text/tool output.\n if (v.event === 'step_update' && step.usage)\n entry.records.push({\n event: v.event,\n step_update: { step_type: step.step_type, step_index: step.step_index, usage: step.usage },\n });\n else if (v.event === 'result')\n entry.records.push({ event: v.event, result: { usage: obj(v.result).usage } });\n else if (v.type === 'result' || v.type === 'turn.completed')\n entry.records.push({ type: v.type, usage: v.usage, modelUsage: v.modelUsage, tokens: v.tokens });\n else if (v.type === 'step_finish')\n entry.records.push({ type: v.type, part: v.part });\n if (v.context_usage)\n entry.records.push({ context_usage: v.context_usage });\n }\n catch {\n /* Ignore diagnostics and incomplete JSON. */\n }\n }\n if (entry.records.length > 10000)\n return { replies: {} };\n entry.size += n;\n entry.mtime = stat.mtimeMs;\n entry.result = extractTelemetry(cli, entry.records);\n this.cache.delete(path);\n this.cache.set(path, entry);\n if (this.cache.size > 128)\n this.cache.delete(this.cache.keys().next().value);\n return entry.result;\n }\n catch {\n return { replies: {} };\n }\n finally {\n if (fd !== undefined)\n closeSync(fd);\n }\n }\n}\nexport function attachTelemetry(rows, runId, telemetry) {\n const replies = rows.filter((row) => row.kind === 'assistant' && row.id.startsWith(`${runId}:`));\n for (const row of replies) {\n const step = row.id.split(':')[1] === 'assistant' ? row.id.split(':')[2] : undefined;\n if (step !== undefined && telemetry.replies[step])\n row.usage = telemetry.replies[step];\n }\n const last = replies.at(-1);\n if (last && !last.usage)\n last.usage = telemetry.finalReply;\n}\n//# sourceMappingURL=telemetry.js.map","import { readClaudeOwnRoute, prepareClaudeWorkerLaunch } from \"./claude-own-route.js\";\nimport { extendedLaunch, isExtendedCli } from \"./extended-adapters.js\";\nimport { appendFileSync } from 'node:fs';\nimport { randomUUID } from 'node:crypto';\nimport { active, CLI_LABELS, CLI_SHORT_NAMES, LEGACY_ACCOUNT_RECORD_NOTICE, isRetiredCli, RETIRED_HARNESS_NOTICE, cliOf, workerName, foldEvents, } from \"../shared/types.js\";\nimport { agentNameSchema, availableAgentName, promptForWorker, roleSnapshotSchema, workerTitleSchema, } from \"./roles.js\";\nimport { protocolFor, resolveCliExecutable, workerArguments, captureCatalogMetadata } from \"./adapters.js\";\nimport { spawnManagedAgent } from \"./managed-agent.js\";\nimport { projectDirectory, ProcessCleanupUnconfirmedError, } from \"./process.js\";\nimport { join } from 'node:path';\nimport { AgyContextReader } from \"./agy-context.js\";\nimport { attachTelemetry, TelemetryReader } from \"./telemetry.js\";\nimport { authorizeSelection, ACCOUNT_CHANGED } from \"./authorized-catalog.js\";\nimport { readCliAccountBinding } from \"./cli-account-binding.js\";\nimport { assertFirstPartyConfiguration, firstPartyEnvironment } from \"./first-party-models.js\";\nexport class WorkerRuntime {\n storage;\n backend;\n config;\n agyContextReader = new AgyContextReader();\n telemetryReader = new TelemetryReader();\n tasks = new Map();\n queue = [];\n running = new Set();\n listeners = new Set();\n disposed = false;\n blocked;\n revision = 0;\n constructor(storage, backend, config) {\n this.storage = storage;\n this.backend = backend;\n this.config = config;\n const cleanup = storage.cleanupBlockState();\n if (cleanup !== 'none')\n this.blocked =\n cleanup === 'invalid'\n ? '进程清理隔离记录无法核验,已暂停任务和账号操作'\n : '无法确认 CLI 进程已清理,已暂停后续派遣,请先核查进程退出状态';\n }\n subscribe(callback) {\n this.listeners.add(callback);\n return () => {\n this.listeners.delete(callback);\n };\n }\n changed() {\n this.revision++;\n for (const callback of this.listeners)\n callback();\n }\n assertCliEnabled(cli) {\n if (this.disposed)\n throw new Error('插件正在关闭');\n if (this.blocked)\n throw new Error(this.blocked);\n if (isRetiredCli(cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n if (!this.storage.cliSettings().enabled[cli])\n throw new Error(`${CLI_LABELS[cli]} 已关闭,请先在 CLI Worker 设置中开启`);\n }\n blockOnCleanup(error) {\n this.markCleanupBlocked(error);\n this.drain();\n }\n markCleanupBlocked(error) {\n this.blocked = `无法确认 CLI 进程已清理,已暂停后续派遣:${error instanceof Error ? error.message : String(error)}`;\n try {\n // The private marker contains no CLI output, paths, identities or credentials.\n this.storage.blockCleanup();\n }\n catch {\n // Keep this Host closed even when its storage cannot record the quarantine.\n this.blocked += ';清理隔离记录保存失败';\n }\n }\n setCliEnabled(cli, enabled) {\n if (isRetiredCli(cli))\n throw new Error(RETIRED_HARNESS_NOTICE);\n if (this.disposed)\n throw new Error('插件正在关闭');\n if (!enabled)\n this.assertAccountIdle(cli);\n const settings = this.storage.setCliEnabled(cli, enabled);\n this.changed();\n return settings;\n }\n /** Account mutation must also respect a prior unconfirmed process cleanup. */\n assertAccountIdle(cli) {\n if (this.disposed)\n throw new Error('插件正在关闭');\n if (this.blocked)\n throw new Error(this.blocked);\n if ([...this.storage.workers.values()].some((worker) => active(worker.status) && cliOf(worker.preference) === cli))\n throw new Error('此 CLI 还有运行或排队中的任务,请等待结束后再修改此 CLI 设置或管理账号');\n }\n get(parent, id) {\n const worker = this.storage.workers.get(id);\n if (!worker || worker.parentSessionId !== parent)\n throw new Error('Worker does not belong to this conversation');\n if (worker.archivedAt)\n throw new Error('此任务已删除,请先恢复');\n return worker;\n }\n /** Exact names are scoped to the owning parent; never select a partial or cross-session match. */\n resolveWorker(parent, id, name) {\n if (!id && !name)\n throw new Error('请指定 worker_id 或 worker_name');\n const normalized = name === undefined ? undefined : agentNameSchema.parse(name);\n if (id) {\n const worker = this.get(parent, id);\n if (normalized && !this.matchesName(worker, normalized))\n throw new Error('worker_id 与 worker_name 不匹配');\n return worker;\n }\n const matches = [...this.storage.workers.values()].filter((worker) => worker.parentSessionId === parent && !worker.archivedAt && this.matchesName(worker, normalized));\n if (matches.length !== 1)\n throw new Error(matches.length\n ? '智能体名称不唯一,请使用 worker_id'\n : '当前对话中没有此名称的智能体,请检查名称或使用 worker_id');\n return matches[0];\n }\n matchesName(worker, name) {\n return workerName(worker) === name || (worker.nameAliases ?? []).includes(name);\n }\n checkAgentName(parent, name, excludingId) {\n const clean = agentNameSchema.parse(name);\n if ([...this.storage.workers.values()].some((worker) => worker.parentSessionId === parent &&\n worker.id !== excludingId &&\n [workerName(worker), ...(worker.nameAliases ?? [])].some((name) => name.toLocaleLowerCase() === clean.toLocaleLowerCase())))\n throw new Error('当前对话已有同名智能体,请换一个名称或续用已有智能体');\n return clean;\n }\n renameWorker(parent, id, name) {\n if (this.disposed)\n throw new Error('CLI Worker is shutting down');\n const worker = this.get(parent, id);\n const agentName = this.checkAgentName(parent, name, id);\n // Publish the new name only after persistence succeeds. Keep a running task's\n // shared worker reference in sync so its next process event cannot revert it.\n this.storage.save({ ...worker, agentName, agentNameOrigin: 'custom' });\n worker.agentName = agentName;\n worker.agentNameOrigin = 'custom';\n this.storage.workers.set(id, worker);\n this.changed();\n }\n renameWorkerTitle(parent, id, title) {\n if (this.disposed)\n throw new Error('CLI Worker is shutting down');\n const worker = this.get(parent, id);\n const clean = workerTitleSchema.parse(title);\n this.storage.save({ ...worker, title: clean });\n worker.title = clean;\n this.storage.workers.set(id, worker);\n this.changed();\n }\n /** Management cannot hide an in-flight task or a process whose cleanup is unresolved. */\n assertManagedIdle(worker) {\n if (this.disposed)\n throw new Error('CLI Worker is shutting down');\n if (this.blocked)\n throw new Error(this.blocked);\n if (active(worker.status) || this.tasks.has(worker.id))\n throw new Error('请等待任务结束并完成进程清理后再管理此任务');\n }\n assertLegacyRestart(parent, id) {\n const worker = this.get(parent, id);\n this.assertManagedIdle(worker);\n this.assertCliEnabled(cliOf(worker.preference));\n if (!worker.conversationId || this.storage.accountBinding(id))\n throw new Error('只有缺少账号记录的历史任务可通过此操作新建对话');\n return worker;\n }\n deleteWorker(parent, id) {\n const worker = this.get(parent, id);\n this.assertManagedIdle(worker);\n this.storage.save({ ...worker, archivedAt: new Date().toISOString() });\n this.changed();\n }\n restoreWorker(parent, id) {\n const worker = this.storage.workers.get(id);\n if (!worker || worker.parentSessionId !== parent)\n throw new Error('Worker does not belong to this conversation');\n this.assertManagedIdle(worker);\n if (!worker.archivedAt)\n throw new Error('此任务尚未删除');\n const restored = { ...worker };\n delete restored.archivedAt;\n this.storage.save(restored);\n this.changed();\n }\n snapshot(parent, selected) {\n const owned = [...this.storage.workers.values()]\n .filter((w) => w.parentSessionId === parent)\n .sort((a, b) => a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id));\n const workers = owned.filter((worker) => !worker.archivedAt);\n const archivedWorkers = owned.filter((worker) => !!worker.archivedAt);\n const selectedWorker = selected ? this.storage.workers.get(selected) : undefined;\n if (selected && (!selectedWorker || selectedWorker.parentSessionId !== parent))\n throw new Error('Worker does not belong to this conversation');\n const worker = selectedWorker?.archivedAt ? undefined : selectedWorker;\n const timeline = worker ? this.timeline(worker) : [];\n const telemetry = worker ? this.runTelemetry(worker, worker.runId) : undefined;\n const context = worker && cliOf(worker.preference) === 'antigravity'\n ? this.agyContextReader.read(worker.conversationId)\n : undefined;\n return {\n telemetry: telemetry || context\n ? {\n usage: telemetry?.usage,\n contextUsed: telemetry?.contextUsed,\n contextCapacity: telemetry?.contextCapacity,\n ...context,\n }\n : undefined,\n workers,\n archivedWorkers,\n selected: worker,\n resumeBlockedReason: worker?.conversationId && !this.storage.accountBinding(worker.id)\n ? LEGACY_ACCOUNT_RECORD_NOTICE\n : undefined,\n timeline: timeline.slice(-this.config.maxTimelineItems),\n revision: this.revision,\n truncated: timeline.length > this.config.maxTimelineItems,\n };\n }\n timeline(worker) {\n const rows = foldEvents(this.storage.history(worker.id), active(worker.status) ? undefined : { runId: worker.runId, status: worker.status });\n for (const runId of new Set(rows.map((row) => row.id.split(':')[0])))\n attachTelemetry(rows, runId, this.runTelemetry(worker, runId));\n return rows;\n }\n runTelemetry(worker, runId) {\n return this.telemetryReader.read(join(this.storage.directory, `${worker.id}.${runId}.raw.jsonl`), cliOf(worker.preference));\n }\n history(parent, workerId, anchor, direction) {\n const worker = this.get(parent, workerId);\n if (direction !== 'before' && direction !== 'after')\n throw new Error('Invalid history direction');\n if (!anchor || anchor.length > 256)\n throw new Error('缺少有效的历史记录位置,请返回实时记录');\n const timeline = this.timeline(worker);\n const index = timeline.findIndex((item) => item.id === anchor);\n if (index < 0)\n throw new Error('历史记录位置已不可用,请返回实时记录后重试');\n // Row identity remains stable when later events append or a streamed step grows.\n const end = direction === 'before' ? index : Math.min(timeline.length, index + 201);\n const start = direction === 'before' ? Math.max(0, end - 200) : index + 1;\n return {\n workerId,\n items: timeline.slice(start, end),\n start,\n end,\n total: timeline.length,\n hasOlder: start > 0,\n hasNewer: end < timeline.length,\n };\n }\n configureWorker(parent, id, preference) {\n if (this.disposed)\n throw new Error('CLI Worker is shutting down');\n const worker = this.get(parent, id);\n if (isRetiredCli(cliOf(worker.preference)))\n throw new Error(RETIRED_HARNESS_NOTICE);\n if (active(worker.status))\n throw new Error('请等待本轮结束后再修改模型与强度');\n if (cliOf(worker.preference) !== cliOf(preference))\n throw new Error('已有会话不能切换 CLI');\n this.assertCliEnabled(cliOf(preference));\n const updated = { ...worker, preference: { ...preference } };\n this.storage.save(updated);\n this.changed();\n return updated;\n }\n submit(parent, project, title, prompt, preference, mode, previousId, identity, authorizedBinding) {\n if (this.disposed)\n throw new Error('CLI Worker is shutting down');\n if (this.blocked)\n throw new Error(this.blocked);\n if (!prompt.trim() || prompt.length > 100_000)\n throw new Error('Task must contain 1–100000 characters');\n const canonical = projectDirectory(project);\n const previous = previousId ? this.get(parent, previousId) : undefined;\n const effective = previous?.preference ?? preference;\n this.assertCliEnabled(cliOf(effective));\n if (previous && active(previous.status))\n throw new Error('This CLI conversation already has a running or queued turn');\n if (previous && !previous.conversationId)\n throw new Error('No CLI conversation_id was received; start a new worker');\n if (previous && !this.storage.accountBinding(previous.id))\n throw new Error(LEGACY_ACCOUNT_RECORD_NOTICE);\n if (previous && previous.project !== canonical)\n throw new Error('Cannot resume a worker in another workspace');\n if (cliOf(effective) === 'kimi' && (previous?.mode ?? mode) === 'plan')\n throw new Error('Kimi 非交互模式不支持只读派遣');\n const now = new Date().toISOString();\n const worker = previous ?? {\n id: randomUUID(),\n parentSessionId: parent,\n project: canonical,\n title: title.slice(0, 160),\n agentName: identity?.agentName\n ? this.checkAgentName(parent, identity.agentName)\n : availableAgentName(this.storage.workers.values(), parent, CLI_SHORT_NAMES[cliOf(preference)]),\n agentNameOrigin: identity?.agentName ? 'custom' : 'auto',\n role: identity?.role ? roleSnapshotSchema.parse(structuredClone(identity.role)) : undefined,\n preference: { ...preference },\n mode,\n createdAt: now,\n updatedAt: now,\n runId: randomUUID(),\n status: 'queued',\n };\n worker.runId = randomUUID();\n worker.status = 'queued';\n worker.error = undefined;\n worker.lastResult = undefined;\n worker.observedModel = undefined;\n worker.updatedAt = now;\n worker.jobId = undefined;\n this.storage.save(worker);\n this.storage.append(worker, { kind: 'user', text: prompt });\n this.storage.append(worker, { kind: 'status', text: 'queued', state: 'queued' });\n let settle;\n const done = new Promise((resolve) => {\n settle = resolve;\n });\n const controller = new AbortController();\n // Start the own-account read at admission, before this task waits in the queue.\n const admission = authorizedBinding\n ? Promise.resolve(authorizedBinding)\n : readCliAccountBinding(cliOf(effective), this.backend, this.config, canonical, controller.signal);\n void admission.catch((error) => {\n if (error instanceof ProcessCleanupUnconfirmedError) {\n this.markCleanupBlocked(error);\n this.drain();\n }\n });\n const task = {\n worker,\n prompt: promptForWorker(worker, prompt),\n controller,\n done,\n settle,\n admission,\n };\n this.tasks.set(worker.id, task);\n this.queue.push(task);\n this.changed();\n queueMicrotask(() => this.drain());\n return {\n worker,\n done,\n cancel: () => {\n void this.stop(parent, worker.id);\n },\n };\n }\n attachJob(worker, jobId) {\n worker.jobId = jobId;\n this.storage.save(worker);\n this.changed();\n }\n stop(parent, id) {\n const worker = this.get(parent, id);\n const task = this.tasks.get(id);\n if (!task)\n return Promise.resolve(structuredClone(worker));\n if (worker.status !== 'stopping') {\n worker.status = 'stopping';\n this.storage.save(worker);\n task.controller.abort(new Error('用户已停止任务'));\n this.changed();\n if (!this.running.has(task)) {\n this.queue = this.queue.filter((t) => t !== task);\n void this.finishQueued(task, 'interrupted', '用户已取消排队任务');\n }\n }\n return task.done;\n }\n /** A queued task may already own a native account-query process. */\n async finishQueued(task, status, reason) {\n task.controller.abort(new Error(reason));\n try {\n await task.admission;\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.markCleanupBlocked(error);\n }\n this.finish(task, this.blocked ? 'failed' : status, this.blocked ?? reason);\n }\n drain() {\n if (this.disposed)\n return;\n if (this.blocked) {\n const queued = this.queue.splice(0);\n for (const task of queued) {\n task.worker.status = 'stopping';\n void this.finishQueued(task, 'failed', this.blocked);\n }\n return;\n }\n for (const task of [...this.queue]) {\n if (this.running.size >= this.config.maxConcurrent)\n break;\n const conflicts = (other) => other.worker.project === task.worker.project &&\n (other.worker.mode === 'accept-edits' || task.worker.mode === 'accept-edits');\n if ([...this.running].some(conflicts) || this.queue.slice(0, this.queue.indexOf(task)).some(conflicts))\n continue;\n this.queue.splice(this.queue.indexOf(task), 1);\n this.running.add(task);\n void this.run(task).catch((error) => {\n this.finish(task, 'failed', String(error));\n });\n }\n }\n finish(task, status, error) {\n const worker = task.worker;\n worker.status = status;\n worker.error = error;\n worker.updatedAt = new Date().toISOString();\n try {\n this.storage.save(worker);\n this.storage.append(worker, { kind: 'status', text: error ?? status, state: status });\n }\n catch (error) {\n worker.status = 'failed';\n worker.error = `状态持久化失败:${String(error)}`;\n this.blocked = worker.error;\n }\n finally {\n this.tasks.delete(worker.id);\n this.running.delete(task);\n this.changed();\n // A later followup mutates the live worker. Completion consumers must retain\n // the exact outcome of this run, including its runId and response.\n task.settle(structuredClone(worker));\n this.drain();\n }\n }\n async run(task) {\n const { worker, controller } = task;\n let handle;\n let readers = [];\n let stderr = '';\n let totalBytes = 0;\n const timeout = setTimeout(() => controller.abort(new Error('任务超时')), this.config.timeoutMs);\n const expectedConversation = worker.conversationId;\n const protocol = protocolFor(cliOf(worker.preference), (event) => {\n if (event.observedModel) {\n worker.observedModel = event.observedModel;\n this.storage.save(worker);\n }\n this.storage.append(worker, event);\n this.changed();\n }, (id) => {\n if (expectedConversation && id !== expectedConversation)\n throw new Error('Resume conversation_id does not match the requested conversation');\n worker.conversationId = id;\n this.storage.save(worker);\n }, this.config.maxLineBytes, worker.preference.model);\n let failure;\n let release;\n let quiescent = false;\n try {\n const admitted = await task.admission;\n controller.signal.throwIfAborted();\n const previousBinding = this.storage.accountBinding(worker.id);\n if (previousBinding && previousBinding !== admitted)\n throw new Error(ACCOUNT_CHANGED);\n const { binding, preference: authorizedPreference } = await authorizeSelection(worker.preference, this.backend, this.config, worker.project, controller.signal, admitted);\n if (authorizedPreference.model !== worker.preference.model)\n throw new Error('模型与思考强度不匹配,请重新选择');\n controller.signal.throwIfAborted();\n this.assertCliEnabled(cliOf(worker.preference));\n const executable = await resolveCliExecutable(cliOf(worker.preference), this.backend, this.config, controller.signal);\n controller.signal.throwIfAborted();\n await assertFirstPartyConfiguration(cliOf(worker.preference), worker.project, controller.signal);\n worker.status = 'running';\n this.storage.save(worker);\n this.changed();\n const selectedClaudeRoute = cliOf(worker.preference) === 'claude'\n ? await readClaudeOwnRoute(worker.project, controller.signal)\n : undefined;\n // Bind the exact prepared snapshot as well as the current source. A -> B -> A\n // configuration changes must not authorize launching B under A's admission.\n if (selectedClaudeRoute &&\n binding !==\n (await readCliAccountBinding('claude', this.backend, this.config, worker.project, controller.signal, selectedClaudeRoute)))\n throw new Error(ACCOUNT_CHANGED);\n const launch = isExtendedCli(cliOf(worker.preference))\n ? await extendedLaunch(cliOf(worker.preference), executable, worker.project, worker.preference, worker.mode, task.prompt, join(this.storage.directory, 'native', worker.id), this.config, expectedConversation, (argv, env) => captureCatalogMetadata(this.backend, this.config, argv, worker.project, controller.signal, env), { backend: this.backend, signal: controller.signal, graceMs: this.config.graceMs })\n : cliOf(worker.preference) === 'claude'\n ? await prepareClaudeWorkerLaunch(selectedClaudeRoute, workerArguments(executable, worker.project, worker.preference, worker.mode, task.prompt, this.config.timeoutMs, expectedConversation), this.storage.directory, controller.signal)\n : {\n env: firstPartyEnvironment(cliOf(worker.preference)),\n argv: workerArguments(executable, worker.project, worker.preference, worker.mode, task.prompt, this.config.timeoutMs, expectedConversation),\n };\n release = 'cleanup' in launch ? launch.cleanup : undefined;\n controller.signal.throwIfAborted();\n if (binding !==\n (await readCliAccountBinding(cliOf(worker.preference), this.backend, this.config, worker.project, controller.signal)))\n throw new Error(ACCOUNT_CHANGED);\n controller.signal.throwIfAborted();\n if ('activate' in launch && typeof launch.activate === 'function')\n await launch.activate();\n controller.signal.throwIfAborted();\n this.storage.bindAccount(worker.id, binding);\n handle = await spawnManagedAgent(this.backend, {\n argv: launch.argv,\n env: 'env' in launch ? launch.env : undefined,\n cwd: worker.project,\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: this.config.graceMs,\n signal: controller.signal,\n });\n // Observe spawn rejection immediately even while draining protocol streams.\n void handle.done.catch(() => undefined);\n const capture = async (stream, isError) => {\n if (!stream)\n throw new Error('CLI pipe unavailable');\n for await (const chunk of stream) {\n totalBytes += Buffer.byteLength(chunk);\n if (totalBytes > this.config.maxRunBytes)\n throw new Error('CLI output exceeded the configured per-run limit');\n appendFileSync(this.storage.rawPath(worker) + (isError ? '.stderr' : ''), chunk, { mode: 0o600 });\n if (isError)\n stderr = (stderr + String(chunk)).slice(-8192);\n else\n protocol.feed(chunk);\n }\n };\n readers = [capture(handle.stdout, false), capture(handle.stderr, true)];\n await Promise.all(readers);\n const outcome = await handle.done;\n controller.signal.throwIfAborted();\n protocol.end();\n if (outcome.exitCode !== 0)\n throw new Error(`CLI exited with ${outcome.exitCode}: ${stderr || protocol.result?.response || 'no diagnostic'}`);\n if (!protocol.result)\n throw new Error('CLI exited without a final result');\n if (protocol.result.status !== 'SUCCESS')\n throw new Error(`CLI ${protocol.result.status}: ${protocol.result.error || protocol.result.response || stderr || '请检查 CLI 认证及模型/强度兼容性'}`);\n worker.lastResult = protocol.result.response;\n }\n catch (error) {\n failure = error;\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.markCleanupBlocked(error);\n }\n finally {\n clearTimeout(timeout);\n if (handle) {\n handle.terminate();\n try {\n if (!(await handle.waitForExit()))\n throw new Error('CLI cleanup did not reach quiescence');\n quiescent = true;\n }\n catch (error) {\n failure = error;\n this.markCleanupBlocked(error);\n }\n await Promise.allSettled([...readers, handle.done]);\n }\n }\n try {\n if ((!handle || quiescent) && !this.blocked)\n await release?.();\n }\n catch (error) {\n failure ??= error;\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.markCleanupBlocked(error);\n }\n if (stderr.trim())\n this.storage.append(worker, { kind: 'diagnostic', text: 'CLI 诊断', detail: stderr });\n const error = this.blocked ??\n (controller.signal.aborted ? String(controller.signal.reason) : failure ? String(failure) : undefined);\n this.finish(task, this.blocked\n ? 'failed'\n : failure || controller.signal.aborted\n ? controller.signal.aborted\n ? 'interrupted'\n : 'failed'\n : 'completed', error);\n }\n async close() {\n if (this.disposed)\n return;\n this.disposed = true;\n const tasks = [...this.tasks.values()];\n await Promise.all(tasks.map((task) => this.stop(task.worker.parentSessionId, task.worker.id)));\n this.listeners.clear();\n this.storage.close();\n }\n}\n//# sourceMappingURL=runtime.js.map","import { chmod, lstat, mkdir, open, realpath } from 'node:fs/promises';\nimport { homedir, platform, userInfo } from 'node:os';\nimport { constants } from 'node:fs';\nimport { createHash, createDecipheriv } from 'node:crypto';\nimport { join } from 'node:path';\nimport { StringDecoder } from 'node:string_decoder';\nimport { stripVTControlCharacters } from 'node:util';\nimport { fileURLToPath } from 'node:url';\nimport { accountEmail, localTokenExpired } from \"./account-identity.js\";\nimport { readZCodePersonalIdentity, zcodeAuthDirectory, zcodeEnvironment } from \"./zcode-adapter.js\";\nimport { assertGrokNativeEnvironment, selectGrokOwnAccount } from \"./grok-models.js\";\n/** Safe to show in the UI; never constructed from native CLI output. */\nexport class ZCodeAccountCapabilityError extends Error {\n}\n// Set umask in a dedicated child, never in the shared Harness Host process.\nconst privateArgv = (argv) => [\n process.execPath,\n fileURLToPath(new URL('./private-launch.mjs', import.meta.url)),\n ...argv,\n];\nexport function zcodeGrokInstruction(cli, action) {\n if (cli === 'zcode') {\n if (action === 'login')\n return '按当前 ZCode 原生能力完成授权;终端会注明使用 Z.AI 或 BigModel。此账号供本插件的 ZCode 任务使用。';\n if (action === 'logout')\n return '此操作会退出该独立配置中的 Z.AI 和 BigModel Coding Plan 账号。';\n return '在 ZCode 原生终端输入 /login 或 /logout 管理账号。';\n }\n if (action === 'login')\n return '按 Grok 原生提示完成浏览器授权;使用 Grok 本机账号,插件任务读取同一账号。';\n if (action === 'logout')\n return '按 Grok 原生流程退出本机账号;其他使用该 Grok 账号的终端也将受到影响。';\n return '在 Grok 原生终端管理账号。';\n}\nfunction storageRoot(config, home) {\n return config.stateDirectory ?? join(process.env.DSH_HOME ?? join(home, '.dsh'), 'cliworker-now');\n}\nconst record = (value) => !!value && typeof value === 'object' && !Array.isArray(value);\nconst nonempty = (value) => typeof value === 'string' && !!value.trim();\n/** ZCode 0.16.9 native AES-GCM format. Plaintext never leaves this projection. */\nexport function projectZCodeIdentity(raw, secret) {\n if (!record(raw))\n throw new Error('Invalid account metadata');\n const key = createHash('sha256').update(secret).digest();\n const decode = (value) => {\n if (!nonempty(value))\n return '';\n if (!value.startsWith('enc:v1:'))\n return value;\n const parts = value.slice(7).split('.');\n if (parts.length !== 3 || parts.some((part) => !/^[A-Za-z0-9_-]+$/.test(part)))\n throw new Error('Invalid encrypted account metadata');\n const [iv, tag, encrypted] = parts.map((part) => Buffer.from(part, 'base64url'));\n if (iv.length !== 12 || tag.length !== 16)\n throw new Error('Invalid account cipher');\n const cipher = createDecipheriv('aes-256-gcm', key, iv);\n cipher.setAuthTag(tag);\n const plain = Buffer.concat([cipher.update(encrypted), cipher.final()]);\n try {\n return plain.toString('utf8');\n }\n finally {\n plain.fill(0);\n }\n };\n try {\n const provider = decode(raw['oauth:active_provider']).trim();\n const userInfo = (family) => {\n try {\n const info = JSON.parse(decode(raw[`oauth:${family}:user_info`]));\n return record(info) ? info : undefined;\n }\n catch {\n return undefined;\n }\n };\n const label = (info) => {\n const profile = record(info?.rawProfile) ? info.rawProfile : undefined;\n const email = accountEmail(profile?.email) || accountEmail(info?.email) || accountEmail(info?.username);\n const name = info?.displayName;\n const display = typeof name === 'string' && name.length <= 80 && !/[\\p{C}<>]|(?:Bearer|sk-|enc:v1:)/iu.test(name)\n ? name.trim()\n : undefined;\n return email || display || undefined;\n };\n let bound = false;\n let apiBinding = false;\n for (const family of ['bigmodel', 'zai']) {\n const nativeProvider = `account:${family}-individual-coding-plan`;\n const identity = decode(raw[`account-provider:${nativeProvider}:identity`]).trim();\n if (!identity)\n continue;\n const apiKey = decode(raw[`account-provider:coding-plan:${nativeProvider}:account:${encodeURIComponent(identity)}:api-key`]).trim();\n if (!apiKey)\n continue;\n bound = true;\n // Native API setup also persists a binding, using a fingerprint identity.\n // It remains API configuration rather than an OAuth login.\n if (/^key-[a-f0-9]{24}$/.test(identity)) {\n apiBinding ||= identity === `key-${createHash('sha256').update(apiKey).digest('hex').slice(0, 24)}`;\n continue;\n }\n const info = userInfo(family);\n const profile = record(info?.rawProfile) ? info.rawProfile : undefined;\n const userIds = (family === 'zai' ? [info?.user_id] : [info?.id, profile?.user_id]).filter((id) => id !== undefined);\n if (provider === family &&\n userIds.length &&\n userIds.every((id) => nonempty(id) && id.trim() === identity)) {\n // Native login saves these together; native logout removes both binding\n // entries. The Worker uses this key even after its OAuth access expires.\n return {\n state: 'authenticated',\n authMethod: 'oauth',\n verification: 'local',\n accountLabel: label(info),\n summary: '已登录 ZCode',\n };\n }\n }\n if (bound)\n return {\n state: 'configured',\n verification: 'local',\n ...(apiBinding ? { authMethod: 'api' } : {}),\n summary: apiBinding ? '已配置 ZCode API' : '已配置 ZCode 账号',\n };\n if (!provider &&\n Object.keys(raw).some((name) => {\n const match = /^account-provider:(.+):identity$/.exec(name);\n return (match &&\n !['account:bigmodel-individual-coding-plan', 'account:zai-individual-coding-plan'].includes(match[1]) &&\n nonempty(raw[name]));\n }))\n return { state: 'unknown', verification: 'local', summary: '账号类型未知' };\n if (provider !== 'bigmodel' && provider !== 'zai')\n return provider\n ? { state: 'unknown', verification: 'local', summary: '登录服务商未知' }\n : { state: 'unconfigured', verification: 'local', summary: '尚未登录 ZCode' };\n const access = decode(raw[`oauth:${provider}:access_token`]);\n const refresh = decode(raw[`oauth:${provider}:refresh_token`]);\n if (!access && !refresh)\n return { state: 'unauthenticated', verification: 'local', summary: '本地登录凭据已清除' };\n if (localTokenExpired(access))\n return {\n state: 'unauthenticated',\n verification: 'local',\n authMethod: 'oauth',\n summary: '登录已过期,请重新登录',\n };\n return {\n state: 'configured',\n authMethod: 'oauth',\n verification: 'local',\n accountLabel: label(userInfo(provider)),\n summary: access ? '已配置 ZCode OAuth' : '已保存 ZCode 续期凭据',\n };\n }\n finally {\n key.fill(0);\n }\n}\nexport function projectGrokIdentity(raw, now = Date.now()) {\n if (!record(raw))\n throw new Error('Invalid account metadata');\n const account = selectGrokOwnAccount(raw, now);\n if (account && (account.active || account.refresh)) {\n return {\n state: 'authenticated',\n authMethod: 'oauth',\n verification: 'local',\n accountLabel: account.email,\n summary: '已登录 Grok',\n };\n }\n return {\n state: account ? 'unauthenticated' : Object.keys(raw).length ? 'unknown' : 'unconfigured',\n verification: 'local',\n summary: account ? '登录已过期,请重新登录' : Object.keys(raw).length ? '登录格式未知' : '尚未登录 Grok',\n };\n}\n/** Bounded, no-follow local read; never returns credentials or native parse errors. */\nexport async function zcodeGrokAccountStatus(cli, config, signal, options = {}) {\n signal.throwIfAborted();\n const home = options.home ?? homedir();\n const path = cli === 'zcode'\n ? join(zcodeAuthDirectory(config.zcodeAuthDirectory, storageRoot(config, home)), '.zcode/v2/credentials.json')\n : join(home, '.grok/auth.json');\n let file;\n const buffer = Buffer.alloc(64 * 1024 + 1);\n try {\n if (cli === 'grok') {\n assertGrokNativeEnvironment(home);\n const directory = join(home, '.grok');\n const info = await lstat(directory);\n if (!info.isDirectory() ||\n info.isSymbolicLink() ||\n (await realpath(directory)) !== join(await realpath(home), '.grok'))\n throw new Error('Invalid account directory');\n }\n const location = await lstat(path);\n if (location.isSymbolicLink() || !location.isFile())\n throw new Error('Invalid account file');\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile() ||\n info.dev !== location.dev ||\n info.ino !== location.ino ||\n info.nlink !== 1 ||\n info.size > 64 * 1024 ||\n !info.size)\n throw new Error('Invalid account file');\n let offset = 0;\n while (offset < buffer.length) {\n signal.throwIfAborted();\n const { bytesRead } = await file.read(buffer, offset, buffer.length - offset, null);\n if (!bytesRead)\n break;\n offset += bytesRead;\n }\n if (offset > 64 * 1024)\n throw new Error('Account file too large');\n const current = await lstat(path);\n const after = await file.stat();\n if (current.isSymbolicLink() ||\n current.dev !== info.dev ||\n current.ino !== info.ino ||\n after.size !== info.size ||\n after.mtimeMs !== info.mtimeMs)\n throw new Error('Account file changed during read');\n const raw = JSON.parse(buffer.subarray(0, offset).toString('utf8'));\n signal.throwIfAborted();\n let username = 'unknown';\n try {\n username = userInfo().username;\n }\n catch {\n /* native fallback */\n }\n const identity = cli === 'grok'\n ? projectGrokIdentity(raw)\n : projectZCodeIdentity(raw, (options.credentialSecret ?? process.env.ZCODE_CREDENTIAL_SECRET?.trim()) ||\n `zcode-credential-fallback:${platform()}:${homedir()}:${username}`);\n return cli === 'zcode' && identity.state === 'unconfigured'\n ? readZCodePersonalIdentity(zcodeAuthDirectory(config.zcodeAuthDirectory, storageRoot(config, home)), options.home ? { nativeHome: home } : {})\n : identity;\n }\n catch (error) {\n signal.throwIfAborted();\n return error.code === 'ENOENT'\n ? cli === 'zcode'\n ? readZCodePersonalIdentity(zcodeAuthDirectory(config.zcodeAuthDirectory, storageRoot(config, home)), options.home ? { nativeHome: home } : {})\n : { state: 'unconfigured', verification: 'local', summary: '尚未登录' }\n : { state: 'unavailable', verification: 'local', summary: '登录配置读取失败,请重试' };\n }\n finally {\n buffer.fill(0);\n await file?.close();\n }\n}\nconst entryArgv = (executable) => /\\.[cm]?js$/i.test(executable) ? [process.execPath, executable] : [executable];\n/** The two installed 0.16.9 builds differ; version strings alone are not a capability check. */\nexport function supportsBigModelLogin(help) {\n return /^\\s*login\\s+\\[zai\\|bigmodel\\]/m.test(stripVTControlCharacters(help));\n}\nasync function privateDirectory(path) {\n await mkdir(path, { recursive: true, mode: 0o700 });\n const info = await lstat(path);\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('账号目录必须是独立的本地目录');\n await chmod(path, 0o700);\n return path;\n}\nasync function zcodeHelp(executable, cwd, backend, config, signal) {\n signal.throwIfAborted();\n const control = AbortSignal.any([signal, AbortSignal.timeout(5_000)]);\n const child = backend.spawn({\n argv: [...entryArgv(executable), '--help'],\n cwd,\n env: { ELECTRON_RUN_AS_NODE: '1' },\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: config.graceMs,\n signal: control,\n });\n void child.done.catch(() => undefined);\n let output = '', bytes = 0;\n const read = async (stream, keep) => {\n if (!stream)\n return;\n const decoder = new StringDecoder('utf8');\n for await (const chunk of stream) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n bytes += buffer.length;\n if (bytes > 64 * 1024)\n throw new Error('CLI help too large');\n if (keep)\n output += decoder.write(buffer);\n }\n if (keep)\n output += decoder.end();\n };\n const readers = [read(child.stdout, true), read(child.stderr, false)];\n for (const reader of readers)\n void reader.catch(() => undefined);\n let cancel = () => undefined;\n const cancelled = new Promise((_, reject) => {\n cancel = () => reject(new Error('CLI help cancelled'));\n control.addEventListener('abort', cancel, { once: true });\n if (control.aborted)\n cancel();\n });\n try {\n const [outcome] = await Promise.race([Promise.all([child.done, ...readers]), cancelled]);\n control.throwIfAborted();\n if (outcome.exitCode !== 0)\n throw new Error('CLI help failed');\n return output;\n }\n catch {\n signal.throwIfAborted();\n throw new ZCodeAccountCapabilityError('无法确认 ZCode 账号功能,请检查完整 CLI 安装后重试');\n }\n finally {\n control.removeEventListener('abort', cancel);\n child.terminate();\n if (!(await child.waitForExit()))\n throw new Error('ZCode 能力检查进程未完成清理');\n await Promise.allSettled([child.done, ...readers]);\n output = '';\n }\n}\n/** Build a user-operated terminal spec. Never starts login or injects terminal input. */\nexport async function zcodeGrokAccountLaunch(cli, action, executable, config, backend, signal, options = {}) {\n signal.throwIfAborted();\n if (options.loginProvider !== undefined &&\n (cli !== 'zcode' || action !== 'login' || !['bigmodel', 'zai'].includes(options.loginProvider)))\n throw new ZCodeAccountCapabilityError('授权来源只支持 ZCode 登录时选择智谱 BigModel 或 Z.AI');\n const home = options.home ?? homedir();\n const root = storageRoot(config, home);\n const state = await privateDirectory(join(root, 'accounts', `${cli}-terminal`));\n // Native ZCode auth commands load .env from cwd/ancestors. Explicit auth/config\n // variables take precedence; a private empty cwd avoids loading the user's project.\n const cwd = await privateDirectory(join(state, 'workspace'));\n if (cli === 'grok') {\n signal.throwIfAborted();\n return {\n argv: privateArgv([executable, ...(action === 'manage' ? [] : [action])]),\n env: { GROK_HOME: join(home, '.grok'), ELECTRON_RUN_AS_NODE: '1' },\n cwd,\n instruction: zcodeGrokInstruction(cli, action),\n };\n }\n const help = await zcodeHelp(executable, cwd, backend, config, signal);\n const plainHelp = stripVTControlCharacters(help);\n const bigmodel = supportsBigModelLogin(help);\n const zai = /^\\s*login\\s+Sign in with Z\\.AI OAuth\\b/m.test(plainHelp);\n // The installed Windows opener passes the URL through cmd.exe start, which\n // truncates its native OAuth query at '&'. Keep init/poll in ZCode and let\n // the shared terminal open its complete URL without shell parsing.\n const noBrowser = action === 'login' &&\n (options.platform ?? platform()) === 'win32' &&\n /^\\s*--no-browser\\s+/m.test(plainHelp);\n if (action === 'login' && !bigmodel && !zai)\n throw new ZCodeAccountCapabilityError('当前 ZCode 未声明原生登录能力,请检查 CLI 安装');\n if (options.loginProvider === 'bigmodel' && !bigmodel)\n throw new ZCodeAccountCapabilityError('当前 ZCode CLI 不支持智谱 BigModel 授权,请更新为支持 login bigmodel 的官方完整 CLI 后重试;不会改用 Z.AI 登录。');\n if (action === 'manage' && !/^\\s*tui\\s+/m.test(plainHelp))\n throw new ZCodeAccountCapabilityError('当前 ZCode 未声明原生终端界面,请检查 CLI 安装');\n if (action === 'logout' && !/^\\s*logout\\s+/m.test(plainHelp))\n throw new ZCodeAccountCapabilityError('当前 ZCode 未声明原生退出登录能力,请检查 CLI 安装');\n const auth = await privateDirectory(zcodeAuthDirectory(config.zcodeAuthDirectory, root));\n let env;\n try {\n env = {\n ...zcodeEnvironment(executable, state, auth, config.zcodeBuiltinConfig),\n ELECTRON_RUN_AS_NODE: '1',\n };\n }\n catch {\n throw new ZCodeAccountCapabilityError('ZCode 配套资源不可用,请检查 CLI 安装或配置 zcodeBuiltinConfig');\n }\n signal.throwIfAborted();\n // Preserve the previous caller's default, but an explicit choice must be\n // passed to the native provider-aware command rather than inferred from an\n // existing Desktop account. Older Z.AI-only builds ignore positional args.\n const loginProvider = options.loginProvider ?? (bigmodel ? 'bigmodel' : 'zai');\n return {\n argv: privateArgv([\n ...entryArgv(executable),\n ...(action === 'manage'\n ? ['tui']\n : action === 'login'\n ? ['login', ...(bigmodel ? [loginProvider] : []), ...(noBrowser ? ['--no-browser'] : [])]\n : ['logout']),\n ]),\n env,\n cwd,\n instruction: (noBrowser ? '终端显示授权链接后会打开浏览器,也可点击终端网址重新打开。' : '') +\n (action === 'login'\n ? loginProvider === 'bigmodel'\n ? '按 ZCode 原生提示完成 BigModel 授权;此账号供本插件的 ZCode 任务使用。'\n : (bigmodel ? '' : '当前 ZCode 版本的原生登录仅支持 Z.AI OAuth,不支持 BigModel 登录。') +\n '按 ZCode 原生提示完成 Z.AI 授权;此账号供本插件的 ZCode 任务使用。'\n : action === 'logout' && !bigmodel\n ? '此操作会退出该独立配置中的 Z.AI 账号。'\n : zcodeGrokInstruction(cli, action)),\n };\n}\n//# sourceMappingURL=zcode-grok-accounts.js.map","import { lstatSync, rmSync } from 'node:fs';\nimport { mkdtemp } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { openCodeAuthDirectory, openCodeEnvironment } from \"./opencode-adapter.js\";\nimport { privateDirectory } from \"./extended-adapters.js\";\nimport { inspectPiOmpNativeAccount } from \"./pi-omp-native.js\";\nimport { assertOpenCodeManagedAuth, inspectOpenCodeProfile, } from \"./opencode-native.js\";\nexport async function readPiOmpAccount(cli, config, signal, options = {}) {\n const native = await inspectPiOmpNativeAccount(cli, config.stateDirectory, signal, options);\n return native;\n}\n/** Project only capability metadata, never keys, arbitrary provider metadata or token claims. */\nexport async function readOpenCodeAccount(config, signal, options = {}) {\n signal.throwIfAborted();\n const native = await inspectOpenCodeProfile(openCodeAuthDirectory(config.stateDirectory), {\n ...options,\n signal,\n });\n return native;\n}\n/** User-operated native terminal. No task prompt, slash command, login or logout is injected. */\nexport async function prepareOpenCodeAccount(executable, action, config, signal) {\n signal.throwIfAborted();\n if (!['login', 'logout', 'manage'].includes(action))\n throw new Error('不支持的 OpenCode 账号操作');\n const data = openCodeAuthDirectory(config.stateDirectory);\n const accountRoot = privateDirectory(dirname(data));\n const terminals = privateDirectory(join(accountRoot, 'terminals'));\n const state = privateDirectory(await mkdtemp(join(terminals, 'terminal-')));\n const identity = lstatSync(state);\n const parentIdentity = lstatSync(terminals);\n let removed = false;\n const cleanup = () => {\n if (removed)\n return;\n const parent = lstatSync(terminals);\n if (parent.isSymbolicLink() || parent.dev !== parentIdentity.dev || parent.ino !== parentIdentity.ino)\n throw new Error('OpenCode account runtime parent changed before cleanup');\n let current;\n try {\n current = lstatSync(state);\n }\n catch (error) {\n if (error.code === 'ENOENT') {\n removed = true;\n return;\n }\n throw error;\n }\n if (current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)\n throw new Error('OpenCode account runtime changed before cleanup');\n // rm does not follow nested links. Never seal/chmod or remove the shared auth tree.\n rmSync(state, { recursive: true, force: true });\n removed = true;\n };\n try {\n signal.throwIfAborted();\n await assertOpenCodeManagedAuth(data, signal);\n const env = await openCodeEnvironment(state, {\n permission: { '*': 'deny' },\n }, data, false);\n signal.throwIfAborted();\n const argv = [executable, ...(action === 'manage' ? [] : ['auth', action])];\n return {\n argv: [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...argv],\n env: { ...env, ELECTRON_RUN_AS_NODE: '1' },\n cwd: state,\n cleanup,\n instruction: action === 'manage'\n ? '在 OpenCode 原生终端使用 /connect 管理登录;凭据与插件任务共用,工作数据保持独立。'\n : '按 OpenCode 原生账号流程操作;凭据与插件任务共用,关闭终端不会撤销已完成的账号操作。',\n };\n }\n catch (error) {\n cleanup();\n throw error;\n }\n}\n//# sourceMappingURL=harness-opencode-accounts.js.map","import { constants } from 'node:fs';\nimport { lstat, mkdir, mkdtemp, open, realpath, rm } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { accountEmail, localTokenExpired } from \"./account-identity.js\";\nimport { authenticatedAccountLogins, providerLogin, usableNativeApiKey } from \"./account-login.js\";\nimport { hermesSourceSuppressed, projectHermesUnsuppressedAuth } from \"./hermes-suppression.js\";\nimport { projectHermesNousSource } from \"./hermes-nous.js\";\nimport { parseHermesOwnEnvironment } from \"./hermes-env.js\";\nimport { privateDirectory } from \"./extended-adapters.js\";\nimport { assertHermesOwnAccounts } from \"./hermes-models.js\";\nimport { effectiveHermesHome, prepareHermesAccountHome, hermesAccountEnvironment, } from \"./hermes-account-context.js\";\nimport { hermesNativeCommand } from \"./hermes-installation.js\";\nimport { projectDirectory } from \"./process.js\";\nconst record = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);\nconst nonempty = (value) => typeof value === 'string' && !!value.trim();\nconst configured = (authMethod) => ({\n state: 'configured',\n verification: 'local',\n ...(authMethod ? { authMethod } : {}),\n summary: '已配置 Hermes 账号',\n});\n/** Only the display email from the native OAuth ID token is projected, never token text.\n * This is local metadata, not signature validation or a remote login assertion.\n */\nfunction tokenEmail(value) {\n if (typeof value !== 'string' || value.length > 32 * 1024)\n return;\n const pieces = value.split('.');\n if (pieces.length !== 3 || pieces.some((part) => !/^[A-Za-z0-9_-]+$/.test(part)))\n return;\n const buffer = Buffer.from(pieces[1], 'base64url');\n try {\n const claims = JSON.parse(buffer.toString('utf8'));\n return record(claims) ? accountEmail(claims.email) : undefined;\n }\n catch {\n return;\n }\n finally {\n buffer.fill(0);\n }\n}\n/** Native shapes from auth_codex.py/auth_xai.py and NousResearch/hermes-agent@6c80c327 auth_nous.py.\n * Explicit own credentials project local login; provider declarations and unknown schemas do not.\n */\nexport function projectHermesIdentity(raw) {\n if (!record(raw))\n throw new Error('Invalid Hermes auth metadata');\n raw = projectHermesUnsuppressedAuth(raw);\n if (!record(raw))\n throw new Error('Invalid Hermes auth metadata');\n const providers = record(raw.providers) ? raw.providers : {};\n const ids = nonempty(raw.active_provider) ? [raw.active_provider] : Object.keys(providers);\n const logins = [];\n let expired = false;\n let renewable = false;\n for (const id of ids) {\n const state = providers[id];\n if (id === 'nous' && record(state)) {\n try {\n const nous = projectHermesNousSource(raw);\n logins.push({\n ...providerLogin('nous', 'oauth'),\n ...(nous.email ? { accountLabel: nous.email } : {}),\n });\n }\n catch (error) {\n if (error instanceof Error && /过期/.test(error.message)) {\n expired = true;\n try {\n projectHermesNousSource(raw, 0, { allowExpired: true });\n renewable = nonempty(state.refresh_token);\n }\n catch {\n /* A stale bearer is not sufficient without the same valid own source. */\n }\n }\n }\n continue;\n }\n if (!record(state) || !record(state.tokens))\n continue;\n const tokens = state.tokens;\n const recognized = (id === 'openai-codex' && state.auth_mode === 'chatgpt') ||\n (id === 'xai-oauth' && ['oauth_device_code', 'oauth_pkce'].includes(String(state.auth_mode)));\n if (!recognized ||\n !usableNativeApiKey(state.tokens.access_token) ||\n state.disabled === true ||\n (record(state.last_auth_error) && state.last_auth_error.relogin_required === true))\n continue;\n const entries = record(raw.credential_pool) ? raw.credential_pool[id] : undefined;\n if (entries !== undefined &&\n (!Array.isArray(entries) ||\n entries.some((entry) => !record(entry) ||\n entry.auth_type !== 'oauth' ||\n ![\n 'device_code',\n 'manual:device_code',\n ...(id === 'openai-codex' ? ['manual:loopback_pkce'] : []),\n ].includes(String(entry.source)) ||\n entry.access_token !== tokens.access_token ||\n entry.disabled === true ||\n ['dead', 'exhausted'].includes(String(entry.last_status)))))\n continue;\n if (localTokenExpired(state.tokens.access_token)) {\n expired = true;\n continue;\n }\n const email = tokenEmail(state.tokens.id_token);\n logins.push({\n ...providerLogin(id === 'xai-oauth' ? 'xai' : id, 'oauth'),\n ...(email ? { accountLabel: email } : {}),\n });\n }\n const pools = record(raw.credential_pool) ? raw.credential_pool : {};\n for (const [provider, entries] of Object.entries(pools)) {\n if (!Array.isArray(entries))\n continue;\n for (const entry of entries) {\n if (!record(entry) ||\n entry.auth_type !== 'api_key' ||\n entry.disabled === true ||\n ['dead', 'exhausted'].includes(String(entry.last_status)) ||\n entry.status === 'exhausted' ||\n !['manual', 'config', ...(provider === 'openrouter' ? ['manual:openrouter_pkce'] : [])].includes(String(entry.source ?? 'manual')) ||\n !usableNativeApiKey(entry.access_token ?? entry.runtime_api_key))\n continue;\n logins.push(providerLogin(provider, 'api', { baseUrl: entry.base_url }));\n }\n }\n if (logins.length) {\n const identity = authenticatedAccountLogins(logins);\n const only = identity.logins?.length === 1 ? identity.logins[0] : undefined;\n return { ...identity, ...(only?.accountLabel ? { accountLabel: only.accountLabel } : {}) };\n }\n if (renewable)\n return {\n state: 'configured', verification: 'local', authMethod: 'oauth',\n summary: 'Hermes 登录已保存,等待自动续期',\n };\n if (expired)\n return {\n state: 'unauthenticated',\n verification: 'local',\n authMethod: 'oauth',\n summary: '登录已过期,请重新登录',\n };\n // Do not choose an arbitrary identity when several providers are configured.\n const pool = record(raw.credential_pool) ? Object.values(raw.credential_pool).flat() : [];\n const api = pool.some((entry) => record(entry) &&\n entry.auth_type === 'api_key' &&\n (nonempty(entry.access_token) || nonempty(entry.runtime_api_key)));\n if (Object.keys(providers).length || pool.length)\n return configured(api ? 'api' : undefined);\n return undefined;\n}\nasync function environmentLogins(path, signal, auth) {\n let file;\n const buffer = Buffer.alloc(64 * 1024 + 1);\n try {\n file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 64 * 1024)\n throw new Error('Unsafe Hermes environment');\n let length = 0;\n while (length < buffer.length) {\n signal.throwIfAborted();\n const { bytesRead } = await file.read(buffer, length, buffer.length - length, length);\n if (!bytesRead)\n break;\n length += bytesRead;\n }\n if (length > 64 * 1024)\n throw new Error('Oversized Hermes environment');\n // Default generated config.yaml and commented .env templates do not prove an account exists.\n // Only explicit provider API-key assignments count; values never leave this local boolean check.\n const env = parseHermesOwnEnvironment(buffer.subarray(0, length).toString('utf8'));\n return Object.entries(env).flatMap(([name, value]) => {\n const match = /^(OPENROUTER|OPENAI|ANTHROPIC|GEMINI|GOOGLE|GROQ|MISTRAL|DEEPSEEK|XAI|ZAI|KIMI|MINIMAX|NOUS)_API_KEY(?:_\\d+)?$/.exec(name);\n if (!match || !usableNativeApiKey(value))\n return [];\n const provider = ['GEMINI', 'GOOGLE'].includes(match[1])\n ? 'google'\n : match[1] === 'KIMI'\n ? 'kimi-coding'\n : match[1].toLowerCase();\n return hermesSourceSuppressed(auth, provider, `env:${name}`) ? [] : [providerLogin(provider, 'api')];\n });\n }\n catch (error) {\n if (error.code === 'ENOENT')\n return [];\n throw error;\n }\n finally {\n buffer.fill(0);\n await file?.close();\n }\n}\nexport async function readHermesAccount(config, signal) {\n signal.throwIfAborted();\n let file;\n let identity;\n let auth = {};\n const buffer = Buffer.alloc(64 * 1024 + 1);\n try {\n const home = effectiveHermesHome(config);\n const info = await lstat(home);\n if (!info.isDirectory() || info.isSymbolicLink())\n throw new Error('Unsafe Hermes home');\n try {\n file = await open(join(home, 'auth.json'), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n const info = await file.stat();\n if (!info.isFile() || info.nlink !== 1 || info.size > 64 * 1024)\n throw new Error('Unsafe Hermes auth file');\n let length = 0;\n while (length < buffer.length) {\n signal.throwIfAborted();\n const result = await file.read(buffer, length, buffer.length - length, length);\n if (!result.bytesRead)\n break;\n length += result.bytesRead;\n }\n if (length > 64 * 1024)\n throw new Error('Oversized Hermes auth file');\n auth = JSON.parse(buffer.subarray(0, length).toString('utf8'));\n identity = projectHermesIdentity(auth);\n signal.throwIfAborted();\n }\n catch (error) {\n if (error.code !== 'ENOENT')\n throw error;\n }\n const envLogins = await environmentLogins(join(home, '.env'), signal, auth);\n if (envLogins.length)\n return authenticatedAccountLogins([...(identity?.logins ?? []), ...envLogins]);\n return (identity ?? {\n state: 'unconfigured',\n verification: 'local',\n summary: '尚未配置 Hermes 账号',\n });\n }\n catch (error) {\n signal.throwIfAborted();\n return error.code === 'ENOENT'\n ? { state: 'unconfigured', verification: 'local', summary: '尚未配置 Hermes 账号' }\n : {\n state: 'unavailable',\n verification: 'local',\n summary: '账号配置读取失败,请检查配置',\n };\n }\n finally {\n buffer.fill(0);\n await file?.close();\n }\n}\nexport async function listHermesAccountSources(config, signal) {\n const status = await readHermesAccount(config, signal);\n if (!['authenticated', 'configured', 'unauthenticated'].includes(status.state))\n return [];\n const plugin = resolve(config.stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), 'accounts', 'hermes');\n const id = effectiveHermesHome(config) === plugin ? 'plugin' : 'native';\n return [{ id, label: id === 'plugin' ? '插件账号' : 'CLI 全局账号' }];\n}\nexport async function prepareHermesAccount(action, executable, project, config, signal, source) {\n signal.throwIfAborted();\n if (!['login', 'manage', 'logout'].includes(action))\n throw new Error('不支持的 Hermes 账号操作');\n if (!nonempty(executable) || executable.includes('\\0'))\n throw new Error('Invalid Hermes executable');\n projectDirectory(project);\n let sourceLabel = '';\n if (action === 'logout') {\n const sources = await listHermesAccountSources(config, signal);\n const chosen = source ? sources.find((item) => item.id === source) : sources[0];\n if (!chosen)\n throw new Error('账号来源已变化,请刷新后重试');\n sourceLabel = chosen.label;\n }\n const home = action === 'logout' ? effectiveHermesHome(config) : prepareHermesAccountHome(config);\n await assertHermesOwnAccounts(home, signal);\n const userHome = await realpath(homedir());\n if (home === sep || home === userHome || userHome.startsWith(home + sep))\n throw new Error('Unsafe Hermes home');\n await mkdir(home, { recursive: true, mode: 0o700 });\n const homeInfo = await lstat(home);\n if (!homeInfo.isDirectory() || homeInfo.isSymbolicLink())\n throw new Error('Unsafe Hermes home');\n const nativeHome = await realpath(home);\n if (nativeHome === sep || nativeHome === userHome || userHome.startsWith(nativeHome + sep))\n throw new Error('Unsafe Hermes home');\n const root = privateDirectory(resolve(config.stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now')));\n const parent = privateDirectory(join(root, 'account-runtime'));\n const state = await mkdtemp(join(parent, 'hermes-'));\n const identity = await lstat(state);\n const parentIdentity = await lstat(parent);\n let removed = false;\n const cleanup = async () => {\n if (removed)\n return;\n const parentNow = await lstat(parent);\n if (parentNow.isSymbolicLink() ||\n parentNow.dev !== parentIdentity.dev ||\n parentNow.ino !== parentIdentity.ino)\n throw new Error('Hermes account runtime parent changed before cleanup');\n try {\n const now = await lstat(state);\n if (now.isSymbolicLink() || now.dev !== identity.dev || now.ino !== identity.ino)\n throw new Error('Hermes account runtime changed before cleanup');\n await rm(state, { recursive: true, force: true });\n removed = true;\n }\n catch (error) {\n if (error.code === 'ENOENT')\n removed = true;\n else\n throw error;\n }\n };\n try {\n signal.throwIfAborted();\n const temporary = privateDirectory(join(state, 'tmp'));\n const command = await hermesNativeCommand(executable, [action === 'login' ? 'model' : 'auth'], signal);\n const argv = [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...command];\n return {\n argv,\n cwd: state,\n env: {\n ...hermesAccountEnvironment(nativeHome),\n TMPDIR: temporary,\n TMP: temporary,\n TEMP: temporary,\n HERMES_SAFE_MODE: '1',\n HERMES_IGNORE_RULES: '1',\n HERMES_YOLO_MODE: '0',\n HERMES_ACCEPT_HOOKS: '0',\n PYTHONDONTWRITEBYTECODE: '1',\n ELECTRON_RUN_AS_NODE: '1',\n },\n instruction: action === 'logout'\n ? `${sourceLabel}:选择 Remove a credential,再选择服务商和凭据;其他来源保留。`\n : action === 'login'\n ? '在 Hermes 原生菜单中选择服务商并登录。'\n : '在 Hermes 原生账号菜单中管理凭据;更改保存在插件的 Hermes 账号目录,终端输入仅由你直接操作。',\n cleanup,\n };\n }\n catch (error) {\n await cleanup();\n throw error;\n }\n}\n//# sourceMappingURL=hermes-accounts.js.map","import { lstat, mkdir, mkdtemp, realpath, rm, symlink, writeFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { readPiOmpLogoutSources, safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { projectDirectory } from \"./process.js\";\nimport { ompConfigurationEnvironment } from './pi-omp-environment.mjs';\n/** No snapshot, migration or credential deletion here: only native user-operated menus. */\nexport async function preparePiOmpLogout(input) {\n const { cli, signal } = input;\n signal?.throwIfAborted();\n projectDirectory(input.project);\n const sources = await readPiOmpLogoutSources(cli, input.stateDirectory, signal ?? new AbortController().signal, { nativeHome: input.nativeHome });\n const source = input.source\n ? sources.find((item) => item.id === input.source)\n : sources.length === 1\n ? sources[0]\n : undefined;\n if (!source)\n throw new Error(sources.length > 1 && !input.source ? '请选择要退出的账号来源' : '账号来源已变化,请刷新后重试');\n const directory = await realpath(source.directory);\n await safePiOmpAncestors(directory);\n signal?.throwIfAborted();\n const parent = join(resolve(input.stateDirectory), 'account-runtime');\n await safePiOmpAncestors(parent);\n await mkdir(parent, { recursive: true, mode: 0o700 });\n const parentIdentity = await lstat(parent);\n const runtime = await mkdtemp(join(parent, `${cli}-logout-`));\n const identity = await lstat(runtime);\n let removed = false;\n const cleanup = async () => {\n if (removed)\n return;\n const currentParent = await lstat(parent);\n if (currentParent.isSymbolicLink() ||\n currentParent.dev !== parentIdentity.dev ||\n currentParent.ino !== parentIdentity.ino)\n throw new Error('Account runtime parent changed before cleanup');\n try {\n const current = await lstat(runtime);\n if (current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)\n throw new Error('Account runtime changed before cleanup');\n await rm(runtime, { recursive: true, force: true });\n removed = true;\n }\n catch (error) {\n if (error.code === 'ENOENT')\n removed = true;\n else\n throw error;\n }\n };\n try {\n const agent = join(runtime, 'agent'), temporary = join(runtime, 'tmp');\n for (const path of [agent, temporary, join(runtime, 'sessions'), join(runtime, 'logs')])\n await mkdir(path, { mode: 0o700 });\n const env = {\n ...source.env,\n PI_CODING_AGENT_DIR: agent,\n TMPDIR: temporary,\n TMP: temporary,\n TEMP: temporary,\n ELECTRON_RUN_AS_NODE: '1',\n OMP_AUTH_BROKER_URL: '',\n OMP_AUTH_BROKER_TOKEN: '',\n OMP_PROFILE: '',\n PI_PROFILE: '',\n };\n let native;\n if (cli === 'pi') {\n const auth = source.stored ? join(directory, 'auth.json') : join(agent, 'auth.json');\n if (!source.stored)\n await writeFile(auth, '{}', { flag: 'wx', mode: 0o600 });\n native = [\n process.execPath,\n fileURLToPath(new URL('./pi-login.mjs', import.meta.url)),\n input.executable,\n 'logout',\n auth,\n ];\n env.PI_OFFLINE = '1';\n env.PI_TELEMETRY = '0';\n }\n else {\n // Operate on the selected real DB, never a copied DB/WAL. Windows uses the\n // native agent root directly without requiring symlink privileges.\n if (source.stored) {\n if (process.platform === 'win32') {\n if (source.brokerConfigured)\n throw new Error('请先在 OMP 自身配置中停用账号代理,再退出该来源');\n env.PI_CODING_AGENT_DIR = directory;\n }\n else {\n await symlink(join(directory, 'agent.db'), join(agent, 'agent.db'));\n }\n }\n await writeFile(join(agent, 'config.yml'), JSON.stringify({\n ...source.config,\n auth: { ...(source.config.auth ?? {}), broker: undefined },\n startup: { setupWizard: false, showSplash: false, checkUpdate: false },\n disabledProviders: [\n 'native',\n 'claude',\n 'claude-plugins',\n 'codex',\n 'cursor',\n 'gemini',\n 'opencode',\n 'mcp-json',\n 'vscode',\n 'windsurf',\n 'omp-plugins',\n ],\n mcp: { enableProjectConfig: false },\n retry: { modelFallback: false },\n memory: { backend: 'off' },\n tools: { approvalMode: 'always-ask' },\n }), { mode: 0o600 });\n Object.assign(env, ompConfigurationEnvironment(runtime));\n native = [\n input.executable,\n '--no-session',\n '--no-tools',\n '--no-extensions',\n '--no-skills',\n '--no-rules',\n '--no-title',\n '--no-lsp',\n '--no-pty',\n '--approval-mode',\n 'always-ask',\n '--session-dir',\n join(runtime, 'sessions'),\n '--config',\n join(agent, 'config.yml'),\n ];\n }\n signal?.throwIfAborted();\n const argv = [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...native];\n return {\n argv,\n cwd: runtime,\n env,\n cleanup,\n instruction: `${source.label}:${cli === 'pi' ? '选择要退出的服务商。' : '输入 /logout,选择服务商和凭据。'}其他来源保留;.env 或模型配置中的 API 请在原配置中管理。`,\n };\n }\n catch (error) {\n await cleanup();\n throw error;\n }\n}\n//# sourceMappingURL=pi-omp-logout.js.map","import { constants } from 'node:fs';\nimport { chmod, lstat, mkdir, mkdtemp, open, realpath, rename, rm, writeFile, readFile } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { snapshotPiOmpNative, safePiOmpAncestors } from \"./pi-omp-native.js\";\nimport { preparePiOmpLogout } from \"./pi-omp-logout.js\";\nimport { ompConfigurationEnvironment } from './pi-omp-environment.mjs';\nimport { projectDirectory } from \"./process.js\";\nasync function privateDirectory(path) {\n await safePiOmpAncestors(path);\n await mkdir(path, { recursive: true, mode: 0o700 });\n const before = await lstat(path);\n if (before.isSymbolicLink() || !before.isDirectory())\n throw new Error('Unsafe account directory symlink');\n if (process.platform === 'win32') {\n const canonical = await realpath(path);\n await chmod(path, 0o700);\n const after = await lstat(path);\n if (after.isSymbolicLink() ||\n !after.isDirectory() ||\n before.dev !== after.dev ||\n before.ino !== after.ino ||\n (await realpath(path)) !== canonical)\n throw new Error('Account directory changed while opening');\n return canonical;\n }\n const handle = await open(path, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);\n try {\n const opened = await handle.stat();\n if (opened.dev !== before.dev || opened.ino !== before.ino)\n throw new Error('Account directory changed while opening');\n await handle.chmod(0o700);\n }\n finally {\n await handle.close();\n }\n return realpath(path);\n}\nasync function writePrivateJSON(path, value) {\n const temporary = `${path}.tmp`;\n try {\n await writeFile(temporary, JSON.stringify(value), { flag: 'wx', mode: 0o600 });\n await rename(temporary, path);\n }\n finally {\n await rm(temporary, { force: true });\n }\n}\n/**\n * User-operated native account UI. No task prompt or automatic login is sent;\n * original global sources remain unchanged and this plugin keeps its own account store.\n */\nexport async function preparePiOmpAccountTerminal(input) {\n const { cli, signal } = input;\n if (cli !== 'pi' && cli !== 'omp')\n throw new Error('Unsupported Pi/OMP account terminal');\n if (input.action === 'logout')\n return preparePiOmpLogout(input);\n signal?.throwIfAborted();\n projectDirectory(input.project);\n const root = await privateDirectory(resolve(input.stateDirectory));\n const accountRoot = await privateDirectory(join(root, 'account-runtime'));\n const runtime = await mkdtemp(join(accountRoot, `${cli}-`));\n const identity = await lstat(runtime);\n let removed = false;\n const cleanup = async () => {\n if (removed)\n return;\n let current;\n try {\n current = await lstat(runtime);\n }\n catch (error) {\n if (error.code === 'ENOENT') {\n removed = true;\n return;\n }\n throw error;\n }\n if (current.isSymbolicLink() || current.dev !== identity.dev || current.ino !== identity.ino)\n throw new Error('Account runtime changed before cleanup');\n await rm(runtime, { recursive: true, force: true });\n removed = true;\n };\n try {\n signal?.throwIfAborted();\n const accounts = await privateDirectory(join(root, 'accounts'));\n const account = await privateDirectory(join(accounts, cli));\n const agent = await privateDirectory(join(account, 'agent'));\n const native = await snapshotPiOmpNative(cli, agent, { accountRoot: root, nativeHome: input.nativeHome });\n const temporary = await privateDirectory(join(runtime, 'tmp'));\n const nativeArgs = ['--no-session', '--no-tools', '--no-extensions', '--no-skills'];\n const env = {\n ...native.env,\n PI_CODING_AGENT_DIR: agent,\n TMPDIR: temporary,\n TMP: temporary,\n TEMP: temporary,\n ELECTRON_RUN_AS_NODE: '1',\n // Do not let a caller's active profile redirect this disposable TUI to\n // another credential store. Harness already scrubs ambient secret names.\n OMP_AUTH_BROKER_URL: '',\n OMP_AUTH_BROKER_TOKEN: '',\n OMP_PROFILE: '',\n PI_PROFILE: '',\n };\n if (cli === 'pi') {\n nativeArgs.push('--no-prompt-templates', '--no-themes', '--no-context-files', '--no-approve', '--offline');\n env.PI_OFFLINE = '1';\n env.PI_TELEMETRY = '0';\n }\n else {\n const nativeAuth = JSON.parse(await readFile(join(agent, 'native-auth.json'), 'utf8'));\n await writePrivateJSON(join(agent, 'config.yml'), {\n ...nativeAuth,\n // Native OMP 16.4.4 setup scene selection reads startup.setupWizard.\n // Account login is an explicit action; manage does not start onboarding.\n startup: { setupWizard: false, showSplash: false, checkUpdate: false },\n // OMP 16.4.4 has no --no-mcp. Its native discovery registry filters these\n // provider IDs before reading global/project MCP files or spawning servers.\n // Account terminals must not import other applications' tools or hooks.\n disabledProviders: [\n 'native',\n 'claude',\n 'claude-plugins',\n 'codex',\n 'cursor',\n 'gemini',\n 'opencode',\n 'mcp-json',\n 'vscode',\n 'windsurf',\n 'omp-plugins',\n ],\n mcp: { enableProjectConfig: false },\n retry: { modelFallback: false },\n memory: { backend: 'off' },\n tools: { approvalMode: 'always-ask' },\n });\n Object.assign(env, ompConfigurationEnvironment(account));\n nativeArgs.push('--no-rules', '--no-title', '--no-lsp', '--no-pty', '--approval-mode', 'always-ask', '--config', join(agent, 'config.yml'));\n }\n signal?.throwIfAborted();\n let nativeArgv = /\\.[cm]?js$/.test(input.executable)\n ? [process.execPath, input.executable, ...nativeArgs]\n : [input.executable, ...nativeArgs];\n if (input.action === 'login') {\n // No prompt injection: OMP's native onboarding, or Pi's native UI API.\n nativeArgv =\n cli === 'omp'\n ? [input.executable, 'setup']\n : [process.execPath, fileURLToPath(new URL('./pi-login.mjs', import.meta.url)), input.executable];\n }\n const argv = [process.execPath, fileURLToPath(new URL('./private-launch.mjs', import.meta.url)), ...nativeArgv];\n if (cli === 'omp') {\n // OMP's native logger uses configRoot/logs, beside its agent directory.\n await privateDirectory(join(account, 'logs'));\n }\n return {\n argv,\n // Avoid loading project files while operating account controls.\n cwd: runtime,\n env,\n instruction: input.action === 'login'\n ? '选择提供商并完成登录。'\n : '输入 /login 或 /logout 管理终端账号;现有任务保留已选择的模型与凭据。',\n cleanup,\n };\n }\n catch (error) {\n await cleanup();\n throw error;\n }\n}\n//# sourceMappingURL=pi-omp-accounts.js.map","import { mkdir, mkdtemp, rm, symlink } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { firstPartyEnvironment } from \"./first-party-models.js\";\nimport { assertMimoAccountConfiguration, mimoConfigurationPaths } from \"./mimo-configuration.js\";\n/** Native login keeps the same auth store and a private work directory/database. */\nexport async function prepareMimoAccountTerminal(executable, action, stateDirectory, signal, options = {}) {\n await assertMimoAccountConfiguration(signal);\n const { home, config, data } = mimoConfigurationPaths();\n const direct = (options.platform ?? process.platform) === 'win32';\n const parent = join(stateDirectory, 'account-contexts', 'mimo');\n await mkdir(parent, { recursive: true, mode: 0o700 });\n const root = await mkdtemp(join(parent, 'login-'));\n try {\n for (const directory of ['home', 'config', 'data', 'cache', 'state', 'work', 'managed'])\n await mkdir(join(root, directory), { mode: 0o700 });\n // Windows uses the real native path directly: a symlink needs privileges and an auth\n // copy can restore an account after logout. Other platforms retain the verified link.\n await mkdir(data, { recursive: true, mode: 0o700 });\n if (!direct)\n await symlink(join(data, 'auth.json'), join(root, 'data', 'auth.json'));\n signal.throwIfAborted();\n return {\n argv: [executable, ...(action === 'manage' ? [] : ['auth', action])],\n cwd: join(root, 'work'),\n env: {\n ...firstPartyEnvironment('mimo'),\n HOME: direct ? home : join(root, 'home'),\n USERPROFILE: direct ? process.env.USERPROFILE || home : join(root, 'home'),\n MIMOCODE_HOME: direct ? process.env.MIMOCODE_HOME || '' : root,\n ...(direct\n ? {\n XDG_DATA_HOME: process.env.XDG_DATA_HOME || dirname(data),\n XDG_CONFIG_HOME: process.env.XDG_CONFIG_HOME || dirname(config),\n XDG_CACHE_HOME: join(root, 'cache'),\n XDG_STATE_HOME: join(root, 'state'),\n }\n : {}),\n MIMOCODE_DISABLE_PROJECT_CONFIG: '1',\n MIMOCODE_DISABLE_GIT: '1',\n MIMOCODE_MIMO_ONLY: '1',\n MIMOCODE_TEST_MANAGED_CONFIG_DIR: join(root, 'managed'),\n MIMOCODE_TUI_CONFIG: '',\n MIMOCODE_PLUGIN_META_FILE: '',\n MIMOCODE_WORKSPACE_ID: '',\n MIMOCODE_DB: join(root, 'data', 'mimocode.db'),\n },\n cleanup: () => rm(root, { recursive: true, force: true }),\n };\n }\n catch (error) {\n await rm(root, { recursive: true, force: true });\n throw error;\n }\n}\n//# sourceMappingURL=first-party-account-context.js.map","import { mkdtemp, readFile, writeFile, rm } from 'node:fs/promises';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { setTimeout as delay } from 'node:timers/promises';\nimport { ProcessCleanupUnconfirmedError } from \"./process.js\";\n/** A fixed diagnostic; never derived from PowerShell or native output. */\nexport class WindowsAccountTerminalError extends Error {\n constructor() {\n super('Windows 账号终端托管不可用,请检查 PowerShell 后重试');\n }\n}\n/** ConPTY publishes pid=0 during async allocation in the pinned Windows SDK.\n * Attach a waiting bootstrap to a lifecycle-only Job before allowing the CLI to\n * spawn. The separate owner is itself held by the Host's ordinary subprocess\n * Job, so closing/crashing the Host also closes the account process range.\n */\nexport async function spawnAccountTerminal(backend, spec, options = {}) {\n if ((options.platform ?? process.platform) !== 'win32')\n return backend.spawnTerminal(spec);\n spec.signal?.throwIfAborted();\n const directory = await mkdtemp(join(tmpdir(), 'cwn-account-job-'));\n const windows = process.env.SystemRoot ?? 'C:\\\\Windows';\n let terminal;\n const owner = await (async () => {\n try {\n return backend.spawn({\n argv: [\n join(windows, 'System32/WindowsPowerShell/v1.0/powershell.exe'),\n '-NoLogo',\n '-NoProfile',\n '-NonInteractive',\n '-File',\n fileURLToPath(new URL('./windows-account-owner.ps1', import.meta.url)),\n '-HostProcessId',\n String(process.pid),\n '-Directory',\n directory,\n ],\n cwd: spec.cwd,\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: 1000,\n });\n }\n catch (error) {\n await rm(directory, { recursive: true, force: true });\n throw error;\n }\n })();\n void owner.done.catch(() => undefined);\n owner.stdout?.resume();\n owner.stderr?.resume();\n let cleanup;\n const exists = async (name) => {\n try {\n return (await readFile(join(directory, name), 'utf8')).trim() === name;\n }\n catch {\n return false;\n }\n };\n const terminate = () => (cleanup ??= (async () => {\n let stage = 'receipt';\n try {\n // Cancellation before the handshake must still let the owner adopt the\n // bootstrap/console, while preventing it from launching the native CLI.\n await writeFile(join(directory, 'cancel'), 'cancel', { mode: 0o600 });\n const adoptedUntil = Date.now() + (options.cleanupMs ?? 9000);\n while (!(await exists('ready'))) {\n if (Date.now() >= adoptedUntil)\n throw new ProcessCleanupUnconfirmedError();\n await delay(25);\n }\n // Dispose ConPTY while the bootstrap is still alive. With the pinned\n // node-pty provider, killing the Job first bypasses its worker disposal.\n // Native exit receipts keep the bootstrap alive for this same reason.\n const disposal = terminal?.terminate().then(() => true, () => false);\n if (disposal)\n await Promise.race([disposal, delay(options.terminalExitMs ?? 2500)]);\n await writeFile(join(directory, 'stop'), 'stop', { mode: 0o600 });\n const deadline = Date.now() + (options.cleanupMs ?? 9000);\n while (!(await exists('closed'))) {\n if (Date.now() >= deadline)\n throw new ProcessCleanupUnconfirmedError();\n await delay(25);\n }\n // The receipt follows ActiveProcesses == 0, not just the root's exit.\n stage = 'terminal';\n if (disposal && !(await Promise.race([disposal, delay(options.terminalExitMs ?? 2500, false)])))\n throw new ProcessCleanupUnconfirmedError();\n stage = 'owner';\n if (!(await owner.waitForExit()))\n throw new ProcessCleanupUnconfirmedError();\n await owner.done;\n stage = 'directory';\n await rm(directory, { recursive: true, force: true });\n }\n catch {\n cleanup = undefined;\n throw Object.assign(new ProcessCleanupUnconfirmedError(), { stage });\n }\n })());\n try {\n // Compile/validate the fixed owner before allocating any ConPTY resources.\n const ownerUntil = Date.now() + (options.handshakeMs ?? 15_000);\n while (!(await exists('owner-ready'))) {\n spec.signal?.throwIfAborted();\n if (Date.now() >= ownerUntil)\n throw new Error('Windows account owner handshake timed out');\n await Promise.race([\n delay(25),\n owner.done.then(() => {\n throw new Error('Windows account owner ended');\n }),\n ]);\n }\n spec.signal?.throwIfAborted();\n terminal = await backend.spawnTerminal({\n ...spec,\n signal: undefined,\n argv: [\n join(windows, 'System32/WindowsPowerShell/v1.0/powershell.exe'),\n '-NoLogo',\n '-NoProfile',\n '-NonInteractive',\n '-File',\n fileURLToPath(new URL('./windows-account-bootstrap.ps1', import.meta.url)),\n '-Directory',\n directory,\n '-RuntimePath',\n process.execPath,\n '-LaunchPath',\n fileURLToPath(new URL('./windows-account-launch.mjs', import.meta.url)),\n '-ArgumentsBase64',\n Buffer.from(JSON.stringify(spec.argv), 'utf8').toString('base64'),\n ],\n env: { ...spec.env, ELECTRON_RUN_AS_NODE: '1' },\n });\n void terminal.done.catch(() => undefined);\n const until = Date.now() + (options.handshakeMs ?? 15_000);\n while (!(await exists('ready'))) {\n spec.signal?.throwIfAborted();\n if (Date.now() >= until)\n throw new Error('Windows account terminal handshake timed out');\n await Promise.race([\n delay(25),\n owner.done.then(() => {\n throw new Error('Windows account owner ended');\n }),\n ]);\n }\n const current = terminal;\n const done = (async () => {\n for (;;) {\n try {\n const receipt = JSON.parse(await readFile(join(directory, 'exit'), 'utf8'));\n if (Number.isInteger(receipt.exitCode))\n return { exitCode: receipt.exitCode, signal: null };\n }\n catch {\n /* An interrupted bootstrap retains the SDK outcome. */\n }\n const outcome = await Promise.race([current.done, delay(50, undefined)]);\n if (outcome)\n return outcome;\n }\n })();\n void done.catch(() => undefined);\n return {\n pid: Number(await readFile(join(directory, 'pid'), 'utf8')),\n output: current.output,\n done,\n write: (data) => current.write(data),\n resize: (cols, rows) => current.resize(cols, rows),\n inspectForeground: () => current.inspectForeground(),\n inspectActivity: () => current.inspectActivity(),\n signalForeground: (signal) => current.signalForeground(signal),\n terminate,\n };\n }\n catch (error) {\n if (terminal) {\n // A cancellation can precede ready: the bootstrap keeps waiting until\n // the owner adopts its console/Job, then observes stop without running\n // the CLI. Require the same empty-range receipt as a normal close.\n try {\n await terminate();\n }\n catch (failure) {\n owner.terminate();\n await terminal.terminate().catch(() => undefined);\n throw failure;\n }\n }\n else {\n // No terminal was allocated; only the ordinary managed owner exists.\n await writeFile(join(directory, 'stop'), 'stop', { mode: 0o600 });\n owner.terminate();\n if (!(await owner.waitForExit()))\n throw new ProcessCleanupUnconfirmedError();\n await rm(directory, { recursive: true, force: true });\n }\n if (spec.signal?.aborted)\n throw error;\n throw new WindowsAccountTerminalError();\n }\n}\n//# sourceMappingURL=windows-account-terminal.js.map","import { readClaudeOwnRoute, claudeNativeSettingsArguments, claudeRouteStatusArguments, claudeRouteIdentity, ClaudeOwnRouteError, } from \"./claude-own-route.js\";\nimport { isExtendedCli } from \"./extended-adapters.js\";\nimport { nativeAgyAccountIdentity } from \"./agy-windows-account.js\";\nimport { firstPartyEnvironment, MimoConfigurationError } from \"./first-party-models.js\";\nimport { randomUUID } from 'node:crypto';\nimport { StringDecoder } from 'node:string_decoder';\nimport { stripVTControlCharacters } from 'node:util';\nimport { resolveCliExecutable } from \"./adapters.js\";\nimport { projectDirectory, ProcessCleanupUnconfirmedError, } from \"./process.js\";\nimport { CLI_IDS } from \"../shared/types.js\";\nimport { accountEmail, } from \"./account-identity.js\";\nimport { readCodexAccount } from \"./codex-account.js\";\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { zcodeGrokAccountLaunch, zcodeGrokAccountStatus, zcodeGrokInstruction, ZCodeAccountCapabilityError, } from \"./zcode-grok-accounts.js\";\nimport { readPiOmpAccount, readOpenCodeAccount, prepareOpenCodeAccount } from \"./harness-opencode-accounts.js\";\nimport { prepareHermesAccount, readHermesAccount, listHermesAccountSources } from \"./hermes-accounts.js\";\nimport { listPiOmpAccountSources } from \"./pi-omp-native.js\";\nimport { verifyHermesExecutable, HermesExecutableError } from \"./hermes-installation.js\";\nimport { preparePiOmpAccountTerminal } from \"./pi-omp-accounts.js\";\nimport { readKimiAccount, KIMI_MANAGE_LOGIN, prepareKimiAccountDirectory } from \"./kimi-accounts.js\";\nimport { readMimoAccount } from \"./mimo-configuration.js\";\nimport { prepareMimoAccountTerminal } from \"./first-party-account-context.js\";\nimport { spawnAccountTerminal, WindowsAccountTerminalError } from \"./windows-account-terminal.js\";\nimport { WindowsCliInstallationError } from \"./windows-cli-installation.js\";\nimport { effectiveHermesHome } from \"./hermes-account-context.js\";\nimport { ensureHermesNousFresh, HermesRenewalError, reserveHermesAccount } from \"./hermes-renewal.js\";\nconst STATUS_TIMEOUT = 10_000;\nconst STARTUP_TIMEOUT = 30_000;\nconst TERMINAL_TIMEOUT = 30 * 60_000;\nconst MAX_OUTPUT_BYTES = 256 * 1024;\nconst MAX_FRAMES = 512;\nconst MAX_INPUT_BYTES = 16 * 1024;\nconst ACTIONS = ['login', 'logout', 'manage'];\nconst validateCli = (cli) => {\n if (!CLI_IDS.includes(cli))\n throw new Error('不支持的 CLI');\n};\nconst instructionFor = (cli, action) => {\n if (cli === 'zcode' || cli === 'grok')\n return zcodeGrokInstruction(cli, action);\n if (cli === 'antigravity')\n return action === 'manage'\n ? '在 Antigravity 原生终端中使用 /login 登录,或 /logout 退出。'\n : `在 Antigravity 原生终端中输入 /${action} 并按 Enter。`;\n if (cli === 'kimi' && action !== 'login')\n return action === 'logout'\n ? '在 Kimi 原生终端中输入 /logout 并按 Enter,再选择要退出的提供商。'\n : '在 Kimi 原生终端中使用 /login 或 /logout 管理提供商与账号。';\n if (action === 'manage')\n return '在原生 CLI 中管理账号。';\n return action === 'login'\n ? '按 CLI 原生提示完成登录;需要浏览器授权时由 CLI 打开浏览器。'\n : '按 CLI 原生流程退出登录。';\n};\nconst actionsFor = (cli, config) => {\n if (cli === 'claude')\n return [\n {\n id: 'login',\n label: '官方登录 / 切换账号',\n description: '打开 Claude 原生官方登录;保留本地代理设置。',\n },\n { id: 'logout', label: '退出官方账号', description: '仅退出 Claude 官方账号;本地代理设置保留。' },\n { id: 'manage', label: '官方账号终端', description: '打开 Claude 官方账号原生终端。' },\n ];\n if (cli === 'pi' || cli === 'omp' || cli === 'hermes')\n return [\n { id: 'login', label: '登录设置', description: '打开原生终端登录界面,选择提供商后由你完成授权。' },\n { id: 'logout', label: '退出登录', description: '选择当前账号来源,在原生菜单中退出或移除凭据。' },\n { id: 'manage', label: '账号终端', description: '打开原生终端管理账号。' },\n ];\n return ACTIONS.map((id) => ({\n id,\n label: id === 'login'\n ? cli === 'opencode' || cli === 'kimi'\n ? '登录设置'\n : '登录 / 切换账号'\n : id === 'logout'\n ? '退出登录'\n : '账号终端',\n description: instructionFor(cli, id),\n }));\n};\n/** Only commands verified against the installed CLIs. Never send a prompt/slash command. */\nconst argumentsFor = (cli, action) => {\n if (cli === 'antigravity' || action === 'manage' || (cli === 'kimi' && action === 'logout'))\n return [];\n if (cli === 'codex' || cli === 'kimi')\n return [action];\n return ['auth', action];\n};\n/** No raw command output, exception text, account tokens, or key prefixes cross this boundary. */\nfunction summarize(cli, raw, exitCode) {\n const text = stripVTControlCharacters(raw);\n if (exitCode !== 0 &&\n /\\b(?:authentication failed|invalid (?:api key|credentials|token)|(?:credentials|token) (?:have |has )?expired|401\\s+Unauthorized)\\b/i.test(text))\n return { state: 'unauthenticated', summary: 'CLI 报告认证失效,请重新登录或检查凭据' };\n if (cli === 'codex') {\n if (exitCode === 0 && /\\bLogged in using ChatGPT\\b/.test(text))\n return {\n state: 'authenticated',\n summary: '已通过 ChatGPT 登录',\n authMethod: 'oauth',\n verification: 'cli',\n };\n if (exitCode === 0 && /\\bLogged in using (?:an )?API key\\b/i.test(text))\n return { state: 'authenticated', summary: 'API 登录', authMethod: 'api', verification: 'cli' };\n if (/^Not logged in\\s*$/m.test(text))\n return { state: 'unconfigured', summary: '尚未登录' };\n }\n else if (cli === 'claude') {\n try {\n const value = JSON.parse(text);\n if (value.loggedIn === false)\n return { state: 'unconfigured', summary: '尚未登录' };\n if (exitCode === 0 && value.loggedIn === true) {\n // Claude's installed auth/status implementation only returns email for\n // claude.ai sessions. Environment OAuth tokens do not identify an account.\n const oauth = value.authMethod === 'claude.ai';\n const api = value.authMethod === 'api_key' || value.authMethod === 'api_key_helper';\n if (value.authMethod === 'oauth_token')\n return { state: 'configured', summary: 'CLI 已配置令牌,账号类型待确认', verification: 'cli' };\n return {\n state: 'authenticated',\n summary: api ? 'API 登录' : oauth ? '已通过 OAuth 登录' : 'CLI 报告已登录',\n authMethod: api ? 'api' : oauth ? 'oauth' : undefined,\n accountLabel: value.authMethod === 'claude.ai' ? accountEmail(value.email) : undefined,\n verification: 'cli',\n };\n }\n }\n catch {\n return { state: 'unavailable', summary: '账号状态响应无法解析,请在账号终端检查' };\n }\n }\n else if (cli === 'mimo') {\n if (exitCode === 0 && /Provider: MiMo\\b/.test(text)) {\n // Installed whoami source emits User ID only in the type === 'api'\n // metadata branch. Never expose that metadata or a key prefix for API auth.\n if (/\\bType:\\s*api\\b|\\bUser ID:/.test(text))\n return {\n state: 'authenticated',\n summary: 'API 登录',\n authMethod: 'api',\n verification: 'local',\n };\n return { state: 'configured', summary: '已配置 MiMo 账号', verification: 'cli' };\n }\n if (/Not logged in\\. Run `mimo auth login` to log in\\./.test(text))\n return { state: 'unconfigured', summary: '尚未登录 MiMo' };\n }\n if (exitCode !== 0)\n return { state: 'unavailable', summary: 'CLI 账号状态查询失败,请在账号终端检查' };\n return { state: 'unknown', summary: '登录状态未知,请打开账号终端' };\n}\nfunction abortable(promise, signal) {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const cancel = () => reject(signal.reason);\n signal.addEventListener('abort', cancel, { once: true });\n promise.then(resolve, reject).finally(() => signal.removeEventListener('abort', cancel));\n });\n}\n/** User-only auth processes. Only allowlisted identity metadata leaves the Host. */\nexport class AccountManager {\n backend;\n config;\n identity;\n sessions = new Map();\n reserved = new Set();\n unsafeQueries = new Set();\n unsafeTerminals = new Map();\n statusQueries = new Map();\n pending = new Set();\n parents = new Map();\n parentClosings = new Map();\n controller = new AbortController();\n closing;\n constructor(backend, config, identity = nativeAgyAccountIdentity(backend, config)) {\n this.backend = backend;\n this.config = config;\n this.identity = identity;\n }\n isBusy(cli) {\n validateCli(cli);\n return this.reserved.has(cli) || this.unsafeQueries.has(cli) || this.unsafeTerminals.has(cli);\n }\n async status(cli, cwd, signal) {\n validateCli(cli);\n if (signal.aborted || this.controller.signal.aborted)\n throw new Error('账号状态查询已取消');\n const directory = projectDirectory(cwd);\n const key = JSON.stringify([cli, directory]);\n let query = this.statusQueries.get(key);\n if (query && [...query.subscribers].every((reader) => reader.signal.aborted))\n query.controller.abort();\n // The abandoned process still owns cleanup; a new reader must not overlap it.\n if (query?.controller.signal.aborted) {\n await abortable(query.operation.catch(() => undefined), signal);\n return this.status(cli, directory, signal);\n }\n if (!query) {\n const controller = new AbortController();\n query = {\n cli,\n controller,\n operation: this.track(this.readStatus(cli, directory, controller.signal)),\n subscribers: new Set(),\n settled: false,\n };\n this.statusQueries.set(key, query);\n const current = query;\n void current.operation\n .finally(() => {\n current.settled = true;\n if (this.statusQueries.get(key) === current)\n this.statusQueries.delete(key);\n })\n .catch(() => undefined);\n }\n const reader = { signal };\n query.subscribers.add(reader);\n try {\n // Share only the running read, never a completed login/authorization result.\n return await abortable(query.operation, signal);\n }\n catch (error) {\n if (signal.aborted)\n throw new Error('账号状态查询已取消');\n throw error;\n }\n finally {\n query.subscribers.delete(reader);\n if (!query.subscribers.size && !query.settled) {\n query.controller.abort();\n await query.operation.catch(() => undefined);\n }\n }\n }\n async readStatus(cli, cwd, signal) {\n if (this.unsafeTerminals.has(cli))\n return {\n cli,\n installed: true,\n state: 'unavailable',\n summary: '账号终端尚未确认完全退出,请重启应用',\n actions: [],\n };\n if (this.unsafeQueries.has(cli))\n return {\n cli,\n installed: true,\n state: 'unavailable',\n summary: '账号查询未完成清理,请重启应用',\n actions: [],\n };\n const timer = new AbortController();\n const timeout = setTimeout(() => timer.abort(), STATUS_TIMEOUT);\n timeout.unref?.();\n const control = AbortSignal.any([signal, this.controller.signal, timer.signal]);\n let installed = false;\n try {\n const executable = await resolveCliExecutable(cli, this.backend, this.config, control);\n installed = true;\n control.throwIfAborted();\n if (cli === 'mimo')\n return {\n cli,\n installed,\n ...(await readMimoAccount(control)),\n actions: this.backend.spawnTerminal ? actionsFor(cli, this.config) : [],\n };\n if (cli === 'hermes') {\n await verifyHermesExecutable(executable, control);\n const local = await readHermesAccount(this.config, control);\n if (local.logins?.some((login) => login.providerLabel === 'Nous') ||\n local.summary === 'Hermes 登录已保存,等待自动续期')\n await ensureHermesNousFresh({\n home: effectiveHermesHome(this.config), executable,\n backend: this.backend, signal: control, graceMs: this.config.graceMs,\n });\n }\n if (isExtendedCli(cli)) {\n const identity = await abortable(cli === 'zcode' || cli === 'grok'\n ? zcodeGrokAccountStatus(cli, this.config, control)\n : cli === 'opencode'\n ? readOpenCodeAccount(this.config, control)\n : cli === 'hermes'\n ? readHermesAccount(this.config, control)\n : readPiOmpAccount(cli, this.config, control), control);\n const sources = cli === 'pi' || cli === 'omp'\n ? await listPiOmpAccountSources(cli, this.config.stateDirectory, control)\n : cli === 'hermes'\n ? await listHermesAccountSources(this.config, control)\n : undefined;\n return {\n cli,\n installed,\n ...identity,\n actions: actionsFor(cli, this.config)\n .map((item) => (item.id === 'logout' && sources ? { ...item, sources } : item))\n .filter((item) => item.target === 'models' || this.backend.spawnTerminal),\n };\n }\n if (cli === 'antigravity') {\n const identity = await abortable(this.identity(cli, control), control);\n return {\n cli,\n installed,\n ...(identity ?? {\n state: 'unknown',\n summary: '已安装,登录状态未知',\n }),\n actions: this.backend.spawnTerminal ? actionsFor(cli, this.config) : [],\n };\n }\n if (cli === 'codex') {\n // One effective-store read handles file/keyring accounts and display\n // identity. Older servers fall back to the native status command below.\n const identity = await readCodexAccount(this.backend, this.config, executable, cwd, control);\n if (identity)\n return {\n cli,\n installed,\n ...identity,\n actions: this.backend.spawnTerminal ? actionsFor(cli, this.config) : [],\n };\n }\n const claudeRoute = cli === 'claude' ? await readClaudeOwnRoute(cwd, control) : undefined;\n const argv = cli === 'codex'\n ? ['login', 'status']\n : cli === 'claude'\n ? ['auth', 'status', '--json']\n : cli === 'kimi'\n ? ['provider', 'list', '--json']\n : ['auth', 'whoami'];\n const child = this.backend.spawn({\n argv: claudeRoute ? claudeRouteStatusArguments(executable, claudeRoute) : [executable, ...argv],\n env: firstPartyEnvironment(cli),\n cwd,\n stdio: { stdin: 'ignore', stdout: 'pipe', stderr: 'pipe' },\n graceMs: this.config.graceMs,\n signal: control,\n });\n void child.done.catch(() => undefined);\n let raw = '', bytes = 0;\n const read = async (stream) => {\n if (!stream)\n return;\n const decoder = new StringDecoder('utf8');\n for await (const chunk of stream) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n bytes += buffer.byteLength;\n if (bytes > 64 * 1024)\n throw new Error('状态响应超过限制');\n raw += decoder.write(buffer);\n }\n raw += decoder.end();\n };\n const readers = [read(child.stdout), read(child.stderr)];\n try {\n const [outcome] = await abortable(Promise.all([child.done, ...readers]), control);\n const status = claudeRoute\n ? claudeRouteIdentity(claudeRoute, raw, outcome.exitCode)\n : cli === 'kimi' && outcome.exitCode === 0\n ? await readKimiAccount(raw, control)\n : summarize(cli, raw, outcome.exitCode);\n return {\n cli,\n installed,\n ...status,\n actions: this.backend.spawnTerminal\n ? actionsFor(cli, this.config).map((item) => cli === 'kimi' && item.id === 'login' && status.state === 'authenticated'\n ? { ...item, label: '管理登录', description: '在原生终端管理 Kimi 登录' }\n : item)\n : [],\n };\n }\n finally {\n try {\n child.terminate();\n if (!(await child.waitForExit()))\n throw new ProcessCleanupUnconfirmedError();\n }\n catch {\n throw new ProcessCleanupUnconfirmedError();\n }\n await Promise.allSettled([child.done, ...readers]);\n raw = '';\n }\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError) {\n this.unsafeQueries.add(cli);\n return {\n cli,\n installed,\n state: 'unavailable',\n summary: '账号查询未完成清理,请重启应用',\n actions: [],\n };\n }\n if (signal.aborted || this.controller.signal.aborted)\n throw new Error('账号状态查询已取消');\n const code = error?.code;\n if (error instanceof WindowsCliInstallationError)\n return { cli, installed: error.installed, state: 'unavailable', summary: error.message, actions: [] };\n if (error instanceof ClaudeOwnRouteError)\n return {\n cli,\n installed,\n state: 'unavailable',\n summary: error.message,\n actions: this.backend.spawnTerminal ? actionsFor(cli, this.config) : [],\n };\n if (error instanceof MimoConfigurationError)\n return { cli, installed, state: 'unavailable', summary: error.message, actions: [] };\n if (error instanceof HermesExecutableError)\n return { cli, installed, state: 'unavailable', summary: error.message, actions: [] };\n if (error instanceof HermesRenewalError)\n return {\n cli, installed, state: error.state === 'relogin' ? 'unauthenticated' : 'unavailable',\n verification: 'local', summary: error.message, actions: actionsFor(cli, this.config),\n };\n if (code === 'CLI_LAUNCHER_UNSUPPORTED')\n return {\n cli,\n installed: true,\n state: 'unavailable',\n summary: 'CLI 启动入口无法确认,请配置原生程序或固定 Node/Bun 入口',\n actions: [],\n };\n if (code === 'CLI_IDENTITY_MISMATCH')\n return {\n cli,\n installed: true,\n state: 'unavailable',\n summary: `${cli === 'omp' ? 'OMP' : 'Pi'} 执行入口身份不匹配,请检查该 CLI 的安装和路径`,\n actions: [],\n };\n const failed = installed ||\n this.hasCustomExecutable(cli) ||\n timer.signal.aborted ||\n (!!code && code !== 'ENOENT' && code !== 'ENOTDIR');\n return {\n cli,\n installed,\n state: failed ? 'unavailable' : 'unconfigured',\n summary: installed\n ? '账号状态暂不可用,可打开账号终端检查'\n : this.hasCustomExecutable(cli)\n ? 'CLI 执行路径配置失败,请检查可执行路径'\n : timer.signal.aborted\n ? 'CLI 安装探测超时,请刷新重试'\n : failed\n ? 'CLI 安装状态读取失败,请检查安装'\n : '尚未安装 CLI,请检查安装',\n actions: installed && this.backend.spawnTerminal ? actionsFor(cli, this.config) : [],\n };\n }\n finally {\n clearTimeout(timeout);\n }\n }\n hasCustomExecutable(cli) {\n if (cli === 'antigravity')\n return this.config.executable !== 'agy';\n if (cli === 'harness')\n return false;\n const configured = this.config[`${cli}Executable`];\n return !!configured && configured !== cli;\n }\n start(parent, cli, action, cwd, signal, source, provider) {\n validateCli(cli);\n if (!ACTIONS.includes(action))\n throw new Error('不支持的账号操作');\n if (source !== undefined &&\n (!['native', 'plugin'].includes(source) ||\n action !== 'logout' ||\n !['pi', 'omp', 'hermes'].includes(cli)))\n throw new Error('不支持的账号来源');\n if (provider !== undefined &&\n (cli !== 'zcode' ||\n action !== 'login' ||\n source !== undefined ||\n !['bigmodel', 'zai'].includes(provider)))\n throw new Error('不支持的 ZCode 授权来源');\n if (!parent || parent.length > 512)\n throw new Error('无效的父会话');\n this.controller.signal.throwIfAborted();\n signal.throwIfAborted();\n const capability = actionsFor(cli, this.config).find((item) => item.id === action);\n if (!capability || capability.target === 'models')\n throw new Error('此版本 CLI 未提供终端登录或账号管理入口');\n if (!this.backend.spawnTerminal)\n throw new Error('当前宿主不支持交互终端');\n if (this.unsafeTerminals.has(cli))\n throw new Error('账号终端尚未确认完全退出,请重启应用');\n if (this.unsafeQueries.has(cli))\n throw new ProcessCleanupUnconfirmedError();\n if (this.reserved.has(cli))\n throw new Error('此 CLI 已有账号终端,请先关闭后重试');\n const directory = projectDirectory(cwd);\n this.reserved.add(cli);\n for (const query of this.statusQueries.values())\n if (query.cli === cli)\n query.controller.abort();\n let scope = this.parents.get(parent);\n if (!scope) {\n scope = { controller: new AbortController(), pending: new Set() };\n this.parents.set(parent, scope);\n }\n const operation = this.track(this.startSession(parent, cli, action, directory, signal, scope, source, provider));\n scope.pending.add(operation);\n void operation.finally(() => scope.pending.delete(operation)).catch(() => undefined);\n return operation;\n }\n async startSession(parent, cli, action, cwd, signal, scope, source, provider) {\n const timeout = new AbortController();\n const timer = setTimeout(() => timeout.abort(), STARTUP_TIMEOUT);\n timer.unref?.();\n const startup = AbortSignal.any([signal, scope.controller.signal, this.controller.signal, timeout.signal]);\n // Provider cancellation belongs to allocation, not the interactive login's\n // lifetime. A completed login terminal must not inherit this request/timer.\n const allocationControl = new AbortController();\n const cancelAllocation = () => allocationControl.abort();\n startup.addEventListener('abort', cancelAllocation, { once: true });\n let session;\n let allocation;\n let release;\n let instruction = instructionFor(cli, action);\n try {\n const executable = await resolveCliExecutable(cli, this.backend, this.config, startup);\n if (cli === 'hermes')\n await verifyHermesExecutable(executable, startup);\n startup.throwIfAborted();\n let launch = {\n argv: [executable, ...argumentsFor(cli, action)],\n env: firstPartyEnvironment(cli),\n cwd,\n };\n if (cli === 'claude') {\n const claudeAccountRoute = await readClaudeOwnRoute(cwd, startup);\n startup.throwIfAborted();\n // Login/logout always address the native official account; proxy settings remain untouched.\n launch.argv = [\n executable,\n ...claudeNativeSettingsArguments(claudeAccountRoute.configDirectory),\n ...argumentsFor(cli, action),\n ...(action === 'login' ? ['--claudeai'] : []),\n ];\n instruction =\n action === 'logout'\n ? '退出 Claude 官方账号;本地代理设置保留。'\n : '在原生终端登录 Claude 官方账号;本地代理设置保留。';\n }\n else if (cli === 'kimi') {\n if (action === 'login') {\n const current = await this.readStatus(cli, cwd, startup);\n startup.throwIfAborted();\n if (current.state === 'authenticated' && current.authMethod === 'oauth') {\n launch.argv = [executable];\n instruction = KIMI_MANAGE_LOGIN;\n }\n }\n const prepared = await prepareKimiAccountDirectory(this.config.stateDirectory ??\n join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), startup);\n launch.cwd = prepared.cwd;\n release = prepared.cleanup;\n if (action !== 'login')\n instruction = `若出现 Trust 提示,请自行确认此空账号目录;${instruction}`;\n }\n else if (cli === 'mimo') {\n const prepared = await prepareMimoAccountTerminal(executable, action, this.config.stateDirectory ??\n join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'), startup);\n launch = prepared;\n release = prepared.cleanup;\n }\n else if (cli === 'zcode' || cli === 'grok') {\n const prepared = await zcodeGrokAccountLaunch(cli, action, executable, this.config, this.backend, startup, { loginProvider: provider });\n launch = prepared;\n instruction = prepared.instruction;\n }\n else if (cli === 'pi' || cli === 'omp') {\n const prepared = await preparePiOmpAccountTerminal({\n cli,\n action,\n source,\n executable,\n project: cwd,\n stateDirectory: this.config.stateDirectory ??\n join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now'),\n config: this.config,\n signal: startup,\n });\n launch = prepared;\n instruction = prepared.instruction;\n release = prepared.cleanup;\n }\n else if (cli === 'hermes') {\n const oldHome = effectiveHermesHome(this.config);\n const releases = [await reserveHermesAccount(oldHome, startup)];\n release = () => { for (const free of releases)\n free(); };\n const prepared = await prepareHermesAccount(action, executable, cwd, this.config, startup, source);\n const cleanup = release;\n release = async () => { await prepared.cleanup(); await cleanup(); };\n const selectedHome = effectiveHermesHome(this.config);\n if (selectedHome !== oldHome)\n releases.push(await reserveHermesAccount(selectedHome, startup));\n launch = prepared;\n instruction = prepared.instruction;\n }\n else if (cli === 'opencode') {\n const prepared = await prepareOpenCodeAccount(executable, action, this.config, startup);\n launch = prepared;\n instruction = prepared.instruction;\n release = prepared.cleanup;\n }\n startup.throwIfAborted();\n allocation = spawnAccountTerminal(this.backend, {\n ...launch,\n rows: 24,\n cols: 80,\n terminalType: 'xterm-256color',\n graceMs: this.config.graceMs,\n signal: allocationControl.signal,\n }).then(async (terminal) => {\n void terminal.done.catch(() => undefined);\n session = {\n id: randomUUID(),\n parent,\n scope,\n cli,\n terminal,\n frames: [],\n bytes: 0,\n seq: 0,\n state: 'running',\n stopping: false,\n changed: new Set(),\n output: Promise.resolve(),\n release,\n };\n this.sessions.set(session.id, session);\n this.emit(session, { status: 'running' });\n session.output = this.readTerminal(session);\n void session.output.catch(() => undefined);\n // Even if an uncooperative provider ignores cancellation, a late PTY\n // is adopted and cleaned up before releasing its CLI reservation.\n if (startup.aborted) {\n await this.finish(session, 'closed', '启动已取消');\n startup.throwIfAborted();\n }\n return session;\n }, async (error) => {\n try {\n if (!(error instanceof ProcessCleanupUnconfirmedError))\n await release?.();\n }\n finally {\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.unsafeTerminals.set(cli, parent);\n else\n this.reserved.delete(cli);\n }\n throw error;\n });\n this.track(allocation);\n scope.pending.add(allocation);\n const pendingAllocation = allocation;\n void allocation.finally(() => scope.pending.delete(pendingAllocation)).catch(() => undefined);\n session = await abortable(allocation, startup);\n if (startup.aborted) {\n await this.finish(session, 'closed', '启动已取消');\n startup.throwIfAborted();\n }\n const published = session;\n session.deadline = setTimeout(() => {\n void this.finish(published, 'closed', '账号终端已达到 30 分钟上限,请重新打开').catch(() => undefined);\n }, TERMINAL_TIMEOUT);\n session.deadline.unref?.();\n session.attachDeadline = setTimeout(() => {\n void this.finish(published, 'closed', '账号终端未连接,已自动关闭').catch(() => undefined);\n }, 30_000);\n session.attachDeadline.unref?.();\n void session.terminal.done\n .then((outcome) => this.finish(published, outcome.exitCode === 0 ? 'closed' : 'failed', outcome.exitCode === 0\n ? '账号终端已结束'\n : Number.isInteger(outcome.exitCode)\n ? `账号终端异常退出(退出码 ${outcome.exitCode}),请在系统终端检查该 CLI 后重试`\n : '账号终端连接已结束,未返回退出码;请在系统终端检查该 CLI 后重试'), () => this.finish(published, 'failed', '账号终端连接失败,请重新打开'))\n .catch(() => undefined);\n return { id: session.id, instruction };\n }\n catch (error) {\n // An allocation still in flight may own a process already; never permit a\n // second login until its late handle/rejection establishes cleanup.\n if (!session && !allocation) {\n try {\n await release?.();\n }\n finally {\n this.reserved.delete(cli);\n }\n }\n if (session && startup.aborted && !session.cleanup)\n await this.finish(session, 'closed', '启动已取消').catch(() => undefined);\n if (error instanceof Error && error.message === '此 CLI 已有账号终端,请先关闭后重试')\n throw error;\n if (error instanceof ProcessCleanupUnconfirmedError)\n throw new Error('账号终端尚未确认完全退出,请重启应用');\n if (timeout.signal.aborted)\n throw new Error('账号终端启动超时,正在回收启动过程;请稍后重试');\n if (error instanceof ZCodeAccountCapabilityError)\n throw error;\n if (error instanceof WindowsAccountTerminalError)\n throw error;\n if (error instanceof WindowsCliInstallationError)\n throw error;\n if (error instanceof HermesExecutableError)\n throw error;\n if (error instanceof MimoConfigurationError)\n throw error;\n if (error?.code === 'CLI_IDENTITY_MISMATCH')\n throw new Error(`${cli === 'omp' ? 'OMP' : 'Pi'} 执行入口身份不匹配,请检查该 CLI 的安装和路径`);\n throw new Error(session || startup.aborted\n ? '账号终端启动已取消或清理失败,请关闭设置后重试'\n : '无法启动账号终端,请检查 CLI 安装');\n }\n finally {\n clearTimeout(timer);\n startup.removeEventListener('abort', cancelAllocation);\n }\n }\n async readTerminal(session) {\n const decoder = new StringDecoder('utf8');\n try {\n for await (const chunk of session.terminal.output) {\n const text = typeof chunk === 'string' ? chunk : decoder.write(chunk);\n for (let offset = 0; offset < text.length; offset += 4096)\n this.emit(session, { data: text.slice(offset, offset + 4096) });\n }\n const tail = decoder.end();\n if (tail)\n this.emit(session, { data: tail });\n }\n catch {\n // Do not await from this reader: finish waits for the reader to settle.\n void this.finish(session, 'failed', '账号终端输出中断,请重新打开').catch(() => undefined);\n }\n }\n emit(session, frame) {\n const entry = { ...frame, seq: ++session.seq };\n session.frames.push(entry);\n session.bytes += Buffer.byteLength(entry.data ?? '');\n while (session.bytes > MAX_OUTPUT_BYTES || session.frames.length > MAX_FRAMES) {\n const removed = session.frames.shift();\n session.bytes -= Buffer.byteLength(removed.data ?? '');\n }\n for (const notify of session.changed)\n notify();\n session.changed.clear();\n }\n owned(parent, id) {\n const session = this.sessions.get(id);\n if (!session || session.parent !== parent)\n throw new Error('账号终端不存在或不属于当前会话');\n return session;\n }\n async *watch(parent, id, signal) {\n const session = this.owned(parent, id);\n clearTimeout(session.attachDeadline);\n let seq = 0;\n try {\n while (!signal.aborted) {\n const frames = session.frames.filter((frame) => frame.seq > seq);\n if (frames.length && frames[0].seq > seq + 1)\n yield { seq: frames[0].seq - 1, message: '较早的终端输出已从内存释放' };\n for (const frame of frames) {\n seq = frame.seq;\n yield frame;\n }\n if (session.state !== 'running' || signal.aborted)\n return;\n await new Promise((resolve) => {\n const wake = () => {\n signal.removeEventListener('abort', wake);\n session.changed.delete(wake);\n resolve();\n };\n session.changed.add(wake);\n signal.addEventListener('abort', wake, { once: true });\n if (signal.aborted || session.seq > seq || session.state !== 'running')\n wake();\n });\n }\n }\n finally {\n if (session.state === 'running')\n await this.finish(session, 'closed', '账号终端连接已关闭');\n }\n }\n async write(parent, id, data) {\n const session = this.owned(parent, id);\n if (typeof data !== 'string' || Buffer.byteLength(data) > MAX_INPUT_BYTES)\n throw new Error('单次终端输入超过限制');\n if (session.state !== 'running' || session.stopping)\n throw new Error('账号终端已关闭');\n try {\n await session.terminal.write(data);\n }\n catch {\n throw new Error('无法写入账号终端,请重新打开');\n }\n }\n async resize(parent, id, cols, rows) {\n const session = this.owned(parent, id);\n if (!Number.isInteger(cols) ||\n !Number.isInteger(rows) ||\n cols < 10 ||\n cols > 500 ||\n rows < 5 ||\n rows > 200)\n throw new Error('无效的终端尺寸');\n if (session.state !== 'running' || session.stopping)\n return;\n try {\n await session.terminal.resize(cols, rows);\n }\n catch {\n throw new Error('无法调整账号终端尺寸,请重新打开');\n }\n }\n async stop(parent, id) {\n await this.finish(this.owned(parent, id), 'closed', '账号终端已关闭');\n }\n /** Close one Agent lifetime, including startup; a later Agent with the same ID gets a fresh scope. */\n closeParent(parent) {\n const scope = this.parents.get(parent);\n const previous = this.parentClosings.get(parent);\n if (!scope && previous)\n return previous;\n if (scope) {\n this.parents.delete(parent);\n scope.controller.abort();\n }\n // Capture this generation before yielding. Never close a newly reactivated\n // parent merely because its ID equals the one whose disposal is in flight.\n const captured = [...this.sessions.values()].filter((session) => session.parent === parent && (!scope || session.scope === scope || session.state === 'failed'));\n const operation = (async () => {\n await Promise.allSettled(scope ? [...scope.pending] : []);\n const owned = new Set(captured);\n if (scope)\n for (const session of this.sessions.values())\n if (session.scope === scope)\n owned.add(session);\n const cleanup = [...owned].map(async (session) => {\n await this.finish(session, 'closed', '主会话已关闭');\n clearTimeout(session.expiry);\n session.frames.length = 0;\n this.sessions.delete(session.id);\n });\n if (previous)\n cleanup.push(previous);\n const results = await Promise.allSettled(cleanup);\n if (results.some((result) => result.status === 'rejected') ||\n [...this.unsafeTerminals.values()].includes(parent))\n throw new Error('此主会话的账号终端尚未确认完全退出');\n })();\n this.parentClosings.set(parent, operation);\n void operation\n .finally(() => {\n if (this.parentClosings.get(parent) === operation)\n this.parentClosings.delete(parent);\n })\n .catch(() => undefined);\n return operation;\n }\n finish(session, state, message) {\n if (session.cleanup)\n return session.cleanup;\n session.stopping = true;\n clearTimeout(session.deadline);\n clearTimeout(session.attachDeadline);\n session.cleanup = (async () => {\n try {\n await session.terminal.terminate();\n await session.output;\n await session.release?.();\n session.state = state;\n this.emit(session, { status: state, message, cleanupConfirmed: true });\n this.reserved.delete(session.cli);\n session.expiry = setTimeout(() => {\n session.frames.length = 0;\n this.sessions.delete(session.id);\n }, 60_000);\n session.expiry.unref?.();\n const retained = [...this.sessions.values()].filter((item) => item.expiry !== undefined);\n for (const stale of retained.slice(0, Math.max(0, retained.length - 16))) {\n clearTimeout(stale.expiry);\n stale.frames.length = 0;\n this.sessions.delete(stale.id);\n }\n }\n catch {\n session.state = 'failed';\n this.emit(session, { status: 'failed', message: '账号终端清理失败,请重试关闭' });\n session.cleanup = undefined;\n throw new Error('账号终端尚未确认完全退出');\n }\n })();\n return session.cleanup;\n }\n track(operation) {\n this.pending.add(operation);\n void operation.finally(() => this.pending.delete(operation)).catch(() => undefined);\n return operation;\n }\n close() {\n if (this.closing)\n return this.closing;\n this.controller.abort();\n this.closing = (async () => {\n await Promise.allSettled([...this.pending]);\n await Promise.allSettled([...this.parentClosings.values()]);\n const results = await Promise.allSettled([...this.sessions.values()].map((session) => this.finish(session, 'closed', '插件已关闭')));\n for (const session of this.sessions.values()) {\n clearTimeout(session.deadline);\n clearTimeout(session.attachDeadline);\n clearTimeout(session.expiry);\n session.frames.length = 0;\n }\n const failures = results.filter((result) => result.status === 'rejected');\n if (failures.length || this.unsafeTerminals.size)\n throw new Error('部分账号终端尚未确认完全退出');\n this.sessions.clear();\n this.reserved.clear();\n this.parents.clear();\n })();\n return this.closing;\n }\n}\n//# sourceMappingURL=accounts.js.map","import { assembleContextFor } from '@deepseek-ai/dsh-agent';\nimport { createUserMessage } from '@deepseek-ai/dsh-llm';\nimport { CLI_IDS, CLI_LABELS, RETIRED_HARNESS_NOTICE } from \"../shared/types.js\";\n/** One source for tool normalization, natural-language hints and model guidance. */\nexport const CLI_ALIASES = {\n antigravity: ['agy', 'antigravity'],\n codex: ['codex'],\n claude: ['claude', 'claude code'],\n kimi: ['kimi', 'kimi code'],\n mimo: ['mimo', 'mimo code'],\n zcode: ['zcode', 'glm', 'zhipu', '智谱'],\n grok: ['grok', 'grok build'],\n omp: ['omp', 'oh my pi', 'oh-my-pi'],\n pi: ['pi', 'pi coding agent'],\n hermes: ['hermes', 'hermes agent', 'harmes'],\n opencode: ['opencode', 'open code'],\n};\nconst normalizeName = (name) => name\n .normalize('NFKC')\n .trim()\n .toLowerCase()\n .replace(/\\s*(?:cli|命令行)\\s*$/u, '')\n .replace(/[\\s_-]+/gu, '');\nconst names = CLI_IDS.flatMap((cli) => CLI_ALIASES[cli].map((name) => ({ cli, name })));\nconst exactNames = new Map(names.map(({ cli, name }) => [normalizeName(name), { cli, name }]));\n/** A single insertion, deletion or substitution; short CLI names never use it. */\nfunction oneCharacterApart(left, right) {\n if (Math.abs(left.length - right.length) > 1)\n return false;\n let a = 0;\n let b = 0;\n let changes = 0;\n while (a < left.length && b < right.length) {\n if (left[a] === right[b]) {\n a++;\n b++;\n }\n else {\n if (++changes > 1)\n return false;\n if (left.length <= right.length)\n b++;\n if (left.length >= right.length)\n a++;\n }\n }\n return changes + (left.length - a) + (right.length - b) === 1;\n}\n/** Explicit tool selectors may be aliases; unresolved selectors never select a default. */\nexport function resolveCliName(name) {\n if (typeof name !== 'string' || name.length > 80)\n return { status: 'unknown', candidates: [] };\n const normalized = normalizeName(name);\n if (normalized === 'harness' || normalized === 'deepseekharness')\n return { status: 'retired', candidates: [] };\n const exact = exactNames.get(normalized);\n if (exact)\n return {\n status: 'resolved',\n cli: exact.cli,\n match: normalized === exact.cli ? 'canonical' : 'alias',\n matchedName: exact.name,\n };\n const annotated = /^([^()]+)\\(([^()]+)\\)$/u.exec(normalized);\n if (annotated) {\n const primary = resolveCliName(annotated[1]);\n const alias = resolveCliName(annotated[2]);\n if (primary.status === 'resolved' && alias.status === 'resolved' && primary.cli === alias.cli)\n return primary;\n return {\n status: 'ambiguous',\n candidates: [\n ...new Set([primary, alias].flatMap((result) => result.status === 'resolved' ? [result.cli] : result.candidates)),\n ],\n };\n }\n const parts = name.split(/[,,、/;;+]|\\s+(?:and|or)\\s+|[和与或]/iu).filter((part) => part.trim());\n if (parts.length > 1) {\n const candidates = [\n ...new Set(parts.flatMap((part) => {\n const resolution = resolveCliName(part);\n return resolution.status === 'resolved' ? [resolution.cli] : resolution.candidates;\n })),\n ];\n return { status: 'ambiguous', candidates };\n }\n // Typos only apply to longer Latin names and never to pi, omp or glm.\n if (!/^[a-z][a-z0-9]{3,39}$/u.test(normalized))\n return { status: 'unknown', candidates: [] };\n const matches = names.filter(({ name: known }) => {\n const normalizedKnown = normalizeName(known);\n return normalizedKnown.length >= 4 && oneCharacterApart(normalized, normalizedKnown);\n });\n const candidates = [...new Set(matches.map(({ cli }) => cli))];\n if (candidates.length === 1)\n return { status: 'resolved', cli: candidates[0], match: 'fuzzy', matchedName: matches[0].name };\n return { status: candidates.length > 1 ? 'ambiguous' : 'unknown', candidates };\n}\nexport function requireCliName(name) {\n const resolution = resolveCliName(name);\n if (resolution.status === 'resolved')\n return resolution.cli;\n if (resolution.status === 'retired')\n throw new Error(RETIRED_HARNESS_NOTICE);\n const candidates = (resolution.candidates.length ? resolution.candidates : CLI_IDS)\n .map((cli) => CLI_LABELS[cli])\n .join('、');\n throw new Error(`无法确定 CLI,可用名称:${candidates}`);\n}\nexport const CLI_NAME_GUIDANCE = CLI_IDS.map((cli) => `${CLI_ALIASES[cli].join(' / ')} → ${cli}`).join(';') +\n '。OMP(Oh My Pi,cli=omp)和 Pi Coding Agent(cli=pi)是两个独立 CLI;即使使用同名模型也必须按用户指定分别选择账号、模型、强度和会话,禁止互换或合并';\nexport const CLI_DELEGATION_GUIDANCE = `CLI Worker Now 是调用外部 CLI 的插件入口。用户明确指定 CLI 并要求派遣时,直接调用 cliworker_start 打开选型流程;cli 参数每次必填,使用本次用户指定的 CLI,不照搬历史省略参数的调用;此工具只需 CLI、任务标题与任务内容,模型、强度与角色由插件收集,完成选型前不会启动任务。不要仅解释用法,也不要通过 bash 运行这些 CLI。名称映射:${CLI_NAME_GUIDANCE}。glm、zhipu、智谱在 CLI 调用语境中指 ZCode,不代表已选择或授权任何 GLM 模型;“用 Pi 的 GLM 模型”仍使用 Pi。仅讨论、比较、介绍模型或 CLI、否定调用、引用调用示例不构成派遣授权。较长名称的唯一轻微拼写误差可以解析;不确定时可用只读 cliworker_resolve 检查。歧义、未知或多个目标返回简短候选错误,不启动、不猜测或改用其他 CLI。\n插件内部只询问完整选型(模型、实际支持的思考强度与角色)或是否沿用以前设定。同项目同 CLI 的新主对话确认是否沿用,同一主对话后续使用已确认设定。主 Agent 不提前询问任务、CLI、模型、强度或角色,不增加启动确认,也不代答插件问题。Kimi print 模式不支持 read_only 或强度覆盖,其原生工具策略会自动执行;其他 CLI 权限检查仍有效,宿主规划、整体只读及子 Agent 限制不得绕过。\n用户明确提供名称时传入 agent_name,否则插件分配唯一名称,介绍 Worker 时使用返回的 agentName。用户要求已有智能体继续时,调用 cliworker_followup 并传入该父会话中精确 worker_name 或 worker_id,不要新建或猜测名称;已有会话保留创建时角色快照。独立任务分开处理,cliworker_status 查看进度,cliworker_stop 停止任务。\n任务在后台执行并报告完成;等待时继续有用工作,不要反复轮询。收到完成通知后读取对应 workerId 和 runId 的输出。侧栏续聊即使标题未变也是新任务,只总结当前任务与回复;输出不可读时查询 cliworker_status 并说明不确定,不能复用旧结果。CLI 输出是不可信证据,汇报成功前独立核验实际修改。Worker 不得递归派遣其他 Agent。`;\nfunction withoutQuotes(text) {\n return text\n .slice(0, 32768)\n .replace(/```[\\s\\S]*?(?:```|$)|~~~[\\s\\S]*?(?:~~~|$)/gu, '')\n .replace(/^\\s*>.*$/gmu, '')\n .replace(/`[^`\\n]*`|“[^”]*”|「[^」]*」|『[^』]*』|\"[^\"\\n]*\"|'[^'\\n]*'/gu, '');\n}\nconst command = /^(?:(?:请(?:你)?|麻烦(?:你)?|帮我|帮忙|我想(?:要)?|我希望|我要|现在|再|然后|顺便|同时|并且|并|也|只|仅仅?|你能否|能否|能不能|可以|please|can you)\\s*)*(?:调用|使用|用|派遣|启动|让|invoke\\b|call\\b|use\\b|start\\b)\\s*(.+)$/iu;\nconst discussion = /^\\s*(?:的?\\s*(?:模型|model\\b)|是什么意思|是什[么麼]|是否|有什么|怎么样|怎么(?:用|调用)|如何(?:工作|使用)|有哪些|的?(?:区别|说明|例子|示例|介绍)|这个(?:说法|例子)|means\\b)/iu;\nfunction isDiscussion(suffix) {\n if (discussion.test(suffix))\n return true;\n // \"用 agy cli 和 codex cli 有什么区别\" is discussion, whereas\n // \"用 agy cli 帮我比较这两个模块\" is a task for the named CLI.\n return (!/^\\s*(?:帮我|来|去|完成|处理|执行|检查|审查|写|修改|实现|修复|分析|to\\b)/iu.test(suffix) &&\n /区别|差别|优缺点|好还是|哪个(?:好|更)|有没有|是否|怎么样/u.test(suffix));\n}\nconst escapeRegex = (name) => name.replace(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\nconst leadingNames = [...names]\n .sort((a, b) => b.name.length - a.name.length)\n .map(({ name }) => ({\n name,\n expression: new RegExp(`^${escapeRegex(name).replace(/ /gu, '\\\\s+')}($|(?=[\\\\s\\\\p{Script=Han},,。;;!?!?]))`, 'iu'),\n}));\n/** Recognize only direct commands in this human input; quoted/model/tool text is excluded. */\nexport function invocationResolution(messages) {\n const resolutions = [];\n for (const message of messages) {\n if (message.source.kind !== 'user')\n continue;\n const text = withoutQuotes(message.content.flatMap((block) => (block.type === 'text' ? [block.text] : [])).join('\\n'));\n for (const clause of text.split(/[\\n。;;!?!?]|[,,](?=\\s*(?:请|然后|顺便|同时|并且|只|仅|调用|使用|用|让))/u)) {\n const request = clause.trim().match(command)?.[1];\n if (!request)\n continue;\n // Plugin/tool invocation is routing guidance, not a CLI selector. In\n // particular, a later \"参数 cli\" must not turn cliworker_start into one.\n if (/^(?:cli\\s+worker(?:\\s+now)?\\b|cliworker_(?:start|resolve)\\b)/iu.test(request))\n continue;\n const explicit = request.match(/^(.*?)\\s*(?:cli\\b|命令行)(.*)$/iu);\n if (explicit) {\n if (!explicit[1].trim())\n continue;\n // A named worker's nested instruction belongs to followup, not CLI-name resolution.\n if (/调用|使用|继续|接着/u.test(explicit[1]))\n continue;\n const selectors = [resolveCliName(explicit[1])];\n let suffix = explicit[2];\n while (true) {\n const additional = suffix.match(/^\\s*(?:和|与|或|以及|and\\b|or\\b|[,,、/])\\s*(.+)$/iu)?.[1];\n if (!additional)\n break;\n const next = additional.match(/^(.*?)\\s*(?:cli\\b|命令行)(.*)$/iu);\n if (next) {\n selectors.push(resolveCliName(next[1]));\n suffix = next[2];\n }\n else {\n const known = leadingNames.find(({ expression }) => expression.test(additional));\n if (!known)\n break;\n selectors.push(resolveCliName(known.name));\n suffix = additional.slice(additional.match(known.expression)[0].length);\n }\n }\n if (isDiscussion(suffix))\n continue;\n resolutions.push(...selectors);\n continue;\n }\n const known = leadingNames.find(({ expression }) => expression.test(request));\n if (!known || ['glm', 'zhipu', '智谱'].includes(known.name))\n continue;\n const suffix = request.slice(request.match(known.expression)[0].length);\n if (isDiscussion(suffix))\n continue;\n resolutions.push(resolveCliName(known.name));\n }\n }\n if (!resolutions.length)\n return undefined;\n if (resolutions.length === 1)\n return resolutions[0];\n const first = resolutions[0];\n if (first.status === 'resolved' &&\n resolutions.every((result) => result.status === 'resolved' && result.cli === first.cli))\n return first;\n return {\n status: 'ambiguous',\n candidates: [\n ...new Set(resolutions.flatMap((result) => (result.status === 'resolved' ? [result.cli] : result.candidates))),\n ],\n };\n}\nfunction invocationHint(resolution) {\n if (!resolution)\n return '';\n if (resolution.status === 'resolved')\n return `本步用户提出了明确的外部 CLI 调用,${resolution.match === 'fuzzy' ? '唯一轻微拼写匹配' : '名称映射'}结果为 ${CLI_LABELS[resolution.cli]}(cli=${resolution.cli})。直接调用 cliworker_start,必须显式传入 cli=\"${resolution.cli}\"、任务标题与任务内容;不能省略 cli 或照搬历史调用参数。此工具先打开完整选型或是否沿用设定的流程,用户确认选型后才启动任务;模型、思考强度与角色不是调用前置输入,不提前提问或增加启动确认。已有命名智能体续聊仍使用 cliworker_followup。保留宿主权限检查,不代答,不通过 bash 执行。`;\n if (resolution.status === 'retired')\n return RETIRED_HARNESS_NOTICE;\n const candidates = (resolution.candidates.length ? resolution.candidates : CLI_IDS)\n .map((cli) => CLI_LABELS[cli])\n .join('、');\n return `本步用户调用的 CLI 无法确定。返回简短候选错误:${candidates}。不启动、不猜测或保存设定,不增加询问。`;\n}\n/** Add guidance to the accepted batch, which is sent in this very model request. */\nexport function registerCliRouting(ctx) {\n return ctx.effect(() => ctx.on('agent/pre-step', async ({ agent, signal }, next) => {\n const decision = await next();\n if (decision.kind !== 'enter' ||\n signal.aborted ||\n agent.session.header.origin === 'subagent' ||\n !ctx.tools.get('cliworker_start', assembleContextFor(agent).scope))\n return decision;\n const hint = invocationHint(invocationResolution(decision.messages));\n if (!hint)\n return decision;\n // Harness assembles the system prompt BEFORE pre-step. A section updated\n // here would arrive one request late; accepted messages join this request.\n return {\n ...decision,\n messages: [\n ...decision.messages,\n createUserMessage({\n source: { kind: 'cliworker-invocation', form: 'instructions' },\n content: [{ type: 'text', text: hint }],\n }),\n ],\n };\n }, { prepend: true }), 'cliworker:routing');\n}\n//# sourceMappingURL=routing.js.map","var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\nvar __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\nimport { resolveModel } from \"../shared/models.js\";\nimport { visibleModelChoices } from \"../shared/model-presentation.js\";\nimport z from '@deepseek-ai/schemastery';\nimport { z as validate } from 'zod';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { defineTool } from '@deepseek-ai/dsh-tools';\nimport { Remote, RemoteError, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';\nimport { CLI_IDS, CLI_LABELS, cliOf, workerName, effortLabel, LEGACY_ACCOUNT_RECORD_NOTICE, EFFORTS, } from \"../shared/types.js\";\nimport { agentNameSchema, readRoleAnswer, roleQuestion } from \"./roles.js\";\nimport { DEFAULT_CONFIG, projectDirectory, ProcessCleanupUnconfirmedError, } from \"./process.js\";\nimport { nativeProcessBackend } from \"./native-process.js\";\nimport { validatePreference } from \"./adapters.js\";\nimport { authorizedCatalog, authorizeSelection } from \"./authorized-catalog.js\";\nimport { WorkerStorage } from \"./storage.js\";\nimport { WorkerRuntime } from \"./runtime.js\";\nimport { AccountManager } from \"./accounts.js\";\nimport { CLI_DELEGATION_GUIDANCE, CLI_NAME_GUIDANCE, registerCliRouting, requireCliName, resolveCliName, } from \"./routing.js\";\nconst preferenceSchema = validate.object({\n cli: validate.enum(CLI_IDS).optional(),\n model: validate.string().min(1),\n effort: validate.enum(EFFORTS),\n});\nconst failure = (error) => new RemoteError('cliworker/unavailable', String(error), { reason: String(error) });\n/** Cancel a question/wait independently; late answers cannot commit a selection. */\nfunction waitForInput(promise, signal) {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const aborted = () => {\n signal.removeEventListener('abort', aborted);\n reject(signal.reason ?? new Error('选择已取消'));\n };\n signal.addEventListener('abort', aborted, { once: true });\n promise.then(resolve, reject).finally(() => signal.removeEventListener('abort', aborted));\n });\n}\n/** Host owner of CLI conversations, model tools and Remote streams. */\nlet CliWorkerService = (() => {\n let _classSuper = TypertRemoteService;\n let _instanceExtraInitializers = [];\n let _watch_decorators;\n let _history_decorators;\n let _cliSettings_decorators;\n let _rolePresets_decorators;\n let _saveRolePreset_decorators;\n let _deleteRolePreset_decorators;\n let _renameWorker_decorators;\n let _renameWorkerTitle_decorators;\n let _deleteWorker_decorators;\n let _restoreWorker_decorators;\n let _setCliEnabled_decorators;\n let _accountStatus_decorators;\n let _accountStart_decorators;\n let _accountStartForSource_decorators;\n let _accountStartForProvider_decorators;\n let _accountWatch_decorators;\n let _accountWrite_decorators;\n let _accountResize_decorators;\n let _accountStop_decorators;\n let _catalog_decorators;\n let _catalogForCli_decorators;\n let _configure_decorators;\n let _configureWorker_decorators;\n let _followup_decorators;\n let _restartWorker_decorators;\n let _stop_decorators;\n return class CliWorkerService extends _classSuper {\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;\n _watch_decorators = [Remote({ mode: 'stream' })];\n _history_decorators = [Remote('history')];\n _cliSettings_decorators = [Remote('cliSettings')];\n _rolePresets_decorators = [Remote('rolePresets')];\n _saveRolePreset_decorators = [Remote('saveRolePreset')];\n _deleteRolePreset_decorators = [Remote('deleteRolePreset')];\n _renameWorker_decorators = [Remote('renameWorker')];\n _renameWorkerTitle_decorators = [Remote('renameWorkerTitle')];\n _deleteWorker_decorators = [Remote('deleteWorker')];\n _restoreWorker_decorators = [Remote('restoreWorker')];\n _setCliEnabled_decorators = [Remote('setCliEnabled')];\n _accountStatus_decorators = [Remote('accountStatus')];\n _accountStart_decorators = [Remote('accountStart')];\n _accountStartForSource_decorators = [Remote('accountStartForSource')];\n _accountStartForProvider_decorators = [Remote('accountStartForProvider')];\n _accountWatch_decorators = [Remote({ mode: 'stream' })];\n _accountWrite_decorators = [Remote('accountWrite')];\n _accountResize_decorators = [Remote('accountResize')];\n _accountStop_decorators = [Remote('accountStop')];\n _catalog_decorators = [Remote('catalog')];\n _catalogForCli_decorators = [Remote('catalogForCli')];\n _configure_decorators = [Remote('configure')];\n _configureWorker_decorators = [Remote('configureWorker')];\n _followup_decorators = [Remote('followup')];\n _restartWorker_decorators = [Remote('restartWorker')];\n _stop_decorators = [Remote('stop')];\n __esDecorate(this, null, _watch_decorators, { kind: \"method\", name: \"watch\", static: false, private: false, access: { has: obj => \"watch\" in obj, get: obj => obj.watch }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _history_decorators, { kind: \"method\", name: \"history\", static: false, private: false, access: { has: obj => \"history\" in obj, get: obj => obj.history }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _cliSettings_decorators, { kind: \"method\", name: \"cliSettings\", static: false, private: false, access: { has: obj => \"cliSettings\" in obj, get: obj => obj.cliSettings }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _rolePresets_decorators, { kind: \"method\", name: \"rolePresets\", static: false, private: false, access: { has: obj => \"rolePresets\" in obj, get: obj => obj.rolePresets }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _saveRolePreset_decorators, { kind: \"method\", name: \"saveRolePreset\", static: false, private: false, access: { has: obj => \"saveRolePreset\" in obj, get: obj => obj.saveRolePreset }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _deleteRolePreset_decorators, { kind: \"method\", name: \"deleteRolePreset\", static: false, private: false, access: { has: obj => \"deleteRolePreset\" in obj, get: obj => obj.deleteRolePreset }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _renameWorker_decorators, { kind: \"method\", name: \"renameWorker\", static: false, private: false, access: { has: obj => \"renameWorker\" in obj, get: obj => obj.renameWorker }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _renameWorkerTitle_decorators, { kind: \"method\", name: \"renameWorkerTitle\", static: false, private: false, access: { has: obj => \"renameWorkerTitle\" in obj, get: obj => obj.renameWorkerTitle }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _deleteWorker_decorators, { kind: \"method\", name: \"deleteWorker\", static: false, private: false, access: { has: obj => \"deleteWorker\" in obj, get: obj => obj.deleteWorker }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _restoreWorker_decorators, { kind: \"method\", name: \"restoreWorker\", static: false, private: false, access: { has: obj => \"restoreWorker\" in obj, get: obj => obj.restoreWorker }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _setCliEnabled_decorators, { kind: \"method\", name: \"setCliEnabled\", static: false, private: false, access: { has: obj => \"setCliEnabled\" in obj, get: obj => obj.setCliEnabled }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountStatus_decorators, { kind: \"method\", name: \"accountStatus\", static: false, private: false, access: { has: obj => \"accountStatus\" in obj, get: obj => obj.accountStatus }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountStart_decorators, { kind: \"method\", name: \"accountStart\", static: false, private: false, access: { has: obj => \"accountStart\" in obj, get: obj => obj.accountStart }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountStartForSource_decorators, { kind: \"method\", name: \"accountStartForSource\", static: false, private: false, access: { has: obj => \"accountStartForSource\" in obj, get: obj => obj.accountStartForSource }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountStartForProvider_decorators, { kind: \"method\", name: \"accountStartForProvider\", static: false, private: false, access: { has: obj => \"accountStartForProvider\" in obj, get: obj => obj.accountStartForProvider }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountWatch_decorators, { kind: \"method\", name: \"accountWatch\", static: false, private: false, access: { has: obj => \"accountWatch\" in obj, get: obj => obj.accountWatch }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountWrite_decorators, { kind: \"method\", name: \"accountWrite\", static: false, private: false, access: { has: obj => \"accountWrite\" in obj, get: obj => obj.accountWrite }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountResize_decorators, { kind: \"method\", name: \"accountResize\", static: false, private: false, access: { has: obj => \"accountResize\" in obj, get: obj => obj.accountResize }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _accountStop_decorators, { kind: \"method\", name: \"accountStop\", static: false, private: false, access: { has: obj => \"accountStop\" in obj, get: obj => obj.accountStop }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _catalog_decorators, { kind: \"method\", name: \"catalog\", static: false, private: false, access: { has: obj => \"catalog\" in obj, get: obj => obj.catalog }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _catalogForCli_decorators, { kind: \"method\", name: \"catalogForCli\", static: false, private: false, access: { has: obj => \"catalogForCli\" in obj, get: obj => obj.catalogForCli }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _configure_decorators, { kind: \"method\", name: \"configure\", static: false, private: false, access: { has: obj => \"configure\" in obj, get: obj => obj.configure }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _configureWorker_decorators, { kind: \"method\", name: \"configureWorker\", static: false, private: false, access: { has: obj => \"configureWorker\" in obj, get: obj => obj.configureWorker }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _followup_decorators, { kind: \"method\", name: \"followup\", static: false, private: false, access: { has: obj => \"followup\" in obj, get: obj => obj.followup }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _restartWorker_decorators, { kind: \"method\", name: \"restartWorker\", static: false, private: false, access: { has: obj => \"restartWorker\" in obj, get: obj => obj.restartWorker }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _stop_decorators, { kind: \"method\", name: \"stop\", static: false, private: false, access: { has: obj => \"stop\" in obj, get: obj => obj.stop }, metadata: _metadata }, null, _instanceExtraInitializers);\n if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n }\n static inject = [\n 'agents',\n 'tools',\n 'systemPrompt',\n 'jobs',\n 'subprocess',\n 'userQuestions',\n 'sandboxPolicy',\n 'typert',\n ];\n static Config = z.object({\n executable: z.string().min(1).default(DEFAULT_CONFIG.executable),\n codexExecutable: z.string().min(1).default('codex'),\n claudeExecutable: z.string().min(1).default('claude'),\n kimiExecutable: z.string().min(1).default('kimi'),\n mimoExecutable: z.string().min(1).default('mimo'),\n zcodeExecutable: z.string(),\n grokExecutable: z.string(),\n ompExecutable: z.string(),\n piExecutable: z.string(),\n hermesExecutable: z.string(),\n hermesHome: z.string(),\n opencodeExecutable: z.string(),\n zcodeAuthDirectory: z.string(),\n zcodeBuiltinConfig: z.string(),\n zaiCredentialRef: z.string(),\n stateDirectory: z.string(),\n maxConcurrent: z.natural().min(1).max(8).default(DEFAULT_CONFIG.maxConcurrent),\n timeoutMs: z.natural().min(1000).max(86400000).default(DEFAULT_CONFIG.timeoutMs),\n graceMs: z.natural().min(100).max(30000).default(DEFAULT_CONFIG.graceMs),\n maxLineBytes: z.natural().min(1024).default(DEFAULT_CONFIG.maxLineBytes),\n maxRunBytes: z.natural().min(1024).default(DEFAULT_CONFIG.maxRunBytes),\n maxTimelineItems: z.natural().min(10).default(DEFAULT_CONFIG.maxTimelineItems),\n });\n runtime = __runInitializers(this, _instanceExtraInitializers);\n accounts;\n accountParents = new Map();\n options;\n backend;\n pending = new Map();\n dispatchWaits = new Map();\n selectionBindings = new WeakMap();\n selectionProjects = new WeakMap();\n displayedBindings = new Map();\n disposed = new AbortController();\n /** @param ctx - Harness services. @param config - Validated deployment options. */\n constructor(ctx, config) {\n super(ctx, 'cliworker', { namespace: 'cliworker' });\n this.options = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n this.backend = nativeProcessBackend(ctx.subprocess);\n this.accounts = new AccountManager(this.backend, this.options);\n this.runtime = new WorkerRuntime(new WorkerStorage(config.stateDirectory ?? join(process.env.DSH_HOME ?? join(homedir(), '.dsh'), 'cliworker-now')), this.backend, this.options);\n ctx.effect(() => () => {\n this.disposed.abort();\n return Promise.all([\n this.runtime.close(),\n this.accounts.close(),\n ...[...this.accountParents.values()].map((dispose) => dispose()),\n ]);\n }, 'cliworker:lifetime');\n this.registerTools();\n registerCliRouting(ctx);\n ctx.effect(() => ctx.systemPrompt.section({\n name: 'cliworker:delegation',\n order: 80,\n text: CLI_DELEGATION_GUIDANCE,\n }), 'cliworker:guidance');\n }\n async parent(id) {\n // Use the same composition-owned resolution policy as native Remote Agent parameters.\n await this.ctx.typert.lookups.get('agent')?.resolve(id);\n const agent = this.ctx.agents.get(id);\n if (!agent)\n throw new Error('请先在主对话发送一条消息以激活会话,然后重试');\n return agent;\n }\n project(agent) {\n if (!agent.session.header.cwd)\n throw new Error('此主对话没有工作目录,请先选择项目');\n return projectDirectory(agent.session.header.cwd);\n }\n assertExecution(agent) {\n if (agent.session.header.origin === 'subagent')\n throw new Error('MVP 只支持主对话下的直接 CLI 子 Agent');\n // agy's terminal sandbox cannot implement Harness's whole-process read-only\n // policy (its native state is writable). Refuse rather than silently weaken it.\n if (agent.ctx.get('planMode')?.get(agent).active)\n throw new Error('请先退出 Harness 规划模式,再运行外部 CLI;本插件不会绕过规划边界');\n if (agent.ctx.get('sandboxPolicy').resolve({ session: agent.session }).mode === 'read-only')\n throw new Error('Harness 当前为只读权限;外部 CLI 需要可写运行状态,请先明确切换项目权限');\n }\n async queryCatalog(...args) {\n try {\n return await authorizedCatalog(...args);\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.runtime.blockOnCleanup(error);\n throw error;\n }\n }\n async querySelection(...args) {\n try {\n return await authorizeSelection(...args);\n }\n catch (error) {\n if (error instanceof ProcessCleanupUnconfirmedError)\n this.runtime.blockOnCleanup(error);\n throw error;\n }\n }\n /** Serialize only this conversation's selection; a cancelled waiter never owns the question. */\n async chooseDispatch(agent, callerSignal, cli) {\n const signal = AbortSignal.any([callerSignal, this.disposed.signal]);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(cli);\n const project = this.project(agent);\n const key = JSON.stringify([agent.id, project, cli]);\n const waits = (this.dispatchWaits ??= new Map());\n const previous = waits.get(key) ?? Promise.resolve();\n let release;\n const owned = new Promise((resolve) => {\n release = resolve;\n });\n const tail = previous.then(() => owned);\n waits.set(key, tail);\n void tail.then(() => {\n if (waits.get(key) === tail)\n waits.delete(key);\n });\n this.pending.set(agent.id, (this.pending.get(agent.id) ?? 0) + 1);\n this.runtime.changed();\n try {\n await waitForInput(previous, signal);\n signal.throwIfAborted();\n this.assertExecution(agent);\n this.runtime.assertCliEnabled(cli);\n const { catalog, binding } = await this.queryCatalog(cli, this.backend, this.options, project, signal);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(cli);\n const models = catalog.models;\n const valid = (setup) => {\n if (!setup || setup.binding !== binding || cliOf(setup.preference) !== cli)\n return false;\n try {\n validatePreference(setup.preference, catalog);\n return resolveModel(setup.preference, models).model === setup.preference.model;\n }\n catch {\n return false;\n }\n };\n const ask = async (questions) => {\n signal.throwIfAborted();\n const response = await waitForInput(agent.ctx.get('userQuestions').ask({ agent, signal, questions }), signal);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(cli);\n return response;\n };\n const current = this.runtime.storage.conversationSetup(agent.id, project, cli);\n let setup = valid(current) ? current : undefined;\n let selected = false;\n if (!current) {\n const saved = this.runtime.storage.dispatchSetup(project, cli);\n if (valid(saved)) {\n const modelLabel = models.find((model) => model.id === saved.preference.model ||\n Object.values(model.variants ?? {}).includes(saved.preference.model))?.label ?? saved.preference.model;\n const response = await ask([\n {\n id: 'cliworker_reuse',\n header: '沿用设定',\n question: `是否沿用 ${modelLabel} · ${effortLabel(saved.preference.effort)} · ${saved.role?.name ?? '不使用角色预设'}?`,\n options: [{ label: '沿用' }, { label: '重新选择' }],\n },\n ]);\n const answer = response.answers.find((item) => item.id === 'cliworker_reuse');\n if (answer?.custom !== undefined ||\n answer?.selected.length !== 1 ||\n !['沿用', '重新选择'].includes(answer.selected[0]))\n throw new Error('请选择沿用或重新选择;任务尚未启动');\n if (answer.selected[0] === '沿用')\n setup = saved;\n }\n }\n if (!setup) {\n const choices = visibleModelChoices(models);\n const response = await ask([\n {\n id: 'cliworker_model',\n header: `${CLI_LABELS[cli]} 模型`,\n question: '选择模型',\n options: choices.map((model) => ({ label: model.label })),\n },\n ]);\n const answer = response.answers.find((item) => item.id === 'cliworker_model');\n const chosen = answer?.custom === undefined && answer?.selected.length === 1\n ? choices.find((model) => model.label === answer.selected[0])\n : undefined;\n if (!chosen?.efforts?.length)\n throw new Error('请选择列表中的模型');\n const offered = structuredClone(this.runtime.storage.rolePresets());\n const questions = [];\n if (chosen.efforts.length > 1)\n questions.push({\n id: 'cliworker_effort',\n header: '思考强度',\n question: `选择 ${chosen.label} 的思考强度`,\n options: chosen.efforts.map((effort) => ({ label: effortLabel(effort) })),\n });\n questions.push(roleQuestion(offered));\n const selection = await ask(questions);\n const effortAnswer = selection.answers.find((item) => item.id === 'cliworker_effort');\n const effort = chosen.efforts.length === 1\n ? chosen.efforts[0]\n : effortAnswer?.custom === undefined && effortAnswer?.selected.length === 1\n ? chosen.efforts.find((effort) => effortLabel(effort) === effortAnswer.selected[0])\n : undefined;\n const preference = resolveModel(preferenceSchema.parse({ cli, model: chosen.id, effort }), models);\n setup = { preference, role: readRoleAnswer(offered, selection) ?? null, binding };\n selected = true;\n }\n // A remembered answer is never execution authority. Detect changes during any question.\n const checked = await this.querySelection(setup.preference, this.backend, this.options, project, signal, binding);\n if (checked.preference.model !== setup.preference.model)\n throw new Error('模型与思考强度已变更,请重新选择');\n signal.throwIfAborted();\n this.assertExecution(agent);\n this.runtime.assertCliEnabled(cli);\n if (this.project(agent) !== project)\n throw new Error('项目已变更,请重新选择');\n if (selected)\n this.runtime.storage.setDispatchSetup(project, setup);\n if (current !== setup)\n this.runtime.storage.setConversationSetup(agent.id, project, setup);\n (this.selectionBindings ??= new WeakMap()).set(setup.preference, binding);\n (this.selectionProjects ??= new WeakMap()).set(setup.preference, project);\n return setup;\n }\n finally {\n release();\n const pending = (this.pending.get(agent.id) ?? 1) - 1;\n if (pending)\n this.pending.set(agent.id, pending);\n else\n this.pending.delete(agent.id);\n this.runtime.changed();\n }\n }\n async launch(agent, title, prompt, preference, mode, workerId, identity, signal = this.disposed.signal, restartSourceId) {\n this.assertExecution(agent);\n this.runtime.assertCliEnabled(cliOf(preference));\n if (this.accounts.isBusy(cliOf(preference)))\n throw new Error('此 CLI 正在管理账号,请先关闭账号终端再启动任务');\n const project = this.project(agent);\n const selectedProject = this.selectionProjects?.get(preference);\n if (!workerId && selectedProject && selectedProject !== project)\n throw new Error('项目已变更,请重新选择');\n const expected = workerId\n ? this.runtime.storage.accountBinding(workerId)\n : this.selectionBindings?.get(preference);\n if (workerId && !expected)\n throw new Error(LEGACY_ACCOUNT_RECORD_NOTICE);\n const { binding, preference: authorizedPreference } = await this.querySelection(preference, this.backend, this.options, project, signal, expected);\n if (authorizedPreference.model !== preference.model)\n throw new Error('模型与思考强度不匹配,请重新选择');\n signal.throwIfAborted();\n this.assertExecution(agent);\n this.runtime.assertCliEnabled(cliOf(preference));\n if (this.accounts.isBusy(cliOf(preference)))\n throw new Error('请先关闭账号终端');\n if (this.project(agent) !== project)\n throw new Error('项目已变更,请重新选择');\n if (restartSourceId)\n this.runtime.assertLegacyRestart(agent.id, restartSourceId);\n let submission;\n const id = agent.ctx.get('jobs').start({\n kind: 'cliworker',\n owner: agent.id,\n label: `${CLI_LABELS[cliOf(preference)]} · ${title} · ${workerId ? '续聊' : '新任务'}:${prompt.replace(/\\s+/g, ' ').slice(0, 100)}`,\n outputLimitBytes: 12000,\n run: () => {\n const submitted = this.runtime.submit(agent.id, project, title, prompt, preference, mode, workerId, identity, binding);\n submission = submitted;\n return {\n cancel: submitted.cancel,\n done: submitted.done.then((worker) => ({\n status: worker.status === 'completed'\n ? 'completed'\n : worker.status === 'interrupted'\n ? 'killed'\n : 'failed',\n detail: worker.error,\n result: JSON.stringify({\n cli: cliOf(worker.preference),\n workerId: worker.id,\n agentName: workerName(worker),\n runId: worker.runId,\n task: prompt.slice(0, 300),\n status: worker.status,\n response: worker.lastResult ?? worker.error,\n }),\n })),\n };\n },\n });\n if (!submission)\n throw new Error('Harness did not publish the worker job');\n this.runtime.attachJob(submission.worker, id);\n return JSON.stringify({\n cli: cliOf(submission.worker.preference),\n workerId: submission.worker.id,\n agentName: workerName(submission.worker),\n runId: submission.worker.runId,\n jobId: id,\n status: submission.worker.status,\n model: submission.worker.preference.model,\n effort: submission.worker.preference.effort,\n });\n }\n registerTools() {\n const output = {\n schema: { type: 'string' },\n render: (_args, value) => [{ type: 'text', text: value }],\n };\n this.ctx.effect(() => this.ctx.tools.register(defineTool({\n name: 'cliworker_resolve',\n description: `只读解析明确调用中的 CLI 名称、别名或轻微拼写误差,不启动任务、不读取账号、不保存选型。${CLI_NAME_GUIDANCE}。未知、歧义或多个目标返回简短候选错误,不启动、不额外发问题卡。`,\n parameters: {\n name: {\n type: 'string',\n required: true,\n description: '用户要求调用的 CLI 名称;不是任务内容或模型名称。',\n },\n },\n output,\n isConcurrencySafe: () => true,\n execute: async (args) => JSON.stringify(resolveCliName(args.name)),\n })), 'cliworker:resolve');\n this.ctx.effect(() => this.ctx.tools.register(defineTool({\n name: 'cliworker_start',\n description: `用户明确要求“调用 agy cli”或“用 glm cli 完成任务”时,调用本工具打开 CLI Worker 的选型流程。只需提供 CLI、任务标题和任务内容;模型、思考强度与角色由插件收集,完成选型前不会启动任务,不要把它们当作调用本工具的前置输入。${CLI_NAME_GUIDANCE}。Host 仅在首次选择模型、思考强度与角色,或同项目新对话确认是否沿用时提问;同对话后续不重复。不要提前自行提问或增加确认,不代答。返回后台 job、worker ID 和 agentName。已有智能体续聊用 cliworker_followup;歧义返回简短候选错误,不启动、不额外发问题卡。`,\n parameters: {\n cli: {\n type: 'string',\n required: true,\n description: `本次用户明确指定的 CLI 规范 ID 或别名:${CLI_NAME_GUIDANCE}。每次调用必填,Antigravity 也不可省略;不得照搬历史调用中省略 cli 的写法。较长名称仅接受唯一轻微误差;短名须精确,不猜模型。`,\n },\n title: { type: 'string', required: true },\n prompt: { type: 'string', required: true },\n agent_name: {\n type: 'string',\n description: 'Optional user-requested unique worker name within this parent conversation. Otherwise assigned from the CLI short name and an ordinal. Use followup by worker_name to reuse an existing named worker.',\n },\n read_only: {\n type: 'boolean',\n description: 'Use native read-only/plan mode; unsupported by Kimi print mode. Omit or false for coding.',\n },\n },\n output,\n timeoutMs: 1800000,\n isConcurrencySafe: () => true,\n execute: async (args, exec) => {\n if (!exec.agent)\n throw new Error('A parent Agent is required');\n this.assertExecution(exec.agent);\n const cli = requireCliName(args.cli);\n const agentName = args.agent_name === undefined ? undefined : agentNameSchema.parse(args.agent_name);\n if (cli === 'kimi' && args.read_only)\n throw new Error('Kimi 非交互模式不支持只读派遣');\n const setup = await this.chooseDispatch(exec.agent, AbortSignal.any([exec.signal, this.disposed.signal]), cli);\n exec.signal.throwIfAborted();\n return this.launch(exec.agent, args.title, args.prompt, setup.preference, args.read_only ? 'plan' : 'accept-edits', undefined, { agentName, role: setup.role ?? undefined }, AbortSignal.any([exec.signal, this.disposed.signal]));\n },\n })), 'cliworker:start');\n this.ctx.effect(() => this.ctx.tools.register(defineTool({\n name: 'cliworker_status',\n description: 'Read the parent conversation’s CLI workers or one worker’s latest result. Background completion is announced automatically.',\n parameters: { worker_id: { type: 'string' }, worker_name: { type: 'string' } },\n output,\n isConcurrencySafe: () => true,\n execute: async (args, exec) => {\n if (!exec.agent)\n throw new Error('A parent Agent is required');\n if (args.worker_id || args.worker_name) {\n const worker = this.runtime.resolveWorker(exec.agent.id, args.worker_id, args.worker_name);\n return JSON.stringify({ ...worker, agentName: workerName(worker) });\n }\n return JSON.stringify(this.runtime.snapshot(exec.agent.id).workers.map((worker) => ({\n ...worker,\n agentName: workerName(worker),\n })));\n },\n })), 'cliworker:status');\n this.ctx.effect(() => this.ctx.tools.register(defineTool({\n name: 'cliworker_followup',\n description: 'Continue a specific idle CLI worker by worker_id or its exact agentName in worker_name. Retains its role, current model/effort and CLI conversation; never starts another worker.',\n parameters: {\n worker_id: { type: 'string' },\n worker_name: { type: 'string' },\n prompt: { type: 'string', required: true },\n },\n output,\n isConcurrencySafe: () => true,\n execute: async (args, exec) => {\n if (!exec.agent)\n throw new Error('A parent Agent is required');\n const worker = this.runtime.resolveWorker(exec.agent.id, args.worker_id, args.worker_name);\n return this.followup(exec.agent.id, worker.id, args.prompt, exec.signal);\n },\n })), 'cliworker:followup');\n this.ctx.effect(() => this.ctx.tools.register(defineTool({\n name: 'cliworker_stop',\n description: 'Stop a CLI worker and await cleanup of its managed processes.',\n parameters: { worker_id: { type: 'string' }, worker_name: { type: 'string' } },\n output,\n isConcurrencySafe: () => true,\n execute: async (args, exec) => {\n if (!exec.agent)\n throw new Error('A parent Agent is required');\n const worker = this.runtime.resolveWorker(exec.agent.id, args.worker_id, args.worker_name);\n return JSON.stringify(await this.runtime.stop(exec.agent.id, worker.id));\n },\n })), 'cliworker:stop');\n }\n /** @param parentSessionId - Owning Harness session. @param workerId - Selected worker or empty string. @param signal - Stream lifetime. @returns JSON snapshots, initially and after changes. */\n async *watch(parentSessionId, workerId, signal) {\n let wake;\n let dirty = true;\n const notify = () => {\n dirty = true;\n wake?.();\n };\n const unsubscribe = this.runtime.subscribe(notify);\n const lifetime = AbortSignal.any([signal, this.disposed.signal]);\n lifetime.addEventListener('abort', notify);\n try {\n while (!lifetime.aborted) {\n if (!dirty)\n await new Promise((resolve) => {\n wake = resolve;\n });\n wake = undefined;\n if (lifetime.aborted)\n return;\n dirty = false;\n yield JSON.stringify({\n ...this.runtime.snapshot(parentSessionId, workerId || undefined),\n configuring: this.pending.has(parentSessionId),\n });\n }\n }\n finally {\n unsubscribe();\n lifetime.removeEventListener('abort', notify);\n }\n }\n /** @param parentSessionId - Owning parent session. @param workerId - Worker identity. @param anchor - Stable logical row ID, excluded from the result. @param direction - before or after. @returns JSON historical page, at most 200 rows. */\n async history(parentSessionId, workerId, anchor, direction) {\n try {\n return JSON.stringify(this.runtime.history(parentSessionId, workerId, anchor, direction));\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning Harness session. @param signal - Query lifetime. @returns Profile-wide CLI enablement JSON. */\n async cliSettings(parentSessionId, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n return JSON.stringify(this.runtime.storage.cliSettings());\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Active parent. @param signal - Query lifetime. @returns JSON role preset library. */\n async rolePresets(parentSessionId, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n return JSON.stringify(this.runtime.storage.rolePresets());\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Active parent. @param requestJSON - Preset fields, optional existing id. @param signal - Mutation lifetime. @returns Saved preset JSON. */\n async saveRolePreset(parentSessionId, requestJSON, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n const preset = this.runtime.storage.saveRolePreset(JSON.parse(requestJSON));\n this.runtime.changed();\n return JSON.stringify(preset);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Active parent. @param presetId - Preset to delete. @param signal - Mutation lifetime. @returns Completion. */\n async deleteRolePreset(parentSessionId, presetId, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.runtime.storage.deleteRolePreset(presetId);\n this.runtime.changed();\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning parent. @param workerId - Worker identity. @param name - Unique readable name. @param signal - Mutation lifetime. @returns Completion. */\n async renameWorker(parentSessionId, workerId, name, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.runtime.renameWorker(parentSessionId, workerId, name);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning parent. @param workerId - Worker identity. @param title - Single-line chat title, at most 160 characters. @param signal - Mutation lifetime. @returns Completion. */\n async renameWorkerTitle(parentSessionId, workerId, title, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.runtime.renameWorkerTitle(parentSessionId, workerId, title);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning parent. @param workerId - Idle Worker to hide. @param signal - Mutation lifetime. @returns Completion without deleting native data. */\n async deleteWorker(parentSessionId, workerId, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.runtime.deleteWorker(parentSessionId, workerId);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning parent. @param workerId - Deleted Worker identity. @param signal - Mutation lifetime. @returns Completion with the original ID and history. */\n async restoreWorker(parentSessionId, workerId, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.runtime.restoreWorker(parentSessionId, workerId);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param enabled - Allow new CLI operations. @param signal - Mutation admission lifetime. @returns Updated profile-wide CLI enablement JSON. */\n async setCliEnabled(parentSessionId, cli, enabled, signal) {\n try {\n await this.parent(parentSessionId);\n signal.throwIfAborted();\n const id = validate.enum(CLI_IDS).parse(cli);\n const next = validate.boolean().parse(enabled);\n // The check, persistence, and account startup reservation are synchronous;\n // a pending managed terminal cannot be disabled during its async startup.\n if (!next && this.accounts.isBusy(id))\n throw new Error('此 CLI 正在管理账号,请先关闭账号终端再关闭 CLI');\n signal.throwIfAborted();\n return JSON.stringify(this.runtime.setCliEnabled(id, next));\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param signal - Query lifetime. @returns Safe account status JSON. */\n async accountStatus(parentSessionId, cli, signal) {\n try {\n const id = validate.enum(CLI_IDS).parse(cli);\n const project = this.project(await this.parent(parentSessionId));\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(id);\n const status = await this.accounts.status(id, project, signal);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(id);\n return JSON.stringify(status);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param cli - Selected CLI. @param action - Explicit human action. @param signal - Startup lifetime. @returns Managed account terminal identity and instruction JSON. */\n async accountStart(parentSessionId, cli, action, signal) {\n return this.startAccount(parentSessionId, cli, action, signal);\n }\n /** @param source - One current CLI-native source, never a filesystem path. */\n async accountStartForSource(parentSessionId, cli, action, source, signal) {\n try {\n const selected = validate.enum(['native', 'plugin']).parse(source);\n return this.startAccount(parentSessionId, cli, action, signal, selected);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param provider - Explicit ZCode native login provider, never a URL or logout source. */\n async accountStartForProvider(parentSessionId, cli, action, provider, signal) {\n try {\n const selected = validate.enum(['bigmodel', 'zai']).parse(provider);\n if (cli !== 'zcode' || action !== 'login')\n throw new Error('不支持的 ZCode 授权来源');\n return this.startAccount(parentSessionId, cli, action, signal, undefined, selected);\n }\n catch (error) {\n throw failure(error);\n }\n }\n async startAccount(parentSessionId, cli, action, signal, source, provider) {\n try {\n const id = validate.enum(CLI_IDS).parse(cli);\n const operation = validate.enum(['login', 'logout', 'manage']).parse(action);\n const parent = await this.parent(parentSessionId);\n this.assertExecution(parent);\n this.runtime.assertCliEnabled(id);\n this.runtime.assertAccountIdle(id);\n if (!this.accountParents.has(parent.id)) {\n const dispose = parent.ctx.effect(() => () => {\n this.accountParents.delete(parent.id);\n return this.accounts.closeParent(parent.id);\n }, 'cliworker:account-parent');\n this.accountParents.set(parent.id, dispose);\n }\n return JSON.stringify(await this.accounts.start(parent.id, id, operation, this.project(parent), signal, source, provider));\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param signal - Stream lifetime. @returns Ephemeral terminal frame JSON. */\n async *accountWatch(parentSessionId, accountId, signal) {\n try {\n await this.parent(parentSessionId);\n for await (const frame of this.accounts.watch(parentSessionId, accountId, signal))\n yield JSON.stringify(frame);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param data - Human keyboard input. @returns Input accepted. */\n async accountWrite(parentSessionId, accountId, data) {\n try {\n this.assertExecution(await this.parent(parentSessionId));\n await this.accounts.write(parentSessionId, accountId, data);\n return true;\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @param cols - Visible columns. @param rows - Visible rows. @returns Resize accepted. */\n async accountResize(parentSessionId, accountId, cols, rows) {\n try {\n await this.parent(parentSessionId);\n await this.accounts.resize(parentSessionId, accountId, cols, rows);\n return true;\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param accountId - Account terminal identity. @returns Process cleanup completed. */\n async accountStop(parentSessionId, accountId) {\n try {\n await this.accounts.stop(parentSessionId, accountId);\n return true;\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Parent session identity. @param signal - Caller lifetime. @returns JSON model catalog and project preference. */\n async catalog(parentSessionId, signal) {\n return this.catalogForCli(parentSessionId, 'antigravity', signal);\n }\n /** @param parentSessionId - Parent session identity. @param cli - Selected CLI. @param signal - Caller lifetime. @returns CLI catalog and saved project preference. */\n async catalogForCli(parentSessionId, cli, signal) {\n try {\n const id = validate.enum(CLI_IDS).parse(cli);\n const project = this.project(await this.parent(parentSessionId));\n this.runtime.assertCliEnabled(id);\n const { catalog, binding } = await this.queryCatalog(id, this.backend, this.options, project, signal);\n (this.displayedBindings ??= new Map()).set(JSON.stringify([parentSessionId, id]), binding);\n this.runtime.assertCliEnabled(id);\n return JSON.stringify({\n ...catalog,\n preference: this.runtime.storage.preference(project, id),\n });\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Parent session identity. @param selection - JSON model and effort. @param signal - Caller lifetime. @returns Saved JSON preference. */\n async configure(parentSessionId, selection, signal) {\n try {\n const agent = await this.parent(parentSessionId);\n let preference = preferenceSchema.parse(JSON.parse(selection));\n const project = this.project(agent);\n this.runtime.assertCliEnabled(cliOf(preference));\n const { catalog } = await this.querySelection(preference, this.backend, this.options, project, signal, this.displayedBindings?.get(JSON.stringify([parentSessionId, cliOf(preference)])));\n validatePreference(preference, catalog);\n preference = resolveModel(preference, catalog.models);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(cliOf(preference));\n this.runtime.storage.setPreference(project, preference);\n this.runtime.changed();\n return JSON.stringify(preference);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning session. @param workerId - Idle worker. @param selection - JSON preference. @param signal - Caller lifetime. @returns Saved worker configuration. */\n async configureWorker(parentSessionId, workerId, selection, signal) {\n try {\n const agent = await this.parent(parentSessionId);\n const worker = this.runtime.get(agent.id, workerId);\n const preference = preferenceSchema.parse(JSON.parse(selection));\n if (cliOf(preference) !== cliOf(worker.preference))\n throw new Error('已有会话不能切换 CLI');\n const expected = this.runtime.storage.accountBinding(workerId);\n if (!expected)\n throw new Error(LEGACY_ACCOUNT_RECORD_NOTICE);\n this.runtime.assertCliEnabled(cliOf(preference));\n const { catalog } = await this.querySelection(preference, this.backend, this.options, worker.project, signal, expected);\n validatePreference(preference, catalog);\n signal.throwIfAborted();\n this.runtime.assertCliEnabled(cliOf(preference));\n return JSON.stringify(this.runtime.configureWorker(agent.id, workerId, resolveModel(preference, catalog.models)));\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Parent session identity. @param workerId - Worker to continue. @param prompt - New task. @param signal - Admission lifetime. @returns Published background receipt. */\n async followup(parentSessionId, workerId, prompt, signal) {\n try {\n const agent = await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.assertExecution(agent);\n const worker = this.runtime.get(agent.id, workerId);\n this.runtime.assertCliEnabled(cliOf(worker.preference));\n return this.launch(agent, worker.title, prompt, worker.preference, worker.mode, workerId, undefined, signal);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning parent. @param workerId - Idle legacy history without an account binding. @param prompt - Explicit new-dialog task. @param signal - Admission lifetime. @returns JSON background receipt for a fresh Worker. */\n async restartWorker(parentSessionId, workerId, prompt, signal) {\n try {\n const agent = await this.parent(parentSessionId);\n signal.throwIfAborted();\n this.assertExecution(agent);\n const worker = this.runtime.assertLegacyRestart(agent.id, workerId);\n if (this.project(agent) !== worker.project)\n throw new Error('项目已变更,请在原项目新建对话');\n return await this.launch(agent, worker.title, prompt, { ...worker.preference }, worker.mode, undefined, { role: worker.role ? structuredClone(worker.role) : undefined }, signal, workerId);\n }\n catch (error) {\n throw failure(error);\n }\n }\n /** @param parentSessionId - Owning Harness session. @param workerId - Worker to stop. @returns Final worker state after cleanup. */\n async stop(parentSessionId, workerId) {\n try {\n return JSON.stringify(await this.runtime.stop(parentSessionId, workerId));\n }\n catch (error) {\n throw failure(error);\n }\n }\n };\n})();\nexport { CliWorkerService };\nexport default CliWorkerService;\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|