@dsh-edge/dsh-edge-agent 0.0.0-stage → 0.1.1
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/CHANGELOG.md +142 -0
- package/LICENSE +21 -0
- package/README.md +372 -2
- package/config/edge.example.json +179 -0
- package/config/privacy-policy.json +202 -0
- package/cordis.desktop-safe.patch.yml +129 -0
- package/cordis.patch.yml +382 -0
- package/cordis.yml +374 -0
- package/lib/attestation.d.ts +2 -0
- package/lib/attestation.d.ts.map +1 -0
- package/lib/attestation.js +2 -0
- package/lib/audit-log.d.ts +2 -0
- package/lib/audit-log.d.ts.map +1 -0
- package/lib/audit-log.js +2 -0
- package/lib/client.js +87 -0
- package/lib/cloud-llm-adapter.d.ts +2 -0
- package/lib/cloud-llm-adapter.d.ts.map +1 -0
- package/lib/cloud-llm-adapter.js +2 -0
- package/lib/dsh-adapter/attestation.d.ts +42 -0
- package/lib/dsh-adapter/attestation.d.ts.map +1 -0
- package/lib/dsh-adapter/attestation.js +40 -0
- package/lib/dsh-adapter/audit-log.d.ts +139 -0
- package/lib/dsh-adapter/audit-log.d.ts.map +1 -0
- package/lib/dsh-adapter/audit-log.js +376 -0
- package/lib/dsh-adapter/cloud-egress.d.ts +181 -0
- package/lib/dsh-adapter/cloud-egress.d.ts.map +1 -0
- package/lib/dsh-adapter/cloud-egress.js +257 -0
- package/lib/dsh-adapter/cloud-llm-adapter.d.ts +416 -0
- package/lib/dsh-adapter/cloud-llm-adapter.d.ts.map +1 -0
- package/lib/dsh-adapter/cloud-llm-adapter.js +1472 -0
- package/lib/dsh-adapter/contract.d.ts +80 -0
- package/lib/dsh-adapter/contract.d.ts.map +1 -0
- package/lib/dsh-adapter/contract.js +194 -0
- package/lib/dsh-adapter/desktop-cookie-janitor.d.ts +214 -0
- package/lib/dsh-adapter/desktop-cookie-janitor.d.ts.map +1 -0
- package/lib/dsh-adapter/desktop-cookie-janitor.js +409 -0
- package/lib/dsh-adapter/dsh-edge-agent.d.ts +48 -0
- package/lib/dsh-adapter/dsh-edge-agent.d.ts.map +1 -0
- package/lib/dsh-adapter/dsh-edge-agent.js +64 -0
- package/lib/dsh-adapter/edge-config.d.ts +484 -0
- package/lib/dsh-adapter/edge-config.d.ts.map +1 -0
- package/lib/dsh-adapter/edge-config.js +898 -0
- package/lib/dsh-adapter/edge-context-view.d.ts +184 -0
- package/lib/dsh-adapter/edge-context-view.d.ts.map +1 -0
- package/lib/dsh-adapter/edge-context-view.js +483 -0
- package/lib/dsh-adapter/effective-model.d.ts +85 -0
- package/lib/dsh-adapter/effective-model.d.ts.map +1 -0
- package/lib/dsh-adapter/effective-model.js +171 -0
- package/lib/dsh-adapter/etscli-shell-guard.d.ts +244 -0
- package/lib/dsh-adapter/etscli-shell-guard.d.ts.map +1 -0
- package/lib/dsh-adapter/etscli-shell-guard.js +420 -0
- package/lib/dsh-adapter/etscli-tools.d.ts +112 -0
- package/lib/dsh-adapter/etscli-tools.d.ts.map +1 -0
- package/lib/dsh-adapter/etscli-tools.js +393 -0
- package/lib/dsh-adapter/file-logger.d.ts +294 -0
- package/lib/dsh-adapter/file-logger.d.ts.map +1 -0
- package/lib/dsh-adapter/file-logger.js +564 -0
- package/lib/dsh-adapter/function-call-external.d.ts +357 -0
- package/lib/dsh-adapter/function-call-external.d.ts.map +1 -0
- package/lib/dsh-adapter/function-call-external.js +1005 -0
- package/lib/dsh-adapter/host-egress-guard.d.ts +161 -0
- package/lib/dsh-adapter/host-egress-guard.d.ts.map +1 -0
- package/lib/dsh-adapter/host-egress-guard.js +213 -0
- package/lib/dsh-adapter/host-llm-trace.d.ts +198 -0
- package/lib/dsh-adapter/host-llm-trace.d.ts.map +1 -0
- package/lib/dsh-adapter/host-llm-trace.js +344 -0
- package/lib/dsh-adapter/http-api-routes.d.ts +61 -0
- package/lib/dsh-adapter/http-api-routes.d.ts.map +1 -0
- package/lib/dsh-adapter/http-api-routes.js +79 -0
- package/lib/dsh-adapter/http-api-sessions.d.ts +105 -0
- package/lib/dsh-adapter/http-api-sessions.d.ts.map +1 -0
- package/lib/dsh-adapter/http-api-sessions.js +173 -0
- package/lib/dsh-adapter/http-api.d.ts +221 -0
- package/lib/dsh-adapter/http-api.d.ts.map +1 -0
- package/lib/dsh-adapter/http-api.js +1811 -0
- package/lib/dsh-adapter/index.d.ts +62 -0
- package/lib/dsh-adapter/index.d.ts.map +1 -0
- package/lib/dsh-adapter/index.js +97 -0
- package/lib/dsh-adapter/input-guard-messages.d.ts +56 -0
- package/lib/dsh-adapter/input-guard-messages.d.ts.map +1 -0
- package/lib/dsh-adapter/input-guard-messages.js +136 -0
- package/lib/dsh-adapter/input-guard.d.ts +508 -0
- package/lib/dsh-adapter/input-guard.d.ts.map +1 -0
- package/lib/dsh-adapter/input-guard.js +2174 -0
- package/lib/dsh-adapter/intent-prompts.d.ts +77 -0
- package/lib/dsh-adapter/intent-prompts.d.ts.map +1 -0
- package/lib/dsh-adapter/intent-prompts.js +97 -0
- package/lib/dsh-adapter/intent-router.d.ts +710 -0
- package/lib/dsh-adapter/intent-router.d.ts.map +1 -0
- package/lib/dsh-adapter/intent-router.js +2802 -0
- package/lib/dsh-adapter/intent-signals.d.ts +208 -0
- package/lib/dsh-adapter/intent-signals.d.ts.map +1 -0
- package/lib/dsh-adapter/intent-signals.js +391 -0
- package/lib/dsh-adapter/invariant-install.d.ts +16 -0
- package/lib/dsh-adapter/invariant-install.d.ts.map +1 -0
- package/lib/dsh-adapter/invariant-install.js +15 -0
- package/lib/dsh-adapter/invariant.d.ts +16 -0
- package/lib/dsh-adapter/invariant.d.ts.map +1 -0
- package/lib/dsh-adapter/invariant.js +22 -0
- package/lib/dsh-adapter/llm-adapters.d.ts +19 -0
- package/lib/dsh-adapter/llm-adapters.d.ts.map +1 -0
- package/lib/dsh-adapter/llm-adapters.js +16 -0
- package/lib/dsh-adapter/llm-internal-caller.d.ts +92 -0
- package/lib/dsh-adapter/llm-internal-caller.d.ts.map +1 -0
- package/lib/dsh-adapter/llm-internal-caller.js +100 -0
- package/lib/dsh-adapter/llm-max-turns.d.ts +55 -0
- package/lib/dsh-adapter/llm-max-turns.d.ts.map +1 -0
- package/lib/dsh-adapter/llm-max-turns.js +127 -0
- package/lib/dsh-adapter/llm-trace-store.d.ts +131 -0
- package/lib/dsh-adapter/llm-trace-store.d.ts.map +1 -0
- package/lib/dsh-adapter/llm-trace-store.js +205 -0
- package/lib/dsh-adapter/llm-trace.d.ts +450 -0
- package/lib/dsh-adapter/llm-trace.d.ts.map +1 -0
- package/lib/dsh-adapter/llm-trace.js +463 -0
- package/lib/dsh-adapter/local-llm-adapter.d.ts +141 -0
- package/lib/dsh-adapter/local-llm-adapter.d.ts.map +1 -0
- package/lib/dsh-adapter/local-llm-adapter.js +787 -0
- package/lib/dsh-adapter/local-storage.d.ts +96 -0
- package/lib/dsh-adapter/local-storage.d.ts.map +1 -0
- package/lib/dsh-adapter/local-storage.js +198 -0
- package/lib/dsh-adapter/model-router.d.ts +79 -0
- package/lib/dsh-adapter/model-router.d.ts.map +1 -0
- package/lib/dsh-adapter/model-router.js +107 -0
- package/lib/dsh-adapter/ohttp-gateway.d.ts +49 -0
- package/lib/dsh-adapter/ohttp-gateway.d.ts.map +1 -0
- package/lib/dsh-adapter/ohttp-gateway.js +32 -0
- package/lib/dsh-adapter/openai-sse.d.ts +85 -0
- package/lib/dsh-adapter/openai-sse.d.ts.map +1 -0
- package/lib/dsh-adapter/openai-sse.js +462 -0
- package/lib/dsh-adapter/pii-utils.d.ts +96 -0
- package/lib/dsh-adapter/pii-utils.d.ts.map +1 -0
- package/lib/dsh-adapter/pii-utils.js +324 -0
- package/lib/dsh-adapter/plugin-host.d.ts +38 -0
- package/lib/dsh-adapter/plugin-host.d.ts.map +1 -0
- package/lib/dsh-adapter/plugin-host.js +38 -0
- package/lib/dsh-adapter/plugin.d.ts +46 -0
- package/lib/dsh-adapter/plugin.d.ts.map +1 -0
- package/lib/dsh-adapter/plugin.js +100 -0
- package/lib/dsh-adapter/privacy-policy.d.ts +237 -0
- package/lib/dsh-adapter/privacy-policy.d.ts.map +1 -0
- package/lib/dsh-adapter/privacy-policy.js +391 -0
- package/lib/dsh-adapter/prompt-guard.d.ts +152 -0
- package/lib/dsh-adapter/prompt-guard.d.ts.map +1 -0
- package/lib/dsh-adapter/prompt-guard.js +872 -0
- package/lib/dsh-adapter/realm-skill-bridge.d.ts +365 -0
- package/lib/dsh-adapter/realm-skill-bridge.d.ts.map +1 -0
- package/lib/dsh-adapter/realm-skill-bridge.js +1180 -0
- package/lib/dsh-adapter/sanitizer-pipeline.d.ts +140 -0
- package/lib/dsh-adapter/sanitizer-pipeline.d.ts.map +1 -0
- package/lib/dsh-adapter/sanitizer-pipeline.js +431 -0
- package/lib/dsh-adapter/secure-bridge.d.ts +47 -0
- package/lib/dsh-adapter/secure-bridge.d.ts.map +1 -0
- package/lib/dsh-adapter/secure-bridge.js +35 -0
- package/lib/dsh-adapter/session-attribution.d.ts +70 -0
- package/lib/dsh-adapter/session-attribution.d.ts.map +1 -0
- package/lib/dsh-adapter/session-attribution.js +76 -0
- package/lib/dsh-adapter/sessions.d.ts +86 -0
- package/lib/dsh-adapter/sessions.d.ts.map +1 -0
- package/lib/dsh-adapter/sessions.js +179 -0
- package/lib/dsh-adapter/tcm.d.ts +55 -0
- package/lib/dsh-adapter/tcm.d.ts.map +1 -0
- package/lib/dsh-adapter/tcm.js +94 -0
- package/lib/dsh-adapter/td-bus.d.ts +87 -0
- package/lib/dsh-adapter/td-bus.d.ts.map +1 -0
- package/lib/dsh-adapter/td-bus.js +196 -0
- package/lib/dsh-adapter/tool-runner.d.ts +185 -0
- package/lib/dsh-adapter/tool-runner.d.ts.map +1 -0
- package/lib/dsh-adapter/tool-runner.js +271 -0
- package/lib/dsh-adapter/tools.d.ts +118 -0
- package/lib/dsh-adapter/tools.d.ts.map +1 -0
- package/lib/dsh-adapter/tools.js +292 -0
- package/lib/dsh-adapter/types.d.ts +23 -0
- package/lib/dsh-adapter/types.d.ts.map +1 -0
- package/lib/dsh-adapter/types.js +16 -0
- package/lib/dsh-adapter/voice-input.d.ts +30 -0
- package/lib/dsh-adapter/voice-input.d.ts.map +1 -0
- package/lib/dsh-adapter/voice-input.js +34 -0
- package/lib/dsh-adapter/web-search-tavily-bocha.d.ts +152 -0
- package/lib/dsh-adapter/web-search-tavily-bocha.d.ts.map +1 -0
- package/lib/dsh-adapter/web-search-tavily-bocha.js +289 -0
- package/lib/http-api.d.ts +2 -0
- package/lib/http-api.d.ts.map +1 -0
- package/lib/http-api.js +2 -0
- package/lib/index.d.ts +48 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +49 -0
- package/lib/intent-router.d.ts +2 -0
- package/lib/intent-router.d.ts.map +1 -0
- package/lib/intent-router.js +2 -0
- package/lib/llm-adapters.d.ts +2 -0
- package/lib/llm-adapters.d.ts.map +1 -0
- package/lib/llm-adapters.js +2 -0
- package/lib/local-llm-adapter.d.ts +2 -0
- package/lib/local-llm-adapter.d.ts.map +1 -0
- package/lib/local-llm-adapter.js +2 -0
- package/lib/local-storage.d.ts +2 -0
- package/lib/local-storage.d.ts.map +1 -0
- package/lib/local-storage.js +2 -0
- package/lib/model-router.d.ts +2 -0
- package/lib/model-router.d.ts.map +1 -0
- package/lib/model-router.js +2 -0
- package/lib/ohttp-gateway.d.ts +2 -0
- package/lib/ohttp-gateway.d.ts.map +1 -0
- package/lib/ohttp-gateway.js +2 -0
- package/lib/plugin-host.d.ts +2 -0
- package/lib/plugin-host.d.ts.map +1 -0
- package/lib/plugin-host.js +2 -0
- package/lib/privacy-policy.d.ts +2 -0
- package/lib/privacy-policy.d.ts.map +1 -0
- package/lib/privacy-policy.js +2 -0
- package/lib/prompt-guard.d.ts +2 -0
- package/lib/prompt-guard.d.ts.map +1 -0
- package/lib/prompt-guard.js +2 -0
- package/lib/sanitizer-pipeline.d.ts +2 -0
- package/lib/sanitizer-pipeline.d.ts.map +1 -0
- package/lib/sanitizer-pipeline.js +2 -0
- package/lib/secure-bridge.d.ts +2 -0
- package/lib/secure-bridge.d.ts.map +1 -0
- package/lib/secure-bridge.js +2 -0
- package/lib/sessions.d.ts +2 -0
- package/lib/sessions.d.ts.map +1 -0
- package/lib/sessions.js +2 -0
- package/lib/tcm.d.ts +2 -0
- package/lib/tcm.d.ts.map +1 -0
- package/lib/tcm.js +2 -0
- package/lib/td-bus.d.ts +2 -0
- package/lib/td-bus.d.ts.map +1 -0
- package/lib/td-bus.js +2 -0
- package/lib/tools.d.ts +2 -0
- package/lib/tools.d.ts.map +1 -0
- package/lib/tools.js +2 -0
- package/lib/voice-input.d.ts +2 -0
- package/lib/voice-input.d.ts.map +1 -0
- package/lib/voice-input.js +2 -0
- package/package.json +341 -3
- package/presets/agent-preset-edge.json +50 -0
- package/presets/edge.desktop-safe.patch.yml +503 -0
- package/presets/edge.patch.yml +557 -0
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edge-config — the single read point for dsh-edge-agent runtime settings.
|
|
3
|
+
*
|
|
4
|
+
* §7.102 (2026-10-21): replaces the two previous chains:
|
|
5
|
+
*
|
|
6
|
+
* old: .env (bare names) → .env.sh (export DSH_EDGE_* derived) → cordis.patch.yml
|
|
7
|
+
* (process.env.DSH_EDGE_LOCAL_LLM_BASEURL, etc.)
|
|
8
|
+
*
|
|
9
|
+
* new: config/edge.json → this loader → plugin Config
|
|
10
|
+
*
|
|
11
|
+
* Why the old chain could not serve every profile:
|
|
12
|
+
*
|
|
13
|
+
* - dsh-tui / dsh-web / dsh-edge (CLI): install.sh sourced
|
|
14
|
+
* ~/.dsh/profiles/<p>/.env.sh, so the derived DSH_EDGE_* vars were
|
|
15
|
+
* present in the process env.
|
|
16
|
+
* - desktop (DeepSeek Harness.exe, Electron): started by the GUI, never
|
|
17
|
+
* goes through install.sh, so process.env had none of them. Every
|
|
18
|
+
* `!!js process.env.DSH_EDGE_LOCAL_LLM_BASEURL || undefined` in the
|
|
19
|
+
* patch resolved to undefined and the plugin fell back to its Schema
|
|
20
|
+
* default (127.0.0.1:8080 — a port owned by an unrelated daemon).
|
|
21
|
+
*
|
|
22
|
+
* The new chain has no process-level dependency: the plugin reads the JSON
|
|
23
|
+
* file itself, so a file that ships inside the bundle works identically in
|
|
24
|
+
* every profile.
|
|
25
|
+
*
|
|
26
|
+
* Lookup order (first hit wins) — §7.182 (2026-11-11, operator ruling):
|
|
27
|
+
* 1. <bundle root>/config/edge.json — the INSTALLED bundle's own config
|
|
28
|
+
* directory. "插件装在哪,配置就在哪" — the user opens the plugin folder
|
|
29
|
+
* and finds the file they are supposed to edit. (§7.182: in a SOURCE
|
|
30
|
+
* CHECKOUT this candidate is SKIPPED — see isSourceCheckout() below —
|
|
31
|
+
* because the repository's config/ directory is no longer a supported
|
|
32
|
+
* drop point.)
|
|
33
|
+
* 2. ~/.dsh-edge-agent/edge.json — the operator's home copy. Survives
|
|
34
|
+
* a reinstall, a profile deletion, and every install channel (npm / git
|
|
35
|
+
* / tarball), so it is the落点 for anything long-lived.
|
|
36
|
+
* (no third candidate — the shipped template is NOT read at runtime; the
|
|
37
|
+
* template's values live in DEFAULT_EDGE_CONFIG below, so "no config file"
|
|
38
|
+
* means exactly what the template used to mean.)
|
|
39
|
+
*
|
|
40
|
+
* §7.182 (operator ruling): **the repository's config/ directory is no longer
|
|
41
|
+
* a supported drop point for the live config.** Why:
|
|
42
|
+
* - it holds the operator's plaintext API keys, and a git checkout is the
|
|
43
|
+
* one place where they can leak into history (§7.178 deleted every such
|
|
44
|
+
* local config);
|
|
45
|
+
* - the npm / git / tarball channels never had that file anyway (the
|
|
46
|
+
* packaging gates exclude `config/edge.json` on purpose), so it was never
|
|
47
|
+
* a cross-channel location;
|
|
48
|
+
* - a source checkout and an installed bundle resolve to the SAME path
|
|
49
|
+
* (`edgeBundleRoot()` walks up from this module), so the ruling is
|
|
50
|
+
* enforced by isSourceCheckout() — in a checkout, candidate #1 is
|
|
51
|
+
* skipped and the runtime reads the same home copy the desktop does.
|
|
52
|
+
* ⇒ One config, two legal落点: the installed bundle's own config dir (where
|
|
53
|
+
* the user looks) and `~/.dsh-edge-agent/edge.json` (where it survives).
|
|
54
|
+
*
|
|
55
|
+
* The loader is deliberately read-only and synchronous: config is read once
|
|
56
|
+
* at plugin apply() time. Hot reload is the caller's job (privacy-policy
|
|
57
|
+
* already implements its own watcher for its own file).
|
|
58
|
+
*/
|
|
59
|
+
export interface EdgeSecrets {
|
|
60
|
+
edgeApiKey?: string;
|
|
61
|
+
deepseekApiKey?: string;
|
|
62
|
+
dashscopeApiKey?: string;
|
|
63
|
+
tavilyApiKey?: string;
|
|
64
|
+
bochaApiKey?: string;
|
|
65
|
+
/** §7.154: MiniMax 直连凭据(llm.cloud 的旧指向)。 */
|
|
66
|
+
minimaxApiKey?: string;
|
|
67
|
+
/** §7.112: 百炼 MaaS(jev 判定模型)。 */
|
|
68
|
+
bailianApiKey?: string;
|
|
69
|
+
/** §7.154: 阿里云 token-plan(当前 local/cloud 两池的凭据)。 */
|
|
70
|
+
aliyuntokenplanApiKey?: string;
|
|
71
|
+
/**
|
|
72
|
+
* §7.154: 运行员的槽位是**开放的** —— `resolveSecret` 按名字查表,
|
|
73
|
+
* 声明式接口不该把新槽位挡在门外(运行时的 env 槽位名就是从槽位名派生的,
|
|
74
|
+
* 见 scripts/edge-config-from-env.ts 的 fieldToEnvSlot)。
|
|
75
|
+
*/
|
|
76
|
+
[slot: string]: string | undefined;
|
|
77
|
+
}
|
|
78
|
+
export interface EdgeLlmPool {
|
|
79
|
+
baseUrl?: string;
|
|
80
|
+
model?: string;
|
|
81
|
+
/** Name of a key inside EdgeSecrets. The literal value is never stored
|
|
82
|
+
* twice — the pool points at the secret, the loader resolves it. */
|
|
83
|
+
keyRef?: string;
|
|
84
|
+
stripTools?: boolean;
|
|
85
|
+
enableThinking?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* §7.106 (2026-10-23): send `reasoning_effort:"none"` when thinking is off.
|
|
88
|
+
* ollama's /v1 layer HONORS this dialect (its probe fix); strict gateways
|
|
89
|
+
* reject unknown params outright (minimax 400 "invalid params" — measured).
|
|
90
|
+
* Opt-in per pool: true for ollama, omit/false for OpenAI-official-style
|
|
91
|
+
* providers. Defaults to false — never surprise a gateway that 400s extras.
|
|
92
|
+
*/
|
|
93
|
+
reasoningEffortNone?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* §7.171 (2026-11-10): DELEGATE 模式(`llm.local` 与 `llm.cloud` 对称)。
|
|
96
|
+
*
|
|
97
|
+
* `baseUrl` 留空 = **转发宿主 profile 已配置的模型提供商**(桌面 GUI 选的那个),
|
|
98
|
+
* 本仓不碰任何 secret;要 edge 自有直连池时填 `baseUrl` + `model` + `keyRef`。
|
|
99
|
+
*
|
|
100
|
+
* - `llm.cloud` 留空 ⇒ DELEGATE(§7.100 既有行为)
|
|
101
|
+
* - `llm.local` 留空 ⇒ DELEGATE(§7.171 新增;此前是「整条路由不注册」)
|
|
102
|
+
*
|
|
103
|
+
* ⚠️ delegate 只改变「**谁提供模型**」,**不改变这一域的隐私口径**:
|
|
104
|
+
* `cloud-llm` 是云池(脱敏 + 只带云段历史);`local-llm` 是本地池
|
|
105
|
+
* (不脱敏 + 带全部历史 —— §7.131 裁决的两条不对称规则)。
|
|
106
|
+
*/
|
|
107
|
+
delegate?: boolean;
|
|
108
|
+
/** Delegate 模式:显式指定目标 provider route id(优先于宿主选择 / 探针)。 */
|
|
109
|
+
delegateProvider?: string;
|
|
110
|
+
/** Delegate 模式:wire model 覆盖(压过宿主选择 / 探针模型)。 */
|
|
111
|
+
delegateModel?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* `llm.cloud` 的形状 —— 与 `llm.local` 同构(§7.171 两池对称)。
|
|
115
|
+
*
|
|
116
|
+
* 用 type alias 而不是 `interface X extends Y {}`:后者在
|
|
117
|
+
* `@typescript-eslint/no-empty-object-type` 下是违规写法。
|
|
118
|
+
*/
|
|
119
|
+
export type EdgeCloudPool = EdgeLlmPool;
|
|
120
|
+
export interface EdgeStage {
|
|
121
|
+
provider?: string;
|
|
122
|
+
model?: string;
|
|
123
|
+
/** intent-router: category used when no LLM verdict and no keyword matched. */
|
|
124
|
+
defaultCategory?: string;
|
|
125
|
+
/** §7.115 (2026-10-25): decision-model-only mode — false = the LLM
|
|
126
|
+
* classifier never runs; jev skips go straight to rules + default. */
|
|
127
|
+
llmFallback?: boolean;
|
|
128
|
+
enabled?: boolean;
|
|
129
|
+
timeoutMs?: number;
|
|
130
|
+
maxInput?: number;
|
|
131
|
+
confidenceThreshold?: number;
|
|
132
|
+
recentLimit?: number;
|
|
133
|
+
cloudKeywords?: string[];
|
|
134
|
+
localEntities?: string[];
|
|
135
|
+
fallbackKeywords?: string[];
|
|
136
|
+
/** §7.124 (2026-10-27): 家庭设备操作正则层的扩展词表(追加到内置词表)。 */
|
|
137
|
+
deviceCommands?: {
|
|
138
|
+
devices?: string[];
|
|
139
|
+
actions?: string[];
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export interface EdgeJevConfig {
|
|
143
|
+
/** §7.182 (2026-11-11, owner ruling): the jev decision-model tier is
|
|
144
|
+
* **OFF by default**. It is an optional accelerator that needs a local
|
|
145
|
+
* decision-model service on 127.0.0.1:8001 (or a Bailian MaaS key);
|
|
146
|
+
* with no config file it must not be probed at all. Turn it on
|
|
147
|
+
* explicitly with `jev.enabled: true`. */
|
|
148
|
+
enabled?: boolean;
|
|
149
|
+
url?: string;
|
|
150
|
+
/** §7.112 (2026-10-25): backend kind. 'local' = the ONNX /predict
|
|
151
|
+
* contract (default); 'bailian-decision' = Alibaba's decision-model
|
|
152
|
+
* /systemone structured-decision interface (POST {model, state,
|
|
153
|
+
* questions}). */
|
|
154
|
+
provider?: 'local' | 'bailian-decision';
|
|
155
|
+
/** §7.112: decision-model id (bailian-decision only, e.g.
|
|
156
|
+
* 'decision-model-preview'). */
|
|
157
|
+
model?: string;
|
|
158
|
+
/** §7.112: secrets keyRef carrying the Bailian MaaS key. */
|
|
159
|
+
apiKeyRef?: string;
|
|
160
|
+
/** §7.112: how the key lands in the Authorization header. 'raw' =
|
|
161
|
+
* `Authorization: <key>` (the org's systemone examples use this);
|
|
162
|
+
* 'bearer' = `Authorization: Bearer <key>` (DashScope compatible-mode
|
|
163
|
+
* convention). Default 'raw'. */
|
|
164
|
+
authScheme?: 'raw' | 'bearer';
|
|
165
|
+
/** §7.115: directional confidence gate — a LOCAL-leaning decision-model
|
|
166
|
+
* verdict adopts at this floor (default 0.5) instead of paying the LLM
|
|
167
|
+
* round-trip; non-LOCAL keeps jev.confidenceThreshold (0.85). */
|
|
168
|
+
localAdoptFloor?: number;
|
|
169
|
+
/** §7.114 (2026-10-25): classify path appended to `url`. '/systemone'
|
|
170
|
+
* (default) = the MaaS deployments; a local MLX serve of the same
|
|
171
|
+
* contract exposes '/v1/classify' — point url at its /v1 and set
|
|
172
|
+
* path '/classify'. */
|
|
173
|
+
path?: string;
|
|
174
|
+
timeoutMs?: number;
|
|
175
|
+
confidenceThreshold?: number;
|
|
176
|
+
riskThreshold?: number;
|
|
177
|
+
breakerTtlMs?: number;
|
|
178
|
+
bootProbeEnabled?: boolean;
|
|
179
|
+
bootProbeTimeoutMs?: number;
|
|
180
|
+
breakerProbeMs?: number;
|
|
181
|
+
probeTimeoutMs?: number;
|
|
182
|
+
}
|
|
183
|
+
export interface EdgeFunctionCallExternalConfig {
|
|
184
|
+
enabled?: boolean;
|
|
185
|
+
url?: string;
|
|
186
|
+
timeoutMs?: number;
|
|
187
|
+
confidenceThreshold?: number;
|
|
188
|
+
breakerTtlMs?: number;
|
|
189
|
+
bootProbeEnabled?: boolean;
|
|
190
|
+
bootProbeTimeoutMs?: number;
|
|
191
|
+
breakerProbeMs?: number;
|
|
192
|
+
probeTimeoutMs?: number;
|
|
193
|
+
}
|
|
194
|
+
export interface EdgePrivacyConfig {
|
|
195
|
+
inputGuardEnabled?: boolean;
|
|
196
|
+
rejectPolicyEnabled?: boolean;
|
|
197
|
+
sanitizeDowngradeEnabled?: boolean;
|
|
198
|
+
realmHotReload?: boolean;
|
|
199
|
+
realmWatchMs?: number;
|
|
200
|
+
/** privacy-policy.json path; derived from ~/.dsh-edge-agent when unset. */
|
|
201
|
+
policyPath?: string;
|
|
202
|
+
policyHotReload?: boolean;
|
|
203
|
+
policyWatchMs?: number;
|
|
204
|
+
/** skill-realms.json path; derived from ~/.dsh-edge-agent when unset. */
|
|
205
|
+
realmConfigPath?: string;
|
|
206
|
+
/** Sanitizer session-mapping lifetime (ms). */
|
|
207
|
+
sanTtlMs?: number;
|
|
208
|
+
/** Max concurrent sanitizer session mappings before LRU eviction. */
|
|
209
|
+
sanMaxSessions?: number;
|
|
210
|
+
/** Sanitizer sweep interval (ms). */
|
|
211
|
+
sanSweepMs?: number;
|
|
212
|
+
}
|
|
213
|
+
export interface EdgeResourcesConfig {
|
|
214
|
+
maxSessions?: number;
|
|
215
|
+
maxBodyBytes?: number;
|
|
216
|
+
sessionIdleMs?: number;
|
|
217
|
+
sanMaxSessions?: number;
|
|
218
|
+
sanSweepMs?: number;
|
|
219
|
+
sanTtlMs?: number;
|
|
220
|
+
}
|
|
221
|
+
export interface EdgeAuditConfig {
|
|
222
|
+
minLevel?: string;
|
|
223
|
+
flushMs?: number;
|
|
224
|
+
logLevel?: string;
|
|
225
|
+
logMaxAgeDays?: number;
|
|
226
|
+
logMaxRotated?: number;
|
|
227
|
+
/** audit-log plugin storage dir (defaults to ~/.dsh-edge-agent/audit). */
|
|
228
|
+
root?: string;
|
|
229
|
+
/** file-logger plugin storage dir (defaults to ~/.dsh-edge-agent/log). */
|
|
230
|
+
logRoot?: string;
|
|
231
|
+
/**
|
|
232
|
+
* §7.118 详细 LLM request/response 追踪的开关组。
|
|
233
|
+
* 落在 audit 段下(而不是新开顶层段):它描述的是"日志写什么",
|
|
234
|
+
* 与 logLevel / logRoot 同属日志面,不该被当成独立子系统。
|
|
235
|
+
*/
|
|
236
|
+
llmTrace?: {
|
|
237
|
+
enabled?: boolean;
|
|
238
|
+
includeRequest?: boolean;
|
|
239
|
+
includeResponse?: boolean;
|
|
240
|
+
maxChars?: number;
|
|
241
|
+
maxMessages?: number;
|
|
242
|
+
redactPii?: boolean;
|
|
243
|
+
redactSecrets?: boolean;
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
export interface EdgeTeeConfig {
|
|
247
|
+
type?: string;
|
|
248
|
+
/** tcm keystore directory (defaults to ~/.dsh-edge-agent). */
|
|
249
|
+
storageRoot?: string;
|
|
250
|
+
/** Full keystore file path; derived from storageRoot when unset. */
|
|
251
|
+
keyStorePath?: string;
|
|
252
|
+
}
|
|
253
|
+
export interface EdgeThreatConfig {
|
|
254
|
+
cloudRate?: number;
|
|
255
|
+
blockLevel?: string;
|
|
256
|
+
}
|
|
257
|
+
export interface EdgeWebSearchConfig {
|
|
258
|
+
/** §7.182 (2026-11-11, owner ruling): the Tavily tier is **OFF by
|
|
259
|
+
* default** ⇒ out of the box only the DeepSeek tier
|
|
260
|
+
* (secrets.deepseekApiKey) is on the chain. Opt in with
|
|
261
|
+
* `webSearch.tavilyEnabled: true`. */
|
|
262
|
+
tavilyEnabled?: boolean;
|
|
263
|
+
/** §7.182: the 博查 AI tier is **OFF by default** (same rule). */
|
|
264
|
+
bochaEnabled?: boolean;
|
|
265
|
+
}
|
|
266
|
+
export interface EdgeAgentConfig {
|
|
267
|
+
persona?: string;
|
|
268
|
+
localToolsWritable?: boolean;
|
|
269
|
+
localToolsAllowlist?: string;
|
|
270
|
+
permissionMode?: string;
|
|
271
|
+
}
|
|
272
|
+
/** local-storage plugin (plaintext JSONL KV root). */
|
|
273
|
+
export interface EdgeStorageConfig {
|
|
274
|
+
root?: string;
|
|
275
|
+
}
|
|
276
|
+
/** etscli read-only tool wrapper (§7.98). */
|
|
277
|
+
export interface EdgeEtscliConfig {
|
|
278
|
+
bin?: string;
|
|
279
|
+
timeoutMs?: number;
|
|
280
|
+
}
|
|
281
|
+
export interface EdgeConfig {
|
|
282
|
+
secrets?: EdgeSecrets;
|
|
283
|
+
http?: {
|
|
284
|
+
host?: string;
|
|
285
|
+
port?: number;
|
|
286
|
+
};
|
|
287
|
+
llm?: {
|
|
288
|
+
local?: EdgeLlmPool;
|
|
289
|
+
cloud?: EdgeCloudPool;
|
|
290
|
+
};
|
|
291
|
+
stages?: {
|
|
292
|
+
guard?: EdgeStage;
|
|
293
|
+
intent?: EdgeStage;
|
|
294
|
+
};
|
|
295
|
+
jev?: EdgeJevConfig;
|
|
296
|
+
functionCallExternal?: EdgeFunctionCallExternalConfig;
|
|
297
|
+
privacy?: EdgePrivacyConfig;
|
|
298
|
+
resources?: EdgeResourcesConfig;
|
|
299
|
+
audit?: EdgeAuditConfig;
|
|
300
|
+
tee?: EdgeTeeConfig;
|
|
301
|
+
threat?: EdgeThreatConfig;
|
|
302
|
+
webSearch?: EdgeWebSearchConfig;
|
|
303
|
+
agent?: EdgeAgentConfig;
|
|
304
|
+
storage?: EdgeStorageConfig;
|
|
305
|
+
etscli?: EdgeEtscliConfig;
|
|
306
|
+
}
|
|
307
|
+
export declare const DEFAULT_EDGE_CONFIG: EdgeConfig;
|
|
308
|
+
/**
|
|
309
|
+
* Root of the installed bundle (the directory holding `lib/` and
|
|
310
|
+
* `config/`), or the repo root when running from source.
|
|
311
|
+
*
|
|
312
|
+
* src/dsh-adapter/ → repo root (dev) or bundle root (installed).
|
|
313
|
+
*/
|
|
314
|
+
export declare function edgeBundleRoot(): string;
|
|
315
|
+
/**
|
|
316
|
+
* Is the bundle root a SOURCE CHECKOUT (this repository) rather than an
|
|
317
|
+
* installed bundle?
|
|
318
|
+
*
|
|
319
|
+
* §7.182 (2026-11-11): the repository's `config/` directory is no longer a
|
|
320
|
+
* supported drop point for the live config — it is where plaintext API keys
|
|
321
|
+
* would live inside a git checkout. An installed bundle (npm / git / tarball
|
|
322
|
+
* / local directory) carries `lib/` and `config/` but never `src/`, so the
|
|
323
|
+
* two are told apart reliably:
|
|
324
|
+
*
|
|
325
|
+
* · source checkout → `src/dsh-adapter/` exists → candidate #1 SKIPPED
|
|
326
|
+
* · installed bundle → no `src/` tree → candidate #1 ACTIVE
|
|
327
|
+
*
|
|
328
|
+
* ⇒ In a checkout the runtime reads the SAME home copy the desktop does
|
|
329
|
+
* (`~/.dsh-edge-agent/edge.json`), so dev and production cannot diverge.
|
|
330
|
+
*/
|
|
331
|
+
export declare function isSourceCheckout(bundleRoot?: string): boolean;
|
|
332
|
+
/**
|
|
333
|
+
* Candidate paths, in priority order — **exactly two** (§7.182).
|
|
334
|
+
*
|
|
335
|
+
* 1. the INSTALLED bundle's own `config/edge.json` — where the user looks
|
|
336
|
+
* ("插件装在哪,配置就在哪"); skipped in a source checkout (see
|
|
337
|
+
* isSourceCheckout());
|
|
338
|
+
* 2. `~/.dsh-edge-agent/edge.json` — the durable落点: survives a reinstall,
|
|
339
|
+
* a profile deletion, and every install channel.
|
|
340
|
+
*
|
|
341
|
+
* There is NO third candidate. The shipped template (`config/edge.example.json`)
|
|
342
|
+
* used to be candidate #3; §7.182 dropped it, and its values were folded into
|
|
343
|
+
* DEFAULT_EDGE_CONFIG instead ⇒ "no config file" still means exactly what the
|
|
344
|
+
* template used to mean. The template file itself keeps shipping — it is what
|
|
345
|
+
* an operator copies from, not a runtime input.
|
|
346
|
+
*/
|
|
347
|
+
export declare function edgeConfigCandidates(bundleRoot?: string, homeDir?: string): string[];
|
|
348
|
+
/** Path of the file that was actually loaded, or undefined when defaults
|
|
349
|
+
* are in use. Exposed for diagnostics / audit.
|
|
350
|
+
*
|
|
351
|
+
* §7.182: 命中的是两档候选里的哪一个(顺位 1 插件目录 / 顺位 2 home);
|
|
352
|
+
* 模板 edge.example.json 永远不会是命中项。 */
|
|
353
|
+
export declare function edgeConfigPath(): string | undefined;
|
|
354
|
+
/**
|
|
355
|
+
* Default data location under the user home (`~/.dsh-edge-agent/...`).
|
|
356
|
+
* Plugins use this when the corresponding edge.json path field is unset —
|
|
357
|
+
* the old patch rows derived the same expression via `!!js HOME`, which is
|
|
358
|
+
* what §7.102's "one config file" rule moves into code.
|
|
359
|
+
*/
|
|
360
|
+
export declare function edgeHome(...segments: string[]): string;
|
|
361
|
+
/**
|
|
362
|
+
* Apply the env override layer on top of a freshly loaded config.
|
|
363
|
+
*
|
|
364
|
+
* §7.154: exported so scripts/edge-config-from-env.ts can apply the SAME
|
|
365
|
+
* mapping the runtime uses without writing the template to the target file
|
|
366
|
+
* first. That script used to copy the template over the operator's live
|
|
367
|
+
* config (destroying every secret that only existed in the real file) even
|
|
368
|
+
* under --dry-run — it needed this layer, and the file round-trip was the
|
|
369
|
+
* only way it could reach it.
|
|
370
|
+
*
|
|
371
|
+
* Mutates and returns `cfg`.
|
|
372
|
+
*/
|
|
373
|
+
export declare function applyEnvOverrides(cfg: EdgeConfig): EdgeConfig;
|
|
374
|
+
/**
|
|
375
|
+
* Load the effective configuration. Cached after the first call — callers
|
|
376
|
+
* that need a re-read can call resetEdgeConfigCache().
|
|
377
|
+
*/
|
|
378
|
+
export declare function loadEdgeConfig(force?: boolean, candidates?: string[]): EdgeConfig;
|
|
379
|
+
/** Drop the cache so the next loadEdgeConfig() re-reads from disk. */
|
|
380
|
+
export declare function resetEdgeConfigCache(): void;
|
|
381
|
+
/**
|
|
382
|
+
* Merge one section of the edge config into a plugin's cordis Config.
|
|
383
|
+
*
|
|
384
|
+
* The cordis patch row no longer carries any local configuration (§7.102) —
|
|
385
|
+
* it only declares the plugin. The plugin therefore fills its own Config
|
|
386
|
+
* from this file at apply() time.
|
|
387
|
+
*
|
|
388
|
+
* @param section which section of edge.json to read
|
|
389
|
+
* @param mapping config field name -> edge.json field name
|
|
390
|
+
* @param target the plugin's Config object, mutated in place
|
|
391
|
+
* @param ctx optional logger; when given, changes are logged
|
|
392
|
+
*/
|
|
393
|
+
export declare function mergeEdgeConfig<T extends Record<string, unknown>>(section: keyof EdgeConfig, mapping: Record<string, string>, target: T, logger?: {
|
|
394
|
+
info?: (msg: string) => void;
|
|
395
|
+
}): T;
|
|
396
|
+
/** Resolve a key reference (e.g. 'dashscopeApiKey') to its literal value. */
|
|
397
|
+
export declare function resolveSecret(cfg: EdgeConfig, ref: string | undefined): string | undefined;
|
|
398
|
+
/**
|
|
399
|
+
* §7.154: secret references that name a slot that is not there.
|
|
400
|
+
*
|
|
401
|
+
* `resolveSecret` returns undefined for a missing slot — correct as a
|
|
402
|
+
* lookup, dangerous as a CONFIG outcome. Rename or delete a secrets slot
|
|
403
|
+
* and the pool silently ends up with no credential; the failure surfaces
|
|
404
|
+
* only at the first call (loudly, as MISSING_CREDENTIAL), which can be a
|
|
405
|
+
* long way from the edit that caused it.
|
|
406
|
+
*
|
|
407
|
+
* Observed 2026-10-29: the operator replaced `secrets.minimaxApiKey` with
|
|
408
|
+
* `secrets.aliyuntokenplanApiKey` and repointed `llm.local.keyRef` — but
|
|
409
|
+
* `llm.cloud.keyRef` kept naming the removed slot. The cloud pool was in
|
|
410
|
+
* DIRECT mode with no credential, and nothing said so at boot.
|
|
411
|
+
*
|
|
412
|
+
* Reports FIELD and SLOT NAMES only — never a value.
|
|
413
|
+
*/
|
|
414
|
+
export interface DanglingSecretRef {
|
|
415
|
+
/** Config path of the reference, e.g. 'llm.cloud.keyRef'. */
|
|
416
|
+
field: string;
|
|
417
|
+
/** The slot that was named but is absent (or empty), e.g. 'minimaxApiKey'. */
|
|
418
|
+
ref: string;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Every secret reference in the config that points at a slot which is not
|
|
422
|
+
* there (or is empty).
|
|
423
|
+
*
|
|
424
|
+
* @param cfg the config to inspect; defaults to the effective one
|
|
425
|
+
*/
|
|
426
|
+
export declare function danglingSecretRefs(cfg?: EdgeConfig): DanglingSecretRef[];
|
|
427
|
+
/**
|
|
428
|
+
* One-line human summary of dangling references, for an operator-facing log.
|
|
429
|
+
*/
|
|
430
|
+
export declare function formatDanglingSecretRefs(refs: DanglingSecretRef[]): string;
|
|
431
|
+
/**
|
|
432
|
+
* The local-LLM pool with its secret resolved into an api key.
|
|
433
|
+
*
|
|
434
|
+
* §7.171: `baseUrl` 留空 = DELEGATE 模式(转发宿主提供商),与 `llm.cloud` 对称。
|
|
435
|
+
* `delegate: false` 是 kill switch —— 回到 opt-in 语义(不注册任何路由)。
|
|
436
|
+
*/
|
|
437
|
+
export declare function localPool(cfg?: EdgeConfig): {
|
|
438
|
+
baseUrl?: string;
|
|
439
|
+
model?: string;
|
|
440
|
+
apiKey?: string;
|
|
441
|
+
stripTools: boolean;
|
|
442
|
+
enableThinking: boolean;
|
|
443
|
+
reasoningEffortNone: boolean;
|
|
444
|
+
/** §7.171: baseUrl 留空时是否走 DELEGATE(默认 true)。 */
|
|
445
|
+
delegate: boolean;
|
|
446
|
+
delegateProvider?: string;
|
|
447
|
+
delegateModel?: string;
|
|
448
|
+
};
|
|
449
|
+
/** The cloud-LLM pool. Empty baseUrl means DELEGATE mode. */
|
|
450
|
+
export declare function cloudPool(cfg?: EdgeConfig): {
|
|
451
|
+
baseUrl?: string;
|
|
452
|
+
model?: string;
|
|
453
|
+
apiKey?: string;
|
|
454
|
+
delegate: boolean;
|
|
455
|
+
delegateProvider?: string;
|
|
456
|
+
delegateModel?: string;
|
|
457
|
+
};
|
|
458
|
+
/** §7.112 (2026-10-25): the jev intent-recognizer pool. `apiKey` resolves
|
|
459
|
+
* `apiKeyRef` → `secrets.*` — the Bailian MaaS systemone endpoint requires
|
|
460
|
+
* an Authorization header, which the local ONNX jev never needed. */
|
|
461
|
+
export declare function jevPool(cfg?: EdgeConfig): {
|
|
462
|
+
enabled?: boolean;
|
|
463
|
+
url?: string;
|
|
464
|
+
provider?: 'local' | 'bailian-decision';
|
|
465
|
+
model?: string;
|
|
466
|
+
apiKey?: string;
|
|
467
|
+
authScheme?: 'raw' | 'bearer';
|
|
468
|
+
path?: string;
|
|
469
|
+
};
|
|
470
|
+
/**
|
|
471
|
+
* The model an internal LLM stage should use.
|
|
472
|
+
*
|
|
473
|
+
* §7.100 privacy invariant: internal stages (guard detection, intent
|
|
474
|
+
* classification) must only ever target the LOCAL pool. The stage config
|
|
475
|
+
* may name a provider, but a cloud provider is refused here — sending the
|
|
476
|
+
* raw user text to a cloud model would break the edge-side privacy promise.
|
|
477
|
+
* The caller falls back to its keyword / regex rules when this returns
|
|
478
|
+
* undefined and no local endpoint is reachable.
|
|
479
|
+
*/
|
|
480
|
+
export declare function stageModel(stage: 'guard' | 'intent', cfg?: EdgeConfig): {
|
|
481
|
+
provider: string;
|
|
482
|
+
model?: string;
|
|
483
|
+
} | undefined;
|
|
484
|
+
//# sourceMappingURL=edge-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-config.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/edge-config.ts"],"names":[],"mappings":"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"}
|