dsh-aris-panel 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/README_CN.md +87 -0
- package/dsh/checkout.patch.yml +38 -0
- package/dsh/client.js +634 -0
- package/dsh/cordis.patch.yml +44 -0
- package/dsh/index.mjs +76 -0
- package/dsh/run-status.mjs +182 -0
- package/dsh/scope-limits.mjs +50 -0
- package/dsh/workbench.mjs +291 -0
- package/mcp-servers/claude-review/README.md +93 -0
- package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
- package/mcp-servers/claude-review/server.py +718 -0
- package/mcp-servers/codex-image2/README.md +65 -0
- package/mcp-servers/codex-image2/server.py +893 -0
- package/mcp-servers/feishu-bridge/requirements.txt +1 -0
- package/mcp-servers/feishu-bridge/server.py +240 -0
- package/mcp-servers/gemini-review/README.md +171 -0
- package/mcp-servers/gemini-review/server.py +1856 -0
- package/mcp-servers/llm-chat/requirements.txt +1 -0
- package/mcp-servers/llm-chat/server.py +664 -0
- package/mcp-servers/manual-review/README.md +133 -0
- package/mcp-servers/manual-review/server.py +910 -0
- package/mcp-servers/manual-review/ui.html +279 -0
- package/mcp-servers/minimax-chat/requirements.txt +1 -0
- package/mcp-servers/minimax-chat/server.py +381 -0
- package/package.json +51 -0
- package/skills/ablation-planner/SKILL.md +123 -0
- package/skills/alphaxiv/SKILL.md +196 -0
- package/skills/analyze-results/SKILL.md +46 -0
- package/skills/arxiv/SKILL.md +248 -0
- package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
- package/skills/auto-review-loop/SKILL.md +1137 -0
- package/skills/auto-review-loop-llm/SKILL.md +259 -0
- package/skills/auto-review-loop-minimax/SKILL.md +302 -0
- package/skills/citation-audit/SKILL.md +502 -0
- package/skills/claims-drafting/SKILL.md +227 -0
- package/skills/comm-lit-review/SKILL.md +297 -0
- package/skills/deepxiv/SKILL.md +263 -0
- package/skills/dse-loop/SKILL.md +296 -0
- package/skills/embodiment-description/SKILL.md +129 -0
- package/skills/exa-search/SKILL.md +205 -0
- package/skills/experiment-audit/SKILL.md +311 -0
- package/skills/experiment-bridge/SKILL.md +376 -0
- package/skills/experiment-plan/SKILL.md +249 -0
- package/skills/experiment-queue/SKILL.md +431 -0
- package/skills/experiment-queue/scripts/build_manifest.py +142 -0
- package/skills/experiment-queue/scripts/queue_manager.py +433 -0
- package/skills/feishu-notify/SKILL.md +156 -0
- package/skills/figure-description/SKILL.md +138 -0
- package/skills/figure-spec/SKILL.md +262 -0
- package/skills/figure-spec/scripts/figure_renderer.py +799 -0
- package/skills/formula-derivation/SKILL.md +280 -0
- package/skills/gemini-search/SKILL.md +231 -0
- package/skills/grant-proposal/SKILL.md +698 -0
- package/skills/idea-creator/SKILL.md +542 -0
- package/skills/idea-discovery/SKILL.md +521 -0
- package/skills/idea-discovery-robot/SKILL.md +363 -0
- package/skills/integrity-forensics/SKILL.md +284 -0
- package/skills/interview-cheatsheet/SKILL.md +245 -0
- package/skills/invention-structuring/SKILL.md +188 -0
- package/skills/jurisdiction-format/SKILL.md +192 -0
- package/skills/kill-argument/SKILL.md +437 -0
- package/skills/mermaid-diagram/SKILL.md +419 -0
- package/skills/meta-apply/SKILL.md +141 -0
- package/skills/meta-optimize/SKILL.md +437 -0
- package/skills/monitor-experiment/SKILL.md +140 -0
- package/skills/novelty-check/SKILL.md +101 -0
- package/skills/openalex/SKILL.md +237 -0
- package/skills/overleaf-sync/SKILL.md +220 -0
- package/skills/paper-claim-audit/SKILL.md +348 -0
- package/skills/paper-compile/SKILL.md +266 -0
- package/skills/paper-figure/SKILL.md +312 -0
- package/skills/paper-illustration/SKILL.md +736 -0
- package/skills/paper-illustration-image2/SKILL.md +391 -0
- package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
- package/skills/paper-plan/SKILL.md +386 -0
- package/skills/paper-poster/SKILL.md +19 -0
- package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
- package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
- package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
- package/skills/paper-poster-html/NOTICE.md +57 -0
- package/skills/paper-poster-html/SKILL.md +323 -0
- package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
- package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
- package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
- package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
- package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
- package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
- package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
- package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
- package/skills/paper-poster-html/scripts/asset_check.py +897 -0
- package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
- package/skills/paper-poster-html/scripts/poster_check.py +251 -0
- package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
- package/skills/paper-poster-html/scripts/render_preview.py +217 -0
- package/skills/paper-poster-html/scripts/run_gates.py +556 -0
- package/skills/paper-poster-html/scripts/style_check.py +1324 -0
- package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
- package/skills/paper-poster-html/templates/README.md +170 -0
- package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
- package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
- package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
- package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
- package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
- package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
- package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
- package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
- package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
- package/skills/paper-slides/SKILL.md +635 -0
- package/skills/paper-talk/SKILL.md +381 -0
- package/skills/paper-write/SKILL.md +604 -0
- package/skills/paper-write/templates/IEEEtran.bst +2409 -0
- package/skills/paper-write/templates/IEEEtran.cls +6347 -0
- package/skills/paper-write/templates/iclr2026.tex +84 -0
- package/skills/paper-write/templates/icml2025.tex +87 -0
- package/skills/paper-write/templates/ieee_conference.tex +89 -0
- package/skills/paper-write/templates/ieee_journal.tex +93 -0
- package/skills/paper-write/templates/math_commands.tex +48 -0
- package/skills/paper-write/templates/neurips2025.tex +80 -0
- package/skills/paper-writing/SKILL.md +916 -0
- package/skills/patent-novelty-check/SKILL.md +153 -0
- package/skills/patent-pipeline/SKILL.md +344 -0
- package/skills/patent-review/SKILL.md +203 -0
- package/skills/pixel-art/SKILL.md +137 -0
- package/skills/prior-art-search/SKILL.md +146 -0
- package/skills/proof-checker/SKILL.md +866 -0
- package/skills/proof-orchestrator/NOTICE.md +24 -0
- package/skills/proof-orchestrator/SKILL.md +254 -0
- package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
- package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
- package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
- package/skills/proof-orchestrator/references/notation-audit.md +135 -0
- package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
- package/skills/proof-orchestrator/references/stress-tests.md +38 -0
- package/skills/proof-writer/SKILL.md +223 -0
- package/skills/qzcli/SKILL.md +324 -0
- package/skills/rebuttal/SKILL.md +376 -0
- package/skills/render-html/SKILL.md +316 -0
- package/skills/render-html/scripts/render_html.py +1006 -0
- package/skills/render-html/scripts/templates/academic.html +703 -0
- package/skills/render-html/scripts/templates/dashboard.html +333 -0
- package/skills/research-lit/SKILL.md +756 -0
- package/skills/research-pipeline/SKILL.md +384 -0
- package/skills/research-refine/SKILL.md +770 -0
- package/skills/research-refine-pipeline/SKILL.md +186 -0
- package/skills/research-review/SKILL.md +198 -0
- package/skills/research-wiki/SKILL.md +461 -0
- package/skills/resubmit-pipeline/SKILL.md +447 -0
- package/skills/result-to-claim/SKILL.md +311 -0
- package/skills/run-experiment/SKILL.md +313 -0
- package/skills/semantic-scholar/SKILL.md +236 -0
- package/skills/serverless-modal/SKILL.md +335 -0
- package/skills/shared-references/acceptance-gate.md +324 -0
- package/skills/shared-references/assurance-contract.md +248 -0
- package/skills/shared-references/capture-antipatterns.md +78 -0
- package/skills/shared-references/citation-discipline.md +583 -0
- package/skills/shared-references/compute-env-contract.md +163 -0
- package/skills/shared-references/effort-contract.md +183 -0
- package/skills/shared-references/evidence-precheck.md +65 -0
- package/skills/shared-references/experiment-integrity.md +49 -0
- package/skills/shared-references/external-cadence.md +326 -0
- package/skills/shared-references/fan-out-pattern.md +366 -0
- package/skills/shared-references/injection-hygiene.md +127 -0
- package/skills/shared-references/integration-contract.md +461 -0
- package/skills/shared-references/output-composition.md +93 -0
- package/skills/shared-references/output-language.md +45 -0
- package/skills/shared-references/output-manifest.md +49 -0
- package/skills/shared-references/output-versioning.md +111 -0
- package/skills/shared-references/patent-format-cn.md +199 -0
- package/skills/shared-references/patent-format-ep.md +173 -0
- package/skills/shared-references/patent-format-us.md +161 -0
- package/skills/shared-references/patent-writing-principles.md +197 -0
- package/skills/shared-references/prior-art-databases.md +141 -0
- package/skills/shared-references/resumable-runs.md +109 -0
- package/skills/shared-references/review-scope-limits.md +81 -0
- package/skills/shared-references/review-tracing.md +391 -0
- package/skills/shared-references/reviewer-independence.md +79 -0
- package/skills/shared-references/reviewer-routing.md +852 -0
- package/skills/shared-references/skill-governance.md +104 -0
- package/skills/shared-references/taste-calibration.md +85 -0
- package/skills/shared-references/venue-checklists.md +114 -0
- package/skills/shared-references/wiki-helper-resolution.md +134 -0
- package/skills/shared-references/writing-principles.md +525 -0
- package/skills/skills-codex/README.md +102 -0
- package/skills/skills-codex/README_CN.md +100 -0
- package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
- package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
- package/skills/skills-codex/analyze-results/SKILL.md +45 -0
- package/skills/skills-codex/arxiv/SKILL.md +210 -0
- package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
- package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
- package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
- package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
- package/skills/skills-codex/citation-audit/SKILL.md +504 -0
- package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
- package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
- package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
- package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
- package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
- package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
- package/skills/skills-codex/deepxiv/SKILL.md +142 -0
- package/skills/skills-codex/dse-loop/SKILL.md +285 -0
- package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
- package/skills/skills-codex/exa-search/SKILL.md +192 -0
- package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
- package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
- package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
- package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
- package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
- package/skills/skills-codex/figure-description/SKILL.md +138 -0
- package/skills/skills-codex/figure-spec/SKILL.md +252 -0
- package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
- package/skills/skills-codex/gemini-search/SKILL.md +205 -0
- package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
- package/skills/skills-codex/idea-creator/SKILL.md +405 -0
- package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
- package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
- package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
- package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
- package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
- package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
- package/skills/skills-codex/kill-argument/SKILL.md +403 -0
- package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
- package/skills/skills-codex/meta-apply/SKILL.md +154 -0
- package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
- package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
- package/skills/skills-codex/novelty-check/SKILL.md +89 -0
- package/skills/skills-codex/openalex/SKILL.md +228 -0
- package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
- package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
- package/skills/skills-codex/paper-compile/SKILL.md +253 -0
- package/skills/skills-codex/paper-figure/SKILL.md +311 -0
- package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
- package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
- package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
- package/skills/skills-codex/paper-plan/SKILL.md +278 -0
- package/skills/skills-codex/paper-poster/SKILL.md +19 -0
- package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
- package/skills/skills-codex/paper-slides/SKILL.md +571 -0
- package/skills/skills-codex/paper-talk/SKILL.md +381 -0
- package/skills/skills-codex/paper-write/SKILL.md +411 -0
- package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
- package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
- package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
- package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
- package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
- package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
- package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
- package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
- package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
- package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
- package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
- package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
- package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
- package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
- package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
- package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
- package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
- package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
- package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
- package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
- package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
- package/skills/skills-codex/paper-writing/SKILL.md +731 -0
- package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
- package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
- package/skills/skills-codex/patent-review/SKILL.md +202 -0
- package/skills/skills-codex/pixel-art/SKILL.md +139 -0
- package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
- package/skills/skills-codex/proof-checker/SKILL.md +554 -0
- package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
- package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
- package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
- package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
- package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
- package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
- package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
- package/skills/skills-codex/proof-writer/SKILL.md +222 -0
- package/skills/skills-codex/qzcli/SKILL.md +324 -0
- package/skills/skills-codex/rebuttal/SKILL.md +305 -0
- package/skills/skills-codex/render-html/SKILL.md +305 -0
- package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
- package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
- package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
- package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
- package/skills/skills-codex/research-lit/SKILL.md +464 -0
- package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
- package/skills/skills-codex/research-refine/SKILL.md +721 -0
- package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
- package/skills/skills-codex/research-review/SKILL.md +135 -0
- package/skills/skills-codex/research-wiki/SKILL.md +421 -0
- package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
- package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
- package/skills/skills-codex/run-experiment/SKILL.md +236 -0
- package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
- package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
- package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
- package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
- package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
- package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
- package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
- package/skills/skills-codex/shared-references/effort-contract.md +143 -0
- package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
- package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
- package/skills/skills-codex/shared-references/external-cadence.md +334 -0
- package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
- package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
- package/skills/skills-codex/shared-references/integration-contract.md +372 -0
- package/skills/skills-codex/shared-references/output-composition.md +98 -0
- package/skills/skills-codex/shared-references/output-language.md +45 -0
- package/skills/skills-codex/shared-references/output-manifest.md +40 -0
- package/skills/skills-codex/shared-references/output-versioning.md +111 -0
- package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
- package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
- package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
- package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
- package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
- package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
- package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
- package/skills/skills-codex/shared-references/review-tracing.md +144 -0
- package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
- package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
- package/skills/skills-codex/shared-references/skill-governance.md +119 -0
- package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
- package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
- package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
- package/skills/skills-codex/shared-references/writing-principles.md +525 -0
- package/skills/skills-codex/slides-polish/SKILL.md +563 -0
- package/skills/skills-codex/specification-writing/SKILL.md +211 -0
- package/skills/skills-codex/system-profile/SKILL.md +103 -0
- package/skills/skills-codex/training-check/SKILL.md +83 -0
- package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
- package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
- package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
- package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
- package/skills/skills-codex-claude-review/README.md +79 -0
- package/skills/skills-codex-claude-review/README_CN.md +78 -0
- package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
- package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
- package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
- package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
- package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
- package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
- package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
- package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
- package/skills/skills-codex-gemini-review/README.md +176 -0
- package/skills/skills-codex-gemini-review/README_CN.md +175 -0
- package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
- package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
- package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
- package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
- package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
- package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
- package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
- package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
- package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
- package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
- package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
- package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
- package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
- package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
- package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
- package/skills/slides-polish/SKILL.md +565 -0
- package/skills/specification-writing/SKILL.md +211 -0
- package/skills/system-profile/SKILL.md +103 -0
- package/skills/training-check/SKILL.md +132 -0
- package/skills/vast-gpu/SKILL.md +394 -0
- package/skills/web-debug-search/SKILL.md +334 -0
- package/skills/wiki-enrich/SKILL.md +257 -0
- package/skills/writing-systems-papers/SKILL.md +184 -0
- package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
- package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
- package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
- package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
- package/templates/FINDINGS_TEMPLATE.md +52 -0
- package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
- package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
- package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
- package/templates/MANIFEST_TEMPLATE.md +7 -0
- package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
- package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
- package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
- package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
- package/templates/README.md +57 -0
- package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
- package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
- package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
- package/templates/claude-hooks/corpus_write_guard.json +16 -0
- package/templates/claude-hooks/corpus_write_guard.py +85 -0
- package/templates/claude-hooks/meta_logging.json +74 -0
- package/templates/gitignore-trace.txt +3 -0
- package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
- package/tools/arxiv_fetch.py +311 -0
- package/tools/capture_filter.py +126 -0
- package/tools/check_skills_inventory.py +273 -0
- package/tools/convert_skills_to_llm_chat.py +282 -0
- package/tools/copilot_native_evidence.py +818 -0
- package/tools/deepxiv_fetch.py +213 -0
- package/tools/evidence_check.py +212 -0
- package/tools/exa_search.py +425 -0
- package/tools/experiment_queue/README.md +118 -0
- package/tools/experiment_queue/build_manifest.py +44 -0
- package/tools/experiment_queue/queue_manager.py +44 -0
- package/tools/extract_paper_style.py +560 -0
- package/tools/figure_renderer.py +69 -0
- package/tools/forensics_gate.py +669 -0
- package/tools/generate_codex_claude_review_overrides.py +299 -0
- package/tools/idea_discovery_gate.py +256 -0
- package/tools/install_aris.ps1 +1372 -0
- package/tools/install_aris.sh +1370 -0
- package/tools/install_aris_codex.sh +1023 -0
- package/tools/install_aris_copilot.sh +1052 -0
- package/tools/iteration_log.py +143 -0
- package/tools/lint_skills_helpers.sh +84 -0
- package/tools/meta_opt/check_ready.sh +80 -0
- package/tools/meta_opt/log_event.sh +91 -0
- package/tools/meta_opt/trigger_eval.py +280 -0
- package/tools/meta_opt/trigger_evals.sample.json +28 -0
- package/tools/openalex_fetch.py +326 -0
- package/tools/overleaf_audit.sh +104 -0
- package/tools/overleaf_setup.sh +150 -0
- package/tools/paper_illustration_image2.py +62 -0
- package/tools/provenance.py +294 -0
- package/tools/research_wiki.py +1720 -0
- package/tools/review_gate.py +502 -0
- package/tools/run_state.py +399 -0
- package/tools/save_trace.sh +477 -0
- package/tools/semantic_scholar_fetch.py +438 -0
- package/tools/skill-groups.tsv +116 -0
- package/tools/skill_picker.py +238 -0
- package/tools/smart_update.ps1 +521 -0
- package/tools/smart_update.sh +591 -0
- package/tools/smart_update_codex.sh +419 -0
- package/tools/smart_update_copilot.sh +605 -0
- package/tools/threat_scan.py +222 -0
- package/tools/verify_paper_audits.sh +487 -0
- package/tools/verify_papers.py +613 -0
- package/tools/verify_wiki_coverage.sh +176 -0
- package/tools/watchdog.py +485 -0
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dsh-aris-panel",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "ARIS research-workflow skills + interactive workbench panel for DeepSeek Harness (user fork of dsh-aris: 82 skills, cross-model Codex review, idea/workflow launcher, research status board).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"dsh-plugin",
|
|
12
|
+
"deepseek-harness",
|
|
13
|
+
"aris",
|
|
14
|
+
"research",
|
|
15
|
+
"agent",
|
|
16
|
+
"workbench"
|
|
17
|
+
],
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dsh/index.mjs",
|
|
20
|
+
"./client": "./dsh/client.js",
|
|
21
|
+
"./scope-limits": "./dsh/scope-limits.mjs",
|
|
22
|
+
"./cordis.patch.yml": "./dsh/cordis.patch.yml",
|
|
23
|
+
"./checkout.patch.yml": "./dsh/checkout.patch.yml",
|
|
24
|
+
"./package.json": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dsh",
|
|
28
|
+
"skills",
|
|
29
|
+
"tools",
|
|
30
|
+
"templates",
|
|
31
|
+
"mcp-servers",
|
|
32
|
+
"README.md",
|
|
33
|
+
"README_CN.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"dsh": {
|
|
40
|
+
"bundle": {
|
|
41
|
+
"patch": "./dsh/cordis.patch.yml"
|
|
42
|
+
},
|
|
43
|
+
"client": {
|
|
44
|
+
"platform": "web",
|
|
45
|
+
"inject": [
|
|
46
|
+
"@deepseek-ai/dsh-client-ui-conversation",
|
|
47
|
+
"@deepseek-ai/dsh-client-connection"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ablation-planner
|
|
3
|
+
description: "Use when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission."
|
|
4
|
+
argument-hint: "[method-description-or-claim]"
|
|
5
|
+
allowed-tools: Bash(*), Read, Grep, Glob, Write, Edit, mcp__codex__codex, mcp__codex__codex-reply
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Ablation Planner
|
|
9
|
+
|
|
10
|
+
Systematically design ablation studies that answer the questions reviewers will ask. Codex leads the design (reviewer perspective), CC reviews feasibility and implements.
|
|
11
|
+
|
|
12
|
+
## Context: $ARGUMENTS
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- Main results pass `/result-to-claim` with claim_supported = yes or partial
|
|
17
|
+
- User explicitly requests ablation planning
|
|
18
|
+
- `/auto-review-loop` reviewer identifies missing ablations
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
### Step 1: Prepare Context
|
|
23
|
+
|
|
24
|
+
CC reads available project files to build the full picture:
|
|
25
|
+
- Method description and components (from `idea-stage/docs/research_contract.md`, legacy `docs/research_contract.md`, or project CLAUDE.md)
|
|
26
|
+
- Current experiment results (from EXPERIMENT_LOG.md, EXPERIMENT_TRACKER.md, or W&B)
|
|
27
|
+
- Confirmed and intended claims (from result-to-claim output or project notes)
|
|
28
|
+
- Available compute resources (from CLAUDE.md server config, if present)
|
|
29
|
+
|
|
30
|
+
### Step 2: Codex Designs Ablations
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
mcp__codex__codex:
|
|
34
|
+
model: gpt-5.6-sol
|
|
35
|
+
config: {"model_reasoning_effort": "xhigh"}
|
|
36
|
+
prompt: |
|
|
37
|
+
You are a rigorous ML reviewer planning ablation studies.
|
|
38
|
+
Given this method and results, design ablations that:
|
|
39
|
+
|
|
40
|
+
1. Isolate the contribution of each novel component
|
|
41
|
+
2. Answer questions reviewers will definitely ask
|
|
42
|
+
3. Test sensitivity to key hyperparameters
|
|
43
|
+
4. Compare against natural alternative design choices
|
|
44
|
+
|
|
45
|
+
Method: [description from project files]
|
|
46
|
+
Components: [list of removable/replaceable components]
|
|
47
|
+
Current results: [key metrics from experiments]
|
|
48
|
+
Claims: [what we claim and current evidence]
|
|
49
|
+
|
|
50
|
+
For each ablation, specify:
|
|
51
|
+
- name: what to change (e.g., "remove module X", "replace Y with Z")
|
|
52
|
+
- what_it_tests: the specific question this answers
|
|
53
|
+
- expected_if_component_matters: what we predict if the component is important
|
|
54
|
+
- priority: 1 (must-run) to 5 (nice-to-have)
|
|
55
|
+
|
|
56
|
+
Also provide:
|
|
57
|
+
- coverage_assessment: what reviewer questions these ablations answer
|
|
58
|
+
- unnecessary_ablations: experiments that seem useful but won't add insight
|
|
59
|
+
- suggested_order: run order optimized for maximum early information
|
|
60
|
+
- estimated_compute: total GPU-hours estimate
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 3: Parse Ablation Plan
|
|
64
|
+
|
|
65
|
+
Normalize Codex response into structured format:
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## Ablation Plan
|
|
69
|
+
|
|
70
|
+
### Component Ablations (highest priority)
|
|
71
|
+
| # | Name | What It Tests | Expected If Matters | Priority |
|
|
72
|
+
|---|------|---------------|---------------------|----------|
|
|
73
|
+
| 1 | remove module X | contribution of X | performance drops on metric Y | 1 |
|
|
74
|
+
| 2 | replace X with simpler Z | value of learned vs fixed | drops, especially on dataset A | 2 |
|
|
75
|
+
|
|
76
|
+
### Hyperparameter Sensitivity
|
|
77
|
+
| # | Parameter | Values to Test | What It Tests | Priority |
|
|
78
|
+
|---|-----------|---------------|---------------|----------|
|
|
79
|
+
| 3 | lambda | [0.01, 0.1, 1.0] | sensitivity to regularization | 3 |
|
|
80
|
+
|
|
81
|
+
### Design Choice Comparisons
|
|
82
|
+
| # | Name | What It Tests | Priority |
|
|
83
|
+
|---|------|---------------|----------|
|
|
84
|
+
| 4 | joint vs separate matching | whether joint adds value | 4 |
|
|
85
|
+
|
|
86
|
+
### Coverage Assessment
|
|
87
|
+
[What reviewer questions these ablations answer]
|
|
88
|
+
|
|
89
|
+
### Unnecessary Ablations
|
|
90
|
+
[Experiments that seem useful but won't add insight — skip these]
|
|
91
|
+
|
|
92
|
+
### Run Order
|
|
93
|
+
[Optimized for maximum early information]
|
|
94
|
+
|
|
95
|
+
### Estimated Compute
|
|
96
|
+
[Total GPU-hours]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Step 4: CC Reviews Feasibility
|
|
100
|
+
|
|
101
|
+
Before running anything, CC checks:
|
|
102
|
+
- Compute budget: can we afford all ablations with available GPUs?
|
|
103
|
+
- Code changes: which ablations need code modifications vs config-only changes?
|
|
104
|
+
- Dependencies: which ablations can run in parallel?
|
|
105
|
+
- Cuts: if budget is tight, propose removing lower-priority ablations and ask Codex to confirm
|
|
106
|
+
|
|
107
|
+
### Step 5: Implement and Run
|
|
108
|
+
|
|
109
|
+
1. Create configs/scripts for each ablation (config-only changes first)
|
|
110
|
+
2. Smoke test each ablation before full run
|
|
111
|
+
3. Run in suggested order, using descriptive names (e.g., `ablation-no-module-X`)
|
|
112
|
+
4. Track results in EXPERIMENT_LOG.md
|
|
113
|
+
5. After all ablations complete → update findings.md with insights
|
|
114
|
+
|
|
115
|
+
## Rules
|
|
116
|
+
|
|
117
|
+
- **Codex leads the design. CC does not pre-filter or bias the ablation list** before Codex sees it. Codex thinks like a reviewer; CC thinks like an engineer.
|
|
118
|
+
- Every ablation must have a clear `what_it_tests` and `expected_if_component_matters`. No "just try it" experiments.
|
|
119
|
+
- Config-only ablations take priority over those needing code changes (faster, less error-prone).
|
|
120
|
+
- If total compute exceeds budget, CC proposes cuts and asks Codex to re-prioritize — don't silently drop ablations.
|
|
121
|
+
- Component ablations (remove/replace) take priority over hyperparameter sweeps.
|
|
122
|
+
- Do not generate ablations for components identical to the baseline (no-op ablations).
|
|
123
|
+
- Record all ablation results in EXPERIMENT_LOG.md, including negative results (component removal had no effect = important finding).
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: alphaxiv
|
|
3
|
+
description: Quick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this paper", "summarize paper", pastes an arXiv/AlphaXiv URL, or provides a bare arXiv ID for quick understanding - not for broad literature search.
|
|
4
|
+
argument-hint: "[arxiv-id-or-url]"
|
|
5
|
+
allowed-tools: Bash(*), Read, Write, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# AlphaXiv Paper Lookup
|
|
9
|
+
|
|
10
|
+
Lookup paper: $ARGUMENTS
|
|
11
|
+
|
|
12
|
+
> Quick single-paper reader with tiered source fallback (overview → full markdown → LaTeX source). Powered by [AlphaXiv](https://alphaxiv.org).
|
|
13
|
+
|
|
14
|
+
## Role & Positioning
|
|
15
|
+
|
|
16
|
+
This skill is the **quick single-paper reader** that returns LLM-optimized summaries:
|
|
17
|
+
|
|
18
|
+
| Skill | Source | Best for |
|
|
19
|
+
|-------|--------|----------|
|
|
20
|
+
| `/arxiv` | arXiv API | Batch search, PDF download, metadata |
|
|
21
|
+
| `/deepxiv` | DeepXiv SDK | Progressive section-level reading |
|
|
22
|
+
| `/semantic-scholar` | S2 API | Published venue metadata, citation counts |
|
|
23
|
+
| **`/alphaxiv`** | **alphaxiv.org** | **Instant LLM-optimized summary of one paper, with LaTeX source fallback** |
|
|
24
|
+
|
|
25
|
+
**Do NOT use this skill for** topic discovery, broad literature search, or multi-paper surveys — use `/research-lit` or `/arxiv` instead.
|
|
26
|
+
|
|
27
|
+
## Constants
|
|
28
|
+
|
|
29
|
+
- **OVERVIEW_URL** = `https://alphaxiv.org/overview/{PAPER_ID}.md`
|
|
30
|
+
- **ABS_URL** = `https://alphaxiv.org/abs/{PAPER_ID}.md`
|
|
31
|
+
- **ARXIV_SRC_URL** = `https://arxiv.org/src/{PAPER_ID}`
|
|
32
|
+
- **ALPHAXIV_UA** = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36` — any modern browser UA works; update the version numbers if AlphaXiv starts blocking this value again
|
|
33
|
+
|
|
34
|
+
> Overrides (append to arguments):
|
|
35
|
+
> - `/alphaxiv 2401.12345` — quick overview
|
|
36
|
+
> - `/alphaxiv "https://arxiv.org/abs/2401.12345"` — auto-extract ID
|
|
37
|
+
> - `/alphaxiv 2401.12345 - depth: src` — force LaTeX source inspection
|
|
38
|
+
> - `/alphaxiv 2401.12345 - depth: abs` — force full markdown
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
### Step 1: Parse Arguments & Extract Paper ID
|
|
43
|
+
|
|
44
|
+
Parse `$ARGUMENTS` to extract a bare arXiv paper ID. Accept these input formats:
|
|
45
|
+
|
|
46
|
+
- `https://arxiv.org/abs/2401.12345` or `https://arxiv.org/abs/2401.12345v2`
|
|
47
|
+
- `https://arxiv.org/pdf/2401.12345`
|
|
48
|
+
- `https://alphaxiv.org/overview/2401.12345`
|
|
49
|
+
- `https://alphaxiv.org/abs/2401.12345`
|
|
50
|
+
- `2401.12345` or `2401.12345v2`
|
|
51
|
+
|
|
52
|
+
Strip version suffixes (`v1`, `v2`, ...) for API calls. Store as `PAPER_ID`.
|
|
53
|
+
|
|
54
|
+
Parse optional directives:
|
|
55
|
+
- **`- depth: overview|abs|src`**: force a specific tier instead of cascading
|
|
56
|
+
|
|
57
|
+
### Step 2: Fetch AlphaXiv Overview (Tier 1 — Fastest)
|
|
58
|
+
|
|
59
|
+
Use `curl` with `{ALPHAXIV_UA}` to fetch the AlphaXiv overview. AlphaXiv may return 403 for non-browser User-Agents; setting a standard browser UA reduces false positives from bot-detection:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
curl -sL --max-time 15 -A "{ALPHAXIV_UA}" "https://alphaxiv.org/overview/{PAPER_ID}.md"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This returns a **structured, LLM-optimized report** designed for machine consumption. Use this as the default and preferred source.
|
|
66
|
+
|
|
67
|
+
If the overview answers the user's question, **stop here**. Do not fetch deeper tiers unnecessarily.
|
|
68
|
+
|
|
69
|
+
If the request fails (HTTP 4xx — 403 bot-block or 404 not-yet-processed) or returns empty content, proceed to Step 3.
|
|
70
|
+
|
|
71
|
+
### Step 3: Fetch Full AlphaXiv Markdown (Tier 2 — More Detail)
|
|
72
|
+
|
|
73
|
+
Use `curl` with `{ALPHAXIV_UA}` to fetch the full paper markdown:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
curl -sL --max-time 15 -A "{ALPHAXIV_UA}" "https://alphaxiv.org/abs/{PAPER_ID}.md"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This provides the full paper body as markdown. Use when the user needs:
|
|
80
|
+
- Specific methodology details
|
|
81
|
+
- Detailed experimental results
|
|
82
|
+
- Particular sections not covered in the overview
|
|
83
|
+
|
|
84
|
+
If this still does not answer the question, proceed to Step 4.
|
|
85
|
+
|
|
86
|
+
### Step 4: Fetch arXiv LaTeX Source (Tier 3 — Deepest)
|
|
87
|
+
|
|
88
|
+
When the overview and full markdown are both insufficient (e.g., the user asks about equations, proofs, appendix details, or implementation specifics), download the paper's LaTeX source from `https://arxiv.org/src/{PAPER_ID}`.
|
|
89
|
+
|
|
90
|
+
The source is a `.tar.gz` archive. Download it to a temporary directory, extract it, and list the `.tex` files inside.
|
|
91
|
+
|
|
92
|
+
Then inspect **only** the files needed to answer the question. Prioritize:
|
|
93
|
+
|
|
94
|
+
1. Top-level `*.tex` files (usually the main document)
|
|
95
|
+
2. Files referenced by `\input{}` or `\include{}`
|
|
96
|
+
3. Appendices, tables, or sections directly related to the user's question
|
|
97
|
+
|
|
98
|
+
**Do NOT read the entire source tree by default.** Read selectively.
|
|
99
|
+
|
|
100
|
+
Temporary source artifacts live under `/tmp`. Do not rely on persistence.
|
|
101
|
+
|
|
102
|
+
### Step 5: Present Results
|
|
103
|
+
|
|
104
|
+
#### Default Answer Shape
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
## [Paper Title]
|
|
108
|
+
|
|
109
|
+
- **arXiv**: [PAPER_ID] — https://arxiv.org/abs/[PAPER_ID]
|
|
110
|
+
- **Source depth**: overview | abs | src
|
|
111
|
+
|
|
112
|
+
### Summary
|
|
113
|
+
[2-3 sentence summary]
|
|
114
|
+
|
|
115
|
+
### Key Points
|
|
116
|
+
- [point 1]
|
|
117
|
+
- [point 2]
|
|
118
|
+
- [point 3]
|
|
119
|
+
|
|
120
|
+
### Answer to Your Question
|
|
121
|
+
[Direct answer if the user asked a specific question]
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
If the user only asks for one specific detail, answer it directly — skip the full template.
|
|
125
|
+
|
|
126
|
+
**After presenting the summary, you MUST proceed to Step 6 before ending the turn.**
|
|
127
|
+
|
|
128
|
+
### Step 6: Research Wiki Ingest
|
|
129
|
+
|
|
130
|
+
**You MUST always run the bash block below — it checks for `research-wiki/` internally and exits silently when absent.** Do NOT skip this step based on your own directory check; the bash block handles that for you.
|
|
131
|
+
|
|
132
|
+
Substitute only `<paper_arxiv_id>` and `<thesis>`; keep `${ARIS_REPO:-...}` as-is so an already-set env var is preserved.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
if [ -d research-wiki/ ]; then
|
|
136
|
+
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
|
|
137
|
+
ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
|
|
138
|
+
if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
|
|
139
|
+
ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
|
|
140
|
+
fi
|
|
141
|
+
WIKI_SCRIPT=".aris/tools/research_wiki.py"
|
|
142
|
+
[ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
|
|
143
|
+
[ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
|
|
144
|
+
[ -f "$WIKI_SCRIPT" ] || {
|
|
145
|
+
echo "WARN: research_wiki.py not found; paper summary delivered, wiki ingest skipped. Fix: bash tools/install_aris.sh or smart_update.sh (refreshes ~/.aris/repo), export ARIS_REPO, or cp <ARIS-repo>/tools/research_wiki.py tools/." >&2
|
|
146
|
+
WIKI_SCRIPT=""
|
|
147
|
+
}
|
|
148
|
+
[ -n "$WIKI_SCRIPT" ] && python3 "$WIKI_SCRIPT" ingest_paper research-wiki/ \
|
|
149
|
+
--arxiv-id "<paper_arxiv_id>" \
|
|
150
|
+
[--thesis "<one-line thesis from the Tier 1 overview>"]
|
|
151
|
+
fi
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
The helper handles metadata fetch, slug, dedup, page creation, index
|
|
155
|
+
rebuild, and log append — **do not handwrite `papers/<slug>.md`**. See
|
|
156
|
+
[`shared-references/integration-contract.md`](../shared-references/integration-contract.md).
|
|
157
|
+
If wiki was not present at read time (or the helper was unreachable),
|
|
158
|
+
the user can backfill via
|
|
159
|
+
`python3 "$WIKI_SCRIPT" sync research-wiki/ --arxiv-ids <id>` after
|
|
160
|
+
resolving `$WIKI_SCRIPT` as above.
|
|
161
|
+
|
|
162
|
+
#### Suggest Follow-Up Skills (after Step 6 completes)
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
/arxiv "PAPER_ID" - download - download the PDF to local library
|
|
166
|
+
/deepxiv "PAPER_ID" - section: Methods - read a specific section progressively
|
|
167
|
+
/research-lit "related topic" - multi-source literature survey
|
|
168
|
+
/novelty-check "idea from paper" - verify novelty against this paper's area
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Key Rules
|
|
172
|
+
|
|
173
|
+
- **Overview first**: `overview` is the fastest path and must always be tried before deeper tiers. Only escalate when needed.
|
|
174
|
+
- **Minimal reads**: At `src` tier, read only the files that answer the question. Full-tree reads waste tokens.
|
|
175
|
+
- **Cross-platform**: When downloading and extracting the source archive, prefer cross-platform approaches (e.g., Python stdlib) over platform-specific commands to ensure Windows/WSL compatibility.
|
|
176
|
+
- **No PDF parsing**: This skill reads structured markdown and LaTeX source, not raw PDFs. For PDF content, suggest `/arxiv` with download.
|
|
177
|
+
- **Rate limiting**: arXiv source download may rate-limit. If HTTP 429 occurs, wait 5 seconds and retry once. If still blocked, report the error and suggest `/deepxiv` as alternative.
|
|
178
|
+
- **Complementary, not competing**: This skill complements `/arxiv` (search + download) and `/deepxiv` (progressive reading). Do not re-implement their functionality.
|
|
179
|
+
|
|
180
|
+
## Integration with Other Skills
|
|
181
|
+
|
|
182
|
+
### As enrichment in `/research-lit`
|
|
183
|
+
|
|
184
|
+
`/research-lit` can use this skill's Tier 1 (overview) as a fast enrichment step between search and deep analysis. After finding arXiv papers in Step 1, fetch AlphaXiv overviews to quickly assess relevance before committing to full-text reads:
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
Step 1: Search → list of arXiv IDs
|
|
188
|
+
Step 1.5: AlphaXiv overview for top 5-8 papers (this skill, Tier 1 only)
|
|
189
|
+
Step 2: Deep analysis only for papers that pass the relevance filter
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
This saves significant tokens by filtering out marginally relevant papers before deep reading.
|
|
193
|
+
|
|
194
|
+
### As follow-up from other skills
|
|
195
|
+
|
|
196
|
+
After `/research-lit`, `/novelty-check`, or `/idea-discovery` surface a specific paper, users can invoke `/alphaxiv PAPER_ID` for a fast deep-dive without re-running the full survey.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: analyze-results
|
|
3
|
+
description: Analyze ML experiment results, compute statistics, generate comparison tables and insights. Use when user says "analyze results", "compare", or needs to interpret experimental data.
|
|
4
|
+
argument-hint: "[results-path-or-description]"
|
|
5
|
+
allowed-tools: Bash(*), Read, Grep, Glob, Write, Edit
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Analyze Experiment Results
|
|
9
|
+
|
|
10
|
+
Analyze: $ARGUMENTS
|
|
11
|
+
|
|
12
|
+
## Workflow
|
|
13
|
+
|
|
14
|
+
### Step 1: Locate Results
|
|
15
|
+
Find all relevant JSON/CSV result files:
|
|
16
|
+
- Check `figures/`, `results/`, or project-specific output directories
|
|
17
|
+
- Parse JSON results into structured data
|
|
18
|
+
|
|
19
|
+
### Step 2: Build Comparison Table
|
|
20
|
+
Organize results by:
|
|
21
|
+
- **Independent variables**: model type, hyperparameters, data config
|
|
22
|
+
- **Dependent variables**: primary metric (e.g., perplexity, accuracy, loss), secondary metrics
|
|
23
|
+
- **Delta vs baseline**: always compute relative improvement
|
|
24
|
+
|
|
25
|
+
### Step 3: Statistical Analysis
|
|
26
|
+
- If multiple seeds: report mean +/- std, check reproducibility
|
|
27
|
+
- If sweeping a parameter: identify trends (monotonic, U-shaped, plateau)
|
|
28
|
+
- Flag outliers or suspicious results
|
|
29
|
+
|
|
30
|
+
### Step 4: Generate Insights
|
|
31
|
+
For each finding, structure as:
|
|
32
|
+
1. **Observation**: what the data shows (with numbers)
|
|
33
|
+
2. **Interpretation**: why this might be happening
|
|
34
|
+
3. **Implication**: what this means for the research question
|
|
35
|
+
4. **Next step**: what experiment would test the interpretation
|
|
36
|
+
|
|
37
|
+
### Step 5: Update Documentation
|
|
38
|
+
If findings are significant:
|
|
39
|
+
- Propose updates to project notes or experiment reports
|
|
40
|
+
- Draft a concise finding statement (1-2 sentences)
|
|
41
|
+
|
|
42
|
+
## Output Format
|
|
43
|
+
Always include:
|
|
44
|
+
1. Raw data table
|
|
45
|
+
2. Key findings (numbered, concise)
|
|
46
|
+
3. Suggested next experiments (if any)
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arxiv
|
|
3
|
+
description: Search, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
|
|
4
|
+
argument-hint: "[query-or-arxiv-id]"
|
|
5
|
+
allowed-tools: Bash(*), Read, Write
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# arXiv Paper Search & Download
|
|
9
|
+
|
|
10
|
+
Search topic or arXiv paper ID: $ARGUMENTS
|
|
11
|
+
|
|
12
|
+
## Constants
|
|
13
|
+
|
|
14
|
+
- **PAPER_DIR** - Local directory to save downloaded PDFs. Default: `papers/` in the current project directory.
|
|
15
|
+
- **MAX_RESULTS = 10** - Default number of search results.
|
|
16
|
+
- **ARXIV_FETCHER** — canonical name `arxiv_fetch.py`, resolved per
|
|
17
|
+
[`shared-references/integration-contract.md`](../shared-references/integration-contract.md) §2
|
|
18
|
+
(Policy D1 — primary + fallback cascade). If unresolved (canonical
|
|
19
|
+
chain exhausted), fall back to the inline Python alternative
|
|
20
|
+
documented in Step 2.
|
|
21
|
+
|
|
22
|
+
> Overrides (append to arguments):
|
|
23
|
+
> - `/arxiv "attention mechanism" - max: 20` - return up to 20 results
|
|
24
|
+
> - `/arxiv "2301.07041" - download` - download a specific paper by ID
|
|
25
|
+
> - `/arxiv "query" - dir: literature/` - save PDFs to a custom directory
|
|
26
|
+
> - `/arxiv "query" - download: all` - download all result PDFs
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
### Step 1: Parse Arguments
|
|
31
|
+
|
|
32
|
+
Parse `$ARGUMENTS` for directives:
|
|
33
|
+
|
|
34
|
+
- **Query or ID**: main search term or a bare arXiv ID such as `2301.07041` or `cs/0601001`
|
|
35
|
+
- **`- max: N`**: override MAX_RESULTS (e.g., `- max: 20`)
|
|
36
|
+
- **`- dir: PATH`**: override PAPER_DIR (e.g., `- dir: literature/`)
|
|
37
|
+
- **`- download`**: download the first result's PDF after listing
|
|
38
|
+
- **`- download: all`**: download PDFs for all results
|
|
39
|
+
|
|
40
|
+
If the argument matches an arXiv ID pattern (`YYMM.NNNNN` or `category/NNNNNNN`), skip the search and go directly to Step 3.
|
|
41
|
+
|
|
42
|
+
### Step 2: Search arXiv
|
|
43
|
+
|
|
44
|
+
Resolve `$ARXIV_FETCHER` via the canonical strict-safe chain (see
|
|
45
|
+
[`shared-references/integration-contract.md`](../shared-references/integration-contract.md) §2):
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
|
|
49
|
+
if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills.txt ]; then
|
|
50
|
+
ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null) || true
|
|
51
|
+
fi
|
|
52
|
+
if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
|
|
53
|
+
ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
|
|
54
|
+
fi
|
|
55
|
+
ARXIV_FETCHER=".aris/tools/arxiv_fetch.py"
|
|
56
|
+
[ -f "$ARXIV_FETCHER" ] || ARXIV_FETCHER="tools/arxiv_fetch.py"
|
|
57
|
+
[ -f "$ARXIV_FETCHER" ] || { [ -n "${ARIS_REPO:-}" ] && ARXIV_FETCHER="$ARIS_REPO/tools/arxiv_fetch.py"; }
|
|
58
|
+
[ -f "$ARXIV_FETCHER" ] || ARXIV_FETCHER=""
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**If `$ARXIV_FETCHER` is non-empty**, run:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python3 "$ARXIV_FETCHER" search "QUERY" --max MAX_RESULTS
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**If `$ARXIV_FETCHER` is empty** (Policy D1 cascade), fall back to inline Python:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python3 - <<'PYEOF'
|
|
71
|
+
import json
|
|
72
|
+
import urllib.parse
|
|
73
|
+
import urllib.request
|
|
74
|
+
import xml.etree.ElementTree as ET
|
|
75
|
+
|
|
76
|
+
NS = "http://www.w3.org/2005/Atom"
|
|
77
|
+
query = urllib.parse.quote("QUERY")
|
|
78
|
+
url = (f"http://export.arxiv.org/api/query"
|
|
79
|
+
f"?search_query={query}&start=0&max_results=MAX_RESULTS"
|
|
80
|
+
f"&sortBy=relevance&sortOrder=descending")
|
|
81
|
+
with urllib.request.urlopen(url, timeout=30) as r:
|
|
82
|
+
root = ET.fromstring(r.read())
|
|
83
|
+
papers = []
|
|
84
|
+
for entry in root.findall(f"{{{NS}}}entry"):
|
|
85
|
+
aid = entry.findtext(f"{{{NS}}}id", "").split("/abs/")[-1].split("v")[0]
|
|
86
|
+
title = (entry.findtext(f"{{{NS}}}title", "") or "").strip().replace("\n", " ")
|
|
87
|
+
abstract = (entry.findtext(f"{{{NS}}}summary", "") or "").strip().replace("\n", " ")
|
|
88
|
+
authors = [a.findtext(f"{{{NS}}}name", "") for a in entry.findall(f"{{{NS}}}author")]
|
|
89
|
+
published = entry.findtext(f"{{{NS}}}published", "")[:10]
|
|
90
|
+
cats = [c.get("term", "") for c in entry.findall(f"{{{NS}}}category")]
|
|
91
|
+
papers.append({
|
|
92
|
+
"id": aid,
|
|
93
|
+
"title": title,
|
|
94
|
+
"authors": authors,
|
|
95
|
+
"abstract": abstract,
|
|
96
|
+
"published": published,
|
|
97
|
+
"categories": cats,
|
|
98
|
+
"pdf_url": f"https://arxiv.org/pdf/{aid}.pdf",
|
|
99
|
+
"abs_url": f"https://arxiv.org/abs/{aid}",
|
|
100
|
+
})
|
|
101
|
+
print(json.dumps(papers, ensure_ascii=False, indent=2))
|
|
102
|
+
PYEOF
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Present results as a table:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
| # | arXiv ID | Title | Authors | Date | Category |
|
|
109
|
+
|---|------------|---------------------|----------------|------------|----------|
|
|
110
|
+
| 1 | 2301.07041 | Attention Is All... | Vaswani et al. | 2017-06-12 | cs.LG |
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Step 3: Fetch Details for a Specific ID
|
|
114
|
+
|
|
115
|
+
When a single paper ID is requested (either directly or from Step 2):
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
python3 "$ARXIV_FETCHER" search "id:ARXIV_ID" --max 1
|
|
119
|
+
# or fallback:
|
|
120
|
+
python3 -c "
|
|
121
|
+
import urllib.request, xml.etree.ElementTree as ET
|
|
122
|
+
NS = 'http://www.w3.org/2005/Atom'
|
|
123
|
+
url = 'http://export.arxiv.org/api/query?id_list=ARXIV_ID'
|
|
124
|
+
with urllib.request.urlopen(url, timeout=30) as r:
|
|
125
|
+
root = ET.fromstring(r.read())
|
|
126
|
+
# print full details ...
|
|
127
|
+
"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Display: title, all authors, categories, full abstract, published date, PDF URL, abstract URL.
|
|
131
|
+
|
|
132
|
+
### Step 4: Download PDFs
|
|
133
|
+
|
|
134
|
+
When download is requested, for each paper ID to download:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Using fetch script:
|
|
138
|
+
python3 "$ARXIV_FETCHER" download ARXIV_ID --dir PAPER_DIR
|
|
139
|
+
|
|
140
|
+
# Fallback:
|
|
141
|
+
mkdir -p PAPER_DIR && python3 -c "
|
|
142
|
+
import pathlib
|
|
143
|
+
import sys
|
|
144
|
+
import urllib.request
|
|
145
|
+
|
|
146
|
+
out = pathlib.Path('PAPER_DIR/ARXIV_ID.pdf')
|
|
147
|
+
if out.exists():
|
|
148
|
+
print(f'Already exists: {out}')
|
|
149
|
+
sys.exit(0)
|
|
150
|
+
req = urllib.request.Request(
|
|
151
|
+
'https://arxiv.org/pdf/ARXIV_ID.pdf',
|
|
152
|
+
headers={'User-Agent': 'arxiv-skill/1.0'},
|
|
153
|
+
)
|
|
154
|
+
with urllib.request.urlopen(req, timeout=60) as r:
|
|
155
|
+
out.write_bytes(r.read())
|
|
156
|
+
print(f'Downloaded: {out} ({out.stat().st_size // 1024} KB)')
|
|
157
|
+
"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
After each download:
|
|
161
|
+
|
|
162
|
+
- Confirm file size > 10 KB (reject smaller files - likely an error HTML page)
|
|
163
|
+
- Add a 1-second delay between consecutive downloads to avoid rate limiting
|
|
164
|
+
- Report: `Downloaded: papers/2301.07041.pdf (842 KB)`
|
|
165
|
+
|
|
166
|
+
### Step 5: Summarize
|
|
167
|
+
|
|
168
|
+
For each paper (downloaded or fetched by API):
|
|
169
|
+
|
|
170
|
+
```markdown
|
|
171
|
+
## [Title]
|
|
172
|
+
|
|
173
|
+
- **arXiv**: [ID] - [abs_url]
|
|
174
|
+
- **Authors**: [full author list]
|
|
175
|
+
- **Date**: [published]
|
|
176
|
+
- **Categories**: [cs.LG, cs.AI, ...]
|
|
177
|
+
- **Abstract**: [full abstract]
|
|
178
|
+
- **Key contributions** (extracted from abstract):
|
|
179
|
+
- [contribution 1]
|
|
180
|
+
- [contribution 2]
|
|
181
|
+
- [contribution 3]
|
|
182
|
+
- **Local PDF**: papers/[ID].pdf (if downloaded)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Step 6: Update Research Wiki (if active)
|
|
186
|
+
|
|
187
|
+
**Required when `research-wiki/` exists in the project**; skip silently
|
|
188
|
+
otherwise. When the wiki dir exists, resolve `$WIKI_SCRIPT` per the
|
|
189
|
+
canonical chain at
|
|
190
|
+
[`shared-references/wiki-helper-resolution.md`](../shared-references/wiki-helper-resolution.md)
|
|
191
|
+
(Variant B — warn-and-skip), then ingest every paper returned by this
|
|
192
|
+
invocation:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
if [ -d research-wiki/ ]; then
|
|
196
|
+
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
|
|
197
|
+
ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
|
|
198
|
+
if [ -z "${ARIS_REPO:-}" ] && [ -f "$HOME/.aris/repo" ]; then
|
|
199
|
+
ARIS_REPO=$(cat "$HOME/.aris/repo" 2>/dev/null) || true
|
|
200
|
+
fi
|
|
201
|
+
WIKI_SCRIPT=".aris/tools/research_wiki.py"
|
|
202
|
+
[ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
|
|
203
|
+
[ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
|
|
204
|
+
[ -f "$WIKI_SCRIPT" ] || {
|
|
205
|
+
echo "WARN: research_wiki.py not found; arxiv results delivered, wiki ingest skipped. Fix: bash tools/install_aris.sh or smart_update.sh (refreshes ~/.aris/repo), export ARIS_REPO, or cp <ARIS-repo>/tools/research_wiki.py tools/." >&2
|
|
206
|
+
WIKI_SCRIPT=""
|
|
207
|
+
}
|
|
208
|
+
if [ -n "$WIKI_SCRIPT" ]; then
|
|
209
|
+
for each arxiv_id in results:
|
|
210
|
+
python3 "$WIKI_SCRIPT" ingest_paper research-wiki/ \
|
|
211
|
+
--arxiv-id "<arxiv_id>"
|
|
212
|
+
fi
|
|
213
|
+
fi
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
The helper handles metadata fetch, slug, dedup, page creation, index
|
|
217
|
+
rebuild, and log append in a single call — **do not handwrite
|
|
218
|
+
`papers/<slug>.md`**. See
|
|
219
|
+
[`shared-references/integration-contract.md`](../shared-references/integration-contract.md)
|
|
220
|
+
for the canonical-helper rule. Missed ingests can be backfilled later
|
|
221
|
+
with `python3 "$WIKI_SCRIPT" sync research-wiki/ --arxiv-ids <id1>,<id2>,...`
|
|
222
|
+
after resolving `$WIKI_SCRIPT` as above.
|
|
223
|
+
|
|
224
|
+
### Step 7: Final Output
|
|
225
|
+
|
|
226
|
+
Summarize what was done:
|
|
227
|
+
|
|
228
|
+
- `Found N papers for "query"`
|
|
229
|
+
- `Downloaded: papers/2301.07041.pdf (842 KB)` (for each download)
|
|
230
|
+
- `Wiki-ingested N papers` (if `research-wiki/` was present)
|
|
231
|
+
- Any warnings (rate limit hit, file too small, already exists)
|
|
232
|
+
|
|
233
|
+
Suggest follow-up skills:
|
|
234
|
+
|
|
235
|
+
```text
|
|
236
|
+
/research-lit "topic" - multi-source review: Zotero + Obsidian + local PDFs + web
|
|
237
|
+
/novelty-check "idea" - verify your idea is novel against these papers
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Key Rules
|
|
241
|
+
|
|
242
|
+
- Always show the arXiv ID prominently - users need it for citations and reproducibility
|
|
243
|
+
- Verify downloaded PDFs: file must be > 10 KB; warn and delete if smaller
|
|
244
|
+
- Rate limit: wait 1 second between consecutive PDF downloads; retry once after 5 seconds on HTTP 429
|
|
245
|
+
- Never overwrite an existing PDF at the same path - skip it and report "already exists"
|
|
246
|
+
- Handle both arXiv ID formats: new (`2301.07041`) and old (`cs/0601001`)
|
|
247
|
+
- PAPER_DIR is created automatically if it does not exist
|
|
248
|
+
- If the arXiv API is unreachable, report the error clearly and suggest using `/research-lit` with `- sources: web` as a fallback
|