@rpamis/comet 0.4.0-beta.3 → 0.4.0-beta.5

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 (605) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +15 -1
  3. package/assets/manifest.json +2 -1
  4. package/assets/skills/comet/SKILL.md +54 -28
  5. package/assets/skills/comet/reference/auto-transition.md +1 -1
  6. package/assets/skills/comet/reference/comet-yaml-fields.md +11 -6
  7. package/assets/skills/comet/reference/context-recovery.md +12 -2
  8. package/assets/skills/comet/reference/decision-point.md +11 -0
  9. package/assets/skills/comet/reference/scripts.md +47 -15
  10. package/assets/skills/comet/reference/subagent-dispatch.md +6 -5
  11. package/assets/skills/comet/rules/comet-phase-guard.en.md +31 -28
  12. package/assets/skills/comet/rules/comet-phase-guard.md +31 -29
  13. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  14. package/assets/skills/comet/scripts/comet-runtime.mjs +1568 -476
  15. package/assets/skills/comet-any/SKILL.md +1 -1
  16. package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
  17. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
  18. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -0
  19. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +5 -4
  20. package/assets/skills/comet-archive/SKILL.md +52 -18
  21. package/assets/skills/comet-build/SKILL.md +64 -45
  22. package/assets/skills/comet-design/SKILL.md +24 -22
  23. package/assets/skills/comet-hotfix/SKILL.md +37 -34
  24. package/assets/skills/comet-open/SKILL.md +106 -57
  25. package/assets/skills/comet-tweak/SKILL.md +23 -18
  26. package/assets/skills/comet-verify/SKILL.md +57 -72
  27. package/assets/skills-zh/comet/SKILL.md +54 -28
  28. package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
  29. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +11 -6
  30. package/assets/skills-zh/comet/reference/context-recovery.md +12 -2
  31. package/assets/skills-zh/comet/reference/decision-point.md +11 -0
  32. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  33. package/assets/skills-zh/comet/reference/subagent-dispatch.md +6 -5
  34. package/assets/skills-zh/comet-any/SKILL.md +1 -1
  35. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
  36. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
  37. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -0
  38. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +5 -4
  39. package/assets/skills-zh/comet-archive/SKILL.md +52 -18
  40. package/assets/skills-zh/comet-build/SKILL.md +64 -45
  41. package/assets/skills-zh/comet-design/SKILL.md +24 -22
  42. package/assets/skills-zh/comet-hotfix/SKILL.md +36 -33
  43. package/assets/skills-zh/comet-open/SKILL.md +105 -56
  44. package/assets/skills-zh/comet-tweak/SKILL.md +22 -17
  45. package/assets/skills-zh/comet-verify/SKILL.md +57 -72
  46. package/dist/app/cli/comet-banner.d.ts +25 -0
  47. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  48. package/dist/app/cli/comet-banner.js +265 -0
  49. package/dist/app/cli/comet-banner.js.map +1 -0
  50. package/dist/app/cli/index.js +36 -2
  51. package/dist/app/cli/index.js.map +1 -1
  52. package/dist/app/commands/classic.d.ts +4 -0
  53. package/dist/app/commands/classic.d.ts.map +1 -0
  54. package/dist/app/commands/classic.js +11 -0
  55. package/dist/app/commands/classic.js.map +1 -0
  56. package/dist/app/commands/doctor.d.ts.map +1 -1
  57. package/dist/app/commands/doctor.js +99 -37
  58. package/dist/app/commands/doctor.js.map +1 -1
  59. package/dist/app/commands/eval.d.ts.map +1 -1
  60. package/dist/app/commands/eval.js +57 -20
  61. package/dist/app/commands/eval.js.map +1 -1
  62. package/dist/app/commands/i18n.d.ts +1 -1
  63. package/dist/app/commands/i18n.d.ts.map +1 -1
  64. package/dist/app/commands/i18n.js +12 -4
  65. package/dist/app/commands/i18n.js.map +1 -1
  66. package/dist/app/commands/init.d.ts +1 -1
  67. package/dist/app/commands/init.d.ts.map +1 -1
  68. package/dist/app/commands/init.js +72 -25
  69. package/dist/app/commands/init.js.map +1 -1
  70. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  71. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  72. package/dist/app/commands/project-scope-selection.js +33 -0
  73. package/dist/app/commands/project-scope-selection.js.map +1 -0
  74. package/dist/app/commands/resume-probe.d.ts +11 -0
  75. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  76. package/dist/app/commands/resume-probe.js +63 -0
  77. package/dist/app/commands/resume-probe.js.map +1 -0
  78. package/dist/app/commands/status.d.ts +31 -0
  79. package/dist/app/commands/status.d.ts.map +1 -1
  80. package/dist/app/commands/status.js +109 -20
  81. package/dist/app/commands/status.js.map +1 -1
  82. package/dist/app/commands/uninstall.d.ts +5 -0
  83. package/dist/app/commands/uninstall.d.ts.map +1 -1
  84. package/dist/app/commands/uninstall.js +264 -53
  85. package/dist/app/commands/uninstall.js.map +1 -1
  86. package/dist/app/commands/update.d.ts +6 -0
  87. package/dist/app/commands/update.d.ts.map +1 -1
  88. package/dist/app/commands/update.js +558 -86
  89. package/dist/app/commands/update.js.map +1 -1
  90. package/dist/config/repository-layout.json +4 -2
  91. package/dist/domains/bundle/bundle-platform.d.ts +1 -0
  92. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  93. package/dist/domains/bundle/bundle-platform.js +9 -3
  94. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  95. package/dist/domains/bundle/eval-manifest-runtime.d.ts +6 -0
  96. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  97. package/dist/domains/bundle/eval-manifest-runtime.js +58 -0
  98. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  99. package/dist/domains/bundle/types.d.ts +1 -1
  100. package/dist/domains/bundle/types.d.ts.map +1 -1
  101. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  102. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  103. package/dist/domains/comet-classic/classic-archive.js +35 -38
  104. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  105. package/dist/domains/comet-classic/classic-cli.d.ts +1 -1
  106. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  107. package/dist/domains/comet-classic/classic-cli.js +3 -0
  108. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  109. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  110. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  111. package/dist/domains/comet-classic/classic-command-checks.js +97 -0
  112. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  113. package/dist/domains/comet-classic/classic-current-change.d.ts +19 -0
  114. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  115. package/dist/domains/comet-classic/classic-current-change.js +132 -0
  116. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  117. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  118. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  119. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  120. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  121. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  122. package/dist/domains/comet-classic/classic-evidence.js +4 -0
  123. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  124. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  125. package/dist/domains/comet-classic/classic-guard.js +83 -80
  126. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  127. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  128. package/dist/domains/comet-classic/classic-hook-guard.js +179 -42
  129. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  130. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  131. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  132. package/dist/domains/comet-classic/classic-project-config.js +40 -0
  133. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  134. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  135. package/dist/domains/comet-classic/classic-resolver.js +4 -4
  136. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  137. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  138. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  139. package/dist/domains/comet-classic/classic-resume-probe-command.js +58 -0
  140. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  141. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  142. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  143. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  144. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  145. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  146. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  147. package/dist/domains/comet-classic/classic-resume-probe.js +386 -0
  148. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  149. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  150. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  151. package/dist/domains/comet-classic/classic-runtime-run.js +38 -0
  152. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  153. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  154. package/dist/domains/comet-classic/classic-state-command.js +150 -25
  155. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  156. package/dist/domains/comet-classic/classic-state.d.ts +5 -2
  157. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  158. package/dist/domains/comet-classic/classic-state.js +17 -1
  159. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  160. package/dist/domains/comet-classic/classic-store.d.ts +4 -1
  161. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  162. package/dist/domains/comet-classic/classic-store.js +4 -3
  163. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  164. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  165. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  166. package/dist/domains/comet-classic/classic-transitions.js +36 -3
  167. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  168. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  169. package/dist/domains/comet-classic/classic-validate-command.js +8 -1
  170. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  171. package/dist/domains/comet-classic/index.d.ts +3 -0
  172. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  173. package/dist/domains/comet-classic/index.js +3 -0
  174. package/dist/domains/comet-classic/index.js.map +1 -1
  175. package/dist/domains/dashboard/collector.js +10 -2
  176. package/dist/domains/dashboard/collector.js.map +1 -1
  177. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  178. package/dist/domains/dashboard/web/assets/arc-TGVUG2WN.js +1 -0
  179. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-ASHmiHoP.js +36 -0
  180. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-CwASxBKe.js +132 -0
  181. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-BU8z_WNk.js +10 -0
  182. package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +1 -0
  183. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-CBGlUx4_.js +1 -0
  184. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-CS-iGcFz.js +1 -0
  185. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-BUtCVJat.js +1 -0
  186. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-C94tj_pf.js +206 -0
  187. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-BFOKcpdG.js +231 -0
  188. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-Dmx8B-st.js +15 -0
  189. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-DYV00CNn.js +1 -0
  190. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-DMJJyQnw.js +1 -0
  191. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +1 -0
  192. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +1 -0
  193. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-P4nE2rea.js +1 -0
  194. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-C-R1HXDv.js +166 -0
  195. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  196. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-BH8d-C9z.js +4 -0
  197. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  198. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-DpXTgQIH.js +43 -0
  199. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-DSiFJzSw.js +10 -0
  200. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DULMkben.js +3 -0
  201. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-Pi8m_NO9.js +24 -0
  202. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-BSe6bCWm.js +24 -0
  203. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-zb-FEcbq.js +85 -0
  204. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-Dr-Gk0z2.js +162 -0
  205. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-qs6Zb2A6.js +292 -0
  206. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-BQ314orT.js +106 -0
  207. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  208. package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +1 -0
  209. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  210. package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +24 -0
  211. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  212. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-O0bQp98A.js +2 -0
  213. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  214. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-BPC7wbKh.js +70 -0
  215. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-ohViOd4b.js +139 -0
  216. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-CHleNdbG.js +89 -0
  217. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  218. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  219. package/dist/domains/dashboard/web/assets/linear-CyqiW--Q.js +1 -0
  220. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  221. package/dist/domains/dashboard/web/assets/mermaid.core-qS9XvtaK.js +301 -0
  222. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-oaGkqO9l.js +96 -0
  223. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  224. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-CPcB-AFh.js +30 -0
  225. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  226. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-LFy52Qtj.js +7 -0
  227. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BdjeaYP_.js +84 -0
  228. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-DDJ4styL.js +40 -0
  229. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-BL5bFNoz.js +162 -0
  230. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-BNUfikui.js +1 -0
  231. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +1 -0
  232. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA--ps2uu6L.js +120 -0
  233. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-C2q8q26c.js +34 -0
  234. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-BUH9gXqd.js +78 -0
  235. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-B-DielEy.js +7 -0
  236. package/dist/domains/dashboard/web/index.html +16 -16
  237. package/dist/domains/engine/types.d.ts +1 -1
  238. package/dist/domains/engine/types.d.ts.map +1 -1
  239. package/dist/domains/factory/package.d.ts.map +1 -1
  240. package/dist/domains/factory/package.js +20 -6
  241. package/dist/domains/factory/package.js.map +1 -1
  242. package/dist/domains/integrations/openspec.d.ts +4 -1
  243. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  244. package/dist/domains/integrations/openspec.js +62 -10
  245. package/dist/domains/integrations/openspec.js.map +1 -1
  246. package/dist/domains/skill/find.d.ts.map +1 -1
  247. package/dist/domains/skill/find.js +1 -6
  248. package/dist/domains/skill/find.js.map +1 -1
  249. package/dist/domains/skill/json-object.d.ts +13 -0
  250. package/dist/domains/skill/json-object.d.ts.map +1 -0
  251. package/dist/domains/skill/json-object.js +24 -0
  252. package/dist/domains/skill/json-object.js.map +1 -0
  253. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  254. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  255. package/dist/domains/skill/managed-markdown.js +126 -0
  256. package/dist/domains/skill/managed-markdown.js.map +1 -0
  257. package/dist/domains/skill/platform-inspect.d.ts +9 -0
  258. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  259. package/dist/domains/skill/platform-inspect.js +149 -0
  260. package/dist/domains/skill/platform-inspect.js.map +1 -0
  261. package/dist/domains/skill/platform-install.d.ts +20 -9
  262. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  263. package/dist/domains/skill/platform-install.js +356 -153
  264. package/dist/domains/skill/platform-install.js.map +1 -1
  265. package/dist/domains/skill/project-instructions.d.ts +22 -0
  266. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  267. package/dist/domains/skill/project-instructions.js +61 -0
  268. package/dist/domains/skill/project-instructions.js.map +1 -0
  269. package/dist/domains/skill/uninstall.d.ts +3 -1
  270. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  271. package/dist/domains/skill/uninstall.js +259 -149
  272. package/dist/domains/skill/uninstall.js.map +1 -1
  273. package/dist/platform/fs/file-system.d.ts +3 -3
  274. package/dist/platform/fs/file-system.d.ts.map +1 -1
  275. package/dist/platform/fs/file-system.js +21 -11
  276. package/dist/platform/fs/file-system.js.map +1 -1
  277. package/dist/platform/install/detect.d.ts +2 -1
  278. package/dist/platform/install/detect.d.ts.map +1 -1
  279. package/dist/platform/install/detect.js +10 -1
  280. package/dist/platform/install/detect.js.map +1 -1
  281. package/dist/platform/install/platforms.d.ts +9 -1
  282. package/dist/platform/install/platforms.d.ts.map +1 -1
  283. package/dist/platform/install/platforms.js +23 -4
  284. package/dist/platform/install/platforms.js.map +1 -1
  285. package/dist/platform/install/project-registry.d.ts +38 -0
  286. package/dist/platform/install/project-registry.d.ts.map +1 -0
  287. package/dist/platform/install/project-registry.js +213 -0
  288. package/dist/platform/install/project-registry.js.map +1 -0
  289. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  290. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  291. package/dist/platform/install/skill-root-owner.js +68 -0
  292. package/dist/platform/install/skill-root-owner.js.map +1 -0
  293. package/eval/.env.example +52 -0
  294. package/eval/CLAUDE.md +43 -0
  295. package/eval/README.md +538 -0
  296. package/eval/langsmith/.env.example +16 -0
  297. package/eval/langsmith/README.md +93 -0
  298. package/eval/langsmith/skills/README.md +5 -0
  299. package/eval/langsmith/tasks/README.md +5 -0
  300. package/eval/langsmith/tests/conftest.py +187 -0
  301. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  302. package/eval/langsmith/treatments/README.md +5 -0
  303. package/eval/local/README.md +80 -0
  304. package/eval/local/regression_baseline.json +13 -0
  305. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  306. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  307. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  308. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  309. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  310. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  311. package/eval/local/report-style-demo.html +867 -0
  312. package/eval/local/scripts/compare_baselines.py +1018 -0
  313. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  314. package/eval/local/scripts/regression_check.py +171 -0
  315. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  316. package/eval/local/scripts/rescore_rubric.py +120 -0
  317. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  318. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  319. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  320. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  321. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  322. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  323. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  324. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  325. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  326. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  327. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  328. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  329. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  330. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  331. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  332. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  333. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  334. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  335. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  336. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  337. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  338. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  339. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  340. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  341. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  342. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  343. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  344. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  345. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  346. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  347. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  348. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  349. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  350. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  351. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  352. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  353. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  354. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  355. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  356. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  357. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  358. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  359. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  360. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  361. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  362. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  363. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  364. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  365. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  366. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  367. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  368. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  369. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  370. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  371. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  372. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  373. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  374. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  375. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  376. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  377. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  378. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  379. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  380. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  381. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  382. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  383. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  384. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  385. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  386. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  387. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  388. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  389. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  390. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  391. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  392. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  393. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  394. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  395. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  396. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  397. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  398. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  399. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  400. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  401. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  402. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  403. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  404. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  405. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  406. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  407. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  408. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  409. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  410. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  411. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  412. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  413. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  414. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  415. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  416. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  417. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  418. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  419. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  420. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  421. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  422. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  423. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  424. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  425. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  426. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  427. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +2 -0
  428. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  429. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  430. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  431. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +28 -0
  432. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  433. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  434. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  435. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  436. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  437. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +39 -0
  438. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  439. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  440. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  441. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  442. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  443. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  444. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  445. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  446. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  447. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  448. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  449. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  450. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +28 -0
  451. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  452. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  453. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  454. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  455. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  456. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  457. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +50 -0
  458. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  459. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  460. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  461. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  462. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  463. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +28 -0
  464. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  465. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  466. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  467. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  468. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  469. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +53 -0
  470. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  471. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  472. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  473. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  474. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  475. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +28 -0
  476. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  477. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  478. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  479. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  480. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  481. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  482. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  483. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  484. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  485. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  486. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  487. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +20 -0
  488. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  489. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  490. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  491. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  492. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  493. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  494. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  495. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  496. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  497. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  498. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  499. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  500. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  501. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  502. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  503. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  504. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  505. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  506. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +39 -0
  507. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  508. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  509. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  510. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  511. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  512. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  513. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  514. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  515. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  516. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  517. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  518. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +39 -0
  519. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  520. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  521. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  522. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  523. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  524. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +39 -0
  525. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  526. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  527. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  528. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  529. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  530. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +2 -0
  531. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  532. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  533. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +36 -0
  534. package/eval/local/tasks/index.yaml +155 -0
  535. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +5 -0
  536. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  537. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  538. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  539. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +2 -0
  540. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  541. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  542. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  543. package/eval/local/tests/conftest.py +1148 -0
  544. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  545. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  546. package/eval/local/tests/scaffold/test_conftest_helpers.py +534 -0
  547. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  548. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  549. package/eval/local/tests/scaffold/test_logging.py +243 -0
  550. package/eval/local/tests/scaffold/test_manifests.py +132 -0
  551. package/eval/local/tests/scaffold/test_profiles.py +866 -0
  552. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  553. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  554. package/eval/local/tests/scaffold/test_sample_quality.py +211 -0
  555. package/eval/local/tests/scaffold/test_tasks.py +168 -0
  556. package/eval/local/tests/scaffold/test_treatments.py +244 -0
  557. package/eval/local/tests/scaffold/test_utils.py +139 -0
  558. package/eval/local/tests/tasks/test_tasks.py +445 -0
  559. package/eval/local/tests/tasks/test_validation_scripts.py +143 -0
  560. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  561. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  562. package/eval/local/treatments/common/control.yaml +4 -0
  563. package/eval/pyproject.toml +41 -0
  564. package/eval/report-html-config.json +6 -0
  565. package/eval/scaffold/__init__.py +67 -0
  566. package/eval/scaffold/python/__init__.py +95 -0
  567. package/eval/scaffold/python/attribution.py +43 -0
  568. package/eval/scaffold/python/evidence.py +38 -0
  569. package/eval/scaffold/python/external_data_handler.py +18 -0
  570. package/eval/scaffold/python/generic_llm_judge.py +235 -0
  571. package/eval/scaffold/python/judge_config.py +168 -0
  572. package/eval/scaffold/python/llm_judge.py +191 -0
  573. package/eval/scaffold/python/logging.py +705 -0
  574. package/eval/scaffold/python/manifests.py +129 -0
  575. package/eval/scaffold/python/paper_charts.py +25 -0
  576. package/eval/scaffold/python/pass_at_k.py +107 -0
  577. package/eval/scaffold/python/paths.py +56 -0
  578. package/eval/scaffold/python/profiles.py +127 -0
  579. package/eval/scaffold/python/report_outputs.py +1391 -0
  580. package/eval/scaffold/python/sample_quality.py +339 -0
  581. package/eval/scaffold/python/schema.py +39 -0
  582. package/eval/scaffold/python/skill_parser.py +469 -0
  583. package/eval/scaffold/python/tasks.py +330 -0
  584. package/eval/scaffold/python/treatments.py +271 -0
  585. package/eval/scaffold/python/utils.py +366 -0
  586. package/eval/scaffold/python/validation/__init__.py +21 -0
  587. package/eval/scaffold/python/validation/authoring_rubric.py +326 -0
  588. package/eval/scaffold/python/validation/comet_workflow.py +187 -0
  589. package/eval/scaffold/python/validation/core.py +264 -0
  590. package/eval/scaffold/python/validation/dataset.py +337 -0
  591. package/eval/scaffold/python/validation/docker.py +106 -0
  592. package/eval/scaffold/python/validation/evaluator.py +549 -0
  593. package/eval/scaffold/python/validation/generic_rubric.py +169 -0
  594. package/eval/scaffold/python/validation/rubric.py +740 -0
  595. package/eval/scaffold/python/validation/runner.py +237 -0
  596. package/eval/scaffold/python/validation/scripts.py +58 -0
  597. package/eval/scaffold/python/validation/tracing.py +313 -0
  598. package/eval/scaffold/shell/common.sh +126 -0
  599. package/eval/scaffold/shell/docker.sh +482 -0
  600. package/eval/scaffold/shell/run-claude-loop.sh +181 -0
  601. package/eval/scaffold/shell/setup.sh +259 -0
  602. package/eval/simulator-instruction.md +9 -0
  603. package/package.json +29 -2
  604. package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +0 -1
  605. package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +0 -22
