@dsh-edge/dsh-edge-agent 0.1.1 → 0.1.3

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.
@@ -15,6 +15,7 @@ import { redactString } from './pii-utils.js';
15
15
  import { findRoute } from './http-api-routes.js';
16
16
  import { HttpApiSessionsImpl } from './http-api-sessions.js';
17
17
  import { cloudPool, loadEdgeConfig, localPool } from './edge-config.js';
18
+ import { resolveEffectiveLocalModelSync } from './effective-model.js';
18
19
  /**
19
20
  * Snapshot a live Session's event log, papering over the upstream API
20
21
  * change: 0.1.2-alpha.x exposed `.events` directly, 0.1.2-rc.1 removed it
@@ -1719,6 +1720,41 @@ export class HttpApiServiceImpl extends Service {
1719
1720
  ];
1720
1721
  }
1721
1722
  }
1723
+ /**
1724
+ * §7.192(2026-11-12):这个池**这一轮真正会跑**的模型名。
1725
+ *
1726
+ * 池**配了** model(直连池)⇒ 就是它 —— §7.102 的老口径一个字不改。
1727
+ *
1728
+ * 池**没配** model(没配置文件 ⇒ DELEGATE,§7.171)⇒ **取 DSH 配置的模型**
1729
+ * —— 也就是宿主当前那个选择(桌面 GUI 的模型选择器)。
1730
+ *
1731
+ * 为什么必须这样:委托模式下 wire 上真正跑的就是宿主当前那个模型
1732
+ * (§7.171/§7.179 同一份解析链)⇒ 写死一个别的名字(老代码写的是
1733
+ * `qwen3-4b-instruct-2507`)等于**面板显示一件没发生过的事** —— 审计行
1734
+ * `http.chat.route` / `http.chat.stream.route` 与会话的 agent options 都会
1735
+ * 带着那个假名字。
1736
+ *
1737
+ * 解析链复用 `resolveEffectiveLocalModelSync`(§7.179/§7.180)——
1738
+ * 与 local-llm-adapter / prompt-guard / intent-router **同一份事实源**,
1739
+ * 这里不另写一套。解析链挂了(宿主没有可选模型 / 委托被关掉)⇒ 退回写死的
1740
+ * 兜底(不因此让整条请求失败)。
1741
+ */
1742
+ function poolEffectiveModel(ctx, isLocal, pool) {
1743
+ const configured = (pool.model ?? '').trim();
1744
+ if (configured.length > 0)
1745
+ return configured;
1746
+ const fallback = isLocal ? 'qwen3-4b-instruct-2507' : 'deepseek-chat';
1747
+ try {
1748
+ const effective = resolveEffectiveLocalModelSync(ctx, pool, fallback, isLocal ? 'local-llm' : 'cloud-llm');
1749
+ const model = (effective?.model ?? '').trim();
1750
+ if (model.length > 0)
1751
+ return model;
1752
+ }
1753
+ catch {
1754
+ // 解析链抛错 ⇒ 退回写死的兜底(soft-dep 语义,不让整条请求失败)。
1755
+ }
1756
+ return fallback;
1757
+ }
1722
1758
  /**
1723
1759
  * Pure (exported for unit tests) route resolver. See the inline comment
1724
1760
  * in HttpApiServiceImpl#resolveRoute for the soft-dep / fail-open contract.
@@ -1730,10 +1766,11 @@ export function resolveRoute(ctx, isLocal) {
1730
1766
  // layer in edge-config.ts keeps DSH_EDGE_LOCAL_LLM_MODEL / DSH_EDGE_MODEL
1731
1767
  // working, so the desktop GUI and the CLI profiles end up on the same
1732
1768
  // model.
1769
+ //
1770
+ // §7.192:池没配 model 时不再写死一个名字,而是**取 DSH 配置的模型**
1771
+ //(见 `poolEffectiveModel`)。
1733
1772
  const pools = loadEdgeConfig(true);
1734
- const fallbackModel = isLocal
1735
- ? (localPool(pools).model ?? 'qwen3-4b-instruct-2507')
1736
- : (cloudPool(pools).model ?? 'deepseek-chat');
1773
+ const fallbackModel = poolEffectiveModel(ctx, isLocal, isLocal ? localPool(pools) : cloudPool(pools));
1737
1774
  const mr = typeof ctx?.get === 'function' ? (() => { try {
1738
1775
  return ctx.get('modelRouter');
1739
1776
  }
@@ -298,6 +298,12 @@ export declare class InputGuardServiceImpl extends Service {
298
298
  * 重新派发会再进一次 waterfall ⇒ 那趟的 provider 已是本地池 ⇒ 天然不再改道
299
299
  * (**防自锁**),且本地池按 §7.131 带**全部**历史(本地池不出网,不裁)。
300
300
  *
301
+ * §7.191(2026-11-12)更正:上面那句「provider 已是本地池 ⇒ 天然不再改道」
302
+ * **只在直连池下成立**。DELEGATE 池(§7.171)会把请求转给宿主的目标路由
303
+ * ⇒ 回来那一趟的 provider 不是本地池 ⇒ 防自锁失效 ⇒ 无限乒乓 ⇒ OOM。
304
+ * ⇒ 防自锁现在有**两个**判据:provider 名(直连池)+ 转发标记
305
+ * (`LOCAL_POOL_FORWARD_MARKER`,DELEGATE 池)—— 见 `needsLocalReroute`。
306
+ *
301
307
  * fail-closed:改不动(本地路由不存在 / 解析不到 model id / 宿主 LLM runtime
302
308
  * 不可用)⇒ **抛错**,绝不放行到可能上云的 provider。
303
309
  */
