weflow-cli 1.6.4 → 1.8.0

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 (205) hide show
  1. package/ARCHITECTURE.md +3 -2
  2. package/CHANGELOG.md +1966 -0
  3. package/OPERATIONS.md +808 -0
  4. package/README.en.md +93 -7
  5. package/README.md +31 -6
  6. package/bin/weflow-cli.ts +1245 -26
  7. package/dist/bin/weflow-cli.js +1349 -72
  8. package/dist/bin/weflow-cli.js.map +1 -1
  9. package/dist/mcp-server/index.js +39 -13
  10. package/dist/mcp-server/index.js.map +1 -1
  11. package/dist/src/core/appMsgFormat.d.ts +37 -0
  12. package/dist/src/core/appMsgFormat.d.ts.map +1 -0
  13. package/dist/src/core/appMsgFormat.js +106 -0
  14. package/dist/src/core/appMsgFormat.js.map +1 -0
  15. package/dist/src/core/ntCore.d.ts +43 -0
  16. package/dist/src/core/ntCore.d.ts.map +1 -1
  17. package/dist/src/core/ntCore.js +31 -0
  18. package/dist/src/core/ntCore.js.map +1 -1
  19. package/dist/src/core/sqlcipherCore.d.ts +0 -12
  20. package/dist/src/core/sqlcipherCore.d.ts.map +1 -1
  21. package/dist/src/core/sqlcipherCore.js +5 -64
  22. package/dist/src/core/sqlcipherCore.js.map +1 -1
  23. package/dist/src/core/wcdbCore.d.ts +1 -1
  24. package/dist/src/core/wcdbCore.d.ts.map +1 -1
  25. package/dist/src/core/wcdbCore.js +5 -1
  26. package/dist/src/core/wcdbCore.js.map +1 -1
  27. package/dist/src/panel/client.d.ts +25 -0
  28. package/dist/src/panel/client.d.ts.map +1 -0
  29. package/dist/src/panel/client.js +34 -0
  30. package/dist/src/panel/client.js.map +1 -0
  31. package/dist/src/panel/endpoint.d.ts +45 -0
  32. package/dist/src/panel/endpoint.d.ts.map +1 -0
  33. package/dist/src/panel/endpoint.js +132 -0
  34. package/dist/src/panel/endpoint.js.map +1 -0
  35. package/dist/src/panel/launch.d.ts +50 -0
  36. package/dist/src/panel/launch.d.ts.map +1 -0
  37. package/dist/src/panel/launch.js +74 -0
  38. package/dist/src/panel/launch.js.map +1 -0
  39. package/dist/src/panel/server.d.ts +23 -0
  40. package/dist/src/panel/server.d.ts.map +1 -0
  41. package/dist/src/panel/server.js +413 -0
  42. package/dist/src/panel/server.js.map +1 -0
  43. package/dist/src/panel/userId.d.ts +37 -0
  44. package/dist/src/panel/userId.d.ts.map +1 -0
  45. package/dist/src/panel/userId.js +56 -0
  46. package/dist/src/panel/userId.js.map +1 -0
  47. package/dist/src/services/assistantDaemon.d.ts +20 -3
  48. package/dist/src/services/assistantDaemon.d.ts.map +1 -1
  49. package/dist/src/services/assistantDaemon.js +46 -9
  50. package/dist/src/services/assistantDaemon.js.map +1 -1
  51. package/dist/src/services/assistantEval.d.ts +141 -0
  52. package/dist/src/services/assistantEval.d.ts.map +1 -0
  53. package/dist/src/services/assistantEval.js +497 -0
  54. package/dist/src/services/assistantEval.js.map +1 -0
  55. package/dist/src/services/assistantMemory.d.ts +106 -4
  56. package/dist/src/services/assistantMemory.d.ts.map +1 -1
  57. package/dist/src/services/assistantMemory.js +396 -61
  58. package/dist/src/services/assistantMemory.js.map +1 -1
  59. package/dist/src/services/assistantPrivacy.d.ts +15 -2
  60. package/dist/src/services/assistantPrivacy.d.ts.map +1 -1
  61. package/dist/src/services/assistantPrivacy.js +18 -4
  62. package/dist/src/services/assistantPrivacy.js.map +1 -1
  63. package/dist/src/services/assistantRouter.d.ts +41 -0
  64. package/dist/src/services/assistantRouter.d.ts.map +1 -0
  65. package/dist/src/services/assistantRouter.js +151 -0
  66. package/dist/src/services/assistantRouter.js.map +1 -0
  67. package/dist/src/services/assistantService.d.ts +209 -3
  68. package/dist/src/services/assistantService.d.ts.map +1 -1
  69. package/dist/src/services/assistantService.js +590 -75
  70. package/dist/src/services/assistantService.js.map +1 -1
  71. package/dist/src/services/assistantTools.d.ts +205 -1
  72. package/dist/src/services/assistantTools.d.ts.map +1 -1
  73. package/dist/src/services/assistantTools.js +1089 -58
  74. package/dist/src/services/assistantTools.js.map +1 -1
  75. package/dist/src/services/assistantTrace.d.ts +47 -0
  76. package/dist/src/services/assistantTrace.d.ts.map +1 -0
  77. package/dist/src/services/assistantTrace.js +150 -0
  78. package/dist/src/services/assistantTrace.js.map +1 -0
  79. package/dist/src/services/chatService.d.ts +13 -0
  80. package/dist/src/services/chatService.d.ts.map +1 -1
  81. package/dist/src/services/chatService.js +23 -0
  82. package/dist/src/services/chatService.js.map +1 -1
  83. package/dist/src/services/configService.d.ts +9 -0
  84. package/dist/src/services/configService.d.ts.map +1 -1
  85. package/dist/src/services/configService.js +15 -8
  86. package/dist/src/services/configService.js.map +1 -1
  87. package/dist/src/services/messageQuery.d.ts +35 -0
  88. package/dist/src/services/messageQuery.d.ts.map +1 -1
  89. package/dist/src/services/messageQuery.js +61 -0
  90. package/dist/src/services/messageQuery.js.map +1 -1
  91. package/dist/src/services/pythonBridge.d.ts +41 -0
  92. package/dist/src/services/pythonBridge.d.ts.map +1 -0
  93. package/dist/src/services/pythonBridge.js +119 -0
  94. package/dist/src/services/pythonBridge.js.map +1 -0
  95. package/dist/src/services/syncService.d.ts +127 -0
  96. package/dist/src/services/syncService.d.ts.map +1 -0
  97. package/dist/src/services/syncService.js +263 -0
  98. package/dist/src/services/syncService.js.map +1 -0
  99. package/dist/src/services/syncState.d.ts +113 -0
  100. package/dist/src/services/syncState.d.ts.map +1 -0
  101. package/dist/src/services/syncState.js +214 -0
  102. package/dist/src/services/syncState.js.map +1 -0
  103. package/dist/src/services/wechatMessageService.d.ts +25 -0
  104. package/dist/src/services/wechatMessageService.d.ts.map +1 -1
  105. package/dist/src/services/wechatMessageService.js +69 -7
  106. package/dist/src/services/wechatMessageService.js.map +1 -1
  107. package/dist/src/utils/atomicWrite.d.ts +4 -0
  108. package/dist/src/utils/atomicWrite.d.ts.map +1 -0
  109. package/dist/src/utils/atomicWrite.js +60 -0
  110. package/dist/src/utils/atomicWrite.js.map +1 -0
  111. package/dist/src/utils/dateRange.d.ts +15 -0
  112. package/dist/src/utils/dateRange.d.ts.map +1 -1
  113. package/dist/src/utils/dateRange.js +47 -0
  114. package/dist/src/utils/dateRange.js.map +1 -1
  115. package/dist/src/utils/text.d.ts +18 -0
  116. package/dist/src/utils/text.d.ts.map +1 -0
  117. package/dist/src/utils/text.js +20 -0
  118. package/dist/src/utils/text.js.map +1 -0
  119. package/docs/AI_INTERFACE.md +2 -0
  120. package/docs/DECISIONS.md +1484 -20
  121. package/docs/EXTENDING.md +187 -0
  122. package/docs/FUNCTIONAL-IMPROVEMENT-SPEC.md +338 -0
  123. package/docs/JEV/345/272/224/347/224/250/346/226/275/345/267/245/346/226/207/346/241/243.md +310 -0
  124. package/docs/MCP.md +23 -4
  125. package/docs/PROJECT_STATE.md +299 -96
  126. package/docs/SETUP.md +22 -0
  127. package/docs/SYNC_CONTRACT.md +180 -0
  128. package/mcp-server/index.ts +681 -657
  129. package/package.json +84 -83
  130. package/resources/panel/ball-position.cjs +153 -0
  131. package/resources/panel/index.html +46 -0
  132. package/resources/panel/main.cjs +447 -0
  133. package/resources/panel/mascot-focus.png +0 -0
  134. package/resources/panel/mascot-happy.png +0 -0
  135. package/resources/panel/mascot-sorry.png +0 -0
  136. package/resources/panel/mascot-tired.png +0 -0
  137. package/resources/panel/mascot.png +0 -0
  138. package/resources/panel/package.json +7 -0
  139. package/resources/panel/panel.css +407 -0
  140. package/resources/panel/preload.cjs +72 -0
  141. package/resources/panel/quick-menu.cjs +197 -0
  142. package/resources/panel/renderer.js +441 -0
  143. package/resources/panel/tray-menu.cjs +40 -0
  144. package/resources/panel/tray.png +0 -0
  145. package/scripts/_utils.py +403 -54
  146. package/scripts/annual_report.py +4 -2
  147. package/scripts/article_notes.py +423 -0
  148. package/scripts/backfill_articles.py +438 -0
  149. package/scripts/biz_daily.py +590 -105
  150. package/scripts/chat_notes.py +470 -0
  151. package/scripts/classify_daily.py +10 -18
  152. package/scripts/compile_wiki.py +1059 -46
  153. package/scripts/create_reading_notes.py +199 -14
  154. package/scripts/decide.py +253 -0
  155. package/scripts/draft_reply.py +671 -0
  156. package/scripts/export_chat_html.py +212 -46
  157. package/scripts/extract_todos.py +31 -5
  158. package/scripts/fav_notes.py +318 -0
  159. package/scripts/fix_topics.py +2 -1
  160. package/scripts/generate_ai_report.py +214 -9
  161. package/scripts/generate_html.py +18 -3
  162. package/scripts/generate_review.py +2 -2
  163. package/scripts/jev_client.py +294 -0
  164. package/scripts/jev_probe.py +440 -0
  165. package/scripts/nt_common.py +82 -0
  166. package/scripts/nt_decrypt.py +1755 -1352
  167. package/scripts/pipeline.py +27 -2
  168. package/scripts/promote_ideas.py +19 -4
  169. package/scripts/quality_eval.py +707 -0
  170. package/scripts/rag_chat.py +4 -4
  171. package/scripts/read_image.py +187 -0
  172. package/scripts/reply_debt.py +488 -0
  173. package/scripts/route_cards.py +453 -0
  174. package/scripts/semantic_search.py +208 -49
  175. package/scripts/user_notes.py +315 -0
  176. package/scripts/vault_rag.py +13 -7
  177. package/scripts/vault_search.py +21 -4
  178. package/scripts/wiki_lint.py +397 -0
  179. package/src/core/appMsgFormat.ts +117 -0
  180. package/src/core/ntCore.ts +67 -0
  181. package/src/core/sqlcipherCore.ts +5 -61
  182. package/src/core/wcdbCore.ts +6 -2
  183. package/src/panel/client.ts +49 -0
  184. package/src/panel/endpoint.ts +144 -0
  185. package/src/panel/launch.ts +101 -0
  186. package/src/panel/server.ts +424 -0
  187. package/src/panel/userId.ts +72 -0
  188. package/src/services/assistantDaemon.ts +57 -9
  189. package/src/services/assistantEval.ts +611 -0
  190. package/src/services/assistantMemory.ts +413 -57
  191. package/src/services/assistantPrivacy.ts +18 -4
  192. package/src/services/assistantRouter.ts +191 -0
  193. package/src/services/assistantService.ts +671 -74
  194. package/src/services/assistantTools.ts +1118 -57
  195. package/src/services/assistantTrace.ts +175 -0
  196. package/src/services/chatService.ts +30 -0
  197. package/src/services/configService.ts +403 -385
  198. package/src/services/messageQuery.ts +97 -0
  199. package/src/services/pythonBridge.ts +139 -0
  200. package/src/services/syncService.ts +363 -0
  201. package/src/services/syncState.ts +275 -0
  202. package/src/services/wechatMessageService.ts +73 -7
  203. package/src/utils/atomicWrite.ts +56 -0
  204. package/src/utils/dateRange.ts +46 -0
  205. package/src/utils/text.ts +20 -0
