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,521 @@
|
|
|
1
|
+
#Requires -Version 5.1
|
|
2
|
+
# ARIS Smart Skill Update (PowerShell)
|
|
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
|
+
# .\tools\smart_update.ps1 [-Apply]
|
|
9
|
+
# Project-level (Claude Code):
|
|
10
|
+
# .\tools\smart_update.ps1 -ProjectPath <path> [-Apply]
|
|
11
|
+
# Project-level (Codex CLI):
|
|
12
|
+
# .\tools\smart_update.ps1 -ProjectPath <path> -TargetSubdir '.agents/skills/aris' [-Apply]
|
|
13
|
+
# Custom paths:
|
|
14
|
+
# .\tools\smart_update.ps1 -UpstreamPath <path> -LocalPath <path> [-Apply]
|
|
15
|
+
#
|
|
16
|
+
# -Apply: actually perform the updates (default: dry-run analysis only)
|
|
17
|
+
# -ProjectPath: project root — upstream is always the repo's skills/; local targets <ProjectPath>/<TargetSubdir>
|
|
18
|
+
# -TargetSubdir: project-mode skill subdirectory (default: .claude/skills)
|
|
19
|
+
# common: .claude/skills, .claude/skills/aris, .agents/skills, .agents/skills/aris
|
|
20
|
+
# must be a relative path
|
|
21
|
+
# -UpstreamPath: explicit upstream skills directory
|
|
22
|
+
# -LocalPath: explicit local skills directory
|
|
23
|
+
#
|
|
24
|
+
# New-skill policy (-Apply only; dry-run always just reports):
|
|
25
|
+
# default (TTY, no policy switch): each new upstream skill is confirmed one
|
|
26
|
+
# by one [y/N]; a decline is remembered in
|
|
27
|
+
# <local>\.aris-declined.txt and never re-asked
|
|
28
|
+
# -AddNew: install every new skill (does NOT un-decline previously declined
|
|
29
|
+
# skills — edit/clear .aris-declined.txt for that)
|
|
30
|
+
# -SkipNew: skip every new skill without recording a decline (same as the
|
|
31
|
+
# automatic behavior when there is no interactive console)
|
|
32
|
+
#
|
|
33
|
+
# On successful -Apply, writes $env:USERPROFILE\.aris\repo <- this repo's root
|
|
34
|
+
# (helper resolution chain layer 4, #366) so copy-installed skills can find tools\.
|
|
35
|
+
|
|
36
|
+
[CmdletBinding(DefaultParameterSetName = 'Global')]
|
|
37
|
+
param(
|
|
38
|
+
[switch]$Apply,
|
|
39
|
+
[switch]$AddNew,
|
|
40
|
+
[switch]$SkipNew,
|
|
41
|
+
|
|
42
|
+
[Parameter(ParameterSetName = 'Project', Mandatory = $true)]
|
|
43
|
+
[string]$ProjectPath,
|
|
44
|
+
|
|
45
|
+
[Parameter(ParameterSetName = 'Project', Mandatory = $false)]
|
|
46
|
+
[string]$TargetSubdir = '.claude/skills',
|
|
47
|
+
|
|
48
|
+
[Parameter(ParameterSetName = 'Explicit', Mandatory = $true)]
|
|
49
|
+
[string]$UpstreamPath,
|
|
50
|
+
|
|
51
|
+
[Parameter(ParameterSetName = 'Explicit', Mandatory = $true)]
|
|
52
|
+
[string]$LocalPath
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
$ErrorActionPreference = 'Stop'
|
|
56
|
+
|
|
57
|
+
if ($AddNew -and $SkipNew) {
|
|
58
|
+
Write-Host "Error: -AddNew and -SkipNew are mutually exclusive" -ForegroundColor Red
|
|
59
|
+
exit 1
|
|
60
|
+
}
|
|
61
|
+
$NewPolicy = if ($AddNew) { 'add' } elseif ($SkipNew) { 'skip' } else { '' }
|
|
62
|
+
|
|
63
|
+
# This repo's root (independent of -UpstreamPath overrides) — used for the
|
|
64
|
+
# skill-group catalog lookup and the global helper-resolution pointer.
|
|
65
|
+
$RepoRoot = Split-Path $PSScriptRoot -Parent
|
|
66
|
+
|
|
67
|
+
# ─── Resolve upstream & local paths ───────────────────────────────────────────
|
|
68
|
+
if ($PSCmdlet.ParameterSetName -eq 'Project') {
|
|
69
|
+
if ([System.IO.Path]::IsPathRooted($TargetSubdir)) {
|
|
70
|
+
Write-Host "Error: -TargetSubdir must be a relative path (got: $TargetSubdir)" -ForegroundColor Red
|
|
71
|
+
Write-Host "Hint: use -LocalPath for absolute paths" -ForegroundColor Yellow
|
|
72
|
+
exit 1
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
$ProjectRoot = if ([System.IO.Path]::IsPathRooted($ProjectPath)) {
|
|
76
|
+
$ProjectPath
|
|
77
|
+
} else {
|
|
78
|
+
Join-Path (Get-Location) $ProjectPath
|
|
79
|
+
}
|
|
80
|
+
$ProjectRoot = (Resolve-Path $ProjectRoot -ErrorAction SilentlyContinue).Path
|
|
81
|
+
if (-not $ProjectRoot) {
|
|
82
|
+
Write-Host "Project path not found: $ProjectPath" -ForegroundColor Red
|
|
83
|
+
exit 1
|
|
84
|
+
}
|
|
85
|
+
# Upstream always comes from the repo (same as global)
|
|
86
|
+
$UpstreamDir = Join-Path $RepoRoot 'skills'
|
|
87
|
+
if (-not (Test-Path $UpstreamDir)) {
|
|
88
|
+
$resolved = Join-Path $PSScriptRoot '..\skills' | Resolve-Path -ErrorAction SilentlyContinue
|
|
89
|
+
if ($resolved) { $UpstreamDir = $resolved.Path }
|
|
90
|
+
}
|
|
91
|
+
$TargetSubdirNormalized = $TargetSubdir -replace '/', '\'
|
|
92
|
+
$LocalDir = Join-Path $ProjectRoot $TargetSubdirNormalized
|
|
93
|
+
$Scope = "Project: $ProjectRoot (subdir: $TargetSubdir)"
|
|
94
|
+
|
|
95
|
+
# ─── Deprecate nested -TargetSubdir (.claude/skills/aris, .agents/skills/aris) ──
|
|
96
|
+
if ($TargetSubdir -in @('.claude/skills/aris', '.agents/skills/aris')) {
|
|
97
|
+
Write-Host ""
|
|
98
|
+
Write-Host "⚠️ -TargetSubdir $TargetSubdir is DEPRECATED" -ForegroundColor Yellow
|
|
99
|
+
Write-Host ""
|
|
100
|
+
Write-Host " Reason: nested 'aris/' subdirectory hides skills from Claude Code's slash-command discovery" -ForegroundColor Yellow
|
|
101
|
+
Write-Host " (CC only scans .claude/skills/ one level deep)." -ForegroundColor Yellow
|
|
102
|
+
Write-Host ""
|
|
103
|
+
Write-Host " Switch to the flat install (use the bash version via WSL, or manual junctions —" -ForegroundColor Yellow
|
|
104
|
+
Write-Host " see install_aris.ps1 docstring for the manual one-liner)." -ForegroundColor Yellow
|
|
105
|
+
Write-Host ""
|
|
106
|
+
if ($Apply) {
|
|
107
|
+
Write-Host "Refusing to -Apply with deprecated nested target." -ForegroundColor Red
|
|
108
|
+
exit 2
|
|
109
|
+
}
|
|
110
|
+
Write-Host "(continuing dry-run analysis for backward compatibility — no changes will be made)" -ForegroundColor Yellow
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# Platform marker auto-detect: warn on mismatch
|
|
114
|
+
$hasClaudeMarkers = (Test-Path (Join-Path $ProjectRoot 'CLAUDE.md')) -or `
|
|
115
|
+
(Test-Path (Join-Path $ProjectRoot '.claude\skills')) -or `
|
|
116
|
+
(Test-Path (Join-Path $ProjectRoot '.claude\settings.json'))
|
|
117
|
+
$hasCodexMarkers = (Test-Path (Join-Path $ProjectRoot 'AGENTS.md')) -or `
|
|
118
|
+
(Test-Path (Join-Path $ProjectRoot '.agents\skills')) -or `
|
|
119
|
+
(Test-Path (Join-Path $ProjectRoot '.codex\config.toml'))
|
|
120
|
+
if ($hasClaudeMarkers -and (-not $hasCodexMarkers) -and $TargetSubdir.StartsWith('.agents')) {
|
|
121
|
+
Write-Host "⚠️ Warning: project has Claude markers but -TargetSubdir points to Codex path ($TargetSubdir)" -ForegroundColor Yellow
|
|
122
|
+
}
|
|
123
|
+
if ($hasCodexMarkers -and (-not $hasClaudeMarkers) -and $TargetSubdir.StartsWith('.claude')) {
|
|
124
|
+
Write-Host "⚠️ Warning: project has Codex markers but -TargetSubdir points to Claude path ($TargetSubdir)" -ForegroundColor Yellow
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
} elseif ($PSCmdlet.ParameterSetName -eq 'Explicit') {
|
|
128
|
+
$UpstreamDir = $UpstreamPath
|
|
129
|
+
$LocalDir = $LocalPath
|
|
130
|
+
$Scope = "Custom"
|
|
131
|
+
} else {
|
|
132
|
+
# Global default
|
|
133
|
+
$UpstreamDir = Join-Path $RepoRoot 'skills'
|
|
134
|
+
if (-not (Test-Path $UpstreamDir)) {
|
|
135
|
+
$resolved = Join-Path $PSScriptRoot '..\skills' | Resolve-Path -ErrorAction SilentlyContinue
|
|
136
|
+
if ($resolved) { $UpstreamDir = $resolved.Path }
|
|
137
|
+
}
|
|
138
|
+
$LocalDir = Join-Path $env:USERPROFILE '.claude\skills'
|
|
139
|
+
$Scope = 'Global'
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# ─── New-skill confirmation state (declined list + group catalog lookup) ──────
|
|
143
|
+
$CatalogPath = Join-Path $RepoRoot 'tools\skill-groups.tsv'
|
|
144
|
+
$DeclinedFile = Join-Path $LocalDir '.aris-declined.txt'
|
|
145
|
+
|
|
146
|
+
function Test-Declined {
|
|
147
|
+
param([string]$Name)
|
|
148
|
+
if (-not (Test-Path $DeclinedFile)) { return $false }
|
|
149
|
+
return (Get-Content -Path $DeclinedFile) -contains $Name
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function Get-CatalogGroup {
|
|
153
|
+
param([string]$Name)
|
|
154
|
+
if (-not (Test-Path $CatalogPath)) { return '?' }
|
|
155
|
+
foreach ($line in Get-Content -Path $CatalogPath) {
|
|
156
|
+
$f = $line -split "`t"
|
|
157
|
+
if ($f.Length -ge 3 -and $f[0] -eq 'skill' -and $f[1] -eq $Name) { return $f[2] }
|
|
158
|
+
}
|
|
159
|
+
return '?'
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
# Layer-4 helper resolution (#366): a global pointer file lets globally/copy-
|
|
163
|
+
# installed skills find $env:USERPROFILE\.aris\repo without a per-project install.
|
|
164
|
+
function Ensure-GlobalPointer {
|
|
165
|
+
# $env:USERPROFILE is the Windows PowerShell convention; fall back to $HOME
|
|
166
|
+
# so this also works under pwsh on non-Windows hosts (e.g. CI, WSL testing).
|
|
167
|
+
$userProfile = if ($env:USERPROFILE) { $env:USERPROFILE } else { $HOME }
|
|
168
|
+
$pointerDir = Join-Path $userProfile '.aris'
|
|
169
|
+
$pointer = Join-Path $pointerDir 'repo'
|
|
170
|
+
try {
|
|
171
|
+
if (-not (Test-Path $pointerDir)) { New-Item -ItemType Directory -Path $pointerDir -Force | Out-Null }
|
|
172
|
+
} catch { return }
|
|
173
|
+
$cur = $null
|
|
174
|
+
if (Test-Path $pointer) { $cur = (Get-Content -Path $pointer -Raw -ErrorAction SilentlyContinue) }
|
|
175
|
+
if ($cur -and $cur.Trim() -eq $RepoRoot) { return }
|
|
176
|
+
$tmp = "$pointer.tmp.$PID"
|
|
177
|
+
Set-Content -Path $tmp -Value $RepoRoot
|
|
178
|
+
Move-Item -Path $tmp -Destination $pointer -Force
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
# ─── Refuse to operate on symlinked installs ──────────────────────────────────
|
|
182
|
+
if (Test-Path $LocalDir) {
|
|
183
|
+
$item = Get-Item $LocalDir -Force -ErrorAction SilentlyContinue
|
|
184
|
+
if ($item -and ($item.LinkType -in @('Junction', 'SymbolicLink'))) {
|
|
185
|
+
Write-Host ""
|
|
186
|
+
Write-Host "✗ Local skill directory is a symlink/junction: $LocalDir" -ForegroundColor Red
|
|
187
|
+
Write-Host " → $($item.Target)"
|
|
188
|
+
Write-Host ""
|
|
189
|
+
Write-Host "smart_update is for COPIED installs. Symlinked installs are updated by:"
|
|
190
|
+
Write-Host " cd <aris-repo>; git pull"
|
|
191
|
+
Write-Host ""
|
|
192
|
+
Write-Host "If you need per-project customization, switch to a copied install:"
|
|
193
|
+
Write-Host " Remove-Item $LocalDir -Force"
|
|
194
|
+
Write-Host " .\tools\smart_update.ps1 -ProjectPath <project> -TargetSubdir $TargetSubdir -Apply"
|
|
195
|
+
exit 2
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
# install_aris.ps1 creates flat PER-SKILL junctions (the root dir is real), so
|
|
200
|
+
# the root-junction check above can't see a managed flat install. The manifest
|
|
201
|
+
# is the authoritative marker — refuse project-mode updates when one exists.
|
|
202
|
+
if ($ProjectPath) {
|
|
203
|
+
$manifest = Join-Path $ProjectRoot '.aris/installed-skills.txt'
|
|
204
|
+
if (Test-Path $manifest) {
|
|
205
|
+
Write-Host ""
|
|
206
|
+
Write-Host "✗ Managed install detected (manifest: $manifest)" -ForegroundColor Red
|
|
207
|
+
Write-Host ""
|
|
208
|
+
Write-Host "smart_update is for COPIED installs. This project is managed by install_aris.ps1:"
|
|
209
|
+
Write-Host " cd <aris-repo>; git pull # updates content of existing skills"
|
|
210
|
+
Write-Host " .\tools\install_aris.ps1 $ProjectRoot # reconciles new/removed skills"
|
|
211
|
+
exit 2
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
# ─── Personal info patterns ───────────────────────────────────────────────────
|
|
216
|
+
$PersonalPatterns = @(
|
|
217
|
+
'ssh '
|
|
218
|
+
'SJTUServer'
|
|
219
|
+
'rfyang'
|
|
220
|
+
'yangruofeng'
|
|
221
|
+
'api_key'
|
|
222
|
+
'API_KEY'
|
|
223
|
+
'sk-'
|
|
224
|
+
'token'
|
|
225
|
+
'@sjtu'
|
|
226
|
+
'@gmail'
|
|
227
|
+
'/home/'
|
|
228
|
+
'/Users/'
|
|
229
|
+
'CUDA_VISIBLE'
|
|
230
|
+
'wandb_project'
|
|
231
|
+
'server_ip'
|
|
232
|
+
'gpu_server'
|
|
233
|
+
'screen -'
|
|
234
|
+
'conda activate'
|
|
235
|
+
'192\.168\.'
|
|
236
|
+
'10\.\d+\.'
|
|
237
|
+
'122\.'
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
# Patterns that are actual regex (contain backslash-dot or \d)
|
|
241
|
+
function Test-IsRegexPattern {
|
|
242
|
+
param([string]$Pat)
|
|
243
|
+
return ($Pat.Contains('\.') -or $Pat.Contains('\d'))
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# ─── Header ────────────────────────────────────────────────────────────────────
|
|
247
|
+
Write-Host ''
|
|
248
|
+
Write-Host '=== ARIS Smart Skill Update ===' -ForegroundColor Cyan
|
|
249
|
+
Write-Host "Scope: $Scope"
|
|
250
|
+
Write-Host "Upstream: $UpstreamDir"
|
|
251
|
+
Write-Host "Local: $LocalDir"
|
|
252
|
+
Write-Host ''
|
|
253
|
+
|
|
254
|
+
if (-not (Test-Path $LocalDir)) {
|
|
255
|
+
Write-Host "Local skills directory not found: $LocalDir" -ForegroundColor Red
|
|
256
|
+
exit 1
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (-not (Test-Path $UpstreamDir)) {
|
|
260
|
+
Write-Host "Upstream skills directory not found: $UpstreamDir" -ForegroundColor Red
|
|
261
|
+
exit 1
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
# ─── Core comparison function ──────────────────────────────────────────────────
|
|
265
|
+
function Compare-SkillDirs {
|
|
266
|
+
param(
|
|
267
|
+
[string]$SrcDir,
|
|
268
|
+
[string]$DstDir,
|
|
269
|
+
[string[]]$Patterns
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
$result = @{
|
|
273
|
+
New = [System.Collections.Generic.List[string]]::new()
|
|
274
|
+
Identical = [System.Collections.Generic.List[string]]::new()
|
|
275
|
+
Safe = [System.Collections.Generic.List[string]]::new()
|
|
276
|
+
Merge = [System.Collections.Generic.List[string]]::new()
|
|
277
|
+
LocalOnly = [System.Collections.Generic.List[string]]::new()
|
|
278
|
+
UpstreamNames = [System.Collections.Generic.HashSet[string]]::new()
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
# Check each upstream skill
|
|
282
|
+
foreach ($skillDir in Get-ChildItem -Path $SrcDir -Directory) {
|
|
283
|
+
$skillName = $skillDir.Name
|
|
284
|
+
if ($skillName -eq 'skills-codex' -or $skillName -eq 'shared-references') { continue }
|
|
285
|
+
|
|
286
|
+
[void]$result.UpstreamNames.Add($skillName)
|
|
287
|
+
|
|
288
|
+
$upstreamFile = Join-Path $skillDir.FullName 'SKILL.md'
|
|
289
|
+
$localSkillDir = Join-Path $DstDir $skillName
|
|
290
|
+
$localFile = Join-Path $localSkillDir 'SKILL.md'
|
|
291
|
+
|
|
292
|
+
if (-not (Test-Path $upstreamFile)) { continue }
|
|
293
|
+
|
|
294
|
+
if ((-not (Test-Path $localSkillDir)) -or (-not (Test-Path $localFile))) {
|
|
295
|
+
$result.New.Add($skillName)
|
|
296
|
+
continue
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
$upstreamContent = Get-Content -Path $upstreamFile -Raw
|
|
300
|
+
$localContent = Get-Content -Path $localFile -Raw
|
|
301
|
+
|
|
302
|
+
if ($upstreamContent -eq $localContent) {
|
|
303
|
+
$result.Identical.Add($skillName)
|
|
304
|
+
continue
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
# Different - check for personal info unique to local
|
|
308
|
+
$hasPersonal = $false
|
|
309
|
+
foreach ($pat in $Patterns) {
|
|
310
|
+
$isRegex = Test-IsRegexPattern $pat
|
|
311
|
+
if ($isRegex) {
|
|
312
|
+
$lc = ([regex]::Matches($localContent, $pat)).Count
|
|
313
|
+
$uc = ([regex]::Matches($upstreamContent, $pat)).Count
|
|
314
|
+
} else {
|
|
315
|
+
$lc = ([regex]::Matches($localContent, [regex]::Escape($pat))).Count
|
|
316
|
+
$uc = ([regex]::Matches($upstreamContent, [regex]::Escape($pat))).Count
|
|
317
|
+
}
|
|
318
|
+
if ($lc -gt $uc) {
|
|
319
|
+
$hasPersonal = $true
|
|
320
|
+
break
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if ($hasPersonal) {
|
|
325
|
+
$result.Merge.Add($skillName)
|
|
326
|
+
} else {
|
|
327
|
+
$result.Safe.Add($skillName)
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
# Check for local-only skills
|
|
332
|
+
foreach ($skillDir in Get-ChildItem -Path $DstDir -Directory) {
|
|
333
|
+
$skillName = $skillDir.Name
|
|
334
|
+
if ($skillName -eq 'shared-references') { continue }
|
|
335
|
+
if (-not $result.UpstreamNames.Contains($skillName)) {
|
|
336
|
+
$result.LocalOnly.Add($skillName)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
return $result
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function Show-Section {
|
|
344
|
+
param([string]$Label, $Items, [string]$Color)
|
|
345
|
+
Write-Host "${Label}: $($Items.Count)" -ForegroundColor $Color
|
|
346
|
+
foreach ($s in $Items) { Write-Host " $s" }
|
|
347
|
+
Write-Host ''
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function Show-MergeReport {
|
|
351
|
+
param($Items, [string]$Dir, [string[]]$Patterns)
|
|
352
|
+
foreach ($s in $Items) {
|
|
353
|
+
Write-Host " $s"
|
|
354
|
+
$f = Join-Path $Dir "$s\SKILL.md"
|
|
355
|
+
if (Test-Path $f) {
|
|
356
|
+
$content = Get-Content -Path $f -Raw
|
|
357
|
+
foreach ($pat in $Patterns) {
|
|
358
|
+
$isRegex = Test-IsRegexPattern $pat
|
|
359
|
+
if ($isRegex) {
|
|
360
|
+
$escaped = $pat
|
|
361
|
+
} else {
|
|
362
|
+
$escaped = [regex]::Escape($pat)
|
|
363
|
+
}
|
|
364
|
+
$m = [regex]::Match($content, ".*$escaped.*")
|
|
365
|
+
if ($m.Success) {
|
|
366
|
+
Write-Host " -> contains: $($m.Value.Trim())" -ForegroundColor Yellow
|
|
367
|
+
break
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
# New-skill three-state policy: interactive confirm / -AddNew / -SkipNew.
|
|
375
|
+
# A skill already in .aris-declined.txt is never re-asked and never installed —
|
|
376
|
+
# not even by -AddNew (only editing/clearing the declined file restores it).
|
|
377
|
+
function Resolve-NewSkillPolicy {
|
|
378
|
+
param([string[]]$NewList, [string]$Policy)
|
|
379
|
+
$toInstall = [System.Collections.Generic.List[string]]::new()
|
|
380
|
+
$skipped = [System.Collections.Generic.List[string]]::new()
|
|
381
|
+
$justDeclined = [System.Collections.Generic.List[string]]::new()
|
|
382
|
+
$interactive = -not [Console]::IsInputRedirected
|
|
383
|
+
|
|
384
|
+
foreach ($name in $NewList) {
|
|
385
|
+
if (Test-Declined $name) { continue }
|
|
386
|
+
switch ($Policy) {
|
|
387
|
+
'add' { $toInstall.Add($name) }
|
|
388
|
+
'skip' { $skipped.Add($name) }
|
|
389
|
+
default {
|
|
390
|
+
if ($interactive) {
|
|
391
|
+
$grp = Get-CatalogGroup $name
|
|
392
|
+
$reply = Read-Host " install new skill $($name.PadRight(30)) (group: $grp) [y/N]"
|
|
393
|
+
if ($reply -match '^[yY]') { $toInstall.Add($name) } else { $justDeclined.Add($name) }
|
|
394
|
+
} else {
|
|
395
|
+
$skipped.Add($name)
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if ($justDeclined.Count -gt 0) {
|
|
402
|
+
$existing = @()
|
|
403
|
+
if (Test-Path $DeclinedFile) { $existing = @(Get-Content -Path $DeclinedFile) }
|
|
404
|
+
$merged = @($existing + $justDeclined) | Where-Object { $_ } | Sort-Object -Unique
|
|
405
|
+
$tmp = "$DeclinedFile.tmp.$PID"
|
|
406
|
+
Set-Content -Path $tmp -Value $merged
|
|
407
|
+
Move-Item -Path $tmp -Destination $DeclinedFile -Force
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
return @{ ToInstall = $toInstall; Skipped = $skipped; JustDeclined = $justDeclined }
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
function Invoke-SafeUpdate {
|
|
414
|
+
param(
|
|
415
|
+
$NewList,
|
|
416
|
+
$SafeList,
|
|
417
|
+
[string]$SrcDir,
|
|
418
|
+
[string]$DstDir,
|
|
419
|
+
[string]$SharedDir
|
|
420
|
+
)
|
|
421
|
+
foreach ($s in $NewList) {
|
|
422
|
+
$src = Join-Path $SrcDir $s
|
|
423
|
+
$dst = Join-Path $DstDir $s
|
|
424
|
+
if (Test-Path $dst) { Remove-Item $dst -Recurse -Force }
|
|
425
|
+
Copy-Item -Path $src -Destination $dst -Recurse -Force
|
|
426
|
+
Write-Host " + Added: $s" -ForegroundColor Green
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
foreach ($s in $SafeList) {
|
|
430
|
+
$src = Join-Path $SrcDir $s
|
|
431
|
+
$dst = Join-Path $DstDir $s
|
|
432
|
+
if (Test-Path $dst) { Remove-Item $dst -Recurse -Force }
|
|
433
|
+
Copy-Item -Path $src -Destination $dst -Recurse -Force
|
|
434
|
+
Write-Host " ^ Updated: $s" -ForegroundColor Cyan
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
if ($SharedDir -and (Test-Path $SharedDir)) {
|
|
438
|
+
Copy-Item -Path $SharedDir -Destination (Join-Path $DstDir 'shared-references') -Recurse -Force
|
|
439
|
+
Write-Host ' ^ Updated: shared-references' -ForegroundColor Cyan
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
# ─── Run comparison ─────────────────────────────────────────────────────────────
|
|
444
|
+
$r = Compare-SkillDirs -SrcDir $UpstreamDir -DstDir $LocalDir -Patterns $PersonalPatterns
|
|
445
|
+
|
|
446
|
+
# ─── Report ────────────────────────────────────────────────────────────────────
|
|
447
|
+
Show-Section 'Identical (no action needed)' $r.Identical 'Green'
|
|
448
|
+
|
|
449
|
+
# Pre-declined subset of $r.New (informational only — the decision of what to
|
|
450
|
+
# install/skip/prompt is only made inside the -Apply block below).
|
|
451
|
+
$NewPredeclined = @($r.New | Where-Object { Test-Declined $_ })
|
|
452
|
+
Write-Host "New skills upstream (confirmed one-by-one on -Apply, unless -AddNew/-SkipNew): $($r.New.Count)" -ForegroundColor Green
|
|
453
|
+
foreach ($s in $r.New) {
|
|
454
|
+
if (Test-Declined $s) {
|
|
455
|
+
Write-Host " $s (previously declined — stays skipped unless -AddNew)" -ForegroundColor Yellow
|
|
456
|
+
} else {
|
|
457
|
+
Write-Host " $s"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
Write-Host ''
|
|
461
|
+
|
|
462
|
+
Show-Section 'Updated upstream, no personal info (safe to replace)' $r.Safe 'Cyan'
|
|
463
|
+
|
|
464
|
+
Write-Host "Updated upstream + local customizations (needs manual merge): $($r.Merge.Count)" -ForegroundColor Yellow
|
|
465
|
+
Show-MergeReport $r.Merge $LocalDir $PersonalPatterns
|
|
466
|
+
Write-Host ''
|
|
467
|
+
|
|
468
|
+
Write-Host "Local-only skills (yours, not in upstream): $($r.LocalOnly.Count)"
|
|
469
|
+
foreach ($s in $r.LocalOnly) { Write-Host " $s" }
|
|
470
|
+
Write-Host ''
|
|
471
|
+
|
|
472
|
+
# ─── Summary ───────────────────────────────────────────────────────────────────
|
|
473
|
+
$Total = $r.New.Count + $r.Identical.Count + $r.Safe.Count + $r.Merge.Count
|
|
474
|
+
Write-Host '=== Summary ===' -ForegroundColor Cyan
|
|
475
|
+
Write-Host "Total upstream skills: $Total"
|
|
476
|
+
Write-Host " Up to date: $($r.Identical.Count)" -ForegroundColor Green
|
|
477
|
+
Write-Host " New upstream: $($r.New.Count)" -ForegroundColor Green -NoNewline
|
|
478
|
+
Write-Host " (requires confirmation on -Apply; $($NewPredeclined.Count) previously declined)"
|
|
479
|
+
Write-Host " Safe update: $($r.Safe.Count)" -ForegroundColor Cyan
|
|
480
|
+
Write-Host " Need merge: $($r.Merge.Count)" -ForegroundColor Yellow
|
|
481
|
+
Write-Host " Local only: $($r.LocalOnly.Count)"
|
|
482
|
+
Write-Host ''
|
|
483
|
+
|
|
484
|
+
if ($Apply) {
|
|
485
|
+
Write-Host 'Applying safe updates...' -ForegroundColor Cyan
|
|
486
|
+
|
|
487
|
+
$newDecision = Resolve-NewSkillPolicy -NewList $r.New -Policy $NewPolicy
|
|
488
|
+
$sharedUpstream = Join-Path $UpstreamDir 'shared-references'
|
|
489
|
+
Invoke-SafeUpdate -NewList $newDecision.ToInstall -SafeList $r.Safe -SrcDir $UpstreamDir -DstDir $LocalDir -SharedDir $sharedUpstream
|
|
490
|
+
|
|
491
|
+
Write-Host ''
|
|
492
|
+
Write-Host "Done! $($newDecision.ToInstall.Count) new + $($r.Safe.Count) updated." -ForegroundColor Green
|
|
493
|
+
|
|
494
|
+
if ($newDecision.Skipped.Count -gt 0) {
|
|
495
|
+
Write-Host "$($newDecision.Skipped.Count) new skill(s) skipped, not declined: $($newDecision.Skipped -join ', ')" -ForegroundColor Yellow
|
|
496
|
+
Write-Host " Re-run with -AddNew to install them (or re-run interactively)." -ForegroundColor Yellow
|
|
497
|
+
}
|
|
498
|
+
if ($newDecision.JustDeclined.Count -gt 0) {
|
|
499
|
+
Write-Host "Declined just now (recorded in $DeclinedFile, won't be asked again): $($newDecision.JustDeclined -join ', ')"
|
|
500
|
+
}
|
|
501
|
+
if ($NewPredeclined.Count -gt 0) {
|
|
502
|
+
Write-Host "Previously declined, still skipped: $($NewPredeclined.Count) (edit $DeclinedFile to reconsider)"
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
if ($r.Merge.Count -gt 0) {
|
|
506
|
+
Write-Host "$($r.Merge.Count) skills have personal customizations and were NOT updated." -ForegroundColor Yellow
|
|
507
|
+
Write-Host " Review manually: $($r.Merge -join ', ')" -ForegroundColor Yellow
|
|
508
|
+
Write-Host " Tip: diff the local and upstream SKILL.md files to merge changes" -ForegroundColor Yellow
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
Ensure-GlobalPointer
|
|
512
|
+
} else {
|
|
513
|
+
switch ($PSCmdlet.ParameterSetName) {
|
|
514
|
+
'Project' { $cmdHint = ".\tools\smart_update.ps1 -ProjectPath `"$ProjectRoot`" -Apply" }
|
|
515
|
+
'Explicit' { $cmdHint = ".\tools\smart_update.ps1 -UpstreamPath `"$UpstreamDir`" -LocalPath `"$LocalDir`" -Apply" }
|
|
516
|
+
default { $cmdHint = '.\tools\smart_update.ps1 -Apply' }
|
|
517
|
+
}
|
|
518
|
+
Write-Host 'Dry run complete. Run with -Apply to perform updates:' -ForegroundColor Yellow
|
|
519
|
+
Write-Host " $cmdHint" -ForegroundColor Green
|
|
520
|
+
}
|
|
521
|
+
Write-Host ''
|