@@ -1 +1 @@
1
- {"version":3,"file":"input-guard.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/input-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-guard.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/input-guard.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ import { HostCallRecorder, OWN_POOL_PROVIDERS, isOwnPoolProvider, } from './host
50
50
  // 轮次走的是**宿主原生 provider**(桌面 GUI 选的模型),压根不进
51
51
  // cloud-llm-adapter ⇒ adapter 里的 §7.131 裁剪一次都没跑过。守卫补在
52
52
  // `llm/stream` waterfall 上 —— 真正的出网那一跳。
53
- import { HostEgressGuard } from './host-egress-guard.js';
53
+ import { HostEgressGuard, isLocalPoolForward } from './host-egress-guard.js';
54
54
  import { sessionIdField } from './session-attribution.js';
55
55
  export const name = 'input-guard';
56
56
  export const inject = [
@@ -245,11 +245,34 @@ export class InputGuardServiceImpl extends Service {
245
245
  * 重新派发会再进一次 waterfall ⇒ 那趟的 provider 已是本地池 ⇒ 天然不再改道
246
246
  * (**防自锁**),且本地池按 §7.131 带**全部**历史(本地池不出网,不裁)。
247
247
  *
248
+ * §7.191(2026-11-12)更正:上面那句「provider 已是本地池 ⇒ 天然不再改道」
249
+ * **只在直连池下成立**。DELEGATE 池(§7.171)会把请求转给宿主的目标路由
250
+ * ⇒ 回来那一趟的 provider 不是本地池 ⇒ 防自锁失效 ⇒ 无限乒乓 ⇒ OOM。
251
+ * ⇒ 防自锁现在有**两个**判据:provider 名(直连池)+ 转发标记
252
+ * (`LOCAL_POOL_FORWARD_MARKER`,DELEGATE 池)—— 见 `needsLocalReroute`。
253
+ *
248
254
  * fail-closed:改不动(本地路由不存在 / 解析不到 model id / 宿主 LLM runtime
249
255
  * 不可用)⇒ **抛错**,绝不放行到可能上云的 provider。
250
256
  */
251
257
  /** §7.184: 这一通请求要不要改道到本地池? */
252
258
  needsLocalReroute(options, state) {
259
+ // §7.191(2026-11-12):**本地池自己的 DELEGATE 转发**不改道。
260
+ //
261
+ // 上面那句注释「重新派发回来的那趟 provider 已是本地池 ⇒ 天然不再改道
262
+ // (防自锁)」**只在直连池下成立**。DELEGATE 池(§7.171)会把请求转给
263
+ // **宿主的目标路由**(如 `qwen-token-plan-cn`)⇒ 回来那一趟的 provider
264
+ // 不是本地池 ⇒ 「provider !== localProvider」判据失效 ⇒ 改道 → 本地池 →
265
+ // 再委托 → 再改道 ⇒ **无限乒乓**。
266
+ //
267
+ // 实测(2026-11-12 桌面版):递归 123 万次,JS 堆 4GB 爆掉,整机
268
+ // OOM abort;意图分类器的 LLM 调用 5 次全挂(0/5),安检 5/6 挂。
269
+ //
270
+ // 判据用**转发标记**(`LOCAL_POOL_FORWARD_MARKER`)而不是 provider 名:
271
+ // 转发后 provider 是宿主的目标路由,与「用户直接选了那个模型」在
272
+ // provider 维度无法区分 —— 唯一的区别在发起方。裁剪路径
273
+ // (`hostEgressGuard.plan()`,§7.171)早就在用同一个标记。
274
+ if (isLocalPoolForward(options))
275
+ return false;
253
276
  // 只对「本轮必须留在设备上」的轮次改道。CLOUD / SANITIZED 轮次按设计就是
254
277
  // 要出网的(脱敏 + 只带云段历史),不改道。
255
278
  if (this.turnCategory.get(state.sessionId) !== 'LOCAL')
@@ -1 +1 @@
1
- {"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/intent-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/intent-router.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { createUserMessage } from '@deepseek-ai/dsh-llm';
14
14
  import { danglingSecretRefs, formatDanglingSecretRefs, jevPool, loadEdgeConfig, localPool, } from './edge-config.js';
15
15
  import { resolveEffectiveLocalModel } from './effective-model.js';
16
16
  import { withInternalCaller } from './llm-internal-caller.js';
17
+ import { raceWithDeadline } from './llm-drain-deadline.js';
17
18
  import { buildRequestTrace, buildResponseTrace, emitTrace, resolveLlmTraceConfig, } from './llm-trace.js';
18
19
  import { getTraceStore, nextCallId } from './llm-trace-store.js';
19
20
  import { sessionIdField } from './session-attribution.js';
@@ -2037,42 +2038,47 @@ export class IntentRouterServiceImpl extends Service {
2037
2038
  // the try so the post-loop throw isn't swallowed by our own catch.
2038
2039
  let providerFailure;
2039
2040
  try {
2040
- const streamRaw = this.llm.stream({
2041
- provider,
2042
- model,
2043
- messages: [userMessage],
2044
- signal: controller.signal,
2045
- // §7.53 (2026-09-13): propagate sessionId for ops log correlation.
2046
- // local-llm-adapter reads options.sessionId for its 'LLM call start'
2047
- // line; realm-skill-bridge probe reads p.sessionId from the
2048
- // llm/stream waterfall payload. Both go from <pre-session> to the
2049
- // real sessionId when this is set.
2050
- ...(sessionId ? { sessionId } : {}),
2051
- // §7.132: 标记这是**意图分类器内部调用**,不是主对话出网。
2052
- ...withInternalCaller({}, 'intent-classifier'),
2053
- });
2054
- // §7.37: this.llm.stream() returns Promise<AsyncIterable<StreamChunk>>
2055
- // since dsh-llm 0.1.2-rc.1 — await if thenable, otherwise use directly.
2056
- const stream = (streamRaw != null && typeof streamRaw.then === 'function')
2057
- ? await streamRaw
2058
- : streamRaw;
2059
- for await (const chunk of stream) {
2060
- chunks++;
2061
- if (chunk.type === 'text-delta') {
2062
- responseText += chunk.text;
2063
- }
2064
- else if (chunk.type === 'finish') {
2065
- // §7.100: adapter 侧错误(NO_ADAPTER / NO_CLOUD_TARGET / key 缺失…)
2066
- // 被上游转成 terminal error finish chunk,不 throw。以前这里零
2067
- // text-delta → 落到 'unclear' 分支,dashboard 把基础设施故障记成
2068
- // "模型输出看不懂"。现在显式识别,归因 llm-error + provider_error。
2069
- // (检测放 try 外抛出,避免本函数 catch 二次计数/重包裹。)
2070
- const reason = chunk.reason;
2071
- if (reason?.kind === 'error' || reason?.kind === 'aborted') {
2072
- providerFailure = { code: reason.failure?.code, message: reason.failure?.message };
2041
+ // §7.190:这次调用**自身**也带时限 —— 不只靠 abort 通知下游。
2042
+ // 下游不守规矩时(promise 永不 settle),光有 abort 会让
2043
+ // `for await` 永远挂着 ⇒ 整轮卡死(实测 2026-11-11 三次全同)。
2044
+ await raceWithDeadline(async () => {
2045
+ const streamRaw = this.llm.stream({
2046
+ provider,
2047
+ model,
2048
+ messages: [userMessage],
2049
+ signal: controller.signal,
2050
+ // §7.53 (2026-09-13): propagate sessionId for ops log correlation.
2051
+ // local-llm-adapter reads options.sessionId for its 'LLM call start'
2052
+ // line; realm-skill-bridge probe reads p.sessionId from the
2053
+ // llm/stream waterfall payload. Both go from <pre-session> to the
2054
+ // real sessionId when this is set.
2055
+ ...(sessionId ? { sessionId } : {}),
2056
+ // §7.132: 标记这是**意图分类器内部调用**,不是主对话出网。
2057
+ ...withInternalCaller({}, 'intent-classifier'),
2058
+ });
2059
+ // §7.37: this.llm.stream() returns Promise<AsyncIterable<StreamChunk>>
2060
+ // since dsh-llm 0.1.2-rc.1 — await if thenable, otherwise use directly.
2061
+ const stream = (streamRaw != null && typeof streamRaw.then === 'function')
2062
+ ? await streamRaw
2063
+ : streamRaw;
2064
+ for await (const chunk of stream) {
2065
+ chunks++;
2066
+ if (chunk.type === 'text-delta') {
2067
+ responseText += chunk.text;
2068
+ }
2069
+ else if (chunk.type === 'finish') {
2070
+ // §7.100: adapter 侧错误(NO_ADAPTER / NO_CLOUD_TARGET / key 缺失…)
2071
+ // 被上游转成 terminal error finish chunk,不 throw。以前这里零
2072
+ // text-delta → 落到 'unclear' 分支,dashboard 把基础设施故障记成
2073
+ // "模型输出看不懂"。现在显式识别,归因 llm-error + provider_error。
2074
+ // (检测放 try 外抛出,避免本函数 catch 二次计数/重包裹。)
2075
+ const reason = chunk.reason;
2076
+ if (reason?.kind === 'error' || reason?.kind === 'aborted') {
2077
+ providerFailure = { code: reason.failure?.code, message: reason.failure?.message };
2078
+ }
2073
2079
  }
2074
2080
  }
2075
- }
2081
+ }, this.llmTimeoutMs, controller);
2076
2082
  }
2077
2083
  catch (err) {
2078
2084
  const isAbort = err?.name === 'AbortError' || controller.signal.aborted;
@@ -0,0 +1,55 @@
1
+ /**
2
+ * llm-drain-deadline —— §7.190(2026-11-11):给「一次内部 LLM 调用」**自身**加时限。
3
+ *
4
+ * ## 为什么不能只靠 AbortController
5
+ *
6
+ * 现有的两处内部 LLM 调用(安检 `prompt-guard`、意图分类 `intent-router`)都是
7
+ * 这个形状:
8
+ *
9
+ * ```ts
10
+ * const controller = new AbortController()
11
+ * const timer = setTimeout(() => controller.abort(), timeoutMs)
12
+ * const streamRaw = this.llm.stream({ ...opts, signal: controller.signal })
13
+ * const stream = await streamRaw // ← 阶段一:等 promise
14
+ * for await (const chunk of stream) { ... } // ← 阶段二:读流
15
+ * ```
16
+ *
17
+ * `abort()` 只是**通知**下游取消。若下游那趟请求的 promise **永远不 settle**
18
+ * (既不产出 chunk、也不结束、也不抛错),两个阶段都会**永远挂着** ——
19
+ * abort 触发了也没用,因为没有任何东西被唤醒。
20
+ *
21
+ * **实测(2026-11-11 桌面版,22:31:58 / 22:37:45 / 22:39:45 三次全同)**:
22
+ * 无活配置 ⇒ 本地池走 DELEGATE(转发宿主 provider)⇒ 意图分类那一跳挂在
23
+ * provider 那一侧。证据链:
24
+ *
25
+ * - 60 秒时限到了:宿主的活动资源里 `Timeout` 计数归零(定时器已触发并消失);
26
+ * - 但审计链里**没有** `intent.llm.timeout`(说明 abort 没让循环退出,
27
+ * catch 分支根本没进);
28
+ * - 也没有 `intent.classify.end`;
29
+ * - 宿主进程里**没有一条到 provider 的外连 socket**(只有 Electron 的回环 IPC)
30
+ * ⇒ 请求压根没走到网络层。
31
+ *
32
+ * ⇒ 整轮卡在「意图判定」,面板如实显示:攻击检测进行中 / 意图判定等待 /
33
+ * 路由未定 / LLM 调用 0。
34
+ *
35
+ * ## 这里做什么
36
+ *
37
+ * 让「这次调用」和「时限」**赛跑**:时限先到 ⇒ 我们自己 abort 掉 controller 并抛
38
+ * 一个 `name === 'AbortError'` 的错误。上层的超时分支照常记 `*.timeout` 并
39
+ * fail-open(安检放行、意图分类退回规则层)⇒ **阶段不再能永久卡死整轮**。
40
+ *
41
+ * 这不替代 abort —— abort 仍然照常发给下游(下游守规矩时,它自己会更快地
42
+ * 抛错/结束)。这里只是**兜底**:下游不守规矩时,由我们收口。
43
+ */
44
+ /**
45
+ * 在给定时限内跑完 `work`;时限到了就自己收口。
46
+ *
47
+ * 时限到了:先 `controller.abort()`(通知下游收尾),再抛一个 `AbortError`
48
+ * —— 与下游自己因 abort 抛出的错误**同形**,上层的 `isAbort` 判定照常成立。
49
+ *
50
+ * @param work 这次调用要做的事(拿流 + 读完流)
51
+ * @param timeoutMs 时限(毫秒);<= 0 或非有限数表示不限时
52
+ * @param controller 用来通知下游取消的 controller
53
+ */
54
+ export declare function raceWithDeadline<T>(work: () => Promise<T>, timeoutMs: number, controller: AbortController): Promise<T>;
55
+ //# sourceMappingURL=llm-drain-deadline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-drain-deadline.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/llm-drain-deadline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,CAAC,CAAC,CAqBZ"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * llm-drain-deadline —— §7.190(2026-11-11):给「一次内部 LLM 调用」**自身**加时限。
3
+ *
4
+ * ## 为什么不能只靠 AbortController
5
+ *
6
+ * 现有的两处内部 LLM 调用(安检 `prompt-guard`、意图分类 `intent-router`)都是
7
+ * 这个形状:
8
+ *
9
+ * ```ts
10
+ * const controller = new AbortController()
11
+ * const timer = setTimeout(() => controller.abort(), timeoutMs)
12
+ * const streamRaw = this.llm.stream({ ...opts, signal: controller.signal })
13
+ * const stream = await streamRaw // ← 阶段一:等 promise
14
+ * for await (const chunk of stream) { ... } // ← 阶段二:读流
15
+ * ```
16
+ *
17
+ * `abort()` 只是**通知**下游取消。若下游那趟请求的 promise **永远不 settle**
18
+ * (既不产出 chunk、也不结束、也不抛错),两个阶段都会**永远挂着** ——
19
+ * abort 触发了也没用,因为没有任何东西被唤醒。
20
+ *
21
+ * **实测(2026-11-11 桌面版,22:31:58 / 22:37:45 / 22:39:45 三次全同)**:
22
+ * 无活配置 ⇒ 本地池走 DELEGATE(转发宿主 provider)⇒ 意图分类那一跳挂在
23
+ * provider 那一侧。证据链:
24
+ *
25
+ * - 60 秒时限到了:宿主的活动资源里 `Timeout` 计数归零(定时器已触发并消失);
26
+ * - 但审计链里**没有** `intent.llm.timeout`(说明 abort 没让循环退出,
27
+ * catch 分支根本没进);
28
+ * - 也没有 `intent.classify.end`;
29
+ * - 宿主进程里**没有一条到 provider 的外连 socket**(只有 Electron 的回环 IPC)
30
+ * ⇒ 请求压根没走到网络层。
31
+ *
32
+ * ⇒ 整轮卡在「意图判定」,面板如实显示:攻击检测进行中 / 意图判定等待 /
33
+ * 路由未定 / LLM 调用 0。
34
+ *
35
+ * ## 这里做什么
36
+ *
37
+ * 让「这次调用」和「时限」**赛跑**:时限先到 ⇒ 我们自己 abort 掉 controller 并抛
38
+ * 一个 `name === 'AbortError'` 的错误。上层的超时分支照常记 `*.timeout` 并
39
+ * fail-open(安检放行、意图分类退回规则层)⇒ **阶段不再能永久卡死整轮**。
40
+ *
41
+ * 这不替代 abort —— abort 仍然照常发给下游(下游守规矩时,它自己会更快地
42
+ * 抛错/结束)。这里只是**兜底**:下游不守规矩时,由我们收口。
43
+ */
44
+ /**
45
+ * 在给定时限内跑完 `work`;时限到了就自己收口。
46
+ *
47
+ * 时限到了:先 `controller.abort()`(通知下游收尾),再抛一个 `AbortError`
48
+ * —— 与下游自己因 abort 抛出的错误**同形**,上层的 `isAbort` 判定照常成立。
49
+ *
50
+ * @param work 这次调用要做的事(拿流 + 读完流)
51
+ * @param timeoutMs 时限(毫秒);<= 0 或非有限数表示不限时
52
+ * @param controller 用来通知下游取消的 controller
53
+ */
54
+ export async function raceWithDeadline(work, timeoutMs, controller) {
55
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
56
+ return await work();
57
+ let timer;
58
+ const deadline = new Promise((_resolve, reject) => {
59
+ timer = setTimeout(() => {
60
+ // 先通知下游收尾(下游守规矩时它自己会结束;不守规矩时我们照样收口)。
61
+ try {
62
+ controller.abort();
63
+ }
64
+ catch { /* 通知失败不影响收口 */ }
65
+ const err = new Error(`llm call did not settle within ${timeoutMs}ms`);
66
+ err.name = 'AbortError';
67
+ reject(err);
68
+ }, timeoutMs);
69
+ });
70
+ try {
71
+ return await Promise.race([work(), deadline]);
72
+ }
73
+ finally {
74
+ if (timer !== undefined)
75
+ clearTimeout(timer);
76
+ }
77
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-guard.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/prompt-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-guard.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/prompt-guard.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import { resolveEffectiveLocalModel } from './effective-model.js';
24
24
  // two layers can never disagree about what counts as a device operation.
25
25
  import { matchDeviceCommand, isPureDeviceCommand } from './intent-signals.js';
26
26
  import { withInternalCaller } from './llm-internal-caller.js';
27
+ import { raceWithDeadline } from './llm-drain-deadline.js';
27
28
  export const name = 'prompt-guard';
28
29
  export const inject = ['privacyPolicy', 'auditLog', 'llm'];
29
30
  export const Config = Schema.object({
@@ -581,41 +582,46 @@ export class PromptGuardServiceImpl extends Service {
581
582
  // 被上游转成 terminal finish)。声明在 try 外,检测在 try 后处理。
582
583
  let providerFailure;
583
584
  try {
584
- const streamRaw = this.llm.stream({
585
- provider: cfg.modelDetectionProvider,
586
- model: detectModel,
587
- messages: [userMessage],
588
- system: systemPrompt,
589
- signal: controller.signal,
590
- temperature: 0,
591
- maxTokens: 256,
592
- // §7.53 (2026-09-13): propagate sessionId for ops log correlation.
593
- // local-llm-adapter reads options.sessionId for its 'LLM call start'
594
- // line; realm-skill-bridge probe reads p.sessionId from the
595
- // llm/stream waterfall payload. Both go from <pre-session> to the
596
- // real sessionId when this is set.
597
- ...(sessionId ? { sessionId } : {}),
598
- // §7.132: 标记这是**安检内部调用**,不是主对话出网。adapter 会把它
599
- // 落到出口审计行的 `internal` 字段,面板据此把「答案出口」与它分开。
600
- ...withInternalCaller({}, 'prompt-guard'),
601
- });
602
- // §7.37: this.llm.stream() returns Promise<AsyncIterable<StreamChunk>>
603
- // since dsh-llm 0.1.2-rc.1 — await if thenable, otherwise use directly.
604
- const stream = (streamRaw != null && typeof streamRaw.then === 'function')
605
- ? await streamRaw
606
- : streamRaw;
607
- for await (const chunk of stream) {
608
- chunks++;
609
- if (chunk.type === 'text-delta' && responseText.length < MAX_ASSEMBLED) {
610
- responseText += chunk.text;
611
- }
612
- else if (chunk.type === 'finish') {
613
- const reason = chunk.reason;
614
- if (reason?.kind === 'error' || reason?.kind === 'aborted') {
615
- providerFailure = reason.failure;
585
+ // §7.190:这次调用**自身**也带时限 —— 不只靠 abort 通知下游。
586
+ // 下游不守规矩时(promise 永不 settle),光有 abort 会让
587
+ // `for await` 永远挂着 ⇒ 整轮卡死(实测 2026-11-11 三次全同)。
588
+ await raceWithDeadline(async () => {
589
+ const streamRaw = this.llm.stream({
590
+ provider: cfg.modelDetectionProvider,
591
+ model: detectModel,
592
+ messages: [userMessage],
593
+ system: systemPrompt,
594
+ signal: controller.signal,
595
+ temperature: 0,
596
+ maxTokens: 256,
597
+ // §7.53 (2026-09-13): propagate sessionId for ops log correlation.
598
+ // local-llm-adapter reads options.sessionId for its 'LLM call start'
599
+ // line; realm-skill-bridge probe reads p.sessionId from the
600
+ // llm/stream waterfall payload. Both go from <pre-session> to the
601
+ // real sessionId when this is set.
602
+ ...(sessionId ? { sessionId } : {}),
603
+ // §7.132: 标记这是**安检内部调用**,不是主对话出网。adapter 会把它
604
+ // 落到出口审计行的 `internal` 字段,面板据此把「答案出口」与它分开。
605
+ ...withInternalCaller({}, 'prompt-guard'),
606
+ });
607
+ // §7.37: this.llm.stream() returns Promise<AsyncIterable<StreamChunk>>
608
+ // since dsh-llm 0.1.2-rc.1 — await if thenable, otherwise use directly.
609
+ const stream = (streamRaw != null && typeof streamRaw.then === 'function')
610
+ ? await streamRaw
611
+ : streamRaw;
612
+ for await (const chunk of stream) {
613
+ chunks++;
614
+ if (chunk.type === 'text-delta' && responseText.length < MAX_ASSEMBLED) {
615
+ responseText += chunk.text;
616
+ }
617
+ else if (chunk.type === 'finish') {
618
+ const reason = chunk.reason;
619
+ if (reason?.kind === 'error' || reason?.kind === 'aborted') {
620
+ providerFailure = reason.failure;
621
+ }
616
622
  }
617
623
  }
618
- }
624
+ }, cfg.modelDetectionTimeoutMs, controller);
619
625
  }
620
626
  catch (err) {
621
627
  const isAbort = err?.name === 'AbortError' || controller.signal.aborted;
@@ -1 +1 @@
1
- {"version":3,"file":"web-search-tavily-bocha.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/web-search-tavily-bocha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAY,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAW7C,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,0BAA0B,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,IAAI,4BAA4B,CAAA;AAE7C,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAAU,CAAA;AAE7B;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAEhC,CAAA;AAEF;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IAIjE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAjBxB,QAAQ,CAAC,EAAE,2BAA2B;gBAGnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,sBAAsB;IACjD;;;;;;;;;OASG;IACc,KAAK,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAGlF,OAAO,KAAK,aAAa,GAGxB;IAED,OAAO,KAAK,YAAY,GAGvB;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS,IAAI,OAAO;IAId,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;YA+CzE,YAAY;YAwCZ,WAAW;CA8D1B;AAGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCxE;;;;;;AAED,wBAAsC"}
1
+ {"version":3,"file":"web-search-tavily-bocha.d.ts","sourceRoot":"","sources":["../../src/dsh-adapter/web-search-tavily-bocha.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAY,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAW7C,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,0BAA0B,CAAA;AAE/D;;GAEG;AACH,eAAO,MAAM,IAAI,4BAA4B,CAAA;AAE7C,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAAU,CAAA;AAE7B;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAEhC,CAAA;AAEF;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IAIjE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAjBxB,QAAQ,CAAC,EAAE,2BAA2B;gBAGnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,sBAAsB;IACjD;;;;;;;;;OASG;IACc,KAAK,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAGlF,OAAO,KAAK,aAAa,GAGxB;IAED,OAAO,KAAK,YAAY,GAGvB;IAED;;;;;;;;;;;;;;OAcG;IACH,SAAS,IAAI,OAAO;IAId,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;YA+CzE,YAAY;YAwCZ,WAAW;CA8D1B;AAGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFxE;;;;;;AAED,wBAAsC"}
@@ -284,6 +284,56 @@ export async function apply(ctx, _config) {
284
284
  // The `web` seam is registered by `@deepseek-ai/dsh-tool-web` upstream;
285
285
  // it's not part of the stock `Context` interface, so cast narrowly.
286
286
  const webCtx = ctx;
287
- webCtx.web.registerSearchProvider(provider);
287
+ try {
288
+ webCtx.web.registerSearchProvider(provider);
289
+ }
290
+ catch (err) {
291
+ // §7.189 (2026-11-11): 同一个 id 被占用,**不该**拖垮整条 preset。
292
+ //
293
+ // 实测(桌面 App 日志 2026-11-11 21:52:38.886):
294
+ // ERROR [web-search-tavily-bocha] WebError: a web provider with id
295
+ // "tavily-bocha-fallback" is already registered
296
+ // 作用域链:#web-search-tavily-bocha → #edge-stack →
297
+ // #agent-preset-registry → #include
298
+ //
299
+ // 这一行失败 ⇒ 宿主 dsh-agent-preset-registry 的 mountPreset() 直接
300
+ // throw(audit.failed 非空 ⇒ 整条 preset 挂载失败)⇒「边缘模式」这个
301
+ // 工作方式从设置页消失 ⇒ 主人看到的症状是「部署了 npm 包,模式里却
302
+ // 没有边缘模式」(2026-11-11 实测)。
303
+ //
304
+ // 触发场景是**热装切换**:桌面端插件管理器把旧副本换成本 npm 包时,
305
+ // 旧实例还没卸载,新实例已经挂上 ⇒ 同一个 id 注册两次。
306
+ //
307
+ // 对策:与 local-llm-adapter / cloud-llm-adapter 同一范式 ——
308
+ // 重复注册时**让位**(不抛),因为 id 是本插件的常量,注册表里已有的那
309
+ // 一个与我们等价(同样的 provider 类、同样的 key 来源)。
310
+ //
311
+ // 判定走 `err.code`:宿主 HarnessError 自带 code 字段,且宿主源码明确
312
+ // 写着「route on this, never by parsing message」(dsh-llm HarnessError)。
313
+ if (err?.code !== 'WEB_DUPLICATE_PROVIDER')
314
+ throw err;
315
+ ctx.logger?.error?.(`[web-search-tavily-bocha] provider id "${TAVILY_BOCHA_PROVIDER_ID}" 已被注册 `
316
+ + '(本插件的另一个实例 —— 多半是桌面端热装切换时旧副本尚未卸载);'
317
+ + '本实例让位,不重复注册。');
318
+ // 让位是「发生了一件事」⇒ 必须留痕,不能静悄悄。
319
+ // auditLog 走**延迟注入**(ctx.get),不写进 inject 数组:inject 是
320
+ // cordis 的硬依赖,声明它等于要求 cordis 等到 auditLog 就绪才起我们
321
+ // 这一行(§7.175/§7.176 的教训:闸门不该因服务次序而缺席)。
322
+ try {
323
+ const auditLog = ctx.get?.('auditLog');
324
+ void auditLog?.log?.({
325
+ level: 'warn',
326
+ kind: 'web.search.registration.duplicate',
327
+ source: 'web-search-tavily-bocha',
328
+ payload: {
329
+ providerId: TAVILY_BOCHA_PROVIDER_ID,
330
+ error: String(err?.message ?? err),
331
+ },
332
+ })?.catch?.(() => { });
333
+ }
334
+ catch {
335
+ // 审计不可用也不影响让位 —— 但日志那一行已经记过,不算静悄悄。
336
+ }
337
+ }
288
338
  }
289
339
  export default { name, inject, apply };