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,703 @@
1
+ <!DOCTYPE html>
2
+ <html lang="{{LANG}}">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{TITLE}}</title>
7
+
8
+ <meta name="generator" content="ARIS render-html (academic, v1)">
9
+ <meta name="aris:source-path" content="{{SOURCE_PATH}}">
10
+ <meta name="aris:source-sha256" content="{{SOURCE_SHA256}}">
11
+ <meta name="aris:generated-at" content="{{GENERATED_AT}}">
12
+
13
+ {{HEAD_CDN}}
14
+
15
+ <style>
16
+ :root {
17
+ --bg: #fdfcf7;
18
+ --bg-soft: #f4f1ea;
19
+ --bg-code: #f8f5ec;
20
+ --ink: #1a1a1a;
21
+ --ink-soft: #4a4a4a;
22
+ --ink-muted: #6b6b6b;
23
+ --primary: #1a4a8c;
24
+ --primary-soft: #2d6cb8;
25
+ --accent: #b8390e;
26
+ --warn: #b45309;
27
+ --warn-bg: #fef3c7;
28
+ --info-bg: #dbeafe;
29
+ --good-bg: #d1fae5;
30
+ --good: #065f46;
31
+ --bad-bg: #fee2e2;
32
+ --bad: #991b1b;
33
+ --border: #d6d0c0;
34
+ --border-soft: #e8e3d5;
35
+ }
36
+
37
+ * { box-sizing: border-box; }
38
+ html { scroll-behavior: smooth; }
39
+
40
+ body {
41
+ font-family: "Source Serif Pro", "Source Serif 4", "Crimson Pro", "Georgia", "Songti SC", "STSong", serif;
42
+ line-height: 1.65;
43
+ color: var(--ink);
44
+ background: var(--bg);
45
+ margin: 0;
46
+ padding: 0;
47
+ font-size: 16px;
48
+ }
49
+
50
+ .layout {
51
+ max-width: 1280px;
52
+ margin: 0 auto;
53
+ display: grid;
54
+ grid-template-columns: 260px 1fr;
55
+ gap: 48px;
56
+ padding: 40px 32px;
57
+ }
58
+
59
+ nav.toc {
60
+ position: sticky;
61
+ top: 24px;
62
+ align-self: start;
63
+ font-size: 13px;
64
+ max-height: calc(100vh - 48px);
65
+ overflow-y: auto;
66
+ border-right: 1px solid var(--border-soft);
67
+ padding-right: 16px;
68
+ }
69
+ nav.toc h3 {
70
+ margin: 0 0 12px;
71
+ font-size: 12px;
72
+ text-transform: uppercase;
73
+ letter-spacing: 0.08em;
74
+ color: var(--ink-muted);
75
+ font-weight: 600;
76
+ }
77
+ nav.toc ol { list-style: none; padding: 0; margin: 0; counter-reset: toc; }
78
+ nav.toc ol li { margin: 5px 0; counter-increment: toc; }
79
+ nav.toc ol li::before { content: counter(toc) ". "; color: var(--ink-muted); margin-right: 4px; }
80
+ nav.toc a {
81
+ color: var(--ink-soft);
82
+ text-decoration: none;
83
+ border-bottom: 1px dotted transparent;
84
+ }
85
+ nav.toc a:hover { color: var(--primary); border-bottom-color: var(--primary); }
86
+ nav.toc ul { list-style: none; padding-left: 14px; margin: 3px 0; font-size: 12px; }
87
+ nav.toc ul li::before { content: "→ "; color: var(--border); }
88
+
89
+ main { min-width: 0; }
90
+
91
+ header.hero {
92
+ border-bottom: 3px double var(--primary);
93
+ padding-bottom: 24px;
94
+ margin-bottom: 32px;
95
+ }
96
+ header.hero .eyebrow {
97
+ color: var(--accent);
98
+ font-size: 13px;
99
+ text-transform: uppercase;
100
+ letter-spacing: 0.12em;
101
+ font-weight: 600;
102
+ margin-bottom: 8px;
103
+ }
104
+ body.aris-blog header.hero .eyebrow {
105
+ font-family: inherit;
106
+ color: var(--ink-muted);
107
+ text-transform: none;
108
+ letter-spacing: 0.01em;
109
+ font-weight: 400;
110
+ }
111
+ header.hero h1 {
112
+ font-size: 32px;
113
+ line-height: 1.2;
114
+ margin: 0 0 12px;
115
+ color: var(--ink);
116
+ font-weight: 700;
117
+ letter-spacing: -0.01em;
118
+ }
119
+ header.hero .subtitle {
120
+ font-size: 16px;
121
+ color: var(--ink-soft);
122
+ margin: 0 0 8px;
123
+ font-style: italic;
124
+ }
125
+ header.hero .byline {
126
+ font-size: 14px;
127
+ color: var(--ink-soft);
128
+ margin: 0 0 20px;
129
+ }
130
+ header.hero .byline strong {
131
+ color: var(--ink);
132
+ font-weight: 600;
133
+ }
134
+ header.hero .meta {
135
+ display: flex;
136
+ gap: 20px;
137
+ flex-wrap: wrap;
138
+ font-size: 12px;
139
+ color: var(--ink-muted);
140
+ border-top: 1px solid var(--border-soft);
141
+ padding-top: 14px;
142
+ }
143
+ header.hero .meta span strong { color: var(--ink-soft); }
144
+ header.hero .meta code {
145
+ font-family: "JetBrains Mono", "SF Mono", "Menlo", "Consolas", monospace;
146
+ font-size: 11px;
147
+ background: var(--bg-soft);
148
+ padding: 1px 5px;
149
+ border-radius: 3px;
150
+ border: 1px solid var(--border-soft);
151
+ }
152
+
153
+ h2 {
154
+ font-size: 24px;
155
+ margin: 44px 0 14px;
156
+ padding-bottom: 8px;
157
+ border-bottom: 1px solid var(--border);
158
+ color: var(--ink);
159
+ font-weight: 700;
160
+ }
161
+ h2 .num { color: var(--primary); font-weight: 600; margin-right: 8px; }
162
+ h3 { font-size: 19px; margin: 28px 0 10px; color: var(--primary); font-weight: 600; }
163
+ h4 { font-size: 16px; margin: 20px 0 8px; color: var(--ink); font-weight: 600; }
164
+
165
+ p { margin: 10px 0; }
166
+ ul, ol { padding-left: 22px; margin: 10px 0; }
167
+ ul li, ol li { margin: 4px 0; }
168
+ ul li::marker { color: var(--primary); }
169
+
170
+ strong { color: var(--accent); font-weight: 600; }
171
+ em { color: var(--ink-soft); }
172
+
173
+ a { color: var(--primary); }
174
+ a:hover { color: var(--accent); }
175
+
176
+ code:not(.hljs) {
177
+ font-family: "JetBrains Mono", "SF Mono", "Menlo", "Consolas", monospace;
178
+ font-size: 0.86em;
179
+ background: var(--bg-code);
180
+ padding: 1px 5px;
181
+ border-radius: 3px;
182
+ border: 1px solid var(--border-soft);
183
+ color: var(--accent);
184
+ }
185
+
186
+ pre {
187
+ background: #fafaf6;
188
+ border: 1px solid var(--border);
189
+ border-left: 4px solid var(--primary);
190
+ padding: 0;
191
+ overflow-x: auto;
192
+ border-radius: 4px;
193
+ margin: 14px 0;
194
+ }
195
+ pre code, pre code.hljs {
196
+ background: transparent !important;
197
+ display: block;
198
+ padding: 14px 18px !important;
199
+ font-size: 13px;
200
+ line-height: 1.55;
201
+ font-family: "JetBrains Mono", "SF Mono", "Menlo", monospace;
202
+ color: var(--ink);
203
+ }
204
+ pre.diagram {
205
+ background: #f9f6ed;
206
+ border-left: 4px solid var(--accent);
207
+ font-size: 12.5px;
208
+ line-height: 1.4;
209
+ }
210
+
211
+ .callout {
212
+ margin: 16px 0;
213
+ padding: 12px 16px;
214
+ border-radius: 4px;
215
+ border-left: 4px solid;
216
+ font-size: 15px;
217
+ }
218
+ .callout-title {
219
+ font-weight: 600;
220
+ margin-bottom: 6px;
221
+ font-size: 12px;
222
+ text-transform: uppercase;
223
+ letter-spacing: 0.06em;
224
+ }
225
+ .callout-info { background: var(--info-bg); border-left-color: var(--primary); }
226
+ .callout-info .callout-title { color: var(--primary); }
227
+ .callout-warn { background: var(--warn-bg); border-left-color: var(--warn); }
228
+ .callout-warn .callout-title { color: var(--warn); }
229
+ .callout-good { background: var(--good-bg); border-left-color: var(--good); }
230
+ .callout-good .callout-title { color: var(--good); }
231
+ .callout-bad { background: var(--bad-bg); border-left-color: var(--bad); }
232
+ .callout-bad .callout-title { color: var(--bad); }
233
+
234
+ table {
235
+ width: 100%;
236
+ border-collapse: collapse;
237
+ margin: 16px 0;
238
+ font-size: 14px;
239
+ border: 1px solid var(--border);
240
+ border-radius: 4px;
241
+ overflow: hidden;
242
+ }
243
+ thead { background: var(--primary); color: white; }
244
+ th, td {
245
+ text-align: left;
246
+ padding: 9px 12px;
247
+ border-bottom: 1px solid var(--border-soft);
248
+ vertical-align: top;
249
+ }
250
+ th { font-weight: 600; font-size: 13px; letter-spacing: 0.02em; }
251
+ tr:last-child td { border-bottom: none; }
252
+ tbody tr:nth-child(even) { background: var(--bg-soft); }
253
+
254
+ details.qa, details {
255
+ background: white;
256
+ border: 1px solid var(--border-soft);
257
+ border-radius: 6px;
258
+ margin: 10px 0;
259
+ padding: 0;
260
+ }
261
+ details summary {
262
+ cursor: pointer;
263
+ padding: 10px 14px;
264
+ font-weight: 600;
265
+ font-size: 14px;
266
+ color: var(--primary);
267
+ list-style: none;
268
+ user-select: none;
269
+ }
270
+ details summary::-webkit-details-marker { display: none; }
271
+ details summary::before {
272
+ content: "▸ ";
273
+ margin-right: 4px;
274
+ display: inline-block;
275
+ transition: transform 0.15s;
276
+ }
277
+ details[open] summary::before { transform: rotate(90deg); }
278
+ details[open] summary { border-bottom: 1px solid var(--border-soft); }
279
+ details > :not(summary) { padding: 10px 14px; }
280
+ details p:first-of-type { margin-top: 8px; }
281
+
282
+ mjx-container[display="true"] { margin: 12px 0 !important; }
283
+
284
+ footer.aris-footer {
285
+ margin-top: 60px;
286
+ padding-top: 20px;
287
+ border-top: 1px solid var(--border);
288
+ font-size: 12px;
289
+ color: var(--ink-muted);
290
+ }
291
+ footer.aris-footer a { color: var(--ink-muted); border-bottom: 1px dotted var(--border); }
292
+
293
+ @media (max-width: 900px) {
294
+ .layout { grid-template-columns: 1fr; gap: 20px; padding: 20px 16px; }
295
+ nav.toc {
296
+ position: static;
297
+ max-height: none;
298
+ border-right: none;
299
+ border-bottom: 1px solid var(--border-soft);
300
+ padding-right: 0;
301
+ padding-bottom: 14px;
302
+ }
303
+ header.hero h1 { font-size: 24px; }
304
+ h2 { font-size: 20px; }
305
+ }
306
+ @media print {
307
+ nav.toc { display: none; }
308
+ .layout { grid-template-columns: 1fr; padding: 0; }
309
+ body { background: white; }
310
+ header.hero { border-bottom-color: var(--ink); }
311
+ #cite-pop, dialog.lightbox { display: none !important; }
312
+ }
313
+
314
+ /* --- P0 polish: TOC scrollspy active state ---------------------------- */
315
+ nav.toc a.active {
316
+ color: var(--accent);
317
+ font-weight: 600;
318
+ border-bottom-color: var(--accent);
319
+ }
320
+
321
+ /* --- P0 polish: Long-code auto-collapse ------------------------------- */
322
+ details.code-card {
323
+ margin: 14px 0;
324
+ background: #fafaf6;
325
+ border: 1px solid var(--border);
326
+ border-left: 4px solid var(--primary);
327
+ border-radius: 4px;
328
+ }
329
+ details.code-card > summary {
330
+ cursor: pointer;
331
+ padding: 8px 14px;
332
+ color: var(--ink-soft);
333
+ font-size: 13px;
334
+ font-family: "JetBrains Mono", "SF Mono", monospace;
335
+ list-style: none;
336
+ user-select: none;
337
+ }
338
+ details.code-card > summary::-webkit-details-marker { display: none; }
339
+ details.code-card > summary::before { content: none; }
340
+ details.code-card > pre {
341
+ margin: 0;
342
+ padding: 0;
343
+ border: none;
344
+ border-left: none;
345
+ border-radius: 0;
346
+ }
347
+ @media print {
348
+ details.code-card { border: 1px solid #ccc; background: white; }
349
+ details.code-card > summary { display: none !important; }
350
+ details.code-card > pre { border: 1px solid #ddd; border-radius: 4px; background: white; }
351
+ }
352
+
353
+ /* --- P0 polish: Paper popover ([[ref]] popups) ------------------------ */
354
+ [data-ref] {
355
+ color: var(--primary);
356
+ border-bottom: 1px dotted var(--primary);
357
+ cursor: pointer;
358
+ white-space: nowrap;
359
+ }
360
+ [data-ref]:hover { background: rgba(26, 74, 140, 0.08); }
361
+ #cite-pop {
362
+ position: fixed;
363
+ width: 360px;
364
+ max-width: calc(100vw - 32px);
365
+ background: white;
366
+ border: 1px solid var(--border);
367
+ border-radius: 6px;
368
+ padding: 14px 16px;
369
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
370
+ font-size: 13px;
371
+ line-height: 1.5;
372
+ z-index: 1000;
373
+ }
374
+ #cite-pop[hidden] { display: none; }
375
+ #cite-pop .cp-title {
376
+ font-weight: 600;
377
+ color: var(--ink);
378
+ margin-bottom: 4px;
379
+ padding-right: 24px;
380
+ }
381
+ #cite-pop .cp-meta {
382
+ color: var(--ink-muted);
383
+ font-size: 12px;
384
+ margin-bottom: 6px;
385
+ }
386
+ #cite-pop .cp-key {
387
+ color: var(--accent);
388
+ font-style: italic;
389
+ margin-bottom: 8px;
390
+ }
391
+ #cite-pop .cp-link {
392
+ display: inline-block;
393
+ color: var(--primary);
394
+ font-weight: 500;
395
+ }
396
+ #cite-pop .cp-close {
397
+ position: absolute;
398
+ top: 6px;
399
+ right: 10px;
400
+ background: none;
401
+ border: none;
402
+ cursor: pointer;
403
+ font-size: 16px;
404
+ color: var(--ink-muted);
405
+ }
406
+
407
+ /* --- P0 polish: Figure lightbox (native <dialog>) --------------------- */
408
+ dialog.lightbox {
409
+ border: none;
410
+ padding: 0;
411
+ background: rgba(0, 0, 0, 0.92);
412
+ width: 96vw;
413
+ height: 96vh;
414
+ max-width: 96vw;
415
+ max-height: 96vh;
416
+ }
417
+ dialog.lightbox::backdrop { background: rgba(0, 0, 0, 0.92); }
418
+ dialog.lightbox .lb-inner {
419
+ display: flex;
420
+ flex-direction: column;
421
+ align-items: center;
422
+ justify-content: center;
423
+ height: 100%;
424
+ gap: 16px;
425
+ position: relative;
426
+ }
427
+ dialog.lightbox img {
428
+ max-width: 90vw;
429
+ max-height: 84vh;
430
+ object-fit: contain;
431
+ cursor: zoom-out;
432
+ }
433
+ dialog.lightbox figcaption {
434
+ color: rgba(255, 255, 255, 0.85);
435
+ font-size: 14px;
436
+ text-align: center;
437
+ max-width: 700px;
438
+ }
439
+ dialog.lightbox .lb-close {
440
+ position: absolute;
441
+ top: 16px;
442
+ right: 20px;
443
+ background: none;
444
+ border: none;
445
+ color: white;
446
+ font-size: 28px;
447
+ cursor: pointer;
448
+ }
449
+
450
+ /* --- P0 polish: blog/talk mode active-H2 highlight (opt-in) ----------- */
451
+ body.aris-blog h2 { scroll-margin-top: 24px; }
452
+ body.aris-blog h2.aris-active-h2 {
453
+ background: linear-gradient(to right, rgba(26, 74, 140, 0.06), transparent);
454
+ border-radius: 4px;
455
+ padding-left: 12px;
456
+ margin-left: -12px;
457
+ }
458
+ </style>
459
+ </head>
460
+ <body class="{{BODY_CLASS}}">
461
+ <div class="layout">
462
+
463
+ <nav class="toc">
464
+ <h3>{{TOC_LABEL}}</h3>
465
+ {{TOC_HTML}}
466
+ </nav>
467
+
468
+ <main>
469
+ <header class="hero">
470
+ {{EYEBROW_BLOCK}}
471
+ <h1>{{TITLE}}</h1>
472
+ {{SUBTITLE_BLOCK}}
473
+ {{BYLINE_BLOCK}}
474
+ <div class="meta">
475
+ <span><strong>Source:</strong> <code>{{SOURCE_PATH}}</code></span>
476
+ <span><strong>SHA256:</strong> <code>{{SOURCE_SHA256_SHORT}}</code></span>
477
+ <span><strong>Rendered:</strong> {{GENERATED_AT}}</span>
478
+ {{EXTRA_META}}
479
+ </div>
480
+ </header>
481
+
482
+ {{BODY_HTML}}
483
+
484
+ <footer class="aris-footer">
485
+ Generated by <a href="https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep/blob/main/skills/render-html/SKILL.md">ARIS <code>/render-html</code></a> ·
486
+ source path <code>{{SOURCE_PATH}}</code> ·
487
+ SHA256 <code>{{SOURCE_SHA256_SHORT}}</code> ·
488
+ generated at {{GENERATED_AT}}.
489
+ This is a generated view — edit the source Markdown, then re-render.
490
+ </footer>
491
+ </main>
492
+
493
+ </div>
494
+
495
+ <!-- P0 polish: paper popover host (populated by IIFE below) -->
496
+ <div id="cite-pop" hidden role="dialog" aria-labelledby="cite-pop-title">
497
+ <button class="cp-close" type="button" aria-label="Close">×</button>
498
+ <div class="cp-content"></div>
499
+ </div>
500
+
501
+ <!-- P0 polish: figure lightbox (native <dialog>, graceful fallback) -->
502
+ <dialog class="lightbox" id="figure-lightbox" aria-label="Figure detail">
503
+ <div class="lb-inner">
504
+ <button class="lb-close" type="button" aria-label="Close">×</button>
505
+ <img alt="" />
506
+ <figcaption></figcaption>
507
+ </div>
508
+ </dialog>
509
+
510
+ <!-- P0 polish: paper registry sidecar, embedded by render_html.py (--papers) -->
511
+ <script>window.PAPER_REGISTRY = {{PAPER_REGISTRY_JSON}};</script>
512
+
513
+ <!-- P0 polish: interactive enhancements (TOC scrollspy, code-card auto-collapse,
514
+ paper popovers, figure lightbox, print-restore for <details>, blog-mode H2). -->
515
+ <script>
516
+ (function () {
517
+ "use strict";
518
+
519
+ function escapeHtml(s) {
520
+ return String(s).replace(/[&<>"']/g, function (c) {
521
+ return ({"&":"&amp;","<":"&lt;",">":"&gt;","\"":"&quot;","'":"&#39;"})[c];
522
+ });
523
+ }
524
+
525
+ // --- Feature 5: Print degradation fix ---------------------------------
526
+ // Force every <details> open during print, restore the pre-print state after.
527
+ var _stashOpen = [];
528
+ var _printing = false;
529
+ window.addEventListener("beforeprint", function () {
530
+ if (_printing) return; // guard against multi-fire (Chrome print preview)
531
+ _printing = true;
532
+ _stashOpen = [];
533
+ document.querySelectorAll("details:not([open])").forEach(function (d) {
534
+ _stashOpen.push(d);
535
+ d.open = true;
536
+ });
537
+ });
538
+ window.addEventListener("afterprint", function () {
539
+ _stashOpen.forEach(function (d) { if (d.isConnected) d.open = false; });
540
+ _stashOpen = [];
541
+ _printing = false;
542
+ });
543
+
544
+ // --- Feature 3: TOC scrollspy -----------------------------------------
545
+ var tocLinks = [].slice.call(document.querySelectorAll("nav.toc a"));
546
+ var headings = tocLinks.map(function (a) {
547
+ var id = a.getAttribute("href").replace(/^#/, "");
548
+ return document.getElementById(id);
549
+ }).filter(Boolean);
550
+ if (headings.length && typeof IntersectionObserver !== "undefined") {
551
+ var linkById = new Map();
552
+ headings.forEach(function (h, i) { linkById.set(h.id, tocLinks[i]); });
553
+ var io = new IntersectionObserver(function (entries) {
554
+ entries.forEach(function (en) {
555
+ if (!en.isIntersecting) return;
556
+ tocLinks.forEach(function (l) { l.classList.remove("active"); });
557
+ var lk = linkById.get(en.target.id);
558
+ if (lk) lk.classList.add("active");
559
+ });
560
+ }, { rootMargin: "-15% 0px -75% 0px" });
561
+ headings.forEach(function (h) { io.observe(h); });
562
+ }
563
+
564
+ // --- Feature 1: Long-code auto-collapse -------------------------------
565
+ var COLLAPSE_THRESHOLD = {{COLLAPSE_CODE_MIN}};
566
+
567
+ function wrapCodeCard(pre, openByDefault) {
568
+ if (!pre || pre.closest("details.code-card")) return;
569
+ var code = pre.querySelector("code");
570
+ if (!code) return;
571
+ var lines = code.textContent.replace(/\n+$/, "").split("\n").length;
572
+ var det = document.createElement("details");
573
+ det.className = "code-card";
574
+ det.open = openByDefault;
575
+ var sum = document.createElement("summary");
576
+ function updateSummary() {
577
+ sum.textContent = (det.open ? "▾ Collapse code · " : "▸ Expand code · ") + lines + " lines";
578
+ }
579
+ updateSummary();
580
+ det.addEventListener("toggle", updateSummary);
581
+ pre.parentNode.insertBefore(det, pre);
582
+ det.appendChild(sum);
583
+ det.appendChild(pre);
584
+ }
585
+
586
+ // Honor explicit per-block flags first.
587
+ document.querySelectorAll("pre[data-collapse]").forEach(function (pre) {
588
+ var flag = pre.getAttribute("data-collapse");
589
+ if (flag === "collapsed") wrapCodeCard(pre, false);
590
+ // "open" → leave fully expanded, do not wrap.
591
+ });
592
+ // Then auto-wrap long unflagged blocks.
593
+ document.querySelectorAll("pre > code").forEach(function (code) {
594
+ var pre = code.closest("pre");
595
+ if (!pre || pre.closest("details") || pre.hasAttribute("data-collapse")) return;
596
+ var lines = code.textContent.replace(/\n+$/, "").split("\n").length;
597
+ if (lines >= COLLAPSE_THRESHOLD) wrapCodeCard(pre, false);
598
+ });
599
+
600
+ // --- Feature 10: Figure lightbox --------------------------------------
601
+ var lightbox = document.getElementById("figure-lightbox");
602
+ if (lightbox) {
603
+ var lbImg = lightbox.querySelector("img");
604
+ var lbCap = lightbox.querySelector("figcaption");
605
+ var lbClose = lightbox.querySelector(".lb-close");
606
+ function openLightbox(srcImg) {
607
+ lbImg.src = srcImg.src;
608
+ lbImg.alt = srcImg.alt || "";
609
+ var cap = srcImg.closest("figure") ? srcImg.closest("figure").querySelector("figcaption") : null;
610
+ lbCap.textContent = cap ? cap.textContent : "";
611
+ lbCap.hidden = !cap;
612
+ if (typeof lightbox.showModal === "function") lightbox.showModal();
613
+ else lightbox.hidden = false;
614
+ }
615
+ function closeLightbox() {
616
+ if (typeof lightbox.close === "function") lightbox.close();
617
+ else lightbox.hidden = true;
618
+ }
619
+ document.querySelectorAll("main figure img, main > p > img").forEach(function (img) {
620
+ if (img.closest("dialog")) return;
621
+ img.style.cursor = "zoom-in";
622
+ img.addEventListener("click", function () { openLightbox(img); });
623
+ });
624
+ if (lbClose) lbClose.addEventListener("click", closeLightbox);
625
+ lightbox.addEventListener("click", function (e) {
626
+ // Backdrop click closes; clicks inside .lb-inner do not bubble here.
627
+ if (e.target === lightbox) closeLightbox();
628
+ });
629
+ }
630
+
631
+ // --- Feature 2: Paper popover -----------------------------------------
632
+ var PAPERS = window.PAPER_REGISTRY || {};
633
+ var pop = document.getElementById("cite-pop");
634
+ var popContent = pop ? pop.querySelector(".cp-content") : null;
635
+ var popClose = pop ? pop.querySelector(".cp-close") : null;
636
+ var popTrigger = null;
637
+
638
+ function showPopover(el) {
639
+ var key = el.dataset.ref;
640
+ var info = PAPERS[key];
641
+ if (!info || !pop || !popContent) return;
642
+ popContent.innerHTML =
643
+ '<div class="cp-title" id="cite-pop-title">' + escapeHtml(info.title || key) + '</div>' +
644
+ (info.authors
645
+ ? '<div class="cp-meta">' + escapeHtml(info.authors) +
646
+ (info.date ? ' · ' + escapeHtml(info.date) : '') +
647
+ (info.inst ? ' · ' + escapeHtml(info.inst) : '') + '</div>'
648
+ : '') +
649
+ (info.key ? '<div class="cp-key">' + escapeHtml(info.key) + '</div>' : '') +
650
+ (info.arxiv
651
+ ? '<a class="cp-link" href="https://arxiv.org/abs/' + encodeURIComponent(info.arxiv) +
652
+ '" target="_blank" rel="noopener">arXiv ' + escapeHtml(info.arxiv) + ' ↗</a>'
653
+ : '');
654
+ var r = el.getBoundingClientRect();
655
+ pop.hidden = false; // unhide first so offsetHeight is measurable
656
+ var margin = 16;
657
+ var popWidth = Math.min(360, Math.max(0, window.innerWidth - margin * 2));
658
+ var popHeight = Math.min(pop.offsetHeight || 200, Math.max(0, window.innerHeight - margin * 2));
659
+ pop.style.left = Math.max(margin, Math.min(r.left, window.innerWidth - popWidth - margin)) + "px";
660
+ pop.style.top = Math.max(margin, Math.min(r.bottom + 8, window.innerHeight - popHeight - margin)) + "px";
661
+ popTrigger = el;
662
+ if (popClose) popClose.focus();
663
+ }
664
+ function hidePopover() {
665
+ if (pop) pop.hidden = true;
666
+ if (popTrigger) popTrigger.focus();
667
+ popTrigger = null;
668
+ }
669
+ document.querySelectorAll("[data-ref]").forEach(function (el) {
670
+ el.setAttribute("tabindex", "0");
671
+ el.setAttribute("role", "button");
672
+ el.addEventListener("click", function (e) { e.stopPropagation(); showPopover(el); });
673
+ el.addEventListener("keydown", function (e) {
674
+ if (e.key === "Enter" || e.key === " ") { e.preventDefault(); showPopover(el); }
675
+ });
676
+ });
677
+ if (popClose) popClose.addEventListener("click", hidePopover);
678
+ document.addEventListener("click", function (e) {
679
+ if (pop && !pop.hidden && !pop.contains(e.target) && !e.target.matches("[data-ref]")) hidePopover();
680
+ });
681
+ document.addEventListener("keydown", function (e) {
682
+ if (e.key === "Escape" && pop && !pop.hidden) hidePopover();
683
+ });
684
+
685
+ // --- Feature 7: Blog-mode active-H2 highlight (opt-in) ----------------
686
+ if (document.body.classList.contains("aris-blog")) {
687
+ var h2s = [].slice.call(document.querySelectorAll("main h2"));
688
+ if (h2s.length && typeof IntersectionObserver !== "undefined") {
689
+ var io2 = new IntersectionObserver(function (entries) {
690
+ entries.forEach(function (en) {
691
+ if (en.isIntersecting) {
692
+ h2s.forEach(function (h) { h.classList.remove("aris-active-h2"); });
693
+ en.target.classList.add("aris-active-h2");
694
+ }
695
+ });
696
+ }, { rootMargin: "-15% 0px -75% 0px" });
697
+ h2s.forEach(function (h) { io2.observe(h); });
698
+ }
699
+ }
700
+ })();
701
+ </script>
702
+ </body>
703
+ </html>