dsh-auto-model-routing 0.3.0 → 0.4.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 (57) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +82 -24
  3. package/README.zh.md +82 -24
  4. package/docs/architecture-v2.en.json +26 -0
  5. package/docs/architecture-v2.en.svg +637 -0
  6. package/docs/architecture-v2.zh.json +281 -0
  7. package/docs/architecture-v2.zh.svg +637 -0
  8. package/docs/feedback-evaluation.md +18 -0
  9. package/docs/host-capability-report.md +91 -0
  10. package/docs/jev-policy-v2-validation.md +37 -0
  11. package/docs/magpie-live-acceptance.md +27 -0
  12. package/docs/policy-v2-development.md +68 -0
  13. package/docs/policy-v2-real-evaluation-plan.md +32 -0
  14. package/docs/routing-community-research-2026-10-24.md +98 -0
  15. package/docs/routing-intent-and-gaps.md +56 -0
  16. package/docs/routing-strategy-plan.md +101 -0
  17. package/lib/client/control.d.ts +9 -1
  18. package/lib/client/control.js +16 -1
  19. package/lib/client/index.d.ts +2 -0
  20. package/lib/client/index.js +2 -2
  21. package/lib/client/label.d.ts +4 -0
  22. package/lib/client/label.js +24 -8
  23. package/lib/client/settings-section.js +53 -3
  24. package/lib/client/settings-ui.d.ts +1 -1
  25. package/lib/client/strategy-details.d.ts +4 -0
  26. package/lib/client/strategy-details.js +8 -0
  27. package/lib/client.js +332 -47
  28. package/lib/decision-service.d.ts +39 -0
  29. package/lib/decision-service.js +28 -0
  30. package/lib/endpoints.d.ts +2 -1
  31. package/lib/endpoints.js +22 -1
  32. package/lib/feedback.d.ts +95 -0
  33. package/lib/feedback.js +67 -0
  34. package/lib/hints.js +1 -1
  35. package/lib/index.js +29 -7
  36. package/lib/jev.d.ts +27 -1
  37. package/lib/jev.js +51 -23
  38. package/lib/policy-host.d.ts +68 -0
  39. package/lib/policy-host.js +274 -0
  40. package/lib/policy-store.d.ts +96 -0
  41. package/lib/policy-store.js +60 -0
  42. package/lib/policy-v2-rubric.json +21 -0
  43. package/lib/policy-v2.d.ts +20 -0
  44. package/lib/policy-v2.js +53 -0
  45. package/lib/settings-contract.d.ts +4 -1
  46. package/lib/settings-contract.js +1 -1
  47. package/lib/settings-host.d.ts +2 -2
  48. package/lib/settings-host.js +26 -14
  49. package/lib/settings.js +14 -1
  50. package/lib/subagent-tool.js +32 -5
  51. package/lib/usage-report.d.ts +59 -0
  52. package/lib/usage-report.js +332 -0
  53. package/package.json +3 -3
  54. package/skills/auto-model-routing-report/SKILL.md +50 -0
  55. package/skills/subagent-model-routing/SKILL.md +15 -0
  56. package/lib/selection-projection.d.ts +0 -8
  57. package/lib/selection-projection.js +0 -7
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: auto-model-routing-report
3
+ description: 仅当用户明确要求评估 AUTO 效果、观察 AUTO 期间的 token 用量或判断分布,或直接点名 auto-model-routing-report 时使用:只读汇总本地 AUTO 决策记录与会话实际用量。不得主动执行或创建定时任务;会话处于 AUTO、普通 token 问题、路由判断或日常任务都不是触发条件。
4
+ ---
5
+
6
+ # AUTO 用量观察报告
7
+
8
+ **仅当用户明确要求时使用。** 不得主动执行,也不得创建定时任务或后台采集。会话处于 AUTO、用户询问 token 计价、讨论路由策略,都不是使用本 skill 的理由。
9
+
10
+ ## 它能回答什么
11
+
12
+ - AUTO 期间做了哪些决策,按策略版本、模型和推理深度(depth)分组,以及这些决策实际消耗了多少 token。
13
+ - 数据覆盖情况:哪些回合没有记录,以及有多少会话处于 AUTO 但完全没有记录。
14
+ - 对照首个 AUTO 记录之前的回合,effort 起点发生了什么变化。
15
+
16
+ **它不能回答“AUTO 省了多少”**:这是观察数据,不是受控对照。
17
+
18
+ ## 步骤
19
+
20
+ 1. 运行(只读:不写文件、不联网、不调用模型):
21
+
22
+ ```bash
23
+ node "<插件目录>/lib/usage-report.js" # 全部数据
24
+ node "<插件目录>/lib/usage-report.js" --since 2026-11-01 # 从本地时区该日 00:00 起
25
+ ```
26
+
27
+ `<插件目录>` 是 `dsh-auto-model-routing` 包所在的目录。`$DSH_HOME` 未设置时,默认读取 `~/.dsh`。
28
+
29
+ 2. **先检查数据质量,再看数字:**
30
+ - `failures` 中任一项明显不为 0,或 `coverage.unlinkedBindings` 偏高时,说明日志格式可能已随 DSH 升级而变化。此时停止解读,先告诉用户需要核对。
31
+ - `failures.tail-incomplete` 为 1 通常是正常的,因为当前会话的日志还在写入。
32
+
33
+ 3. 转述结果时**保留以下含义,不得放大**:
34
+ - `conclusion: insufficient-sample` → “样本不足,尚不能判断”。门槛是 ≥20 个决策,且来自 ≥3 个会话。
35
+ - `caveats` 中的每一项都要用一句话说明:
36
+ - `observational-not-controlled`:观察数据,不是受控对照;判断因果需要专门对照实验。
37
+ - `scope-main-session-assistant-calls-only`:不含子会话、压缩摘要、标题生成、Jev 判档和失败重试的用量,因此不能推出“节省”。
38
+ - `only-applied-decisions-recorded`:只记录实际生效的决策,已统计部分可能偏向某类回合;`coverage.turnsWithoutRecord` 显示缺口大小。
39
+ - `token-semantics-differ-by-provider`:不同 provider 的 token 口径可能不同,不要跨模型比较。
40
+ - `reference-before-auto-effort-only-confounded`:`referenceBeforeAuto` 只用于看 effort 起点的变化;它受会话阶段、任务类型、模型切换等因素混杂,不能当作对照组。
41
+ - `mode-history-not-persisted`:会话模式的切换历史没有保存,会话计数只是粗略参考。
42
+ - 不要自行计算节省百分比,不要说“质量不变”,也不要把“首个记录之前”称为 MANUAL。
43
+ - token 均值的分母是**出现该字段的调用数**(`present`);值为 `null` 表示该字段从未出现,不是 0。
44
+
45
+ 4. 如果要把报告原文贴到当前会话之外,例如飞书或 issue,**先请用户确认**。模型名、provider 名可能包含内部信息。
46
+
47
+ ## 前提
48
+
49
+ - 报告每次都从原始记录和会话日志重新计算,不保存快照。用户删除旧会话后,对应历史无法再统计。
50
+ - 旧版策略(legacy)的判档一致率请用同一插件目录下的 `scripts/label-report.mjs`。
@@ -7,6 +7,21 @@ description: 创建或复用子智能体前,调用 route_subagent(Jev 判档
7
7
 
8
8
  判档由插件工具 `route_subagent` 完成(与主会话 AUTO 共用同一个 Jev 判断),主 Agent 不自行估档。工具跟随所属主会话的模式:只有主会话为 AUTO 时才判档,并把脱敏后的任务文本发送给 OpenRouter/TypeSafe;主会话为 MANUAL 时不判档、不外发。
9
9
 
10
+ ## 默认 AUTO(优先于下方旧策略回滚规则)
11
+
12
+ 无需选择版本;未显式配置 legacy 回滚且根会话为 AUTO 时:Agent 仍决定拆解、派发和验收;AUTO 在官方创建工具的精确 child 身份上选配资源,主子问题不再相同。
13
+
14
+ - Magpie 使用精确 provider `dsh-magpie-connect` 和完整带前缀 model ID,不改成本地 claude/codex;自动槽支持 Claude/GPT 家族,其他网关模型需显式模型与可验证 effort。当前本机测试仅走 Magpie,OpenRouter 只用于 Jev,不直接调用本地 Claude/codex。
15
+ - 使用官方 fresh `subagent` / `spawn_teammate` 创建,提供清楚的目标和范围即可;不要为自动任务先调用推荐工具再把推荐伪装成用户显式约束。请求首次发送前 AUTO 会判断能力与投入、验证目录并应用。
16
+ - 用户显式指定 model/effort 时照实传递;只指定一个维度仅判断另一个,两者指定则不调用 Jev。只指定 effort 也不能沿用下方“完全不判”的原策略规则。
17
+ - `route_subagent` 在此分支仅做可选预览,`status: recommended` 不是 applied;fork 返回 unsupported,应暂停并改用 fresh,或让用户明确选择关闭试验后继承。不要擅自将 fork 改为 fresh。
18
+ - 通过 `childRouting` 状态接口检查对应 sessionId 的 recommended/applied/unsupported/needs-context/failed;应用证据来自实际 request/header,不来自工具推荐。未绑定的创建路径不冒充已路由。
19
+ - 已创建成员收到后续消息不重选;需要升级视作 Agent 明确发起的新建资源决策,说明原因并保留显式约束,不进行自治重试。
20
+ - 验收时区分任务描述不足、信息缺失、推理投入不足、能力不足与基础设施故障;网络错误不是自动升级理由。
21
+ - MANUAL 停止新决策,已创建实例保持初始路线;关闭试验回到原策略,不删除已绑定子会话的恢复记录。
22
+
23
+ 以下规则只适用于原策略。
24
+
10
25
  ## 创建
11
26
 
12
27
  1. 尊重用户或 lead 显式指定的模型与 effort:
@@ -1,8 +0,0 @@
1
- import type { Selection } from './state.js';
2
- import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection';
3
- declare module '@deepseek-ai/dsh-session-projection/types' {
4
- interface SessionProjectionStateMap {
5
- autoRoutingSelection: Selection | null;
6
- }
7
- }
8
- export declare const selectionProjection: ProjectionDefinition<'autoRoutingSelection'>;
@@ -1,7 +0,0 @@
1
- import { z } from 'zod';
2
- export const selectionProjection = {
3
- key: 'autoRoutingSelection', stateVersion: 1,
4
- stateSchema: z.object({ provider: z.string(), model: z.string(), reasoningEffort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional() }).transform(value => ({ provider: value.provider, model: value.model, ...(value.reasoningEffort ? { reasoningEffort: value.reasoningEffort } : {}) })).nullable(),
5
- init: () => null,
6
- apply: (state, event) => event.type === 'model/selection' ? event.data : state,
7
- };