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
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ARIS Smart Skill Update
|
|
3
|
+
# Intelligently compares local skills with upstream, detects personal
|
|
4
|
+
# customizations, and recommends safe update strategy per skill.
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# Global (default):
|
|
8
|
+
# bash tools/smart_update.sh [--apply]
|
|
9
|
+
# Project-level (Claude Code):
|
|
10
|
+
# bash tools/smart_update.sh --project <path> [--apply]
|
|
11
|
+
# Project-level (Codex CLI):
|
|
12
|
+
# bash tools/smart_update.sh --project <path> --target-subdir .agents/skills/aris [--apply]
|
|
13
|
+
# Custom paths:
|
|
14
|
+
# bash tools/smart_update.sh --upstream <path> --local <path> [--apply]
|
|
15
|
+
#
|
|
16
|
+
# --apply: actually perform the updates (default: dry-run analysis only)
|
|
17
|
+
# --project <path>: project root — upstream from repo, local from <path>/<target-subdir>
|
|
18
|
+
# --target-subdir <relative>: project-mode skill subdirectory (default: .claude/skills)
|
|
19
|
+
# common values: .claude/skills, .claude/skills/aris,
|
|
20
|
+
# .agents/skills, .agents/skills/aris
|
|
21
|
+
# must be a relative path
|
|
22
|
+
# --upstream <path>: explicit upstream skills directory
|
|
23
|
+
# --local <path>: explicit local skills directory
|
|
24
|
+
#
|
|
25
|
+
# New-skill policy (--apply only; dry-run always just reports):
|
|
26
|
+
# default (TTY, no policy flag): each new upstream skill is confirmed one by
|
|
27
|
+
# one [y/N]; a decline is remembered in
|
|
28
|
+
# <local>/.aris-declined.txt and never re-asked
|
|
29
|
+
# --add-new: install every new skill (does NOT un-decline previously
|
|
30
|
+
# declined skills — edit/clear .aris-declined.txt for that)
|
|
31
|
+
# --skip-new: skip every new skill without recording a decline (same as the
|
|
32
|
+
# automatic behavior when there is no TTY)
|
|
33
|
+
#
|
|
34
|
+
# On successful --apply, writes $HOME/.aris/repo <- this repo's root (helper
|
|
35
|
+
# resolution chain layer 4, #366) so copy-installed skills can find tools/.
|
|
36
|
+
|
|
37
|
+
set -euo pipefail
|
|
38
|
+
|
|
39
|
+
# ─── Parse arguments ───────────────────────────────────────────────────────────
|
|
40
|
+
APPLY=false
|
|
41
|
+
MODE="global"
|
|
42
|
+
PROJECT_PATH=""
|
|
43
|
+
TARGET_SUBDIR=".claude/skills"
|
|
44
|
+
CUSTOM_UPSTREAM=""
|
|
45
|
+
CUSTOM_LOCAL=""
|
|
46
|
+
NEW_POLICY="" # "" (prompt) | add | skip
|
|
47
|
+
|
|
48
|
+
while [[ $# -gt 0 ]]; do
|
|
49
|
+
case "$1" in
|
|
50
|
+
--apply)
|
|
51
|
+
APPLY=true
|
|
52
|
+
shift
|
|
53
|
+
;;
|
|
54
|
+
--add-new)
|
|
55
|
+
NEW_POLICY="add"
|
|
56
|
+
shift
|
|
57
|
+
;;
|
|
58
|
+
--skip-new)
|
|
59
|
+
NEW_POLICY="skip"
|
|
60
|
+
shift
|
|
61
|
+
;;
|
|
62
|
+
--project)
|
|
63
|
+
MODE="project"
|
|
64
|
+
PROJECT_PATH="${2:?--project requires a path argument}"
|
|
65
|
+
shift 2
|
|
66
|
+
;;
|
|
67
|
+
--target-subdir)
|
|
68
|
+
TARGET_SUBDIR="${2:?--target-subdir requires a relative path argument}"
|
|
69
|
+
if [[ "$TARGET_SUBDIR" == /* ]]; then
|
|
70
|
+
echo "Error: --target-subdir must be a relative path (got: $TARGET_SUBDIR)" >&2
|
|
71
|
+
echo "Hint: use --local for absolute paths" >&2
|
|
72
|
+
exit 1
|
|
73
|
+
fi
|
|
74
|
+
shift 2
|
|
75
|
+
;;
|
|
76
|
+
--upstream)
|
|
77
|
+
MODE="explicit"
|
|
78
|
+
CUSTOM_UPSTREAM="${2:?--upstream requires a path argument}"
|
|
79
|
+
shift 2
|
|
80
|
+
;;
|
|
81
|
+
--local)
|
|
82
|
+
MODE="explicit"
|
|
83
|
+
CUSTOM_LOCAL="${2:?--local requires a path argument}"
|
|
84
|
+
shift 2
|
|
85
|
+
;;
|
|
86
|
+
*)
|
|
87
|
+
echo "Unknown argument: $1"
|
|
88
|
+
echo "Usage: bash tools/smart_update.sh [--apply] [--add-new|--skip-new] [--project <path> [--target-subdir <rel>]] [--upstream <path> --local <path>]"
|
|
89
|
+
exit 1
|
|
90
|
+
;;
|
|
91
|
+
esac
|
|
92
|
+
done
|
|
93
|
+
|
|
94
|
+
# ─── Resolve paths ─────────────────────────────────────────────────────────────
|
|
95
|
+
REPO_SKILLS_DIR="$(cd "$(dirname "$0")/.." && pwd)/skills"
|
|
96
|
+
|
|
97
|
+
case "$MODE" in
|
|
98
|
+
project)
|
|
99
|
+
# Resolve project path
|
|
100
|
+
if [[ "$PROJECT_PATH" == /* ]]; then
|
|
101
|
+
PROJECT_ROOT="$PROJECT_PATH"
|
|
102
|
+
else
|
|
103
|
+
PROJECT_ROOT="$(cd "$PROJECT_PATH" && pwd)"
|
|
104
|
+
fi
|
|
105
|
+
# Upstream always from repo
|
|
106
|
+
UPSTREAM_DIR="$REPO_SKILLS_DIR"
|
|
107
|
+
LOCAL_DIR="$PROJECT_ROOT/$TARGET_SUBDIR"
|
|
108
|
+
SCOPE="Project: $PROJECT_ROOT (subdir: $TARGET_SUBDIR)"
|
|
109
|
+
|
|
110
|
+
# Platform marker auto-detect: warn on mismatch (never silently switch)
|
|
111
|
+
HAS_CLAUDE_MARKERS=false
|
|
112
|
+
HAS_CODEX_MARKERS=false
|
|
113
|
+
[[ -e "$PROJECT_ROOT/CLAUDE.md" || -e "$PROJECT_ROOT/.claude/skills" || -e "$PROJECT_ROOT/.claude/settings.json" ]] && HAS_CLAUDE_MARKERS=true
|
|
114
|
+
[[ -e "$PROJECT_ROOT/AGENTS.md" || -e "$PROJECT_ROOT/.agents/skills" || -e "$PROJECT_ROOT/.codex/config.toml" ]] && HAS_CODEX_MARKERS=true
|
|
115
|
+
if $HAS_CLAUDE_MARKERS && ! $HAS_CODEX_MARKERS && [[ "$TARGET_SUBDIR" == .agents/* ]]; then
|
|
116
|
+
echo -e "\033[1;33m⚠️ Warning: project has Claude markers but --target-subdir points to Codex path ($TARGET_SUBDIR)\033[0m" >&2
|
|
117
|
+
fi
|
|
118
|
+
if $HAS_CODEX_MARKERS && ! $HAS_CLAUDE_MARKERS && [[ "$TARGET_SUBDIR" == .claude/* ]]; then
|
|
119
|
+
echo -e "\033[1;33m⚠️ Warning: project has Codex markers but --target-subdir points to Claude path ($TARGET_SUBDIR)\033[0m" >&2
|
|
120
|
+
fi
|
|
121
|
+
;;
|
|
122
|
+
explicit)
|
|
123
|
+
if [[ -z "$CUSTOM_UPSTREAM" ]] || [[ -z "$CUSTOM_LOCAL" ]]; then
|
|
124
|
+
echo "Error: --upstream and --local must both be specified"
|
|
125
|
+
exit 1
|
|
126
|
+
fi
|
|
127
|
+
UPSTREAM_DIR="$CUSTOM_UPSTREAM"
|
|
128
|
+
LOCAL_DIR="$CUSTOM_LOCAL"
|
|
129
|
+
SCOPE="Custom"
|
|
130
|
+
;;
|
|
131
|
+
*)
|
|
132
|
+
# Global default
|
|
133
|
+
UPSTREAM_DIR="$REPO_SKILLS_DIR"
|
|
134
|
+
LOCAL_DIR="${HOME}/.claude/skills"
|
|
135
|
+
SCOPE="Global"
|
|
136
|
+
;;
|
|
137
|
+
esac
|
|
138
|
+
|
|
139
|
+
# ─── Deprecate nested --target-subdir (.claude/skills/aris, .agents/skills/aris) ──
|
|
140
|
+
# Nested install hides skills from Claude Code's slash-command discovery (it scans
|
|
141
|
+
# only one level deep). The replacement is the flat install via install_aris.sh.
|
|
142
|
+
if [[ "$TARGET_SUBDIR" == ".claude/skills/aris" || "$TARGET_SUBDIR" == ".agents/skills/aris" ]]; then
|
|
143
|
+
REPO_ROOT_FOR_HINT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
144
|
+
echo "" >&2
|
|
145
|
+
echo -e "\033[1;33m⚠️ --target-subdir $TARGET_SUBDIR is DEPRECATED\033[0m" >&2
|
|
146
|
+
echo "" >&2
|
|
147
|
+
echo " Reason: the nested 'aris/' subdirectory hides skills from Claude Code's" >&2
|
|
148
|
+
echo " slash-command discovery (which only scans .claude/skills/ one level deep)." >&2
|
|
149
|
+
echo "" >&2
|
|
150
|
+
echo " Switch to the flat install (auto-reconciles new/removed skills on re-run):" >&2
|
|
151
|
+
echo " bash $REPO_ROOT_FOR_HINT/tools/install_aris.sh \"${PROJECT_PATH:-<project>}\"" >&2
|
|
152
|
+
echo "" >&2
|
|
153
|
+
echo " To migrate an existing nested install:" >&2
|
|
154
|
+
echo " bash $REPO_ROOT_FOR_HINT/tools/install_aris.sh \"${PROJECT_PATH:-<project>}\" --from-old" >&2
|
|
155
|
+
echo " (for COPY-style installs, also pass --migrate-copy keep-user|prefer-upstream)" >&2
|
|
156
|
+
echo "" >&2
|
|
157
|
+
if $APPLY; then
|
|
158
|
+
echo -e "\033[0;31mRefusing to --apply with deprecated nested target. Use install_aris.sh instead.\033[0m" >&2
|
|
159
|
+
exit 2
|
|
160
|
+
fi
|
|
161
|
+
echo "(continuing dry-run analysis for backward compatibility — no changes will be made)" >&2
|
|
162
|
+
echo "" >&2
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
# ─── Refuse to operate on symlinked installs (those use install_aris.sh, not smart_update) ──
|
|
166
|
+
if [[ -L "$LOCAL_DIR" ]]; then
|
|
167
|
+
LINK_TARGET="$(readlink "$LOCAL_DIR")"
|
|
168
|
+
REPO_ROOT_FOR_HINT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
169
|
+
echo "" >&2
|
|
170
|
+
echo -e "\033[0;31m✗ Local skill directory is a symlink: $LOCAL_DIR\033[0m" >&2
|
|
171
|
+
echo " → $LINK_TARGET" >&2
|
|
172
|
+
echo "" >&2
|
|
173
|
+
echo "smart_update is for COPIED installs. Symlinked installs are managed by install_aris.sh:" >&2
|
|
174
|
+
echo " cd <aris-repo> && git pull # updates content of existing skills" >&2
|
|
175
|
+
echo " bash $REPO_ROOT_FOR_HINT/tools/install_aris.sh <project> # reconciles new/removed skills" >&2
|
|
176
|
+
echo "" >&2
|
|
177
|
+
exit 2
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
# install_aris.sh creates flat PER-SKILL symlinks (the root dir is real), so
|
|
181
|
+
# the root-symlink check above can't see a managed flat install. The manifest
|
|
182
|
+
# is the authoritative marker — refuse project-mode updates when one exists.
|
|
183
|
+
if [[ "$MODE" == "project" && -f "$PROJECT_ROOT/.aris/installed-skills.txt" ]]; then
|
|
184
|
+
REPO_ROOT_FOR_HINT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
185
|
+
echo "" >&2
|
|
186
|
+
echo -e "\033[0;31m✗ Managed symlink install detected (manifest: $PROJECT_ROOT/.aris/installed-skills.txt)\033[0m" >&2
|
|
187
|
+
echo "" >&2
|
|
188
|
+
echo "smart_update is for COPIED installs. This project is managed by install_aris.sh:" >&2
|
|
189
|
+
echo " cd <aris-repo> && git pull # updates content of existing skills" >&2
|
|
190
|
+
echo " bash $REPO_ROOT_FOR_HINT/tools/install_aris.sh \"$PROJECT_ROOT\" # reconciles new/removed skills" >&2
|
|
191
|
+
echo "" >&2
|
|
192
|
+
exit 2
|
|
193
|
+
fi
|
|
194
|
+
|
|
195
|
+
# Colors
|
|
196
|
+
RED='\033[0;31m'
|
|
197
|
+
GREEN='\033[0;32m'
|
|
198
|
+
YELLOW='\033[1;33m'
|
|
199
|
+
BLUE='\033[0;34m'
|
|
200
|
+
NC='\033[0m'
|
|
201
|
+
|
|
202
|
+
# Personal info patterns (paths, IPs, API keys, usernames, server configs)
|
|
203
|
+
PERSONAL_PATTERNS=(
|
|
204
|
+
'ssh '
|
|
205
|
+
'SJTUServer'
|
|
206
|
+
'rfyang'
|
|
207
|
+
'yangruofeng'
|
|
208
|
+
'api_key'
|
|
209
|
+
'API_KEY'
|
|
210
|
+
'sk-'
|
|
211
|
+
'token'
|
|
212
|
+
'@sjtu'
|
|
213
|
+
'@gmail'
|
|
214
|
+
'/home/'
|
|
215
|
+
'/Users/'
|
|
216
|
+
'CUDA_VISIBLE'
|
|
217
|
+
'wandb_project'
|
|
218
|
+
'server_ip'
|
|
219
|
+
'gpu_server'
|
|
220
|
+
'screen -'
|
|
221
|
+
'conda activate'
|
|
222
|
+
'192\.168\.'
|
|
223
|
+
'10\.\d+\.'
|
|
224
|
+
'122\.'
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# ─── Stale-pristine detection ──────────────────────────────────────────────────
|
|
228
|
+
# A local SKILL.md that is byte-identical to SOME older committed upstream
|
|
229
|
+
# version is NOT a user customization — it is just a stale install. This matters
|
|
230
|
+
# because old releases occasionally contained lines (since redacted upstream)
|
|
231
|
+
# that trip PERSONAL_PATTERNS; without this check such installs get stuck in
|
|
232
|
+
# "needs manual merge" forever even though a plain overwrite is exactly right.
|
|
233
|
+
# Requires the upstream dir to live inside a git clone; otherwise we skip the
|
|
234
|
+
# check and keep the conservative needs-merge classification.
|
|
235
|
+
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
236
|
+
GIT_HISTORY_OK=false
|
|
237
|
+
if git -C "$REPO_ROOT" rev-parse --git-dir >/dev/null 2>&1; then
|
|
238
|
+
GIT_HISTORY_OK=true
|
|
239
|
+
fi
|
|
240
|
+
|
|
241
|
+
# ─── New-skill confirmation state (declined list + group catalog lookup) ──────
|
|
242
|
+
CATALOG_PATH="$REPO_ROOT/tools/skill-groups.tsv"
|
|
243
|
+
DECLINED_FILE="$LOCAL_DIR/.aris-declined.txt"
|
|
244
|
+
|
|
245
|
+
is_declined() { # $1 = skill name
|
|
246
|
+
[[ -f "$DECLINED_FILE" ]] && grep -qxF "$1" "$DECLINED_FILE"
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
catalog_group_of() { # $1 = skill name -> group id, or "?" if unknown
|
|
250
|
+
local g=""
|
|
251
|
+
[[ -f "$CATALOG_PATH" ]] && g=$(awk -F'\t' -v s="$1" '$1=="skill" && $2==s {print $3; exit}' "$CATALOG_PATH")
|
|
252
|
+
echo "${g:-?}"
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# Layer-4 helper resolution (#366): a global pointer file lets globally/copy-
|
|
256
|
+
# installed skills find $ARIS_REPO/tools without a per-project install.
|
|
257
|
+
ensure_global_pointer() {
|
|
258
|
+
local pointer="$HOME/.aris/repo"
|
|
259
|
+
mkdir -p "$(dirname "$pointer")" 2>/dev/null || return 0
|
|
260
|
+
local cur=""
|
|
261
|
+
[[ -f "$pointer" ]] && cur="$(cat "$pointer" 2>/dev/null || true)"
|
|
262
|
+
[[ "$cur" == "$REPO_ROOT" ]] && return 0
|
|
263
|
+
printf '%s\n' "$REPO_ROOT" > "$pointer.tmp.$$" && mv -f "$pointer.tmp.$$" "$pointer"
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
is_pristine_historical_copy() {
|
|
267
|
+
# $1 = local file, $2 = repo-relative path of its upstream counterpart
|
|
268
|
+
$GIT_HISTORY_OK || return 1
|
|
269
|
+
local lf="$1" rel="$2" local_hash commits c blob
|
|
270
|
+
local_hash=$(git -C "$REPO_ROOT" hash-object "$lf" 2>/dev/null) || return 1
|
|
271
|
+
commits=$(git -C "$REPO_ROOT" log --format='%H' -n 200 -- "$rel" 2>/dev/null) || return 1
|
|
272
|
+
for c in $commits; do
|
|
273
|
+
blob=$(git -C "$REPO_ROOT" rev-parse -q --verify "$c:$rel" 2>/dev/null) || continue
|
|
274
|
+
if [[ "$blob" == "$local_hash" ]]; then
|
|
275
|
+
return 0
|
|
276
|
+
fi
|
|
277
|
+
done
|
|
278
|
+
return 1
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
echo -e "${BLUE}━━━ ARIS Smart Skill Update ━━━${NC}"
|
|
282
|
+
echo -e "Scope: ${SCOPE}"
|
|
283
|
+
echo -e "Upstream: ${UPSTREAM_DIR}"
|
|
284
|
+
echo -e "Local: ${LOCAL_DIR}"
|
|
285
|
+
echo ""
|
|
286
|
+
|
|
287
|
+
if [[ ! -d "$UPSTREAM_DIR" ]]; then
|
|
288
|
+
echo -e "${RED}Upstream skills directory not found: ${UPSTREAM_DIR}${NC}"
|
|
289
|
+
exit 1
|
|
290
|
+
fi
|
|
291
|
+
|
|
292
|
+
if [[ ! -d "$LOCAL_DIR" ]]; then
|
|
293
|
+
echo -e "${RED}Local skills directory not found: ${LOCAL_DIR}${NC}"
|
|
294
|
+
exit 1
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
# Counters
|
|
298
|
+
NEW=0
|
|
299
|
+
IDENTICAL=0
|
|
300
|
+
SAFE_UPDATE=0
|
|
301
|
+
NEEDS_MERGE=0
|
|
302
|
+
LOCAL_ONLY=0
|
|
303
|
+
|
|
304
|
+
# Results arrays
|
|
305
|
+
declare -a NEW_SKILLS=()
|
|
306
|
+
declare -a IDENTICAL_SKILLS=()
|
|
307
|
+
declare -a SAFE_SKILLS=()
|
|
308
|
+
declare -a MERGE_SKILLS=()
|
|
309
|
+
declare -a LOCAL_SKILLS=()
|
|
310
|
+
declare -a STALE_PRISTINE_SKILLS=()
|
|
311
|
+
|
|
312
|
+
# Track upstream skill names for local-only detection
|
|
313
|
+
declare -a UPSTREAM_NAMES=()
|
|
314
|
+
|
|
315
|
+
# Check each upstream skill
|
|
316
|
+
for skill_dir in "$UPSTREAM_DIR"/*/; do
|
|
317
|
+
skill_name=$(basename "$skill_dir")
|
|
318
|
+
[[ "$skill_name" == "skills-codex" ]] && continue # skip codex mirror
|
|
319
|
+
[[ "$skill_name" == "shared-references" ]] && continue # handled separately
|
|
320
|
+
|
|
321
|
+
UPSTREAM_NAMES+=("$skill_name")
|
|
322
|
+
|
|
323
|
+
local_skill="$LOCAL_DIR/$skill_name"
|
|
324
|
+
upstream_file="$skill_dir/SKILL.md"
|
|
325
|
+
|
|
326
|
+
if [[ ! -f "$upstream_file" ]]; then
|
|
327
|
+
continue
|
|
328
|
+
fi
|
|
329
|
+
|
|
330
|
+
if [[ ! -d "$local_skill" ]]; then
|
|
331
|
+
# New skill — doesn't exist locally
|
|
332
|
+
NEW=$((NEW + 1))
|
|
333
|
+
NEW_SKILLS+=("$skill_name")
|
|
334
|
+
continue
|
|
335
|
+
fi
|
|
336
|
+
|
|
337
|
+
local_file="$local_skill/SKILL.md"
|
|
338
|
+
if [[ ! -f "$local_file" ]]; then
|
|
339
|
+
NEW=$((NEW + 1))
|
|
340
|
+
NEW_SKILLS+=("$skill_name")
|
|
341
|
+
continue
|
|
342
|
+
fi
|
|
343
|
+
|
|
344
|
+
# Compare
|
|
345
|
+
if diff -q "$upstream_file" "$local_file" > /dev/null 2>&1; then
|
|
346
|
+
# Identical
|
|
347
|
+
IDENTICAL=$((IDENTICAL + 1))
|
|
348
|
+
IDENTICAL_SKILLS+=("$skill_name")
|
|
349
|
+
continue
|
|
350
|
+
fi
|
|
351
|
+
|
|
352
|
+
# Different — check if local has personal info
|
|
353
|
+
has_personal=false
|
|
354
|
+
for pattern in "${PERSONAL_PATTERNS[@]}"; do
|
|
355
|
+
# Check if the LOCAL version has lines matching personal patterns
|
|
356
|
+
# that the UPSTREAM version does NOT have
|
|
357
|
+
local_matches=$(grep -c "$pattern" "$local_file" 2>/dev/null || true)
|
|
358
|
+
local_matches=${local_matches:-0}
|
|
359
|
+
upstream_matches=$(grep -c "$pattern" "$upstream_file" 2>/dev/null || true)
|
|
360
|
+
upstream_matches=${upstream_matches:-0}
|
|
361
|
+
if [[ $local_matches -gt $upstream_matches ]]; then
|
|
362
|
+
has_personal=true
|
|
363
|
+
break
|
|
364
|
+
fi
|
|
365
|
+
done
|
|
366
|
+
|
|
367
|
+
if $has_personal; then
|
|
368
|
+
if is_pristine_historical_copy "$local_file" "skills/$skill_name/SKILL.md"; then
|
|
369
|
+
# Byte-identical to an older committed upstream version — the
|
|
370
|
+
# pattern hits are old upstream content (since redacted), not a
|
|
371
|
+
# user customization. Plain overwrite is the correct resolution.
|
|
372
|
+
SAFE_UPDATE=$((SAFE_UPDATE + 1))
|
|
373
|
+
SAFE_SKILLS+=("$skill_name")
|
|
374
|
+
STALE_PRISTINE_SKILLS+=("$skill_name")
|
|
375
|
+
else
|
|
376
|
+
# Has personal customizations — needs careful merge
|
|
377
|
+
NEEDS_MERGE=$((NEEDS_MERGE + 1))
|
|
378
|
+
MERGE_SKILLS+=("$skill_name")
|
|
379
|
+
fi
|
|
380
|
+
else
|
|
381
|
+
# Changed upstream, no personal info in local — safe to replace
|
|
382
|
+
SAFE_UPDATE=$((SAFE_UPDATE + 1))
|
|
383
|
+
SAFE_SKILLS+=("$skill_name")
|
|
384
|
+
fi
|
|
385
|
+
done
|
|
386
|
+
|
|
387
|
+
# Check for local-only skills (not in upstream)
|
|
388
|
+
for skill_dir in "$LOCAL_DIR"/*/; do
|
|
389
|
+
skill_name=$(basename "$skill_dir")
|
|
390
|
+
[[ "$skill_name" == "shared-references" ]] && continue
|
|
391
|
+
found=false
|
|
392
|
+
for uname in "${UPSTREAM_NAMES[@]:-}"; do
|
|
393
|
+
if [[ "$uname" == "$skill_name" ]]; then
|
|
394
|
+
found=true
|
|
395
|
+
break
|
|
396
|
+
fi
|
|
397
|
+
done
|
|
398
|
+
if ! $found; then
|
|
399
|
+
LOCAL_ONLY=$((LOCAL_ONLY + 1))
|
|
400
|
+
LOCAL_SKILLS+=("$skill_name")
|
|
401
|
+
fi
|
|
402
|
+
done
|
|
403
|
+
|
|
404
|
+
# Report
|
|
405
|
+
echo -e "${GREEN}✅ Identical (no action needed): ${IDENTICAL}${NC}"
|
|
406
|
+
for s in "${IDENTICAL_SKILLS[@]:-}"; do [[ -n "$s" ]] && echo " $s"; done
|
|
407
|
+
echo ""
|
|
408
|
+
|
|
409
|
+
# Pre-declined subset of NEW_SKILLS (informational only in dry-run — the
|
|
410
|
+
# decision of what to install/skip/prompt is only made inside the --apply block).
|
|
411
|
+
declare -a NEW_PREDECLINED_SKILLS=()
|
|
412
|
+
for s in "${NEW_SKILLS[@]:-}"; do
|
|
413
|
+
[[ -n "$s" ]] || continue
|
|
414
|
+
is_declined "$s" && NEW_PREDECLINED_SKILLS+=("$s")
|
|
415
|
+
done
|
|
416
|
+
|
|
417
|
+
echo -e "${GREEN}🆕 New skills upstream (confirmed one-by-one on --apply, unless --add-new/--skip-new): ${NEW}${NC}"
|
|
418
|
+
for s in "${NEW_SKILLS[@]:-}"; do
|
|
419
|
+
[[ -n "$s" ]] || continue
|
|
420
|
+
if is_declined "$s"; then
|
|
421
|
+
echo -e " $s ${YELLOW}(previously declined — stays skipped unless --add-new)${NC}"
|
|
422
|
+
else
|
|
423
|
+
echo " $s"
|
|
424
|
+
fi
|
|
425
|
+
done
|
|
426
|
+
echo ""
|
|
427
|
+
|
|
428
|
+
echo -e "${BLUE}🔄 Updated upstream, no personal info (safe to replace): ${SAFE_UPDATE}${NC}"
|
|
429
|
+
for s in "${SAFE_SKILLS[@]:-}"; do
|
|
430
|
+
[[ -n "$s" ]] || continue
|
|
431
|
+
is_stale=false
|
|
432
|
+
for sp in "${STALE_PRISTINE_SKILLS[@]:-}"; do
|
|
433
|
+
[[ "$sp" == "$s" ]] && is_stale=true && break
|
|
434
|
+
done
|
|
435
|
+
if $is_stale; then
|
|
436
|
+
echo -e " $s ${BLUE}(stale pristine copy of an older release — old upstream lines trip the personal-info patterns, but it carries no local edits)${NC}"
|
|
437
|
+
else
|
|
438
|
+
echo " $s"
|
|
439
|
+
fi
|
|
440
|
+
done
|
|
441
|
+
echo ""
|
|
442
|
+
|
|
443
|
+
echo -e "${YELLOW}⚠️ Updated upstream + local customizations (needs manual merge): ${NEEDS_MERGE}${NC}"
|
|
444
|
+
for s in "${MERGE_SKILLS[@]:-}"; do
|
|
445
|
+
[[ -n "$s" ]] && echo " $s"
|
|
446
|
+
if [[ -n "$s" ]]; then
|
|
447
|
+
# Show what personal patterns were found
|
|
448
|
+
local_file="$LOCAL_DIR/$s/SKILL.md"
|
|
449
|
+
for pattern in "${PERSONAL_PATTERNS[@]}"; do
|
|
450
|
+
# `|| true`: under `set -euo pipefail` this assignment would otherwise
|
|
451
|
+
# abort the whole script — grep exits 1 on no-match, and even on a match
|
|
452
|
+
# `head -1` closes the pipe early so grep dies with SIGPIPE (141). Either
|
|
453
|
+
# way pipefail propagates the failure and `set -e` kills the run *before*
|
|
454
|
+
# the Summary and the apply block, so `--apply` silently writes nothing
|
|
455
|
+
# whenever a skill is flagged "needs merge".
|
|
456
|
+
match=$(grep -n "$pattern" "$local_file" 2>/dev/null | head -1 || true)
|
|
457
|
+
if [[ -n "$match" ]]; then
|
|
458
|
+
echo -e " ${YELLOW}→ contains: ${match}${NC}"
|
|
459
|
+
break
|
|
460
|
+
fi
|
|
461
|
+
done
|
|
462
|
+
fi
|
|
463
|
+
done
|
|
464
|
+
echo ""
|
|
465
|
+
|
|
466
|
+
echo -e "${NC}📦 Local-only skills (yours, not in upstream): ${LOCAL_ONLY}"
|
|
467
|
+
for s in "${LOCAL_SKILLS[@]:-}"; do [[ -n "$s" ]] && echo " $s"; done
|
|
468
|
+
echo ""
|
|
469
|
+
|
|
470
|
+
# Summary
|
|
471
|
+
TOTAL=$((NEW + IDENTICAL + SAFE_UPDATE + NEEDS_MERGE))
|
|
472
|
+
echo -e "${BLUE}━━━ Summary ━━━${NC}"
|
|
473
|
+
echo -e "Total upstream skills: $TOTAL"
|
|
474
|
+
echo -e " ${GREEN}Up to date: $IDENTICAL${NC}"
|
|
475
|
+
echo -e " ${GREEN}New upstream: $NEW${NC} (requires confirmation on --apply; ${#NEW_PREDECLINED_SKILLS[@]} previously declined)"
|
|
476
|
+
echo -e " ${BLUE}Safe update: $SAFE_UPDATE${NC}"
|
|
477
|
+
echo -e " ${YELLOW}Need merge: $NEEDS_MERGE${NC}"
|
|
478
|
+
echo -e " Local only: $LOCAL_ONLY"
|
|
479
|
+
echo ""
|
|
480
|
+
|
|
481
|
+
if $APPLY; then
|
|
482
|
+
echo -e "${BLUE}Applying safe updates...${NC}"
|
|
483
|
+
|
|
484
|
+
# ── New-skill three-state policy: interactive confirm / --add-new / --skip-new ──
|
|
485
|
+
# A skill already in .aris-declined.txt is never re-asked and never installed —
|
|
486
|
+
# not even by --add-new (only editing/clearing the declined file restores it).
|
|
487
|
+
declare -a TO_INSTALL_NEW=()
|
|
488
|
+
declare -a SKIPPED_NEW=()
|
|
489
|
+
declare -a JUST_DECLINED=()
|
|
490
|
+
|
|
491
|
+
for s in "${NEW_SKILLS[@]:-}"; do
|
|
492
|
+
[[ -n "$s" ]] || continue
|
|
493
|
+
if is_declined "$s"; then
|
|
494
|
+
continue
|
|
495
|
+
fi
|
|
496
|
+
case "$NEW_POLICY" in
|
|
497
|
+
add)
|
|
498
|
+
TO_INSTALL_NEW+=("$s")
|
|
499
|
+
;;
|
|
500
|
+
skip)
|
|
501
|
+
SKIPPED_NEW+=("$s")
|
|
502
|
+
;;
|
|
503
|
+
*)
|
|
504
|
+
if [[ -t 0 ]]; then
|
|
505
|
+
grp="$(catalog_group_of "$s")"
|
|
506
|
+
printf " install new skill %-30s (group: %s) [y/N] " "$s" "$grp" >&2
|
|
507
|
+
read -r reply </dev/tty
|
|
508
|
+
if [[ "$reply" =~ ^[yY] ]]; then
|
|
509
|
+
TO_INSTALL_NEW+=("$s")
|
|
510
|
+
else
|
|
511
|
+
JUST_DECLINED+=("$s")
|
|
512
|
+
fi
|
|
513
|
+
else
|
|
514
|
+
SKIPPED_NEW+=("$s")
|
|
515
|
+
fi
|
|
516
|
+
;;
|
|
517
|
+
esac
|
|
518
|
+
done
|
|
519
|
+
|
|
520
|
+
if [[ ${#JUST_DECLINED[@]} -gt 0 ]]; then
|
|
521
|
+
{
|
|
522
|
+
[[ -f "$DECLINED_FILE" ]] && cat "$DECLINED_FILE"
|
|
523
|
+
printf '%s\n' "${JUST_DECLINED[@]}"
|
|
524
|
+
} | sort -u > "$DECLINED_FILE.tmp.$$" && mv -f "$DECLINED_FILE.tmp.$$" "$DECLINED_FILE"
|
|
525
|
+
fi
|
|
526
|
+
|
|
527
|
+
# Add accepted new skills (no existing dir to clean)
|
|
528
|
+
for s in "${TO_INSTALL_NEW[@]:-}"; do
|
|
529
|
+
if [[ -n "$s" ]]; then
|
|
530
|
+
cp -r "$UPSTREAM_DIR/$s" "$LOCAL_DIR/"
|
|
531
|
+
echo -e " ${GREEN}+ Added: $s${NC}"
|
|
532
|
+
fi
|
|
533
|
+
done
|
|
534
|
+
|
|
535
|
+
# Replace safely updated skills (rm-then-copy to avoid stale-file bug:
|
|
536
|
+
# plain `cp -r` overlays and leaves files that upstream removed)
|
|
537
|
+
for s in "${SAFE_SKILLS[@]:-}"; do
|
|
538
|
+
if [[ -n "$s" ]]; then
|
|
539
|
+
rm -rf "$LOCAL_DIR/$s"
|
|
540
|
+
cp -r "$UPSTREAM_DIR/$s" "$LOCAL_DIR/"
|
|
541
|
+
echo -e " ${BLUE}↑ Updated: $s${NC}"
|
|
542
|
+
fi
|
|
543
|
+
done
|
|
544
|
+
|
|
545
|
+
# Update shared-references (same fix)
|
|
546
|
+
if [[ -d "$UPSTREAM_DIR/shared-references" ]]; then
|
|
547
|
+
rm -rf "$LOCAL_DIR/shared-references"
|
|
548
|
+
cp -r "$UPSTREAM_DIR/shared-references" "$LOCAL_DIR/"
|
|
549
|
+
echo -e " ${BLUE}↑ Updated: shared-references${NC}"
|
|
550
|
+
fi
|
|
551
|
+
|
|
552
|
+
echo ""
|
|
553
|
+
echo -e "${GREEN}Done! ${#TO_INSTALL_NEW[@]} new + $SAFE_UPDATE updated.${NC}"
|
|
554
|
+
|
|
555
|
+
if [[ ${#SKIPPED_NEW[@]} -gt 0 ]]; then
|
|
556
|
+
echo -e "${YELLOW}⚠️ ${#SKIPPED_NEW[@]} new skill(s) skipped, not declined: ${SKIPPED_NEW[*]}${NC}"
|
|
557
|
+
echo -e "${YELLOW} Re-run with --add-new to install them (or re-run interactively on a TTY).${NC}"
|
|
558
|
+
fi
|
|
559
|
+
if [[ ${#JUST_DECLINED[@]} -gt 0 ]]; then
|
|
560
|
+
echo -e " Declined just now (recorded in $DECLINED_FILE, won't be asked again): ${JUST_DECLINED[*]}"
|
|
561
|
+
fi
|
|
562
|
+
if [[ ${#NEW_PREDECLINED_SKILLS[@]} -gt 0 ]]; then
|
|
563
|
+
echo -e " Previously declined, still skipped: ${#NEW_PREDECLINED_SKILLS[@]} (edit $DECLINED_FILE to reconsider)"
|
|
564
|
+
fi
|
|
565
|
+
|
|
566
|
+
if [[ $NEEDS_MERGE -gt 0 ]]; then
|
|
567
|
+
echo -e "${YELLOW}⚠️ $NEEDS_MERGE skills have personal customizations and were NOT updated.${NC}"
|
|
568
|
+
echo -e "${YELLOW} Review manually: ${MERGE_SKILLS[*]}${NC}"
|
|
569
|
+
echo -e "${YELLOW} Tip: diff the local and upstream SKILL.md files to merge changes${NC}"
|
|
570
|
+
fi
|
|
571
|
+
|
|
572
|
+
ensure_global_pointer
|
|
573
|
+
else
|
|
574
|
+
case "$MODE" in
|
|
575
|
+
project)
|
|
576
|
+
if [[ "$TARGET_SUBDIR" == ".claude/skills" ]]; then
|
|
577
|
+
CMD_HINT="bash tools/smart_update.sh --project \"$PROJECT_ROOT\" --apply"
|
|
578
|
+
else
|
|
579
|
+
CMD_HINT="bash tools/smart_update.sh --project \"$PROJECT_ROOT\" --target-subdir \"$TARGET_SUBDIR\" --apply"
|
|
580
|
+
fi
|
|
581
|
+
;;
|
|
582
|
+
explicit)
|
|
583
|
+
CMD_HINT="bash tools/smart_update.sh --upstream \"$UPSTREAM_DIR\" --local \"$LOCAL_DIR\" --apply"
|
|
584
|
+
;;
|
|
585
|
+
*)
|
|
586
|
+
CMD_HINT="bash tools/smart_update.sh --apply"
|
|
587
|
+
;;
|
|
588
|
+
esac
|
|
589
|
+
echo -e "Dry run complete. Run with ${GREEN}--apply${NC} to perform updates:"
|
|
590
|
+
echo -e " ${GREEN}${CMD_HINT}${NC}"
|
|
591
|
+
fi
|