dsh-aris-panel 0.1.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 (442) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/README_CN.md +87 -0
  4. package/dsh/checkout.patch.yml +38 -0
  5. package/dsh/client.js +634 -0
  6. package/dsh/cordis.patch.yml +44 -0
  7. package/dsh/index.mjs +76 -0
  8. package/dsh/run-status.mjs +182 -0
  9. package/dsh/scope-limits.mjs +50 -0
  10. package/dsh/workbench.mjs +291 -0
  11. package/mcp-servers/claude-review/README.md +93 -0
  12. package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
  13. package/mcp-servers/claude-review/server.py +718 -0
  14. package/mcp-servers/codex-image2/README.md +65 -0
  15. package/mcp-servers/codex-image2/server.py +893 -0
  16. package/mcp-servers/feishu-bridge/requirements.txt +1 -0
  17. package/mcp-servers/feishu-bridge/server.py +240 -0
  18. package/mcp-servers/gemini-review/README.md +171 -0
  19. package/mcp-servers/gemini-review/server.py +1856 -0
  20. package/mcp-servers/llm-chat/requirements.txt +1 -0
  21. package/mcp-servers/llm-chat/server.py +664 -0
  22. package/mcp-servers/manual-review/README.md +133 -0
  23. package/mcp-servers/manual-review/server.py +910 -0
  24. package/mcp-servers/manual-review/ui.html +279 -0
  25. package/mcp-servers/minimax-chat/requirements.txt +1 -0
  26. package/mcp-servers/minimax-chat/server.py +381 -0
  27. package/package.json +51 -0
  28. package/skills/ablation-planner/SKILL.md +123 -0
  29. package/skills/alphaxiv/SKILL.md +196 -0
  30. package/skills/analyze-results/SKILL.md +46 -0
  31. package/skills/arxiv/SKILL.md +248 -0
  32. package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
  33. package/skills/auto-review-loop/SKILL.md +1137 -0
  34. package/skills/auto-review-loop-llm/SKILL.md +259 -0
  35. package/skills/auto-review-loop-minimax/SKILL.md +302 -0
  36. package/skills/citation-audit/SKILL.md +502 -0
  37. package/skills/claims-drafting/SKILL.md +227 -0
  38. package/skills/comm-lit-review/SKILL.md +297 -0
  39. package/skills/deepxiv/SKILL.md +263 -0
  40. package/skills/dse-loop/SKILL.md +296 -0
  41. package/skills/embodiment-description/SKILL.md +129 -0
  42. package/skills/exa-search/SKILL.md +205 -0
  43. package/skills/experiment-audit/SKILL.md +311 -0
  44. package/skills/experiment-bridge/SKILL.md +376 -0
  45. package/skills/experiment-plan/SKILL.md +249 -0
  46. package/skills/experiment-queue/SKILL.md +431 -0
  47. package/skills/experiment-queue/scripts/build_manifest.py +142 -0
  48. package/skills/experiment-queue/scripts/queue_manager.py +433 -0
  49. package/skills/feishu-notify/SKILL.md +156 -0
  50. package/skills/figure-description/SKILL.md +138 -0
  51. package/skills/figure-spec/SKILL.md +262 -0
  52. package/skills/figure-spec/scripts/figure_renderer.py +799 -0
  53. package/skills/formula-derivation/SKILL.md +280 -0
  54. package/skills/gemini-search/SKILL.md +231 -0
  55. package/skills/grant-proposal/SKILL.md +698 -0
  56. package/skills/idea-creator/SKILL.md +542 -0
  57. package/skills/idea-discovery/SKILL.md +521 -0
  58. package/skills/idea-discovery-robot/SKILL.md +363 -0
  59. package/skills/integrity-forensics/SKILL.md +284 -0
  60. package/skills/interview-cheatsheet/SKILL.md +245 -0
  61. package/skills/invention-structuring/SKILL.md +188 -0
  62. package/skills/jurisdiction-format/SKILL.md +192 -0
  63. package/skills/kill-argument/SKILL.md +437 -0
  64. package/skills/mermaid-diagram/SKILL.md +419 -0
  65. package/skills/meta-apply/SKILL.md +141 -0
  66. package/skills/meta-optimize/SKILL.md +437 -0
  67. package/skills/monitor-experiment/SKILL.md +140 -0
  68. package/skills/novelty-check/SKILL.md +101 -0
  69. package/skills/openalex/SKILL.md +237 -0
  70. package/skills/overleaf-sync/SKILL.md +220 -0
  71. package/skills/paper-claim-audit/SKILL.md +348 -0
  72. package/skills/paper-compile/SKILL.md +266 -0
  73. package/skills/paper-figure/SKILL.md +312 -0
  74. package/skills/paper-illustration/SKILL.md +736 -0
  75. package/skills/paper-illustration-image2/SKILL.md +391 -0
  76. package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  77. package/skills/paper-plan/SKILL.md +386 -0
  78. package/skills/paper-poster/SKILL.md +19 -0
  79. package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  80. package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  81. package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  82. package/skills/paper-poster-html/NOTICE.md +57 -0
  83. package/skills/paper-poster-html/SKILL.md +323 -0
  84. package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  85. package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  86. package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  87. package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  88. package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  89. package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  90. package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  91. package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  92. package/skills/paper-poster-html/scripts/asset_check.py +897 -0
  93. package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  94. package/skills/paper-poster-html/scripts/poster_check.py +251 -0
  95. package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  96. package/skills/paper-poster-html/scripts/render_preview.py +217 -0
  97. package/skills/paper-poster-html/scripts/run_gates.py +556 -0
  98. package/skills/paper-poster-html/scripts/style_check.py +1324 -0
  99. package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  100. package/skills/paper-poster-html/templates/README.md +170 -0
  101. package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  102. package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  103. package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  104. package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  105. package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  106. package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  107. package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  108. package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  109. package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  110. package/skills/paper-slides/SKILL.md +635 -0
  111. package/skills/paper-talk/SKILL.md +381 -0
  112. package/skills/paper-write/SKILL.md +604 -0
  113. package/skills/paper-write/templates/IEEEtran.bst +2409 -0
  114. package/skills/paper-write/templates/IEEEtran.cls +6347 -0
  115. package/skills/paper-write/templates/iclr2026.tex +84 -0
  116. package/skills/paper-write/templates/icml2025.tex +87 -0
  117. package/skills/paper-write/templates/ieee_conference.tex +89 -0
  118. package/skills/paper-write/templates/ieee_journal.tex +93 -0
  119. package/skills/paper-write/templates/math_commands.tex +48 -0
  120. package/skills/paper-write/templates/neurips2025.tex +80 -0
  121. package/skills/paper-writing/SKILL.md +916 -0
  122. package/skills/patent-novelty-check/SKILL.md +153 -0
  123. package/skills/patent-pipeline/SKILL.md +344 -0
  124. package/skills/patent-review/SKILL.md +203 -0
  125. package/skills/pixel-art/SKILL.md +137 -0
  126. package/skills/prior-art-search/SKILL.md +146 -0
  127. package/skills/proof-checker/SKILL.md +866 -0
  128. package/skills/proof-orchestrator/NOTICE.md +24 -0
  129. package/skills/proof-orchestrator/SKILL.md +254 -0
  130. package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
  131. package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
  132. package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
  133. package/skills/proof-orchestrator/references/notation-audit.md +135 -0
  134. package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  135. package/skills/proof-orchestrator/references/stress-tests.md +38 -0
  136. package/skills/proof-writer/SKILL.md +223 -0
  137. package/skills/qzcli/SKILL.md +324 -0
  138. package/skills/rebuttal/SKILL.md +376 -0
  139. package/skills/render-html/SKILL.md +316 -0
  140. package/skills/render-html/scripts/render_html.py +1006 -0
  141. package/skills/render-html/scripts/templates/academic.html +703 -0
  142. package/skills/render-html/scripts/templates/dashboard.html +333 -0
  143. package/skills/research-lit/SKILL.md +756 -0
  144. package/skills/research-pipeline/SKILL.md +384 -0
  145. package/skills/research-refine/SKILL.md +770 -0
  146. package/skills/research-refine-pipeline/SKILL.md +186 -0
  147. package/skills/research-review/SKILL.md +198 -0
  148. package/skills/research-wiki/SKILL.md +461 -0
  149. package/skills/resubmit-pipeline/SKILL.md +447 -0
  150. package/skills/result-to-claim/SKILL.md +311 -0
  151. package/skills/run-experiment/SKILL.md +313 -0
  152. package/skills/semantic-scholar/SKILL.md +236 -0
  153. package/skills/serverless-modal/SKILL.md +335 -0
  154. package/skills/shared-references/acceptance-gate.md +324 -0
  155. package/skills/shared-references/assurance-contract.md +248 -0
  156. package/skills/shared-references/capture-antipatterns.md +78 -0
  157. package/skills/shared-references/citation-discipline.md +583 -0
  158. package/skills/shared-references/compute-env-contract.md +163 -0
  159. package/skills/shared-references/effort-contract.md +183 -0
  160. package/skills/shared-references/evidence-precheck.md +65 -0
  161. package/skills/shared-references/experiment-integrity.md +49 -0
  162. package/skills/shared-references/external-cadence.md +326 -0
  163. package/skills/shared-references/fan-out-pattern.md +366 -0
  164. package/skills/shared-references/injection-hygiene.md +127 -0
  165. package/skills/shared-references/integration-contract.md +461 -0
  166. package/skills/shared-references/output-composition.md +93 -0
  167. package/skills/shared-references/output-language.md +45 -0
  168. package/skills/shared-references/output-manifest.md +49 -0
  169. package/skills/shared-references/output-versioning.md +111 -0
  170. package/skills/shared-references/patent-format-cn.md +199 -0
  171. package/skills/shared-references/patent-format-ep.md +173 -0
  172. package/skills/shared-references/patent-format-us.md +161 -0
  173. package/skills/shared-references/patent-writing-principles.md +197 -0
  174. package/skills/shared-references/prior-art-databases.md +141 -0
  175. package/skills/shared-references/resumable-runs.md +109 -0
  176. package/skills/shared-references/review-scope-limits.md +81 -0
  177. package/skills/shared-references/review-tracing.md +391 -0
  178. package/skills/shared-references/reviewer-independence.md +79 -0
  179. package/skills/shared-references/reviewer-routing.md +852 -0
  180. package/skills/shared-references/skill-governance.md +104 -0
  181. package/skills/shared-references/taste-calibration.md +85 -0
  182. package/skills/shared-references/venue-checklists.md +114 -0
  183. package/skills/shared-references/wiki-helper-resolution.md +134 -0
  184. package/skills/shared-references/writing-principles.md +525 -0
  185. package/skills/skills-codex/README.md +102 -0
  186. package/skills/skills-codex/README_CN.md +100 -0
  187. package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
  188. package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
  189. package/skills/skills-codex/analyze-results/SKILL.md +45 -0
  190. package/skills/skills-codex/arxiv/SKILL.md +210 -0
  191. package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
  192. package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
  193. package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
  194. package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
  195. package/skills/skills-codex/citation-audit/SKILL.md +504 -0
  196. package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
  197. package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
  198. package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
  199. package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
  200. package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
  201. package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
  202. package/skills/skills-codex/deepxiv/SKILL.md +142 -0
  203. package/skills/skills-codex/dse-loop/SKILL.md +285 -0
  204. package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
  205. package/skills/skills-codex/exa-search/SKILL.md +192 -0
  206. package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
  207. package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
  208. package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
  209. package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
  210. package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
  211. package/skills/skills-codex/figure-description/SKILL.md +138 -0
  212. package/skills/skills-codex/figure-spec/SKILL.md +252 -0
  213. package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
  214. package/skills/skills-codex/gemini-search/SKILL.md +205 -0
  215. package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
  216. package/skills/skills-codex/idea-creator/SKILL.md +405 -0
  217. package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
  218. package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
  219. package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
  220. package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
  221. package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
  222. package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
  223. package/skills/skills-codex/kill-argument/SKILL.md +403 -0
  224. package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
  225. package/skills/skills-codex/meta-apply/SKILL.md +154 -0
  226. package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
  227. package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
  228. package/skills/skills-codex/novelty-check/SKILL.md +89 -0
  229. package/skills/skills-codex/openalex/SKILL.md +228 -0
  230. package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
  231. package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
  232. package/skills/skills-codex/paper-compile/SKILL.md +253 -0
  233. package/skills/skills-codex/paper-figure/SKILL.md +311 -0
  234. package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
  235. package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
  236. package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  237. package/skills/skills-codex/paper-plan/SKILL.md +278 -0
  238. package/skills/skills-codex/paper-poster/SKILL.md +19 -0
  239. package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
  240. package/skills/skills-codex/paper-slides/SKILL.md +571 -0
  241. package/skills/skills-codex/paper-talk/SKILL.md +381 -0
  242. package/skills/skills-codex/paper-write/SKILL.md +411 -0
  243. package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
  244. package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
  245. package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
  246. package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
  247. package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
  248. package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
  249. package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
  250. package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
  251. package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
  252. package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
  253. package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
  254. package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
  255. package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
  256. package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
  257. package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
  258. package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
  259. package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
  260. package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
  261. package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
  262. package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
  263. package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
  264. package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
  265. package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
  266. package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
  267. package/skills/skills-codex/paper-writing/SKILL.md +731 -0
  268. package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
  269. package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
  270. package/skills/skills-codex/patent-review/SKILL.md +202 -0
  271. package/skills/skills-codex/pixel-art/SKILL.md +139 -0
  272. package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
  273. package/skills/skills-codex/proof-checker/SKILL.md +554 -0
  274. package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
  275. package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
  276. package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
  277. package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
  278. package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
  279. package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  280. package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
  281. package/skills/skills-codex/proof-writer/SKILL.md +222 -0
  282. package/skills/skills-codex/qzcli/SKILL.md +324 -0
  283. package/skills/skills-codex/rebuttal/SKILL.md +305 -0
  284. package/skills/skills-codex/render-html/SKILL.md +305 -0
  285. package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
  286. package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
  287. package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
  288. package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
  289. package/skills/skills-codex/research-lit/SKILL.md +464 -0
  290. package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
  291. package/skills/skills-codex/research-refine/SKILL.md +721 -0
  292. package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
  293. package/skills/skills-codex/research-review/SKILL.md +135 -0
  294. package/skills/skills-codex/research-wiki/SKILL.md +421 -0
  295. package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
  296. package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
  297. package/skills/skills-codex/run-experiment/SKILL.md +236 -0
  298. package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
  299. package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
  300. package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
  301. package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
  302. package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
  303. package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
  304. package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
  305. package/skills/skills-codex/shared-references/effort-contract.md +143 -0
  306. package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
  307. package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
  308. package/skills/skills-codex/shared-references/external-cadence.md +334 -0
  309. package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
  310. package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
  311. package/skills/skills-codex/shared-references/integration-contract.md +372 -0
  312. package/skills/skills-codex/shared-references/output-composition.md +98 -0
  313. package/skills/skills-codex/shared-references/output-language.md +45 -0
  314. package/skills/skills-codex/shared-references/output-manifest.md +40 -0
  315. package/skills/skills-codex/shared-references/output-versioning.md +111 -0
  316. package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
  317. package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
  318. package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
  319. package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
  320. package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
  321. package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
  322. package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
  323. package/skills/skills-codex/shared-references/review-tracing.md +144 -0
  324. package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
  325. package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
  326. package/skills/skills-codex/shared-references/skill-governance.md +119 -0
  327. package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
  328. package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
  329. package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
  330. package/skills/skills-codex/shared-references/writing-principles.md +525 -0
  331. package/skills/skills-codex/slides-polish/SKILL.md +563 -0
  332. package/skills/skills-codex/specification-writing/SKILL.md +211 -0
  333. package/skills/skills-codex/system-profile/SKILL.md +103 -0
  334. package/skills/skills-codex/training-check/SKILL.md +83 -0
  335. package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
  336. package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
  337. package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
  338. package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
  339. package/skills/skills-codex-claude-review/README.md +79 -0
  340. package/skills/skills-codex-claude-review/README_CN.md +78 -0
  341. package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
  342. package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
  343. package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
  344. package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
  345. package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
  346. package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
  347. package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
  348. package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
  349. package/skills/skills-codex-gemini-review/README.md +176 -0
  350. package/skills/skills-codex-gemini-review/README_CN.md +175 -0
  351. package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
  352. package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
  353. package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
  354. package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
  355. package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
  356. package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
  357. package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
  358. package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
  359. package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
  360. package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
  361. package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
  362. package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
  363. package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
  364. package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
  365. package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
  366. package/skills/slides-polish/SKILL.md +565 -0
  367. package/skills/specification-writing/SKILL.md +211 -0
  368. package/skills/system-profile/SKILL.md +103 -0
  369. package/skills/training-check/SKILL.md +132 -0
  370. package/skills/vast-gpu/SKILL.md +394 -0
  371. package/skills/web-debug-search/SKILL.md +334 -0
  372. package/skills/wiki-enrich/SKILL.md +257 -0
  373. package/skills/writing-systems-papers/SKILL.md +184 -0
  374. package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
  375. package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
  376. package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
  377. package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
  378. package/templates/FINDINGS_TEMPLATE.md +52 -0
  379. package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
  380. package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
  381. package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
  382. package/templates/MANIFEST_TEMPLATE.md +7 -0
  383. package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
  384. package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
  385. package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
  386. package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
  387. package/templates/README.md +57 -0
  388. package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
  389. package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
  390. package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
  391. package/templates/claude-hooks/corpus_write_guard.json +16 -0
  392. package/templates/claude-hooks/corpus_write_guard.py +85 -0
  393. package/templates/claude-hooks/meta_logging.json +74 -0
  394. package/templates/gitignore-trace.txt +3 -0
  395. package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
  396. package/tools/arxiv_fetch.py +311 -0
  397. package/tools/capture_filter.py +126 -0
  398. package/tools/check_skills_inventory.py +273 -0
  399. package/tools/convert_skills_to_llm_chat.py +282 -0
  400. package/tools/copilot_native_evidence.py +818 -0
  401. package/tools/deepxiv_fetch.py +213 -0
  402. package/tools/evidence_check.py +212 -0
  403. package/tools/exa_search.py +425 -0
  404. package/tools/experiment_queue/README.md +118 -0
  405. package/tools/experiment_queue/build_manifest.py +44 -0
  406. package/tools/experiment_queue/queue_manager.py +44 -0
  407. package/tools/extract_paper_style.py +560 -0
  408. package/tools/figure_renderer.py +69 -0
  409. package/tools/forensics_gate.py +669 -0
  410. package/tools/generate_codex_claude_review_overrides.py +299 -0
  411. package/tools/idea_discovery_gate.py +256 -0
  412. package/tools/install_aris.ps1 +1372 -0
  413. package/tools/install_aris.sh +1370 -0
  414. package/tools/install_aris_codex.sh +1023 -0
  415. package/tools/install_aris_copilot.sh +1052 -0
  416. package/tools/iteration_log.py +143 -0
  417. package/tools/lint_skills_helpers.sh +84 -0
  418. package/tools/meta_opt/check_ready.sh +80 -0
  419. package/tools/meta_opt/log_event.sh +91 -0
  420. package/tools/meta_opt/trigger_eval.py +280 -0
  421. package/tools/meta_opt/trigger_evals.sample.json +28 -0
  422. package/tools/openalex_fetch.py +326 -0
  423. package/tools/overleaf_audit.sh +104 -0
  424. package/tools/overleaf_setup.sh +150 -0
  425. package/tools/paper_illustration_image2.py +62 -0
  426. package/tools/provenance.py +294 -0
  427. package/tools/research_wiki.py +1720 -0
  428. package/tools/review_gate.py +502 -0
  429. package/tools/run_state.py +399 -0
  430. package/tools/save_trace.sh +477 -0
  431. package/tools/semantic_scholar_fetch.py +438 -0
  432. package/tools/skill-groups.tsv +116 -0
  433. package/tools/skill_picker.py +238 -0
  434. package/tools/smart_update.ps1 +521 -0
  435. package/tools/smart_update.sh +591 -0
  436. package/tools/smart_update_codex.sh +419 -0
  437. package/tools/smart_update_copilot.sh +605 -0
  438. package/tools/threat_scan.py +222 -0
  439. package/tools/verify_paper_audits.sh +487 -0
  440. package/tools/verify_papers.py +613 -0
  441. package/tools/verify_wiki_coverage.sh +176 -0
  442. package/tools/watchdog.py +485 -0
