oh-my-knowledge 0.30.0 → 0.31.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 (320) hide show
  1. package/README.md +198 -26
  2. package/README.zh.md +198 -26
  3. package/dist/src/authoring/evolver.d.ts +26 -2
  4. package/dist/src/authoring/evolver.d.ts.map +1 -1
  5. package/dist/src/authoring/evolver.js +410 -49
  6. package/dist/src/authoring/evolver.js.map +1 -1
  7. package/dist/src/authoring/generator.d.ts +5 -2
  8. package/dist/src/authoring/generator.d.ts.map +1 -1
  9. package/dist/src/authoring/generator.js +22 -6
  10. package/dist/src/authoring/generator.js.map +1 -1
  11. package/dist/src/authoring/sample-fixer.d.ts +10 -4
  12. package/dist/src/authoring/sample-fixer.d.ts.map +1 -1
  13. package/dist/src/authoring/sample-fixer.js +153 -126
  14. package/dist/src/authoring/sample-fixer.js.map +1 -1
  15. package/dist/src/cli/commands/doctor.d.ts +25 -1
  16. package/dist/src/cli/commands/doctor.d.ts.map +1 -1
  17. package/dist/src/cli/commands/doctor.js +233 -124
  18. package/dist/src/cli/commands/doctor.js.map +1 -1
  19. package/dist/src/cli/commands/eval/gold/compare.d.ts +17 -0
  20. package/dist/src/cli/commands/eval/gold/compare.d.ts.map +1 -0
  21. package/dist/src/cli/commands/eval/gold/compare.js +91 -0
  22. package/dist/src/cli/commands/eval/gold/compare.js.map +1 -0
  23. package/dist/src/cli/commands/eval/gold/index.d.ts +9 -0
  24. package/dist/src/cli/commands/eval/gold/index.d.ts.map +1 -0
  25. package/dist/src/cli/commands/eval/gold/index.js +34 -0
  26. package/dist/src/cli/commands/eval/gold/index.js.map +1 -0
  27. package/dist/src/cli/commands/eval/gold/init.d.ts +11 -0
  28. package/dist/src/cli/commands/eval/gold/init.d.ts.map +1 -0
  29. package/dist/src/cli/commands/eval/gold/init.js +51 -0
  30. package/dist/src/cli/commands/eval/gold/init.js.map +1 -0
  31. package/dist/src/cli/commands/eval/gold/validate.d.ts +12 -0
  32. package/dist/src/cli/commands/eval/gold/validate.d.ts.map +1 -0
  33. package/dist/src/cli/commands/eval/gold/validate.js +46 -0
  34. package/dist/src/cli/commands/eval/gold/validate.js.map +1 -0
  35. package/dist/src/cli/commands/eval/index.d.ts +54 -0
  36. package/dist/src/cli/commands/eval/index.d.ts.map +1 -0
  37. package/dist/src/cli/commands/{eval-runner.js → eval/index.js} +216 -50
  38. package/dist/src/cli/commands/eval/index.js.map +1 -0
  39. package/dist/src/cli/commands/evolve.d.ts +36 -1
  40. package/dist/src/cli/commands/evolve.d.ts.map +1 -1
  41. package/dist/src/cli/commands/evolve.js +191 -47
  42. package/dist/src/cli/commands/evolve.js.map +1 -1
  43. package/dist/src/cli/commands/init.d.ts +15 -1
  44. package/dist/src/cli/commands/init.d.ts.map +1 -1
  45. package/dist/src/cli/commands/init.js +70 -28
  46. package/dist/src/cli/commands/init.js.map +1 -1
  47. package/dist/src/cli/commands/observe/inbox.d.ts +23 -0
  48. package/dist/src/cli/commands/observe/inbox.d.ts.map +1 -0
  49. package/dist/src/cli/commands/observe/inbox.js +258 -0
  50. package/dist/src/cli/commands/observe/inbox.js.map +1 -0
  51. package/dist/src/cli/commands/observe/index.d.ts +22 -0
  52. package/dist/src/cli/commands/observe/index.d.ts.map +1 -0
  53. package/dist/src/cli/commands/observe/index.js +118 -0
  54. package/dist/src/cli/commands/observe/index.js.map +1 -0
  55. package/dist/src/cli/commands/observe/ingest.d.ts +13 -0
  56. package/dist/src/cli/commands/observe/ingest.d.ts.map +1 -0
  57. package/dist/src/cli/commands/observe/ingest.js +69 -0
  58. package/dist/src/cli/commands/observe/ingest.js.map +1 -0
  59. package/dist/src/cli/commands/observe/show.d.ts +13 -0
  60. package/dist/src/cli/commands/observe/show.d.ts.map +1 -0
  61. package/dist/src/cli/commands/observe/show.js +49 -0
  62. package/dist/src/cli/commands/observe/show.js.map +1 -0
  63. package/dist/src/cli/commands/sample.d.ts +28 -5
  64. package/dist/src/cli/commands/sample.d.ts.map +1 -1
  65. package/dist/src/cli/commands/sample.js +242 -169
  66. package/dist/src/cli/commands/sample.js.map +1 -1
  67. package/dist/src/cli/commands/skill-extract.d.ts +20 -0
  68. package/dist/src/cli/commands/skill-extract.d.ts.map +1 -0
  69. package/dist/src/cli/commands/skill-extract.js +84 -0
  70. package/dist/src/cli/commands/skill-extract.js.map +1 -0
  71. package/dist/src/cli/commands/studio.d.ts +22 -1
  72. package/dist/src/cli/commands/studio.d.ts.map +1 -1
  73. package/dist/src/cli/commands/studio.js +111 -37
  74. package/dist/src/cli/commands/studio.js.map +1 -1
  75. package/dist/src/cli/index.js +15 -47
  76. package/dist/src/cli/index.js.map +1 -1
  77. package/dist/src/cli/lib/cli-exit.d.ts +16 -0
  78. package/dist/src/cli/lib/cli-exit.d.ts.map +1 -0
  79. package/dist/src/cli/lib/cli-exit.js +20 -0
  80. package/dist/src/cli/lib/cli-exit.js.map +1 -0
  81. package/dist/src/cli/lib/cmd-flags.d.ts +236 -0
  82. package/dist/src/cli/lib/cmd-flags.d.ts.map +1 -0
  83. package/dist/src/cli/lib/cmd-flags.js +46 -0
  84. package/dist/src/cli/lib/cmd-flags.js.map +1 -0
  85. package/dist/src/cli/{i18n-dict.d.ts → lib/i18n-dict.d.ts} +1 -1
  86. package/dist/src/cli/lib/i18n-dict.d.ts.map +1 -0
  87. package/dist/src/cli/{i18n-dict.js → lib/i18n-dict.js} +39 -264
  88. package/dist/src/cli/lib/i18n-dict.js.map +1 -0
  89. package/dist/src/cli/{i18n.d.ts → lib/i18n.d.ts} +11 -6
  90. package/dist/src/cli/lib/i18n.d.ts.map +1 -0
  91. package/dist/src/cli/{i18n.js → lib/i18n.js} +12 -7
  92. package/dist/src/cli/lib/i18n.js.map +1 -0
  93. package/dist/src/cli/{parse-run-config.d.ts → lib/parse-run-config.d.ts} +5 -6
  94. package/dist/src/cli/lib/parse-run-config.d.ts.map +1 -0
  95. package/dist/src/cli/{parse-run-config.js → lib/parse-run-config.js} +11 -61
  96. package/dist/src/cli/lib/parse-run-config.js.map +1 -0
  97. package/dist/src/cli/lib/progress.d.ts.map +1 -0
  98. package/dist/src/cli/lib/progress.js.map +1 -0
  99. package/dist/src/cli/{run-tally.d.ts → lib/run-tally.d.ts} +1 -1
  100. package/dist/src/cli/lib/run-tally.d.ts.map +1 -0
  101. package/dist/src/cli/lib/run-tally.js.map +1 -0
  102. package/dist/src/cli/{commands/_shared.d.ts → lib/shared.d.ts} +2 -2
  103. package/dist/src/cli/lib/shared.d.ts.map +1 -0
  104. package/dist/src/cli/{commands/_shared.js → lib/shared.js} +3 -3
  105. package/dist/src/cli/lib/shared.js.map +1 -0
  106. package/dist/src/cli/lib/update-check.d.ts.map +1 -0
  107. package/dist/src/cli/lib/update-check.js.map +1 -0
  108. package/dist/src/cli/oclif/base-command.d.ts +8 -0
  109. package/dist/src/cli/oclif/base-command.d.ts.map +1 -0
  110. package/dist/src/cli/oclif/base-command.js +27 -0
  111. package/dist/src/cli/oclif/base-command.js.map +1 -0
  112. package/dist/src/cli/oclif/help.d.ts +16 -0
  113. package/dist/src/cli/oclif/help.d.ts.map +1 -0
  114. package/dist/src/cli/oclif/help.js +33 -0
  115. package/dist/src/cli/oclif/help.js.map +1 -0
  116. package/dist/src/cli/oclif/i18n.d.ts +16 -0
  117. package/dist/src/cli/oclif/i18n.d.ts.map +1 -0
  118. package/dist/src/cli/oclif/i18n.js +62 -0
  119. package/dist/src/cli/oclif/i18n.js.map +1 -0
  120. package/dist/src/cli/oclif/parsers.d.ts +10 -0
  121. package/dist/src/cli/oclif/parsers.d.ts.map +1 -0
  122. package/dist/src/cli/oclif/parsers.js +102 -0
  123. package/dist/src/cli/oclif/parsers.js.map +1 -0
  124. package/dist/src/cli/oclif/projection.d.ts +23 -0
  125. package/dist/src/cli/oclif/projection.d.ts.map +1 -0
  126. package/dist/src/cli/oclif/projection.js +52 -0
  127. package/dist/src/cli/oclif/projection.js.map +1 -0
  128. package/dist/src/cli/oclif/run.d.ts +2 -0
  129. package/dist/src/cli/oclif/run.d.ts.map +1 -0
  130. package/dist/src/cli/oclif/run.js +11 -0
  131. package/dist/src/cli/oclif/run.js.map +1 -0
  132. package/dist/src/diagnosis/observe-mapper.d.ts +68 -0
  133. package/dist/src/diagnosis/observe-mapper.d.ts.map +1 -0
  134. package/dist/src/diagnosis/observe-mapper.js +276 -0
  135. package/dist/src/diagnosis/observe-mapper.js.map +1 -0
  136. package/dist/src/diagnosis/observe-producer.d.ts +9 -0
  137. package/dist/src/diagnosis/observe-producer.d.ts.map +1 -0
  138. package/dist/src/diagnosis/observe-producer.js +197 -0
  139. package/dist/src/diagnosis/observe-producer.js.map +1 -0
  140. package/dist/src/diagnosis/studio-projection.d.ts +14 -0
  141. package/dist/src/diagnosis/studio-projection.d.ts.map +1 -0
  142. package/dist/src/diagnosis/studio-projection.js +84 -0
  143. package/dist/src/diagnosis/studio-projection.js.map +1 -0
  144. package/dist/src/diagnosis/types.d.ts +79 -0
  145. package/dist/src/diagnosis/types.d.ts.map +1 -0
  146. package/dist/src/diagnosis/types.js +20 -0
  147. package/dist/src/diagnosis/types.js.map +1 -0
  148. package/dist/src/doctor/fixer.d.ts +12 -0
  149. package/dist/src/doctor/fixer.d.ts.map +1 -0
  150. package/dist/src/doctor/fixer.js +326 -0
  151. package/dist/src/doctor/fixer.js.map +1 -0
  152. package/dist/src/doctor/health/composer.js +7 -4
  153. package/dist/src/doctor/health/composer.js.map +1 -1
  154. package/dist/src/doctor/health/parser.d.ts +0 -1
  155. package/dist/src/doctor/health/parser.d.ts.map +1 -1
  156. package/dist/src/doctor/health/parser.js +37 -0
  157. package/dist/src/doctor/health/parser.js.map +1 -1
  158. package/dist/src/doctor/health/prompt-builder.d.ts +2 -21
  159. package/dist/src/doctor/health/prompt-builder.d.ts.map +1 -1
  160. package/dist/src/doctor/health/prompt-builder.js +1 -169
  161. package/dist/src/doctor/health/prompt-builder.js.map +1 -1
  162. package/dist/src/doctor/html-renderer.d.ts +1 -1
  163. package/dist/src/doctor/html-renderer.d.ts.map +1 -1
  164. package/dist/src/doctor/html-renderer.js +2 -2
  165. package/dist/src/doctor/html-renderer.js.map +1 -1
  166. package/dist/src/doctor/index.d.ts.map +1 -1
  167. package/dist/src/doctor/index.js +1 -0
  168. package/dist/src/doctor/index.js.map +1 -1
  169. package/dist/src/doctor/renderer.d.ts +1 -1
  170. package/dist/src/doctor/renderer.d.ts.map +1 -1
  171. package/dist/src/doctor/renderer.js +2 -2
  172. package/dist/src/doctor/renderer.js.map +1 -1
  173. package/dist/src/doctor/rules.js +1 -1
  174. package/dist/src/doctor/rules.js.map +1 -1
  175. package/dist/src/eval-core/mock-hook.cjs +13 -1
  176. package/dist/src/eval-core/mocks-runtime.d.ts +7 -3
  177. package/dist/src/eval-core/mocks-runtime.d.ts.map +1 -1
  178. package/dist/src/eval-core/mocks-runtime.js +240 -4
  179. package/dist/src/eval-core/mocks-runtime.js.map +1 -1
  180. package/dist/src/eval-workflows/evaluation-pipeline.d.ts +1 -1
  181. package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
  182. package/dist/src/eval-workflows/evaluation-pipeline.js +1 -1
  183. package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
  184. package/dist/src/eval-workflows/run-evaluation.js +1 -1
  185. package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
  186. package/dist/src/executors/claude-cli.d.ts.map +1 -1
  187. package/dist/src/executors/claude-cli.js +6 -4
  188. package/dist/src/executors/claude-cli.js.map +1 -1
  189. package/dist/src/observability/experience.d.ts +184 -3
  190. package/dist/src/observability/experience.d.ts.map +1 -1
  191. package/dist/src/observability/experience.js +1208 -41
  192. package/dist/src/observability/experience.js.map +1 -1
  193. package/dist/src/observability/inbox-view-model.d.ts +3 -0
  194. package/dist/src/observability/inbox-view-model.d.ts.map +1 -1
  195. package/dist/src/observability/inbox-view-model.js +9 -0
  196. package/dist/src/observability/inbox-view-model.js.map +1 -1
  197. package/dist/src/observability/inbox.d.ts +2 -0
  198. package/dist/src/observability/inbox.d.ts.map +1 -1
  199. package/dist/src/observability/inbox.js +16 -2
  200. package/dist/src/observability/inbox.js.map +1 -1
  201. package/dist/src/observability/problem-patterns.d.ts +1 -0
  202. package/dist/src/observability/problem-patterns.d.ts.map +1 -1
  203. package/dist/src/observability/problem-patterns.js +8 -8
  204. package/dist/src/observability/problem-patterns.js.map +1 -1
  205. package/dist/src/observability/resolved-review.d.ts +25 -0
  206. package/dist/src/observability/resolved-review.d.ts.map +1 -0
  207. package/dist/src/observability/resolved-review.js +231 -0
  208. package/dist/src/observability/resolved-review.js.map +1 -0
  209. package/dist/src/observability/review-state.d.ts +9 -2
  210. package/dist/src/observability/review-state.d.ts.map +1 -1
  211. package/dist/src/observability/review-state.js +40 -2
  212. package/dist/src/observability/review-state.js.map +1 -1
  213. package/dist/src/observability/skill-chain-advisories.js +4 -4
  214. package/dist/src/observability/skill-chain-advisories.js.map +1 -1
  215. package/dist/src/observability/skill-chain.d.ts +1 -0
  216. package/dist/src/observability/skill-chain.d.ts.map +1 -1
  217. package/dist/src/observability/skill-chain.js +72 -35
  218. package/dist/src/observability/skill-chain.js.map +1 -1
  219. package/dist/src/observability/soft-standards.d.ts +130 -0
  220. package/dist/src/observability/soft-standards.d.ts.map +1 -0
  221. package/dist/src/observability/soft-standards.js +426 -0
  222. package/dist/src/observability/soft-standards.js.map +1 -0
  223. package/dist/src/observability/text-signals.d.ts +7 -0
  224. package/dist/src/observability/text-signals.d.ts.map +1 -1
  225. package/dist/src/observability/text-signals.js +88 -4
  226. package/dist/src/observability/text-signals.js.map +1 -1
  227. package/dist/src/observability/trace-segmenter.d.ts.map +1 -1
  228. package/dist/src/observability/trace-segmenter.js +4 -2
  229. package/dist/src/observability/trace-segmenter.js.map +1 -1
  230. package/dist/src/observability/trace-source.d.ts.map +1 -1
  231. package/dist/src/observability/trace-source.js +13 -3
  232. package/dist/src/observability/trace-source.js.map +1 -1
  233. package/dist/src/renderer/observation-inbox-renderer.d.ts.map +1 -1
  234. package/dist/src/renderer/observation-inbox-renderer.js +5914 -924
  235. package/dist/src/renderer/observation-inbox-renderer.js.map +1 -1
  236. package/dist/src/renderer/skill-detail-renderer.d.ts.map +1 -1
  237. package/dist/src/renderer/skill-detail-renderer.js +15 -5
  238. package/dist/src/renderer/skill-detail-renderer.js.map +1 -1
  239. package/dist/src/renderer/skill-list-renderer.d.ts.map +1 -1
  240. package/dist/src/renderer/skill-list-renderer.js +10 -3
  241. package/dist/src/renderer/skill-list-renderer.js.map +1 -1
  242. package/dist/src/renderer/test-view.js +2 -2
  243. package/dist/src/renderer/test-view.js.map +1 -1
  244. package/dist/src/server/report-server.d.ts.map +1 -1
  245. package/dist/src/server/report-server.js +95 -2
  246. package/dist/src/server/report-server.js.map +1 -1
  247. package/dist/src/server/skill-index.d.ts +5 -1
  248. package/dist/src/server/skill-index.d.ts.map +1 -1
  249. package/dist/src/server/skill-index.js +72 -26
  250. package/dist/src/server/skill-index.js.map +1 -1
  251. package/dist/src/server/skill-insights.d.ts +10 -1
  252. package/dist/src/server/skill-insights.d.ts.map +1 -1
  253. package/dist/src/server/skill-insights.js +113 -1
  254. package/dist/src/server/skill-insights.js.map +1 -1
  255. package/dist/src/shared/hard-rules.d.ts +2 -0
  256. package/dist/src/shared/hard-rules.d.ts.map +1 -1
  257. package/dist/src/shared/hard-rules.js +42 -0
  258. package/dist/src/shared/hard-rules.js.map +1 -1
  259. package/dist/src/shared/llm-prompts/index.d.ts +14 -0
  260. package/dist/src/shared/llm-prompts/index.d.ts.map +1 -0
  261. package/dist/src/shared/llm-prompts/index.js +35 -0
  262. package/dist/src/shared/llm-prompts/index.js.map +1 -0
  263. package/dist/src/shared/llm-prompts/skill-health.d.ts +22 -0
  264. package/dist/src/shared/llm-prompts/skill-health.d.ts.map +1 -0
  265. package/dist/src/shared/llm-prompts/skill-health.js +170 -0
  266. package/dist/src/shared/llm-prompts/skill-health.js.map +1 -0
  267. package/dist/src/types/doctor.d.ts +2 -0
  268. package/dist/src/types/doctor.d.ts.map +1 -1
  269. package/dist/src/types/eval.d.ts +6 -1
  270. package/dist/src/types/eval.d.ts.map +1 -1
  271. package/dist/src/types/report.d.ts +6 -0
  272. package/dist/src/types/report.d.ts.map +1 -1
  273. package/docs/prompts/llm-enhanced-review.prompt.md +111 -0
  274. package/package.json +29 -4
  275. package/dist/src/cli/cli-exit.d.ts +0 -15
  276. package/dist/src/cli/cli-exit.d.ts.map +0 -1
  277. package/dist/src/cli/cli-exit.js +0 -19
  278. package/dist/src/cli/cli-exit.js.map +0 -1
  279. package/dist/src/cli/commands/_shared.d.ts.map +0 -1
  280. package/dist/src/cli/commands/_shared.js.map +0 -1
  281. package/dist/src/cli/commands/eval-gold.d.ts +0 -2
  282. package/dist/src/cli/commands/eval-gold.d.ts.map +0 -1
  283. package/dist/src/cli/commands/eval-gold.js +0 -137
  284. package/dist/src/cli/commands/eval-gold.js.map +0 -1
  285. package/dist/src/cli/commands/eval-runner.d.ts +0 -2
  286. package/dist/src/cli/commands/eval-runner.d.ts.map +0 -1
  287. package/dist/src/cli/commands/eval-runner.js.map +0 -1
  288. package/dist/src/cli/commands/eval.d.ts +0 -2
  289. package/dist/src/cli/commands/eval.d.ts.map +0 -1
  290. package/dist/src/cli/commands/eval.js +0 -11
  291. package/dist/src/cli/commands/eval.js.map +0 -1
  292. package/dist/src/cli/commands/observe.d.ts +0 -2
  293. package/dist/src/cli/commands/observe.d.ts.map +0 -1
  294. package/dist/src/cli/commands/observe.js +0 -247
  295. package/dist/src/cli/commands/observe.js.map +0 -1
  296. package/dist/src/cli/commands/registry.d.ts +0 -11
  297. package/dist/src/cli/commands/registry.d.ts.map +0 -1
  298. package/dist/src/cli/commands/registry.js +0 -32
  299. package/dist/src/cli/commands/registry.js.map +0 -1
  300. package/dist/src/cli/i18n-dict.d.ts.map +0 -1
  301. package/dist/src/cli/i18n-dict.js.map +0 -1
  302. package/dist/src/cli/i18n.d.ts.map +0 -1
  303. package/dist/src/cli/i18n.js.map +0 -1
  304. package/dist/src/cli/parse-run-config.d.ts.map +0 -1
  305. package/dist/src/cli/parse-run-config.js.map +0 -1
  306. package/dist/src/cli/parse-strict.d.ts +0 -7
  307. package/dist/src/cli/parse-strict.d.ts.map +0 -1
  308. package/dist/src/cli/parse-strict.js +0 -26
  309. package/dist/src/cli/parse-strict.js.map +0 -1
  310. package/dist/src/cli/progress.d.ts.map +0 -1
  311. package/dist/src/cli/progress.js.map +0 -1
  312. package/dist/src/cli/run-tally.d.ts.map +0 -1
  313. package/dist/src/cli/run-tally.js.map +0 -1
  314. package/dist/src/cli/update-check.d.ts.map +0 -1
  315. package/dist/src/cli/update-check.js.map +0 -1
  316. /package/dist/src/cli/{progress.d.ts → lib/progress.d.ts} +0 -0
  317. /package/dist/src/cli/{progress.js → lib/progress.js} +0 -0
  318. /package/dist/src/cli/{run-tally.js → lib/run-tally.js} +0 -0
  319. /package/dist/src/cli/{update-check.d.ts → lib/update-check.d.ts} +0 -0
  320. /package/dist/src/cli/{update-check.js → lib/update-check.js} +0 -0