package/eval/README.md ADDED
@@ -0,0 +1,538 @@
1
+ # Comet Skill 评估
2
+
3
+ 基于 pytest 的 Skill 评估框架,用于量化衡量 Comet 工作流和任意本地 Skill 的执行质量。
4
+
5
+ ## 目录结构
6
+
7
+ ```text
8
+ eval/
9
+ ├── scaffold/ # 共享 Python 运行器、Docker 辅助、加载器、验证器
10
+ │ └── python/
11
+ │ ├── validation/
12
+ │ │ ├── generic_rubric.py # 通用 rubric(7 维度 + LLM judge)
13
+ │ │ ├── rubric.py # Comet 工作流 rubric(9 维度 + LLM judge)
14
+ │ │ ├── authoring_rubric.py # /comet-any 生成包 rubric(11 维度)
15
+ │ │ └── core.py # 验证器基础工具
16
+ │ ├── generic_llm_judge.py # 通用 LLM-as-judge 模块
17
+ │ ├── llm_judge.py # Comet LLM-as-judge 模块
18
+ │ ├── profiles.py # 评估 profile 注册表
19
+ │ ├── tasks.py # 任务加载器(task.toml 解析)
20
+ │ └── treatments.py # Treatment 加载器
21
+ ├── local/ # 本地评估套件
22
+ │ ├── tasks/ # 任务定义(每个子目录是一个任务)
23
+ │ ├── treatments/ # Treatment 配置(注入哪些 Skill)
24
+ │ ├── tests/ # pytest 测试入口
25
+ │ └── logs/ # 评估结果日志
26
+ └── langsmith/ # LangSmith 评估入口(可选)
27
+ ```
28
+
29
+ ## 环境配置
30
+
31
+ ### 前置依赖
32
+
33
+ - Python 3.11+
34
+ - Docker
35
+ - Claude Code CLI(`claude` 命令可用)
36
+ - `uv`(推荐)或 pip
37
+
38
+ ### 安装
39
+
40
+ ```bash
41
+ cd eval
42
+ uv sync
43
+ ```
44
+
45
+ ### 环境变量
46
+
47
+ 评估运行会先读取当前 shell 的环境变量,也会按需加载 `eval/.env`。录屏或演示时可以不创建 `.env`,或只创建一个完全空的 `.env`,把密钥放在系统环境变量里,避免文件内容出现在画面中。
48
+
49
+ 如需本地文件配置,可复制 `.env.example` 为 `.env` 并填写:
50
+
51
+ ```bash
52
+ cp .env.example .env
53
+ ```
54
+
55
+ > 注意:如果你使用系统环境变量,不要把 `.env.example` 中的 `ANTHROPIC_API_KEY=` 这类空赋值原样保留到 `.env`;空赋值在部分加载路径中可能覆盖已经存在的系统环境变量。
56
+
57
+ | 变量 | 必填 | 说明 |
58
+ | ----------------------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------------- |
59
+ | `ANTHROPIC_API_KEY` | ✅\* | Anthropic API 密钥;也可以由系统环境变量提供 |
60
+ | `BENCH_CC_MODEL` | ❌ | Claude 模型覆盖(默认用 CLI 配置) |
61
+ | `BENCH_SIMULATOR_PROMPT_FILE` | ❌ | 自定义用户模拟器提示词文件(默认 `eval/simulator-instruction.md`) |
62
+ | `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_BASE_URL` / `ANTHROPIC_MODEL` | ❌ | 用 Anthropic 兼容代理时的认证与模型配置;设置 `ANTHROPIC_AUTH_TOKEN` 后可不设置 `ANTHROPIC_API_KEY` |
63
+ | `BENCH_LLM_JUDGE` | ❌ | 设为 `1` 启用 LLM-as-judge 评分 |
64
+ | `BENCH_JUDGE_MODEL` | ❌ | Judge 模型;启用 `BENCH_LLM_JUDGE=1` 时必须显式设置,不能复用主模型 |
65
+ | `BENCH_JUDGE_AUTH_TOKEN` / `BENCH_JUDGE_BASE_URL` | ❌ | Judge 专用 Anthropic 兼容代理认证与 URL;两者都设置时优先通过 Anthropic Messages HTTP 直接调用 judge |
66
+ | `BENCH_JUDGE_API_KEY` | ❌ | Judge 专用 Anthropic API key;如果设置 `BENCH_JUDGE_AUTH_TOKEN`,优先使用 auth token |
67
+ | `LANGSMITH_API_KEY` | ❌ | 仅 LangSmith 套件需要 |
68
+ | `LANGSMITH_PROJECT` / `LANGSMITH_TRACING` | ❌ | LangSmith 套件项目名与追踪开关;Claude Code 插件变量会从这组配置自动派生 |
69
+
70
+ `*` 本地 Claude eval 至少需要 `ANTHROPIC_API_KEY` 或 `ANTHROPIC_AUTH_TOKEN` 之一存在于当前进程环境中。
71
+
72
+ ## 快速开始
73
+
74
+ ### 运行内置任务
75
+
76
+ ```bash
77
+ # 运行单个任务 + treatment
78
+ uv run pytest local/tests/tasks/test_tasks.py --task=generic-skill-smoke --treatment=CONTROL -v
79
+
80
+ # 运行 Comet 工作流任务
81
+ uv run pytest local/tests/tasks/test_tasks.py --task=comet-full-workflow --treatment=COMET_FULL_040_BETA -v
82
+
83
+ # 运行所有任务
84
+ uv run pytest local/tests/tasks/test_tasks.py -v
85
+ ```
86
+
87
+ ### 报告中的去噪口径
88
+
89
+ Eval 报告同时保留 raw set 和 analysis set。Raw set 包含所有 run,方便追查原始 stdout/stderr、events、reports 和 artifacts;analysis set 默认排除明确环境噪声,用于 headline 指标、pass@k/pass^k、成本统计、图表和 verdict。
90
+
91
+ - `included`:可解释实验信号,进入主统计。真实 workflow、model、task 或 validator 失败仍属于这一类。
92
+ - `flagged`:可疑 harness/task 噪声,进入主统计,但报告会提示它可能影响结论。
93
+ - `excluded`:明确环境或运行器噪声,不进入主统计,例如 API timeout、rate limit、认证/网络失败、Docker/container failure 或外层 runner timeout。
94
+
95
+ 如果关键 treatment 的 clean data 不足,报告会输出 `Insufficient clean data` 或 `Inconclusive due to data quality`,而不是给出误导性的胜负结论。
96
+
97
+ ### 评估任意 Skill
98
+
99
+ ```bash
100
+ uv run pytest local/tests/tasks/test_tasks.py \
101
+ --task=generic-skill-smoke \
102
+ --skill-path=/path/to/my-skill \
103
+ --skill-name=my-skill \
104
+ --profile=generic -v
105
+ ```
106
+
107
+ ### 评估 /comet-any 生成的包
108
+
109
+ ```bash
110
+ uv run pytest local/tests/tasks/test_tasks.py \
111
+ --eval-manifest=/path/to/my-skill/comet/eval.yaml -v
112
+ ```
113
+
114
+ ## 容器中的 Claude 实验工作区
115
+
116
+ 每次实验都会先在宿主机创建一个临时隔离目录,然后把它挂载到 Claude Code 容器的 `/workspace`。Claude 的当前工作目录就是 `/workspace`;双 agent 交互模式还会只读挂载 scaffold shell 到 `/opt/scaffold-shell`。
117
+
118
+ 典型结构如下(以 `COMET_FULL_040_BETA` 为例,展示 0.4.0 beta 的 Comet Skill + 完整 dependency snapshot;实际任务产物会随 task/treatment 变化):
119
+
120
+ ```text
121
+ /workspace # Claude Code 的当前工作目录;宿主机临时隔离目录挂载点
122
+ |-- Dockerfile # 当前 task 的 Docker 构建文件,来自 task/environment/
123
+ |-- requirements.txt # Python 依赖文件;仅 task 提供时存在
124
+ |-- package.json # Node 依赖文件;仅 task 提供时存在
125
+ |-- package-lock.json # Node 锁文件;仅 task 提供时存在
126
+ |-- tsconfig.json # TypeScript 配置;仅 task 提供时存在
127
+ |-- CLAUDE.md # 项目级指令;comet-workflow profile 会注入强制 /comet 指令
128
+ |-- .eval-task-prompt.txt # auto_user 模式下的任务提示词临时文件,运行后清理
129
+ |-- .eval-simulator-prompt.txt # auto_user 模式下的用户模拟器提示词临时文件,运行后清理
130
+ |-- .claude # Claude Code 本地配置和 Skill 安装目录
131
+ | |-- CLAUDE.md # Claude 专用项目指令副本
132
+ | |-- settings.json # Claude Code settings;包含 Comet PreToolUse hook
133
+ | `-- skills # 当前 treatment 注入的完整 Skill 包
134
+ | |-- comet # 040 beta 主 /comet Skill;039 baseline 也安装到这个 canonical 名称
135
+ | | |-- SKILL.md # 主 Skill 入口说明
136
+ | | |-- rules # Comet 软规则目录,完整复制自 benchmark snapshot
137
+ | | | `-- comet-phase-guard.md # phase guard 规则;040 beta 示例为中文规则文件
138
+ | | |-- reference # Comet reference 文档目录,供 Skill 运行时读取
139
+ | | | |-- auto-transition.md # 自动阶段推进协议
140
+ | | | |-- comet-yaml-fields.md # .comet.yaml 字段说明
141
+ | | | |-- context-recovery.md # 上下文恢复协议
142
+ | | | |-- debug-gate.md # 异常调试协议
143
+ | | | |-- decision-point.md # 用户决策点协议
144
+ | | | |-- dirty-worktree.md # dirty worktree 处理协议
145
+ | | | |-- file-structure.md # Comet 产物目录约定
146
+ | | | |-- intent-frame.md # 040 beta intent routing 字段说明
147
+ | | | |-- scripts.md # 运行脚本说明
148
+ | | | `-- subagent-dispatch.md # 子代理分发协议
149
+ | | |-- runtime # 040 beta runtime 元数据目录
150
+ | | | `-- classic # classic runtime package metadata
151
+ | | | |-- checks.yaml # comet skill check 的检查定义
152
+ | | | |-- guardrails.yaml # classic runtime guardrail 配置
153
+ | | | `-- skill.yaml # classic runtime Skill metadata
154
+ | | `-- scripts # 040 beta Node 脚本目录;完整复制自 benchmark snapshot
155
+ | | |-- comet-hook-guard.mjs # 040 beta Claude Code PreToolUse hook 入口
156
+ | | |-- comet-archive.mjs # archive 阶段脚本
157
+ | | |-- comet-env.mjs # runtime 环境解析脚本
158
+ | | |-- comet-guard.mjs # phase guard 脚本
159
+ | | |-- comet-handoff.mjs # handoff 写入脚本
160
+ | | |-- comet-intent.mjs # intent routing 脚本
161
+ | | |-- comet-state.mjs # .comet.yaml 状态机脚本
162
+ | | `-- comet-yaml-validate.mjs # .comet.yaml schema 校验脚本
163
+ | |-- comet-open # 040 beta /comet-open 阶段 Skill;完整包复制
164
+ | |-- comet-design # 040 beta /comet-design 阶段 Skill;完整包复制
165
+ | |-- comet-build # 040 beta /comet-build 阶段 Skill;完整包复制
166
+ | |-- comet-verify # 040 beta /comet-verify 阶段 Skill;完整包复制
167
+ | |-- comet-archive # 040 beta /comet-archive 阶段 Skill;完整包复制
168
+ | |-- comet-hotfix # 040 beta /comet-hotfix 工作流 Skill;完整包复制
169
+ | |-- comet-tweak # 040 beta /comet-tweak 工作流 Skill;完整包复制
170
+ | |-- openspec-apply-change # OpenSpec dependency Skill;完整包复制
171
+ | |-- openspec-archive-change # OpenSpec dependency Skill;完整包复制
172
+ | |-- openspec-bulk-archive-change # OpenSpec dependency Skill;完整包复制
173
+ | |-- openspec-continue-change # OpenSpec dependency Skill;完整包复制
174
+ | |-- openspec-explore # OpenSpec dependency Skill;完整包复制
175
+ | |-- openspec-ff-change # OpenSpec dependency Skill;完整包复制
176
+ | |-- openspec-new-change # OpenSpec dependency Skill;完整包复制
177
+ | |-- openspec-onboard # OpenSpec dependency Skill;完整包复制
178
+ | |-- openspec-propose # OpenSpec dependency Skill;完整包复制
179
+ | |-- openspec-sync-specs # OpenSpec dependency Skill;完整包复制
180
+ | |-- openspec-verify-change # OpenSpec dependency Skill;完整包复制
181
+ | |-- brainstorming # Superpowers dependency Skill;带 visual companion 和 scripts
182
+ | | |-- SKILL.md # brainstorming Skill 入口
183
+ | | |-- scripts # brainstorming 辅助脚本目录
184
+ | | `-- visual-companion.md # brainstorming visual companion 说明
185
+ | |-- dispatching-parallel-agents # Superpowers dependency Skill;完整包复制
186
+ | |-- executing-plans # Superpowers dependency Skill;完整包复制
187
+ | |-- finishing-a-development-branch # Superpowers dependency Skill;完整包复制
188
+ | |-- receiving-code-review # Superpowers dependency Skill;完整包复制
189
+ | |-- requesting-code-review # Superpowers dependency Skill;完整包复制
190
+ | |-- subagent-driven-development # Superpowers dependency Skill;带 scripts 和 reviewer prompt
191
+ | | |-- SKILL.md # subagent-driven-development Skill 入口
192
+ | | |-- scripts # subagent workspace/review 辅助脚本目录
193
+ | | `-- task-reviewer-prompt.md # task reviewer prompt 文件
194
+ | |-- systematic-debugging # Superpowers dependency Skill;完整包复制
195
+ | |-- test-driven-development # Superpowers dependency Skill;完整包复制
196
+ | |-- using-git-worktrees # Superpowers dependency Skill;完整包复制
197
+ | |-- verification-before-completion # Superpowers dependency Skill;完整包复制
198
+ | |-- writing-plans # Superpowers dependency Skill;完整包复制
199
+ | `-- writing-skills # Superpowers dependency Skill;带 examples 等支持文件
200
+ | |-- SKILL.md # writing-skills Skill 入口
201
+ | `-- examples # writing-skills 示例目录
202
+ |-- .comet # Comet 项目配置/运行状态目录,由 workflow 创建或更新
203
+ | `-- config.yaml # Comet 项目配置;由 init/update 或 task 环境提供
204
+ |-- openspec # OpenSpec 工作区目录,由 workflow 创建或更新
205
+ | `-- changes # OpenSpec change 产物目录
206
+ |-- docs # repo 文档目录;workflow 可能写入设计/计划/证据
207
+ | `-- superpowers # Superpowers 设计、计划、审查证据目录
208
+ |-- _test_results.json # validation 脚本输出的结构化结果
209
+ `-- <task files and agent artifacts> # task 初始代码和 agent 运行中创建的产物
210
+
211
+ /opt/scaffold-shell # 双 agent loop 模式下只读挂载的 runner shell 脚本目录
212
+ |-- run-claude-loop.sh # subject agent 和 simulator agent 的循环驱动脚本
213
+ |-- docker.sh # Docker build/run 辅助脚本
214
+ |-- setup.sh # workspace setup 辅助脚本
215
+ `-- common.sh # shell 公共函数
216
+ ```
217
+
218
+ 说明:
219
+
220
+ - `Dockerfile`、依赖文件和任务初始代码来自当前 task 的 `environment/`,例如 `stats.py`、`test_stats.py`。
221
+ - `CLAUDE.md` 只在需要项目级指令时写入;`comet-workflow` profile 会写入强制先触发 `/comet` 的 benchmark 指令。
222
+ - `.eval-task-prompt.txt` 和 `.eval-simulator-prompt.txt` 只在 `auto_user` 双 agent 模式运行期间存在,运行结束后会清理。
223
+ - `.claude/settings.json` 会为 Comet baseline 配置 Claude Code `PreToolUse` hook。`COMET_FULL_040_BETA` 指向 `comet-hook-guard.mjs`;`COMET_FULL_039` 指向 `comet-hook-guard.sh`。
224
+ - `.claude/skills/*` 是完整 Skill 包复制,不只是 `SKILL.md`;OpenSpec 和 Superpowers 依赖的 `scripts/`、`examples/`、prompt 文件和其他随包文件都会保留。
225
+ - `COMET_FULL_039` 的目录形状与上面一致,但 `comet` 和 `comet-*` 来自 `039-release/*` 快照,主脚本是 `.sh`:`comet-hook-guard.sh`、`comet-state.sh`、`comet-guard.sh`、`comet-handoff.sh`、`comet-archive.sh`、`comet-yaml-validate.sh`。OpenSpec / Superpowers dependency snapshot 与 040 baseline 相同。
226
+ - `openspec/`、`.comet/`、`docs/superpowers/`、任务代码修改和其他产物由 agent 在运行过程中创建或更新。
227
+ - LangSmith 轨迹追踪由官方 `langsmith-tracing` Claude Code 插件负责(不再使用手写 Stop hook);用户主要配置 `LANGSMITH_*`,`TRACE_TO_LANGSMITH` / `CC_LANGSMITH_*` 会自动派生。启用完整 Claude Code trajectory 时,插件预构建目录会以 `/opt/langsmith-cc-plugin` 只读挂载进容器,详见 `langsmith/README.md`。
228
+ - `/opt/scaffold-shell` 只在双 agent loop 运行时挂载,提供容器内调用 Claude 的循环驱动脚本。
229
+
230
+ ## 定义自己的 Task
231
+
232
+ 每个任务是 `local/tasks/` 下的一个目录,包含三个部分:
233
+
234
+ ```text
235
+ local/tasks/my-task/
236
+ ├── task.toml # 任务配置
237
+ ├── instruction.md # 给 agent 的指令(支持 {run_id} 等模板变量)
238
+ ├── environment/
239
+ │ └── Dockerfile # 验证环境(提供运行时和测试依赖)
240
+ └── validation/
241
+ └── test_my_task.py # 验证脚本(在 Docker 内运行)
242
+ ```
243
+
244
+ ### 1. 编写 `task.toml`
245
+
246
+ ```toml
247
+ [metadata]
248
+ name = "my-task"
249
+ description = "任务描述"
250
+ difficulty = "medium" # easy / medium / hard
251
+ category = "generic" # generic 或 comet
252
+ default_treatments = ["CONTROL"]
253
+
254
+ [environment]
255
+ description = "Docker 环境描述"
256
+ dockerfile = "environment/Dockerfile"
257
+ timeout_sec = 600 # Docker 执行超时(秒)
258
+
259
+ [validation]
260
+ test_scripts = ["test_my_task.py"] # Docker 内运行的验证脚本
261
+ target_artifacts = ["result.md"] # 预期产物(存在性检查)
262
+ timeout = 120 # 验证脚本超时(秒)
263
+
264
+ [evaluation]
265
+ profile = "generic" # 评估 profile
266
+ expected_artifacts = ["result.md"] # rubric 检查的产物
267
+ required_skills = ["my-skill"] # 必须调用的 Skill
268
+ require_skill_invocation = true # 未调用时产生硬失败
269
+
270
+ # 自定义 rubric 标准(传给 LLM judge,可选)
271
+ rubric_criteria = [
272
+ "输出包含错误处理",
273
+ "代码遵循项目命名规范",
274
+ ]
275
+
276
+ [interaction]
277
+ mode = "none" # none(单轮)或 auto_user(多轮模拟)
278
+ max_turns = 12 # 最大轮次
279
+ ```
280
+
281
+ ### 2. 编写 `instruction.md`
282
+
283
+ 这是给 agent 的任务指令,支持 `{run_id}` 模板变量:
284
+
285
+ ```markdown
286
+ 在当前工作区创建一个文件 `result.md`。
287
+
288
+ 要求:
289
+
290
+ - 包含标题 `# My Task Result`
291
+ - 描述你的实现思路
292
+ - 包含至少三个要点
293
+ ```
294
+
295
+ ### 3. 编写验证脚本
296
+
297
+ 验证脚本在 Docker 内运行,结果写入 `_test_results.json`:
298
+
299
+ ```python
300
+ from pathlib import Path
301
+ from scaffold.python.validation.core import write_test_results
302
+
303
+ def main():
304
+ passed = []
305
+ failed = []
306
+
307
+ # 检查产物是否存在
308
+ result = Path("result.md")
309
+ if not result.exists():
310
+ write_test_results({"passed": [], "failed": ["result.md missing"]})
311
+ return
312
+
313
+ text = result.read_text(encoding="utf-8")
314
+
315
+ # 检查内容
316
+ if "# My Task Result" in text:
317
+ passed.append("heading present")
318
+ else:
319
+ failed.append("heading missing")
320
+
321
+ write_test_results({"passed": passed, "failed": failed})
322
+
323
+ if __name__ == "__main__":
324
+ main()
325
+ ```
326
+
327
+ ### 4. 注册任务
328
+
329
+ 在 `local/tasks/index.yaml` 中添加:
330
+
331
+ ```yaml
332
+ tasks:
333
+ - name: my-task
334
+ category: generic
335
+ default_treatments:
336
+ - CONTROL
337
+ description: 我的自定义任务
338
+ ```
339
+
340
+ ## Rubric 评估体系
341
+
342
+ ### 评估 Profile
343
+
344
+ 框架通过 profile 决定使用哪套 rubric:
345
+
346
+ | Profile | 用途 | 维度数 | LLM Judge |
347
+ | ----------------- | ----------------- | ------ | ------------------------- |
348
+ | `generic` | 任意 Skill | 7 | ✅(`BENCH_LLM_JUDGE=1`) |
349
+ | `comet-workflow` | Comet 工作流 | 9 | ✅ |
350
+ | `authoring-skill` | /comet-any 生成包 | 11 | 继承 generic |
351
+
352
+ Comet 类任务(`category = "comet"` 或名称以 `comet-` 开头)自动推断为 `comet-workflow`。
353
+
354
+ ### 通用 Rubric(7 维度)
355
+
356
+ 用于评估任意 Skill 的执行质量:
357
+
358
+ | 维度 | 权重 | 说明 |
359
+ | ------------------------ | ---- | ------------------------------------------------------ |
360
+ | `completion` | 2.0 | 验证脚本通过率 |
361
+ | `skill_invocation` | 1.0 | 必须调用的 Skill 是否被调用(未配置时为 N/A) |
362
+ | `artifact_presence` | 1.0 | 预期产物是否存在(支持 glob,未配置时为 N/A) |
363
+ | `instruction_following` | 1.0 | 是否有约束违反 |
364
+ | `interaction_compliance` | 0.8 | 多轮交互是否在轮次限制内 |
365
+ | `efficiency` | 0.7 | 轮次 ≤ 80、工具调用 ≤ 150、时长 ≤ 600s |
366
+ | `safety_boundary` | 1.2 | 无危险命令(`rm -rf`、`git reset --hard`、`curl\|sh`) |
367
+
368
+ **N/A 维度处理**:当 `required_skills` 或 `expected_artifacts` 未配置时,对应维度标记为 N/A,不参与加权计算,避免虚高的中间分。
369
+
370
+ ### LLM-as-judge(可选)
371
+
372
+ 设置 `BENCH_LLM_JUDGE=1` 启用 LLM 评审。Judge 读取 agent 的 workspace 产物进行定性评分,但必须使用独立裁判配置:至少设置 `BENCH_JUDGE_MODEL`,如需走不同代理或账号,再设置 `BENCH_JUDGE_BASE_URL`、`BENCH_JUDGE_AUTH_TOKEN` 或 `BENCH_JUDGE_API_KEY`。
373
+
374
+ 当配置了 `BENCH_JUDGE_BASE_URL` 和 `BENCH_JUDGE_AUTH_TOKEN` / `BENCH_JUDGE_API_KEY` 时,judge 会优先直接调用 Anthropic Messages HTTP(`/v1/messages`)。没有专用 judge endpoint 时,才回退到宿主机 `claude` CLI,并在子进程里清除继承来的主 `ANTHROPIC_*` provider 设置,再把 `BENCH_JUDGE_*` 映射为自己的 `ANTHROPIC_*` 环境变量。这样可以避免同一个模型既当选手又当裁判,也避免严格代理不兼容 Claude CLI 的额外请求参数。若启用了 `BENCH_LLM_JUDGE=1` 但未设置 `BENCH_JUDGE_MODEL`,报告会输出 `[RUBRIC-JUDGE] status: skipped - BENCH_JUDGE_MODEL is required when BENCH_LLM_JUDGE=1`,不会调用 judge。
375
+
376
+ **通用 judge 的三个标准维度**:
377
+
378
+ | 维度 | 评分标准 |
379
+ | ----------------------- | ------------------------------------------------------- |
380
+ | `task_completion` | 1.0 = 全部完成;0.5 = 部分完成;0.0 = 未完成 |
381
+ | `output_quality` | 1.0 = 结构化、完整、非平凡;0.5 = 浅层;0.0 = 空或 stub |
382
+ | `instruction_adherence` | 1.0 = 完全遵循;0.5 = 轻微偏差;0.0 = 严重违反 |
383
+
384
+ **自定义 rubric 标准**:在 `task.toml` 的 `[evaluation]` 中定义 `rubric_criteria`,这些标准会作为额外维度传给 LLM judge,输出为 `custom_0`、`custom_1` 等。
385
+
386
+ ```toml
387
+ [evaluation]
388
+ rubric_criteria = [
389
+ "函数处理了边界情况(空输入、单元素)",
390
+ "错误信息用户友好且可操作",
391
+ ]
392
+ ```
393
+
394
+ ### Comet Rubric(9 维度)
395
+
396
+ Comet 工作流专用,输出 9 个维度分数和一个 `weighted_score`。每个维度由若干二值检查组成,维度分数为 `通过检查数 / 总检查数`;最终 `weighted_score` 按下表权重加权平均。
397
+
398
+ | 维度 | 权重 | 评分信号 |
399
+ | --------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
400
+ | `completion` | 2.0 | 当前 task 的基础验证脚本通过率,例如功能修复、测试文件、工作流产物等 task-specific checks |
401
+ | `main_flow` | 1.5 | workflow 阶段证据是否齐全;`full` 检查 open → design → build → verify → archive,`hotfix` / `tweak` 检查 open → build → verify → archive |
402
+ | `gate_guard` | 1.5 | 是否使用 Comet 阶段守卫和状态推进能力,包括 `comet-guard`、状态 transition、`--apply` |
403
+ | `artifact_quality` | 1.2 | OpenSpec / Superpowers / 测试产物是否有实质内容;`full` 要求 proposal、深度 design、足够 tasks 和测试断言,`hotfix` / `tweak` 使用预设路径的轻量产物口径 |
404
+ | `skill_invocation` | 1.0 | 是否真实调用主 `comet`、嵌套 Comet 阶段 Skill、OpenSpec 依赖 Skill、Superpowers 依赖 Skill,并保持入口先于子 Skill |
405
+ | `spec_drift` | 1.0 | 如果写入 delta spec,是否在归档前通过 OpenSpec 同步/归档语义合并;未涉及 delta spec 时记为 N/A 式满分 |
406
+ | `decision_point_compliance` | 1.0 | 到达阻塞决策点时是否先询问用户;`full` 会检查 build/verify 等状态决策,`hotfix` / `tweak` 只检查预设路径中的升级、验证失败、归档重开等阻塞决策 |
407
+ | `recovery_resilience` | 1.0 | 是否保留可恢复状态,例如 `.comet/checkpoint.json`、`run-state.json`、`state-events.jsonl`、`trajectory.jsonl`、handoff/context、干净 pending 状态 |
408
+ | `efficiency` | 0.8 | 运行成本是否在阈值内:turns ≤ 80、工具调用 ≤ 150、时长 ≤ 600s |
409
+
410
+ 额外规则:
411
+
412
+ - `skills_invoked` 只来自 Claude Code 事件中的真实 Skill 工具调用和 Skill 文件加载,不根据产物反推。
413
+ - `opsx:*` 旧 OpenSpec Skill 名会归一化为 `openspec-*`,避免同一调用在报告中重复出现。
414
+ - 如果 `comet-workflow` 未调用主 `comet`,会产生硬失败;如果调用了主 `comet` 但没有调用嵌套 Comet / OpenSpec / Superpowers 依赖 Skill,也会产生 workflow contract failure。
415
+ - `weighted_score` 只聚合 9 个 Comet rubric 维度;LLM judge 启用后会额外输出 `[RUBRIC-JUDGE]` 信息,不替代规则分。
416
+
417
+ ## Treatment 配置
418
+
419
+ Treatment 定义注入哪些 Skill。位于 `local/treatments/`:
420
+
421
+ ```yaml
422
+ # local/treatments/common/control.yaml
423
+ CONTROL:
424
+ description: '无 Skill 基线'
425
+ skills: []
426
+
427
+ # local/treatments/comet/comet_full_040_beta.yaml
428
+ COMET_FULL_040_BETA:
429
+ description: '完整 Comet 工作流'
430
+ skills:
431
+ - name: comet
432
+ skill: 040-beta/comet
433
+ variant: all
434
+ base: benchmarks
435
+ - name: comet-open
436
+ skill: 040-beta/comet-open
437
+ variant: all
438
+ base: benchmarks
439
+ ```
440
+
441
+ ## 运行测试
442
+
443
+ ```bash
444
+ # 仅运行 scaffold 单元测试(快速,不需要 Docker)
445
+ cd eval
446
+ uv run pytest local/tests/scaffold/ -v
447
+
448
+ # 运行完整任务测试(需要 Docker + Claude CLI)
449
+ uv run pytest local/tests/tasks/test_tasks.py -v
450
+
451
+ # 重复运行 N 次(统计通过率分布)
452
+ uv run pytest local/tests/tasks/test_tasks.py --count=3 -v
453
+
454
+ # 并行运行
455
+ uv run pytest local/tests/tasks/test_tasks.py -n 4 -v
456
+ ```
457
+
458
+ ## 核心指标
459
+
460
+ ### pass@k — 能力上限
461
+
462
+ > 给定 k 次独立尝试,**至少有一次成功**的概率。
463
+
464
+ 使用 HumanEval 的无偏估计器:
465
+
466
+ ```
467
+ pass@k = 1 - C(n-c, k) / C(n, k)
468
+ ```
469
+
470
+ 其中 `n` = 总运行次数,`c` = 成功次数。当 `n - c < k` 时(不可能连续抽到 k 次失败),`pass@k = 1.0`。
471
+
472
+ **解读**:pass@k 衡量"agent 能不能做到"。pass@1 就是单次通过率;pass@5 接近 1.0 意味着多次尝试中几乎总能找到一个成功的。
473
+
474
+ ### pass^k — 可靠性下限
475
+
476
+ > 给定 k 次独立尝试,**全部成功**的概率。
477
+
478
+ ```
479
+ pass^k = 1.0 (if c == n, 即所有运行都通过)
480
+ pass^k = 0.0 (otherwise, 观测样本下限)
481
+ ```
482
+
483
+ **解读**:pass^k 衡量"agent 每次都能做到吗"。只有当所有运行都通过时才为 1.0,否则为 0.0。这是可靠性的一致性下界。
484
+
485
+ ### pass@k − pass^k — 不稳定性间隙
486
+
487
+ 两者的差值量化了**不稳定性**:高 pass@k + 低 pass^k = "能做到,但不能指望每次都做到"。对于用户反复运行的工作流 Skill,这个间隙是关键质量信号。
488
+
489
+ ### 示例
490
+
491
+ | Treatment | pass@1 | pass@5 | pass^1 | pass^5 | pass/fail |
492
+ | ------------------- | ------ | ------ | ------ | ------ | --------- |
493
+ | CONTROL | 0.40 | 0.90 | 0 | 0 | 2/5 |
494
+ | COMET_FULL_040_BETA | 0.80 | 1.00 | 0 | 0 | 4/5 |
495
+
496
+ - CONTROL:40% 单次通过率,5 次尝试有 90% 概率成功至少一次,但无法保证每次都成功
497
+ - COMET_FULL_040_BETA:80% 单次通过率,5 次尝试几乎必然成功,但仍有波动
498
+
499
+ ### 运行多次获取 pass@k
500
+
501
+ ```bash
502
+ # 重复运行 5 次以获得 pass@5 / pass^5
503
+ uv run pytest local/tests/tasks/test_tasks.py --count=5 -v
504
+ ```
505
+
506
+ 报告自动生成在 `comparison_report.md` 中,包含 pass@k / pass^k 表格。
507
+
508
+ ## 查看结果
509
+
510
+ 评估结果写入 `local/logs/experiments/`,包含:
511
+
512
+ - `summary.md` — 汇总表(各 treatment 的维度分数)
513
+ - `comparison_report.md` — 基线对比报告(含 pass@k / pass^k 指标)
514
+ - 每次运行的详细日志和产物
515
+
516
+ 默认输出 Markdown,可通过 `--report-config` 或 `COMET_EVAL_REPORT_CONFIG` 启用 HTML:
517
+
518
+ ```json
519
+ {
520
+ "report_outputs": {
521
+ "markdown": true,
522
+ "html": true
523
+ }
524
+ }
525
+ ```
526
+
527
+ ## CLI 参数速查
528
+
529
+ | 参数 | 说明 |
530
+ | ------------------------ | ------------------------------ |
531
+ | `--task=<name>` | 指定任务 |
532
+ | `--treatment=<name>` | 指定 treatment(逗号分隔多个) |
533
+ | `--profile=<name>` | 覆盖评估 profile |
534
+ | `--skill-path=<path>` | 注入本地 Skill 路径 |
535
+ | `--skill-name=<name>` | 注入的 Skill 名称 |
536
+ | `--count=<n>` | 重复运行次数 |
537
+ | `--eval-manifest=<path>` | 使用生成的 eval.yaml |
538
+ | `--report-config=<path>` | 报告输出配置 |
@@ -0,0 +1,16 @@
1
+ ANTHROPIC_API_KEY=
2
+ LANGSMITH_API_KEY=
3
+ LANGSMITH_TRACING=true
4
+ LANGSMITH_ENDPOINT=https://api.smith.langchain.com
5
+ LANGSMITH_PROJECT=comet-skill-eval
6
+ # The Claude Code plugin variables (TRACE_TO_LANGSMITH and CC_LANGSMITH_*) are
7
+ # derived from these LANGSMITH_* settings by the eval suite.
8
+
9
+ # Optional: name the experiment (project) per treatment for CONTROL vs skill comparison.
10
+ # LANGSMITH_EXPERIMENT=COMET_FULL_040_BETA
11
+
12
+ # Optional trajectory tracing via the official langsmith-tracing plugin.
13
+ # When LANGSMITH_TRACING=true, the suite auto-builds the plugin into
14
+ # eval/.cache/langsmith-cc-plugin via node:20; unset disables tracing only.
15
+ # CC_LANGSMITH_PLUGIN_DIR=/abs/path/to/comet/eval/.cache/langsmith-cc-plugin
16
+ # CC_LANGSMITH_PLUGIN_AUTO_BUILD=true
@@ -0,0 +1,93 @@
1
+ # LangSmith 评估套件
2
+
3
+ 这个套件复用 local 的任务集,并把每次 `(task, treatment)` 运行同步到 LangSmith:
4
+
5
+ - 每个任务是一个 dataset example(`inputs` = 任务/treatment,`reference_outputs` = 预期产物 / 必需 Skill / rubric 判据)。
6
+ - 每个 treatment 是一个 experiment;`CONTROL` 与注入 Skill 的 treatment 可在实验对比页并排看。
7
+ - 每个 run 记录 `outputs`(轮次、工具调用、耗时、token、成本、调用的 Skill)和 feedback(每个 rubric 维度分 + `checks_pass_rate`)。
8
+ - 可选:Claude Code 的完整轨迹(trajectory)通过官方 `langsmith-tracing` 插件嵌套在同一个 run 下。
9
+
10
+ 默认复用:
11
+
12
+ - `../local/tasks`
13
+ - `../local/treatments`
14
+ - `../local/skills`
15
+
16
+ 报告和产物写入:
17
+
18
+ ```text
19
+ logs/experiments/
20
+ ```
21
+
22
+ ## 安装
23
+
24
+ ```bash
25
+ cd eval
26
+ uv sync --extra langsmith
27
+ ```
28
+
29
+ ## 运行
30
+
31
+ 结果上报(rubric + treatment 对比)只需要 `LANGSMITH_API_KEY`。推荐在 `eval/.env` 或 `eval/langsmith/.env` 中设置:
32
+
33
+ ```bash
34
+ LANGSMITH_API_KEY=lsv2_pt_...
35
+ LANGSMITH_PROJECT=comet-skill-eval
36
+ LANGSMITH_TRACING=true
37
+ ```
38
+
39
+ Comet 会从这组 `LANGSMITH_*` 配置自动派生 Claude Code 官方插件需要的 `TRACE_TO_LANGSMITH`、`CC_LANGSMITH_API_KEY` 和 `CC_LANGSMITH_PROJECT`。只有需要覆盖插件行为时,才需要显式设置这些 `CC_*` / `TRACE_TO_LANGSMITH` 变量。
40
+
41
+ 从 `eval/` 目录运行:
42
+
43
+ ```bash
44
+ # 一个 treatment = 一个 experiment;用 LANGSMITH_EXPERIMENT 命名便于对比
45
+ LANGSMITH_EXPERIMENT=COMET_FULL_040_BETA \
46
+ uv run pytest langsmith/tests/tasks/test_tasks.py \
47
+ --task=comet-fix-median --treatment=COMET_FULL_040_BETA -v
48
+
49
+ # 再跑 CONTROL 作为对照
50
+ LANGSMITH_EXPERIMENT=CONTROL \
51
+ uv run pytest langsmith/tests/tasks/test_tasks.py \
52
+ --task=comet-fix-median --treatment=CONTROL -v
53
+ ```
54
+
55
+ 生成 Skill manifest 示例:
56
+
57
+ ```bash
58
+ uv run pytest langsmith/tests/tasks/test_tasks.py \
59
+ --eval-manifest=/path/to/my-skill/comet/eval.yaml -v
60
+ ```
61
+
62
+ ## 轨迹追踪(可选,官方 Claude Code 插件)
63
+
64
+ 轨迹追踪用官方 [`langsmith-tracing`](https://github.com/langchain-ai/langsmith-claude-code-plugins) 插件,容器内以 headless(`claude -p`)方式启用。默认情况下,LangSmith suite 会在首次运行时用 `node:20` 一次性构建插件到 `eval/.cache/langsmith-cc-plugin`,后续运行复用这个缓存目录并挂载到任务容器的 `/opt/langsmith-cc-plugin`。
65
+
66
+ 因为 eval 在 Linux 容器里运行,不要在 Windows 宿主机直接 `pnpm build` 后挂载,避免跨平台 `node_modules` 失效。你通常只需要设置:
67
+
68
+ ```bash
69
+ LANGSMITH_TRACING=true
70
+ ```
71
+
72
+ 如果要提前手动构建缓存,可以从 `eval/` 目录运行:
73
+
74
+ ```bash
75
+ docker run --rm -v "$PWD/.cache:/out" node:20 sh -c \
76
+ "cd /tmp && git clone https://github.com/langchain-ai/langsmith-claude-code-plugins && cd langsmith-claude-code-plugins && corepack enable && pnpm install && pnpm build && cp -r . /out/langsmith-cc-plugin"
77
+ ```
78
+
79
+ PowerShell 中可用 `${PWD}`:
80
+
81
+ ```powershell
82
+ docker run --rm -v "${PWD}\.cache:/out" node:20 sh -c "cd /tmp && git clone https://github.com/langchain-ai/langsmith-claude-code-plugins && cd langsmith-claude-code-plugins && corepack enable && pnpm install && pnpm build && cp -r . /out/langsmith-cc-plugin"
83
+ ```
84
+
85
+ 如果要覆盖默认缓存目录,可以把构建好的插件目录显式指给评估(宿主机路径):
86
+
87
+ ```bash
88
+ export CC_LANGSMITH_PLUGIN_DIR=/abs/path/to/comet/eval/.cache/langsmith-cc-plugin
89
+ ```
90
+
91
+ - 设置后,插件目录会以 `/opt/langsmith-cc-plugin` 只读挂载进容器,`claude` 加 `--plugin-dir` 启用;轨迹通过自动派生的 Claude Code 插件配置和 `CC_LANGSMITH_PARENT_DOTTED_ORDER` 嵌套在对应 pytest run 下。
92
+ - 未设置时,轨迹追踪自动跳过(不报错),rubric 与 treatment 对比照常上报。
93
+ - 如果不希望 suite 自动构建插件,设置 `CC_LANGSMITH_PLUGIN_AUTO_BUILD=false`。
@@ -0,0 +1,5 @@
1
+ # LangSmith Skills
2
+
3
+ 这个套件当前通过 `BENCH_SKILLS_DIR` 复用 `../../local/skills`。
4
+
5
+ 如果实验需要 LangSmith 专用的 Skill 变体,可以放在这里。
@@ -0,0 +1,5 @@
1
+ # LangSmith Tasks
2
+
3
+ 这个套件当前通过 `BENCH_TASKS_DIR` 复用 `../../local/tasks`。
4
+
5
+ 如果需要不同的任务集,可以在这里添加 LangSmith 专用任务,然后更新 `tests/conftest.py`,让 `BENCH_TASKS_DIR` 指向该目录。