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
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { chmod, lstat, mkdir, readFile, realpath } from 'node:fs/promises';
|
|
2
|
+
import { lstatSync, realpathSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { basename, dirname, isAbsolute, join, parse, resolve, sep } from 'node:path';
|
|
5
|
+
import { StringDecoder } from 'node:string_decoder';
|
|
6
|
+
import { EFFORTS } from "../shared/types.js";
|
|
7
|
+
import { hermesAccountModels, assertHermesOwnAccounts } from "./hermes-models.js";
|
|
8
|
+
import { hermesNousEfforts, hermesNousMinimumTtl, selectHermesNousSource } from "./hermes-nous.js";
|
|
9
|
+
import { hermesAccountEnvironment } from "./hermes-account-context.js";
|
|
10
|
+
import { verifyHermesExecutable, hermesNativeCommand } from "./hermes-installation.js";
|
|
11
|
+
import { ensureHermesNousFresh } from "./hermes-renewal.js";
|
|
12
|
+
const record = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
|
+
const nonempty = (value) => typeof value === 'string' && !!value.trim() && !value.includes('\0');
|
|
14
|
+
export function hermesHomeDirectory(configured) {
|
|
15
|
+
const nativeDefault = process.platform === 'win32'
|
|
16
|
+
? join(process.env.LOCALAPPDATA?.trim() || join(homedir(), 'AppData', 'Local'), 'hermes')
|
|
17
|
+
: join(homedir(), '.hermes');
|
|
18
|
+
const path = configured?.trim() || process.env.HERMES_HOME?.trim() || nativeDefault;
|
|
19
|
+
return validateHermesHomeDirectory(path);
|
|
20
|
+
}
|
|
21
|
+
function assertConfinedHome(path) {
|
|
22
|
+
const userHome = realpathSync(homedir());
|
|
23
|
+
if (path === parse(path).root || path === userHome || userHome.startsWith(path + sep))
|
|
24
|
+
throw new Error('Unsafe Hermes home: refusing filesystem root, user home or its ancestor');
|
|
25
|
+
}
|
|
26
|
+
/** Account setup may create a new home. Resolve its nearest existing ancestor before
|
|
27
|
+
* granting writes, so a parent symlink cannot turn a narrow-looking path into all of HOME.
|
|
28
|
+
* Returns a canonical path for the sandbox and native HERMES_HOME to share.
|
|
29
|
+
*/
|
|
30
|
+
export function validateHermesHomeDirectory(path) {
|
|
31
|
+
if (!isAbsolute(path) || path.includes('\0'))
|
|
32
|
+
throw new Error('Hermes home must be an absolute path');
|
|
33
|
+
const absolute = resolve(path);
|
|
34
|
+
assertConfinedHome(absolute);
|
|
35
|
+
try {
|
|
36
|
+
if (lstatSync(absolute).isSymbolicLink())
|
|
37
|
+
throw new Error('Unsafe Hermes home symlink');
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (!record(error) || error.code !== 'ENOENT')
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
let ancestor = absolute;
|
|
44
|
+
const missing = [];
|
|
45
|
+
for (;;) {
|
|
46
|
+
try {
|
|
47
|
+
const canonical = join(realpathSync(ancestor), ...missing);
|
|
48
|
+
assertConfinedHome(canonical);
|
|
49
|
+
return canonical;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (!record(error) || error.code !== 'ENOENT')
|
|
53
|
+
throw error;
|
|
54
|
+
const parent = dirname(ancestor);
|
|
55
|
+
if (parent === ancestor)
|
|
56
|
+
throw error;
|
|
57
|
+
missing.unshift(basename(ancestor));
|
|
58
|
+
ancestor = parent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function selection(value) {
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = JSON.parse(value);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
throw new Error('请重新选择 Hermes 原生模型');
|
|
69
|
+
}
|
|
70
|
+
if (!Array.isArray(parsed) || parsed.length !== 2 || !parsed.every(nonempty))
|
|
71
|
+
throw new Error('请重新选择 Hermes 原生模型');
|
|
72
|
+
return [parsed[0], parsed[1]];
|
|
73
|
+
}
|
|
74
|
+
async function environment(stateDirectory, home, nousMinimumTtl) {
|
|
75
|
+
await mkdir(stateDirectory, { recursive: true, mode: 0o700 });
|
|
76
|
+
if ((await lstat(stateDirectory)).isSymbolicLink())
|
|
77
|
+
throw new Error('Unsafe Hermes state symlink');
|
|
78
|
+
await chmod(stateDirectory, 0o700);
|
|
79
|
+
const root = join(await realpath(stateDirectory), 'hermes');
|
|
80
|
+
for (const path of [root, join(root, 'tmp')]) {
|
|
81
|
+
await mkdir(path, { recursive: true, mode: 0o700 });
|
|
82
|
+
if ((await lstat(path)).isSymbolicLink())
|
|
83
|
+
throw new Error('Unsafe Hermes state symlink');
|
|
84
|
+
await chmod(path, 0o700);
|
|
85
|
+
}
|
|
86
|
+
// Preserve native provider/account configuration. No credentials are copied or injected.
|
|
87
|
+
// SAFE_MODE is the plugin-discovery guard; the CLI --safe-mode switch would ALSO discard
|
|
88
|
+
// user provider config, so it is deliberately not used. Native tool permissions remain active.
|
|
89
|
+
return {
|
|
90
|
+
...hermesAccountEnvironment(home),
|
|
91
|
+
PYTHONDONTWRITEBYTECODE: '1',
|
|
92
|
+
TMPDIR: join(root, 'tmp'),
|
|
93
|
+
HERMES_SAFE_MODE: '1',
|
|
94
|
+
HERMES_IGNORE_RULES: '1',
|
|
95
|
+
HERMES_YOLO_MODE: '0',
|
|
96
|
+
HERMES_ACCEPT_HOOKS: '0',
|
|
97
|
+
// Native supported per-process override: reuse a still-usable own invoke JWT
|
|
98
|
+
// instead of proactively refreshing every token below the 30-minute default.
|
|
99
|
+
...(nousMinimumTtl === undefined ? {} : { HERMES_NOUS_MIN_KEY_TTL_SECONDS: nousMinimumTtl }),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
async function requireConfiguration(home) {
|
|
103
|
+
try {
|
|
104
|
+
// Recheck canonical identities at use time, including symlinks in parent components.
|
|
105
|
+
// A changed alias must not expand the writable native-state exception.
|
|
106
|
+
const canonical = await realpath(home);
|
|
107
|
+
if (validateHermesHomeDirectory(home) !== canonical || canonical !== home)
|
|
108
|
+
throw new Error('Unsafe Hermes configuration path changed');
|
|
109
|
+
const directory = await lstat(home);
|
|
110
|
+
const config = await lstat(join(home, 'config.yaml'));
|
|
111
|
+
if (!directory.isDirectory() || directory.isSymbolicLink() || !config.isFile() || config.isSymbolicLink())
|
|
112
|
+
throw new Error('Unsafe Hermes configuration path');
|
|
113
|
+
if ((await realpath(join(home, 'config.yaml'))) !== join(canonical, 'config.yaml'))
|
|
114
|
+
throw new Error('Unsafe Hermes configuration realpath');
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (record(error) && error.code === 'ENOENT')
|
|
118
|
+
throw new Error('请先在 Hermes 登录设置中选择服务商和模型');
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Only explicit native cached capabilities for the selected provider are offered.
|
|
123
|
+
* Other providers, unknown/stale capabilities and ambiguous endpoints keep native defaults.
|
|
124
|
+
* Source: NousResearch/hermes-agent@4787e4d, hermes_cli/models_reasoning_caps.py.
|
|
125
|
+
*/
|
|
126
|
+
async function reasoningEfforts(home, provider, model) {
|
|
127
|
+
const fallback = ['default'];
|
|
128
|
+
if (provider === 'nous')
|
|
129
|
+
return hermesNousEfforts(home, selectHermesNousSource(await assertHermesOwnAccounts(home)), model);
|
|
130
|
+
if (provider !== 'openrouter')
|
|
131
|
+
return fallback;
|
|
132
|
+
try {
|
|
133
|
+
const cacheDirectory = join(home, 'cache');
|
|
134
|
+
const path = join(cacheDirectory, 'reasoning_caps.json');
|
|
135
|
+
if ((await lstat(cacheDirectory)).isSymbolicLink())
|
|
136
|
+
return fallback;
|
|
137
|
+
const info = await lstat(path);
|
|
138
|
+
if (!info.isFile() || info.isSymbolicLink() || info.size > 4 * 1024 * 1024)
|
|
139
|
+
return fallback;
|
|
140
|
+
const cache = JSON.parse(await readFile(path, 'utf8'));
|
|
141
|
+
const entry = record(cache) ? cache['https://openrouter.ai/api/v1/models'] : undefined;
|
|
142
|
+
if (!record(entry) ||
|
|
143
|
+
typeof entry.ts !== 'number' ||
|
|
144
|
+
!Number.isFinite(entry.ts) ||
|
|
145
|
+
Date.now() / 1000 - entry.ts > 24 * 60 * 60 ||
|
|
146
|
+
entry.ts > Date.now() / 1000 + 60 ||
|
|
147
|
+
!record(entry.caps))
|
|
148
|
+
return fallback;
|
|
149
|
+
const capabilities = entry.caps[model];
|
|
150
|
+
if (!record(capabilities) ||
|
|
151
|
+
capabilities.supports_reasoning !== true ||
|
|
152
|
+
!Array.isArray(capabilities.supported_efforts))
|
|
153
|
+
return fallback;
|
|
154
|
+
const efforts = capabilities.supported_efforts.filter((value) => typeof value === 'string' && value !== 'default' && EFFORTS.includes(value));
|
|
155
|
+
return [...new Set([...fallback, ...efforts])];
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return fallback;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** Read-only native scalar queries; never prints a config object containing API keys. */
|
|
162
|
+
export async function discoverHermes(executable, capture, stateDirectory, hermesHome, options = {}) {
|
|
163
|
+
options.signal?.throwIfAborted();
|
|
164
|
+
await verifyHermesExecutable(executable, options.signal ?? AbortSignal.timeout(15000));
|
|
165
|
+
const home = hermesHomeDirectory(hermesHome);
|
|
166
|
+
await requireConfiguration(home);
|
|
167
|
+
if (options.renewal)
|
|
168
|
+
await ensureHermesNousFresh({ ...options.renewal, home, executable });
|
|
169
|
+
const material = await assertHermesOwnAccounts(home, options.signal);
|
|
170
|
+
options.signal?.throwIfAborted();
|
|
171
|
+
const env = await environment(stateDirectory, home, material.config.model?.provider === 'nous' ? String(hermesNousMinimumTtl(material.env)) : undefined);
|
|
172
|
+
const get = async (key) => {
|
|
173
|
+
options.signal?.throwIfAborted();
|
|
174
|
+
const result = await capture(await hermesNativeCommand(executable, ['config', 'get', key, '--json'], options.signal), env);
|
|
175
|
+
options.signal?.throwIfAborted();
|
|
176
|
+
return JSON.parse(result);
|
|
177
|
+
};
|
|
178
|
+
// Native launchers take a per-home install lock and may initialize a new profile's
|
|
179
|
+
// runtime. Parallel scalar queries can race that first initialization.
|
|
180
|
+
// Nous has an authenticated native catalog contract. Its bounded own config is
|
|
181
|
+
// sufficient; the dedicated bounded renewal above is the only metadata write path.
|
|
182
|
+
const model = material.config.model?.provider === 'nous' ? material.config.model.default : await get('model.default');
|
|
183
|
+
const provider = material.config.model?.provider === 'nous' ? 'nous' : await get('model.provider');
|
|
184
|
+
if (!nonempty(model) || !nonempty(provider) || provider === 'auto')
|
|
185
|
+
throw new Error('请在 Hermes 登录设置中明确选择服务商和模型,然后刷新');
|
|
186
|
+
const scope = await hermesAccountModels(home, provider, options);
|
|
187
|
+
options.signal?.throwIfAborted();
|
|
188
|
+
if (scope.state !== 'supported')
|
|
189
|
+
return [];
|
|
190
|
+
const models = await Promise.all(scope.models.map(async (candidate) => ({
|
|
191
|
+
id: JSON.stringify([provider, candidate.id]),
|
|
192
|
+
label: candidate.name ?? candidate.id,
|
|
193
|
+
efforts: await reasoningEfforts(home, provider, candidate.id),
|
|
194
|
+
cost: candidate.cost,
|
|
195
|
+
})));
|
|
196
|
+
options.signal?.throwIfAborted();
|
|
197
|
+
return models;
|
|
198
|
+
}
|
|
199
|
+
/** Official stream-json CLI; not a claim of local installation or live execution. */
|
|
200
|
+
export async function prepareHermes(input) {
|
|
201
|
+
await verifyHermesExecutable(input.executable, input.renewal?.signal ?? AbortSignal.timeout(15000));
|
|
202
|
+
const [provider, model] = selection(input.preference.model);
|
|
203
|
+
if (!['plan', 'accept-edits'].includes(input.mode))
|
|
204
|
+
throw new Error('Invalid Hermes mode');
|
|
205
|
+
if (input.mode === 'plan')
|
|
206
|
+
throw new Error('Hermes 当前原生非交互模式不支持只读派遣,请使用其他 CLI 或明确授权写入任务');
|
|
207
|
+
if (!nonempty(input.prompt))
|
|
208
|
+
throw new Error('Prompt must not be empty');
|
|
209
|
+
if (input.conversationId !== undefined && !nonempty(input.conversationId))
|
|
210
|
+
throw new Error('Invalid Hermes session identity');
|
|
211
|
+
const home = hermesHomeDirectory(input.hermesHome);
|
|
212
|
+
await requireConfiguration(home);
|
|
213
|
+
if (input.renewal)
|
|
214
|
+
await ensureHermesNousFresh({ ...input.renewal, home, executable: input.executable });
|
|
215
|
+
input.renewal?.signal.throwIfAborted();
|
|
216
|
+
const material = await assertHermesOwnAccounts(home, input.renewal?.signal);
|
|
217
|
+
if (provider === 'nous')
|
|
218
|
+
selectHermesNousSource(material);
|
|
219
|
+
const efforts = await reasoningEfforts(home, provider, model);
|
|
220
|
+
if (!efforts.includes(input.preference.effort))
|
|
221
|
+
throw new Error('Hermes 未确认支持此思考强度,请刷新模型后重选');
|
|
222
|
+
return {
|
|
223
|
+
argv: await hermesNativeCommand(input.executable, [
|
|
224
|
+
'--in',
|
|
225
|
+
input.project,
|
|
226
|
+
'chat',
|
|
227
|
+
'--format',
|
|
228
|
+
'stream-json',
|
|
229
|
+
'--model',
|
|
230
|
+
model,
|
|
231
|
+
'--provider',
|
|
232
|
+
provider,
|
|
233
|
+
'--toolsets',
|
|
234
|
+
'terminal,file',
|
|
235
|
+
'--ignore-rules',
|
|
236
|
+
...(input.preference.effort === 'default' ? [] : ['--reasoning', input.preference.effort]),
|
|
237
|
+
...(input.conversationId ? ['--resume', input.conversationId] : []),
|
|
238
|
+
'-q',
|
|
239
|
+
input.prompt,
|
|
240
|
+
]),
|
|
241
|
+
env: await environment(input.stateDirectory, home, provider === 'nous' ? String(hermesNousMinimumTtl(material.env)) : undefined),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/** Map only counters actually reported by the native final envelope. These are run totals,
|
|
245
|
+
* not a model context-window occupancy estimate and not per-message counters.
|
|
246
|
+
*/
|
|
247
|
+
export function hermesTokenUsage(tokens) {
|
|
248
|
+
if (!record(tokens))
|
|
249
|
+
return undefined;
|
|
250
|
+
const count = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value >= 0 ? value : undefined;
|
|
251
|
+
const total = count(tokens.total);
|
|
252
|
+
if (total === undefined)
|
|
253
|
+
return undefined;
|
|
254
|
+
return {
|
|
255
|
+
total,
|
|
256
|
+
input: count(tokens.input),
|
|
257
|
+
output: count(tokens.output),
|
|
258
|
+
cacheRead: count(tokens.cache_read),
|
|
259
|
+
scope: 'run',
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/** Native record validation; the source protocol has no public reasoning event. */
|
|
263
|
+
export function parseHermesRecord(value) {
|
|
264
|
+
if (!record(value))
|
|
265
|
+
throw new Error('Invalid Hermes event');
|
|
266
|
+
const finite = (x) => typeof x === 'number' && Number.isFinite(x) && x >= 0;
|
|
267
|
+
switch (value.type) {
|
|
268
|
+
case 'system':
|
|
269
|
+
if (value.subtype === 'init' && nonempty(value.session_id) && nonempty(value.model))
|
|
270
|
+
return value;
|
|
271
|
+
break;
|
|
272
|
+
case 'text':
|
|
273
|
+
if (typeof value.text === 'string')
|
|
274
|
+
return value;
|
|
275
|
+
break;
|
|
276
|
+
case 'tool_use':
|
|
277
|
+
case 'tool_result':
|
|
278
|
+
if (!nonempty(value.name) || (value.tool_call_id !== undefined && !nonempty(value.tool_call_id)))
|
|
279
|
+
break;
|
|
280
|
+
if (value.type === 'tool_use' && (value.input === undefined || record(value.input)))
|
|
281
|
+
return value;
|
|
282
|
+
if (value.type === 'tool_result' &&
|
|
283
|
+
typeof value.output === 'string' &&
|
|
284
|
+
typeof value.is_error === 'boolean' &&
|
|
285
|
+
finite(value.duration_ms))
|
|
286
|
+
return value;
|
|
287
|
+
break;
|
|
288
|
+
case 'result':
|
|
289
|
+
if (nonempty(value.session_id) &&
|
|
290
|
+
typeof value.text === 'string' &&
|
|
291
|
+
Number.isInteger(value.exit_code) &&
|
|
292
|
+
(value.error === undefined || typeof value.error === 'string') &&
|
|
293
|
+
(value.duration_ms === undefined || finite(value.duration_ms)) &&
|
|
294
|
+
(value.tokens === undefined || (record(value.tokens) && Object.values(value.tokens).every(finite))))
|
|
295
|
+
return value;
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
throw new Error('Invalid Hermes event');
|
|
299
|
+
}
|
|
300
|
+
export class HermesProtocol {
|
|
301
|
+
emit;
|
|
302
|
+
identify;
|
|
303
|
+
maxLineBytes;
|
|
304
|
+
decoder = new StringDecoder('utf8');
|
|
305
|
+
pending = '';
|
|
306
|
+
response = '';
|
|
307
|
+
assistantStep = 0;
|
|
308
|
+
assistantSegmentOpen = false;
|
|
309
|
+
final;
|
|
310
|
+
terminal = false;
|
|
311
|
+
ended = false;
|
|
312
|
+
failure;
|
|
313
|
+
tools = new Map();
|
|
314
|
+
result;
|
|
315
|
+
conversationId;
|
|
316
|
+
constructor(emit, identify, maxLineBytes) {
|
|
317
|
+
this.emit = emit;
|
|
318
|
+
this.identify = identify;
|
|
319
|
+
this.maxLineBytes = maxLineBytes;
|
|
320
|
+
}
|
|
321
|
+
feed(chunk) {
|
|
322
|
+
if (this.ended)
|
|
323
|
+
throw new Error('Hermes stream already ended');
|
|
324
|
+
this.pending += typeof chunk === 'string' ? chunk : this.decoder.write(chunk);
|
|
325
|
+
let end;
|
|
326
|
+
while ((end = this.pending.indexOf('\n')) >= 0) {
|
|
327
|
+
const line = this.pending.slice(0, end).trim();
|
|
328
|
+
this.pending = this.pending.slice(end + 1);
|
|
329
|
+
if (line)
|
|
330
|
+
this.line(line);
|
|
331
|
+
}
|
|
332
|
+
if (Buffer.byteLength(this.pending) > this.maxLineBytes)
|
|
333
|
+
throw new Error('CLI event exceeds maxLineBytes');
|
|
334
|
+
}
|
|
335
|
+
end() {
|
|
336
|
+
if (this.ended)
|
|
337
|
+
return;
|
|
338
|
+
this.pending += this.decoder.end();
|
|
339
|
+
if (this.pending.trim())
|
|
340
|
+
this.line(this.pending.trim());
|
|
341
|
+
this.pending = '';
|
|
342
|
+
this.ended = true;
|
|
343
|
+
if (!this.conversationId)
|
|
344
|
+
return;
|
|
345
|
+
// The native final envelope is authoritative. Tool-progress callbacks are advisory:
|
|
346
|
+
// a model can recover from a failed tool, and a final envelope may follow an unfinished
|
|
347
|
+
// callback. Preserve the observed tool row instead of rewriting the run's outcome.
|
|
348
|
+
const error = this.failure ?? (!this.terminal ? 'Hermes 缺少 result 终态' : undefined);
|
|
349
|
+
this.result = {
|
|
350
|
+
conversationId: this.conversationId,
|
|
351
|
+
status: error ? 'ERROR' : 'SUCCESS',
|
|
352
|
+
response: this.final ?? this.response,
|
|
353
|
+
...(error ? { error } : {}),
|
|
354
|
+
};
|
|
355
|
+
this.emit({
|
|
356
|
+
kind: 'result',
|
|
357
|
+
step: this.assistantStep || undefined,
|
|
358
|
+
text: this.result.response,
|
|
359
|
+
state: this.result.status,
|
|
360
|
+
...(error ? { detail: error } : {}),
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
assistant(text) {
|
|
364
|
+
if (!this.assistantSegmentOpen) {
|
|
365
|
+
this.assistantStep += 1;
|
|
366
|
+
this.assistantSegmentOpen = true;
|
|
367
|
+
}
|
|
368
|
+
this.emit({ kind: 'assistant', step: this.assistantStep, text });
|
|
369
|
+
}
|
|
370
|
+
id(id) {
|
|
371
|
+
if (this.conversationId && this.conversationId !== id)
|
|
372
|
+
throw new Error('Hermes session identity changed');
|
|
373
|
+
if (!this.conversationId)
|
|
374
|
+
this.identify(id);
|
|
375
|
+
this.conversationId = id;
|
|
376
|
+
}
|
|
377
|
+
line(line) {
|
|
378
|
+
if (Buffer.byteLength(line) > this.maxLineBytes)
|
|
379
|
+
throw new Error('CLI event exceeds maxLineBytes');
|
|
380
|
+
if (this.terminal)
|
|
381
|
+
throw new Error('Unexpected event after Hermes result');
|
|
382
|
+
const event = parseHermesRecord(JSON.parse(line));
|
|
383
|
+
if (event.type === 'system') {
|
|
384
|
+
if (this.conversationId)
|
|
385
|
+
throw new Error('Duplicate Hermes init');
|
|
386
|
+
this.id(event.session_id);
|
|
387
|
+
this.emit({ kind: 'status', text: 'CLI 已连接', observedModel: event.model });
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
if (!this.conversationId)
|
|
391
|
+
throw new Error('Missing Hermes init session identity');
|
|
392
|
+
if (event.type === 'text') {
|
|
393
|
+
// Native on_text_delta emits increments (including whitespace), not snapshots.
|
|
394
|
+
// One step identifies a continuous response segment for foldEvents to append.
|
|
395
|
+
if (event.text) {
|
|
396
|
+
this.response += event.text;
|
|
397
|
+
this.assistant(event.text);
|
|
398
|
+
}
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
if (event.type === 'result') {
|
|
402
|
+
this.id(event.session_id);
|
|
403
|
+
this.terminal = true;
|
|
404
|
+
this.final = event.text;
|
|
405
|
+
if (event.exit_code !== 0 || event.error)
|
|
406
|
+
this.failure = event.error || `Hermes 运行失败(${event.exit_code})`;
|
|
407
|
+
// A final envelope replaces the last streamed segment during folding. It must
|
|
408
|
+
// not append a second full answer. A tool boundary with no subsequent deltas
|
|
409
|
+
// still needs a new response row after the tool, including non-streaming models.
|
|
410
|
+
if (event.text && !this.assistantSegmentOpen)
|
|
411
|
+
this.assistant(event.text);
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
this.assistantSegmentOpen = false;
|
|
415
|
+
let key = event.tool_call_id;
|
|
416
|
+
if (event.type === 'tool_use') {
|
|
417
|
+
if (!key) {
|
|
418
|
+
if ([...this.tools.values()].some((tool) => tool.name === event.name && !tool.done))
|
|
419
|
+
throw new Error('Ambiguous Hermes tool identity');
|
|
420
|
+
key = `anonymous:${this.tools.size}`;
|
|
421
|
+
}
|
|
422
|
+
if (this.tools.has(key))
|
|
423
|
+
throw new Error('Duplicate Hermes tool identity');
|
|
424
|
+
const tool = { step: this.tools.size + 1, name: event.name, done: false };
|
|
425
|
+
this.tools.set(key, tool);
|
|
426
|
+
this.emit({
|
|
427
|
+
kind: 'tool',
|
|
428
|
+
text: tool.name,
|
|
429
|
+
step: tool.step,
|
|
430
|
+
state: 'running',
|
|
431
|
+
detail: JSON.stringify(event.input ?? {}),
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
else {
|
|
435
|
+
if (!key) {
|
|
436
|
+
const matching = [...this.tools.entries()].filter(([, tool]) => tool.name === event.name && !tool.done);
|
|
437
|
+
if (matching.length !== 1)
|
|
438
|
+
throw new Error('Unmatched Hermes tool result');
|
|
439
|
+
key = matching[0][0];
|
|
440
|
+
}
|
|
441
|
+
const tool = this.tools.get(key);
|
|
442
|
+
if (!tool || tool.done || tool.name !== event.name)
|
|
443
|
+
throw new Error('Unmatched Hermes tool result');
|
|
444
|
+
tool.done = true;
|
|
445
|
+
this.emit({
|
|
446
|
+
kind: 'tool',
|
|
447
|
+
text: tool.name,
|
|
448
|
+
step: tool.step,
|
|
449
|
+
state: event.is_error ? 'failed' : 'completed',
|
|
450
|
+
detail: event.output,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=hermes-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-adapter.js","sourceRoot":"","sources":["../../../src/host/hermes-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Deliberately bounded subset shared by Host discovery and the sandbox. Native
|
|
2
|
+
* python-dotenv also accepts quoted keys and multiline forms; accepting those
|
|
3
|
+
* without exactly matching its parser could change the pinned account home. */
|
|
4
|
+
export declare function parseHermesOwnEnvironment(source: string): Record<string, string>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { parseEnv } from 'node:util';
|
|
2
|
+
/** Deliberately bounded subset shared by Host discovery and the sandbox. Native
|
|
3
|
+
* python-dotenv also accepts quoted keys and multiline forms; accepting those
|
|
4
|
+
* without exactly matching its parser could change the pinned account home. */
|
|
5
|
+
export function parseHermesOwnEnvironment(source) {
|
|
6
|
+
for (const line of source.split(/\r?\n/)) {
|
|
7
|
+
if (!line.trim() || /^\s*#/.test(line))
|
|
8
|
+
continue;
|
|
9
|
+
if (!/^\s*(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=/.test(line))
|
|
10
|
+
throw new Error('Hermes .env 格式无法安全读取,请使用普通 KEY=value 配置');
|
|
11
|
+
}
|
|
12
|
+
const result = Object.fromEntries(Object.entries(parseEnv(source)).filter((entry) => typeof entry[1] === 'string'));
|
|
13
|
+
// An empty assignment also overrides the process value and re-enables native
|
|
14
|
+
// global fallback. Check presence, never truthiness, for every selector.
|
|
15
|
+
for (const key of ['HOME', 'HERMES_HOME', 'HERMES_PROFILE', 'HERMES_MANAGED_DIR'])
|
|
16
|
+
if (Object.hasOwn(result, key))
|
|
17
|
+
throw new Error('Hermes 账号环境不能重定向账号目录');
|
|
18
|
+
if (Object.values(result).some((value) => value.includes('${')))
|
|
19
|
+
throw new Error('Hermes .env 暂不支持环境变量插值');
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=hermes-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hermes-env.js","sourceRoot":"","sources":["../../../src/host/hermes-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC;;+EAE+E;AAC/E,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QAChD,IAAI,CAAC,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC9D,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CACrC,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CACnE,CACF,CAAA;IACD,6EAA6E;IAC7E,yEAAyE;IACzE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,CAAC;QAC/E,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACzE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class HermesExecutableError extends Error {
|
|
2
|
+
}
|
|
3
|
+
export declare function hermesCommandInstallationHome(argv: string[]): string | undefined;
|
|
4
|
+
/** Reuse the current official checkout's committed dependency environment, not a
|
|
5
|
+
* directory selected by recency/hash guessing. A clean account home must not run
|
|
6
|
+
* the installer's borrowed-home sync. Older/self-contained entries retain their
|
|
7
|
+
* native launcher contract. The child rechecks this selection under its native lock. */
|
|
8
|
+
export declare function hermesNativeCommand(executable: string, args: string[], signal?: AbortSignal): Promise<string[]>;
|
|
9
|
+
/** Inspect the installed fixed exec shim without invoking its installer or auth UI. */
|
|
10
|
+
export declare function verifyHermesExecutable(executable: string, signal: AbortSignal): Promise<void>;
|