dsh-aris-panel 0.2.7 → 0.3.1

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 (857) hide show
  1. package/README.md +117 -108
  2. package/README_CN.md +98 -89
  3. package/aris/.claude-plugin/marketplace.json +34 -0
  4. package/aris/.claude-plugin/plugin.json +19 -0
  5. package/aris/.codex-plugin/plugin.json +18 -0
  6. package/aris/.env.example +53 -0
  7. package/aris/.gitattributes +6 -0
  8. package/aris/.github/agents/aris-reviewer-claude.agent.md +10 -0
  9. package/aris/.github/agents/aris-reviewer-openai.agent.md +10 -0
  10. package/aris/.github/workflows/check-skills-inventory.yml +32 -0
  11. package/aris/.github/workflows/lint-skills-helpers.yml +38 -0
  12. package/aris/.github/workflows/test-install-aris-ps1.yml +31 -0
  13. package/aris/.github/workflows/test-suite.yml +59 -0
  14. package/aris/AGENT_GUIDE.md +222 -0
  15. package/aris/CONTRIBUTING.md +83 -0
  16. package/aris/CONTRIBUTING_CN.md +83 -0
  17. package/aris/LICENSE +21 -0
  18. package/aris/README.md +1739 -0
  19. package/aris/README_CN.md +1526 -0
  20. package/aris/SETUP_GUIDE.md +279 -0
  21. package/aris/SETUP_GUIDE_CN.md +279 -0
  22. package/aris/UPSTREAM.txt +2 -0
  23. package/aris/aris-monitor/README.md +158 -0
  24. package/aris/aris-monitor/assets/screenshot.png +0 -0
  25. package/aris/aris-monitor/focus-tty.sh +156 -0
  26. package/aris/aris-monitor/focus.py +93 -0
  27. package/aris/aris-monitor/run.sh +49 -0
  28. package/aris/aris-monitor/scanner.py +445 -0
  29. package/aris/aris-monitor/ticker.py +81 -0
  30. package/aris/aris-monitor/widget.py +372 -0
  31. package/aris/assets/claude-fleet-preview.png +0 -0
  32. package/aris/assets/community_showcase_7_10_codex.png +0 -0
  33. package/aris/assets/community_showcase_8_10.png +0 -0
  34. package/aris/assets/feishu_interactive.jpg +0 -0
  35. package/aris/assets/feishu_push.png +0 -0
  36. package/aris/assets/paper_illustration_demo.png +0 -0
  37. package/aris/commands/setup.md +77 -0
  38. package/aris/community_papers/UAV-CC.pdf +0 -0
  39. package/aris/docs/ALI_CODING_PLAN_GUIDE.md +324 -0
  40. package/aris/docs/ANTIGRAVITY_ADAPTATION.md +409 -0
  41. package/aris/docs/ANTIGRAVITY_ADAPTATION_CN.md +363 -0
  42. package/aris/docs/ARIS-Code-README_CN.md +8 -0
  43. package/aris/docs/ARIS-Code-README_EN.md +8 -0
  44. package/aris/docs/ARIS_INTRO.html +902 -0
  45. package/aris/docs/ARIS_INTRO.md +368 -0
  46. package/aris/docs/ARIS_INTRO.review.json +79 -0
  47. package/aris/docs/CODEX_CLAUDE_REVIEW_GUIDE.md +116 -0
  48. package/aris/docs/CODEX_CLAUDE_REVIEW_GUIDE_CN.md +116 -0
  49. package/aris/docs/CODEX_GEMINI_REVIEW_GUIDE.md +249 -0
  50. package/aris/docs/CODEX_GEMINI_REVIEW_GUIDE_CN.md +250 -0
  51. package/aris/docs/COPILOT_CLI_ADAPTATION.md +388 -0
  52. package/aris/docs/CURSOR_ADAPTATION.md +305 -0
  53. package/aris/docs/CUSTOMIZATION.md +155 -0
  54. package/aris/docs/CUSTOMIZATION_CN.md +154 -0
  55. package/aris/docs/GPU_SETUP.md +57 -0
  56. package/aris/docs/GPU_SETUP_CN.md +54 -0
  57. package/aris/docs/LLM_API_MIX_MATCH_GUIDE.md +256 -0
  58. package/aris/docs/MANUAL_REVIEW_GUIDE.md +128 -0
  59. package/aris/docs/MANUAL_REVIEW_GUIDE_CN.md +116 -0
  60. package/aris/docs/MINIMAX_MCP_GUIDE.md +198 -0
  61. package/aris/docs/MODELSCOPE_GUIDE.md +305 -0
  62. package/aris/docs/MODEL_COMBINATIONS.md +134 -0
  63. package/aris/docs/MODEL_COMBINATIONS_CN.md +134 -0
  64. package/aris/docs/MiniMax-GLM-Configuration.md +195 -0
  65. package/aris/docs/NARRATIVE_REPORT_EXAMPLE.md +143 -0
  66. package/aris/docs/OPENCLAW_ADAPTATION.md +59 -0
  67. package/aris/docs/OPENROUTER_GUIDE.md +255 -0
  68. package/aris/docs/OPENROUTER_GUIDE_CN.md +255 -0
  69. package/aris/docs/PROJECT_FILES_GUIDE.md +161 -0
  70. package/aris/docs/PROJECT_FILES_GUIDE_CN.md +161 -0
  71. package/aris/docs/RESUBMIT_AND_TALK.md +91 -0
  72. package/aris/docs/RESUBMIT_AND_TALK_CN.md +91 -0
  73. package/aris/docs/SESSION_RECOVERY_GUIDE.md +439 -0
  74. package/aris/docs/SESSION_RECOVERY_GUIDE_CN.md +431 -0
  75. package/aris/docs/SKILLS_CATALOG.md +204 -0
  76. package/aris/docs/TRAE_ARIS_RUNBOOK_CN.md +329 -0
  77. package/aris/docs/TRAE_ARIS_RUNBOOK_EN.md +329 -0
  78. package/aris/docs/WATCHDOG_GUIDE.md +200 -0
  79. package/aris/docs/WATCHDOG_GUIDE_CN.md +199 -0
  80. package/aris/docs/aris-code-banner.png +0 -0
  81. package/aris/docs/aris-code-screenshot.png +0 -0
  82. package/aris/docs/aris-movie-director-method.png +0 -0
  83. package/aris/docs/aris_intro_slides.pdf +0 -0
  84. package/aris/docs/aris_logo.svg +126 -0
  85. package/aris/docs/auto_review_score_curve.png +0 -0
  86. package/aris/docs/blogs/continuous_dlm_2026h1_survey.html +3262 -0
  87. package/aris/docs/hero_combined.svg +844 -0
  88. package/aris/docs/hero_idea.svg +158 -0
  89. package/aris/docs/hero_implement.svg +109 -0
  90. package/aris/docs/hero_interaction.svg +172 -0
  91. package/aris/docs/hf_daily_paper_1.svg +19 -0
  92. package/aris/docs/integrations/FEISHU.md +208 -0
  93. package/aris/docs/integrations/FEISHU_CN.md +208 -0
  94. package/aris/docs/integrations/OBSIDIAN.md +65 -0
  95. package/aris/docs/integrations/OBSIDIAN_CN.md +65 -0
  96. package/aris/docs/integrations/VAST_GPU_GUIDE.md +96 -0
  97. package/aris/docs/integrations/VAST_GPU_GUIDE_CN.md +96 -0
  98. package/aris/docs/integrations/ZOTERO.md +57 -0
  99. package/aris/docs/integrations/ZOTERO_CN.md +57 -0
  100. package/aris/docs/tutorials/3d_generation_tutorial.html +1018 -0
  101. package/aris/docs/tutorials/3d_generation_tutorial.md +1206 -0
  102. package/aris/docs/tutorials/3d_generation_tutorial.review.json +34 -0
  103. package/aris/docs/tutorials/3d_generation_tutorial_en.html +1018 -0
  104. package/aris/docs/tutorials/3d_generation_tutorial_en.md +1206 -0
  105. package/aris/docs/tutorials/README.md +77 -0
  106. package/aris/docs/tutorials/agent_foundations_tutorial.html +1081 -0
  107. package/aris/docs/tutorials/agent_foundations_tutorial.md +1229 -0
  108. package/aris/docs/tutorials/agent_foundations_tutorial.review.json +146 -0
  109. package/aris/docs/tutorials/agent_foundations_tutorial_en.html +1081 -0
  110. package/aris/docs/tutorials/agent_foundations_tutorial_en.md +1229 -0
  111. package/aris/docs/tutorials/agentic_rl_tutorial.html +1269 -0
  112. package/aris/docs/tutorials/agentic_rl_tutorial.md +1544 -0
  113. package/aris/docs/tutorials/agentic_rl_tutorial.review.json +74 -0
  114. package/aris/docs/tutorials/agentic_rl_tutorial_en.html +1269 -0
  115. package/aris/docs/tutorials/agentic_rl_tutorial_en.md +1544 -0
  116. package/aris/docs/tutorials/attention_tutorial.html +774 -0
  117. package/aris/docs/tutorials/attention_tutorial.md +812 -0
  118. package/aris/docs/tutorials/attention_tutorial.review.json +51 -0
  119. package/aris/docs/tutorials/attention_tutorial_en.html +774 -0
  120. package/aris/docs/tutorials/attention_tutorial_en.md +812 -0
  121. package/aris/docs/tutorials/diffusion_distillation_tutorial.html +1421 -0
  122. package/aris/docs/tutorials/diffusion_distillation_tutorial.md +1672 -0
  123. package/aris/docs/tutorials/diffusion_distillation_tutorial.review.json +114 -0
  124. package/aris/docs/tutorials/diffusion_distillation_tutorial_en.html +1421 -0
  125. package/aris/docs/tutorials/diffusion_distillation_tutorial_en.md +1672 -0
  126. package/aris/docs/tutorials/diffusion_foundations_tutorial.html +1239 -0
  127. package/aris/docs/tutorials/diffusion_foundations_tutorial.md +1481 -0
  128. package/aris/docs/tutorials/diffusion_foundations_tutorial.review.json +56 -0
  129. package/aris/docs/tutorials/diffusion_foundations_tutorial_en.html +1239 -0
  130. package/aris/docs/tutorials/diffusion_foundations_tutorial_en.md +1481 -0
  131. package/aris/docs/tutorials/diffusion_post_training_tutorial.html +1135 -0
  132. package/aris/docs/tutorials/diffusion_post_training_tutorial.md +1322 -0
  133. package/aris/docs/tutorials/diffusion_post_training_tutorial.review.json +63 -0
  134. package/aris/docs/tutorials/diffusion_post_training_tutorial_en.html +1138 -0
  135. package/aris/docs/tutorials/diffusion_post_training_tutorial_en.md +1325 -0
  136. package/aris/docs/tutorials/distributed_training_tutorial.html +1429 -0
  137. package/aris/docs/tutorials/distributed_training_tutorial.md +1587 -0
  138. package/aris/docs/tutorials/distributed_training_tutorial.review.json +98 -0
  139. package/aris/docs/tutorials/distributed_training_tutorial_en.html +1429 -0
  140. package/aris/docs/tutorials/distributed_training_tutorial_en.md +1587 -0
  141. package/aris/docs/tutorials/flow_matching_tutorial.html +755 -0
  142. package/aris/docs/tutorials/flow_matching_tutorial.md +537 -0
  143. package/aris/docs/tutorials/flow_matching_tutorial.review.json +37 -0
  144. package/aris/docs/tutorials/flow_matching_tutorial_en.html +755 -0
  145. package/aris/docs/tutorials/flow_matching_tutorial_en.md +537 -0
  146. package/aris/docs/tutorials/image_generation_systems_tutorial.html +1181 -0
  147. package/aris/docs/tutorials/image_generation_systems_tutorial.md +1448 -0
  148. package/aris/docs/tutorials/image_generation_systems_tutorial.review.json +49 -0
  149. package/aris/docs/tutorials/image_generation_systems_tutorial_en.html +1181 -0
  150. package/aris/docs/tutorials/image_generation_systems_tutorial_en.md +1448 -0
  151. package/aris/docs/tutorials/kl_divergence_rlhf_tutorial.html +1210 -0
  152. package/aris/docs/tutorials/kl_divergence_rlhf_tutorial.md +1502 -0
  153. package/aris/docs/tutorials/kl_divergence_rlhf_tutorial.review.json +55 -0
  154. package/aris/docs/tutorials/kl_divergence_rlhf_tutorial_en.html +1212 -0
  155. package/aris/docs/tutorials/kl_divergence_rlhf_tutorial_en.md +1504 -0
  156. package/aris/docs/tutorials/kv_cache_speculative_decoding_tutorial.html +1118 -0
  157. package/aris/docs/tutorials/kv_cache_speculative_decoding_tutorial.md +1258 -0
  158. package/aris/docs/tutorials/kv_cache_speculative_decoding_tutorial.review.json +91 -0
  159. package/aris/docs/tutorials/kv_cache_speculative_decoding_tutorial_en.html +1118 -0
  160. package/aris/docs/tutorials/kv_cache_speculative_decoding_tutorial_en.md +1258 -0
  161. package/aris/docs/tutorials/llm_opd_tutorial.html +1109 -0
  162. package/aris/docs/tutorials/llm_opd_tutorial.md +1195 -0
  163. package/aris/docs/tutorials/llm_opd_tutorial.review.json +125 -0
  164. package/aris/docs/tutorials/llm_opd_tutorial_en.html +1112 -0
  165. package/aris/docs/tutorials/llm_opd_tutorial_en.md +1198 -0
  166. package/aris/docs/tutorials/long_context_rope_yarn_mla_tutorial.html +1130 -0
  167. package/aris/docs/tutorials/long_context_rope_yarn_mla_tutorial.md +1209 -0
  168. package/aris/docs/tutorials/long_context_rope_yarn_mla_tutorial.review.json +79 -0
  169. package/aris/docs/tutorials/long_context_rope_yarn_mla_tutorial_en.html +1132 -0
  170. package/aris/docs/tutorials/long_context_rope_yarn_mla_tutorial_en.md +1211 -0
  171. package/aris/docs/tutorials/moe_tutorial.html +968 -0
  172. package/aris/docs/tutorials/moe_tutorial.md +1031 -0
  173. package/aris/docs/tutorials/moe_tutorial.review.json +54 -0
  174. package/aris/docs/tutorials/moe_tutorial_en.html +968 -0
  175. package/aris/docs/tutorials/moe_tutorial_en.md +1031 -0
  176. package/aris/docs/tutorials/multi_agent_long_horizon_tutorial.html +1409 -0
  177. package/aris/docs/tutorials/multi_agent_long_horizon_tutorial.md +1803 -0
  178. package/aris/docs/tutorials/multi_agent_long_horizon_tutorial.review.json +62 -0
  179. package/aris/docs/tutorials/multi_agent_long_horizon_tutorial_en.html +1413 -0
  180. package/aris/docs/tutorials/multi_agent_long_horizon_tutorial_en.md +1807 -0
  181. package/aris/docs/tutorials/quantization_tutorial.html +1117 -0
  182. package/aris/docs/tutorials/quantization_tutorial.md +1344 -0
  183. package/aris/docs/tutorials/quantization_tutorial.review.json +56 -0
  184. package/aris/docs/tutorials/quantization_tutorial_en.html +1117 -0
  185. package/aris/docs/tutorials/quantization_tutorial_en.md +1344 -0
  186. package/aris/docs/tutorials/reasoning_models_tutorial.html +1085 -0
  187. package/aris/docs/tutorials/reasoning_models_tutorial.md +1285 -0
  188. package/aris/docs/tutorials/reasoning_models_tutorial.review.json +66 -0
  189. package/aris/docs/tutorials/reasoning_models_tutorial_en.html +1085 -0
  190. package/aris/docs/tutorials/reasoning_models_tutorial_en.md +1285 -0
  191. package/aris/docs/tutorials/rlhf_dpo_grpo_ppo_tutorial.html +1015 -0
  192. package/aris/docs/tutorials/rlhf_dpo_grpo_ppo_tutorial.md +1125 -0
  193. package/aris/docs/tutorials/rlhf_dpo_grpo_ppo_tutorial.review.json +69 -0
  194. package/aris/docs/tutorials/rlhf_dpo_grpo_ppo_tutorial_en.html +1014 -0
  195. package/aris/docs/tutorials/rlhf_dpo_grpo_ppo_tutorial_en.md +1123 -0
  196. package/aris/docs/tutorials/self_evolving_agents_tutorial.html +1354 -0
  197. package/aris/docs/tutorials/self_evolving_agents_tutorial.md +1554 -0
  198. package/aris/docs/tutorials/self_evolving_agents_tutorial.review.json +64 -0
  199. package/aris/docs/tutorials/self_evolving_agents_tutorial_en.html +1356 -0
  200. package/aris/docs/tutorials/self_evolving_agents_tutorial_en.md +1556 -0
  201. package/aris/docs/tutorials/vae_vqvae_vqgan_tutorial.html +1197 -0
  202. package/aris/docs/tutorials/vae_vqvae_vqgan_tutorial.md +1419 -0
  203. package/aris/docs/tutorials/vae_vqvae_vqgan_tutorial.review.json +67 -0
  204. package/aris/docs/tutorials/vae_vqvae_vqgan_tutorial_en.html +1196 -0
  205. package/aris/docs/tutorials/vae_vqvae_vqgan_tutorial_en.md +1419 -0
  206. package/aris/docs/tutorials/video_generation_tutorial.html +1169 -0
  207. package/aris/docs/tutorials/video_generation_tutorial.md +1189 -0
  208. package/aris/docs/tutorials/video_generation_tutorial.review.json +72 -0
  209. package/aris/docs/tutorials/video_generation_tutorial_en.html +1170 -0
  210. package/aris/docs/tutorials/video_generation_tutorial_en.md +1190 -0
  211. package/aris/docs/tutorials/vlm_multimodal_tutorial.html +1208 -0
  212. package/aris/docs/tutorials/vlm_multimodal_tutorial.md +1446 -0
  213. package/aris/docs/tutorials/vlm_multimodal_tutorial.review.json +67 -0
  214. package/aris/docs/tutorials/vlm_multimodal_tutorial_en.html +1208 -0
  215. package/aris/docs/tutorials/vlm_multimodal_tutorial_en.md +1446 -0
  216. package/aris/docs/wechat_group.jpg +0 -0
  217. package/aris/mcp-servers/claude-review/README.md +96 -0
  218. package/aris/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
  219. package/aris/mcp-servers/claude-review/server.py +718 -0
  220. package/aris/mcp-servers/codex-exec/README.md +57 -0
  221. package/aris/mcp-servers/codex-exec/server.py +480 -0
  222. package/aris/mcp-servers/codex-image2/README.md +65 -0
  223. package/aris/mcp-servers/codex-image2/server.py +893 -0
  224. package/aris/mcp-servers/feishu-bridge/requirements.txt +1 -0
  225. package/aris/mcp-servers/feishu-bridge/server.py +240 -0
  226. package/aris/mcp-servers/gemini-review/README.md +171 -0
  227. package/aris/mcp-servers/gemini-review/server.py +1856 -0
  228. package/aris/mcp-servers/llm-chat/requirements.txt +1 -0
  229. package/aris/mcp-servers/llm-chat/server.py +664 -0
  230. package/aris/mcp-servers/manual-review/README.md +133 -0
  231. package/aris/mcp-servers/manual-review/server.py +910 -0
  232. package/aris/mcp-servers/manual-review/ui.html +279 -0
  233. package/aris/mcp-servers/minimax-chat/requirements.txt +1 -0
  234. package/aris/mcp-servers/minimax-chat/server.py +381 -0
  235. package/aris/skills/ablation-planner/SKILL.md +123 -0
  236. package/aris/skills/alphaxiv/SKILL.md +196 -0
  237. package/aris/skills/analyze-results/SKILL.md +46 -0
  238. package/aris/skills/arxiv/SKILL.md +248 -0
  239. package/aris/skills/auto-paper-improvement-loop/SKILL.md +695 -0
  240. package/aris/skills/auto-review-loop/SKILL.md +1137 -0
  241. package/aris/skills/auto-review-loop-llm/SKILL.md +259 -0
  242. package/aris/skills/auto-review-loop-minimax/SKILL.md +302 -0
  243. package/{skills/citation-audit-claude → aris/skills/citation-audit}/SKILL.md +11 -21
  244. package/aris/skills/claims-drafting/SKILL.md +227 -0
  245. package/aris/skills/comm-lit-review/SKILL.md +297 -0
  246. package/aris/skills/deepxiv/SKILL.md +263 -0
  247. package/aris/skills/dse-loop/SKILL.md +296 -0
  248. package/aris/skills/embodiment-description/SKILL.md +129 -0
  249. package/aris/skills/exa-search/SKILL.md +205 -0
  250. package/{skills/experiment-audit-claude → aris/skills/experiment-audit}/SKILL.md +16 -26
  251. package/aris/skills/experiment-bridge/SKILL.md +376 -0
  252. package/aris/skills/experiment-plan/SKILL.md +249 -0
  253. package/aris/skills/experiment-queue/SKILL.md +431 -0
  254. package/aris/skills/experiment-queue/scripts/build_manifest.py +142 -0
  255. package/aris/skills/experiment-queue/scripts/queue_manager.py +433 -0
  256. package/aris/skills/feishu-notify/SKILL.md +156 -0
  257. package/aris/skills/figure-description/SKILL.md +138 -0
  258. package/aris/skills/figure-spec/SKILL.md +262 -0
  259. package/aris/skills/figure-spec/scripts/figure_renderer.py +799 -0
  260. package/aris/skills/formula-derivation/SKILL.md +280 -0
  261. package/aris/skills/gemini-search/SKILL.md +231 -0
  262. package/aris/skills/grant-proposal/SKILL.md +698 -0
  263. package/aris/skills/idea-creator/SKILL.md +584 -0
  264. package/aris/skills/idea-discovery/SKILL.md +527 -0
  265. package/aris/skills/idea-discovery-robot/SKILL.md +363 -0
  266. package/aris/skills/integrity-forensics/SKILL.md +284 -0
  267. package/aris/skills/interview-cheatsheet/SKILL.md +245 -0
  268. package/aris/skills/invention-structuring/SKILL.md +188 -0
  269. package/aris/skills/jurisdiction-format/SKILL.md +192 -0
  270. package/aris/skills/kill-argument/SKILL.md +437 -0
  271. package/aris/skills/mermaid-diagram/SKILL.md +419 -0
  272. package/{skills/meta-apply-claude → aris/skills/meta-apply}/SKILL.md +5 -15
  273. package/aris/skills/meta-optimize/SKILL.md +437 -0
  274. package/aris/skills/monitor-experiment/SKILL.md +140 -0
  275. package/aris/skills/novelty-check/SKILL.md +142 -0
  276. package/aris/skills/openalex/SKILL.md +237 -0
  277. package/aris/skills/overleaf-sync/SKILL.md +220 -0
  278. package/{skills/paper-claim-audit-claude → aris/skills/paper-claim-audit}/SKILL.md +13 -23
  279. package/aris/skills/paper-compile/SKILL.md +266 -0
  280. package/aris/skills/paper-figure/SKILL.md +312 -0
  281. package/aris/skills/paper-illustration/SKILL.md +736 -0
  282. package/aris/skills/paper-illustration-image2/SKILL.md +391 -0
  283. package/aris/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  284. package/aris/skills/paper-plan/SKILL.md +386 -0
  285. package/aris/skills/paper-poster/SKILL.md +19 -0
  286. package/aris/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  287. package/aris/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  288. package/aris/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  289. package/aris/skills/paper-poster-html/NOTICE.md +57 -0
  290. package/aris/skills/paper-poster-html/SKILL.md +323 -0
  291. package/aris/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  292. package/aris/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  293. package/aris/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  294. package/aris/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  295. package/aris/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  296. package/aris/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  297. package/aris/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  298. package/aris/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  299. package/aris/skills/paper-poster-html/scripts/asset_check.py +897 -0
  300. package/aris/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  301. package/aris/skills/paper-poster-html/scripts/poster_check.py +251 -0
  302. package/aris/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  303. package/aris/skills/paper-poster-html/scripts/render_preview.py +217 -0
  304. package/aris/skills/paper-poster-html/scripts/run_gates.py +556 -0
  305. package/aris/skills/paper-poster-html/scripts/style_check.py +1324 -0
  306. package/aris/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  307. package/aris/skills/paper-poster-html/templates/README.md +170 -0
  308. package/aris/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  309. package/aris/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  310. package/aris/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  311. package/aris/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  312. package/aris/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  313. package/aris/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  314. package/aris/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  315. package/aris/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  316. package/aris/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  317. package/aris/skills/paper-slides/SKILL.md +635 -0
  318. package/aris/skills/paper-talk/SKILL.md +381 -0
  319. package/aris/skills/paper-write/SKILL.md +682 -0
  320. package/aris/skills/paper-write/templates/IEEEtran.bst +2409 -0
  321. package/aris/skills/paper-write/templates/IEEEtran.cls +6347 -0
  322. package/aris/skills/paper-write/templates/iclr2026.tex +84 -0
  323. package/aris/skills/paper-write/templates/icml2025.tex +87 -0
  324. package/aris/skills/paper-write/templates/ieee_conference.tex +89 -0
  325. package/aris/skills/paper-write/templates/ieee_journal.tex +93 -0
  326. package/aris/skills/paper-write/templates/math_commands.tex +48 -0
  327. package/aris/skills/paper-write/templates/neurips2025.tex +80 -0
  328. package/aris/skills/paper-writing/SKILL.md +929 -0
  329. package/aris/skills/patent-novelty-check/SKILL.md +153 -0
  330. package/aris/skills/patent-pipeline/SKILL.md +344 -0
  331. package/aris/skills/patent-review/SKILL.md +203 -0
  332. package/aris/skills/pixel-art/SKILL.md +137 -0
  333. package/aris/skills/prior-art-search/SKILL.md +146 -0
  334. package/aris/skills/proof-checker/SKILL.md +866 -0
  335. package/aris/skills/proof-orchestrator/NOTICE.md +24 -0
  336. package/aris/skills/proof-orchestrator/SKILL.md +254 -0
  337. package/aris/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
  338. package/aris/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
  339. package/aris/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
  340. package/aris/skills/proof-orchestrator/references/notation-audit.md +135 -0
  341. package/aris/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  342. package/aris/skills/proof-orchestrator/references/stress-tests.md +38 -0
  343. package/aris/skills/proof-writer/SKILL.md +223 -0
  344. package/aris/skills/qzcli/SKILL.md +324 -0
  345. package/aris/skills/rebuttal/SKILL.md +376 -0
  346. package/aris/skills/render-html/SKILL.md +316 -0
  347. package/aris/skills/render-html/scripts/render_html.py +1006 -0
  348. package/aris/skills/render-html/scripts/templates/academic.html +703 -0
  349. package/aris/skills/render-html/scripts/templates/dashboard.html +333 -0
  350. package/aris/skills/research-implement-feature/SKILL.md +583 -0
  351. package/aris/skills/research-lit/SKILL.md +756 -0
  352. package/aris/skills/research-pipeline/SKILL.md +390 -0
  353. package/aris/skills/research-refine/SKILL.md +770 -0
  354. package/aris/skills/research-refine-pipeline/SKILL.md +186 -0
  355. package/aris/skills/research-review/SKILL.md +223 -0
  356. package/aris/skills/research-wiki/SKILL.md +461 -0
  357. package/aris/skills/resubmit-pipeline/SKILL.md +447 -0
  358. package/{skills/result-to-claim-claude → aris/skills/result-to-claim}/SKILL.md +7 -17
  359. package/aris/skills/run-experiment/SKILL.md +313 -0
  360. package/aris/skills/semantic-scholar/SKILL.md +236 -0
  361. package/aris/skills/serverless-modal/SKILL.md +335 -0
  362. package/aris/skills/shared-references/acceptance-gate.md +324 -0
  363. package/aris/skills/shared-references/assurance-contract.md +248 -0
  364. package/aris/skills/shared-references/capture-antipatterns.md +78 -0
  365. package/aris/skills/shared-references/citation-discipline.md +583 -0
  366. package/aris/skills/shared-references/compute-env-contract.md +163 -0
  367. package/aris/skills/shared-references/effort-contract.md +183 -0
  368. package/aris/skills/shared-references/evidence-precheck.md +65 -0
  369. package/aris/skills/shared-references/experiment-integrity.md +49 -0
  370. package/aris/skills/shared-references/external-cadence.md +326 -0
  371. package/aris/skills/shared-references/fan-out-pattern.md +366 -0
  372. package/aris/skills/shared-references/injection-hygiene.md +127 -0
  373. package/aris/skills/shared-references/integration-contract.md +461 -0
  374. package/aris/skills/shared-references/output-composition.md +93 -0
  375. package/aris/skills/shared-references/output-language.md +45 -0
  376. package/aris/skills/shared-references/output-manifest.md +49 -0
  377. package/aris/skills/shared-references/output-versioning.md +111 -0
  378. package/aris/skills/shared-references/patent-format-cn.md +199 -0
  379. package/aris/skills/shared-references/patent-format-ep.md +173 -0
  380. package/aris/skills/shared-references/patent-format-us.md +161 -0
  381. package/aris/skills/shared-references/patent-writing-principles.md +197 -0
  382. package/aris/skills/shared-references/prior-art-databases.md +141 -0
  383. package/aris/skills/shared-references/resumable-runs.md +109 -0
  384. package/aris/skills/shared-references/review-scope-limits.md +81 -0
  385. package/aris/skills/shared-references/review-tracing.md +391 -0
  386. package/aris/skills/shared-references/reviewer-independence.md +79 -0
  387. package/aris/skills/shared-references/reviewer-routing.md +852 -0
  388. package/aris/skills/shared-references/skill-governance.md +104 -0
  389. package/aris/skills/shared-references/taste-calibration.md +85 -0
  390. package/aris/skills/shared-references/venue-checklists.md +114 -0
  391. package/aris/skills/shared-references/wiki-helper-resolution.md +134 -0
  392. package/aris/skills/shared-references/writing-principles.md +525 -0
  393. package/aris/skills/skills-codex/README.md +102 -0
  394. package/aris/skills/skills-codex/README_CN.md +100 -0
  395. package/aris/skills/skills-codex/ablation-planner/SKILL.md +126 -0
  396. package/aris/skills/skills-codex/alphaxiv/SKILL.md +186 -0
  397. package/aris/skills/skills-codex/analyze-results/SKILL.md +45 -0
  398. package/aris/skills/skills-codex/arxiv/SKILL.md +210 -0
  399. package/aris/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +618 -0
  400. package/aris/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
  401. package/aris/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
  402. package/aris/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
  403. package/aris/skills/skills-codex/citation-audit/SKILL.md +504 -0
  404. package/aris/skills/skills-codex/claims-drafting/SKILL.md +239 -0
  405. package/aris/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
  406. package/aris/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
  407. package/aris/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
  408. package/aris/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
  409. package/aris/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
  410. package/aris/skills/skills-codex/deepxiv/SKILL.md +142 -0
  411. package/aris/skills/skills-codex/dse-loop/SKILL.md +285 -0
  412. package/aris/skills/skills-codex/embodiment-description/SKILL.md +129 -0
  413. package/aris/skills/skills-codex/exa-search/SKILL.md +192 -0
  414. package/aris/skills/skills-codex/experiment-audit/SKILL.md +286 -0
  415. package/aris/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
  416. package/aris/skills/skills-codex/experiment-plan/SKILL.md +249 -0
  417. package/aris/skills/skills-codex/experiment-queue/SKILL.md +401 -0
  418. package/aris/skills/skills-codex/feishu-notify/SKILL.md +155 -0
  419. package/aris/skills/skills-codex/figure-description/SKILL.md +138 -0
  420. package/aris/skills/skills-codex/figure-spec/SKILL.md +252 -0
  421. package/aris/skills/skills-codex/formula-derivation/SKILL.md +280 -0
  422. package/aris/skills/skills-codex/gemini-search/SKILL.md +205 -0
  423. package/aris/skills/skills-codex/grant-proposal/SKILL.md +626 -0
  424. package/aris/skills/skills-codex/idea-creator/SKILL.md +438 -0
  425. package/aris/skills/skills-codex/idea-discovery/SKILL.md +477 -0
  426. package/aris/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
  427. package/aris/skills/skills-codex/integrity-forensics/SKILL.md +108 -0
  428. package/aris/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
  429. package/aris/skills/skills-codex/invention-structuring/SKILL.md +188 -0
  430. package/aris/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
  431. package/aris/skills/skills-codex/kill-argument/SKILL.md +403 -0
  432. package/aris/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
  433. package/aris/skills/skills-codex/meta-apply/SKILL.md +154 -0
  434. package/aris/skills/skills-codex/meta-optimize/SKILL.md +348 -0
  435. package/aris/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
  436. package/aris/skills/skills-codex/novelty-check/SKILL.md +130 -0
  437. package/aris/skills/skills-codex/openalex/SKILL.md +228 -0
  438. package/aris/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
  439. package/aris/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
  440. package/aris/skills/skills-codex/paper-compile/SKILL.md +253 -0
  441. package/aris/skills/skills-codex/paper-figure/SKILL.md +311 -0
  442. package/aris/skills/skills-codex/paper-illustration/SKILL.md +690 -0
  443. package/aris/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
  444. package/aris/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  445. package/aris/skills/skills-codex/paper-plan/SKILL.md +278 -0
  446. package/aris/skills/skills-codex/paper-poster/SKILL.md +19 -0
  447. package/aris/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
  448. package/aris/skills/skills-codex/paper-slides/SKILL.md +571 -0
  449. package/aris/skills/skills-codex/paper-talk/SKILL.md +381 -0
  450. package/aris/skills/skills-codex/paper-write/SKILL.md +487 -0
  451. package/aris/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
  452. package/aris/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
  453. package/aris/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
  454. package/aris/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
  455. package/aris/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
  456. package/aris/skills/skills-codex/paper-write/templates/acl.sty +312 -0
  457. package/aris/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
  458. package/aris/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
  459. package/aris/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
  460. package/aris/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
  461. package/aris/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
  462. package/aris/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
  463. package/aris/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
  464. package/aris/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
  465. package/aris/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
  466. package/aris/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
  467. package/aris/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
  468. package/aris/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
  469. package/aris/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
  470. package/aris/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
  471. package/aris/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
  472. package/aris/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
  473. package/aris/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
  474. package/aris/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
  475. package/aris/skills/skills-codex/paper-writing/SKILL.md +744 -0
  476. package/aris/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
  477. package/aris/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
  478. package/aris/skills/skills-codex/patent-review/SKILL.md +202 -0
  479. package/aris/skills/skills-codex/pixel-art/SKILL.md +139 -0
  480. package/aris/skills/skills-codex/prior-art-search/SKILL.md +146 -0
  481. package/aris/skills/skills-codex/proof-checker/SKILL.md +554 -0
  482. package/aris/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
  483. package/aris/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
  484. package/aris/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
  485. package/aris/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
  486. package/aris/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
  487. package/aris/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  488. package/aris/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
  489. package/aris/skills/skills-codex/proof-writer/SKILL.md +222 -0
  490. package/aris/skills/skills-codex/qzcli/SKILL.md +324 -0
  491. package/aris/skills/skills-codex/rebuttal/SKILL.md +305 -0
  492. package/aris/skills/skills-codex/render-html/SKILL.md +305 -0
  493. package/aris/skills/skills-codex/render-html/scripts/render_html.py +909 -0
  494. package/aris/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
  495. package/aris/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
  496. package/aris/skills/skills-codex/research-implement-feature/SKILL.md +406 -0
  497. package/aris/skills/skills-codex/research-lit/SKILL.md +464 -0
  498. package/aris/skills/skills-codex/research-pipeline/SKILL.md +346 -0
  499. package/aris/skills/skills-codex/research-refine/SKILL.md +721 -0
  500. package/aris/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
  501. package/aris/skills/skills-codex/research-review/SKILL.md +160 -0
  502. package/aris/skills/skills-codex/research-wiki/SKILL.md +421 -0
  503. package/aris/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
  504. package/aris/skills/skills-codex/result-to-claim/SKILL.md +246 -0
  505. package/aris/skills/skills-codex/run-experiment/SKILL.md +236 -0
  506. package/aris/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
  507. package/aris/skills/skills-codex/serverless-modal/SKILL.md +335 -0
  508. package/aris/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
  509. package/aris/skills/skills-codex/shared-references/assurance-contract.md +139 -0
  510. package/aris/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
  511. package/aris/skills/skills-codex/shared-references/citation-discipline.md +452 -0
  512. package/aris/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
  513. package/aris/skills/skills-codex/shared-references/effort-contract.md +143 -0
  514. package/aris/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
  515. package/aris/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
  516. package/aris/skills/skills-codex/shared-references/external-cadence.md +334 -0
  517. package/aris/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
  518. package/aris/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
  519. package/aris/skills/skills-codex/shared-references/integration-contract.md +372 -0
  520. package/aris/skills/skills-codex/shared-references/output-composition.md +98 -0
  521. package/aris/skills/skills-codex/shared-references/output-language.md +45 -0
  522. package/aris/skills/skills-codex/shared-references/output-manifest.md +40 -0
  523. package/aris/skills/skills-codex/shared-references/output-versioning.md +111 -0
  524. package/aris/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
  525. package/aris/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
  526. package/aris/skills/skills-codex/shared-references/patent-format-us.md +161 -0
  527. package/aris/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
  528. package/aris/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
  529. package/aris/skills/skills-codex/shared-references/resumable-runs.md +125 -0
  530. package/aris/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
  531. package/aris/skills/skills-codex/shared-references/review-tracing.md +144 -0
  532. package/aris/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
  533. package/aris/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
  534. package/aris/skills/skills-codex/shared-references/skill-governance.md +119 -0
  535. package/aris/skills/skills-codex/shared-references/taste-calibration.md +90 -0
  536. package/aris/skills/skills-codex/shared-references/venue-checklists.md +73 -0
  537. package/aris/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
  538. package/aris/skills/skills-codex/shared-references/writing-principles.md +525 -0
  539. package/aris/skills/skills-codex/slides-polish/SKILL.md +563 -0
  540. package/aris/skills/skills-codex/specification-writing/SKILL.md +211 -0
  541. package/aris/skills/skills-codex/system-profile/SKILL.md +103 -0
  542. package/aris/skills/skills-codex/training-check/SKILL.md +83 -0
  543. package/aris/skills/skills-codex/vast-gpu/SKILL.md +394 -0
  544. package/aris/skills/skills-codex/web-debug-search/SKILL.md +334 -0
  545. package/aris/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
  546. package/aris/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
  547. package/aris/skills/skills-codex-claude-review/README.md +79 -0
  548. package/aris/skills/skills-codex-claude-review/README_CN.md +78 -0
  549. package/aris/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +625 -0
  550. package/aris/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +516 -0
  551. package/{skills/novelty-check-claude → aris/skills/skills-codex-claude-review/novelty-check}/SKILL.md +2 -10
  552. package/aris/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
  553. package/aris/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
  554. package/aris/skills/skills-codex-claude-review/paper-write/SKILL.md +496 -0
  555. package/aris/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
  556. package/aris/skills/skills-codex-claude-review/research-review/SKILL.md +177 -0
  557. package/aris/skills/skills-codex-gemini-review/README.md +176 -0
  558. package/aris/skills/skills-codex-gemini-review/README_CN.md +175 -0
  559. package/aris/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +376 -0
  560. package/aris/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
  561. package/aris/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
  562. package/aris/skills/skills-codex-gemini-review/idea-creator/SKILL.md +287 -0
  563. package/aris/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
  564. package/aris/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
  565. package/aris/skills/skills-codex-gemini-review/novelty-check/SKILL.md +133 -0
  566. package/aris/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
  567. package/aris/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
  568. package/aris/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
  569. package/aris/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
  570. package/aris/skills/skills-codex-gemini-review/paper-write/SKILL.md +422 -0
  571. package/aris/skills/skills-codex-gemini-review/paper-writing/SKILL.md +325 -0
  572. package/aris/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
  573. package/aris/skills/skills-codex-gemini-review/research-review/SKILL.md +137 -0
  574. package/aris/skills/slides-polish/SKILL.md +565 -0
  575. package/aris/skills/specification-writing/SKILL.md +211 -0
  576. package/aris/skills/system-profile/SKILL.md +103 -0
  577. package/aris/skills/training-check/SKILL.md +132 -0
  578. package/aris/skills/vast-gpu/SKILL.md +394 -0
  579. package/aris/skills/web-debug-search/SKILL.md +334 -0
  580. package/aris/skills/wiki-enrich/SKILL.md +257 -0
  581. package/aris/skills/writing-systems-papers/SKILL.md +184 -0
  582. package/aris/templates/CLAUDE_MD_TEMPLATE.md +29 -0
  583. package/aris/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
  584. package/aris/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
  585. package/aris/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
  586. package/aris/templates/FINDINGS_TEMPLATE.md +52 -0
  587. package/aris/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
  588. package/aris/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
  589. package/aris/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
  590. package/aris/templates/MANIFEST_TEMPLATE.md +7 -0
  591. package/aris/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
  592. package/aris/templates/PAPER_PLAN_TEMPLATE.md +47 -0
  593. package/aris/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
  594. package/aris/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
  595. package/aris/templates/README.md +57 -0
  596. package/aris/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
  597. package/aris/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
  598. package/aris/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
  599. package/aris/templates/claude-hooks/corpus_write_guard.json +16 -0
  600. package/aris/templates/claude-hooks/corpus_write_guard.py +85 -0
  601. package/aris/templates/claude-hooks/meta_logging.json +74 -0
  602. package/aris/templates/gitignore-trace.txt +3 -0
  603. package/aris/tests/__init__.py +0 -0
  604. package/aris/tests/_feishu_bridge_helpers.py +82 -0
  605. package/aris/tests/_llm_chat_helpers.py +179 -0
  606. package/aris/tests/_minimax_helpers.py +189 -0
  607. package/aris/tests/test_argument_hint_lint.py +183 -0
  608. package/aris/tests/test_arxiv_fetch.py +266 -0
  609. package/aris/tests/test_auto_proceed_contract.py +106 -0
  610. package/aris/tests/test_capture_filter.py +86 -0
  611. package/aris/tests/test_claude_review_artifact_tools.py +171 -0
  612. package/aris/tests/test_claude_review_generator.py +51 -0
  613. package/aris/tests/test_claude_review_overlay.py +64 -0
  614. package/aris/tests/test_claude_review_parse.py +290 -0
  615. package/aris/tests/test_codex_exec_bridge.py +306 -0
  616. package/aris/tests/test_codex_image2_server.py +424 -0
  617. package/aris/tests/test_codex_install_update.py +511 -0
  618. package/aris/tests/test_codex_skill_mirror.py +547 -0
  619. package/aris/tests/test_copilot_install.py +1202 -0
  620. package/aris/tests/test_copilot_native_evidence.py +562 -0
  621. package/aris/tests/test_corpus_write_guard.py +76 -0
  622. package/aris/tests/test_deepxiv_fetch.py +180 -0
  623. package/aris/tests/test_evidence_check.py +189 -0
  624. package/aris/tests/test_exa_search.py +220 -0
  625. package/aris/tests/test_feishu_bridge_server.py +289 -0
  626. package/aris/tests/test_forensics_gate.py +565 -0
  627. package/aris/tests/test_http_reviewer_fallback_contract.py +43 -0
  628. package/aris/tests/test_http_reviewer_provenance_alignment.py +25 -0
  629. package/aris/tests/test_http_reviewer_review_gate.py +112 -0
  630. package/aris/tests/test_idea_creator_query_pack_scan.py +238 -0
  631. package/aris/tests/test_idea_discovery_gate.py +400 -0
  632. package/aris/tests/test_install_aris_agent_profiles.py +98 -0
  633. package/aris/tests/test_install_aris_ps1.py +359 -0
  634. package/aris/tests/test_install_aris_replace_link.py +119 -0
  635. package/aris/tests/test_install_aris_selective.py +235 -0
  636. package/aris/tests/test_install_aris_tools_symlink.py +196 -0
  637. package/aris/tests/test_iteration_log.py +85 -0
  638. package/aris/tests/test_llm_chat_converter.py +61 -0
  639. package/aris/tests/test_llm_chat_review_fallback.py +516 -0
  640. package/aris/tests/test_llm_chat_server.py +414 -0
  641. package/aris/tests/test_mainline_large_payload_prompts.py +72 -0
  642. package/aris/tests/test_manual_review.py +804 -0
  643. package/aris/tests/test_manual_review_integration.py +305 -0
  644. package/aris/tests/test_minimax_chat_server.py +464 -0
  645. package/aris/tests/test_minimax_integration.py +241 -0
  646. package/aris/tests/test_openalex_fetch.py +197 -0
  647. package/aris/tests/test_plugin_manifest.py +40 -0
  648. package/aris/tests/test_proof_suite_integration.py +66 -0
  649. package/aris/tests/test_provenance.py +284 -0
  650. package/aris/tests/test_research_wiki_claims.py +93 -0
  651. package/aris/tests/test_research_wiki_encoding.py +74 -0
  652. package/aris/tests/test_research_wiki_experiments.py +88 -0
  653. package/aris/tests/test_research_wiki_fetch_arxiv_metadata.py +242 -0
  654. package/aris/tests/test_research_wiki_helper_resolution.py +253 -0
  655. package/aris/tests/test_research_wiki_ideas.py +113 -0
  656. package/aris/tests/test_review_gate.py +358 -0
  657. package/aris/tests/test_reviewer_pins.py +90 -0
  658. package/aris/tests/test_run_state.py +313 -0
  659. package/aris/tests/test_skill_groups.py +111 -0
  660. package/aris/tests/test_skill_picker.py +207 -0
  661. package/aris/tests/test_threat_scan.py +139 -0
  662. package/aris/tests/test_trigger_eval.py +171 -0
  663. package/aris/tests/test_verify_paper_audits.py +198 -0
  664. package/aris/tests/test_watchdog.py +496 -0
  665. package/aris/tests/test_watchdog_loop.py +148 -0
  666. package/aris/tests/test_web_debug_search.py +157 -0
  667. package/aris/tools/arxiv_fetch.py +311 -0
  668. package/aris/tools/capture_filter.py +126 -0
  669. package/aris/tools/check_skills_inventory.py +287 -0
  670. package/aris/tools/convert_skills_to_llm_chat.py +282 -0
  671. package/aris/tools/copilot_native_evidence.py +818 -0
  672. package/aris/tools/deepxiv_fetch.py +213 -0
  673. package/aris/tools/evidence_check.py +212 -0
  674. package/aris/tools/exa_search.py +425 -0
  675. package/aris/tools/experiment_queue/README.md +118 -0
  676. package/aris/tools/experiment_queue/build_manifest.py +44 -0
  677. package/aris/tools/experiment_queue/queue_manager.py +44 -0
  678. package/aris/tools/extract_paper_style.py +560 -0
  679. package/aris/tools/figure_renderer.py +69 -0
  680. package/aris/tools/forensics_gate.py +669 -0
  681. package/aris/tools/generate_codex_claude_review_overrides.py +355 -0
  682. package/aris/tools/idea_discovery_gate.py +256 -0
  683. package/aris/tools/install_aris.ps1 +1372 -0
  684. package/aris/tools/install_aris.sh +1416 -0
  685. package/aris/tools/install_aris_codex.sh +1023 -0
  686. package/aris/tools/install_aris_copilot.sh +1052 -0
  687. package/aris/tools/iteration_log.py +143 -0
  688. package/aris/tools/lint_skills_helpers.sh +84 -0
  689. package/aris/tools/meta_opt/check_ready.sh +80 -0
  690. package/aris/tools/meta_opt/log_event.sh +91 -0
  691. package/aris/tools/meta_opt/trigger_eval.py +280 -0
  692. package/aris/tools/meta_opt/trigger_evals.sample.json +28 -0
  693. package/aris/tools/openalex_fetch.py +326 -0
  694. package/aris/tools/overleaf_audit.sh +104 -0
  695. package/aris/tools/overleaf_setup.sh +150 -0
  696. package/aris/tools/paper_illustration_image2.py +62 -0
  697. package/aris/tools/provenance.py +294 -0
  698. package/aris/tools/research_wiki.py +1720 -0
  699. package/aris/tools/review_gate.py +502 -0
  700. package/aris/tools/run_state.py +399 -0
  701. package/aris/tools/save_trace.sh +477 -0
  702. package/aris/tools/semantic_scholar_fetch.py +438 -0
  703. package/aris/tools/skill-groups.tsv +117 -0
  704. package/aris/tools/skill_picker.py +238 -0
  705. package/aris/tools/smart_update.ps1 +521 -0
  706. package/aris/tools/smart_update.sh +591 -0
  707. package/aris/tools/smart_update_codex.sh +419 -0
  708. package/aris/tools/smart_update_copilot.sh +605 -0
  709. package/aris/tools/threat_scan.py +222 -0
  710. package/aris/tools/verify_paper_audits.sh +487 -0
  711. package/aris/tools/verify_papers.py +613 -0
  712. package/aris/tools/verify_wiki_coverage.sh +176 -0
  713. package/aris/tools/watchdog.py +485 -0
  714. package/aris/xhs_post.md +125 -0
  715. package/dsh/client.js +43 -14
  716. package/dsh/http-rpc.mjs +8 -7
  717. package/mcp-servers/codex-exec/README.md +4 -4
  718. package/mcp-servers/codex-exec/server.py +1 -1
  719. package/package.json +4 -5
  720. package/skills/ablation-planner/SKILL.md +1 -1
  721. package/skills/auto-paper-improvement-loop/SKILL.md +10 -10
  722. package/skills/auto-paper-improvement-loop-claude/SKILL.md +25 -612
  723. package/skills/auto-review-loop/SKILL.md +4 -4
  724. package/skills/auto-review-loop-claude/SKILL.md +25 -503
  725. package/skills/citation-audit/SKILL.md +3 -3
  726. package/skills/claims-drafting/SKILL.md +2 -2
  727. package/skills/experiment-audit/SKILL.md +4 -4
  728. package/skills/experiment-bridge/SKILL.md +14 -12
  729. package/skills/figure-spec/SKILL.md +1 -1
  730. package/skills/grant-proposal/SKILL.md +7 -7
  731. package/skills/human-in-loop-refine/SKILL.md +119 -0
  732. package/skills/human-in-loop-refine/scripts/refine_round.py +449 -0
  733. package/skills/human-in-loop-refine/scripts/test_refine_round.py +200 -0
  734. package/skills/human-in-loop-refine/templates/INPUTS.md +20 -0
  735. package/skills/human-in-loop-refine/templates/PAPER_NOTE.md +29 -0
  736. package/skills/human-in-loop-refine/templates/REVISION.md +27 -0
  737. package/skills/idea-creator/SKILL.md +2 -2
  738. package/skills/idea-discovery/SKILL.md +15 -13
  739. package/skills/idea-discovery-robot/SKILL.md +11 -9
  740. package/skills/integrity-forensics/SKILL.md +1 -1
  741. package/skills/interview-cheatsheet/SKILL.md +3 -3
  742. package/skills/invention-structuring/SKILL.md +2 -2
  743. package/skills/kill-argument/SKILL.md +8 -8
  744. package/skills/kill-argument-claude/SKILL.md +30 -431
  745. package/skills/meta-apply/SKILL.md +1 -1
  746. package/skills/meta-optimize/SKILL.md +2 -2
  747. package/skills/novelty-check/SKILL.md +2 -2
  748. package/skills/paper-claim-audit/SKILL.md +5 -5
  749. package/skills/paper-figure/SKILL.md +4 -3
  750. package/skills/paper-figure-claude/SKILL.md +24 -305
  751. package/skills/paper-plan/SKILL.md +3 -3
  752. package/skills/paper-plan-claude/SKILL.md +24 -273
  753. package/skills/paper-poster-html/SKILL.md +11 -9
  754. package/skills/paper-slides/SKILL.md +5 -5
  755. package/skills/paper-talk/SKILL.md +10 -8
  756. package/skills/paper-write/SKILL.md +3 -3
  757. package/skills/paper-write-claude/SKILL.md +24 -482
  758. package/skills/paper-writing/SKILL.md +19 -17
  759. package/skills/patent-novelty-check/SKILL.md +3 -3
  760. package/skills/patent-pipeline/SKILL.md +2 -2
  761. package/skills/patent-review/SKILL.md +3 -3
  762. package/skills/proof-checker/SKILL.md +12 -12
  763. package/skills/proof-checker-claude/SKILL.md +30 -860
  764. package/skills/rebuttal/SKILL.md +12 -10
  765. package/skills/render-html/SKILL.md +1 -1
  766. package/skills/research-implement-feature/SKILL.md +1 -1
  767. package/skills/research-pipeline/SKILL.md +15 -13
  768. package/skills/research-refine/SKILL.md +6 -6
  769. package/skills/research-refine-claude/SKILL.md +24 -719
  770. package/skills/research-refine-pipeline/SKILL.md +10 -8
  771. package/skills/research-review/SKILL.md +7 -7
  772. package/skills/research-review-claude/SKILL.md +25 -164
  773. package/skills/resubmit-pipeline/SKILL.md +14 -12
  774. package/skills/result-to-claim/SKILL.md +2 -2
  775. package/skills/shared-references/assurance-contract.md +1 -1
  776. package/skills/shared-references/effort-contract.md +1 -1
  777. package/skills/shared-references/fan-out-pattern.md +4 -4
  778. package/skills/shared-references/resumable-runs.md +2 -2
  779. package/skills/shared-references/review-scope-limits.md +1 -1
  780. package/skills/shared-references/review-tracing.md +2 -2
  781. package/skills/shared-references/reviewer-routing.md +16 -14
  782. package/skills/shared-references/skill-governance.md +3 -3
  783. package/skills/skills-codex/ablation-planner/SKILL.md +1 -1
  784. package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +8 -8
  785. package/skills/skills-codex/auto-review-loop/SKILL.md +2 -2
  786. package/skills/skills-codex/citation-audit/SKILL.md +4 -4
  787. package/skills/skills-codex/claims-drafting/SKILL.md +2 -2
  788. package/skills/skills-codex/experiment-audit/SKILL.md +9 -9
  789. package/skills/skills-codex/experiment-bridge/SKILL.md +1 -1
  790. package/skills/skills-codex/figure-spec/SKILL.md +1 -1
  791. package/skills/skills-codex/grant-proposal/SKILL.md +7 -7
  792. package/skills/skills-codex/idea-creator/SKILL.md +4 -4
  793. package/skills/skills-codex/idea-discovery/SKILL.md +6 -6
  794. package/skills/skills-codex/idea-discovery-robot/SKILL.md +1 -1
  795. package/skills/skills-codex/integrity-forensics/SKILL.md +4 -2
  796. package/skills/skills-codex/interview-cheatsheet/SKILL.md +3 -3
  797. package/skills/skills-codex/invention-structuring/SKILL.md +2 -2
  798. package/skills/skills-codex/kill-argument/SKILL.md +7 -7
  799. package/skills/skills-codex/meta-apply/SKILL.md +1 -1
  800. package/skills/skills-codex/meta-optimize/SKILL.md +2 -2
  801. package/skills/skills-codex/novelty-check/SKILL.md +1 -1
  802. package/skills/skills-codex/paper-claim-audit/SKILL.md +6 -6
  803. package/skills/skills-codex/paper-figure/SKILL.md +3 -3
  804. package/skills/skills-codex/paper-plan/SKILL.md +3 -3
  805. package/skills/skills-codex/paper-poster-html/SKILL.md +3 -3
  806. package/skills/skills-codex/paper-slides/SKILL.md +4 -4
  807. package/skills/skills-codex/paper-write/SKILL.md +3 -3
  808. package/skills/skills-codex/paper-writing/SKILL.md +7 -7
  809. package/skills/skills-codex/patent-novelty-check/SKILL.md +3 -3
  810. package/skills/skills-codex/patent-pipeline/SKILL.md +2 -2
  811. package/skills/skills-codex/patent-review/SKILL.md +3 -3
  812. package/skills/skills-codex/proof-checker/SKILL.md +11 -11
  813. package/skills/skills-codex/rebuttal/SKILL.md +2 -2
  814. package/skills/skills-codex/render-html/SKILL.md +1 -1
  815. package/skills/skills-codex/research-implement-feature/SKILL.md +1 -1
  816. package/skills/skills-codex/research-pipeline/SKILL.md +5 -5
  817. package/skills/skills-codex/research-refine/SKILL.md +6 -6
  818. package/skills/skills-codex/research-review/SKILL.md +6 -6
  819. package/skills/skills-codex/resubmit-pipeline/SKILL.md +4 -4
  820. package/skills/skills-codex/result-to-claim/SKILL.md +2 -2
  821. package/skills/skills-codex/shared-references/assurance-contract.md +2 -2
  822. package/skills/skills-codex/shared-references/resumable-runs.md +3 -3
  823. package/skills/skills-codex/shared-references/review-scope-limits.md +1 -1
  824. package/skills/skills-codex/shared-references/review-tracing.md +3 -3
  825. package/skills/skills-codex/shared-references/reviewer-independence.md +2 -2
  826. package/skills/skills-codex/shared-references/reviewer-routing.md +10 -10
  827. package/skills/skills-codex/slides-polish/SKILL.md +3 -3
  828. package/skills/skills-codex/specification-writing/SKILL.md +2 -2
  829. package/skills/slides-polish/SKILL.md +3 -3
  830. package/skills/specification-writing/SKILL.md +2 -2
  831. package/skills/training-check/SKILL.md +2 -2
  832. package/skills/verify-manager/SKILL.md +88 -0
  833. package/skills/verify-manager/phases/1-specify.md +17 -0
  834. package/skills/verify-manager/phases/2-plan.md +14 -0
  835. package/skills/verify-manager/phases/3-tasks.md +19 -0
  836. package/skills/verify-manager/phases/4-run.md +12 -0
  837. package/skills/verify-manager/phases/5-analyze.md +21 -0
  838. package/skills/verify-manager/phases/6-next.md +19 -0
  839. package/skills/verify-manager/scripts/test_verify_space.py +202 -0
  840. package/skills/verify-manager/scripts/verify_space.py +451 -0
  841. package/skills/verify-manager/templates/HYPOTHESIS.md +37 -0
  842. package/skills/verify-manager/templates/NEXT_IDEAS.md +20 -0
  843. package/skills/verify-manager/templates/PILOT_PLAN.md +56 -0
  844. package/skills/verify-manager/templates/PILOT_TASKS.md +28 -0
  845. package/skills/verify-manager/templates/PROMOTION.md +17 -0
  846. package/skills/verify-manager/templates/RESULT.md +36 -0
  847. package/test/client-render-smoke.mjs +143 -0
  848. package/test/test_claude_overlays.py +99 -0
  849. package/test/transport-smoke.mjs +16 -4
  850. package/tools/__pycache__/build_claude_overlays.cpython-314.pyc +0 -0
  851. package/tools/__pycache__/verify_lane.cpython-314.pyc +0 -0
  852. package/tools/build_claude_overlays.py +187 -0
  853. package/tools/check_skills_inventory.py +17 -3
  854. package/tools/convert_skills_to_llm_chat.py +15 -15
  855. package/tools/generate_codex_claude_review_overrides.py +12 -12
  856. package/tools/run_state.py +1 -1
  857. package/tools/save_trace.sh +2 -2
