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.
Files changed (442) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/README_CN.md +87 -0
  4. package/dsh/checkout.patch.yml +38 -0
  5. package/dsh/client.js +634 -0
  6. package/dsh/cordis.patch.yml +44 -0
  7. package/dsh/index.mjs +76 -0
  8. package/dsh/run-status.mjs +182 -0
  9. package/dsh/scope-limits.mjs +50 -0
  10. package/dsh/workbench.mjs +291 -0
  11. package/mcp-servers/claude-review/README.md +93 -0
  12. package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
  13. package/mcp-servers/claude-review/server.py +718 -0
  14. package/mcp-servers/codex-image2/README.md +65 -0
  15. package/mcp-servers/codex-image2/server.py +893 -0
  16. package/mcp-servers/feishu-bridge/requirements.txt +1 -0
  17. package/mcp-servers/feishu-bridge/server.py +240 -0
  18. package/mcp-servers/gemini-review/README.md +171 -0
  19. package/mcp-servers/gemini-review/server.py +1856 -0
  20. package/mcp-servers/llm-chat/requirements.txt +1 -0
  21. package/mcp-servers/llm-chat/server.py +664 -0
  22. package/mcp-servers/manual-review/README.md +133 -0
  23. package/mcp-servers/manual-review/server.py +910 -0
  24. package/mcp-servers/manual-review/ui.html +279 -0
  25. package/mcp-servers/minimax-chat/requirements.txt +1 -0
  26. package/mcp-servers/minimax-chat/server.py +381 -0
  27. package/package.json +51 -0
  28. package/skills/ablation-planner/SKILL.md +123 -0
  29. package/skills/alphaxiv/SKILL.md +196 -0
  30. package/skills/analyze-results/SKILL.md +46 -0
  31. package/skills/arxiv/SKILL.md +248 -0
  32. package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
  33. package/skills/auto-review-loop/SKILL.md +1137 -0
  34. package/skills/auto-review-loop-llm/SKILL.md +259 -0
  35. package/skills/auto-review-loop-minimax/SKILL.md +302 -0
  36. package/skills/citation-audit/SKILL.md +502 -0
  37. package/skills/claims-drafting/SKILL.md +227 -0
  38. package/skills/comm-lit-review/SKILL.md +297 -0
  39. package/skills/deepxiv/SKILL.md +263 -0
  40. package/skills/dse-loop/SKILL.md +296 -0
  41. package/skills/embodiment-description/SKILL.md +129 -0
  42. package/skills/exa-search/SKILL.md +205 -0
  43. package/skills/experiment-audit/SKILL.md +311 -0
  44. package/skills/experiment-bridge/SKILL.md +376 -0
  45. package/skills/experiment-plan/SKILL.md +249 -0
  46. package/skills/experiment-queue/SKILL.md +431 -0
  47. package/skills/experiment-queue/scripts/build_manifest.py +142 -0
  48. package/skills/experiment-queue/scripts/queue_manager.py +433 -0
  49. package/skills/feishu-notify/SKILL.md +156 -0
  50. package/skills/figure-description/SKILL.md +138 -0
  51. package/skills/figure-spec/SKILL.md +262 -0
  52. package/skills/figure-spec/scripts/figure_renderer.py +799 -0
  53. package/skills/formula-derivation/SKILL.md +280 -0
  54. package/skills/gemini-search/SKILL.md +231 -0
  55. package/skills/grant-proposal/SKILL.md +698 -0
  56. package/skills/idea-creator/SKILL.md +542 -0
  57. package/skills/idea-discovery/SKILL.md +521 -0
  58. package/skills/idea-discovery-robot/SKILL.md +363 -0
  59. package/skills/integrity-forensics/SKILL.md +284 -0
  60. package/skills/interview-cheatsheet/SKILL.md +245 -0
  61. package/skills/invention-structuring/SKILL.md +188 -0
  62. package/skills/jurisdiction-format/SKILL.md +192 -0
  63. package/skills/kill-argument/SKILL.md +437 -0
  64. package/skills/mermaid-diagram/SKILL.md +419 -0
  65. package/skills/meta-apply/SKILL.md +141 -0
  66. package/skills/meta-optimize/SKILL.md +437 -0
  67. package/skills/monitor-experiment/SKILL.md +140 -0
  68. package/skills/novelty-check/SKILL.md +101 -0
  69. package/skills/openalex/SKILL.md +237 -0
  70. package/skills/overleaf-sync/SKILL.md +220 -0
  71. package/skills/paper-claim-audit/SKILL.md +348 -0
  72. package/skills/paper-compile/SKILL.md +266 -0
  73. package/skills/paper-figure/SKILL.md +312 -0
  74. package/skills/paper-illustration/SKILL.md +736 -0
  75. package/skills/paper-illustration-image2/SKILL.md +391 -0
  76. package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  77. package/skills/paper-plan/SKILL.md +386 -0
  78. package/skills/paper-poster/SKILL.md +19 -0
  79. package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  80. package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  81. package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  82. package/skills/paper-poster-html/NOTICE.md +57 -0
  83. package/skills/paper-poster-html/SKILL.md +323 -0
  84. package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  85. package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  86. package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  87. package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  88. package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  89. package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  90. package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  91. package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  92. package/skills/paper-poster-html/scripts/asset_check.py +897 -0
  93. package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  94. package/skills/paper-poster-html/scripts/poster_check.py +251 -0
  95. package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  96. package/skills/paper-poster-html/scripts/render_preview.py +217 -0
  97. package/skills/paper-poster-html/scripts/run_gates.py +556 -0
  98. package/skills/paper-poster-html/scripts/style_check.py +1324 -0
  99. package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  100. package/skills/paper-poster-html/templates/README.md +170 -0
  101. package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  102. package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  103. package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  104. package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  105. package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  106. package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  107. package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  108. package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  109. package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  110. package/skills/paper-slides/SKILL.md +635 -0
  111. package/skills/paper-talk/SKILL.md +381 -0
  112. package/skills/paper-write/SKILL.md +604 -0
  113. package/skills/paper-write/templates/IEEEtran.bst +2409 -0
  114. package/skills/paper-write/templates/IEEEtran.cls +6347 -0
  115. package/skills/paper-write/templates/iclr2026.tex +84 -0
  116. package/skills/paper-write/templates/icml2025.tex +87 -0
  117. package/skills/paper-write/templates/ieee_conference.tex +89 -0
  118. package/skills/paper-write/templates/ieee_journal.tex +93 -0
  119. package/skills/paper-write/templates/math_commands.tex +48 -0
  120. package/skills/paper-write/templates/neurips2025.tex +80 -0
  121. package/skills/paper-writing/SKILL.md +916 -0
  122. package/skills/patent-novelty-check/SKILL.md +153 -0
  123. package/skills/patent-pipeline/SKILL.md +344 -0
  124. package/skills/patent-review/SKILL.md +203 -0
  125. package/skills/pixel-art/SKILL.md +137 -0
  126. package/skills/prior-art-search/SKILL.md +146 -0
  127. package/skills/proof-checker/SKILL.md +866 -0
  128. package/skills/proof-orchestrator/NOTICE.md +24 -0
  129. package/skills/proof-orchestrator/SKILL.md +254 -0
  130. package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
  131. package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
  132. package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
  133. package/skills/proof-orchestrator/references/notation-audit.md +135 -0
  134. package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  135. package/skills/proof-orchestrator/references/stress-tests.md +38 -0
  136. package/skills/proof-writer/SKILL.md +223 -0
  137. package/skills/qzcli/SKILL.md +324 -0
  138. package/skills/rebuttal/SKILL.md +376 -0
  139. package/skills/render-html/SKILL.md +316 -0
  140. package/skills/render-html/scripts/render_html.py +1006 -0
  141. package/skills/render-html/scripts/templates/academic.html +703 -0
  142. package/skills/render-html/scripts/templates/dashboard.html +333 -0
  143. package/skills/research-lit/SKILL.md +756 -0
  144. package/skills/research-pipeline/SKILL.md +384 -0
  145. package/skills/research-refine/SKILL.md +770 -0
  146. package/skills/research-refine-pipeline/SKILL.md +186 -0
  147. package/skills/research-review/SKILL.md +198 -0
  148. package/skills/research-wiki/SKILL.md +461 -0
  149. package/skills/resubmit-pipeline/SKILL.md +447 -0
  150. package/skills/result-to-claim/SKILL.md +311 -0
  151. package/skills/run-experiment/SKILL.md +313 -0
  152. package/skills/semantic-scholar/SKILL.md +236 -0
  153. package/skills/serverless-modal/SKILL.md +335 -0
  154. package/skills/shared-references/acceptance-gate.md +324 -0
  155. package/skills/shared-references/assurance-contract.md +248 -0
  156. package/skills/shared-references/capture-antipatterns.md +78 -0
  157. package/skills/shared-references/citation-discipline.md +583 -0
  158. package/skills/shared-references/compute-env-contract.md +163 -0
  159. package/skills/shared-references/effort-contract.md +183 -0
  160. package/skills/shared-references/evidence-precheck.md +65 -0
  161. package/skills/shared-references/experiment-integrity.md +49 -0
  162. package/skills/shared-references/external-cadence.md +326 -0
  163. package/skills/shared-references/fan-out-pattern.md +366 -0
  164. package/skills/shared-references/injection-hygiene.md +127 -0
  165. package/skills/shared-references/integration-contract.md +461 -0
  166. package/skills/shared-references/output-composition.md +93 -0
  167. package/skills/shared-references/output-language.md +45 -0
  168. package/skills/shared-references/output-manifest.md +49 -0
  169. package/skills/shared-references/output-versioning.md +111 -0
  170. package/skills/shared-references/patent-format-cn.md +199 -0
  171. package/skills/shared-references/patent-format-ep.md +173 -0
  172. package/skills/shared-references/patent-format-us.md +161 -0
  173. package/skills/shared-references/patent-writing-principles.md +197 -0
  174. package/skills/shared-references/prior-art-databases.md +141 -0
  175. package/skills/shared-references/resumable-runs.md +109 -0
  176. package/skills/shared-references/review-scope-limits.md +81 -0
  177. package/skills/shared-references/review-tracing.md +391 -0
  178. package/skills/shared-references/reviewer-independence.md +79 -0
  179. package/skills/shared-references/reviewer-routing.md +852 -0
  180. package/skills/shared-references/skill-governance.md +104 -0
  181. package/skills/shared-references/taste-calibration.md +85 -0
  182. package/skills/shared-references/venue-checklists.md +114 -0
  183. package/skills/shared-references/wiki-helper-resolution.md +134 -0
  184. package/skills/shared-references/writing-principles.md +525 -0
  185. package/skills/skills-codex/README.md +102 -0
  186. package/skills/skills-codex/README_CN.md +100 -0
  187. package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
  188. package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
  189. package/skills/skills-codex/analyze-results/SKILL.md +45 -0
  190. package/skills/skills-codex/arxiv/SKILL.md +210 -0
  191. package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
  192. package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
  193. package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
  194. package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
  195. package/skills/skills-codex/citation-audit/SKILL.md +504 -0
  196. package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
  197. package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
  198. package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
  199. package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
  200. package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
  201. package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
  202. package/skills/skills-codex/deepxiv/SKILL.md +142 -0
  203. package/skills/skills-codex/dse-loop/SKILL.md +285 -0
  204. package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
  205. package/skills/skills-codex/exa-search/SKILL.md +192 -0
  206. package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
  207. package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
  208. package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
  209. package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
  210. package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
  211. package/skills/skills-codex/figure-description/SKILL.md +138 -0
  212. package/skills/skills-codex/figure-spec/SKILL.md +252 -0
  213. package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
  214. package/skills/skills-codex/gemini-search/SKILL.md +205 -0
  215. package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
  216. package/skills/skills-codex/idea-creator/SKILL.md +405 -0
  217. package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
  218. package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
  219. package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
  220. package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
  221. package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
  222. package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
  223. package/skills/skills-codex/kill-argument/SKILL.md +403 -0
  224. package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
  225. package/skills/skills-codex/meta-apply/SKILL.md +154 -0
  226. package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
  227. package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
  228. package/skills/skills-codex/novelty-check/SKILL.md +89 -0
  229. package/skills/skills-codex/openalex/SKILL.md +228 -0
  230. package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
  231. package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
  232. package/skills/skills-codex/paper-compile/SKILL.md +253 -0
  233. package/skills/skills-codex/paper-figure/SKILL.md +311 -0
  234. package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
  235. package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
  236. package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  237. package/skills/skills-codex/paper-plan/SKILL.md +278 -0
  238. package/skills/skills-codex/paper-poster/SKILL.md +19 -0
  239. package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
  240. package/skills/skills-codex/paper-slides/SKILL.md +571 -0
  241. package/skills/skills-codex/paper-talk/SKILL.md +381 -0
  242. package/skills/skills-codex/paper-write/SKILL.md +411 -0
  243. package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
  244. package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
  245. package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
  246. package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
  247. package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
  248. package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
  249. package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
  250. package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
  251. package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
  252. package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
  253. package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
  254. package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
  255. package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
  256. package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
  257. package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
  258. package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
  259. package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
  260. package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
  261. package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
  262. package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
  263. package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
  264. package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
  265. package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
  266. package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
  267. package/skills/skills-codex/paper-writing/SKILL.md +731 -0
  268. package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
  269. package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
  270. package/skills/skills-codex/patent-review/SKILL.md +202 -0
  271. package/skills/skills-codex/pixel-art/SKILL.md +139 -0
  272. package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
  273. package/skills/skills-codex/proof-checker/SKILL.md +554 -0
  274. package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
  275. package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
  276. package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
  277. package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
  278. package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
  279. package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  280. package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
  281. package/skills/skills-codex/proof-writer/SKILL.md +222 -0
  282. package/skills/skills-codex/qzcli/SKILL.md +324 -0
  283. package/skills/skills-codex/rebuttal/SKILL.md +305 -0
  284. package/skills/skills-codex/render-html/SKILL.md +305 -0
  285. package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
  286. package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
  287. package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
  288. package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
  289. package/skills/skills-codex/research-lit/SKILL.md +464 -0
  290. package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
  291. package/skills/skills-codex/research-refine/SKILL.md +721 -0
  292. package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
  293. package/skills/skills-codex/research-review/SKILL.md +135 -0
  294. package/skills/skills-codex/research-wiki/SKILL.md +421 -0
  295. package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
  296. package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
  297. package/skills/skills-codex/run-experiment/SKILL.md +236 -0
  298. package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
  299. package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
  300. package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
  301. package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
  302. package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
  303. package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
  304. package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
  305. package/skills/skills-codex/shared-references/effort-contract.md +143 -0
  306. package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
  307. package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
  308. package/skills/skills-codex/shared-references/external-cadence.md +334 -0
  309. package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
  310. package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
  311. package/skills/skills-codex/shared-references/integration-contract.md +372 -0
  312. package/skills/skills-codex/shared-references/output-composition.md +98 -0
  313. package/skills/skills-codex/shared-references/output-language.md +45 -0
  314. package/skills/skills-codex/shared-references/output-manifest.md +40 -0
  315. package/skills/skills-codex/shared-references/output-versioning.md +111 -0
  316. package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
  317. package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
  318. package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
  319. package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
  320. package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
  321. package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
  322. package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
  323. package/skills/skills-codex/shared-references/review-tracing.md +144 -0
  324. package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
  325. package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
  326. package/skills/skills-codex/shared-references/skill-governance.md +119 -0
  327. package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
  328. package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
  329. package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
  330. package/skills/skills-codex/shared-references/writing-principles.md +525 -0
  331. package/skills/skills-codex/slides-polish/SKILL.md +563 -0
  332. package/skills/skills-codex/specification-writing/SKILL.md +211 -0
  333. package/skills/skills-codex/system-profile/SKILL.md +103 -0
  334. package/skills/skills-codex/training-check/SKILL.md +83 -0
  335. package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
  336. package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
  337. package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
  338. package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
  339. package/skills/skills-codex-claude-review/README.md +79 -0
  340. package/skills/skills-codex-claude-review/README_CN.md +78 -0
  341. package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
  342. package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
  343. package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
  344. package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
  345. package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
  346. package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
  347. package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
  348. package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
  349. package/skills/skills-codex-gemini-review/README.md +176 -0
  350. package/skills/skills-codex-gemini-review/README_CN.md +175 -0
  351. package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
  352. package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
  353. package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
  354. package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
  355. package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
  356. package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
  357. package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
  358. package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
  359. package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
  360. package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
  361. package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
  362. package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
  363. package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
  364. package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
  365. package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
  366. package/skills/slides-polish/SKILL.md +565 -0
  367. package/skills/specification-writing/SKILL.md +211 -0
  368. package/skills/system-profile/SKILL.md +103 -0
  369. package/skills/training-check/SKILL.md +132 -0
  370. package/skills/vast-gpu/SKILL.md +394 -0
  371. package/skills/web-debug-search/SKILL.md +334 -0
  372. package/skills/wiki-enrich/SKILL.md +257 -0
  373. package/skills/writing-systems-papers/SKILL.md +184 -0
  374. package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
  375. package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
  376. package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
  377. package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
  378. package/templates/FINDINGS_TEMPLATE.md +52 -0
  379. package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
  380. package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
  381. package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
  382. package/templates/MANIFEST_TEMPLATE.md +7 -0
  383. package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
  384. package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
  385. package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
  386. package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
  387. package/templates/README.md +57 -0
  388. package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
  389. package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
  390. package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
  391. package/templates/claude-hooks/corpus_write_guard.json +16 -0
  392. package/templates/claude-hooks/corpus_write_guard.py +85 -0
  393. package/templates/claude-hooks/meta_logging.json +74 -0
  394. package/templates/gitignore-trace.txt +3 -0
  395. package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
  396. package/tools/arxiv_fetch.py +311 -0
  397. package/tools/capture_filter.py +126 -0
  398. package/tools/check_skills_inventory.py +273 -0
  399. package/tools/convert_skills_to_llm_chat.py +282 -0
  400. package/tools/copilot_native_evidence.py +818 -0
  401. package/tools/deepxiv_fetch.py +213 -0
  402. package/tools/evidence_check.py +212 -0
  403. package/tools/exa_search.py +425 -0
  404. package/tools/experiment_queue/README.md +118 -0
  405. package/tools/experiment_queue/build_manifest.py +44 -0
  406. package/tools/experiment_queue/queue_manager.py +44 -0
  407. package/tools/extract_paper_style.py +560 -0
  408. package/tools/figure_renderer.py +69 -0
  409. package/tools/forensics_gate.py +669 -0
  410. package/tools/generate_codex_claude_review_overrides.py +299 -0
  411. package/tools/idea_discovery_gate.py +256 -0
  412. package/tools/install_aris.ps1 +1372 -0
  413. package/tools/install_aris.sh +1370 -0
  414. package/tools/install_aris_codex.sh +1023 -0
  415. package/tools/install_aris_copilot.sh +1052 -0
  416. package/tools/iteration_log.py +143 -0
  417. package/tools/lint_skills_helpers.sh +84 -0
  418. package/tools/meta_opt/check_ready.sh +80 -0
  419. package/tools/meta_opt/log_event.sh +91 -0
  420. package/tools/meta_opt/trigger_eval.py +280 -0
  421. package/tools/meta_opt/trigger_evals.sample.json +28 -0
  422. package/tools/openalex_fetch.py +326 -0
  423. package/tools/overleaf_audit.sh +104 -0
  424. package/tools/overleaf_setup.sh +150 -0
  425. package/tools/paper_illustration_image2.py +62 -0
  426. package/tools/provenance.py +294 -0
  427. package/tools/research_wiki.py +1720 -0
  428. package/tools/review_gate.py +502 -0
  429. package/tools/run_state.py +399 -0
  430. package/tools/save_trace.sh +477 -0
  431. package/tools/semantic_scholar_fetch.py +438 -0
  432. package/tools/skill-groups.tsv +116 -0
  433. package/tools/skill_picker.py +238 -0
  434. package/tools/smart_update.ps1 +521 -0
  435. package/tools/smart_update.sh +591 -0
  436. package/tools/smart_update_codex.sh +419 -0
  437. package/tools/smart_update_copilot.sh +605 -0
  438. package/tools/threat_scan.py +222 -0
  439. package/tools/verify_paper_audits.sh +487 -0
  440. package/tools/verify_papers.py +613 -0
  441. package/tools/verify_wiki_coverage.sh +176 -0
  442. 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 ''