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,445 @@
1
+ #!/usr/bin/env python3
2
+ """ARIS-Monitor: STRICTLY READ-ONLY session scanner / triage classifier.
3
+
4
+ This module READS files under ~/.claude only. It NEVER writes, kills, signals,
5
+ spawns, runs subprocess/tmux/ps, polls processes, or touches the network.
6
+
7
+ Authoritative needs-approval signal
8
+ ------------------------------------
9
+ The core MVP signal -- "this session is blocked waiting for you to approve
10
+ something" -- comes STRAIGHT FROM the live registry file:
11
+
12
+ ~/.claude/sessions/<pid>.json -> status == "waiting"
13
+
14
+ The Claude Code app itself sets status=="waiting" (with an optional
15
+ `waitingFor` string like "Bash(npm test) needs approval") while a permission
16
+ prompt is on screen, and rewrites the file the instant the user answers. So:
17
+ * needs_approval is detected with NO transcript parsing at all, and
18
+ * it is inherently TRANSIENT -- you must poll (every ~1-2s) to catch it;
19
+ on a quiescent machine you will only ever see busy/idle.
20
+
21
+ We deliberately do NOT use the "unmatched trailing tool_use" transcript
22
+ heuristic for needs_approval: a bare tool_use stop while status != "waiting"
23
+ means STALLED, not pending-approval, and keying off it false-positives on
24
+ every mid-tool pause.
25
+
26
+ Liveness
27
+ --------
28
+ Liveness is inferred purely from `updatedAt` freshness. We deliberately do NOT
29
+ call os.kill(pid, 0), ps, or anything that interacts with live OS state. A
30
+ registry file untouched within LIVE_WINDOW is treated as stale and hidden.
31
+
32
+ Codex
33
+ -----
34
+ Codex is OUT OF SCOPE for needs_approval: there is no on-disk live-status file
35
+ equivalent to ~/.claude/sessions/*.json, and Codex approval prompts are never
36
+ written to the rollout JSONL. This scanner does NOT scan Codex at all. (If a
37
+ future version shows Codex it must be display-only history and must NEVER claim
38
+ needs_approval.)
39
+
40
+ Public API
41
+ ----------
42
+ scan() -> list[Session] # classified, sorted, stale folded to a count
43
+ summary(sessions) -> dict # header counts for the widget
44
+
45
+ Run as a script for a GUI-less smoke test:
46
+ python3 scanner.py # prints the classified session list to stdout
47
+ # (names + triage only; no transcript content)
48
+ """
49
+ from __future__ import annotations
50
+
51
+ import glob
52
+ import json
53
+ import os
54
+ import time
55
+ from dataclasses import dataclass
56
+ from pathlib import Path
57
+ from typing import List, Optional, Tuple
58
+
59
+ # ---------------------------------------------------------------------------
60
+ # Tunables (top-of-file constants only -- no config UI by design).
61
+ # ---------------------------------------------------------------------------
62
+ IDLE_THRESHOLD = 300 # seconds; "busy & fresh" => working
63
+ LIVE_WINDOW = 1800 # seconds (30 min); updatedAt older than this => stale,
64
+ # folded into the dim "+N stale" line (click to expand)
65
+ TRANSCRIPT_TAIL_BYTES = 262144 # 256 KiB read-only tail of the transcript
66
+ TAIL_LINES = 40 # how many trailing JSONL lines we inspect
67
+
68
+ # ---------------------------------------------------------------------------
69
+ # Paths. CLAUDE_FLOAT_HOME lets tests/demos point at a fixture tree; defaults
70
+ # to the real ~. We ONLY ever read from here.
71
+ # ---------------------------------------------------------------------------
72
+ def _home_base() -> Path:
73
+ env = os.environ.get("CLAUDE_FLOAT_HOME")
74
+ return Path(env).expanduser() if env else Path.home()
75
+
76
+
77
+ HOME_BASE = _home_base()
78
+ CLAUDE_HOME = HOME_BASE / ".claude"
79
+ SESSIONS_DIR = CLAUDE_HOME / "sessions"
80
+ PROJECTS_DIR = CLAUDE_HOME / "projects"
81
+
82
+ # ---------------------------------------------------------------------------
83
+ # Triage buckets. The 5 fleet buckets collapse into the 3 visible MVP buckets
84
+ # (+ a low-priority amber for stalled and a hidden stale bucket).
85
+ # The ONLY bucket the MVP must get exactly right is needs_approval, and it
86
+ # comes straight from status == "waiting" -- no transcript parse required.
87
+ # ---------------------------------------------------------------------------
88
+ NEEDS_APPROVAL = "needs_approval" # RED -- blocked on the user to approve
89
+ NEEDS_ATTENTION = "needs_attention" # amber -- stalled mid-tool, may need a nudge
90
+ WORKING = "working" # amber -- actively running
91
+ IDLE_DONE = "idle_done" # green -- finished / awaiting your review
92
+ STALE_HIDDEN = "stale_hidden" # folded into a dim "+N stale" count
93
+
94
+ # Sort priority (lower = more urgent / higher in the list).
95
+ SORT_PRIORITY = {
96
+ NEEDS_APPROVAL: 0,
97
+ NEEDS_ATTENTION: 1,
98
+ IDLE_DONE: 2,
99
+ WORKING: 3,
100
+ STALE_HIDDEN: 9,
101
+ }
102
+
103
+
104
+ @dataclass
105
+ class Info:
106
+ stop_reason: Optional[str] = None
107
+ last_tool: str = ""
108
+ has_pending_background: bool = False
109
+
110
+
111
+ @dataclass
112
+ class Session:
113
+ pid: int
114
+ name: str
115
+ cwd: str
116
+ status: str # raw status from the live JSON (busy|idle|waiting|...)
117
+ triage: str # one of the bucket constants above
118
+ reason: str # human-readable detail
119
+ idle_seconds: int
120
+ updated_at: int # ms epoch from the live JSON
121
+
122
+
123
+ # ---------------------------------------------------------------------------
124
+ # Read-only helpers.
125
+ # ---------------------------------------------------------------------------
126
+ def _as_int(value, default: int = 0) -> int:
127
+ """Coerce a possibly-malformed registry value to int -- never raises.
128
+
129
+ Concurrent partial writes can leave a field like updatedAt=="12.5" or
130
+ pid=="abc" mid-flush. int() would raise ValueError on those; we swallow it
131
+ so ONE half-written field can never blank the whole scan.
132
+ """
133
+ try:
134
+ return int(value)
135
+ except Exception:
136
+ try:
137
+ return int(float(value))
138
+ except Exception:
139
+ return default
140
+
141
+
142
+ def _cwd_to_project_slug(cwd: str) -> str:
143
+ """Mirror Claude Code's project-dir naming: / _ . all become -."""
144
+ return cwd.replace("/", "-").replace("_", "-").replace(".", "-")
145
+
146
+
147
+ def _load_session_file(path: Path) -> Optional[dict]:
148
+ """Read one <pid>.json. Returns None on any failure -- never raises.
149
+
150
+ ~/.claude/sessions is mode 0700; we run as the user so reads succeed, but
151
+ we still wrap every open() for robustness against truncated/partial writes.
152
+ """
153
+ try:
154
+ with path.open(encoding="utf-8") as f:
155
+ data = json.load(f)
156
+ except Exception:
157
+ return None
158
+ # Only require a dict. We deliberately do NOT require "pid": a half-written
159
+ # file can have status=="waiting" before pid is flushed, and dropping it
160
+ # here would be a costly miss of the one thing we exist to surface. pid is
161
+ # recovered from the <pid>.json filename in scan() when absent.
162
+ if not isinstance(data, dict):
163
+ return None
164
+ return data
165
+
166
+
167
+ def _transcript_path(session_id: str, cwd: str) -> Optional[Path]:
168
+ """Derive the transcript path from the sessionId + cwd slug.
169
+
170
+ The slug derivation can collide for two distinct cwds, so we guard with
171
+ exists() before returning a usable path.
172
+ """
173
+ if not session_id or not cwd:
174
+ return None
175
+ slug = _cwd_to_project_slug(cwd)
176
+ p = PROJECTS_DIR / slug / f"{session_id}.jsonl"
177
+ try:
178
+ if p.exists():
179
+ return p
180
+ except Exception:
181
+ return None
182
+ return None
183
+
184
+
185
+ def _last_assistant_info(path: Optional[Path]) -> Optional[Info]:
186
+ """Read-only tail of the transcript -> stop_reason / last_tool / bg flag.
187
+
188
+ Returns None if the transcript is missing, empty, or unparseable. Reads at
189
+ most the last TRANSCRIPT_TAIL_BYTES so even a 35k-line transcript is cheap.
190
+ Every json.loads is wrapped: the final line may be a half-written record.
191
+ """
192
+ if path is None:
193
+ return None
194
+ try:
195
+ if not path.exists():
196
+ return None
197
+ size = path.stat().st_size
198
+ seeked = size > TRANSCRIPT_TAIL_BYTES
199
+ with path.open("rb") as fh:
200
+ if seeked:
201
+ fh.seek(size - TRANSCRIPT_TAIL_BYTES)
202
+ tail = fh.read().decode("utf-8", "replace")
203
+ except Exception:
204
+ return None
205
+
206
+ lines = [ln for ln in tail.splitlines() if ln.strip()]
207
+ if not lines:
208
+ return None
209
+ # Only when we actually seeked into the middle of the file is the leading
210
+ # line possibly a half record. On a complete (un-seeked) read every line is
211
+ # whole -- dropping the first there would discard real data and could
212
+ # misreport a short transcript as empty.
213
+ if seeked and len(lines) > 1:
214
+ lines = lines[1:]
215
+
216
+ window = lines[-TAIL_LINES:]
217
+
218
+ # Background-task heuristic: a queue-operation line AFTER the most recent
219
+ # assistant end_turn means there is still unresolved background work.
220
+ has_pending_bg = False
221
+ last_end_turn_idx = -1
222
+ for i, raw in enumerate(window):
223
+ try:
224
+ d = json.loads(raw)
225
+ except Exception:
226
+ continue
227
+ if not isinstance(d, dict):
228
+ continue
229
+ t = d.get("type", "")
230
+ if t == "assistant" and (d.get("message") or {}).get("stop_reason") == "end_turn":
231
+ last_end_turn_idx = i
232
+ has_pending_bg = False
233
+ elif t == "queue-operation" and i > last_end_turn_idx:
234
+ has_pending_bg = True
235
+
236
+ # Find the last assistant message for stop_reason / last tool name.
237
+ last_asst = None
238
+ for raw in reversed(window):
239
+ try:
240
+ d = json.loads(raw)
241
+ except Exception:
242
+ continue
243
+ if isinstance(d, dict) and d.get("type") == "assistant":
244
+ last_asst = d
245
+ break
246
+ if last_asst is None:
247
+ return None
248
+
249
+ msg = last_asst.get("message", {})
250
+ if not isinstance(msg, dict):
251
+ msg = {}
252
+ content = msg.get("content", []) or []
253
+ last_tool = ""
254
+ if isinstance(content, list) and content:
255
+ last_block = content[-1]
256
+ if isinstance(last_block, dict) and last_block.get("type") == "tool_use":
257
+ last_tool = last_block.get("name", "") or ""
258
+
259
+ return Info(
260
+ stop_reason=msg.get("stop_reason"),
261
+ last_tool=last_tool,
262
+ has_pending_background=has_pending_bg,
263
+ )
264
+
265
+
266
+ # ---------------------------------------------------------------------------
267
+ # Status decision function. Mirrors claude-fleet patrol.classify() but is
268
+ # strictly file-only (no os.kill / no ps / no subprocess) and collapses the
269
+ # fleet buckets into the MVP's three visible ones.
270
+ # ---------------------------------------------------------------------------
271
+ def _status_for(data: dict, transcript: Optional[Path], now: float) -> Tuple[str, str]:
272
+ """Return (triage, reason) for one session dict."""
273
+ s = data.get("status", "unknown")
274
+ updated_at = _as_int(data.get("updatedAt", 0))
275
+ idle = max(0, int(now - updated_at / 1000)) if updated_at else 10 ** 9
276
+
277
+ # 1) NEEDS-APPROVAL -- highest priority, straight from the live JSON.
278
+ # THIS is the core MVP signal; no transcript parse needed. It MUST be
279
+ # checked BEFORE the stale-liveness gate: a session genuinely waiting on
280
+ # a permission prompt while the user stepped away may not have its
281
+ # updatedAt refreshed, yet it is precisely the one that must stay RED. A
282
+ # waiting session is therefore never folded into the hidden stale count,
283
+ # regardless of updatedAt age.
284
+ if s == "waiting":
285
+ # str(): waitingFor is external/untrusted -- a half-written value could
286
+ # be a dict/list, which would later crash the widget's reason[:26].
287
+ return (NEEDS_APPROVAL, str(data.get("waitingFor") or "needs approval / 等待授权"))
288
+
289
+ # 2) File-only liveness. No os.kill. A registry file not touched within
290
+ # LIVE_WINDOW is treated as stale and hidden (waiting already handled).
291
+ if idle > LIVE_WINDOW:
292
+ return (STALE_HIDDEN, "")
293
+
294
+ # 3) Actively working -- trust a fresh live JSON.
295
+ if s == "busy" and idle < IDLE_THRESHOLD:
296
+ return (WORKING, "working")
297
+ if s == "shell":
298
+ # A shell process is actively running -- mirror claude-fleet's
299
+ # patrol.classify() which maps status=='shell' to working.
300
+ return (WORKING, "shell process running")
301
+
302
+ # 4) Refine the rest with a read-only transcript tail.
303
+ info = _last_assistant_info(transcript)
304
+ if info is None:
305
+ return (IDLE_DONE, "no/empty transcript")
306
+ if info.has_pending_background:
307
+ return (WORKING, "background task running")
308
+ if info.stop_reason in ("end_turn", "stop_sequence"):
309
+ return (IDLE_DONE, "completed")
310
+ if info.stop_reason == "tool_use":
311
+ # Stopped mid-tool but NOT status==waiting => stalled, NOT pending
312
+ # approval. Never flag this red. A genuinely busy & fresh session was
313
+ # already returned WORKING in step 3; reaching here means it is not
314
+ # fresh, so a mid-tool stop is stalled per the documented spec.
315
+ nudge = f"stalled at {info.last_tool}" if info.last_tool else "stalled mid-tool"
316
+ return (NEEDS_ATTENTION, nudge)
317
+ return (IDLE_DONE if idle >= IDLE_THRESHOLD else WORKING, "")
318
+
319
+
320
+ # ---------------------------------------------------------------------------
321
+ # Public API.
322
+ # ---------------------------------------------------------------------------
323
+ def scan() -> List[Session]:
324
+ """Read ~/.claude/sessions/*.json, classify each, sort.
325
+
326
+ Returns [] on ANY failure (also the natural value when there are zero
327
+ sessions) -- the two are indistinguishable and both safe. Never raises.
328
+ Stale registry files are kept as STALE_HIDDEN entries so the widget can
329
+ show a "+N stale (hidden)" count, but they sort to the bottom.
330
+ """
331
+ try:
332
+ if not SESSIONS_DIR.exists():
333
+ return []
334
+ now = time.time()
335
+ out: List[Session] = []
336
+
337
+ for f in sorted(glob.glob(str(SESSIONS_DIR / "*.json"))):
338
+ base = os.path.basename(f)
339
+ # Legacy session-<ts>.json files carry no pid/status -- skip them.
340
+ if base.startswith("session-"):
341
+ continue
342
+ data = _load_session_file(Path(f))
343
+ if not data:
344
+ continue
345
+
346
+ # Per-file guard: one malformed/half-written registry file (e.g. a
347
+ # truncated value that slips past _load_session_file but trips a
348
+ # later coercion) must be SKIPPED, not allowed to blank the whole
349
+ # fleet -- otherwise a real needs_approval could vanish.
350
+ try:
351
+ # str(): cwd/sessionId are external; a non-string from a half
352
+ # write would make slug derivation raise and skip the ENTIRE
353
+ # session -- including one that is genuinely waiting.
354
+ session_id = str(data.get("sessionId") or "")
355
+ cwd = str(data.get("cwd") or "")
356
+ transcript = _transcript_path(session_id, cwd)
357
+ triage, reason = _status_for(data, transcript, now)
358
+
359
+ updated_at = _as_int(data.get("updatedAt", 0))
360
+ idle_seconds = max(0, int(now - updated_at / 1000)) if updated_at else 0
361
+
362
+ # Recover pid from the "<pid>.json" filename when the field is
363
+ # absent/half-written (see _load_session_file).
364
+ fname_pid = _as_int(base[:-5]) if base.endswith(".json") else 0
365
+
366
+ out.append(
367
+ Session(
368
+ pid=_as_int(data.get("pid"), fname_pid),
369
+ name=str(data.get("name") or os.path.basename(cwd) or "?"),
370
+ cwd=cwd,
371
+ status=data.get("status", "unknown"),
372
+ triage=triage,
373
+ reason=reason,
374
+ idle_seconds=idle_seconds,
375
+ updated_at=updated_at,
376
+ )
377
+ )
378
+ except Exception:
379
+ # Skip just this file; keep scanning siblings.
380
+ continue
381
+
382
+ out.sort(key=lambda x: (SORT_PRIORITY.get(x.triage, 5), -x.updated_at, x.pid))
383
+ return out
384
+ except Exception:
385
+ # A read-only scan must never raise; degrade to empty.
386
+ return []
387
+
388
+
389
+ def summary(sessions: Optional[List[Session]] = None) -> dict:
390
+ """Header counts for the widget. needs_approval is the headline number."""
391
+ if sessions is None:
392
+ sessions = scan()
393
+ visible = [s for s in sessions if s.triage != STALE_HIDDEN]
394
+ stale = [s for s in sessions if s.triage == STALE_HIDDEN]
395
+ return {
396
+ "needs_approval": sum(1 for s in visible if s.triage == NEEDS_APPROVAL),
397
+ "needs_attention": sum(1 for s in visible if s.triage == NEEDS_ATTENTION),
398
+ "working": sum(1 for s in visible if s.triage == WORKING),
399
+ "idle_done": sum(1 for s in visible if s.triage == IDLE_DONE),
400
+ "visible": len(visible),
401
+ "stale": len(stale),
402
+ }
403
+
404
+
405
+ def fmt_age(seconds: int) -> str:
406
+ if seconds < 60:
407
+ return f"{seconds}s"
408
+ if seconds < 3600:
409
+ return f"{seconds // 60}m"
410
+ h = seconds // 3600
411
+ m = (seconds % 3600) // 60
412
+ return f"{h}h{m}m" if m else f"{h}h"
413
+
414
+
415
+ def _main() -> None:
416
+ """GUI-less smoke test: print the classified session list to stdout.
417
+
418
+ Read-only. Prints session NAMEs and triage/reason only -- it does not echo
419
+ transcript content.
420
+ """
421
+ sessions = scan()
422
+ s = summary(sessions)
423
+ print(
424
+ "ARIS-Monitor scanner -- "
425
+ f"needs_approval={s['needs_approval']} "
426
+ f"working={s['working']} idle_done={s['idle_done']} "
427
+ f"attention={s['needs_attention']} stale={s['stale']}"
428
+ )
429
+ visible = [x for x in sessions if x.triage != STALE_HIDDEN]
430
+ if not visible:
431
+ print(" (all clear -- no active Claude sessions)")
432
+ for x in visible:
433
+ dot = {
434
+ NEEDS_APPROVAL: "[!]",
435
+ NEEDS_ATTENTION: "[~]",
436
+ WORKING: "[*]",
437
+ IDLE_DONE: "[ ]",
438
+ }.get(x.triage, "[?]")
439
+ print(f" {dot} {x.name:<28} {x.triage:<15} {x.reason} ({fmt_age(x.idle_seconds)})")
440
+ if s["stale"]:
441
+ print(f" +{s['stale']} stale (hidden)")
442
+
443
+
444
+ if __name__ == "__main__":
445
+ _main()
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env python3
2
+ """ARIS-Monitor: headless terminal ticker (fallback UI).
3
+
4
+ If Tkinter is unavailable (a minimal custom Python lacking the Tk module),
5
+ this prints the SAME 3-bucket triage to stdout on the SAME ~2s loop, driven by
6
+ the IDENTICAL read-only scanner.py -- zero new dependencies, zero detection
7
+ changes.
8
+
9
+ STRICTLY READ-ONLY: it only reads files via scanner.scan(). It NEVER writes,
10
+ kills, signals, spawns, polls processes, runs subprocess, or touches the
11
+ network. It self-loops (no `watch`, no external sleep beyond time.sleep on its
12
+ own process) and re-clears the screen each tick.
13
+
14
+ Run:
15
+ python3 ticker.py
16
+ Stop with Ctrl-C.
17
+ """
18
+ from __future__ import annotations
19
+
20
+ import sys
21
+ import time
22
+
23
+ import scanner
24
+
25
+ REFRESH_S = 2.0
26
+
27
+ _DOT = {
28
+ scanner.NEEDS_APPROVAL: "\033[91m●\033[0m", # red
29
+ scanner.NEEDS_ATTENTION: "\033[93m◐\033[0m", # amber
30
+ scanner.WORKING: "\033[93m◐\033[0m", # amber
31
+ scanner.IDLE_DONE: "\033[92m○\033[0m", # green
32
+ }
33
+ _LABEL = {
34
+ scanner.NEEDS_APPROVAL: "NEEDS YOU",
35
+ scanner.NEEDS_ATTENTION: "stalled",
36
+ scanner.WORKING: "working",
37
+ scanner.IDLE_DONE: "done",
38
+ }
39
+
40
+
41
+ def _render_once() -> None:
42
+ sessions = scanner.scan()
43
+ s = scanner.summary(sessions)
44
+ visible = [x for x in sessions if x.triage != scanner.STALE_HIDDEN]
45
+
46
+ sys.stdout.write("\033[2J\033[H") # clear + home
47
+ if s["needs_approval"]:
48
+ head = f"\033[91mARIS-Monitor — ATTENTION {s['needs_approval']} ●\033[0m"
49
+ else:
50
+ head = f"\033[92mARIS-Monitor — all clear ○ 0\033[0m"
51
+ print(head)
52
+ print("-" * 40)
53
+
54
+ if not visible:
55
+ print(" no active Claude sessions")
56
+ for x in visible:
57
+ dot = _DOT.get(x.triage, "?")
58
+ label = _LABEL.get(x.triage, x.triage)
59
+ reason = f" {x.reason}" if (x.triage == scanner.NEEDS_APPROVAL and x.reason) else ""
60
+ print(f" {dot} {x.name[:24]:<24} {label:<10} {scanner.fmt_age(x.idle_seconds):>5}{reason}")
61
+ if s["stale"]:
62
+ print(f" +{s['stale']} stale (hidden)")
63
+ print()
64
+ print("(read-only · refresh 2s · Ctrl-C to quit)")
65
+ sys.stdout.flush()
66
+
67
+
68
+ def main() -> None:
69
+ try:
70
+ while True:
71
+ try:
72
+ _render_once()
73
+ except Exception:
74
+ pass # a bad scan must never kill the ticker
75
+ time.sleep(REFRESH_S)
76
+ except KeyboardInterrupt:
77
+ print()
78
+
79
+
80
+ if __name__ == "__main__":
81
+ main()