@@ -0,0 +1,502 @@
1
+ #!/usr/bin/env python3
2
+ """Deterministic state transitions for /auto-review-loop reviewer backends.
3
+
4
+ The skill remains the orchestrator. This helper owns only the stop/continue/
5
+ escalate decision so that the safety-critical transition table is executable
6
+ and testable instead of existing solely as prose in SKILL.md.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import argparse
12
+ import json
13
+ import math
14
+ from pathlib import Path
15
+ import re
16
+ import sys
17
+ from dataclasses import asdict, dataclass
18
+
19
+
20
+ TOOLS_DIR = str(Path(__file__).resolve().parent)
21
+ if TOOLS_DIR not in sys.path:
22
+ sys.path.insert(0, TOOLS_DIR)
23
+
24
+ KNOWN_FAMILIES = {
25
+ "openai", "anthropic", "google", "deepseek", "moonshot", "qwen",
26
+ "zhipu", "minimax", "xiaomi", "bytedance", "xai", "meta", "mistral",
27
+ }
28
+ POSITIVE_VERDICTS = {"ready", "almost"}
29
+ VALID_BACKENDS = {"codex", "manual", "copilot", "copilot-native", "oracle-pro", "agy", "llm-chat"}
30
+ VALID_VERDICTS = POSITIVE_VERDICTS | {"not ready"}
31
+
32
+
33
+ @dataclass(frozen=True)
34
+ class Transition:
35
+ decision: str
36
+ next_backend: str | None
37
+ requires_external_acquittal: bool
38
+ identity_assurance: str
39
+ reason: str
40
+
41
+
42
+ @dataclass(frozen=True)
43
+ class NativeEvidence:
44
+ evidence_id: str
45
+ executor_model: str
46
+ reviewer_model: str
47
+ score: float
48
+ verdict: str
49
+
50
+
51
+ class NativeEvidenceError(RuntimeError):
52
+ """Native evidence is missing, malformed, or cannot be validated."""
53
+
54
+
55
+ def _normalized(value: str) -> str:
56
+ return value.strip().lower()
57
+
58
+
59
+ def derive_model_family(model: str) -> str:
60
+ name = _normalized(model)
61
+ families: set[str] = set()
62
+ if re.search(r"(^|[^a-z0-9])(gpt|chatgpt|codex|oracle|o1|o3|o4)([^a-z0-9]|$)", name):
63
+ families.add("openai")
64
+ if re.search(r"(^|[^a-z0-9])(claude|sonnet|opus|haiku|anthropic)([^a-z0-9]|$)", name):
65
+ families.add("anthropic")
66
+ if re.search(r"(^|[^a-z0-9])(gemini|google)([^a-z0-9]|$)", name):
67
+ families.add("google")
68
+ # [0-9.]* so versioned names (qwen3-max, qwen2.5-72b) still match.
69
+ if re.search(r"(^|[^a-z0-9])(deepseek)[0-9.]*([^a-z0-9]|$)", name):
70
+ families.add("deepseek")
71
+ if re.search(r"(^|[^a-z0-9])(kimi|moonshot)[0-9.]*([^a-z0-9]|$)", name):
72
+ families.add("moonshot")
73
+ if re.search(r"(^|[^a-z0-9])(qwen|tongyi)[0-9.]*([^a-z0-9]|$)", name):
74
+ families.add("qwen")
75
+ if re.search(r"(^|[^a-z0-9])(glm|zhipu)[0-9.]*([^a-z0-9]|$)", name):
76
+ families.add("zhipu")
77
+ if re.search(r"(^|[^a-z0-9])(minimax|abab)[0-9.]*([^a-z0-9]|$)", name):
78
+ families.add("minimax")
79
+ if re.search(r"(^|[^a-z0-9])(mimo|xiaomi)[0-9.]*([^a-z0-9]|$)", name):
80
+ families.add("xiaomi")
81
+ if re.search(r"(^|[^a-z0-9])(doubao|bytedance|volcengine)[0-9.]*([^a-z0-9]|$)", name):
82
+ families.add("bytedance")
83
+ if re.search(r"(^|[^a-z0-9])(grok)[0-9.]*([^a-z0-9]|$)", name):
84
+ families.add("xai")
85
+ if re.search(r"(^|[^a-z0-9])(llama)[0-9.]*([^a-z0-9]|$)", name):
86
+ families.add("meta")
87
+ if re.search(r"(^|[^a-z0-9])(mistral|mixtral)[0-9.]*([^a-z0-9]|$)", name):
88
+ families.add("mistral")
89
+ return next(iter(families)) if len(families) == 1 else "unknown"
90
+
91
+
92
+ def _parse_native_assessment(response: str) -> tuple[float, str]:
93
+ score_matches = re.findall(
94
+ r"(?im)^\s*(?:[-*]\s*)?score:\s*([0-9]+(?:\.[0-9]+)?)\s*/\s*10\s*$",
95
+ response,
96
+ )
97
+ verdict_matches = re.findall(
98
+ r"(?im)^\s*(?:[-*]\s*)?verdict:\s*(ready|almost|not\s+ready)\s*$",
99
+ response,
100
+ )
101
+ if len(score_matches) != 1 or len(verdict_matches) != 1:
102
+ raise NativeEvidenceError(
103
+ "native reviewer response must contain exactly one anchored Score and Verdict field"
104
+ )
105
+ return float(score_matches[0]), re.sub(r"\s+", " ", verdict_matches[0].lower())
106
+
107
+
108
+ def load_native_evidence(path: str | Path) -> NativeEvidence:
109
+ try:
110
+ from copilot_native_evidence import (
111
+ EvidenceError as HostEvidenceError,
112
+ validate_evidence_artifact,
113
+ )
114
+ except ImportError as exc:
115
+ raise NativeEvidenceError(
116
+ "copilot_native_evidence.py is unavailable beside review_gate.py"
117
+ ) from exc
118
+ try:
119
+ artifact = validate_evidence_artifact(Path(path))
120
+ except HostEvidenceError as exc:
121
+ raise NativeEvidenceError(str(exc)) from exc
122
+ response_path = artifact.get("response_path")
123
+ if not isinstance(response_path, str) or not response_path:
124
+ raise NativeEvidenceError("native evidence is missing response_path")
125
+ response = Path(response_path).read_text(encoding="utf-8")
126
+ score, verdict = _parse_native_assessment(response)
127
+ return NativeEvidence(
128
+ evidence_id=str(artifact["evidence_id"]),
129
+ executor_model=str(artifact["executor_model"]),
130
+ reviewer_model=str(artifact["reviewer_model"]),
131
+ score=score,
132
+ verdict=verdict,
133
+ )
134
+
135
+
136
+ def evaluate_transition(
137
+ *,
138
+ round_backend: str,
139
+ score: float,
140
+ verdict: str,
141
+ requires_external_acquittal: bool = False,
142
+ executor_model: str = "",
143
+ reviewer_model: str = "",
144
+ codex_available: bool = False,
145
+ manual_available: bool = False,
146
+ manual_identity_reported: bool = False,
147
+ native_evidence: NativeEvidence | None = None,
148
+ ) -> Transition:
149
+ """Return the authoritative transition for one completed review round.
150
+
151
+ ``executor_model`` is caller-declared in the compatibility Copilot drive
152
+ integration. It is useful for fail-closed route selection, but the
153
+ resulting family relation is not independent identity attestation.
154
+ ``copilot-native`` never uses those caller model fields: its identities and
155
+ structured verdict are loaded from a revalidated host event artifact.
156
+ Family strings are never accepted as inputs; this helper derives them from
157
+ the model identities itself.
158
+ """
159
+
160
+ backend = _normalized(round_backend)
161
+ normalized_verdict = _normalized(verdict)
162
+ executor = derive_model_family(executor_model)
163
+ reviewer = derive_model_family(reviewer_model)
164
+
165
+ if backend not in VALID_BACKENDS:
166
+ return Transition(
167
+ "review_unavailable",
168
+ None,
169
+ requires_external_acquittal,
170
+ "unverified",
171
+ f"unknown reviewer backend: {round_backend}",
172
+ )
173
+ if normalized_verdict not in VALID_VERDICTS:
174
+ return Transition(
175
+ "review_unavailable",
176
+ None,
177
+ requires_external_acquittal,
178
+ "unverified",
179
+ f"unknown verdict: {verdict}",
180
+ )
181
+ if not math.isfinite(score) or not 1 <= score <= 10:
182
+ return Transition(
183
+ "review_unavailable",
184
+ None,
185
+ requires_external_acquittal,
186
+ "unverified",
187
+ f"score must be finite and within 1..10: {score}",
188
+ )
189
+ if backend != "copilot-native" and native_evidence is not None:
190
+ return Transition(
191
+ "review_unavailable",
192
+ None,
193
+ requires_external_acquittal,
194
+ "failed",
195
+ "native Copilot evidence was supplied for a non-native backend",
196
+ )
197
+
198
+ positive = score >= 6 and normalized_verdict in POSITIVE_VERDICTS
199
+
200
+ if backend == "copilot-native":
201
+ if requires_external_acquittal:
202
+ return Transition(
203
+ "review_unavailable",
204
+ None,
205
+ True,
206
+ "unverified",
207
+ "invalid state: native Copilot review cannot inherit a compatibility-finalizer obligation",
208
+ )
209
+ if native_evidence is None:
210
+ return Transition(
211
+ "review_unavailable",
212
+ None,
213
+ False,
214
+ "unverified",
215
+ "native Copilot round is missing host-event evidence",
216
+ )
217
+ native_executor = derive_model_family(native_evidence.executor_model)
218
+ native_reviewer = derive_model_family(native_evidence.reviewer_model)
219
+ if native_executor not in KNOWN_FAMILIES or native_reviewer not in KNOWN_FAMILIES:
220
+ return Transition(
221
+ "review_unavailable",
222
+ None,
223
+ False,
224
+ "failed",
225
+ "native Copilot evidence contains an unknown model family",
226
+ )
227
+ if native_executor == native_reviewer:
228
+ return Transition(
229
+ "review_unavailable",
230
+ None,
231
+ False,
232
+ "failed",
233
+ "native Copilot reviewer is same-family as the host-reported executor",
234
+ )
235
+ if not math.isclose(score, native_evidence.score, rel_tol=0.0, abs_tol=1e-9):
236
+ return Transition(
237
+ "review_unavailable",
238
+ None,
239
+ False,
240
+ "failed",
241
+ "declared score does not match the host-bound native reviewer response",
242
+ )
243
+ if normalized_verdict != _normalized(native_evidence.verdict):
244
+ return Transition(
245
+ "review_unavailable",
246
+ None,
247
+ False,
248
+ "failed",
249
+ "declared verdict does not match the host-bound native reviewer response",
250
+ )
251
+ if not positive:
252
+ return Transition(
253
+ "continue",
254
+ "copilot-native",
255
+ False,
256
+ "host_event_verified",
257
+ f"native cross-family reviewer {native_evidence.evidence_id} did not meet the positive threshold",
258
+ )
259
+ return Transition(
260
+ "stop",
261
+ None,
262
+ False,
263
+ "host_event_verified",
264
+ f"native cross-family reviewer {native_evidence.evidence_id} returned a host-bound positive verdict",
265
+ )
266
+
267
+ if backend == "copilot":
268
+ if requires_external_acquittal:
269
+ return Transition(
270
+ "review_unavailable",
271
+ None,
272
+ True,
273
+ "unverified",
274
+ "invalid state: copilot cannot resume after finalizer escalation",
275
+ )
276
+ if not positive:
277
+ return Transition(
278
+ "continue",
279
+ "copilot",
280
+ False,
281
+ "unverified",
282
+ "copilot drive verdict is not positive",
283
+ )
284
+ if executor not in KNOWN_FAMILIES:
285
+ return Transition(
286
+ "review_unavailable",
287
+ None,
288
+ False,
289
+ "unverified",
290
+ "cannot select an opposite-family finalizer from an unknown executor family",
291
+ )
292
+
293
+ if executor == "openai":
294
+ if not manual_available:
295
+ return Transition(
296
+ "review_unavailable",
297
+ None,
298
+ False,
299
+ "caller_declared",
300
+ "OpenAI-family executor requires a non-OpenAI manual finalizer",
301
+ )
302
+ next_backend = "manual"
303
+ elif codex_available:
304
+ next_backend = "codex"
305
+ elif manual_available:
306
+ next_backend = "manual"
307
+ else:
308
+ return Transition(
309
+ "review_unavailable",
310
+ None,
311
+ False,
312
+ "caller_declared",
313
+ "no policy-approved finalizer is available",
314
+ )
315
+
316
+ return Transition(
317
+ "escalate",
318
+ next_backend,
319
+ True,
320
+ "caller_declared",
321
+ "copilot is drive-only; a positive verdict requires an external finalizer",
322
+ )
323
+
324
+ if not positive:
325
+ return Transition(
326
+ "continue",
327
+ backend,
328
+ requires_external_acquittal,
329
+ "unverified",
330
+ "positive threshold not met",
331
+ )
332
+
333
+ if backend == "llm-chat":
334
+ if requires_external_acquittal:
335
+ return Transition(
336
+ "review_unavailable",
337
+ None,
338
+ True,
339
+ "unverified",
340
+ "Copilot finalizer state permits only codex or manual",
341
+ )
342
+ if executor not in KNOWN_FAMILIES or reviewer not in KNOWN_FAMILIES:
343
+ return Transition(
344
+ "review_unavailable",
345
+ None,
346
+ False,
347
+ "unverified",
348
+ "HTTP reviewer family relation cannot be derived",
349
+ )
350
+ if executor == reviewer:
351
+ return Transition(
352
+ "review_unavailable",
353
+ None,
354
+ False,
355
+ "failed",
356
+ "HTTP reviewer is same-family as the declared executor model",
357
+ )
358
+ return Transition(
359
+ "stop",
360
+ None,
361
+ False,
362
+ "caller_declared",
363
+ "HTTP reviewer returned a positive cross-family verdict; executor identity remains caller-declared",
364
+ )
365
+
366
+ if backend in {"codex", "oracle-pro", "agy"} and not requires_external_acquittal:
367
+ return Transition(
368
+ "stop",
369
+ None,
370
+ False,
371
+ "not_required",
372
+ "non-Copilot backend preserves the pre-Copilot positive-stop contract",
373
+ )
374
+
375
+ if backend in {"oracle-pro", "agy"} and requires_external_acquittal:
376
+ return Transition(
377
+ "review_unavailable",
378
+ None,
379
+ True,
380
+ "unverified",
381
+ "Copilot finalizer state permits only codex or manual",
382
+ )
383
+
384
+ if backend == "manual" and not manual_identity_reported:
385
+ return Transition(
386
+ "review_unavailable",
387
+ None,
388
+ requires_external_acquittal,
389
+ "unverified",
390
+ "manual final verdict is missing its required reported model identity",
391
+ )
392
+
393
+ if backend == "manual":
394
+ if executor not in KNOWN_FAMILIES or reviewer not in KNOWN_FAMILIES:
395
+ return Transition(
396
+ "review_unavailable",
397
+ None,
398
+ requires_external_acquittal,
399
+ "unverified",
400
+ "manual verdict family relation cannot be derived",
401
+ )
402
+ if executor == reviewer:
403
+ return Transition(
404
+ "review_unavailable",
405
+ None,
406
+ requires_external_acquittal,
407
+ "failed",
408
+ "manual reviewer is same-family as the declared executor model",
409
+ )
410
+
411
+ if requires_external_acquittal:
412
+ if executor not in KNOWN_FAMILIES or reviewer not in KNOWN_FAMILIES:
413
+ return Transition(
414
+ "review_unavailable",
415
+ None,
416
+ True,
417
+ "unverified",
418
+ "finalizer family relation cannot be derived",
419
+ )
420
+ if executor == reviewer:
421
+ return Transition(
422
+ "review_unavailable",
423
+ None,
424
+ True,
425
+ "failed",
426
+ "finalizer is same-family as the declared executor model",
427
+ )
428
+ return Transition(
429
+ "stop",
430
+ None,
431
+ False,
432
+ "caller_declared",
433
+ "policy-approved finalizer returned a positive verdict; executor identity remains caller-declared",
434
+ )
435
+
436
+ return Transition(
437
+ "stop",
438
+ None,
439
+ False,
440
+ "caller_declared",
441
+ "explicit manual backend returned a positive verdict with its required model identity",
442
+ )
443
+
444
+
445
+ def build_parser() -> argparse.ArgumentParser:
446
+ parser = argparse.ArgumentParser(description=__doc__)
447
+ parser.add_argument("--round-backend", required=True, choices=sorted(VALID_BACKENDS))
448
+ parser.add_argument("--score", required=True, type=float)
449
+ parser.add_argument("--verdict", required=True, choices=sorted(VALID_VERDICTS))
450
+ parser.add_argument("--requires-external-acquittal", action=argparse.BooleanOptionalAction, default=False)
451
+ parser.add_argument("--executor-model", default="")
452
+ parser.add_argument("--reviewer-model", default="")
453
+ parser.add_argument("--codex-available", action=argparse.BooleanOptionalAction, default=False)
454
+ parser.add_argument("--manual-available", action=argparse.BooleanOptionalAction, default=False)
455
+ parser.add_argument("--manual-identity-reported", action=argparse.BooleanOptionalAction, default=False)
456
+ parser.add_argument("--native-evidence", default="")
457
+ return parser
458
+
459
+
460
+ def main() -> None:
461
+ args = build_parser().parse_args()
462
+ native_evidence = None
463
+ if args.native_evidence and args.round_backend != "copilot-native":
464
+ transition = Transition(
465
+ "review_unavailable",
466
+ None,
467
+ args.requires_external_acquittal,
468
+ "failed",
469
+ "native Copilot evidence is valid only for --round-backend copilot-native",
470
+ )
471
+ print(json.dumps(asdict(transition), sort_keys=True))
472
+ return
473
+ if args.native_evidence:
474
+ try:
475
+ native_evidence = load_native_evidence(args.native_evidence)
476
+ except (NativeEvidenceError, OSError, UnicodeError, KeyError) as exc:
477
+ transition = Transition(
478
+ "review_unavailable",
479
+ None,
480
+ args.requires_external_acquittal,
481
+ "failed",
482
+ f"invalid native Copilot evidence: {exc}",
483
+ )
484
+ print(json.dumps(asdict(transition), sort_keys=True))
485
+ return
486
+ transition = evaluate_transition(
487
+ round_backend=args.round_backend,
488
+ score=args.score,
489
+ verdict=args.verdict,
490
+ requires_external_acquittal=args.requires_external_acquittal,
491
+ executor_model=args.executor_model,
492
+ reviewer_model=args.reviewer_model,
493
+ codex_available=args.codex_available,
494
+ manual_available=args.manual_available,
495
+ manual_identity_reported=args.manual_identity_reported,
496
+ native_evidence=native_evidence,
497
+ )
498
+ print(json.dumps(asdict(transition), sort_keys=True))
499
+
500
+
501
+ if __name__ == "__main__":
502
+ main()