@@ -0,0 +1 @@
1
+ httpx>=0.27,<1.0
@@ -0,0 +1,664 @@
1
+ #!/usr/bin/env python3
2
+ """Generic LLM Chat MCP Server - Supports any OpenAI-compatible API
3
+
4
+ Environment Variables:
5
+ LLM_API_KEY - API key (required)
6
+ LLM_BASE_URL - API base URL (default: https://api.openai.com/v1)
7
+ LLM_MODEL - Model name (default: gpt-4o)
8
+ LLM_FALLBACK_MODEL - Fallback model on 504 timeout (default: gpt-4o)
9
+ LLM_SERVER_NAME - Server name for MCP (default: llm-chat)
10
+ LLM_REVIEW_FALLBACK_ENABLED
11
+ - Expose review/review_reply tools when true (default: false)
12
+
13
+ Supported Providers (examples):
14
+ OpenAI: LLM_BASE_URL=https://api.openai.com/v1 LLM_MODEL=gpt-4o
15
+ DeepSeek: LLM_BASE_URL=https://api.deepseek.com/v1 LLM_MODEL=deepseek-chat
16
+ Kimi: LLM_BASE_URL=https://api.moonshot.cn/v1 LLM_MODEL=moonshot-v1-32k
17
+ MiniMax: LLM_BASE_URL=https://api.minimax.io/v1 LLM_MODEL=MiniMax-M3
18
+ """
19
+
20
+ import datetime
21
+ import json
22
+ import os
23
+ import re
24
+ import sys
25
+ import tempfile
26
+ import uuid
27
+ from pathlib import Path
28
+ import httpx
29
+
30
+ _stdio_initialized = False
31
+
32
+
33
+ def _init_stdio():
34
+ """Rebind stdio to raw unbuffered binary streams for MCP framing.
35
+
36
+ Deferred into a function (called at the top of main()) so that merely
37
+ IMPORTING this module has no stdio side effects. os.fdopen(fileno) defaults
38
+ to closefd=True and thus seizes ownership of the fd; doing that at import
39
+ time under a test harness that captures stdio (pytest fd-capture) closes the
40
+ harness's capture fd and corrupts capture for every subsequent test. Real
41
+ server launch (python server.py) still calls this first via main(), so
42
+ runtime behavior is unchanged. Idempotent."""
43
+ global _stdio_initialized
44
+ if _stdio_initialized:
45
+ return
46
+ # Force unbuffered stdout/stdin
47
+ sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', buffering=0)
48
+ sys.stdin = os.fdopen(sys.stdin.fileno(), 'rb', buffering=0)
49
+ _stdio_initialized = True
50
+
51
+ # Configuration from environment
52
+ API_KEY = os.environ.get("LLM_API_KEY", "")
53
+ BASE_URL = os.environ.get("LLM_BASE_URL", "https://api.openai.com/v1")
54
+ DEFAULT_MODEL = os.environ.get("LLM_MODEL", "gpt-4o")
55
+ FALLBACK_MODEL = os.environ.get("LLM_FALLBACK_MODEL", "gpt-4o")
56
+ SERVER_NAME = os.environ.get("LLM_SERVER_NAME", "llm-chat")
57
+ REVIEW_FALLBACK_ENABLED = os.environ.get(
58
+ "LLM_REVIEW_FALLBACK_ENABLED", "false"
59
+ ).strip().lower() in {"1", "true", "yes", "on"}
60
+
61
+ # Debug logging
62
+ DEBUG_LOG = os.path.join(tempfile.gettempdir(), f"{SERVER_NAME}-mcp-debug.log")
63
+
64
+ def debug_log(msg):
65
+ try:
66
+ with open(DEBUG_LOG, "a") as f:
67
+ f.write(f"{datetime.datetime.now()}: {msg}\n")
68
+ f.flush()
69
+ except Exception:
70
+ pass
71
+
72
+ def log_error(msg):
73
+ try:
74
+ with open(DEBUG_LOG, "a") as f:
75
+ f.write(f"{datetime.datetime.now()}: ERROR: {msg}\n")
76
+ except Exception:
77
+ pass
78
+
79
+ debug_log(f"=== {SERVER_NAME} MCP Server Starting (v2.2) ===")
80
+ debug_log(f"BASE_URL: {BASE_URL}")
81
+ debug_log(f"MODEL: {DEFAULT_MODEL}")
82
+ debug_log(f"FALLBACK_MODEL: {FALLBACK_MODEL}")
83
+ debug_log(f"REVIEW_FALLBACK_ENABLED: {REVIEW_FALLBACK_ENABLED}")
84
+ debug_log(f"API_KEY set: {bool(API_KEY)}")
85
+
86
+ _use_ndjson = False
87
+ _review_threads = {}
88
+
89
+ def send_response(response):
90
+ global _use_ndjson
91
+ json_str = json.dumps(response, separators=(',', ':'))
92
+ json_bytes = json_str.encode('utf-8')
93
+
94
+ if _use_ndjson:
95
+ output = json_bytes + b'\n'
96
+ else:
97
+ header = f"Content-Length: {len(json_bytes)}\r\n\r\n".encode('utf-8')
98
+ output = header + json_bytes
99
+
100
+ sys.stdout.write(output)
101
+ sys.stdout.flush()
102
+
103
+ def _call_llm_detailed(messages, model=None):
104
+ """Call LLM Chat Completions API and return content, error, actual model."""
105
+ if not API_KEY:
106
+ return None, "LLM_API_KEY environment variable not set", None
107
+
108
+ use_model = model or DEFAULT_MODEL
109
+ url = f"{BASE_URL.rstrip('/')}/chat/completions"
110
+ headers = {
111
+ "Content-Type": "application/json",
112
+ "Authorization": f"Bearer {API_KEY}"
113
+ }
114
+
115
+ # Try: original model → retry same model → fallback model.
116
+ # This retrying behavior is intentionally legacy-chat-only. Verdict-bearing
117
+ # review/review_reply calls use _call_llm_review_once below so ambiguous
118
+ # failures can never duplicate a paid review or produce conflicting verdicts.
119
+ for attempt in range(3):
120
+ current_model = use_model if attempt < 2 else FALLBACK_MODEL
121
+ payload = {
122
+ "model": current_model,
123
+ "messages": messages,
124
+ "max_tokens": 4096
125
+ }
126
+
127
+ debug_log(f"Calling LLM API (attempt {attempt + 1}): model={current_model}")
128
+
129
+ try:
130
+ with httpx.Client(timeout=300.0) as client:
131
+ response = client.post(url, headers=headers, json=payload)
132
+
133
+ if response.status_code == 504:
134
+ debug_log(f"504 Gateway Timeout on attempt {attempt + 1} with model {current_model}")
135
+ if attempt < 2:
136
+ continue # retry or fallback
137
+
138
+ if response.status_code != 200:
139
+ error_msg = f"API error {response.status_code}: {response.text[:500]}"
140
+ debug_log(f"API error: {error_msg}")
141
+ return None, error_msg, None
142
+
143
+ data = response.json()
144
+ try:
145
+ content = data["choices"][0]["message"]["content"]
146
+ except (KeyError, IndexError, TypeError) as e:
147
+ return None, f"Unexpected API response structure: {e}", None
148
+
149
+ # Prefer the model identity reported by the provider. If absent,
150
+ # use the exact model id sent in this successful request.
151
+ actual_model = str(data.get("model") or current_model).strip()
152
+
153
+ if current_model != use_model:
154
+ fallback_note = f"\n\n[Note: Used fallback model {current_model} after 504 timeout with {use_model}]"
155
+ content = fallback_note + "\n" + content
156
+ debug_log(f"API success with fallback model {actual_model}, response length: {len(content)}")
157
+ elif attempt > 0:
158
+ debug_log(f"API success on retry (attempt {attempt + 1}), response length: {len(content)}")
159
+ else:
160
+ debug_log(f"API success, response length: {len(content)}")
161
+ return content, None, actual_model
162
+ except Exception as e:
163
+ debug_log(f"API exception on attempt {attempt + 1}: {str(e)}")
164
+ if attempt == 2:
165
+ return None, str(e), None
166
+
167
+ return None, "All attempts failed with 504 Gateway Timeout", None
168
+
169
+ def call_llm(messages, model=None):
170
+ """Backward-compatible two-value wrapper for the existing chat tool."""
171
+ content, error, _actual_model = _call_llm_detailed(messages, model)
172
+ return content, error
173
+
174
+
175
+ def _call_llm_review_once(messages, model=None):
176
+ """Single-attempt, fail-closed call for verdict-bearing reviewer tools.
177
+
178
+ Once the HTTP request is dispatched, a timeout, 504, malformed response, or
179
+ transport exception is ambiguous: the remote reviewer may already have run.
180
+ Never retry or switch to FALLBACK_MODEL here. Surface the error so the
181
+ orchestrator/gate records REVIEW_UNAVAILABLE instead of issuing a duplicate
182
+ paid review with a potentially conflicting verdict.
183
+ """
184
+ if not API_KEY:
185
+ return None, "LLM_API_KEY environment variable not set", None
186
+
187
+ use_model = model or DEFAULT_MODEL
188
+ url = f"{BASE_URL.rstrip('/')}/chat/completions"
189
+ headers = {
190
+ "Content-Type": "application/json",
191
+ "Authorization": f"Bearer {API_KEY}"
192
+ }
193
+ payload = {
194
+ "model": use_model,
195
+ "messages": messages,
196
+ "max_tokens": 4096
197
+ }
198
+
199
+ debug_log(f"Calling verdict-bearing LLM review once: model={use_model}")
200
+ try:
201
+ with httpx.Client(timeout=300.0) as client:
202
+ response = client.post(url, headers=headers, json=payload)
203
+ if response.status_code != 200:
204
+ error_msg = f"API error {response.status_code}: {response.text[:500]}"
205
+ debug_log(f"Review API error (no retry): {error_msg}")
206
+ return None, error_msg, None
207
+
208
+ try:
209
+ data = response.json()
210
+ except Exception as exc:
211
+ error_msg = f"Invalid API JSON response: {exc}"
212
+ debug_log(f"Review API parse error (no retry): {error_msg}")
213
+ return None, error_msg, None
214
+
215
+ try:
216
+ content = data["choices"][0]["message"]["content"]
217
+ except (KeyError, IndexError, TypeError) as exc:
218
+ error_msg = f"Unexpected API response structure: {exc}"
219
+ debug_log(f"Review API structure error (no retry): {error_msg}")
220
+ return None, error_msg, None
221
+
222
+ actual_model = str(data.get("model") or use_model).strip()
223
+ debug_log(
224
+ f"Verdict-bearing API success: model={actual_model}, "
225
+ f"response length={len(content)}"
226
+ )
227
+ return content, None, actual_model
228
+ except Exception as exc:
229
+ debug_log(f"Review API exception (no retry): {str(exc)}")
230
+ return None, str(exc), None
231
+
232
+
233
+ # Coarse model families used only by the opt-in verdict-bearing review tools.
234
+ _FAMILY = [
235
+ ("anthropic", ("claude", "opus", "sonnet", "haiku", "anthropic")),
236
+ ("openai", ("gpt", "codex", "chatgpt", "o1", "o3", "o4", "openai")),
237
+ ("google", ("gemini", "google", "palm", "bard")),
238
+ ("deepseek", ("deepseek",)),
239
+ ("zhipu", ("glm", "zhipu")),
240
+ ("minimax", ("minimax", "abab")),
241
+ ("moonshot", ("kimi", "moonshot")),
242
+ ("qwen", ("qwen", "tongyi")),
243
+ ("xiaomi", ("mimo", "xiaomi")),
244
+ ("bytedance", ("doubao", "bytedance", "volcengine")),
245
+ ("xai", ("grok",)),
246
+ ("meta", ("llama",)),
247
+ ("mistral", ("mistral", "mixtral")),
248
+ ]
249
+ _SHORT = {"o1", "o3", "o4"}
250
+
251
+ def model_family(name):
252
+ """Map a model id to a coarse family; collisions fail closed.
253
+
254
+ Match family needles at token boundaries, mirroring review_gate.py, so a
255
+ provider prefix such as ``ollama/deepseek-r1`` does not accidentally match
256
+ the ``llama`` model family inside ``ollama``.
257
+ """
258
+ n = str(name or "").strip().lower()
259
+ matched = set()
260
+ for family, needles in _FAMILY:
261
+ for needle in needles:
262
+ suffix = "" if needle in _SHORT else r"[0-9.]*"
263
+ pattern = rf"(^|[^a-z0-9]){re.escape(needle)}{suffix}([^a-z0-9]|$)"
264
+ if re.search(pattern, n):
265
+ matched.add(family)
266
+ break
267
+ return next(iter(matched)) if len(matched) == 1 else "unknown"
268
+
269
+ def _cross_family_error(executor_model, reviewer_model):
270
+ executor_family = model_family(executor_model)
271
+ reviewer_family = model_family(reviewer_model)
272
+ if executor_family == "unknown":
273
+ return (f"Cannot verify HTTP reviewer independence: executor_model is "
274
+ f"missing or unrecognized ({executor_model!r})")
275
+ if reviewer_family == "unknown":
276
+ return f"Cannot verify HTTP reviewer model family: {reviewer_model!r}"
277
+ if executor_family == reviewer_family:
278
+ return (f"HTTP reviewer must use a different model family: "
279
+ f"executor={executor_model} ({executor_family}), "
280
+ f"reviewer={reviewer_model} ({reviewer_family})")
281
+ return None
282
+
283
+ def _tool_success(request_id, payload):
284
+ return {
285
+ "jsonrpc": "2.0",
286
+ "id": request_id,
287
+ "result": {
288
+ "content": [{"type": "text", "text": json.dumps(payload, ensure_ascii=False)}]
289
+ }
290
+ }
291
+
292
+ def _tool_error(request_id, message):
293
+ return {
294
+ "jsonrpc": "2.0",
295
+ "id": request_id,
296
+ "result": {
297
+ "content": [{"type": "text", "text": json.dumps({"error": message}, ensure_ascii=False)}],
298
+ "isError": True
299
+ }
300
+ }
301
+
302
+ def _read_review_files(paths):
303
+ """Read explicit primary artifacts that will be sent to the HTTP endpoint."""
304
+ if paths is None:
305
+ return ""
306
+ if not isinstance(paths, list):
307
+ raise ValueError("files must be an array of file paths")
308
+
309
+ sections = []
310
+ for raw_path in paths:
311
+ path = Path(str(raw_path)).expanduser()
312
+ if not path.is_file():
313
+ raise ValueError(f"review file not found or not a regular file: {path}")
314
+ try:
315
+ text = path.read_text(encoding="utf-8", errors="replace")
316
+ except OSError as exc:
317
+ raise ValueError(f"cannot read review file {path}: {exc}") from exc
318
+ sections.append(
319
+ f"\n\n--- ARIS PRIMARY ARTIFACT: {path} ---\n{text}"
320
+ f"\n--- END ARIS PRIMARY ARTIFACT: {path} ---"
321
+ )
322
+ return "".join(sections)
323
+
324
+ def _review_user_content(prompt, files):
325
+ return prompt + _read_review_files(files)
326
+
327
+ def _review_messages(history, prompt, system=""):
328
+ messages = []
329
+ if system:
330
+ messages.append({"role": "system", "content": system})
331
+ messages.extend(history)
332
+ messages.append({"role": "user", "content": prompt})
333
+ return messages
334
+
335
+ def _handle_review(arguments, request_id):
336
+ prompt = str(arguments.get("prompt", "")).strip()
337
+ executor_model = str(arguments.get("executor_model", "")).strip()
338
+ model = str(arguments.get("model", DEFAULT_MODEL)).strip() or DEFAULT_MODEL
339
+ system = str(arguments.get("system", "")).strip()
340
+ files = arguments.get("files", [])
341
+
342
+ if not prompt:
343
+ return _tool_error(request_id, "prompt is required")
344
+ if not executor_model:
345
+ return _tool_error(request_id, "executor_model is required for cross-family review")
346
+
347
+ try:
348
+ user_content = _review_user_content(prompt, files)
349
+ except ValueError as exc:
350
+ return _tool_error(request_id, str(exc))
351
+
352
+ content, error, actual_model = _call_llm_review_once(
353
+ _review_messages([], user_content, system), model
354
+ )
355
+ if error:
356
+ return _tool_error(request_id, error)
357
+
358
+ independence_error = _cross_family_error(executor_model, actual_model)
359
+ if independence_error:
360
+ return _tool_error(request_id, independence_error)
361
+
362
+ thread_id = uuid.uuid4().hex[:12]
363
+ _review_threads[thread_id] = {
364
+ "messages": [
365
+ {"role": "user", "content": user_content},
366
+ {"role": "assistant", "content": content},
367
+ ],
368
+ "model": model,
369
+ "system": system,
370
+ "executor_model": executor_model,
371
+ }
372
+ return _tool_success(request_id, {
373
+ "threadId": thread_id,
374
+ "content": content,
375
+ "reviewer_model": actual_model,
376
+ "reviewer_family": model_family(actual_model),
377
+ "executor_model": executor_model,
378
+ "executor_family": model_family(executor_model),
379
+ "family_relation": "different",
380
+ "independence_verified": "unverified",
381
+ })
382
+
383
+ def _handle_review_reply(arguments, request_id):
384
+ thread_id = str(arguments.get("threadId", "")).strip()
385
+ prompt = str(arguments.get("prompt", "")).strip()
386
+ if not thread_id:
387
+ return _tool_error(request_id, "threadId is required")
388
+ if thread_id not in _review_threads:
389
+ return _tool_error(request_id, f"Unknown threadId: {thread_id}")
390
+ if not prompt:
391
+ return _tool_error(request_id, "prompt is required")
392
+
393
+ thread = _review_threads[thread_id]
394
+ executor_model = str(arguments.get("executor_model", thread["executor_model"])).strip()
395
+ if executor_model != thread["executor_model"]:
396
+ return _tool_error(request_id, "executor_model cannot change within a review thread")
397
+ model = str(arguments.get("model", thread["model"])).strip() or thread["model"]
398
+ if model != thread["model"]:
399
+ return _tool_error(request_id, "reviewer model cannot change within a review thread")
400
+ system = str(arguments.get("system", thread["system"])).strip()
401
+ files = arguments.get("files", [])
402
+
403
+ try:
404
+ user_content = _review_user_content(prompt, files)
405
+ except ValueError as exc:
406
+ return _tool_error(request_id, str(exc))
407
+
408
+ history = list(thread["messages"])
409
+ content, error, actual_model = _call_llm_review_once(
410
+ _review_messages(history, user_content, system), model
411
+ )
412
+ if error:
413
+ return _tool_error(request_id, error)
414
+
415
+ independence_error = _cross_family_error(executor_model, actual_model)
416
+ if independence_error:
417
+ return _tool_error(request_id, independence_error)
418
+
419
+ thread["messages"].extend([
420
+ {"role": "user", "content": user_content},
421
+ {"role": "assistant", "content": content},
422
+ ])
423
+ return _tool_success(request_id, {
424
+ "threadId": thread_id,
425
+ "content": content,
426
+ "reviewer_model": actual_model,
427
+ "reviewer_family": model_family(actual_model),
428
+ "executor_model": executor_model,
429
+ "executor_family": model_family(executor_model),
430
+ "family_relation": "different",
431
+ "independence_verified": "unverified",
432
+ })
433
+
434
+ def _review_tool_definitions():
435
+ common = {
436
+ "prompt": {"type": "string", "description": "The substantive ARIS review prompt"},
437
+ "executor_model": {
438
+ "type": "string",
439
+ "description": "Actual executor model id; required to enforce cross-family review"
440
+ },
441
+ "model": {"type": "string", "description": f"Reviewer model (default: {DEFAULT_MODEL})"},
442
+ "system": {"type": "string", "description": "Optional reviewer system prompt"},
443
+ "files": {
444
+ "type": "array",
445
+ "items": {"type": "string"},
446
+ "description": "Local primary-artifact paths to send verbatim to the HTTP reviewer"
447
+ },
448
+ }
449
+ return [
450
+ {
451
+ "name": "review",
452
+ "description": "Start an independent HTTP reviewer thread.",
453
+ "inputSchema": {
454
+ "type": "object",
455
+ "properties": dict(common),
456
+ "required": ["prompt", "executor_model"]
457
+ }
458
+ },
459
+ {
460
+ "name": "review_reply",
461
+ "description": "Continue an HTTP reviewer thread with prior message history.",
462
+ "inputSchema": {
463
+ "type": "object",
464
+ "properties": dict(common, threadId={
465
+ "type": "string",
466
+ "description": "threadId returned by review"
467
+ }),
468
+ "required": ["threadId", "prompt"]
469
+ }
470
+ }
471
+ ]
472
+
473
+ def handle_request(request):
474
+ """Handle a JSON-RPC request"""
475
+ method = request.get("method", "")
476
+ params = request.get("params", {})
477
+ request_id = request.get("id")
478
+
479
+ debug_log(f"Handling method: {method}, id: {request_id}")
480
+
481
+ # Handle notifications (no id, no response needed)
482
+ if request_id is None:
483
+ if method == "notifications/initialized":
484
+ debug_log("Client initialized successfully")
485
+ return None
486
+
487
+ if method == "initialize":
488
+ return {
489
+ "jsonrpc": "2.0",
490
+ "id": request_id,
491
+ "result": {
492
+ "protocolVersion": "2024-11-05",
493
+ "capabilities": {
494
+ "tools": {}
495
+ },
496
+ "serverInfo": {
497
+ "name": SERVER_NAME,
498
+ "version": "2.2.0"
499
+ }
500
+ }
501
+ }
502
+
503
+ elif method == "ping":
504
+ return {"jsonrpc": "2.0", "id": request_id, "result": {}}
505
+
506
+ elif method == "tools/list":
507
+ tools = [{
508
+ "name": "chat",
509
+ "description": f"Send a message to {DEFAULT_MODEL} and get a response. Use this for research reviews, code analysis, and general AI tasks.",
510
+ "inputSchema": {
511
+ "type": "object",
512
+ "properties": {
513
+ "prompt": {
514
+ "type": "string",
515
+ "description": "The prompt to send"
516
+ },
517
+ "model": {
518
+ "type": "string",
519
+ "description": f"Model to use (default: {DEFAULT_MODEL})"
520
+ },
521
+ "system": {
522
+ "type": "string",
523
+ "description": "Optional system prompt"
524
+ }
525
+ },
526
+ "required": ["prompt"]
527
+ }
528
+ }]
529
+ if REVIEW_FALLBACK_ENABLED:
530
+ tools.extend(_review_tool_definitions())
531
+ return {
532
+ "jsonrpc": "2.0",
533
+ "id": request_id,
534
+ "result": {"tools": tools}
535
+ }
536
+
537
+ elif method == "tools/call":
538
+ tool_name = params.get("name", "")
539
+ arguments = params.get("arguments", {})
540
+
541
+ if tool_name == "chat":
542
+ prompt = arguments.get("prompt", "")
543
+ model = arguments.get("model", DEFAULT_MODEL)
544
+ system = arguments.get("system", "")
545
+
546
+ messages = []
547
+ if system:
548
+ messages.append({"role": "system", "content": system})
549
+ messages.append({"role": "user", "content": prompt})
550
+
551
+ debug_log(f"Tool call: chat, prompt length: {len(prompt)}")
552
+ content, error = call_llm(messages, model)
553
+
554
+ if error:
555
+ return {
556
+ "jsonrpc": "2.0",
557
+ "id": request_id,
558
+ "result": {
559
+ "content": [{"type": "text", "text": f"Error: {error}"}],
560
+ "isError": True
561
+ }
562
+ }
563
+
564
+ return {
565
+ "jsonrpc": "2.0",
566
+ "id": request_id,
567
+ "result": {
568
+ "content": [{"type": "text", "text": content}]
569
+ }
570
+ }
571
+
572
+ if tool_name == "review":
573
+ if not REVIEW_FALLBACK_ENABLED:
574
+ return _tool_error(
575
+ request_id,
576
+ "HTTP reviewer fallback is disabled. Set "
577
+ "LLM_REVIEW_FALLBACK_ENABLED=true and restart the MCP server."
578
+ )
579
+ return _handle_review(arguments, request_id)
580
+
581
+ if tool_name == "review_reply":
582
+ if not REVIEW_FALLBACK_ENABLED:
583
+ return _tool_error(
584
+ request_id,
585
+ "HTTP reviewer fallback is disabled. Set "
586
+ "LLM_REVIEW_FALLBACK_ENABLED=true and restart the MCP server."
587
+ )
588
+ return _handle_review_reply(arguments, request_id)
589
+
590
+ return {
591
+ "jsonrpc": "2.0",
592
+ "id": request_id,
593
+ "error": {"code": -32601, "message": f"Unknown tool: {tool_name}"}
594
+ }
595
+
596
+ else:
597
+ return {
598
+ "jsonrpc": "2.0",
599
+ "id": request_id,
600
+ "error": {"code": -32601, "message": f"Unknown method: {method}"}
601
+ }
602
+
603
+ def read_message():
604
+ """Read a single JSON-RPC message from stdin."""
605
+ global _use_ndjson
606
+
607
+ line = sys.stdin.readline()
608
+ if not line:
609
+ return None
610
+
611
+ line = line.decode('utf-8').rstrip('\r\n')
612
+
613
+ if line.lower().startswith("content-length:"):
614
+ try:
615
+ content_length = int(line.split(":", 1)[1].strip())
616
+ except ValueError:
617
+ return None
618
+
619
+ while True:
620
+ hdr = sys.stdin.readline()
621
+ if not hdr:
622
+ return None
623
+ hdr = hdr.decode('utf-8').rstrip('\r\n')
624
+ if hdr == "":
625
+ break
626
+
627
+ body = sys.stdin.read(content_length)
628
+ try:
629
+ return json.loads(body.decode('utf-8'))
630
+ except Exception:
631
+ return None
632
+
633
+ elif line.startswith("{") or line.startswith("["):
634
+ _use_ndjson = True
635
+ try:
636
+ return json.loads(line)
637
+ except Exception:
638
+ return None
639
+
640
+ return None
641
+
642
+ def main():
643
+ """Main loop - read JSON-RPC messages from stdin"""
644
+ _init_stdio()
645
+ debug_log("Entering main loop")
646
+
647
+ while True:
648
+ try:
649
+ request = read_message()
650
+ if request is None:
651
+ debug_log("EOF, exiting")
652
+ break
653
+
654
+ response = handle_request(request)
655
+ if response:
656
+ send_response(response)
657
+
658
+ except Exception as e:
659
+ log_error(f"Exception: {e}")
660
+
661
+ debug_log("=== Server Exiting ===")
662
+
663
+ if __name__ == "__main__":
664
+ main()