@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.
Files changed (238) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/LICENSE +21 -0
  3. package/README.md +372 -2
  4. package/config/edge.example.json +179 -0
  5. package/config/privacy-policy.json +202 -0
  6. package/cordis.desktop-safe.patch.yml +129 -0
  7. package/cordis.patch.yml +382 -0
  8. package/cordis.yml +374 -0
  9. package/lib/attestation.d.ts +2 -0
  10. package/lib/attestation.d.ts.map +1 -0
  11. package/lib/attestation.js +2 -0
  12. package/lib/audit-log.d.ts +2 -0
  13. package/lib/audit-log.d.ts.map +1 -0
  14. package/lib/audit-log.js +2 -0
  15. package/lib/client.js +87 -0
  16. package/lib/cloud-llm-adapter.d.ts +2 -0
  17. package/lib/cloud-llm-adapter.d.ts.map +1 -0
  18. package/lib/cloud-llm-adapter.js +2 -0
  19. package/lib/dsh-adapter/attestation.d.ts +42 -0
  20. package/lib/dsh-adapter/attestation.d.ts.map +1 -0
  21. package/lib/dsh-adapter/attestation.js +40 -0
  22. package/lib/dsh-adapter/audit-log.d.ts +139 -0
  23. package/lib/dsh-adapter/audit-log.d.ts.map +1 -0
  24. package/lib/dsh-adapter/audit-log.js +376 -0
  25. package/lib/dsh-adapter/cloud-egress.d.ts +181 -0
  26. package/lib/dsh-adapter/cloud-egress.d.ts.map +1 -0
  27. package/lib/dsh-adapter/cloud-egress.js +257 -0
  28. package/lib/dsh-adapter/cloud-llm-adapter.d.ts +416 -0
  29. package/lib/dsh-adapter/cloud-llm-adapter.d.ts.map +1 -0
  30. package/lib/dsh-adapter/cloud-llm-adapter.js +1472 -0
  31. package/lib/dsh-adapter/contract.d.ts +80 -0
  32. package/lib/dsh-adapter/contract.d.ts.map +1 -0
  33. package/lib/dsh-adapter/contract.js +194 -0
  34. package/lib/dsh-adapter/desktop-cookie-janitor.d.ts +214 -0
  35. package/lib/dsh-adapter/desktop-cookie-janitor.d.ts.map +1 -0
  36. package/lib/dsh-adapter/desktop-cookie-janitor.js +409 -0
  37. package/lib/dsh-adapter/dsh-edge-agent.d.ts +48 -0
  38. package/lib/dsh-adapter/dsh-edge-agent.d.ts.map +1 -0
  39. package/lib/dsh-adapter/dsh-edge-agent.js +64 -0
  40. package/lib/dsh-adapter/edge-config.d.ts +484 -0
  41. package/lib/dsh-adapter/edge-config.d.ts.map +1 -0
  42. package/lib/dsh-adapter/edge-config.js +898 -0
  43. package/lib/dsh-adapter/edge-context-view.d.ts +184 -0
  44. package/lib/dsh-adapter/edge-context-view.d.ts.map +1 -0
  45. package/lib/dsh-adapter/edge-context-view.js +483 -0
  46. package/lib/dsh-adapter/effective-model.d.ts +85 -0
  47. package/lib/dsh-adapter/effective-model.d.ts.map +1 -0
  48. package/lib/dsh-adapter/effective-model.js +171 -0
  49. package/lib/dsh-adapter/etscli-shell-guard.d.ts +244 -0
  50. package/lib/dsh-adapter/etscli-shell-guard.d.ts.map +1 -0
  51. package/lib/dsh-adapter/etscli-shell-guard.js +420 -0
  52. package/lib/dsh-adapter/etscli-tools.d.ts +112 -0
  53. package/lib/dsh-adapter/etscli-tools.d.ts.map +1 -0
  54. package/lib/dsh-adapter/etscli-tools.js +393 -0
  55. package/lib/dsh-adapter/file-logger.d.ts +294 -0
  56. package/lib/dsh-adapter/file-logger.d.ts.map +1 -0
  57. package/lib/dsh-adapter/file-logger.js +564 -0
  58. package/lib/dsh-adapter/function-call-external.d.ts +357 -0
  59. package/lib/dsh-adapter/function-call-external.d.ts.map +1 -0
  60. package/lib/dsh-adapter/function-call-external.js +1005 -0
  61. package/lib/dsh-adapter/host-egress-guard.d.ts +161 -0
  62. package/lib/dsh-adapter/host-egress-guard.d.ts.map +1 -0
  63. package/lib/dsh-adapter/host-egress-guard.js +213 -0
  64. package/lib/dsh-adapter/host-llm-trace.d.ts +198 -0
  65. package/lib/dsh-adapter/host-llm-trace.d.ts.map +1 -0
  66. package/lib/dsh-adapter/host-llm-trace.js +344 -0
  67. package/lib/dsh-adapter/http-api-routes.d.ts +61 -0
  68. package/lib/dsh-adapter/http-api-routes.d.ts.map +1 -0
  69. package/lib/dsh-adapter/http-api-routes.js +79 -0
  70. package/lib/dsh-adapter/http-api-sessions.d.ts +105 -0
  71. package/lib/dsh-adapter/http-api-sessions.d.ts.map +1 -0
  72. package/lib/dsh-adapter/http-api-sessions.js +173 -0
  73. package/lib/dsh-adapter/http-api.d.ts +221 -0
  74. package/lib/dsh-adapter/http-api.d.ts.map +1 -0
  75. package/lib/dsh-adapter/http-api.js +1811 -0
  76. package/lib/dsh-adapter/index.d.ts +62 -0
  77. package/lib/dsh-adapter/index.d.ts.map +1 -0
  78. package/lib/dsh-adapter/index.js +97 -0
  79. package/lib/dsh-adapter/input-guard-messages.d.ts +56 -0
  80. package/lib/dsh-adapter/input-guard-messages.d.ts.map +1 -0
  81. package/lib/dsh-adapter/input-guard-messages.js +136 -0
  82. package/lib/dsh-adapter/input-guard.d.ts +508 -0
  83. package/lib/dsh-adapter/input-guard.d.ts.map +1 -0
  84. package/lib/dsh-adapter/input-guard.js +2174 -0
  85. package/lib/dsh-adapter/intent-prompts.d.ts +77 -0
  86. package/lib/dsh-adapter/intent-prompts.d.ts.map +1 -0
  87. package/lib/dsh-adapter/intent-prompts.js +97 -0
  88. package/lib/dsh-adapter/intent-router.d.ts +710 -0
  89. package/lib/dsh-adapter/intent-router.d.ts.map +1 -0
  90. package/lib/dsh-adapter/intent-router.js +2802 -0
  91. package/lib/dsh-adapter/intent-signals.d.ts +208 -0
  92. package/lib/dsh-adapter/intent-signals.d.ts.map +1 -0
  93. package/lib/dsh-adapter/intent-signals.js +391 -0
  94. package/lib/dsh-adapter/invariant-install.d.ts +16 -0
  95. package/lib/dsh-adapter/invariant-install.d.ts.map +1 -0
  96. package/lib/dsh-adapter/invariant-install.js +15 -0
  97. package/lib/dsh-adapter/invariant.d.ts +16 -0
  98. package/lib/dsh-adapter/invariant.d.ts.map +1 -0
  99. package/lib/dsh-adapter/invariant.js +22 -0
  100. package/lib/dsh-adapter/llm-adapters.d.ts +19 -0
  101. package/lib/dsh-adapter/llm-adapters.d.ts.map +1 -0
  102. package/lib/dsh-adapter/llm-adapters.js +16 -0
  103. package/lib/dsh-adapter/llm-internal-caller.d.ts +92 -0
  104. package/lib/dsh-adapter/llm-internal-caller.d.ts.map +1 -0
  105. package/lib/dsh-adapter/llm-internal-caller.js +100 -0
  106. package/lib/dsh-adapter/llm-max-turns.d.ts +55 -0
  107. package/lib/dsh-adapter/llm-max-turns.d.ts.map +1 -0
  108. package/lib/dsh-adapter/llm-max-turns.js +127 -0
  109. package/lib/dsh-adapter/llm-trace-store.d.ts +131 -0
  110. package/lib/dsh-adapter/llm-trace-store.d.ts.map +1 -0
  111. package/lib/dsh-adapter/llm-trace-store.js +205 -0
  112. package/lib/dsh-adapter/llm-trace.d.ts +450 -0
  113. package/lib/dsh-adapter/llm-trace.d.ts.map +1 -0
  114. package/lib/dsh-adapter/llm-trace.js +463 -0
  115. package/lib/dsh-adapter/local-llm-adapter.d.ts +141 -0
  116. package/lib/dsh-adapter/local-llm-adapter.d.ts.map +1 -0
  117. package/lib/dsh-adapter/local-llm-adapter.js +787 -0
  118. package/lib/dsh-adapter/local-storage.d.ts +96 -0
  119. package/lib/dsh-adapter/local-storage.d.ts.map +1 -0
  120. package/lib/dsh-adapter/local-storage.js +198 -0
  121. package/lib/dsh-adapter/model-router.d.ts +79 -0
  122. package/lib/dsh-adapter/model-router.d.ts.map +1 -0
  123. package/lib/dsh-adapter/model-router.js +107 -0
  124. package/lib/dsh-adapter/ohttp-gateway.d.ts +49 -0
  125. package/lib/dsh-adapter/ohttp-gateway.d.ts.map +1 -0
  126. package/lib/dsh-adapter/ohttp-gateway.js +32 -0
  127. package/lib/dsh-adapter/openai-sse.d.ts +85 -0
  128. package/lib/dsh-adapter/openai-sse.d.ts.map +1 -0
  129. package/lib/dsh-adapter/openai-sse.js +462 -0
  130. package/lib/dsh-adapter/pii-utils.d.ts +96 -0
  131. package/lib/dsh-adapter/pii-utils.d.ts.map +1 -0
  132. package/lib/dsh-adapter/pii-utils.js +324 -0
  133. package/lib/dsh-adapter/plugin-host.d.ts +38 -0
  134. package/lib/dsh-adapter/plugin-host.d.ts.map +1 -0
  135. package/lib/dsh-adapter/plugin-host.js +38 -0
  136. package/lib/dsh-adapter/plugin.d.ts +46 -0
  137. package/lib/dsh-adapter/plugin.d.ts.map +1 -0
  138. package/lib/dsh-adapter/plugin.js +100 -0
  139. package/lib/dsh-adapter/privacy-policy.d.ts +237 -0
  140. package/lib/dsh-adapter/privacy-policy.d.ts.map +1 -0
  141. package/lib/dsh-adapter/privacy-policy.js +391 -0
  142. package/lib/dsh-adapter/prompt-guard.d.ts +152 -0
  143. package/lib/dsh-adapter/prompt-guard.d.ts.map +1 -0
  144. package/lib/dsh-adapter/prompt-guard.js +872 -0
  145. package/lib/dsh-adapter/realm-skill-bridge.d.ts +365 -0
  146. package/lib/dsh-adapter/realm-skill-bridge.d.ts.map +1 -0
  147. package/lib/dsh-adapter/realm-skill-bridge.js +1180 -0
  148. package/lib/dsh-adapter/sanitizer-pipeline.d.ts +140 -0
  149. package/lib/dsh-adapter/sanitizer-pipeline.d.ts.map +1 -0
  150. package/lib/dsh-adapter/sanitizer-pipeline.js +431 -0
  151. package/lib/dsh-adapter/secure-bridge.d.ts +47 -0
  152. package/lib/dsh-adapter/secure-bridge.d.ts.map +1 -0
  153. package/lib/dsh-adapter/secure-bridge.js +35 -0
  154. package/lib/dsh-adapter/session-attribution.d.ts +70 -0
  155. package/lib/dsh-adapter/session-attribution.d.ts.map +1 -0
  156. package/lib/dsh-adapter/session-attribution.js +76 -0
  157. package/lib/dsh-adapter/sessions.d.ts +86 -0
  158. package/lib/dsh-adapter/sessions.d.ts.map +1 -0
  159. package/lib/dsh-adapter/sessions.js +179 -0
  160. package/lib/dsh-adapter/tcm.d.ts +55 -0
  161. package/lib/dsh-adapter/tcm.d.ts.map +1 -0
  162. package/lib/dsh-adapter/tcm.js +94 -0
  163. package/lib/dsh-adapter/td-bus.d.ts +87 -0
  164. package/lib/dsh-adapter/td-bus.d.ts.map +1 -0
  165. package/lib/dsh-adapter/td-bus.js +196 -0
  166. package/lib/dsh-adapter/tool-runner.d.ts +185 -0
  167. package/lib/dsh-adapter/tool-runner.d.ts.map +1 -0
  168. package/lib/dsh-adapter/tool-runner.js +271 -0
  169. package/lib/dsh-adapter/tools.d.ts +118 -0
  170. package/lib/dsh-adapter/tools.d.ts.map +1 -0
  171. package/lib/dsh-adapter/tools.js +292 -0
  172. package/lib/dsh-adapter/types.d.ts +23 -0
  173. package/lib/dsh-adapter/types.d.ts.map +1 -0
  174. package/lib/dsh-adapter/types.js +16 -0
  175. package/lib/dsh-adapter/voice-input.d.ts +30 -0
  176. package/lib/dsh-adapter/voice-input.d.ts.map +1 -0
  177. package/lib/dsh-adapter/voice-input.js +34 -0
  178. package/lib/dsh-adapter/web-search-tavily-bocha.d.ts +152 -0
  179. package/lib/dsh-adapter/web-search-tavily-bocha.d.ts.map +1 -0
  180. package/lib/dsh-adapter/web-search-tavily-bocha.js +289 -0
  181. package/lib/http-api.d.ts +2 -0
  182. package/lib/http-api.d.ts.map +1 -0
  183. package/lib/http-api.js +2 -0
  184. package/lib/index.d.ts +48 -0
  185. package/lib/index.d.ts.map +1 -0
  186. package/lib/index.js +49 -0
  187. package/lib/intent-router.d.ts +2 -0
  188. package/lib/intent-router.d.ts.map +1 -0
  189. package/lib/intent-router.js +2 -0
  190. package/lib/llm-adapters.d.ts +2 -0
  191. package/lib/llm-adapters.d.ts.map +1 -0
  192. package/lib/llm-adapters.js +2 -0
  193. package/lib/local-llm-adapter.d.ts +2 -0
  194. package/lib/local-llm-adapter.d.ts.map +1 -0
  195. package/lib/local-llm-adapter.js +2 -0
  196. package/lib/local-storage.d.ts +2 -0
  197. package/lib/local-storage.d.ts.map +1 -0
  198. package/lib/local-storage.js +2 -0
  199. package/lib/model-router.d.ts +2 -0
  200. package/lib/model-router.d.ts.map +1 -0
  201. package/lib/model-router.js +2 -0
  202. package/lib/ohttp-gateway.d.ts +2 -0
  203. package/lib/ohttp-gateway.d.ts.map +1 -0
  204. package/lib/ohttp-gateway.js +2 -0
  205. package/lib/plugin-host.d.ts +2 -0
  206. package/lib/plugin-host.d.ts.map +1 -0
  207. package/lib/plugin-host.js +2 -0
  208. package/lib/privacy-policy.d.ts +2 -0
  209. package/lib/privacy-policy.d.ts.map +1 -0
  210. package/lib/privacy-policy.js +2 -0
  211. package/lib/prompt-guard.d.ts +2 -0
  212. package/lib/prompt-guard.d.ts.map +1 -0
  213. package/lib/prompt-guard.js +2 -0
  214. package/lib/sanitizer-pipeline.d.ts +2 -0
  215. package/lib/sanitizer-pipeline.d.ts.map +1 -0
  216. package/lib/sanitizer-pipeline.js +2 -0
  217. package/lib/secure-bridge.d.ts +2 -0
  218. package/lib/secure-bridge.d.ts.map +1 -0
  219. package/lib/secure-bridge.js +2 -0
  220. package/lib/sessions.d.ts +2 -0
  221. package/lib/sessions.d.ts.map +1 -0
  222. package/lib/sessions.js +2 -0
  223. package/lib/tcm.d.ts +2 -0
  224. package/lib/tcm.d.ts.map +1 -0
  225. package/lib/tcm.js +2 -0
  226. package/lib/td-bus.d.ts +2 -0
  227. package/lib/td-bus.d.ts.map +1 -0
  228. package/lib/td-bus.js +2 -0
  229. package/lib/tools.d.ts +2 -0
  230. package/lib/tools.d.ts.map +1 -0
  231. package/lib/tools.js +2 -0
  232. package/lib/voice-input.d.ts +2 -0
  233. package/lib/voice-input.d.ts.map +1 -0
  234. package/lib/voice-input.js +2 -0
  235. package/package.json +341 -3
  236. package/presets/agent-preset-edge.json +50 -0
  237. package/presets/edge.desktop-safe.patch.yml +503 -0
  238. 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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"}