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,477 @@
1
+ #!/usr/bin/env bash
2
+ # save_trace.sh — Save a reviewer call trace to .aris/traces/
3
+ # Part of the ARIS Review Tracing Protocol (shared-references/review-tracing.md)
4
+ #
5
+ # Policy C (forensic helper). SKILL callers MUST resolve the helper path
6
+ # through the canonical chain documented in
7
+ # `skills/shared-references/integration-contract.md` §2; the SKILL bash
8
+ # block then runs `bash "$TRACE_HELPER" --skill ... --purpose ... --model ...`.
9
+ # Do NOT hard-code `bash tools/save_trace.sh` from a SKILL; the path is
10
+ # only stable from inside the ARIS repo (manual smoke testing) and breaks
11
+ # silently in downstream user projects that have only `.aris/tools/`,
12
+ # `$ARIS_REPO/tools/` (env var or manifest), or `$ARIS_REPO/tools/` resolved
13
+ # via the global pointer file `~/.aris/repo` (#366).
14
+ #
15
+ # Usage (from inside the ARIS repo, smoke test):
16
+ # bash tools/save_trace.sh \
17
+ # --skill "auto-review-loop" \
18
+ # --purpose "round-1-review" \
19
+ # --model "gpt-5.6-sol" \
20
+ # --effort "ultra" \
21
+ # --thread-id "019d8fe0-..." \
22
+ # --prompt-file /tmp/prompt.txt \
23
+ # --response-file /tmp/response.txt
24
+ #
25
+ # Or with inline content (for shorter prompts/responses):
26
+ # bash tools/save_trace.sh \
27
+ # --skill "experiment-audit" \
28
+ # --purpose "code-audit" \
29
+ # --model "gpt-5.6-sol" \
30
+ # --effort "ultra" \
31
+ # --thread-id "019d8fe0-..." \
32
+ # --prompt "Review this code..." \
33
+ # --response "Score: 7/10..."
34
+
35
+ set -euo pipefail
36
+
37
+ # --- Parse arguments ---
38
+ SKILL="" PURPOSE="" MODEL="" THREAD_ID="" PROMPT="" RESPONSE=""
39
+ PROMPT_FILE="" RESPONSE_FILE="" TRACE_MODE="${ARIS_TRACE_MODE:-full}" EFFORT="" FALLBACK_REASON="" STATUS="ok"
40
+ BACKEND="" TOOL="" EXECUTOR="" EXECUTOR_MODEL="" EXECUTOR_FAMILY="" REVIEWER_PROFILE="" REVIEWER_FAMILY="" INDEPENDENCE_VERIFIED=""
41
+ REQUESTED_REVIEWER_MODEL="" REPORTED_REVIEWER_MODEL="" MEMORY_HASH=""
42
+ EXECUTOR_MODEL_SOURCE="unavailable" REVIEWER_MODEL_SOURCE="unavailable" FAMILY_RELATION="unknown"
43
+ NATIVE_EVIDENCE="" NATIVE_EVIDENCE_ID="" NATIVE_EVIDENCE_PATH=""
44
+
45
+ while [[ $# -gt 0 ]]; do
46
+ case "$1" in
47
+ --skill) SKILL="$2"; shift 2 ;;
48
+ --purpose) PURPOSE="$2"; shift 2 ;;
49
+ --model) MODEL="$2"; shift 2 ;;
50
+ --effort) EFFORT="$2"; shift 2 ;;
51
+ --fallback-reason) FALLBACK_REASON="$2"; shift 2 ;;
52
+ --status) STATUS="$2"; shift 2 ;;
53
+ --thread-id) THREAD_ID="$2"; shift 2 ;;
54
+ --prompt) PROMPT="$2"; shift 2 ;;
55
+ --response) RESPONSE="$2"; shift 2 ;;
56
+ --prompt-file) PROMPT_FILE="$2"; shift 2 ;;
57
+ --response-file) RESPONSE_FILE="$2"; shift 2 ;;
58
+ --trace-mode) TRACE_MODE="$2"; shift 2 ;;
59
+ --backend) BACKEND="$2"; shift 2 ;;
60
+ --tool) TOOL="$2"; shift 2 ;;
61
+ --executor) EXECUTOR="$2"; shift 2 ;;
62
+ --executor-model) EXECUTOR_MODEL="$2"; shift 2 ;;
63
+ --executor-family) EXECUTOR_FAMILY="$2"; shift 2 ;;
64
+ --reviewer-profile) REVIEWER_PROFILE="$2"; shift 2 ;;
65
+ --reviewer-family) REVIEWER_FAMILY="$2"; shift 2 ;;
66
+ --requested-reviewer-model) REQUESTED_REVIEWER_MODEL="$2"; shift 2 ;;
67
+ --reported-reviewer-model) REPORTED_REVIEWER_MODEL="$2"; shift 2 ;;
68
+ --independence-verified) INDEPENDENCE_VERIFIED="$2"; shift 2 ;;
69
+ --memory-hash) MEMORY_HASH="$2"; shift 2 ;;
70
+ --native-evidence) NATIVE_EVIDENCE="$2"; shift 2 ;;
71
+ *) echo "Unknown arg: $1" >&2; exit 1 ;;
72
+ esac
73
+ done
74
+
75
+ # --- Validate ---
76
+ if [[ -z "$SKILL" || -z "$PURPOSE" ]]; then
77
+ echo "Error: --skill and --purpose are required" >&2
78
+ exit 1
79
+ fi
80
+
81
+ if [[ "$TRACE_MODE" == "off" ]]; then
82
+ exit 0
83
+ fi
84
+
85
+ # Derive provenance from model identities, never from caller-supplied family or
86
+ # independence labels. The legacy family/independence flags remain accepted so
87
+ # older callers do not break, but they are only consistency hints.
88
+ derive_model_family() {
89
+ ST_MODEL_NAME="$1" python3 -c '
90
+ import os, re
91
+
92
+ name = (os.environ.get("ST_MODEL_NAME") or "").strip().lower()
93
+ families = set()
94
+ if re.search(r"(^|[^a-z0-9])(gpt|chatgpt|codex|oracle|o1|o3|o4)([^a-z0-9]|$)", name):
95
+ families.add("openai")
96
+ if re.search(r"(^|[^a-z0-9])(claude|sonnet|opus|haiku|anthropic)([^a-z0-9]|$)", name):
97
+ families.add("anthropic")
98
+ if re.search(r"(^|[^a-z0-9])(gemini|google)([^a-z0-9]|$)", name):
99
+ families.add("google")
100
+ print(next(iter(families)) if len(families) == 1 else "unknown")
101
+ '
102
+ }
103
+
104
+ lowercase() {
105
+ printf '%s' "$1" | tr '[:upper:]' '[:lower:]'
106
+ }
107
+
108
+ CALLER_EXECUTOR_FAMILY="$EXECUTOR_FAMILY"
109
+ CALLER_REVIEWER_FAMILY="$REVIEWER_FAMILY"
110
+ CALLER_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED"
111
+
112
+ if [[ "$(lowercase "$BACKEND")" == "copilot-native" ]]; then
113
+ [[ -n "$TOOL" ]] || TOOL="task(agent_type=rubber-duck)"
114
+ [[ -n "$EXECUTOR" ]] || EXECUTOR="copilot"
115
+ if [[ -z "$NATIVE_EVIDENCE" ]]; then
116
+ if [[ "$(lowercase "$STATUS")" != "error" ]]; then
117
+ echo "Error: successful --backend copilot-native traces require --native-evidence" >&2
118
+ exit 1
119
+ fi
120
+ # A dispatch can fail before any reviewer lifecycle/evidence exists. Keep
121
+ # that attempt traceable, but never promote caller model claims to host
122
+ # evidence or verified independence.
123
+ if [[ -n "$EXECUTOR_MODEL" ]]; then
124
+ EXECUTOR_MODEL_SOURCE="caller-declared"
125
+ fi
126
+ else
127
+ NATIVE_HELPER="$(dirname "$0")/copilot_native_evidence.py"
128
+ if [[ ! -f "$NATIVE_HELPER" ]]; then
129
+ echo "Error: copilot_native_evidence.py is unavailable beside save_trace.sh" >&2
130
+ exit 1
131
+ fi
132
+ NATIVE_JSON=$(python3 "$NATIVE_HELPER" validate --evidence "$NATIVE_EVIDENCE") || {
133
+ echo "Error: native Copilot evidence validation failed" >&2
134
+ exit 1
135
+ }
136
+ NATIVE_EXECUTOR_MODEL=$(ST_NATIVE_JSON="$NATIVE_JSON" python3 -c 'import json, os; print(json.loads(os.environ["ST_NATIVE_JSON"])["executor_model"], end="")')
137
+ NATIVE_REVIEWER_MODEL=$(ST_NATIVE_JSON="$NATIVE_JSON" python3 -c 'import json, os; print(json.loads(os.environ["ST_NATIVE_JSON"])["reviewer_model"], end="")')
138
+ NATIVE_EVIDENCE_ID=$(ST_NATIVE_JSON="$NATIVE_JSON" python3 -c 'import json, os; print(json.loads(os.environ["ST_NATIVE_JSON"])["evidence_id"], end="")')
139
+ NATIVE_RESPONSE_PATH=$(ST_NATIVE_JSON="$NATIVE_JSON" python3 -c 'import json, os; print(json.loads(os.environ["ST_NATIVE_JSON"])["response_path"], end="")')
140
+ if [[ -n "$EXECUTOR_MODEL" && "$EXECUTOR_MODEL" != "$NATIVE_EXECUTOR_MODEL" ]]; then
141
+ echo "Error: --executor-model disagrees with native host-event evidence" >&2
142
+ exit 1
143
+ fi
144
+ if [[ -n "$REPORTED_REVIEWER_MODEL" && "$REPORTED_REVIEWER_MODEL" != "$NATIVE_REVIEWER_MODEL" ]]; then
145
+ echo "Error: --reported-reviewer-model disagrees with native host-event evidence" >&2
146
+ exit 1
147
+ fi
148
+ if [[ -n "$MODEL" && "$MODEL" != "$NATIVE_REVIEWER_MODEL" ]]; then
149
+ echo "Error: --model disagrees with native host-event evidence" >&2
150
+ exit 1
151
+ fi
152
+ EXECUTOR_MODEL="$NATIVE_EXECUTOR_MODEL"
153
+ REPORTED_REVIEWER_MODEL="$NATIVE_REVIEWER_MODEL"
154
+ MODEL="$NATIVE_REVIEWER_MODEL"
155
+ RESPONSE_FILE="$NATIVE_RESPONSE_PATH"
156
+ EXECUTOR_MODEL_SOURCE="host-session-event"
157
+ REVIEWER_MODEL_SOURCE="host-session-event"
158
+ NATIVE_EVIDENCE_PATH=$(ST_PATH="$NATIVE_EVIDENCE" python3 -c 'import os; print(os.path.abspath(os.environ["ST_PATH"]))')
159
+ fi
160
+ elif [[ -n "$NATIVE_EVIDENCE" ]]; then
161
+ echo "Error: --native-evidence is valid only with --backend copilot-native" >&2
162
+ exit 1
163
+ elif [[ -n "$EXECUTOR_MODEL" ]]; then
164
+ # Copilot CLI exposes no stable parent-session attestation to this child
165
+ # helper. The value is useful for routing, but remains caller-declared.
166
+ EXECUTOR_MODEL_SOURCE="caller-declared"
167
+ fi
168
+
169
+ EFFECTIVE_REVIEWER_MODEL="$REPORTED_REVIEWER_MODEL"
170
+ case "$(lowercase "$EFFECTIVE_REVIEWER_MODEL")" in
171
+ ""|unknown|unavailable|none|null)
172
+ EFFECTIVE_REVIEWER_MODEL="${REQUESTED_REVIEWER_MODEL:-$MODEL}"
173
+ [[ -n "$EFFECTIVE_REVIEWER_MODEL" ]] && REVIEWER_MODEL_SOURCE="requested"
174
+ ;;
175
+ *)
176
+ if [[ "$(lowercase "$BACKEND")" != "copilot-native" ]]; then
177
+ REVIEWER_MODEL_SOURCE="backend-reported"
178
+ fi
179
+ ;;
180
+ esac
181
+
182
+ EXECUTOR_FAMILY="$(derive_model_family "$EXECUTOR_MODEL")"
183
+ REVIEWER_FAMILY="$(derive_model_family "$EFFECTIVE_REVIEWER_MODEL")"
184
+
185
+ if [[ -n "$CALLER_EXECUTOR_FAMILY" && "$(lowercase "$CALLER_EXECUTOR_FAMILY")" != "$EXECUTOR_FAMILY" ]]; then
186
+ echo "warning: ignoring executor family '$CALLER_EXECUTOR_FAMILY'; model '$EXECUTOR_MODEL' derives as '$EXECUTOR_FAMILY'" >&2
187
+ fi
188
+ if [[ -n "$CALLER_REVIEWER_FAMILY" && "$(lowercase "$CALLER_REVIEWER_FAMILY")" != "$REVIEWER_FAMILY" ]]; then
189
+ echo "warning: ignoring reviewer family '$CALLER_REVIEWER_FAMILY'; model '$EFFECTIVE_REVIEWER_MODEL' derives as '$REVIEWER_FAMILY'" >&2
190
+ fi
191
+
192
+ if [[ "$EXECUTOR_FAMILY" == "unknown" || "$REVIEWER_FAMILY" == "unknown" ]]; then
193
+ FAMILY_RELATION="unknown"
194
+ INDEPENDENCE_VERIFIED="unverified"
195
+ elif [[ "$EXECUTOR_FAMILY" != "$REVIEWER_FAMILY" ]]; then
196
+ FAMILY_RELATION="different"
197
+ if [[ "$(lowercase "$BACKEND")" == "copilot-native" \
198
+ && "$EXECUTOR_MODEL_SOURCE" == "host-session-event" \
199
+ && "$REVIEWER_MODEL_SOURCE" == "host-session-event" ]]; then
200
+ INDEPENDENCE_VERIFIED="true"
201
+ else
202
+ # A different pair of model strings is a routing fact, not independent
203
+ # proof of the parent executor's actual model.
204
+ INDEPENDENCE_VERIFIED="unverified"
205
+ fi
206
+ else
207
+ FAMILY_RELATION="same"
208
+ INDEPENDENCE_VERIFIED="false"
209
+ fi
210
+ if [[ -n "$CALLER_INDEPENDENCE_VERIFIED" && "$(lowercase "$CALLER_INDEPENDENCE_VERIFIED")" != "$INDEPENDENCE_VERIFIED" ]]; then
211
+ echo "warning: ignoring independence value '$CALLER_INDEPENDENCE_VERIFIED'; model-derived value is '$INDEPENDENCE_VERIFIED'" >&2
212
+ fi
213
+
214
+ # --- Read from files if provided ---
215
+ if [[ -n "$PROMPT_FILE" && -f "$PROMPT_FILE" ]]; then
216
+ PROMPT=$(cat "$PROMPT_FILE")
217
+ fi
218
+ if [[ -n "$RESPONSE_FILE" && -f "$RESPONSE_FILE" ]]; then
219
+ RESPONSE=$(cat "$RESPONSE_FILE")
220
+ fi
221
+
222
+ # --- Determine run directory ---
223
+ TODAY=$(date +%Y-%m-%d)
224
+ TRACES_DIR=".aris/traces/${SKILL}"
225
+ mkdir -p "$TRACES_DIR"
226
+
227
+ # Find next run number for today
228
+ RUN_NUM=1
229
+ while [[ -d "${TRACES_DIR}/${TODAY}_run$(printf '%02d' $RUN_NUM)" ]]; do
230
+ # Check if this run dir was created in the last 2 hours (same session)
231
+ RUN_DIR="${TRACES_DIR}/${TODAY}_run$(printf '%02d' $RUN_NUM)"
232
+ if [[ -f "${RUN_DIR}/run.meta.json" ]]; then
233
+ # Reuse existing run if it exists (same skill session)
234
+ break
235
+ fi
236
+ RUN_NUM=$((RUN_NUM + 1))
237
+ done
238
+
239
+ RUN_ID="${TODAY}_run$(printf '%02d' $RUN_NUM)"
240
+ RUN_DIR="${TRACES_DIR}/${RUN_ID}"
241
+ mkdir -p "$RUN_DIR"
242
+
243
+ # --- Create run.meta.json if it doesn't exist ---
244
+ if [[ ! -f "${RUN_DIR}/run.meta.json" ]]; then
245
+ ST_SKILL="$SKILL" ST_RUN_ID="$RUN_ID" ST_STARTED="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
246
+ ST_PROJ="$(pwd)" ST_OUT="${RUN_DIR}/run.meta.json" \
247
+ ST_EXECUTOR="${EXECUTOR:-claude-code}" ST_EXECUTOR_MODEL="$EXECUTOR_MODEL" ST_EXECUTOR_FAMILY="$EXECUTOR_FAMILY" \
248
+ ST_EXECUTOR_MODEL_SOURCE="$EXECUTOR_MODEL_SOURCE" ST_REVIEWER_MODEL_SOURCE="$REVIEWER_MODEL_SOURCE" \
249
+ ST_REVIEWER_FAMILY="$REVIEWER_FAMILY" ST_REVIEWER_BACKEND="$BACKEND" \
250
+ ST_FAMILY_RELATION="$FAMILY_RELATION" ST_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED" \
251
+ ST_NATIVE_EVIDENCE_ID="$NATIVE_EVIDENCE_ID" ST_NATIVE_EVIDENCE_PATH="$NATIVE_EVIDENCE_PATH" python3 -c '
252
+ import json, os
253
+ e = os.environ
254
+ raw_iv = (e.get("ST_INDEPENDENCE_VERIFIED") or "unverified").lower()
255
+ iv = True if raw_iv == "true" else False if raw_iv == "false" else "unverified"
256
+ json.dump({"skill": e["ST_SKILL"], "run_id": e["ST_RUN_ID"],
257
+ "started_at": e["ST_STARTED"],
258
+ "executor": e.get("ST_EXECUTOR") or "claude-code",
259
+ "executor_model": e.get("ST_EXECUTOR_MODEL") or None,
260
+ "executor_model_source": e.get("ST_EXECUTOR_MODEL_SOURCE") or "unavailable",
261
+ "executor_family": e.get("ST_EXECUTOR_FAMILY") or None,
262
+ "reviewer_model_source": e.get("ST_REVIEWER_MODEL_SOURCE") or "unavailable",
263
+ "reviewer_family": e.get("ST_REVIEWER_FAMILY") or None,
264
+ "reviewer_backend": e.get("ST_REVIEWER_BACKEND") or None,
265
+ "native_evidence_id": e.get("ST_NATIVE_EVIDENCE_ID") or None,
266
+ "native_evidence_path": e.get("ST_NATIVE_EVIDENCE_PATH") or None,
267
+ "family_relation": e.get("ST_FAMILY_RELATION") or "unknown",
268
+ "independence_verified": iv,
269
+ "project_dir": e["ST_PROJ"]},
270
+ open(e["ST_OUT"], "w"), indent=2)
271
+ '
272
+ fi
273
+
274
+ # --- Determine call number ---
275
+ CALL_NUM=$(find "$RUN_DIR" -maxdepth 1 -name '*.request.json' 2>/dev/null | wc -l | tr -d ' ')
276
+ CALL_NUM=$((CALL_NUM + 1))
277
+ CALL_PREFIX=$(printf '%03d' $CALL_NUM)
278
+ TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ)
279
+
280
+ # --- Write request ---
281
+ if [[ "$TRACE_MODE" == "full" ]]; then
282
+ # Write full prompt
283
+ # values pass via env — never interpolated into python source (quote/injection safety)
284
+ ST_CALL_NUM="$CALL_NUM" ST_PURPOSE="$PURPOSE" ST_TIMESTAMP="$TIMESTAMP" \
285
+ ST_MODEL="$MODEL" ST_EFFORT="$EFFORT" ST_FALLBACK="$FALLBACK_REASON" ST_STATUS="$STATUS" \
286
+ ST_TOOL="$TOOL" ST_BACKEND="$BACKEND" \
287
+ ST_EXECUTOR="${EXECUTOR:-claude-code}" ST_EXECUTOR_MODEL="$EXECUTOR_MODEL" ST_EXECUTOR_FAMILY="$EXECUTOR_FAMILY" \
288
+ ST_EXECUTOR_MODEL_SOURCE="$EXECUTOR_MODEL_SOURCE" ST_REVIEWER_MODEL_SOURCE="$REVIEWER_MODEL_SOURCE" \
289
+ ST_REVIEWER_FAMILY="$REVIEWER_FAMILY" ST_REVIEWER_PROFILE="$REVIEWER_PROFILE" \
290
+ ST_REQUESTED_REVIEWER_MODEL="$REQUESTED_REVIEWER_MODEL" ST_REPORTED_REVIEWER_MODEL="$REPORTED_REVIEWER_MODEL" \
291
+ ST_FAMILY_RELATION="$FAMILY_RELATION" ST_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED" \
292
+ ST_MEMORY_HASH="$MEMORY_HASH" ST_NATIVE_EVIDENCE_ID="$NATIVE_EVIDENCE_ID" \
293
+ ST_NATIVE_EVIDENCE_PATH="$NATIVE_EVIDENCE_PATH" \
294
+ ST_OUT="${RUN_DIR}/${CALL_PREFIX}-${PURPOSE}.request.json" python3 -c '
295
+ import json, os, sys
296
+ e = os.environ
297
+ effort_unpinned = (e.get("ST_BACKEND") == "copilot" and
298
+ (e.get("ST_EFFORT") or "").lower() != "xhigh")
299
+ raw_iv = (e.get("ST_INDEPENDENCE_VERIFIED") or "unverified").lower()
300
+ iv = True if raw_iv == "true" else False if raw_iv == "false" else "unverified"
301
+ data = {
302
+ "call_number": int(e["ST_CALL_NUM"]),
303
+ "purpose": e["ST_PURPOSE"],
304
+ "timestamp": e["ST_TIMESTAMP"],
305
+ "tool": e.get("ST_TOOL") or "mcp__codex__codex",
306
+ "backend": e.get("ST_BACKEND") or "codex",
307
+ "model": e["ST_MODEL"],
308
+ "effort": e["ST_EFFORT"],
309
+ "effort_unpinned": effort_unpinned,
310
+ "fallback_reason": e["ST_FALLBACK"],
311
+ "status": e["ST_STATUS"],
312
+ "executor": e.get("ST_EXECUTOR") or "claude-code",
313
+ "executor_model": e.get("ST_EXECUTOR_MODEL") or None,
314
+ "executor_model_source": e.get("ST_EXECUTOR_MODEL_SOURCE") or "unavailable",
315
+ "executor_family": e.get("ST_EXECUTOR_FAMILY") or None,
316
+ "reviewer_model_source": e.get("ST_REVIEWER_MODEL_SOURCE") or "unavailable",
317
+ "reviewer_family": e.get("ST_REVIEWER_FAMILY") or None,
318
+ "reviewer_profile": e.get("ST_REVIEWER_PROFILE") or None,
319
+ "requested_reviewer_model": e.get("ST_REQUESTED_REVIEWER_MODEL") or None,
320
+ "reported_reviewer_model": e.get("ST_REPORTED_REVIEWER_MODEL") or None,
321
+ "native_evidence_id": e.get("ST_NATIVE_EVIDENCE_ID") or None,
322
+ "native_evidence_path": e.get("ST_NATIVE_EVIDENCE_PATH") or None,
323
+ "family_relation": e.get("ST_FAMILY_RELATION") or "unknown",
324
+ "independence_verified": iv,
325
+ "memory_hash": e.get("ST_MEMORY_HASH") or None,
326
+ "prompt": sys.stdin.read(),
327
+ }
328
+ json.dump(data, open(e["ST_OUT"], "w"), indent=2, ensure_ascii=False)
329
+ ' <<< "$PROMPT"
330
+
331
+ # Write full response
332
+ printf '%s' "$RESPONSE" > "${RUN_DIR}/${CALL_PREFIX}-${PURPOSE}.response.md"
333
+ else
334
+ # Meta-only mode: no prompt/response content
335
+ ST_CALL_NUM="$CALL_NUM" ST_PURPOSE="$PURPOSE" ST_TIMESTAMP="$TIMESTAMP" \
336
+ ST_MODEL="$MODEL" ST_EFFORT="$EFFORT" ST_FALLBACK="$FALLBACK_REASON" ST_STATUS="$STATUS" \
337
+ ST_PLEN="${#PROMPT}" ST_RLEN="${#RESPONSE}" \
338
+ ST_TOOL="$TOOL" ST_BACKEND="$BACKEND" \
339
+ ST_EXECUTOR="${EXECUTOR:-claude-code}" ST_EXECUTOR_MODEL="$EXECUTOR_MODEL" ST_EXECUTOR_FAMILY="$EXECUTOR_FAMILY" \
340
+ ST_EXECUTOR_MODEL_SOURCE="$EXECUTOR_MODEL_SOURCE" ST_REVIEWER_MODEL_SOURCE="$REVIEWER_MODEL_SOURCE" \
341
+ ST_REVIEWER_FAMILY="$REVIEWER_FAMILY" ST_REVIEWER_PROFILE="$REVIEWER_PROFILE" \
342
+ ST_REQUESTED_REVIEWER_MODEL="$REQUESTED_REVIEWER_MODEL" ST_REPORTED_REVIEWER_MODEL="$REPORTED_REVIEWER_MODEL" \
343
+ ST_FAMILY_RELATION="$FAMILY_RELATION" ST_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED" \
344
+ ST_MEMORY_HASH="$MEMORY_HASH" ST_NATIVE_EVIDENCE_ID="$NATIVE_EVIDENCE_ID" \
345
+ ST_NATIVE_EVIDENCE_PATH="$NATIVE_EVIDENCE_PATH" \
346
+ ST_OUT="${RUN_DIR}/${CALL_PREFIX}-${PURPOSE}.request.json" python3 -c '
347
+ import json, os
348
+ e = os.environ
349
+ effort_unpinned = (e.get("ST_BACKEND") == "copilot" and
350
+ (e.get("ST_EFFORT") or "").lower() != "xhigh")
351
+ raw_iv = (e.get("ST_INDEPENDENCE_VERIFIED") or "unverified").lower()
352
+ iv = True if raw_iv == "true" else False if raw_iv == "false" else "unverified"
353
+ data = {
354
+ "call_number": int(e["ST_CALL_NUM"]),
355
+ "purpose": e["ST_PURPOSE"],
356
+ "timestamp": e["ST_TIMESTAMP"],
357
+ "tool": e.get("ST_TOOL") or "mcp__codex__codex",
358
+ "backend": e.get("ST_BACKEND") or "codex",
359
+ "model": e["ST_MODEL"],
360
+ "effort": e["ST_EFFORT"],
361
+ "effort_unpinned": effort_unpinned,
362
+ "fallback_reason": e["ST_FALLBACK"],
363
+ "status": e["ST_STATUS"],
364
+ "prompt_length": int(e["ST_PLEN"]),
365
+ "response_length": int(e["ST_RLEN"]),
366
+ "executor": e.get("ST_EXECUTOR") or "claude-code",
367
+ "executor_model": e.get("ST_EXECUTOR_MODEL") or None,
368
+ "executor_model_source": e.get("ST_EXECUTOR_MODEL_SOURCE") or "unavailable",
369
+ "executor_family": e.get("ST_EXECUTOR_FAMILY") or None,
370
+ "reviewer_model_source": e.get("ST_REVIEWER_MODEL_SOURCE") or "unavailable",
371
+ "reviewer_family": e.get("ST_REVIEWER_FAMILY") or None,
372
+ "reviewer_profile": e.get("ST_REVIEWER_PROFILE") or None,
373
+ "requested_reviewer_model": e.get("ST_REQUESTED_REVIEWER_MODEL") or None,
374
+ "reported_reviewer_model": e.get("ST_REPORTED_REVIEWER_MODEL") or None,
375
+ "native_evidence_id": e.get("ST_NATIVE_EVIDENCE_ID") or None,
376
+ "native_evidence_path": e.get("ST_NATIVE_EVIDENCE_PATH") or None,
377
+ "family_relation": e.get("ST_FAMILY_RELATION") or "unknown",
378
+ "independence_verified": iv,
379
+ "memory_hash": e.get("ST_MEMORY_HASH") or None,
380
+ }
381
+ json.dump(data, open(e["ST_OUT"], "w"), indent=2)
382
+ '
383
+ fi
384
+
385
+ # --- Write response metadata ---
386
+ ST_CALL_NUM="$CALL_NUM" ST_PURPOSE="$PURPOSE" ST_TIMESTAMP="$TIMESTAMP" \
387
+ ST_THREAD="$THREAD_ID" ST_MODEL="$MODEL" ST_EFFORT="$EFFORT" \
388
+ ST_FALLBACK="$FALLBACK_REASON" ST_STATUS="$STATUS" \
389
+ ST_BACKEND="$BACKEND" ST_EXECUTOR="${EXECUTOR:-claude-code}" ST_EXECUTOR_MODEL="$EXECUTOR_MODEL" ST_EXECUTOR_FAMILY="$EXECUTOR_FAMILY" \
390
+ ST_EXECUTOR_MODEL_SOURCE="$EXECUTOR_MODEL_SOURCE" ST_REVIEWER_MODEL_SOURCE="$REVIEWER_MODEL_SOURCE" \
391
+ ST_REVIEWER_FAMILY="$REVIEWER_FAMILY" ST_REVIEWER_PROFILE="$REVIEWER_PROFILE" \
392
+ ST_REQUESTED_REVIEWER_MODEL="$REQUESTED_REVIEWER_MODEL" ST_REPORTED_REVIEWER_MODEL="$REPORTED_REVIEWER_MODEL" \
393
+ ST_FAMILY_RELATION="$FAMILY_RELATION" ST_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED" \
394
+ ST_MEMORY_HASH="$MEMORY_HASH" ST_NATIVE_EVIDENCE_ID="$NATIVE_EVIDENCE_ID" \
395
+ ST_NATIVE_EVIDENCE_PATH="$NATIVE_EVIDENCE_PATH" \
396
+ ST_OUT="${RUN_DIR}/${CALL_PREFIX}-${PURPOSE}.meta.json" python3 -c '
397
+ import json, os
398
+ e = os.environ
399
+ effort_unpinned = (e.get("ST_BACKEND") == "copilot" and
400
+ (e.get("ST_EFFORT") or "").lower() != "xhigh")
401
+ raw_iv = (e.get("ST_INDEPENDENCE_VERIFIED") or "unverified").lower()
402
+ iv = True if raw_iv == "true" else False if raw_iv == "false" else "unverified"
403
+ data = {
404
+ "call_number": int(e["ST_CALL_NUM"]),
405
+ "purpose": e["ST_PURPOSE"],
406
+ "timestamp": e["ST_TIMESTAMP"],
407
+ "thread_id": e["ST_THREAD"] or None,
408
+ "model": e["ST_MODEL"],
409
+ "model_family": e.get("ST_REVIEWER_FAMILY") or None,
410
+ "effort": e["ST_EFFORT"],
411
+ "effort_unpinned": effort_unpinned,
412
+ "fallback_reason": e["ST_FALLBACK"],
413
+ "status": e["ST_STATUS"],
414
+ "executor": e.get("ST_EXECUTOR") or "claude-code",
415
+ "executor_model": e.get("ST_EXECUTOR_MODEL") or None,
416
+ "executor_model_source": e.get("ST_EXECUTOR_MODEL_SOURCE") or "unavailable",
417
+ "executor_family": e.get("ST_EXECUTOR_FAMILY") or None,
418
+ "reviewer_model_source": e.get("ST_REVIEWER_MODEL_SOURCE") or "unavailable",
419
+ "requested_reviewer_model": e.get("ST_REQUESTED_REVIEWER_MODEL") or None,
420
+ "reported_reviewer_model": e.get("ST_REPORTED_REVIEWER_MODEL") or None,
421
+ "native_evidence_id": e.get("ST_NATIVE_EVIDENCE_ID") or None,
422
+ "native_evidence_path": e.get("ST_NATIVE_EVIDENCE_PATH") or None,
423
+ "family_relation": e.get("ST_FAMILY_RELATION") or "unknown",
424
+ "independence_verified": iv,
425
+ "reviewer_profile": e.get("ST_REVIEWER_PROFILE") or None,
426
+ "memory_hash": e.get("ST_MEMORY_HASH") or None,
427
+ }
428
+ json.dump(data, open(e["ST_OUT"], "w"), indent=2)
429
+ '
430
+
431
+ # --- Append to events.jsonl (if it exists) ---
432
+ EVENTS_FILE=".aris/meta/events.jsonl"
433
+ if [[ -d ".aris/meta" ]]; then
434
+ ST_SKILL="$SKILL" ST_PURPOSE="$PURPOSE" ST_THREAD="$THREAD_ID" \
435
+ ST_TRACE="${RUN_DIR}/" ST_STATUS="$STATUS" ST_EVENTS="$EVENTS_FILE" \
436
+ ST_BACKEND="$BACKEND" ST_TOOL="$TOOL" \
437
+ ST_EFFORT="$EFFORT" \
438
+ ST_EXECUTOR="${EXECUTOR:-claude-code}" ST_EXECUTOR_MODEL="$EXECUTOR_MODEL" ST_EXECUTOR_FAMILY="$EXECUTOR_FAMILY" \
439
+ ST_EXECUTOR_MODEL_SOURCE="$EXECUTOR_MODEL_SOURCE" ST_REVIEWER_MODEL_SOURCE="$REVIEWER_MODEL_SOURCE" \
440
+ ST_REVIEWER_FAMILY="$REVIEWER_FAMILY" ST_FAMILY_RELATION="$FAMILY_RELATION" \
441
+ ST_MEMORY_HASH="$MEMORY_HASH" ST_NATIVE_EVIDENCE_ID="$NATIVE_EVIDENCE_ID" \
442
+ ST_NATIVE_EVIDENCE_PATH="$NATIVE_EVIDENCE_PATH" \
443
+ ST_INDEPENDENCE_VERIFIED="$INDEPENDENCE_VERIFIED" python3 -c '
444
+ import json, os
445
+ e = os.environ
446
+ effort_unpinned = (e.get("ST_BACKEND") == "copilot" and
447
+ (e.get("ST_EFFORT") or "").lower() != "xhigh")
448
+ raw_iv = (e.get("ST_INDEPENDENCE_VERIFIED") or "unverified").lower()
449
+ iv = True if raw_iv == "true" else False if raw_iv == "false" else "unverified"
450
+ evt = {
451
+ "event": "review_trace",
452
+ "skill": e["ST_SKILL"],
453
+ "purpose": e["ST_PURPOSE"],
454
+ "thread_id": e["ST_THREAD"] or None,
455
+ "trace_path": e["ST_TRACE"],
456
+ "backend": e.get("ST_BACKEND") or None,
457
+ "tool": e.get("ST_TOOL") or None,
458
+ "executor": e.get("ST_EXECUTOR") or "claude-code",
459
+ "executor_model": e.get("ST_EXECUTOR_MODEL") or None,
460
+ "executor_model_source": e.get("ST_EXECUTOR_MODEL_SOURCE") or "unavailable",
461
+ "executor_family": e.get("ST_EXECUTOR_FAMILY") or None,
462
+ "reviewer_model_source": e.get("ST_REVIEWER_MODEL_SOURCE") or "unavailable",
463
+ "reviewer_family": e.get("ST_REVIEWER_FAMILY") or None,
464
+ "native_evidence_id": e.get("ST_NATIVE_EVIDENCE_ID") or None,
465
+ "native_evidence_path": e.get("ST_NATIVE_EVIDENCE_PATH") or None,
466
+ "family_relation": e.get("ST_FAMILY_RELATION") or "unknown",
467
+ "effort_unpinned": effort_unpinned,
468
+ "independence_verified": iv,
469
+ "memory_hash": e.get("ST_MEMORY_HASH") or None,
470
+ "status": e["ST_STATUS"],
471
+ }
472
+ with open(e["ST_EVENTS"], "a") as f:
473
+ f.write(json.dumps(evt) + "\n")
474
+ ' 2>/dev/null || true
475
+ fi
476
+
477
+ echo "Trace saved: ${RUN_DIR}/${CALL_PREFIX}-${PURPOSE}" >&2