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,391 @@
1
+ ---
2
+ name: paper-illustration-image2
3
+ description: "Generate publication-quality academic illustrations through a local Codex app-server bridge that uses Codex native image generation. This is a separate experimental alternative to `paper-illustration`, intended for Claude Code users who want a GPT-image-style renderer without modifying the original skill."
4
+ argument-hint: "[description-or-method-file]"
5
+ allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob, WebSearch, mcp__codex-image2__generate, mcp__codex-image2__generate_start, mcp__codex-image2__generate_status, mcp__codex__codex, mcp__codex__codex-reply
6
+ ---
7
+
8
+ # Paper Illustration Image2
9
+
10
+ Generate publication-quality paper figures using **Claude as the planner/reviewer**
11
+ and a **local Codex app-server MCP bridge** as the raster renderer.
12
+
13
+ ## Core Design Philosophy
14
+
15
+ ```text
16
+ ┌──────────────────────────────────────────────────────────────────────────┐
17
+ │ MULTI-STAGE ITERATIVE WORKFLOW │
18
+ ├──────────────────────────────────────────────────────────────────────────┤
19
+ │ │
20
+ │ User Request │
21
+ │ │ │
22
+ │ ▼ │
23
+ │ ┌─────────────┐ │
24
+ │ │ Claude │ ◄─── Step 1: Parse request, create initial prompt │
25
+ │ │ (Planner) │ - Extract components, labels, and data flow │
26
+ │ │ │ - Write a paper-ready figure brief │
27
+ │ └──────┬──────┘ │
28
+ │ │ │
29
+ │ ▼ │
30
+ │ ┌─────────────┐ │
31
+ │ │Claude/Codex │ ◄─── Step 2: Optimize layout description │
32
+ │ │ Layout │ - Refine component positioning │
33
+ │ │ Review │ - Optimize spacing and grouping │
34
+ │ └──────┬──────┘ │
35
+ │ │ │
36
+ │ ▼ │
37
+ │ ┌─────────────┐ │
38
+ │ │Claude/Codex │ ◄─── Step 3: CVPR/NeurIPS style verification │
39
+ │ │ Style │ - Check palette, arrows, and label standards │
40
+ │ │ Check │ - Tighten the prompt before rendering │
41
+ │ └──────┬──────┘ │
42
+ │ │ │
43
+ │ ▼ │
44
+ │ ┌─────────────┐ │
45
+ │ │ codex-image2│ ◄─── Step 4: Native image generation via bridge │
46
+ │ │ MCP bridge │ - Call generate_start / generate_status │
47
+ │ │ + app-server│ - Accept only native imageGeneration output │
48
+ │ └──────┬──────┘ │
49
+ │ │ │
50
+ │ ▼ │
51
+ │ ┌─────────────┐ │
52
+ │ │ Claude │ ◄─── Step 5: STRICT visual review + SCORE (1-10) │
53
+ │ │ (Reviewer) │ - Verify logic, labels, arrows, and aesthetics │
54
+ │ │ STRICT! │ - Reject unclear or non-paper-ready figures │
55
+ │ └──────┬──────┘ │
56
+ │ │ │
57
+ │ ▼ │
58
+ │ Score ≥ 9? ──YES──► Accept & Output │
59
+ │ │ │
60
+ │ NO │
61
+ │ │ │
62
+ │ ▼ │
63
+ │ Generate SPECIFIC improvement feedback ──► Loop back to Step 2 │
64
+ │ │
65
+ └──────────────────────────────────────────────────────────────────────────┘
66
+ ```
67
+
68
+ ## Constants
69
+
70
+ - **RENDERER = `codex-image2`** — Native image generation bridge exposed through local Codex app-server
71
+ - **OPTIONAL_TEXT_CRITIC = `mcp__codex__codex`** — Optional text-only second opinion for layout/style checks
72
+ - **MAX_ITERATIONS = 5** — Maximum refinement rounds
73
+ - **TARGET_SCORE = 9** — Minimum acceptable score (1-10)
74
+ - **OUTPUT_DIR = `figures/ai_generated/`** — Output directory
75
+ - **TEXT_LANGUAGE = `English`** — Default figure text language unless the user requests otherwise
76
+ - **NATIVE_IMAGE_REQUIREMENT = `strict`** — Accept only native `imageGeneration` output; reject shell/Python fallbacks
77
+ - **IMAGE2_HELPER** — canonical name `paper_illustration_image2.py`, resolved
78
+ per [`shared-references/integration-contract.md`](../shared-references/integration-contract.md) §2
79
+ (Policy A — skill-local gate). Phase 3.2 (Arch C) moved the canonical
80
+ implementation into `skills/paper-illustration-image2/scripts/`;
81
+ `tools/paper_illustration_image2.py` remains as an `os.execv` shim so
82
+ legacy resolver layers keep working without a re-install. Resolve via:
83
+
84
+ ```bash
85
+ # Layer 0: self-contained (CC 1.0+ exposes $CLAUDE_SKILL_DIR).
86
+ IMAGE2_HELPER=""
87
+ if [ -n "${CLAUDE_SKILL_DIR:-}" ] && [ -f "$CLAUDE_SKILL_DIR/scripts/paper_illustration_image2.py" ]; then
88
+ IMAGE2_HELPER="$CLAUDE_SKILL_DIR/scripts/paper_illustration_image2.py"
89
+ fi
90
+ # Layers 1-4: shared-runtime chain via shim at tools/paper_illustration_image2.py.
91
+ if [ -z "$IMAGE2_HELPER" ]; then
92
+ cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
93
+ if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
94
+ ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
95
+ fi
96
+ if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
97
+ ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
98
+ fi
99
+ IMAGE2_HELPER=".aris/tools/paper_illustration_image2.py"
100
+ [ -f "$IMAGE2_HELPER" ] || IMAGE2_HELPER="tools/paper_illustration_image2.py"
101
+ [ -f "$IMAGE2_HELPER" ] || { [ -n "${ARIS_REPO:-}" ] && IMAGE2_HELPER="$ARIS_REPO/tools/paper_illustration_image2.py"; }
102
+ [ -f "$IMAGE2_HELPER" ] || IMAGE2_HELPER=""
103
+ fi
104
+ [ -z "$IMAGE2_HELPER" ] && {
105
+ echo "ERROR: paper_illustration_image2.py not resolved (layer 0: \$CLAUDE_SKILL_DIR/scripts/; layers 1-4: .aris/tools/, tools/, \$ARIS_REPO/tools/, \$ARIS_REPO/tools/ via ~/.aris/repo)." >&2
106
+ echo " /paper-illustration-image2 cannot proceed. Fix: rerun bash tools/install_aris.sh or smart_update.sh (refreshes ~/.aris/repo), or copy the canonical script from \$ARIS_REPO/skills/paper-illustration-image2/scripts/." >&2
107
+ exit 1
108
+ }
109
+ ```
110
+
111
+ All invocations below use `python3 "$IMAGE2_HELPER" <subcommand>`.
112
+
113
+ ## CVPR/ICLR/NeurIPS Top-Tier Conference Style Guide
114
+
115
+ **What "CVPR Style" Actually Means:**
116
+
117
+ ### Visual Standards
118
+ - **Clean white background** — No decorative patterns or gradients unless extremely subtle
119
+ - **Sans-serif fonts** — Arial, Helvetica, or similarly clean paper-friendly typography
120
+ - **Subtle color palette** — Use 3-5 coordinated colors, not rainbow colors
121
+ - **Print-friendly** — Must remain understandable in grayscale
122
+ - **Professional borders** — Thin to medium, clean, and consistent
123
+
124
+ ### Layout Standards
125
+ - **Horizontal flow** — Left-to-right is the default for pipelines
126
+ - **Clear grouping** — Use spacing or subtle grouping boxes for related modules
127
+ - **Consistent sizing** — Similar components should have similar sizes
128
+ - **Balanced whitespace** — Avoid both cramped and overly sparse layouts
129
+
130
+ ### Arrow Standards (MOST CRITICAL)
131
+ - **Thick strokes** — Arrows must remain visible after paper scaling
132
+ - **Clear arrowheads** — Large, unmistakable arrowheads
133
+ - **Dark colors** — Prefer black or dark gray arrows
134
+ - **Labeled** — Important arrows should show what flows through them
135
+ - **No crossings** — Reorganize the figure to avoid crossings where possible
136
+ - **CORRECT DIRECTION** — Arrows must point to the right target
137
+
138
+ ### Visual Appeal (Academic Professional Style)
139
+
140
+ **目标:既不保守也不花哨,找到平衡点**
141
+
142
+ #### ✅ Should have
143
+ - **Subtle gradients** — Gentle same-family gradients are acceptable
144
+ - **Rounded corners** — Modern but restrained rounded blocks
145
+ - **Clear hierarchy** — Main modules larger, secondary modules smaller
146
+ - **Consistent color coding** — Stable mapping between module types and colors
147
+ - **Professional typography** — Clean labels with readable size hierarchy
148
+
149
+ #### ❌ Avoid
150
+ - ❌ Rainbow gradients
151
+ - ❌ Heavy drop shadows
152
+ - ❌ 3D perspective effects
153
+ - ❌ Glowing effects
154
+ - ❌ Decorative clip-art icons
155
+ - ❌ Slide-deck styling that feels flashy rather than paper-ready
156
+
157
+ #### ✓ Ideal effect
158
+ - Looks intentional, professional, and immediately readable
159
+ - Has moderate visual appeal without becoming decorative
160
+ - Feels appropriate for a top-tier conference paper figure
161
+ - Survives PDF scaling and grayscale printing
162
+
163
+ ### What to AVOID (CRITICAL)
164
+ - ❌ Thin, hairline arrows
165
+ - ❌ Unlabeled or ambiguous connections
166
+ - ❌ Tiny unreadable text
167
+ - ❌ Flat, boring box soup with no hierarchy
168
+ - ❌ Over-decorated figures with shadows/glows/icons
169
+ - ❌ Wrong arrow directions
170
+
171
+ ## Scope
172
+
173
+ | Figure Type | Quality | Examples |
174
+ |-------------|---------|----------|
175
+ | **Architecture diagrams** | Excellent | Model architecture, pipeline, encoder-decoder |
176
+ | **Method illustrations** | Excellent | Conceptual diagrams, algorithm flowcharts |
177
+ | **Conceptual figures** | Good | Comparison diagrams, taxonomy trees |
178
+
179
+ **Not for:** Statistical plots (use `/paper-figure`), deterministic vector topology figures (prefer `/figure-spec`), photo-realistic scenes
180
+
181
+ ## Workflow: MUST EXECUTE ALL STEPS
182
+
183
+ ### Step 0: Pre-flight Check
184
+
185
+ Render this checklist explicitly before starting:
186
+
187
+ ```text
188
+ 📋 paper-illustration-image2 integration checklist:
189
+ [ ] 1. python3 "$IMAGE2_HELPER" preflight --workspace <cwd> --json-out figures/ai_generated/preflight.json
190
+ [ ] 2. Confirm preflight JSON says ok=true before rendering
191
+ [ ] 3. Render via mcp__codex-image2__generate_start + generate_status
192
+ [ ] 4. Finalize via python3 "$IMAGE2_HELPER" finalize --workspace <cwd> --best-image <best_png>
193
+ [ ] 5. Verify artifacts via python3 "$IMAGE2_HELPER" verify --workspace <cwd> --json-out figures/ai_generated/verify.json
194
+ ```
195
+
196
+ 1. Create `figures/ai_generated/` if it does not exist.
197
+ 2. Confirm the request is suitable for a raster illustration:
198
+ - architecture diagram
199
+ - conceptual method figure
200
+ - workflow illustration
201
+ 3. Prefer **English figure text** unless the user asked otherwise.
202
+ 4. Run:
203
+
204
+ ```bash
205
+ python3 "$IMAGE2_HELPER" preflight \
206
+ --workspace <cwd> \
207
+ --json-out figures/ai_generated/preflight.json
208
+ ```
209
+
210
+ 5. If preflight is not `ok=true`, stop and say so clearly.
211
+
212
+ ## Step 1: Claude Plans the Figure
213
+
214
+ Turn the user request into a **fully specified image prompt**. Include:
215
+
216
+ - figure type
217
+ - exact modules / stages
218
+ - flow direction
219
+ - labels to show
220
+ - data-flow arrows
221
+ - style constraints
222
+ - what to avoid
223
+
224
+ When the input is a method note or a paper section, summarize it first into a
225
+ clean figure brief before writing the final image prompt.
226
+
227
+ ## Step 2: Layout Optimization
228
+
229
+ This step is required. Before rendering, refine the prompt into a concrete
230
+ layout plan:
231
+
232
+ - exact module order
233
+ - spacing and grouping
234
+ - relative module prominence
235
+ - arrow routing and likely collision points
236
+
237
+ If `mcp__codex__codex` is available, you may ask it for a short second-opinion
238
+ layout critique here, but Claude should still complete this step even without
239
+ Codex.
240
+
241
+ Use Codex layout critique for:
242
+
243
+ - missing components
244
+ - confusing layout
245
+ - weak flow hierarchy
246
+ - likely arrow-direction ambiguity or clutter
247
+
248
+ ## Step 3: Style Verification
249
+
250
+ This step is also required. Check the prompt against the intended paper style
251
+ before rendering:
252
+
253
+ - palette is restrained and academic
254
+ - arrows are thick, dark, and readable
255
+ - labels are concise and in English unless requested otherwise
256
+ - the figure will read clearly in grayscale / print
257
+ - no glow, rainbow gradient, or slide-deck decoration slips in
258
+
259
+ If `mcp__codex__codex` is available, you may ask it for a short text-only
260
+ style audit, but do not block on it.
261
+
262
+ ## Step 4: Generate Through the Bridge
263
+
264
+ Call `mcp__codex-image2__generate_start` with:
265
+
266
+ - `prompt`: the final image prompt
267
+ - `cwd`: current project root or paper workspace
268
+ - `outputPath`: `figures/ai_generated/figure_v1.png`
269
+ - `system`: a short instruction like `Academic paper figure. Prefer crisp English labels.`
270
+ - `timeoutSeconds`: a bounded render timeout such as `180`
271
+
272
+ Then call `mcp__codex-image2__generate_status` with bounded waits until:
273
+
274
+ - `done=true` and `status=completed`, or
275
+ - `done=true` and `status=failed`
276
+
277
+ If generation fails, report the bridge error directly instead of hiding it.
278
+
279
+ ## Step 5: Review the Output
280
+
281
+ Review the generated image with a strict checklist:
282
+
283
+ - are all major components present?
284
+ - is the logical flow obvious?
285
+ - are labels readable?
286
+ - do arrows point the right way?
287
+ - does the figure look paper-ready rather than like a slide?
288
+
289
+ Score it from 1-10.
290
+
291
+ ## Step 6: Refine if Needed
292
+
293
+ If score < 9, write a targeted refinement prompt:
294
+
295
+ - say exactly what was wrong
296
+ - say what to preserve
297
+ - regenerate to `figure_v2.png`, `figure_v3.png`, etc.
298
+
299
+ Keep refinement feedback concrete:
300
+
301
+ - `Increase spacing between genome scan and scoring modules`
302
+ - `Make the off-target branch thinner and secondary`
303
+ - `Use cleaner English labels: "Candidate sgRNA library", not "sgRNA library 23 bp"`
304
+
305
+ ## Step 7: Finalize And Verify
306
+
307
+ When accepted:
308
+
309
+ - run the canonical helper to promote the best image to `figure_final.png`
310
+ - let the helper write `latex_include.tex`
311
+ - let the helper write `review_log.json`
312
+ - run helper verification before claiming success
313
+
314
+ ```bash
315
+ python3 "$IMAGE2_HELPER" finalize \
316
+ --workspace <cwd> \
317
+ --best-image figures/ai_generated/figure_vN.png \
318
+ --score 9 \
319
+ --review-summary "Accepted after strict review; labels and arrows are paper-ready."
320
+
321
+ python3 "$IMAGE2_HELPER" verify \
322
+ --workspace <cwd> \
323
+ --json-out figures/ai_generated/verify.json
324
+ ```
325
+
326
+ Suggested LaTeX:
327
+
328
+ ```latex
329
+ \begin{figure*}[t]
330
+ \centering
331
+ \includegraphics[width=0.95\textwidth]{figures/ai_generated/figure_final.png}
332
+ \caption{[Replace with a paper-ready caption].}
333
+ \label{fig:[replace-me]}
334
+ \end{figure*}
335
+ ```
336
+
337
+ ## Key Rules
338
+
339
+ 1. Never skip Step 2 or Step 3; layout and style checks are required.
340
+ 2. Never skip the final visual review.
341
+ 3. Never accept a figure that is logically wrong just because it looks attractive.
342
+ 4. Use the `codex-image2` bridge only for **native image generation**.
343
+ 5. If the bridge says native image generation is unavailable, surface that honestly.
344
+ 6. Reject any shell/Python/manual bitmap fallback masquerading as image generation.
345
+ 7. Keep figure text in English unless the user requested another language.
346
+ 8. Prefer 1-3 strong refinement rounds over many shallow ones.
347
+ 9. Use specific, actionable refinement feedback instead of vague comments.
348
+ 10. Review arrow direction, label clarity, and visual hierarchy every round.
349
+ 11. Accept only figures that look paper-ready, not slide-ready.
350
+ 12. Always use `tools/paper_illustration_image2.py finalize` to emit the final artifacts.
351
+ 13. Always use `tools/paper_illustration_image2.py verify` before claiming success.
352
+
353
+ ## Repair Path
354
+
355
+ If rendering succeeded but final artifacts were skipped, repair the integration explicitly:
356
+
357
+ ```bash
358
+ python3 "$IMAGE2_HELPER" finalize \
359
+ --workspace <cwd> \
360
+ --best-image figures/ai_generated/figure_vN.png
361
+
362
+ python3 "$IMAGE2_HELPER" verify \
363
+ --workspace <cwd> \
364
+ --json-out figures/ai_generated/verify.json
365
+ ```
366
+
367
+ ## Output Structure
368
+
369
+ ```text
370
+ figures/ai_generated/
371
+ ├── preflight.json # Helper preflight receipt
372
+ ├── figure_v1.png # Iteration 1
373
+ ├── figure_v2.png # Iteration 2
374
+ ├── figure_v3.png # Iteration 3
375
+ ├── figure_final.png # Accepted version (copy of best, score ≥ 9)
376
+ ├── latex_include.tex # LaTeX snippet
377
+ ├── review_log.json # Review notes and refinement history
378
+ └── verify.json # Helper verification diagnostic
379
+ ```
380
+
381
+ ## Model Summary
382
+
383
+ | Stage | Agent / Tool | Purpose |
384
+ |-------|--------------|---------|
385
+ | Step 0 | `python3 "$IMAGE2_HELPER" preflight` | Observable activation predicate and preflight receipt |
386
+ | Step 1 | Claude | Parse request and create the initial figure prompt |
387
+ | Step 2 | Claude (+ optional Codex critique) | Refine layout, grouping, spacing, and arrow routing |
388
+ | Step 3 | Claude (+ optional Codex critique) | Verify academic visual style before rendering |
389
+ | Step 4 | `mcp__codex-image2__generate_start` + `generate_status` | Native raster image generation through Codex app-server |
390
+ | Step 5 | Claude | Strict visual review and scoring |
391
+ | Step 7 | `python3 "$IMAGE2_HELPER" finalize` + `verify` | Emit canonical artifacts and external verification receipt |
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env python3
2
+ """Integration helper for the paper-illustration-image2 workflow."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import shutil
9
+ import subprocess
10
+ import sys
11
+ from datetime import datetime, timezone
12
+ from pathlib import Path
13
+
14
+
15
+ PNG_SIGNATURE = b"\x89PNG\r\n\x1a\n"
16
+
17
+
18
+ def utc_now() -> str:
19
+ return datetime.now(timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z")
20
+
21
+
22
+ def resolve_workspace(raw_workspace: str | None) -> Path:
23
+ workspace = Path(raw_workspace).expanduser() if raw_workspace else Path.cwd()
24
+ return workspace.resolve()
25
+
26
+
27
+ def output_dir(workspace: Path) -> Path:
28
+ return (workspace / "figures" / "ai_generated").resolve()
29
+
30
+
31
+ def ensure_png_file(path: Path) -> None:
32
+ if not path.is_file():
33
+ raise FileNotFoundError(f"missing PNG file: {path}")
34
+ if not path.read_bytes().startswith(PNG_SIGNATURE):
35
+ raise ValueError(f"expected a PNG file: {path}")
36
+
37
+
38
+ def write_json(path: Path, payload: dict) -> None:
39
+ path.parent.mkdir(parents=True, exist_ok=True)
40
+ path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
41
+
42
+
43
+ def emit_json(payload: dict, *, json_out: Path | None = None) -> int:
44
+ if json_out is not None:
45
+ write_json(json_out, payload)
46
+ print(json.dumps(payload, ensure_ascii=False, indent=2))
47
+ return 0 if payload.get("ok", False) else 1
48
+
49
+
50
+ def run_preflight(workspace: Path, *, json_out: Path | None = None) -> int:
51
+ figures_dir = output_dir(workspace)
52
+ figures_dir.mkdir(parents=True, exist_ok=True)
53
+ codex_bin = shutil.which("codex")
54
+ payload = {
55
+ "ok": False,
56
+ "workspace": str(workspace),
57
+ "outputDir": str(figures_dir),
58
+ "codexBin": codex_bin,
59
+ "checkedAt": utc_now(),
60
+ }
61
+ if codex_bin is None:
62
+ payload["error"] = "codex CLI not found on PATH"
63
+ return emit_json(payload, json_out=json_out)
64
+
65
+ try:
66
+ result = subprocess.run(
67
+ [codex_bin, "debug", "app-server", "send-message-v2", "ping"],
68
+ cwd=str(workspace),
69
+ stdin=subprocess.DEVNULL,
70
+ capture_output=True,
71
+ text=True,
72
+ timeout=20,
73
+ check=False,
74
+ )
75
+ except subprocess.TimeoutExpired:
76
+ payload["error"] = "codex app-server ping timed out"
77
+ return emit_json(payload, json_out=json_out)
78
+
79
+ payload["returncode"] = result.returncode
80
+ payload["ok"] = result.returncode == 0
81
+ if result.returncode != 0:
82
+ payload["error"] = (result.stderr or result.stdout or "codex app-server ping failed").strip()
83
+ return emit_json(payload, json_out=json_out)
84
+
85
+
86
+ def build_latex_include(caption: str, label: str) -> str:
87
+ return "\n".join(
88
+ [
89
+ r"\begin{figure*}[t]",
90
+ r" \centering",
91
+ r" \includegraphics[width=0.95\textwidth]{figures/ai_generated/figure_final.png}",
92
+ f" \\caption{{{caption}}}",
93
+ f" \\label{{{label}}}",
94
+ r"\end{figure*}",
95
+ "",
96
+ ]
97
+ )
98
+
99
+
100
+ def run_finalize(
101
+ workspace: Path,
102
+ *,
103
+ best_image: Path,
104
+ caption: str,
105
+ label: str,
106
+ score: float | None,
107
+ review_summary: str | None,
108
+ json_out: Path | None = None,
109
+ ) -> int:
110
+ figures_dir = output_dir(workspace)
111
+ figures_dir.mkdir(parents=True, exist_ok=True)
112
+ best_image = best_image.expanduser().resolve()
113
+ ensure_png_file(best_image)
114
+
115
+ final_image = figures_dir / "figure_final.png"
116
+ latex_include = figures_dir / "latex_include.tex"
117
+ review_log = figures_dir / "review_log.json"
118
+
119
+ shutil.copy2(best_image, final_image)
120
+ latex_include.write_text(build_latex_include(caption, label), encoding="utf-8")
121
+
122
+ review_payload = {
123
+ "ok": True,
124
+ "finalizedAt": utc_now(),
125
+ "workspace": str(workspace),
126
+ "bestImage": str(best_image),
127
+ "finalImage": str(final_image),
128
+ "score": score,
129
+ "reviewSummary": review_summary,
130
+ "caption": caption,
131
+ "label": label,
132
+ }
133
+ write_json(review_log, review_payload)
134
+
135
+ payload = {
136
+ "ok": True,
137
+ "workspace": str(workspace),
138
+ "artifacts": {
139
+ "figureFinal": str(final_image),
140
+ "latexInclude": str(latex_include),
141
+ "reviewLog": str(review_log),
142
+ },
143
+ "score": score,
144
+ "reviewSummary": review_summary,
145
+ "finalizedAt": review_payload["finalizedAt"],
146
+ }
147
+ return emit_json(payload, json_out=json_out)
148
+
149
+
150
+ def run_verify(workspace: Path, *, json_out: Path | None = None) -> int:
151
+ figures_dir = output_dir(workspace)
152
+ final_image = figures_dir / "figure_final.png"
153
+ latex_include = figures_dir / "latex_include.tex"
154
+ review_log = figures_dir / "review_log.json"
155
+
156
+ errors: list[str] = []
157
+ artifacts = {
158
+ "figureFinal": {"path": str(final_image), "exists": final_image.is_file()},
159
+ "latexInclude": {"path": str(latex_include), "exists": latex_include.is_file()},
160
+ "reviewLog": {"path": str(review_log), "exists": review_log.is_file()},
161
+ }
162
+
163
+ if final_image.is_file():
164
+ try:
165
+ ensure_png_file(final_image)
166
+ except (FileNotFoundError, ValueError) as exc:
167
+ errors.append(str(exc))
168
+ else:
169
+ errors.append(f"missing artifact: {final_image}")
170
+
171
+ if latex_include.is_file():
172
+ latex_text = latex_include.read_text(encoding="utf-8")
173
+ if "figure_final.png" not in latex_text:
174
+ errors.append("latex_include.tex does not reference figures/ai_generated/figure_final.png")
175
+ else:
176
+ errors.append(f"missing artifact: {latex_include}")
177
+
178
+ if review_log.is_file():
179
+ try:
180
+ review_payload = json.loads(review_log.read_text(encoding="utf-8"))
181
+ except json.JSONDecodeError as exc:
182
+ errors.append(f"review_log.json is not valid JSON: {exc}")
183
+ else:
184
+ if str(review_payload.get("finalImage")) != str(final_image):
185
+ errors.append("review_log.json does not point at figure_final.png")
186
+ else:
187
+ errors.append(f"missing artifact: {review_log}")
188
+
189
+ payload = {
190
+ "ok": not errors,
191
+ "workspace": str(workspace),
192
+ "checkedAt": utc_now(),
193
+ "artifacts": artifacts,
194
+ "errors": errors,
195
+ }
196
+ return emit_json(payload, json_out=json_out)
197
+
198
+
199
+ def build_parser() -> argparse.ArgumentParser:
200
+ parser = argparse.ArgumentParser(description=__doc__)
201
+ subparsers = parser.add_subparsers(dest="command", required=True)
202
+
203
+ preflight = subparsers.add_parser("preflight", help="Check that Codex image generation is available")
204
+ preflight.add_argument("--workspace", help="Paper or project workspace root")
205
+ preflight.add_argument("--json-out", help="Optional path to save the JSON result")
206
+
207
+ finalize = subparsers.add_parser("finalize", help="Finalize the accepted figure artifacts")
208
+ finalize.add_argument("--workspace", help="Paper or project workspace root")
209
+ finalize.add_argument("--best-image", required=True, help="Accepted PNG to promote to figure_final.png")
210
+ finalize.add_argument(
211
+ "--caption",
212
+ default="[Replace with a paper-ready caption].",
213
+ help="Caption text to place in latex_include.tex",
214
+ )
215
+ finalize.add_argument("--label", default="fig:replace-me", help="LaTeX figure label")
216
+ finalize.add_argument("--score", type=float, help="Final review score")
217
+ finalize.add_argument("--review-summary", help="Short review summary for review_log.json")
218
+ finalize.add_argument("--json-out", help="Optional path to save the JSON result")
219
+
220
+ verify = subparsers.add_parser("verify", help="Verify that final artifacts were emitted correctly")
221
+ verify.add_argument("--workspace", help="Paper or project workspace root")
222
+ verify.add_argument("--json-out", help="Optional path to save the JSON result")
223
+
224
+ return parser
225
+
226
+
227
+ def main() -> int:
228
+ parser = build_parser()
229
+ args = parser.parse_args()
230
+ workspace = resolve_workspace(getattr(args, "workspace", None))
231
+ json_out = Path(args.json_out).expanduser().resolve() if getattr(args, "json_out", None) else None
232
+
233
+ if args.command == "preflight":
234
+ return run_preflight(workspace, json_out=json_out)
235
+
236
+ if args.command == "finalize":
237
+ return run_finalize(
238
+ workspace,
239
+ best_image=Path(args.best_image),
240
+ caption=args.caption,
241
+ label=args.label,
242
+ score=args.score,
243
+ review_summary=args.review_summary,
244
+ json_out=json_out,
245
+ )
246
+
247
+ if args.command == "verify":
248
+ return run_verify(workspace, json_out=json_out)
249
+
250
+ parser.error(f"unknown command: {args.command}")
251
+ return 2
252
+
253
+
254
+ if __name__ == "__main__":
255
+ raise SystemExit(main())