dsh-cliworker-now 0.7.6 → 0.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +53 -11
- package/README.md +56 -11
- package/lib/account-models.mjs +49 -18
- package/lib/client.js +1221 -151
- package/lib/client.js.map +1 -1
- package/lib/grok-catalog.mjs +2 -2
- package/lib/hermes-native-entry.py +48 -13
- package/lib/hermes-nous-refresh.py +331 -0
- package/lib/index.js +9469 -6030
- package/lib/index.js.map +1 -1
- package/lib/native-launch.mjs +62 -7
- package/lib/native-spawn.mjs +32 -0
- package/lib/pi-installation.mjs +27 -3
- package/lib/pi-native-catalog.mjs +17 -7
- package/lib/pi-omp-bridge.mjs +2 -2
- package/lib/pi-omp-refresh.mjs +3 -3
- package/lib/private-launch.mjs +6 -2
- package/lib/terminal-bridge.mjs +2 -2
- package/lib/typert.host.js +265 -25
- package/lib/typert.remote-client.d.ts +8 -0
- package/lib/typert.remote-client.d.ts.map +1 -1
- package/lib/typert.remote-client.js +241 -25
- 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.d.ts +6 -2
- package/lib/types/client/account-terminal.js +260 -31
- package/lib/types/client/account-terminal.js.map +1 -1
- package/lib/types/client/cli-executable-settings.d.ts +13 -0
- package/lib/types/client/cli-executable-settings.js +128 -0
- package/lib/types/client/cli-executable-settings.js.map +1 -0
- package/lib/types/client/management-styles.d.ts +1 -1
- package/lib/types/client/management-styles.js +4 -0
- package/lib/types/client/management-styles.js.map +1 -1
- package/lib/types/client/settings-dialog.js +196 -80
- package/lib/types/client/settings-dialog.js.map +1 -1
- package/lib/types/client/styles.d.ts +1 -1
- package/lib/types/client/styles.js +18 -16
- package/lib/types/client/styles.js.map +1 -1
- 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-models.d.mts +10 -2
- package/lib/types/host/account-models.mjs +49 -18
- package/lib/types/host/accounts.d.ts +3 -2
- package/lib/types/host/accounts.js +168 -29
- package/lib/types/host/accounts.js.map +1 -1
- package/lib/types/host/adapters.d.ts +3 -1
- package/lib/types/host/adapters.js +138 -11
- package/lib/types/host/adapters.js.map +1 -1
- package/lib/types/host/agy-background-environment.d.ts +2 -0
- package/lib/types/host/agy-background-environment.js +7 -0
- package/lib/types/host/agy-background-environment.js.map +1 -0
- package/lib/types/host/agy-models.d.ts +2 -1
- package/lib/types/host/agy-models.js +6 -6
- package/lib/types/host/agy-models.js.map +1 -1
- 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.js +13 -4
- package/lib/types/host/authorized-catalog.js.map +1 -1
- package/lib/types/host/claude-native-oauth.d.ts +17 -0
- package/lib/types/host/claude-native-oauth.js +274 -0
- package/lib/types/host/claude-native-oauth.js.map +1 -0
- package/lib/types/host/claude-own-route.d.ts +45 -0
- package/lib/types/host/claude-own-route.js +375 -0
- package/lib/types/host/claude-own-route.js.map +1 -0
- package/lib/types/host/cli-account-binding.d.ts +2 -1
- package/lib/types/host/cli-account-binding.js +64 -21
- package/lib/types/host/cli-account-binding.js.map +1 -1
- package/lib/types/host/cli-executable-paths.d.ts +30 -0
- package/lib/types/host/cli-executable-paths.js +272 -0
- package/lib/types/host/cli-executable-paths.js.map +1 -0
- package/lib/types/host/codex-models.d.ts +3 -1
- package/lib/types/host/codex-models.js +41 -4
- package/lib/types/host/codex-models.js.map +1 -1
- package/lib/types/host/extended-adapters.d.ts +3 -2
- package/lib/types/host/extended-adapters.js +9 -7
- package/lib/types/host/extended-adapters.js.map +1 -1
- package/lib/types/host/first-party-models.d.ts +5 -0
- package/lib/types/host/first-party-models.js +173 -50
- package/lib/types/host/first-party-models.js.map +1 -1
- package/lib/types/host/hermes-accounts.js +68 -9
- package/lib/types/host/hermes-accounts.js.map +1 -1
- package/lib/types/host/hermes-adapter.d.ts +3 -0
- package/lib/types/host/hermes-adapter.js +13 -4
- package/lib/types/host/hermes-adapter.js.map +1 -1
- package/lib/types/host/hermes-installation.js +54 -35
- package/lib/types/host/hermes-installation.js.map +1 -1
- package/lib/types/host/hermes-models.js +21 -2
- package/lib/types/host/hermes-models.js.map +1 -1
- package/lib/types/host/hermes-native-entry.py +48 -13
- package/lib/types/host/hermes-nous-refresh.py +331 -0
- package/lib/types/host/hermes-nous.d.ts +5 -1
- package/lib/types/host/hermes-nous.js +5 -5
- package/lib/types/host/hermes-nous.js.map +1 -1
- 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-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 +12 -0
- package/lib/types/host/index.js +138 -8
- package/lib/types/host/index.js.map +1 -1
- package/lib/types/host/kimi-accounts.d.ts +2 -0
- package/lib/types/host/kimi-accounts.js +4 -2
- package/lib/types/host/kimi-accounts.js.map +1 -1
- 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/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.mjs +62 -7
- package/lib/types/host/native-process.d.ts +3 -1
- package/lib/types/host/native-process.js +30 -5
- package/lib/types/host/native-process.js.map +1 -1
- package/lib/types/host/native-spawn.mjs +32 -0
- package/lib/types/host/opencode-native.js +13 -0
- package/lib/types/host/opencode-native.js.map +1 -1
- package/lib/types/host/pi-installation.d.mts +1 -1
- package/lib/types/host/pi-installation.mjs +27 -3
- package/lib/types/host/pi-omp-adapter.js +17 -3
- package/lib/types/host/pi-omp-adapter.js.map +1 -1
- package/lib/types/host/pi-omp-native.js +5 -3
- package/lib/types/host/pi-omp-native.js.map +1 -1
- package/lib/types/host/pi-omp-refresh.mjs +3 -3
- package/lib/types/host/private-launch.mjs +23 -0
- package/lib/types/host/process.d.ts +3 -0
- package/lib/types/host/process.js +3 -1
- package/lib/types/host/process.js.map +1 -1
- package/lib/types/host/routing.js +25 -2
- package/lib/types/host/routing.js.map +1 -1
- package/lib/types/host/runtime.js +21 -5
- package/lib/types/host/runtime.js.map +1 -1
- package/lib/types/host/settings-catalog-cache.d.ts +28 -0
- package/lib/types/host/settings-catalog-cache.js +189 -0
- package/lib/types/host/settings-catalog-cache.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 +35 -0
- package/lib/types/host/windows-cli-installation.js +164 -0
- package/lib/types/host/windows-cli-installation.js.map +1 -0
- package/lib/types/host/windows-codex-launch.d.ts +9 -0
- package/lib/types/host/windows-codex-launch.js +216 -0
- package/lib/types/host/windows-codex-launch.js.map +1 -0
- package/lib/types/host/windows-desktop-cli-installation.d.ts +20 -0
- package/lib/types/host/windows-desktop-cli-installation.js +420 -0
- package/lib/types/host/windows-desktop-cli-installation.js.map +1 -0
- package/lib/types/host/windows-hidden-launch.mjs +51 -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-adapter.js +5 -1
- package/lib/types/host/zcode-adapter.js.map +1 -1
- package/lib/types/host/zcode-grok-accounts.d.ts +3 -1
- package/lib/types/host/zcode-grok-accounts.js +60 -11
- package/lib/types/host/zcode-grok-accounts.js.map +1 -1
- package/lib/types/shared/accounts.d.ts +4 -0
- package/lib/types/shared/cli-settings.d.ts +8 -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 +51 -0
- package/lib/zcode-resume.mjs +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-executable-settings.js","sourceRoot":"","sources":["../../../src/client/cli-executable-settings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const workerManagementStyles = "\n.cwn-worker{display:block;padding:12px;min-height:62px}\n.cwn .cwn-worker-menu-anchor{display:block;width:100%}\n.cwn-worker-layout{display:grid;grid-template-columns:minmax(0,1fr) 14px;column-gap:10px;align-items:center;min-width:0}\n.cwn-worker-open{display:flex;align-items:center;gap:10px;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;font:inherit}\n.cwn-worker-open{grid-column:1;grid-row:1}.cwn-worker-open>.cwn-worker-line{flex:1;min-width:0}\n.cwn-worker-layout>.cwn-worker-meta{grid-column:1;grid-row:2}\n.cwn-worker-chevron{grid-column:2;grid-row:1/span 2;align-self:center;display:grid;place-items:center;color:var(--cwn-muted);pointer-events:none}.cwn-worker-chevron>svg{display:block;width:14px;height:14px}\n.cwn-worker-menu{z-index:1100}\n.cwn-archived-list{display:grid;gap:8px}.cwn-archived-row{display:flex;gap:8px;align-items:center;padding:12px;border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover)}.cwn-archived-row>div{min-width:0;flex:1}.cwn-archived-row strong,.cwn-archived-row small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cwn-archived-row small{color:var(--cwn-muted);margin-top:3px}\n.cwn-filter-row{display:flex;align-items:center;gap:6px;margin:10px 0 14px;min-width:0}.cwn-filter-row .cwn-filters{flex:1;min-width:0;margin:0}\n.cwn .cwn-archive-toggle{width:var(--cwn-control-height,36px);min-width:var(--cwn-control-height,36px);height:var(--cwn-control-height,36px);min-height:var(--cwn-control-height,36px);flex:none;padding:0;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 9%,transparent);color:var(--dsw-alias-state-error-primary);border-radius:var(--dsw-radius-md)}.cwn-archive-toggle svg{width:16px;height:16px}.cwn .cwn-archive-toggle:hover:not([aria-pressed=true]){background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 16%,transparent)}.cwn .cwn-archive-toggle[aria-pressed=true]{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 85%,#000);color:#fff}.cwn .cwn-archive-toggle[aria-pressed=true]:hover{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 75%,#000);color:#fff}\n.cwn-resume-banner{box-sizing:border-box;display:flex;align-items:center;gap:8px;flex:none;min-width:0;min-height:38px;margin:0 16px 8px;padding:5px 8px 5px 12px;border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);color:var(--cwn-muted);font-size:12px;line-height:20px}.cwn-resume-banner>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cwn .cwn-resume-banner button{flex:none;height:28px;min-height:28px;padding:0 8px;font-size:12px}\n.cwn-start-empty{height:100%;min-height:140px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:28px 12px}.cwn-start-empty h3{margin:0 0 8px;font-size:16px;font-weight:500;line-height:24px;color:var(--dsw-alias-label-primary);text-wrap:balance}.cwn-start-empty p{max-width:360px;margin:0;font-size:13px;line-height:22px;color:var(--dsw-alias-label-tertiary);text-wrap:balance}\n";
|
|
1
|
+
export declare const workerManagementStyles = "\n.cwn-settings-advanced-heading{flex:1;min-width:0}.cwn-settings-section-head>.cwn-settings-advanced-toggle{flex:none;width:var(--cwn-settings-control-height);min-width:var(--cwn-settings-control-height);padding:0;color:inherit}.cwn-settings-advanced-toggle>svg{transition:transform 220ms cubic-bezier(.2,0,0,1)}.cwn-settings-advanced-toggle[aria-expanded=true]>svg{transform:rotate(180deg)}\n.cwn-settings-advanced-body{display:grid;grid-template-rows:1fr;opacity:1;transition:grid-template-rows 220ms cubic-bezier(.2,0,0,1),opacity 180ms ease,visibility 220ms}.cwn-settings-advanced-body[data-expanded=false]{grid-template-rows:0fr;opacity:0;visibility:hidden}.cwn-settings-advanced-body-inner{min-height:0;overflow:hidden}\n.cwn-cli-path-settings{display:flex;flex-direction:column;gap:var(--cwn-settings-field-gap);min-width:0}.cwn-cli-path-settings>.cwn-setting-row-text{flex:none;color:var(--dsw-alias-label-primary)}.cwn-cli-path-settings form{display:flex;flex-direction:column;gap:var(--cwn-settings-action-gap);min-width:0}.cwn-cli-path-settings .cwn-cli-path-input{width:100%;min-width:0}.cwn-cli-path-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:var(--cwn-settings-action-gap)}\n@media(prefers-reduced-motion:reduce){.cwn-settings-advanced-body,.cwn-settings-advanced-toggle>svg{transition:none}}\n.cwn-worker{display:block;padding:12px;min-height:62px}\n.cwn .cwn-worker-menu-anchor{display:block;width:100%}\n.cwn-worker-layout{display:grid;grid-template-columns:minmax(0,1fr) 14px;column-gap:10px;align-items:center;min-width:0}\n.cwn-worker-open{display:flex;align-items:center;gap:10px;width:100%;padding:0;border:0;background:transparent;color:inherit;text-align:left;font:inherit}\n.cwn-worker-open{grid-column:1;grid-row:1}.cwn-worker-open>.cwn-worker-line{flex:1;min-width:0}\n.cwn-worker-layout>.cwn-worker-meta{grid-column:1;grid-row:2}\n.cwn-worker-chevron{grid-column:2;grid-row:1/span 2;align-self:center;display:grid;place-items:center;color:var(--cwn-muted);pointer-events:none}.cwn-worker-chevron>svg{display:block;width:14px;height:14px}\n.cwn-worker-menu{z-index:1100}\n.cwn-archived-list{display:grid;gap:8px}.cwn-archived-row{display:flex;gap:8px;align-items:center;padding:12px;border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover)}.cwn-archived-row>div{min-width:0;flex:1}.cwn-archived-row strong,.cwn-archived-row small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cwn-archived-row small{color:var(--cwn-muted);margin-top:3px}\n.cwn-filter-row{display:flex;align-items:center;gap:6px;margin:10px 0 14px;min-width:0}.cwn-filter-row .cwn-filters{flex:1;min-width:0;margin:0}\n.cwn .cwn-archive-toggle{width:var(--cwn-control-height,36px);min-width:var(--cwn-control-height,36px);height:var(--cwn-control-height,36px);min-height:var(--cwn-control-height,36px);flex:none;padding:0;background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 9%,transparent);color:var(--dsw-alias-state-error-primary);border-radius:var(--dsw-radius-md)}.cwn-archive-toggle svg{width:16px;height:16px}.cwn .cwn-archive-toggle:hover:not([aria-pressed=true]){background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 16%,transparent)}.cwn .cwn-archive-toggle[aria-pressed=true]{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 85%,#000);color:#fff}.cwn .cwn-archive-toggle[aria-pressed=true]:hover{background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 75%,#000);color:#fff}\n.cwn-resume-banner{box-sizing:border-box;display:flex;align-items:center;gap:8px;flex:none;min-width:0;min-height:38px;margin:0 16px 8px;padding:5px 8px 5px 12px;border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);color:var(--cwn-muted);font-size:12px;line-height:20px}.cwn-resume-banner>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cwn .cwn-resume-banner button{flex:none;height:28px;min-height:28px;padding:0 8px;font-size:12px}\n.cwn-start-empty{height:100%;min-height:140px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:28px 12px}.cwn-start-empty h3{margin:0 0 8px;font-size:16px;font-weight:500;line-height:24px;color:var(--dsw-alias-label-primary);text-wrap:balance}.cwn-start-empty p{max-width:360px;margin:0;font-size:13px;line-height:22px;color:var(--dsw-alias-label-tertiary);text-wrap:balance}\n";
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
// Management additions retain the host Menu, Tooltip, theme and motion primitives.
|
|
2
2
|
export const workerManagementStyles = `
|
|
3
|
+
.cwn-settings-advanced-heading{flex:1;min-width:0}.cwn-settings-section-head>.cwn-settings-advanced-toggle{flex:none;width:var(--cwn-settings-control-height);min-width:var(--cwn-settings-control-height);padding:0;color:inherit}.cwn-settings-advanced-toggle>svg{transition:transform 220ms cubic-bezier(.2,0,0,1)}.cwn-settings-advanced-toggle[aria-expanded=true]>svg{transform:rotate(180deg)}
|
|
4
|
+
.cwn-settings-advanced-body{display:grid;grid-template-rows:1fr;opacity:1;transition:grid-template-rows 220ms cubic-bezier(.2,0,0,1),opacity 180ms ease,visibility 220ms}.cwn-settings-advanced-body[data-expanded=false]{grid-template-rows:0fr;opacity:0;visibility:hidden}.cwn-settings-advanced-body-inner{min-height:0;overflow:hidden}
|
|
5
|
+
.cwn-cli-path-settings{display:flex;flex-direction:column;gap:var(--cwn-settings-field-gap);min-width:0}.cwn-cli-path-settings>.cwn-setting-row-text{flex:none;color:var(--dsw-alias-label-primary)}.cwn-cli-path-settings form{display:flex;flex-direction:column;gap:var(--cwn-settings-action-gap);min-width:0}.cwn-cli-path-settings .cwn-cli-path-input{width:100%;min-width:0}.cwn-cli-path-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:var(--cwn-settings-action-gap)}
|
|
6
|
+
@media(prefers-reduced-motion:reduce){.cwn-settings-advanced-body,.cwn-settings-advanced-toggle>svg{transition:none}}
|
|
3
7
|
.cwn-worker{display:block;padding:12px;min-height:62px}
|
|
4
8
|
.cwn .cwn-worker-menu-anchor{display:block;width:100%}
|
|
5
9
|
.cwn-worker-layout{display:grid;grid-template-columns:minmax(0,1fr) 14px;column-gap:10px;align-items:center;min-width:0}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"management-styles.js","sourceRoot":"","sources":["../../../src/client/management-styles.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG
|
|
1
|
+
{"version":3,"file":"management-styles.js","sourceRoot":"","sources":["../../../src/client/management-styles.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;CAkBrC,CAAA"}
|
|
@@ -9,6 +9,8 @@ import { BrandIcon, Glyph } from "./icons.js";
|
|
|
9
9
|
import { operationMessage } from "./operation-error.js";
|
|
10
10
|
import { value } from "./workers.js";
|
|
11
11
|
import { RolePresetsPane } from "./role-presets.js";
|
|
12
|
+
import { AccountQueryQueue } from "./account-query-queue.js";
|
|
13
|
+
import { CliExecutableSettings } from "./cli-executable-settings.js";
|
|
12
14
|
function readEnabled(raw) {
|
|
13
15
|
const parsed = JSON.parse(raw);
|
|
14
16
|
if (!parsed?.enabled || CLI_IDS.some((id) => typeof parsed.enabled[id] !== 'boolean')) {
|
|
@@ -26,17 +28,17 @@ function providerLoginSummary(account) {
|
|
|
26
28
|
const provider = typeof login.providerLabel === 'string' ? login.providerLabel.trim() : '';
|
|
27
29
|
if (!provider || provider.length > 64 || unsafe.test(provider))
|
|
28
30
|
return [];
|
|
29
|
-
const identity = login.authMethod === 'oauth' && typeof login.accountLabel === 'string'
|
|
30
|
-
? login.accountLabel.trim()
|
|
31
|
-
: '';
|
|
31
|
+
const identity = login.authMethod === 'oauth' && typeof login.accountLabel === 'string' ? login.accountLabel.trim() : '';
|
|
32
32
|
const email = identity.length <= 254 && !unsafe.test(identity) && /^[^\s@]+@[^\s@]+\.[^\s@]+$/u.test(identity)
|
|
33
33
|
? identity
|
|
34
34
|
: '';
|
|
35
|
-
return [
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
36
37
|
label: login.authMethod === 'api' ? `${provider} API 登录` : `${provider}账号登录`,
|
|
37
38
|
authMethod: login.authMethod,
|
|
38
39
|
email,
|
|
39
|
-
}
|
|
40
|
+
},
|
|
41
|
+
];
|
|
40
42
|
});
|
|
41
43
|
if (!logins.length)
|
|
42
44
|
return undefined;
|
|
@@ -59,7 +61,14 @@ function connectionStatus(enabled, account, settingsError = '') {
|
|
|
59
61
|
if (enabled === undefined || !account || (account.loading && !account.data))
|
|
60
62
|
return { state: 'pending', label: '正在检查连接' };
|
|
61
63
|
if (!account.error && account.data?.state === 'unconfigured')
|
|
62
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
state: 'unconfigured',
|
|
66
|
+
label: account.data.installed
|
|
67
|
+
? account.data.cli === 'claude'
|
|
68
|
+
? account.data.summary
|
|
69
|
+
: '未登录'
|
|
70
|
+
: '未安装',
|
|
71
|
+
};
|
|
63
72
|
if (account.error || !account.data || ['unavailable', 'unauthenticated'].includes(account.data.state)) {
|
|
64
73
|
return { state: 'failed', label: account.error || account.data?.summary || '连接失败' };
|
|
65
74
|
}
|
|
@@ -91,35 +100,45 @@ function OpenSettingsDialog({ onClose, api, sessionId, initialCli, openNativeSet
|
|
|
91
100
|
const [accounts, setAccounts] = useState({});
|
|
92
101
|
const enabledRef = useRef(enabled);
|
|
93
102
|
enabledRef.current = enabled;
|
|
94
|
-
const probes = useRef(new
|
|
103
|
+
const probes = useRef(new AccountQueryQueue());
|
|
95
104
|
const toggleController = useRef();
|
|
96
|
-
const
|
|
105
|
+
const accountClose = useRef();
|
|
106
|
+
const leaving = useRef(false);
|
|
107
|
+
const leave = async (transition) => {
|
|
108
|
+
if (leaving.current)
|
|
109
|
+
return;
|
|
110
|
+
leaving.current = true;
|
|
111
|
+
try {
|
|
112
|
+
if (accountClose.current && !(await accountClose.current()))
|
|
113
|
+
return;
|
|
114
|
+
transition();
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
leaving.current = false;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const refreshAccount = useCallback((id, replace = false, clearPrevious = false) => {
|
|
97
121
|
if (!enabledRef.current?.[id])
|
|
98
122
|
return;
|
|
99
|
-
|
|
100
|
-
if (previous && !replace)
|
|
123
|
+
if (probes.current.has(id) && !replace)
|
|
101
124
|
return;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
125
|
+
setAccounts((old) => ({
|
|
126
|
+
...old,
|
|
127
|
+
[id]: { data: clearPrevious ? undefined : old[id]?.data, loading: true },
|
|
128
|
+
}));
|
|
129
|
+
probes.current.enqueue(id, async (signal) => {
|
|
107
130
|
try {
|
|
108
|
-
const next = JSON.parse(value(await api.cliworker.accountStatus(sessionId, id,
|
|
131
|
+
const next = JSON.parse(value(await api.cliworker.accountStatus(sessionId, id, signal)));
|
|
109
132
|
if (next.cli !== id)
|
|
110
133
|
throw new Error('收到不匹配的 CLI 账号状态,请重试');
|
|
111
|
-
if (!
|
|
134
|
+
if (!signal.aborted)
|
|
112
135
|
setAccounts((old) => ({ ...old, [id]: { data: next, loading: false } }));
|
|
113
136
|
}
|
|
114
137
|
catch (error) {
|
|
115
|
-
if (!
|
|
138
|
+
if (!signal.aborted)
|
|
116
139
|
setAccounts((old) => ({ ...old, [id]: { loading: false, error: operationMessage(error) } }));
|
|
117
140
|
}
|
|
118
|
-
|
|
119
|
-
if (probes.current.get(id) === controller)
|
|
120
|
-
probes.current.delete(id);
|
|
121
|
-
}
|
|
122
|
-
})();
|
|
141
|
+
}, replace);
|
|
123
142
|
}, [api, sessionId]);
|
|
124
143
|
useEffect(() => {
|
|
125
144
|
const controller = new AbortController();
|
|
@@ -142,22 +161,20 @@ function OpenSettingsDialog({ onClose, api, sessionId, initialCli, openNativeSet
|
|
|
142
161
|
return () => {
|
|
143
162
|
controller.abort();
|
|
144
163
|
toggleController.current?.abort();
|
|
145
|
-
for (const probe of probes.current.values())
|
|
146
|
-
probe.abort();
|
|
147
164
|
probes.current.clear();
|
|
148
165
|
};
|
|
149
166
|
}, [api, sessionId]);
|
|
150
167
|
useEffect(() => {
|
|
151
168
|
if (!enabled)
|
|
152
169
|
return;
|
|
153
|
-
|
|
170
|
+
probes.current.prioritize(cli);
|
|
171
|
+
for (const id of [cli, ...CLI_IDS.filter((id) => id !== cli)]) {
|
|
154
172
|
if (enabled[id]) {
|
|
155
173
|
if (!accounts[id])
|
|
156
174
|
refreshAccount(id);
|
|
157
175
|
}
|
|
158
176
|
else {
|
|
159
|
-
probes.current.
|
|
160
|
-
probes.current.delete(id);
|
|
177
|
+
probes.current.cancel(id);
|
|
161
178
|
if (accounts[id])
|
|
162
179
|
setAccounts((old) => {
|
|
163
180
|
const next = { ...old };
|
|
@@ -167,9 +184,9 @@ function OpenSettingsDialog({ onClose, api, sessionId, initialCli, openNativeSet
|
|
|
167
184
|
}
|
|
168
185
|
}
|
|
169
186
|
// A completed or failed probe is cached until explicitly refreshed. This
|
|
170
|
-
//
|
|
187
|
+
// Selection only reprioritizes pending work; it does not repeat settled reads.
|
|
171
188
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
172
|
-
}, [enabled, refreshAccount]);
|
|
189
|
+
}, [enabled, cli, refreshAccount]);
|
|
173
190
|
async function toggleCli(id, nextValue) {
|
|
174
191
|
if (!enabled || toggleController.current)
|
|
175
192
|
return;
|
|
@@ -195,25 +212,49 @@ function OpenSettingsDialog({ onClose, api, sessionId, initialCli, openNativeSet
|
|
|
195
212
|
}
|
|
196
213
|
}
|
|
197
214
|
}
|
|
198
|
-
return (_jsx(Modal, { open: true, onClose: onClose, title: "CLI Worker \u8BBE\u7F6E", closeLabel: "\u5173\u95ED\u8BBE\u7F6E", className: "cwn-settings-dialog", contentClassName: "cwn-settings-content", children: _jsxs("div", { className: "cwn-settings-layout", children: [_jsxs("nav", { className: "cwn-settings-nav", "aria-label": "CLI \u8BBE\u7F6E\u5BFC\u822A", children: [_jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-nav-primary", "aria-label": "\u667A\u80FD\u4F53\u8BBE\u7F6E", "aria-pressed": page === 'roles', onClick: () => setPage('roles'), children: [_jsx("span", { className: "cwn-settings-nav-icon", "aria-hidden": "true", children: _jsx(IconUserOutlineRegular, { size: 20 }) }), _jsx("span", { className: "cwn-settings-nav-label", children: "\u667A\u80FD\u4F53\u8BBE\u7F6E" })] }), _jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-nav-primary", "aria-label": "CLI \u8FDE\u63A5", "aria-expanded": cliExpanded, "aria-controls": cliGroupId, onClick: () => setCliExpanded((expanded) => !expanded), children: [_jsx("span", { className: "cwn-settings-nav-icon", "aria-hidden": "true", children: _jsx(IconLinkOutlineRegular, { size: 20 }) }), _jsx("span", { className: "cwn-settings-nav-label", children: "CLI \u8FDE\u63A5" }), _jsx(IconChevronDownOutlineRegular, { size: 14, className: "cwn-settings-nav-chevron" })] }), _jsx("div", { id: cliGroupId, className: "cwn-settings-cli-group", "data-expanded": cliExpanded, "aria-hidden": !cliExpanded, ...(!cliExpanded ? { inert: '' } : {}), children: _jsx("div", { className: "cwn-settings-cli-group-inner", children: order.map((id) => {
|
|
215
|
+
return (_jsx(Modal, { open: true, onClose: () => void leave(onClose), title: "CLI Worker \u8BBE\u7F6E", closeLabel: "\u5173\u95ED\u8BBE\u7F6E", className: "cwn-settings-dialog", contentClassName: "cwn-settings-content", children: _jsxs("div", { className: "cwn-settings-layout", children: [_jsxs("nav", { className: "cwn-settings-nav", "aria-label": "CLI \u8BBE\u7F6E\u5BFC\u822A", children: [_jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-nav-primary", "aria-label": "\u667A\u80FD\u4F53\u8BBE\u7F6E", "aria-pressed": page === 'roles', onClick: () => void leave(() => setPage('roles')), children: [_jsx("span", { className: "cwn-settings-nav-icon", "aria-hidden": "true", children: _jsx(IconUserOutlineRegular, { size: 20 }) }), _jsx("span", { className: "cwn-settings-nav-label", children: "\u667A\u80FD\u4F53\u8BBE\u7F6E" })] }), _jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-nav-primary", "aria-label": "CLI \u8FDE\u63A5", "aria-expanded": cliExpanded, "aria-controls": cliGroupId, onClick: () => setCliExpanded((expanded) => !expanded), children: [_jsx("span", { className: "cwn-settings-nav-icon", "aria-hidden": "true", children: _jsx(IconLinkOutlineRegular, { size: 20 }) }), _jsx("span", { className: "cwn-settings-nav-label", children: "CLI \u8FDE\u63A5" }), _jsx(IconChevronDownOutlineRegular, { size: 14, className: "cwn-settings-nav-chevron" })] }), _jsx("div", { id: cliGroupId, className: "cwn-settings-cli-group", "data-expanded": cliExpanded, "aria-hidden": !cliExpanded, ...(!cliExpanded ? { inert: '' } : {}), children: _jsx("div", { className: "cwn-settings-cli-group-inner", children: order.map((id) => {
|
|
199
216
|
const connection = connectionStatus(enabled?.[id], accounts[id], settingsError);
|
|
200
|
-
return (_jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-cli-item", "aria-label": `${CLI_LABELS[id]} 设置`, "aria-pressed": page === 'cli' && cli === id, tabIndex: cliExpanded ? undefined : -1, "data-enabled": enabled?.[id] !== false, onClick: () => {
|
|
217
|
+
return (_jsxs(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-settings-cli-item", "aria-label": `${CLI_LABELS[id]} 设置`, "aria-pressed": page === 'cli' && cli === id, tabIndex: cliExpanded ? undefined : -1, "data-enabled": enabled?.[id] !== false, onClick: () => void leave(() => {
|
|
201
218
|
setCli(id);
|
|
202
219
|
setPage('cli');
|
|
203
|
-
}, children: [_jsx(BrandIcon, { cli: id, size: 22 }), _jsx("span", { className: "cwn-settings-nav-label", children: CLI_LABELS[id] }), _jsx(Tooltip, { label: connection.label, side: "right", portal: true, children: _jsx("span", { className: "cwn-settings-nav-status", role: "img", "aria-label": connection.label, children: connection.state === 'pending' ? (_jsx(StateDot, { state: "ongoing", size: 12 })) : (_jsx("span", { className: "cwn-connection-dot", "data-state": connection.state })) }) })] }, id));
|
|
204
|
-
}) }) })] }), page === 'roles' ? (_jsx(RolePresetsPane, { api: api, sessionId: sessionId })) : (_jsx(CliSettings, { openNativeSettings: openNativeSettings, api: api, sessionId: sessionId, cli: cli, enabled: enabled?.[cli], account: accounts[cli], connection: connectionStatus(enabled?.[cli], accounts[cli], settingsError), onRefreshAccount: (replace) => refreshAccount(cli, replace), onToggle: (next) => void toggleCli(cli, next), toggleBusy: !!togglingCli, toggling: togglingCli === cli, settingsError: settingsError, toggleError: toggleErrors[cli] || '' }, `${sessionId}:${cli}`))] }) }));
|
|
220
|
+
}), children: [_jsx(BrandIcon, { cli: id, size: 22 }), _jsx("span", { className: "cwn-settings-nav-label", children: CLI_LABELS[id] }), _jsx(Tooltip, { label: connection.label, side: "right", portal: true, children: _jsx("span", { className: "cwn-settings-nav-status", role: "img", "aria-label": connection.label, children: connection.state === 'pending' ? (_jsx(StateDot, { state: "ongoing", size: 12 })) : (_jsx("span", { className: "cwn-connection-dot", "data-state": connection.state })) }) })] }, id));
|
|
221
|
+
}) }) })] }), page === 'roles' ? (_jsx(RolePresetsPane, { api: api, sessionId: sessionId })) : (_jsx(CliSettings, { accountClose: accountClose, openNativeSettings: openNativeSettings, api: api, sessionId: sessionId, cli: cli, enabled: enabled?.[cli], account: accounts[cli], connection: connectionStatus(enabled?.[cli], accounts[cli], settingsError), onRefreshAccount: (replace, clearPrevious) => refreshAccount(cli, replace, clearPrevious), onToggle: (next) => void toggleCli(cli, next), toggleBusy: !!togglingCli, toggling: togglingCli === cli, settingsError: settingsError, toggleError: toggleErrors[cli] || '' }, `${sessionId}:${cli}`))] }) }));
|
|
205
222
|
}
|
|
206
223
|
function NativeChoice({ label, selected, choices, disabled, onChange, }) {
|
|
207
224
|
const [open, setOpen] = useState(false);
|
|
225
|
+
const anchor = useRef(null);
|
|
226
|
+
const [anchorWidth, setAnchorWidth] = useState();
|
|
227
|
+
const menuClass = `cwn-settings-choice-menu-${useId().replace(/[^a-zA-Z0-9_-]/g, '')}`;
|
|
208
228
|
useEffect(() => {
|
|
209
229
|
if (disabled)
|
|
210
230
|
setOpen(false);
|
|
211
231
|
}, [disabled]);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
232
|
+
useEffect(() => {
|
|
233
|
+
const button = anchor.current;
|
|
234
|
+
if (!open || !button)
|
|
235
|
+
return;
|
|
236
|
+
const measure = () => {
|
|
237
|
+
const width = button.getBoundingClientRect().width;
|
|
238
|
+
if (width > 0)
|
|
239
|
+
setAnchorWidth(width);
|
|
240
|
+
};
|
|
241
|
+
measure();
|
|
242
|
+
const observer = new ResizeObserver(measure);
|
|
243
|
+
observer.observe(button);
|
|
244
|
+
return () => observer.disconnect();
|
|
245
|
+
}, [open]);
|
|
246
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { children: anchorWidth === undefined ? '' : `.${menuClass}{--cwn-settings-choice-width:${anchorWidth}px}` }), _jsx(Menu, { open: open && !disabled, onClose: () => setOpen(false), portal: true, align: "start", className: "cwn-settings-choice", listClassName: `cwn-settings-choice-menu ${menuClass}`, selectedId: selected, items: choices, onSelect: (id) => {
|
|
247
|
+
onChange(id);
|
|
248
|
+
setOpen(false);
|
|
249
|
+
}, anchor: _jsxs(Button, { ref: anchor, type: "button", variant: "outline", size: "md", "aria-label": label, "aria-haspopup": "menu", "aria-expanded": open && !disabled, disabled: disabled, onClick: () => {
|
|
250
|
+
if (!open) {
|
|
251
|
+
const width = anchor.current?.getBoundingClientRect().width;
|
|
252
|
+
if (width && width > 0)
|
|
253
|
+
setAnchorWidth(width);
|
|
254
|
+
}
|
|
255
|
+
setOpen((old) => !old);
|
|
256
|
+
}, children: [_jsx("span", { children: choices.find((choice) => choice.id === selected)?.label ??
|
|
257
|
+
(label === '默认思考强度' ? '选择强度' : '选择模型') }), _jsx(IconChevronDownOutlineRegular, { size: 14 })] }) })] }));
|
|
217
258
|
}
|
|
218
259
|
function SectionProgress({ loading, label }) {
|
|
219
260
|
return (_jsx("span", { className: "cwn-section-progress", role: "status", "aria-label": loading ? label : undefined, children: loading && _jsx(StateDot, { state: "ongoing", size: 14 }) }));
|
|
@@ -242,14 +283,16 @@ function AccountSummary({ account, enabled, loading, settingsError, logout, conn
|
|
|
242
283
|
? authenticatedLabel(data)
|
|
243
284
|
: data?.state === 'unconfigured'
|
|
244
285
|
? data.installed
|
|
245
|
-
? '
|
|
286
|
+
? data.cli === 'claude'
|
|
287
|
+
? data.summary
|
|
288
|
+
: '未登录'
|
|
246
289
|
: '未安装'
|
|
247
290
|
: data?.state === 'configured'
|
|
248
291
|
? '已配置'
|
|
249
292
|
: data?.summary || '状态待确认';
|
|
250
|
-
return (_jsx("div", { className: "cwn-account-summary", "data-account-state": current ? data?.state : undefined, "data-provider-logins": !!providerLogins, role: "status", children: _jsxs("div", { className: "cwn-account-status-line", children: [_jsxs("span", { className: "cwn-account-login", "data-state": state, children: [_jsx("span", { className: "cwn-account-status-dot", "data-state": state, "aria-hidden": "true" }), providerLogins ? (_jsx("span", { className: "cwn-account-logins", title: providerLogins.detail, "aria-label": label, children: label })) : label] }), authenticated && !data.logins?.length && !apiLogin && data.accountLabel && (_jsx("span", { className: "cwn-account-label", title: data.accountLabel, children: data.accountLabel })), authenticated && logout] }) }));
|
|
293
|
+
return (_jsx("div", { className: "cwn-account-summary", "data-account-state": current ? data?.state : undefined, "data-provider-logins": !!providerLogins, role: "status", children: _jsxs("div", { className: "cwn-account-status-line", children: [_jsxs("span", { className: "cwn-account-login", "data-state": state, children: [_jsx("span", { className: "cwn-account-status-dot", "data-state": state, "aria-hidden": "true" }), providerLogins ? (_jsx("span", { className: "cwn-account-logins", title: providerLogins.detail, "aria-label": label, children: label })) : (label)] }), authenticated && !data.logins?.length && !apiLogin && data.accountLabel && (_jsx("span", { className: "cwn-account-label", title: data.accountLabel, children: data.accountLabel })), authenticated && logout] }) }));
|
|
251
294
|
}
|
|
252
|
-
function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account, connection, onRefreshAccount, onToggle, toggleBusy, toggling, settingsError, toggleError, }) {
|
|
295
|
+
function CliSettings({ accountClose, openNativeSettings, api, sessionId, cli, enabled, account, connection, onRefreshAccount, onToggle, toggleBusy, toggling, settingsError, toggleError, }) {
|
|
253
296
|
const [catalog, setCatalog] = useState();
|
|
254
297
|
const [modelLoading, setModelLoading] = useState(true);
|
|
255
298
|
const [saving, setSaving] = useState(false);
|
|
@@ -257,14 +300,38 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
257
300
|
const [saveError, setSaveError] = useState('');
|
|
258
301
|
const [saved, setSaved] = useState(false);
|
|
259
302
|
const [modelRevision, refreshModels] = useState(0);
|
|
303
|
+
const forceCatalogRefresh = useRef(false);
|
|
260
304
|
const [model, setModel] = useState('');
|
|
261
305
|
const [effort, setEffort] = useState('default');
|
|
262
306
|
const [action, setAction] = useState();
|
|
263
307
|
const [chosenAction, setChosenAction] = useState();
|
|
264
308
|
const [accountSource, setAccountSource] = useState();
|
|
265
|
-
const
|
|
266
|
-
|
|
309
|
+
const [loginProvider, setLoginProvider] = useState();
|
|
310
|
+
const [pathChanging, setPathChanging] = useState(false);
|
|
311
|
+
const saves = useRef(new AccountQueryQueue(1));
|
|
312
|
+
const saveRevision = useRef(0);
|
|
313
|
+
const latestSave = useRef();
|
|
314
|
+
const selection = useRef({ model: '', effort: 'default' });
|
|
315
|
+
const mounted = useRef(true);
|
|
316
|
+
const cancelSaves = useCallback((updateState = true) => {
|
|
317
|
+
saveRevision.current++;
|
|
318
|
+
latestSave.current = undefined;
|
|
319
|
+
saves.current.clear();
|
|
320
|
+
if (updateState)
|
|
321
|
+
setSaving(false);
|
|
322
|
+
}, []);
|
|
323
|
+
useEffect(() => {
|
|
324
|
+
mounted.current = true;
|
|
325
|
+
return () => {
|
|
326
|
+
mounted.current = false;
|
|
327
|
+
cancelSaves(false);
|
|
328
|
+
};
|
|
329
|
+
}, [cancelSaves]);
|
|
267
330
|
useEffect(() => {
|
|
331
|
+
// A refreshed account/catalog owns a new model scope. Only subsequent
|
|
332
|
+
// human choice events may write a preference in that scope.
|
|
333
|
+
cancelSaves();
|
|
334
|
+
selection.current = { model: '', effort: 'default' };
|
|
268
335
|
setCatalog(undefined);
|
|
269
336
|
setModel('');
|
|
270
337
|
setEffort('default');
|
|
@@ -284,7 +351,11 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
284
351
|
const controller = new AbortController();
|
|
285
352
|
void (async () => {
|
|
286
353
|
try {
|
|
287
|
-
const
|
|
354
|
+
const force = forceCatalogRefresh.current;
|
|
355
|
+
forceCatalogRefresh.current = false;
|
|
356
|
+
const next = JSON.parse(value(await (force
|
|
357
|
+
? api.cliworker.refreshCatalogForCli(sessionId, cli, controller.signal)
|
|
358
|
+
: api.cliworker.catalogForCli(sessionId, cli, controller.signal))));
|
|
288
359
|
if (next.cli !== cli)
|
|
289
360
|
throw new Error('收到不匹配的 CLI 模型目录,请重试');
|
|
290
361
|
if (controller.signal.aborted)
|
|
@@ -298,10 +369,12 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
298
369
|
const chosen = next.preference ? saved : visibleModelChoices(next.models)[0];
|
|
299
370
|
if (next.preference && !saved && next.models.length)
|
|
300
371
|
setModelError('原默认模型已不可用,请重新选择模型');
|
|
301
|
-
|
|
302
|
-
setEffort(next.preference && chosen?.efforts?.includes(next.preference.effort)
|
|
372
|
+
const effort = next.preference && chosen?.efforts?.includes(next.preference.effort)
|
|
303
373
|
? next.preference.effort
|
|
304
|
-
: (chosen?.efforts?.[0] ?? 'default')
|
|
374
|
+
: (chosen?.efforts?.[0] ?? 'default');
|
|
375
|
+
selection.current = { model: chosen?.id ?? '', effort };
|
|
376
|
+
setModel(selection.current.model);
|
|
377
|
+
setEffort(effort);
|
|
305
378
|
}
|
|
306
379
|
catch (error) {
|
|
307
380
|
if (!controller.signal.aborted) {
|
|
@@ -318,42 +391,70 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
318
391
|
return () => {
|
|
319
392
|
controller.abort();
|
|
320
393
|
};
|
|
321
|
-
}, [api, sessionId, cli, enabled, account, modelRevision]);
|
|
394
|
+
}, [api, sessionId, cli, enabled, account, modelRevision, cancelSaves]);
|
|
322
395
|
const inactive = !enabled || toggling;
|
|
323
396
|
const settingsPending = enabled === undefined && !settingsError;
|
|
324
397
|
const accountLoading = !settingsError && enabled !== false && (!account || account.loading);
|
|
325
398
|
const supportedEfforts = catalog?.models.find((item) => item.id === model)?.efforts ?? [];
|
|
326
|
-
const
|
|
327
|
-
|
|
328
|
-
|
|
399
|
+
const choiceDisabled = inactive || pathChanging || modelLoading || accountLoading || !!action || !catalog;
|
|
400
|
+
function savePreference(preference) {
|
|
401
|
+
const key = JSON.stringify(preference);
|
|
402
|
+
if (latestSave.current?.key === key && latestSave.current.state === 'pending')
|
|
329
403
|
return;
|
|
330
|
-
const
|
|
331
|
-
|
|
404
|
+
const revision = ++saveRevision.current;
|
|
405
|
+
latestSave.current = { key, revision, state: 'pending' };
|
|
332
406
|
setSaving(true);
|
|
333
407
|
setSaveError('');
|
|
334
408
|
setSaved(false);
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
saveController.current = undefined;
|
|
347
|
-
setSaving(false);
|
|
409
|
+
// New events replace the waiting choice and cancel the previous request.
|
|
410
|
+
// The queue waits for that request to settle before starting the latest
|
|
411
|
+
// selection, preserving Host cleanup and preventing out-of-order writes.
|
|
412
|
+
saves.current.enqueue('preference', async (signal) => {
|
|
413
|
+
const current = () => mounted.current && !signal.aborted && latestSave.current?.revision === revision;
|
|
414
|
+
try {
|
|
415
|
+
value(await api.cliworker.configure(sessionId, JSON.stringify(preference), signal));
|
|
416
|
+
if (current()) {
|
|
417
|
+
latestSave.current.state = 'saved';
|
|
418
|
+
setSaved(true);
|
|
419
|
+
}
|
|
348
420
|
}
|
|
349
|
-
|
|
421
|
+
catch (error) {
|
|
422
|
+
if (current()) {
|
|
423
|
+
latestSave.current.state = 'failed';
|
|
424
|
+
setSaveError(`${operationMessage(error)};请重新选择模型或思考强度重试`);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
finally {
|
|
428
|
+
if (current())
|
|
429
|
+
setSaving(false);
|
|
430
|
+
}
|
|
431
|
+
}, true);
|
|
350
432
|
}
|
|
351
433
|
const changeModel = (id) => {
|
|
434
|
+
if (choiceDisabled)
|
|
435
|
+
return;
|
|
436
|
+
const chosen = catalog?.models.find((item) => item.id === id);
|
|
437
|
+
if (!chosen?.efforts?.length)
|
|
438
|
+
return;
|
|
439
|
+
const effort = chosen.efforts.includes(selection.current.effort)
|
|
440
|
+
? selection.current.effort
|
|
441
|
+
: chosen.efforts[0];
|
|
442
|
+
selection.current = { model: id, effort };
|
|
352
443
|
setModel(id);
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
444
|
+
setEffort(effort);
|
|
445
|
+
setModelError('');
|
|
446
|
+
savePreference({ cli, model: id, effort });
|
|
447
|
+
};
|
|
448
|
+
const changeEffort = (id) => {
|
|
449
|
+
if (choiceDisabled)
|
|
450
|
+
return;
|
|
451
|
+
const chosen = catalog?.models.find((item) => item.id === selection.current.model);
|
|
452
|
+
const effort = chosen?.efforts?.find((effort) => effort === id);
|
|
453
|
+
if (!chosen || !effort)
|
|
454
|
+
return;
|
|
455
|
+
selection.current = { model: chosen.id, effort };
|
|
456
|
+
setEffort(effort);
|
|
457
|
+
savePreference({ cli, model: chosen.id, effort });
|
|
357
458
|
};
|
|
358
459
|
const finishedAccountAction = () => {
|
|
359
460
|
onRefreshAccount(true);
|
|
@@ -361,10 +462,12 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
361
462
|
const closeAccount = () => {
|
|
362
463
|
setAction(undefined);
|
|
363
464
|
setAccountSource(undefined);
|
|
465
|
+
setLoginProvider(undefined);
|
|
364
466
|
onRefreshAccount(true);
|
|
365
467
|
};
|
|
366
468
|
const sources = chosenAction?.sources?.filter((source, index, all) => ['native', 'plugin'].includes(source.id) && all.findIndex((item) => item.id === source.id) === index);
|
|
367
469
|
const choosingSource = action === 'logout' && chosenAction?.sources !== undefined && !accountSource;
|
|
470
|
+
const choosingLoginProvider = cli === 'zcode' && action === 'login' && !loginProvider;
|
|
368
471
|
const accountAction = (id) => {
|
|
369
472
|
const item = account?.data?.actions.find((candidate) => candidate.id === id);
|
|
370
473
|
const label = item?.target === 'models'
|
|
@@ -387,6 +490,8 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
387
490
|
accountLoading ||
|
|
388
491
|
!!account?.error ||
|
|
389
492
|
!!action ||
|
|
493
|
+
saving ||
|
|
494
|
+
pathChanging ||
|
|
390
495
|
!item ||
|
|
391
496
|
(item.target === 'models' && !openNativeSettings), onClick: () => {
|
|
392
497
|
if (!inactive && item) {
|
|
@@ -395,21 +500,32 @@ function CliSettings({ openNativeSettings, api, sessionId, cli, enabled, account
|
|
|
395
500
|
return;
|
|
396
501
|
}
|
|
397
502
|
setChosenAction(item);
|
|
398
|
-
|
|
399
|
-
|
|
503
|
+
setLoginProvider(undefined);
|
|
504
|
+
setAccountSource(id === 'logout' &&
|
|
505
|
+
item.sources?.length === 1 &&
|
|
506
|
+
['native', 'plugin'].includes(item.sources[0].id)
|
|
507
|
+
? item.sources[0].id
|
|
508
|
+
: undefined);
|
|
400
509
|
setAction(item.id);
|
|
401
510
|
}
|
|
402
511
|
}, children: id === 'logout' ? (_jsxs(_Fragment, { children: [_jsx(Glyph, { name: "logout" }), "\u9000\u51FA"] })) : item?.target === 'models' ? (label) : id === 'manage' ? (_jsxs(_Fragment, { children: [_jsx(Glyph, { name: "tool" }), "\u8D26\u53F7\u7EC8\u7AEF"] })) : item?.label && item.label !== '登录 / 切换账号' ? (item.label) : account?.data?.state === 'authenticated' ? ('切换账号') : ('登录账号') }));
|
|
403
512
|
};
|
|
404
|
-
return (_jsxs("div", { className: "cwn-settings-pane", "aria-label": `${CLI_LABELS[cli]} 配置`, children: [_jsxs("div", { className: "cwn-cli-identity", "data-enabled": enabled !== false, children: [_jsxs("div", { className: "cwn-settings-cli-name", children: [_jsx(BrandIcon, { cli: cli, size: 40 }), _jsxs("div", { children: [_jsx("h2", { children: CLI_LABELS[cli] }), _jsx("p", { className: "cwn-cli-subtitle", children: "\u7BA1\u7406\u8D26\u53F7\u4E0E\u6A21\u578B\u504F\u597D" })] })] }), _jsxs("div", { className: "cwn-cli-toggle", children: [_jsx(SectionProgress, { loading: settingsPending || toggling, label: toggling ? '正在保存 CLI 开关' : '正在读取 CLI 开关' }), _jsx(Switch, { checked: enabled ?? false, onChange: onToggle, label: `启用 ${CLI_LABELS[cli]}`, disabled: enabled === undefined || toggleBusy || saving || !!action, title: action ? '请先关闭账号终端' : undefined })] })] }), _jsx("div", { className: "cwn-cli-toggle-status", role: "status", children: settingsError || toggleError || (enabled === false ? '已关闭' : '') }), _jsxs("section", { className: "cwn-settings-section", "aria-label": "\u8D26\u53F7\u4E0E\u767B\u5F55", children: [_jsxs("div", { className: "cwn-settings-section-head", children: [_jsx("h3", { children: "\u8D26\u53F7\u4E0E\u767B\u5F55" }), _jsxs("div", { className: "cwn-settings-section-tools", children: [_jsx(SectionProgress, { loading: accountLoading, label: `正在读取 ${CLI_LABELS[cli]} 账号…` }), _jsx(Tooltip, { label: "\u5237\u65B0\u767B\u5F55\u72B6\u6001", side: "top", portal: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-refresh", "aria-label": "\u5237\u65B0\u72B6\u6001", disabled: inactive || accountLoading || saving, onClick: () => onRefreshAccount(), children: _jsx(IconRefreshOutlineRegular, { size: 16 }) }) })] })] }), _jsxs("div", { className: "cwn-account-row", children: [_jsx(AccountSummary, { account: account, connection: connection, enabled: enabled, loading: accountLoading, settingsError: settingsError, logout: accountAction('logout') }), _jsxs("div", { className: "cwn-account-actions", children: [accountAction('login'), accountAction('manage')] })] }), action && enabled && (_jsx(Modal, { open: true, onClose:
|
|
513
|
+
return (_jsxs("div", { className: "cwn-settings-pane", "aria-label": `${CLI_LABELS[cli]} 配置`, children: [_jsxs("div", { className: "cwn-cli-identity", "data-enabled": enabled !== false, children: [_jsxs("div", { className: "cwn-settings-cli-name", children: [_jsx(BrandIcon, { cli: cli, size: 40 }), _jsxs("div", { children: [_jsx("h2", { children: CLI_LABELS[cli] }), _jsx("p", { className: "cwn-cli-subtitle", children: "\u7BA1\u7406\u8D26\u53F7\u4E0E\u6A21\u578B\u504F\u597D" })] })] }), _jsxs("div", { className: "cwn-cli-toggle", children: [_jsx(SectionProgress, { loading: settingsPending || toggling, label: toggling ? '正在保存 CLI 开关' : '正在读取 CLI 开关' }), _jsx(Switch, { checked: enabled ?? false, onChange: onToggle, label: `启用 ${CLI_LABELS[cli]}`, disabled: enabled === undefined || toggleBusy || saving || !!action || pathChanging, title: action ? '请先关闭账号终端' : undefined })] })] }), _jsx("div", { className: "cwn-cli-toggle-status", role: "status", children: settingsError || toggleError || (enabled === false ? '已关闭' : '') }), _jsxs("section", { className: "cwn-settings-section", "aria-label": "\u8D26\u53F7\u4E0E\u767B\u5F55", children: [_jsxs("div", { className: "cwn-settings-section-head", children: [_jsx("h3", { children: "\u8D26\u53F7\u4E0E\u767B\u5F55" }), _jsxs("div", { className: "cwn-settings-section-tools", children: [_jsx(SectionProgress, { loading: accountLoading, label: `正在读取 ${CLI_LABELS[cli]} 账号…` }), _jsx(Tooltip, { label: "\u5237\u65B0\u767B\u5F55\u72B6\u6001", side: "top", portal: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-refresh", "aria-label": "\u5237\u65B0\u72B6\u6001", disabled: inactive || accountLoading || saving || pathChanging, onClick: () => onRefreshAccount(), children: _jsx(IconRefreshOutlineRegular, { size: 16 }) }) })] })] }), _jsxs("div", { className: "cwn-account-row", children: [_jsx(AccountSummary, { account: account, connection: connection, enabled: enabled, loading: accountLoading, settingsError: settingsError, logout: accountAction('logout') }), _jsxs("div", { className: "cwn-account-actions", children: [accountAction('login'), accountAction('manage')] })] }), action && enabled && (_jsx(Modal, { open: true, onClose: () => {
|
|
514
|
+
if (accountClose.current)
|
|
515
|
+
void accountClose.current();
|
|
516
|
+
else
|
|
517
|
+
closeAccount();
|
|
518
|
+
}, title: `${CLI_LABELS[cli]} · ${chosenAction?.label ?? '账号终端'}`, closeLabel: "\u5173\u95ED\u8D26\u53F7\u64CD\u4F5C", className: "cwn-account-dialog", contentClassName: "cwn-account-dialog-content", children: choosingLoginProvider ? (_jsxs("section", { "aria-label": "\u9009\u62E9 ZCode \u6388\u6743\u6765\u6E90", children: [_jsx("p", { children: "\u9009\u62E9\u8D26\u53F7\u6240\u5C5E\u7684\u670D\u52A1\u5546" }), _jsxs("div", { className: "cwn-account-actions", children: [_jsx(Button, { variant: "outline", size: "md", onClick: () => setLoginProvider('bigmodel'), children: "\u4E2D\u56FD\u667A\u8C31 BigModel" }), _jsx(Button, { variant: "outline", size: "md", onClick: () => setLoginProvider('zai'), children: "\u6D77\u5916 Z.AI" })] })] })) : choosingSource ? (_jsxs("section", { "aria-label": "\u9009\u62E9\u9000\u51FA\u8D26\u53F7\u6765\u6E90", children: [_jsx("p", { children: sources?.length ? '选择要退出的账号来源' : '账号来源不可用,请关闭后刷新状态' }), _jsx("div", { className: "cwn-account-actions", children: sources?.map((source) => (_jsx(Button, { variant: "outline", size: "md", onClick: () => setAccountSource(source.id), children: source.label }, source.id))) })] })) : (_jsx(AccountTerminal, { closeControl: accountClose, api: api, sessionId: sessionId, cli: cli, action: action, source: accountSource, provider: loginProvider, onClose: closeAccount, onFinished: finishedAccountAction })) }))] }), _jsxs("section", { className: "cwn-settings-section", "aria-label": "\u9879\u76EE\u9ED8\u8BA4\u8BBE\u7F6E", children: [_jsxs("div", { className: "cwn-settings-section-head", children: [_jsx("h3", { children: "\u9879\u76EE\u9ED8\u8BA4\u8BBE\u7F6E" }), _jsxs("div", { className: "cwn-settings-section-tools", children: [_jsx(SectionProgress, { loading: !settingsError && enabled !== false && (modelLoading || settingsPending), label: `正在读取 ${CLI_LABELS[cli]} 模型…` }), _jsx(Tooltip, { label: "\u5237\u65B0\u6A21\u578B\u5217\u8868", side: "top", portal: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "md", className: "cwn-refresh", "aria-label": "\u5237\u65B0\u6A21\u578B", disabled: inactive || modelLoading || saving || pathChanging, onClick: () => {
|
|
519
|
+
forceCatalogRefresh.current = true;
|
|
520
|
+
refreshModels((n) => n + 1);
|
|
521
|
+
}, children: _jsx(IconRefreshOutlineRegular, { size: 16 }) }) })] })] }), _jsxs("form", { className: "cwn-settings-form", onSubmit: (event) => {
|
|
405
522
|
event.preventDefault();
|
|
406
|
-
void save();
|
|
407
523
|
}, children: [_jsxs("label", { className: "cwn-setting-row", children: [_jsxs("span", { className: "cwn-setting-row-text", children: [_jsx("span", { children: "\u6A21\u578B" }), _jsx("span", { className: "cwn-setting-description", children: "\u65B0\u5BF9\u8BDD\u6CBF\u7528\u7684\u9ED8\u8BA4\u6A21\u578B" })] }), _jsx(NativeChoice, { label: "\u9ED8\u8BA4\u6A21\u578B", selected: model, choices: visibleModelChoices(catalog?.models ?? [], model).map((item) => ({
|
|
408
524
|
id: item.id,
|
|
409
525
|
label: item.label,
|
|
410
|
-
})), disabled:
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
526
|
+
})), disabled: choiceDisabled, onChange: changeModel })] }), _jsxs("label", { className: "cwn-setting-row", children: [_jsxs("span", { className: "cwn-setting-row-text", children: [_jsx("span", { children: "\u601D\u8003\u5F3A\u5EA6" }), _jsx("span", { className: "cwn-setting-description", children: "\u4EC5\u63D0\u4F9B\u5F53\u524D\u6A21\u578B\u652F\u6301\u7684\u9009\u9879" })] }), _jsx(NativeChoice, { label: "\u9ED8\u8BA4\u601D\u8003\u5F3A\u5EA6", selected: effort, choices: supportedEfforts.map((id) => ({ id, label: effortLabel(id) })), disabled: choiceDisabled || !supportedEfforts.length, onChange: changeEffort })] }), _jsx("p", { className: "cwn-settings-notice cwn-settings-hint", role: "status", children: modelError || (cli === 'claude' && catalog?.notice?.includes('路由') ? catalog.notice : '') }), (saving || saved || saveError) && (_jsx("div", { className: "cwn-settings-save", children: _jsxs("span", { className: "cwn-settings-feedback-slot", role: "status", children: [saving && _jsx(StateDot, { state: "ongoing", size: 14 }), saveError || (saving ? '正在保存默认设置…' : '默认设置已保存')] }) }))] })] }), _jsx(CliExecutableSettings, { api: api, sessionId: sessionId, cli: cli, blocked: !!action || saving || toggling, accountLoading: accountLoading, accountRevision: account, onApplied: () => {
|
|
527
|
+
if (enabled)
|
|
528
|
+
onRefreshAccount(true, true);
|
|
529
|
+
}, onBusyChange: setPathChanging })] }));
|
|
414
530
|
}
|
|
415
531
|
//# sourceMappingURL=settings-dialog.js.map
|