@@ -0,0 +1,426 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { createExecutor } from '../executors/index.js';
5
+ import { readPromptDocument } from '../shared/llm-prompts/index.js';
6
+ import { buildObservationSkillChain } from './skill-chain.js';
7
+ export const SOFT_STANDARD_PROMPT_ID = 'llm-enhanced-review';
8
+ export const SOFT_STANDARD_PROMPT_VERSION = '2026-05-18.v1';
9
+ export const DEFAULT_SOFT_STANDARD_MODEL = 'sonnet';
10
+ export function skillDerivedStandardsDir(observationsDir) {
11
+ return join(observationsDir, 'skill-derived');
12
+ }
13
+ export function skillDerivedStandardsPath(observationsDir, skillName) {
14
+ return join(skillDerivedStandardsDir(observationsDir), `${safeSkillFileName(skillName)}.json`);
15
+ }
16
+ export function loadSkillDerivedStandards(observationsDir) {
17
+ const dir = skillDerivedStandardsDir(observationsDir);
18
+ if (!existsSync(dir))
19
+ return {};
20
+ const out = {};
21
+ for (const file of readdirSync(dir)) {
22
+ if (!file.endsWith('.json'))
23
+ continue;
24
+ try {
25
+ const parsed = JSON.parse(readFileSync(join(dir, file), 'utf-8'));
26
+ if (isSkillDerivedStandards(parsed))
27
+ out[parsed.skillName] = parsed;
28
+ }
29
+ catch {
30
+ // Ignore broken cache files; the extraction command can refresh them.
31
+ }
32
+ }
33
+ return out;
34
+ }
35
+ export function updateSkillDerivedStandardStatus(observationsDir, skillName, standardId, status, now = new Date().toISOString()) {
36
+ const filePath = skillDerivedStandardsPath(observationsDir, skillName);
37
+ const existing = loadExisting(filePath);
38
+ if (!existing)
39
+ throw new Error(`skill derived standards not found: ${skillName}`);
40
+ let found = false;
41
+ const next = {
42
+ ...existing,
43
+ generatedAt: now,
44
+ standards: existing.standards.map((item) => {
45
+ if (item.id !== standardId)
46
+ return item;
47
+ found = true;
48
+ return { ...item, status };
49
+ }),
50
+ };
51
+ if (!found)
52
+ throw new Error(`skill derived standard not found: ${standardId}`);
53
+ mkdirSync(skillDerivedStandardsDir(observationsDir), { recursive: true });
54
+ writeFileSync(filePath, JSON.stringify(next, null, 2));
55
+ return next;
56
+ }
57
+ export function resolveSkillStandards(skillName, options) {
58
+ const skillChain = options.skillChain ?? buildObservationSkillChain(skillName, options.cwd ?? process.cwd());
59
+ const derived = options.derivedStandards
60
+ ? isSkillDerivedStandards(options.derivedStandards)
61
+ ? options.derivedStandards
62
+ : options.derivedStandards[skillName]
63
+ : loadSkillDerivedStandards(options.observationsDir)[skillName];
64
+ const active = [];
65
+ const candidates = [];
66
+ const hasFrontmatterHardRules = skillChain.healthCheck.hardRules.declared && skillChain.healthCheck.hardRules.rules.length > 0;
67
+ const hasFrontmatterWorkflows = skillChain.healthCheck.workflows.declared && skillChain.healthCheck.workflows.workflows.length > 0;
68
+ for (const rule of skillChain.healthCheck.hardRules.rules) {
69
+ active.push({
70
+ id: rule.id,
71
+ kind: 'hard_rule',
72
+ title: rule.rule,
73
+ body: rule.expectedBehavior,
74
+ source: 'frontmatter',
75
+ });
76
+ }
77
+ for (const workflow of skillChain.healthCheck.workflows.workflows) {
78
+ for (const node of workflow.nodes) {
79
+ active.push({
80
+ id: `${workflow.id}.${node.id}`,
81
+ kind: 'workflow',
82
+ title: `${workflow.id} / ${node.id}`,
83
+ body: node.action,
84
+ source: 'frontmatter',
85
+ });
86
+ }
87
+ }
88
+ for (const standard of derived?.standards ?? []) {
89
+ const kind = standard.kind === 'workflow_candidate' ? 'workflow' : 'hard_rule';
90
+ const blockedByFrontmatter = kind === 'hard_rule' ? hasFrontmatterHardRules : hasFrontmatterWorkflows;
91
+ const resolved = {
92
+ id: standard.id,
93
+ kind,
94
+ title: standard.title,
95
+ body: standard.body,
96
+ source: standard.status === 'author_confirmed' ? 'confirmed_soft' : 'pending_soft',
97
+ status: standard.status,
98
+ confidence: standard.confidence,
99
+ evidence: standard.evidence,
100
+ };
101
+ if (!blockedByFrontmatter && standard.status === 'author_confirmed') {
102
+ active.push(resolved);
103
+ }
104
+ else {
105
+ candidates.push(resolved);
106
+ }
107
+ }
108
+ candidates.sort((a, b) => candidateRank(a.status) - candidateRank(b.status) || a.title.localeCompare(b.title));
109
+ return {
110
+ skillName,
111
+ active,
112
+ candidates,
113
+ sourcePriority: ['frontmatter', 'confirmed_soft', 'pending_soft'],
114
+ };
115
+ }
116
+ export async function extractSkillSoftStandards(options) {
117
+ const { observationsDir, skillChain } = options;
118
+ const model = options.model || DEFAULT_SOFT_STANDARD_MODEL;
119
+ const executorName = options.executorName || 'claude';
120
+ const generatedAt = options.now || new Date().toISOString();
121
+ const path = skillDerivedStandardsPath(observationsDir, skillChain.skillName);
122
+ const sourceHash = skillChain.definition.content ? hashText(skillChain.definition.content) : undefined;
123
+ const runtimeEvidenceHash = options.runtimeEvidence ? hashText(JSON.stringify(options.runtimeEvidence)) : undefined;
124
+ const existing = loadExisting(path);
125
+ const promptDocument = readPromptTemplate();
126
+ const compatibleCache = existing
127
+ && existing.promptId === SOFT_STANDARD_PROMPT_ID
128
+ && existing.promptVersion === SOFT_STANDARD_PROMPT_VERSION
129
+ && existing.promptHash === promptDocument.hash;
130
+ if (compatibleCache && !options.refresh && existing.sourceHash === sourceHash && existing.runtimeEvidenceHash === runtimeEvidenceHash)
131
+ return existing;
132
+ if (compatibleCache && !options.refresh && existing.standards.some((item) => item.status === 'author_confirmed')) {
133
+ const stale = markStale(existing, generatedAt);
134
+ mkdirSync(skillDerivedStandardsDir(observationsDir), { recursive: true });
135
+ writeFileSync(path, JSON.stringify(stale, null, 2));
136
+ return stale;
137
+ }
138
+ const needsHardRules = !skillChain.healthCheck.hardRules.declared;
139
+ const needsWorkflows = !skillChain.healthCheck.workflows.declared;
140
+ const prompt = buildSoftStandardPrompt(skillChain, { needsHardRules, needsWorkflows }, options.runtimeEvidence);
141
+ const executor = options.executor ?? createExecutor(executorName);
142
+ const result = await executor({
143
+ model,
144
+ system: promptDocument.body,
145
+ prompt,
146
+ timeoutMs: 300_000,
147
+ lean: true,
148
+ });
149
+ const enhancedReview = parseLlmEnhancedReviewOutput(result.output || '');
150
+ const standards = standardsFromEnhancedReview(enhancedReview).map((item) => ({
151
+ ...item,
152
+ status: 'pending_review',
153
+ source: 'llm_soft_standard',
154
+ }));
155
+ const record = {
156
+ kind: 'observe-skill-derived-standards',
157
+ schemaVersion: 1,
158
+ skillName: skillChain.skillName,
159
+ sourceSkillPath: skillChain.definition.path,
160
+ sourceHash,
161
+ generatedAt,
162
+ model,
163
+ executor: executorName,
164
+ promptId: SOFT_STANDARD_PROMPT_ID,
165
+ promptVersion: SOFT_STANDARD_PROMPT_VERSION,
166
+ promptHash: promptDocument.hash,
167
+ runtimeEvidenceHash,
168
+ enhancedReview,
169
+ standards,
170
+ };
171
+ mkdirSync(skillDerivedStandardsDir(observationsDir), { recursive: true });
172
+ writeFileSync(path, JSON.stringify(record, null, 2));
173
+ return record;
174
+ }
175
+ function buildSoftStandardPrompt(skillChain, flags, runtimeEvidence) {
176
+ return JSON.stringify({
177
+ task: 'llm_enhanced_review',
178
+ promptId: SOFT_STANDARD_PROMPT_ID,
179
+ promptVersion: SOFT_STANDARD_PROMPT_VERSION,
180
+ skillName: skillChain.skillName,
181
+ needsHardRules: flags.needsHardRules,
182
+ needsWorkflows: flags.needsWorkflows,
183
+ skillContent: skillChain.definition.content ?? '',
184
+ runtimeSummary: skillChain.runtime.summary,
185
+ runtimeEvidence: runtimeEvidence ?? {
186
+ goalSlices: [],
187
+ userMessages: [],
188
+ assistantMessages: [],
189
+ artifactCandidates: [],
190
+ toolCalls: [],
191
+ findings: [],
192
+ },
193
+ }, null, 2);
194
+ }
195
+ function readPromptTemplate() {
196
+ return readPromptDocument({
197
+ fileName: 'llm-enhanced-review.prompt.md',
198
+ id: SOFT_STANDARD_PROMPT_ID,
199
+ version: SOFT_STANDARD_PROMPT_VERSION,
200
+ });
201
+ }
202
+ function parseLlmEnhancedReviewOutput(output) {
203
+ const parsed = parseJsonObject(output);
204
+ return {
205
+ skillType: normalizeSkillType(parsed?.skillType),
206
+ extractedStandards: normalizeExtractedStandards(parsed?.extractedStandards, parsed?.standards),
207
+ userGoal: normalizeUserGoal(parsed?.userGoal),
208
+ skillDeclaredGoal: normalizeSkillDeclaredGoal(parsed?.skillDeclaredGoal),
209
+ runtimeAssessment: normalizeRuntimeAssessment(parsed?.runtimeAssessment),
210
+ userExperienceSignals: normalizeUserExperienceSignals(parsed?.userExperienceSignals),
211
+ reviewerSummary: typeof parsed?.reviewerSummary === 'string' ? parsed.reviewerSummary.slice(0, 1200) : undefined,
212
+ ownerSuggestions: normalizeOwnerSuggestions(parsed?.ownerSuggestions),
213
+ };
214
+ }
215
+ function standardsFromEnhancedReview(review) {
216
+ const standards = review.extractedStandards;
217
+ if (!standards)
218
+ return [];
219
+ const raw = [
220
+ ...standards.hardrules.map((item) => ({ ...item, kind: 'hard_rule_candidate' })),
221
+ ...standards.workflows.map((item) => ({ ...item, kind: 'workflow_candidate' })),
222
+ ...standards.completionCriteria.map((item) => ({ ...item, kind: 'workflow_candidate' })),
223
+ ...standards.artifactCriteria.map((item) => ({ ...item, kind: 'workflow_candidate' })),
224
+ ];
225
+ return raw.map((item, index) => normalizeStandard(item, index)).filter((item) => Boolean(item));
226
+ }
227
+ function parseJsonObject(output) {
228
+ try {
229
+ return JSON.parse(output);
230
+ }
231
+ catch {
232
+ const match = output.match(/\{[\s\S]*\}/);
233
+ if (!match)
234
+ return null;
235
+ try {
236
+ return JSON.parse(match[0]);
237
+ }
238
+ catch {
239
+ return null;
240
+ }
241
+ }
242
+ }
243
+ function normalizeSkillType(value) {
244
+ return value === 'router' || value === 'delegation' || value === 'executor' || value === 'advisory' || value === 'unknown'
245
+ ? value
246
+ : undefined;
247
+ }
248
+ function normalizeExtractedStandards(value, legacyStandards) {
249
+ if (!value || typeof value !== 'object') {
250
+ if (!Array.isArray(legacyStandards))
251
+ return undefined;
252
+ return {
253
+ hardrules: legacyStandards.map((item, index) => normalizeStandardSectionItem(item, index)).filter((item) => Boolean(item)),
254
+ workflows: [],
255
+ completionCriteria: [],
256
+ artifactCriteria: [],
257
+ };
258
+ }
259
+ const record = value;
260
+ return {
261
+ hardrules: normalizeStandardSection(record.hardrules),
262
+ workflows: normalizeStandardSection(record.workflows),
263
+ completionCriteria: normalizeStandardSection(record.completionCriteria),
264
+ artifactCriteria: normalizeStandardSection(record.artifactCriteria),
265
+ };
266
+ }
267
+ function normalizeStandardSection(value) {
268
+ if (!Array.isArray(value))
269
+ return [];
270
+ return value.map((item, index) => normalizeStandardSectionItem(item, index)).filter((item) => Boolean(item));
271
+ }
272
+ function normalizeStandardSectionItem(value, index) {
273
+ if (typeof value === 'string') {
274
+ const text = value.trim();
275
+ if (!text)
276
+ return null;
277
+ return { title: text.slice(0, 160), body: text.slice(0, 600), confidence: 'low', evidence: [] };
278
+ }
279
+ if (!value || typeof value !== 'object')
280
+ return null;
281
+ const item = value;
282
+ const title = typeof item.title === 'string' && item.title.trim()
283
+ ? item.title.trim()
284
+ : typeof item.body === 'string' && item.body.trim()
285
+ ? item.body.trim().slice(0, 80)
286
+ : `候选标准 ${index + 1}`;
287
+ const body = typeof item.body === 'string' && item.body.trim() ? item.body.trim() : title;
288
+ return {
289
+ title: title.slice(0, 160),
290
+ body: body.slice(0, 600),
291
+ confidence: item.confidence === 'high' || item.confidence === 'medium' || item.confidence === 'low' ? item.confidence : 'low',
292
+ evidence: Array.isArray(item.evidence) ? item.evidence.filter((entry) => typeof entry === 'string').slice(0, 5) : [],
293
+ };
294
+ }
295
+ function normalizeUserGoal(value) {
296
+ if (!value || typeof value !== 'object')
297
+ return undefined;
298
+ const item = value;
299
+ return {
300
+ summary: typeof item.summary === 'string' ? item.summary.slice(0, 500) : undefined,
301
+ slots: Array.isArray(item.slots) ? item.slots.filter((entry) => typeof entry === 'string').slice(0, 12) : [],
302
+ expectedOutcome: typeof item.expectedOutcome === 'string' ? item.expectedOutcome.slice(0, 500) : undefined,
303
+ };
304
+ }
305
+ function normalizeSkillDeclaredGoal(value) {
306
+ if (!value || typeof value !== 'object')
307
+ return undefined;
308
+ const item = value;
309
+ return {
310
+ summary: typeof item.summary === 'string' ? item.summary.slice(0, 300) : undefined,
311
+ keywords: Array.isArray(item.keywords) ? item.keywords.filter((entry) => typeof entry === 'string').slice(0, 10) : [],
312
+ expectedOutcomes: Array.isArray(item.expectedOutcomes) ? item.expectedOutcomes.filter((entry) => typeof entry === 'string').slice(0, 10) : [],
313
+ };
314
+ }
315
+ function normalizeRuntimeAssessment(value) {
316
+ if (!value || typeof value !== 'object')
317
+ return undefined;
318
+ const item = value;
319
+ return {
320
+ goalSatisfaction: normalizeVerdict(item.goalSatisfaction),
321
+ declaredBehaviorFit: normalizeVerdict(item.declaredBehaviorFit),
322
+ artifactGoalMatch: normalizeVerdict(item.artifactGoalMatch),
323
+ userFeeling: normalizeUserFeeling(item.userFeeling),
324
+ };
325
+ }
326
+ function normalizeUserExperienceSignals(value) {
327
+ if (!value || typeof value !== 'object')
328
+ return undefined;
329
+ const item = value;
330
+ return {
331
+ useful: normalizeVerdict(item.useful),
332
+ followUp: normalizeVerdict(item.followUp),
333
+ correction: normalizeVerdict(item.correction),
334
+ negativeFeedback: normalizeVerdict(item.negativeFeedback),
335
+ interruption: normalizeVerdict(item.interruption),
336
+ frustration: normalizeVerdict(item.frustration),
337
+ };
338
+ }
339
+ function normalizeVerdict(value) {
340
+ return value === 'passed' || value === 'failed' || value === 'unknown' ? value : undefined;
341
+ }
342
+ function normalizeUserFeeling(value) {
343
+ return value === 'positive' || value === 'neutral' || value === 'negative' || value === 'frustrated' ? value : undefined;
344
+ }
345
+ function normalizeOwnerSuggestions(value) {
346
+ if (!Array.isArray(value))
347
+ return undefined;
348
+ return value.slice(0, 10).map((entry) => {
349
+ if (typeof entry === 'string')
350
+ return { title: entry.slice(0, 160), body: entry.slice(0, 800) };
351
+ if (!entry || typeof entry !== 'object')
352
+ return {};
353
+ const item = entry;
354
+ return {
355
+ title: typeof item.title === 'string' ? item.title.slice(0, 160) : undefined,
356
+ body: typeof item.body === 'string' ? item.body.slice(0, 1000) : undefined,
357
+ evidence: Array.isArray(item.evidence) ? item.evidence.filter((it) => typeof it === 'string').slice(0, 5) : undefined,
358
+ acceptanceCriteria: typeof item.acceptanceCriteria === 'string' ? item.acceptanceCriteria.slice(0, 600) : undefined,
359
+ };
360
+ });
361
+ }
362
+ function normalizeStandard(value, index) {
363
+ if (!value || typeof value !== 'object')
364
+ return null;
365
+ const item = value;
366
+ const kind = item.kind === 'workflow_candidate' ? 'workflow_candidate' : item.kind === 'hard_rule_candidate' ? 'hard_rule_candidate' : undefined;
367
+ if (!kind || typeof item.title !== 'string' || typeof item.body !== 'string')
368
+ return null;
369
+ const stable = [kind, item.title, item.body].join('\u0000');
370
+ return {
371
+ id: typeof item.id === 'string' && item.id.trim() ? item.id.trim() : `soft-${createHash('sha256').update(stable).digest('hex').slice(0, 12)}-${index}`,
372
+ kind,
373
+ title: item.title.slice(0, 160),
374
+ body: item.body.slice(0, 600),
375
+ confidence: item.confidence === 'high' || item.confidence === 'medium' || item.confidence === 'low' ? item.confidence : 'low',
376
+ evidence: Array.isArray(item.evidence) ? item.evidence.filter((entry) => typeof entry === 'string').slice(0, 5) : [],
377
+ };
378
+ }
379
+ function loadExisting(path) {
380
+ if (!existsSync(path))
381
+ return undefined;
382
+ try {
383
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
384
+ return isSkillDerivedStandards(parsed) ? parsed : undefined;
385
+ }
386
+ catch {
387
+ return undefined;
388
+ }
389
+ }
390
+ function markStale(record, generatedAt) {
391
+ return {
392
+ ...record,
393
+ generatedAt,
394
+ standards: record.standards.map((item) => item.status === 'author_confirmed' || item.status === 'pending_review'
395
+ ? { ...item, status: 'stale' }
396
+ : item),
397
+ };
398
+ }
399
+ function isSkillDerivedStandards(value) {
400
+ if (!value || typeof value !== 'object')
401
+ return false;
402
+ const item = value;
403
+ return item.kind === 'observe-skill-derived-standards'
404
+ && item.schemaVersion === 1
405
+ && typeof item.skillName === 'string'
406
+ && Array.isArray(item.standards);
407
+ }
408
+ function candidateRank(status) {
409
+ if (status === 'pending_review')
410
+ return 0;
411
+ if (status === 'stale')
412
+ return 1;
413
+ if (status === 'rejected')
414
+ return 2;
415
+ if (status === 'author_confirmed')
416
+ return 3;
417
+ return 4;
418
+ }
419
+ function safeSkillFileName(skillName) {
420
+ const base = skillName.replace(/[^a-zA-Z0-9_.-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
421
+ return `${base.slice(0, 80)}-${hashText(skillName).slice(0, 8)}`;
422
+ }
423
+ function hashText(value) {
424
+ return createHash('sha256').update(value).digest('hex');
425
+ }
426
+ //# sourceMappingURL=soft-standards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soft-standards.js","sourceRoot":"","sources":["../../../src/observability/soft-standards.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,14 @@
1
1
  export declare const HARD_RULE_TEXT_RE: RegExp;
2
+ export declare const ASSISTANT_DELIVERABLE_ARTIFACT_RE: RegExp;
2
3
  export declare function isRuntimeProtocolPromptText(value: string): boolean;
3
4
  export declare function isScheduledTaskPromptText(value: string): boolean;
5
+ export declare function isAssistantProtocolReplyText(value: string): boolean;
6
+ export declare function isWorkflowSystemUserMessageText(value: string): boolean;
7
+ export declare function isSyntheticUserMessageText(value: string): boolean;
8
+ export declare function isUserInteractionMetricText(value: string): boolean;
4
9
  export declare function hasUserHardRuleText(value: string): boolean;
5
10
  export declare function isAssistantProgressUpdateText(value: string): boolean;
6
11
  export declare function hasAssistantDeliverySignalText(value: string): boolean;
12
+ export declare function hasAssistantDeliverableArtifactText(value: string): boolean;
13
+ export declare function isToolResultFailureText(value: string): boolean;
7
14
  //# sourceMappingURL=text-signals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-signals.d.ts","sourceRoot":"","sources":["../../../src/observability/text-signals.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAA8C,CAAC;AAgB7E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErE"}
1
+ {"version":3,"file":"text-signals.d.ts","sourceRoot":"","sources":["../../../src/observability/text-signals.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,QAA8C,CAAC;AA+B7E,eAAO,MAAM,iCAAiC,QAC2W,CAAC;AAE1Z,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInE;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI9D"}
@@ -1,22 +1,106 @@
1
1
  export const HARD_RULE_TEXT_RE = /hard rules?|必须|不要|禁止|严格|一定要|务必|不得|不能|只允许/i;
2
- const RUNTIME_PROTOCOL_PROMPT_RE = /你在看一个\s+[\w.-]+\s+后台任务|根据日志写一条进展消息发给用户|不要执行日志里的任务|::FORWARD-OK::|instruction\s*:\s*直接转发[,,]?\s*不要回答/i;
2
+ const RUNTIME_PROTOCOL_PROMPT_RE = /你在看一个\s+[\w.-]+\s+后台任务|根据日志写一条进展消息发给用户|不要执行日志里的任务|::FORWARD-OK::|instruction\s*:\s*直接转发[,,]?\s*不要回答|\[OpenClaw\s+heartbeat\s+poll\]|\[Queued messages while agent was busy\]/i;
3
3
  const SCHEDULED_TASK_PROMPT_RE = /^\s*\[cron:[^\]]+\]/i;
4
+ // 要求整条消息就是协议词(允许少量空白/尾标点),不要只匹前缀。
5
+ // 旧形态 `(?:\s|\n|$)` 让 "OK 我来帮你查一下" / "ACK 已收到任务" 这类
6
+ // 中文对话开头被错分类为协议消息,把真实的 assistantDeliverySignal 屏蔽掉,
7
+ // 系统性低估 final_delivery_absent 等测量信号。
8
+ const ASSISTANT_PROTOCOL_REPLY_RE = /^\s*(?:HEARTBEAT_OK|HEARTBEAT|PING_OK|PONG|ACK|OK|::FORWARD-OK::)\s*[.!]?\s*$/i;
9
+ const AIMA_CMD_BLOCK_RE = /<aima-cmd\b[^>]*>[\s\S]*?<\/aima-cmd>|<aima-cmd\b[^>]*\/>/gi;
10
+ const SYNTHETIC_USER_MESSAGE_PREFIX_RE = /^\s*【(?:用户上传产物|上传产物|附件|产物|系统补充|系统生成|回放补充|trace\s*后处理|Trace\s*后处理)[^】]*】/i;
11
+ const SYNTHETIC_USER_MESSAGE_META_RE = /\b(?:artifact_id|artifactId|file_id|fileId|version)\b|用户手动上传|上传了.+文件/i;
4
12
  const ASSISTANT_DELIVERY_SIGNAL_RE = /```(?:mermaid|plantuml|json|tsx?|jsx?|html|css|excalidraw|markdown)?|直接生成|已生成|生成如下|结果如下|如下|完成|已完成|这里是|给出|输出/i;
5
13
  const ASSISTANT_PROGRESS_UPDATE_RE = /已发送进展|进展消息|进度更新|状态更新|正在|仍在|继续|处理中|整理中|分析中|生成中|执行中|采集中|获取中|即将|预计|稍后|子\s*Claude|后台任务/i;
6
- const ASSISTANT_FINAL_DELIVERY_RE = /最终结果|最终报告|完整结果|完整报告|结果如下|报告如下|已完成[,,。::]\s*(?:结果|报告|如下)/i;
14
+ const ASSISTANT_FINAL_DELIVERY_RE = /最终结果|最终报告|完整结果|完整报告|结果如下|报告如下|已完成[,,。::]\s*(?:结果|报告|如下)|(?:任务|方案|文档|报告|demo|代码|页面)?已完成\s*(?:✅|[,,。::]\s*(?:方案路径|产物路径|文档路径|结果|报告|如下))|(?:方案路径|产物路径|文档路径|结果文件|输出路径)\s*[::]/i;
15
+ export const ASSISTANT_DELIVERABLE_ARTIFACT_RE = /```(?:mermaid|plantuml|json|tsx?|jsx?|html|css|excalidraw|markdown)?|https?:\/\/\S+|(?:文档|报告|方案|demo|Demo|预览|产物|文件|页面|dashboard|看板)(?:链接|地址|路径|URL)|(?:已生成|已创建|已写入|已保存|上传).{0,16}(?:文件|文档|报告|页面|demo|Demo|dashboard|看板|产物)|(?:^|[\s"'`(])(?:\/[\w.-]+){2,}\.(?:md|html|tsx?|jsx?|json|png|jpe?g|pdf|docx?|pptx?|xlsx?|csv)\b|(?:^|[\s"'`(])[\w.-]+\.(?:md|html|tsx?|jsx?|json|png|jpe?g|pdf|docx?|pptx?|xlsx?|csv)\b/i;
7
16
  export function isRuntimeProtocolPromptText(value) {
8
17
  return RUNTIME_PROTOCOL_PROMPT_RE.test(value);
9
18
  }
10
19
  export function isScheduledTaskPromptText(value) {
11
20
  return SCHEDULED_TASK_PROMPT_RE.test(value);
12
21
  }
22
+ export function isAssistantProtocolReplyText(value) {
23
+ const normalized = value.trim();
24
+ if (!normalized)
25
+ return false;
26
+ return ASSISTANT_PROTOCOL_REPLY_RE.test(normalized);
27
+ }
28
+ export function isWorkflowSystemUserMessageText(value) {
29
+ const stripped = value.replace(AIMA_CMD_BLOCK_RE, '').trim();
30
+ return stripped.length === 0 && /<aima-cmd\b/i.test(value);
31
+ }
32
+ export function isSyntheticUserMessageText(value) {
33
+ return isRuntimeProtocolPromptText(value)
34
+ || isWorkflowSystemUserMessageText(value)
35
+ || SYNTHETIC_USER_MESSAGE_PREFIX_RE.test(value)
36
+ || (/^\s*【[^】]+】/.test(value) && SYNTHETIC_USER_MESSAGE_META_RE.test(value));
37
+ }
38
+ export function isUserInteractionMetricText(value) {
39
+ return !isScheduledTaskPromptText(value) && !isSyntheticUserMessageText(value);
40
+ }
13
41
  export function hasUserHardRuleText(value) {
14
- return HARD_RULE_TEXT_RE.test(value) && !isRuntimeProtocolPromptText(value) && !isScheduledTaskPromptText(value);
42
+ if (isRuntimeProtocolPromptText(value) || !isUserInteractionMetricText(value))
43
+ return false;
44
+ if (/hard rules?/i.test(value))
45
+ return true;
46
+ if (/必须|严格|一定要|务必|不得|只允许/i.test(value))
47
+ return true;
48
+ if (/(?:不要|禁止)(?:省略|遗漏|改动|修改|执行|输出|使用|调用|生成|删除|跳过|猜|编|问|返回|展示|写入|覆盖|提交|发布|发送|回复)/i.test(value))
49
+ return true;
50
+ if (/不能(?:省略|遗漏|改动|修改|执行|输出|使用|调用|生成|删除|跳过|猜|编|问|返回|展示|写入|覆盖|提交|发布|发送|回复)/i.test(value))
51
+ return true;
52
+ return false;
15
53
  }
16
54
  export function isAssistantProgressUpdateText(value) {
17
55
  return ASSISTANT_PROGRESS_UPDATE_RE.test(value) && !ASSISTANT_FINAL_DELIVERY_RE.test(value);
18
56
  }
19
57
  export function hasAssistantDeliverySignalText(value) {
20
- return ASSISTANT_DELIVERY_SIGNAL_RE.test(value) && !isAssistantProgressUpdateText(value);
58
+ return ASSISTANT_FINAL_DELIVERY_RE.test(value)
59
+ || (ASSISTANT_DELIVERY_SIGNAL_RE.test(value) && !isAssistantProgressUpdateText(value));
60
+ }
61
+ export function hasAssistantDeliverableArtifactText(value) {
62
+ return ASSISTANT_DELIVERABLE_ARTIFACT_RE.test(value);
63
+ }
64
+ export function isToolResultFailureText(value) {
65
+ if (toolResultFailureJson(value))
66
+ return true;
67
+ return /(?:^|\b)(?:status|state)\s*[:=]\s*["']?(?:error|failed|failure)["']?/i.test(value)
68
+ || /\berror\s*[:=]\s*(?!false|null|0\b).+/i.test(value);
69
+ }
70
+ function toolResultFailureJson(value) {
71
+ const trimmed = value.trim();
72
+ if (!trimmed || (!trimmed.startsWith('{') && !trimmed.startsWith('[')))
73
+ return false;
74
+ try {
75
+ return containsToolFailureSignal(JSON.parse(trimmed), 0);
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ }
81
+ function containsToolFailureSignal(value, depth) {
82
+ if (depth > 5 || value === null || value === undefined)
83
+ return false;
84
+ if (typeof value === 'string')
85
+ return toolResultFailureJson(value);
86
+ if (typeof value !== 'object')
87
+ return false;
88
+ if (Array.isArray(value))
89
+ return value.some((item) => containsToolFailureSignal(item, depth + 1));
90
+ const record = value;
91
+ for (const [key, raw] of Object.entries(record)) {
92
+ const normalizedKey = key.toLowerCase();
93
+ if ((normalizedKey === 'status' || normalizedKey === 'state') && typeof raw === 'string' && /^(error|failed|failure)$/i.test(raw.trim()))
94
+ return true;
95
+ if ((normalizedKey === 'iserror' || normalizedKey === 'is_error') && raw === true)
96
+ return true;
97
+ if (normalizedKey === 'success' && raw === false)
98
+ return true;
99
+ if (normalizedKey === 'error' && raw !== false && raw !== null && raw !== undefined && raw !== '')
100
+ return true;
101
+ if ((normalizedKey === 'body' || normalizedKey === 'result' || normalizedKey === 'data') && containsToolFailureSignal(raw, depth + 1))
102
+ return true;
103
+ }
104
+ return false;
21
105
  }
22
106
  //# sourceMappingURL=text-signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-signals.js","sourceRoot":"","sources":["../../../src/observability/text-signals.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,2CAA2C,CAAC;AAE7E,MAAM,0BAA0B,GAC9B,sGAAsG,CAAC;AAEzG,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAExD,MAAM,4BAA4B,GAChC,8GAA8G,CAAC;AAEjH,MAAM,4BAA4B,GAChC,qFAAqF,CAAC;AAExF,MAAM,2BAA2B,GAC/B,0DAA0D,CAAC;AAE7D,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC"}
1
+ {"version":3,"file":"text-signals.js","sourceRoot":"","sources":["../../../src/observability/text-signals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"trace-segmenter.d.ts","sourceRoot":"","sources":["../../../src/observability/trace-segmenter.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAC5F,OAAO,KAAK,EAAqB,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAYpF,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS,CAAC;QAClG,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IAChE,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,EAAE,CA+MjE;AAgED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAO/E"}
1
+ {"version":3,"file":"trace-segmenter.d.ts","sourceRoot":"","sources":["../../../src/observability/trace-segmenter.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAC5F,OAAO,KAAK,EAAqB,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAapF,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,YAAY,GAAG,cAAc,GAAG,UAAU,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS,CAAC;QAClG,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;IAChE,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,EAAE,CAgNjE;AAgED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,CAO/E"}
@@ -1,4 +1,5 @@
1
1
  /** Skill segmentation and ResultEntry projection for loaded traces. */
2
+ import { isToolResultFailureText } from './text-signals.js';
2
3
  import { extractAimaCmdSkillRef, extractAttributionSkillRef, extractCommandSkillRef, extractSkillReadFileRef, extractSkillScriptCommandRef, extractSkillToolUseRef, stripCommandEnvelopeText, } from './trace-attribution.js';
3
4
  // ---------- Segment by skill ----------
4
5
  /**
@@ -85,9 +86,10 @@ export function segmentBySkill(session) {
85
86
  if (part.type === 'tool_result') {
86
87
  const pending = pendingToolUses.get(part.tool_use_id);
87
88
  if (pending) {
89
+ const failed = part.is_error === true || isToolResultFailureText(part.content);
88
90
  pending.toolCall.output = part.content;
89
- pending.toolCall.success = part.is_error !== true;
90
- if (part.is_error === true) {
91
+ pending.toolCall.success = !failed;
92
+ if (failed) {
91
93
  pending.segmentRef.metrics.numToolFailures += 1;
92
94
  }
93
95
  pendingToolUses.delete(part.tool_use_id);