@@ -8,10 +8,12 @@ import os from 'os';
8
8
  import { spawn } from 'child_process';
9
9
  import { resolvePackageRoot } from '../utils/packageRoot.js';
10
10
  import { createPythonProcessEnv } from '../utils/pythonProcessEnv.js';
11
+ import { clearEndpoint } from '../panel/endpoint.js';
11
12
  const DIR = join(os.homedir(), '.weflow-cli');
12
13
  const PID_FILE = join(DIR, 'assistant.pid');
13
14
  const LOG_FILE = join(DIR, 'assistant.log');
14
- const MARKER = 'WEFLOW_ASSISTANT_DAEMON=1';
15
+ /** 子进程存活观察窗口(ms):这么短时间内就退出 = 启动失败 */
16
+ const SETTLE_MS = 700;
15
17
  export function isDaemonAlive() {
16
18
  if (!existsSync(PID_FILE))
17
19
  return { alive: false, pid: null };
@@ -58,8 +60,20 @@ export function tailLog(n = 20) {
58
60
  return '(暂无日志)';
59
61
  }
60
62
  }
61
- /** 后台启动守护进程 (detached, 脱离终端生命周期) */
62
- export function startDaemon() {
63
+ /** 后台启动守护进程 (detached, 脱离终端生命周期)
64
+ *
65
+ * 子进程带 `--yes`:**确认发生在这一层**——人敲 `assistant start`,或机器用
66
+ * `--json --yes`——而 `assistant run` 自己那层确认要读 stdin,守护进程给它的 stdin
67
+ * 是 `ignore`,没人能回答那个提示。少了这个参数,子进程会死在确认提示上,而父进程
68
+ * 照样报「✓ 已启动」。(那个曾经「负责」这件事的 WEFLOW_ASSISTANT_DAEMON 环境变量
69
+ * 没有任何代码读它,而且它被当成了变量名里带 `=` 的键——已删。)
70
+ *
71
+ * 启动后**观察一小段时间再回报**:子进程立刻退出时(例如消息通道没登录),报出来的
72
+ * 是退出码与日志尾部,而不是一句假的成功。
73
+ */
74
+ export async function startDaemon(options = {}) {
75
+ const spawnImpl = options.spawnImpl ?? spawn;
76
+ const settleMs = options.settleMs ?? SETTLE_MS;
63
77
  const { alive, pid } = isDaemonAlive();
64
78
  if (alive)
65
79
  return { started: false, pid: pid, error: `已在运行 (pid ${pid})` };
@@ -72,12 +86,21 @@ export function startDaemon() {
72
86
  try {
73
87
  appendLog(`--- ${new Date().toLocaleString('zh-CN')} daemon starting ---`);
74
88
  const entryArgs = entry === sourceEntry ? ['--import', 'tsx', entry] : [entry];
75
- const child = spawn(process.execPath, [...entryArgs, 'assistant', 'run'], {
89
+ const child = spawnImpl(process.execPath, [...entryArgs, 'assistant', 'run', '--yes'], {
76
90
  detached: true,
77
91
  stdio: ['ignore', 'pipe', 'pipe'],
78
- env: createPythonProcessEnv({ [MARKER]: '1' }),
92
+ env: createPythonProcessEnv(),
79
93
  windowsHide: true,
80
94
  });
95
+ // spawn 失败(入口不存在、权限)是**异步**的 'error' 事件:没有监听器时它会让
96
+ // 进程直接抛未捕获异常。收下来,等观察窗口结束一起报。
97
+ // 用持有对象而不是裸变量:回调里的赋值 TS 的控制流分析看不见,
98
+ // 裸变量会被收窄成 null,检查处就变成 never。
99
+ const state = { spawnError: null };
100
+ child.on('error', (error) => {
101
+ state.spawnError = error;
102
+ appendLog('[spawn error] ' + error.message);
103
+ });
81
104
  // 收集子进程输出写入日志
82
105
  child.stdout?.on('data', (d) => appendLog(d.toString().trim()));
83
106
  child.stderr?.on('data', (d) => appendLog('[stderr] ' + d.toString().trim()));
@@ -89,11 +112,22 @@ export function startDaemon() {
89
112
  }
90
113
  catch { }
91
114
  });
92
- if (child.pid) {
93
- writeFileSync(PID_FILE, String(child.pid), 'utf8');
94
- return { started: true, pid: child.pid };
115
+ await new Promise((resolve) => setTimeout(resolve, settleMs));
116
+ if (state.spawnError) {
117
+ return { started: false, error: `子进程无法启动: ${state.spawnError.message}` };
118
+ }
119
+ if (child.exitCode !== null || child.signalCode) {
120
+ // 关键:这里**不写** pid 文件。写了就等于对外宣称它在运行,而进程已经没了。
121
+ return {
122
+ started: false,
123
+ error: `子进程启动后立即退出 (code ${child.exitCode ?? child.signalCode});`
124
+ + `日志尾部: ${tailLog(6)}`,
125
+ };
95
126
  }
96
- return { started: false, error: '无法获取子进程 pid' };
127
+ if (!child.pid)
128
+ return { started: false, error: '无法获取子进程 pid' };
129
+ writeFileSync(PID_FILE, String(child.pid), 'utf8');
130
+ return { started: true, pid: child.pid };
97
131
  }
98
132
  catch (e) {
99
133
  return { started: false, error: e.message };
@@ -107,6 +141,9 @@ export function stopDaemon() {
107
141
  // Windows 下 SIGTERM/SIGKILL 等价 terminate
108
142
  process.kill(pid, 'SIGTERM');
109
143
  rmSync(PID_FILE, { force: true });
144
+ // 端点文件也删掉:子进程收的是 SIGTERM,**不会**跑到 `AssistantService.stop()` 里去清理,
145
+ // 所以这里替它删。删得掉最好,删不掉也不影响正确性——读取端会探活(见 panel/endpoint.ts)。
146
+ clearEndpoint();
110
147
  appendLog(`--- ${new Date().toLocaleString('zh-CN')} daemon stopped manually ---`);
111
148
  return { stopped: true, message: `已停止 (pid ${pid})` };
112
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assistantDaemon.js","sourceRoot":"","sources":["../../../src/services/assistantDaemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assistantDaemon.js","sourceRoot":"","sources":["../../../src/services/assistantDaemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ export interface EvalCase {
2
+ id: string;
3
+ /** 模拟用户发给助手的那句话(单轮;多轮用 `turns`) */
4
+ question?: string;
5
+ /**
6
+ * 多轮:同一个人连着说这几句。**断言只看最后一轮**——前面的轮次是为它铺路的
7
+ * (比如"记住我对花生过敏"之后才问"晚上吃什么")。记忆的承诺是"我记得你说过",
8
+ * 存下来只是前半句,用得上才是后半句。
9
+ */
10
+ turns?: string[];
11
+ privacy?: 'balanced' | 'strict';
12
+ /** 这一轮里脚本类工具(pythonBridge)该怎么回,按脚本文件名 */
13
+ scripts?: Record<string, {
14
+ stdout?: string;
15
+ stderr?: string;
16
+ code?: number;
17
+ }>;
18
+ /** 数据侧:会话与消息(不写就用默认那套) */
19
+ sessions?: Array<Record<string, unknown>>;
20
+ messages?: Array<Record<string, unknown>>;
21
+ favorites?: Array<Record<string, unknown>>;
22
+ expect: {
23
+ /** 至少要调用这些工具 */
24
+ mustCall?: string[];
25
+ /** 一个都不许调用(比如"别乱伸手"的场景) */
26
+ mustNotCall?: string[];
27
+ /**
28
+ * 工具调用的**硬**上限:超过就算失败。**只用来拦"真的失控"**(撞上 6 轮上限那种),
29
+ * 所以各条统一给 6。
30
+ *
31
+ * 一开始我给各条写的是 3("一次问句不该超过 3 次"),结果三次全量里两次挂——同一句话的
32
+ * 调用次数实测在 2~7 之间波动(模型走的路不固定),**3 这个数字量的是走法,不是缺陷**。
33
+ * 判据:一个跟着模型走法浮动的数字,一律是预算(`toolBudget`),不是底线。
34
+ * 唯一保持硬的例外是 `no-tool` 的 0:不需要工具时调了工具,是实打实的缺陷。
35
+ */
36
+ maxTools?: number;
37
+ /**
38
+ * 效率预算(**软**):超了只报一句提示,不算失败。想盯"它是不是在乱试"时用它。
39
+ */
40
+ toolBudget?: number;
41
+ /** 答复里必须出现的内容(**硬**:没有就算失败) */
42
+ answerMatches?: RegExp;
43
+ /**
44
+ * 答复里**应该**出现的内容(**软**:没有只报一句提示)。
45
+ *
46
+ * 放软通道的是"质量"类期待,不是底线。例:`memory-recall` 要求答复带上过敏这件事——
47
+ * 它三次里挂一次(存下来是硬底线,用得上会波动),而**偶发红会训练人忽略报告**。
48
+ */
49
+ answerShouldMatch?: RegExp;
50
+ /** 答复里不许出现的内容 */
51
+ answerForbids?: RegExp;
52
+ /** 这一轮结束后,长期记忆里必须出现的关键词(测**结果**而不是测工具) */
53
+ memoryContains?: string;
54
+ /**
55
+ * 至少要**有一次工具调用没给出内容**(从轨迹的 `produced` 读)。
56
+ *
57
+ * 用来替掉"答复里必须出现某个词"这种断言:老实说查不到的措辞是无穷的
58
+ * (没找到/查不到/不存在/…),词表永远追不上,而"那次调用确实什么都没产出"是可观测的。
59
+ */
60
+ toolEmpty?: boolean;
61
+ /**
62
+ * 工具**参数**里必须出现的写法(匹配任意一次调用即可)。
63
+ *
64
+ * 参数从本轮的**轨迹**里读(`assistantTrace` 已经把它们记下来了)——只看工具名的话,
65
+ * "它调了 get_messages" 与"它带着 since 调了 get_messages"是两件事(2026-09-23 加时间窗
66
+ * 时就是为了能区分这两者)。
67
+ */
68
+ argsMatch?: RegExp;
69
+ };
70
+ }
71
+ export declare const EVAL_CASES: EvalCase[];
72
+ export interface Observation {
73
+ /** 这一轮按顺序调用过的工具名 */
74
+ tools: string[];
75
+ /** 模型往返次数(含记忆抽取那次,所以只是个粗代理,别当指标用) */
76
+ cloudCalls: number;
77
+ /** 助手回复给用户的那句话 */
78
+ answer: string;
79
+ /** 这一轮之后该用户的长期事实 */
80
+ facts: string[];
81
+ /** 本轮每次工具调用的参数摘要(来自轨迹文件)。空数组 = 没调工具 */
82
+ traceArgs: string[];
83
+ /** 本轮每次工具调用有没有给出内容(与 `traceArgs` 一一对应) */
84
+ traceProduced: boolean[];
85
+ /** 顶层异常(有的话,工具与答复都不作数) */
86
+ error?: string;
87
+ elapsedMs: number;
88
+ }
89
+ /** 一条用例过不过。**纯函数**:给它一份观测,返回问题清单(空 = 通过)。 */
90
+ export declare function judge(spec: EvalCase, observed: Observation): string[];
91
+ /**
92
+ * 效率预算:**只提示、不算失败**。抽成纯函数是为了能离线测——"超了预算要报一句、但绝不能
93
+ * 让它变成失败"这件事本身是有分量的(把它当硬上限会造出三成假失败,见 `toolBudget` 注释)。
94
+ */
95
+ export declare function budgetWarnings(spec: EvalCase, tools: string[]): string[];
96
+ /**
97
+ * 软提示的完整清单:**都不影响通过与否**。
98
+ *
99
+ * 分软硬的判据只有一条:**这个数字/期待跟着模型走法或措辞浮动吗?** 浮动的一律进软通道——
100
+ * 偶发红比没有用例更糟,它训练人忽略报告。硬底线只留"不该发生的事"(该调的没调、不该调的调了、
101
+ * 查不到却说有、记住的丢了)。
102
+ */
103
+ export declare function softWarnings(spec: EvalCase, observed: Observation): string[];
104
+ export interface CaseResult {
105
+ spec: EvalCase;
106
+ observed: Observation;
107
+ problems: string[];
108
+ /** 软提示:不影响通过与否(效率之类的信号) */
109
+ warnings: string[];
110
+ /** 数据不齐(比如没有日报归档)而跳过,不计入通过率 */
111
+ skipped?: string;
112
+ }
113
+ export interface Report {
114
+ results: CaseResult[];
115
+ passed: number;
116
+ failed: number;
117
+ skipped: number;
118
+ }
119
+ export declare function summarize(results: CaseResult[]): Report;
120
+ /** 从审计文件里读本轮的工具调用与模型往返。评测不改生产代码,观测就走已有的审计口。 */
121
+ export declare function readAuditSince(offset: number): {
122
+ tools: string[];
123
+ cloudCalls: number;
124
+ };
125
+ /**
126
+ * 读临时家目录里**最后一条**轨迹记的工具参数。评测一条用例只跑一轮,所以最后一条就是它。
127
+ * 轨迹读不出来就回空——那会让 argsMatch 失败,而不是静默通过。
128
+ */
129
+ /** 最后一轮里每次工具调用**有没有产出内容**(与 `readLastTraceArgs` 同源)。 */
130
+ export declare function readLastTraceProduced(): boolean[];
131
+ /** 最后一轮里每次工具调用的**参数摘要**(与 `readLastTraceProduced` 同源,同一个记录)。 */
132
+ export declare function readLastTraceArgs(): string[];
133
+ export declare function auditSize(): number;
134
+ /**
135
+ * 装上这一轮的打桩:数据服务是假的(合成数据),脚本工具也是假的(回放固定输出),
136
+ * **只有模型是真的**。出网只留模型那一个出口。
137
+ */
138
+ export declare function installStubs(spec: EvalCase): Promise<() => void>;
139
+ /** 跑一条用例。真模型、假数据。 */
140
+ export declare function runCase(spec: EvalCase, userId: string): Promise<CaseResult>;
141
+ //# sourceMappingURL=assistantEval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistantEval.d.ts","sourceRoot":"","sources":["../../../src/services/assistantEval.ts"],"names":[],"mappings":"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"}