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,419 @@
1
+ #!/usr/bin/env bash
2
+ # smart_update_codex.sh -- update copied ARIS Codex skills safely.
3
+ #
4
+ # Default upstream:
5
+ # repo/skills/skills-codex
6
+ #
7
+ # Optional overlays:
8
+ # --overlay claude-review
9
+ # --overlay gemini-review
10
+ #
11
+ # Default local targets:
12
+ # global: ~/.codex/skills
13
+ # project: <project>/.agents/skills
14
+ #
15
+ # This tool is for copied installs only. If the target is managed by
16
+ # install_aris_codex.sh (manifest + symlinks), it refuses and points to:
17
+ # git pull + install_aris_codex.sh --reconcile
18
+ #
19
+ # New-skill policy (--apply only; dry-run always just reports):
20
+ # default (TTY, no policy flag): each new upstream skill is confirmed one by
21
+ # one [y/N]; a decline is remembered in
22
+ # <local>/.aris-declined.txt and never re-asked
23
+ # --add-new: install every new skill (does NOT un-decline previously
24
+ # declined skills)
25
+ # --skip-new: skip every new skill without recording a decline (same as the
26
+ # automatic behavior when there is no TTY)
27
+ # shared-references is support content, not a selectable skill: it is always
28
+ # kept in sync and never subject to this confirmation.
29
+ #
30
+ # On successful --apply, writes $HOME/.aris/repo <- this repo's root (helper
31
+ # resolution chain layer 4, #366) so copy-installed skills can find tools/.
32
+
33
+ set -euo pipefail
34
+
35
+ APPLY=false
36
+ MODE="global"
37
+ PROJECT_PATH=""
38
+ CUSTOM_UPSTREAM=""
39
+ CUSTOM_LOCAL=""
40
+ HAS_CUSTOM_UPSTREAM=false
41
+ HAS_CUSTOM_LOCAL=false
42
+ OVERLAYS=()
43
+ NEW_POLICY="" # "" (prompt) | add | skip
44
+
45
+ usage() { sed -n '2,31p' "$0" | sed 's/^# \?//'; }
46
+
47
+ while [[ $# -gt 0 ]]; do
48
+ case "$1" in
49
+ --apply) APPLY=true; shift ;;
50
+ --add-new) NEW_POLICY="add"; shift ;;
51
+ --skip-new) NEW_POLICY="skip"; shift ;;
52
+ --project) MODE="project"; PROJECT_PATH="${2:?--project requires path}"; shift 2 ;;
53
+ --upstream) MODE="explicit"; HAS_CUSTOM_UPSTREAM=true; CUSTOM_UPSTREAM="${2:?--upstream requires path}"; shift 2 ;;
54
+ --local) MODE="explicit"; HAS_CUSTOM_LOCAL=true; CUSTOM_LOCAL="${2:?--local requires path}"; shift 2 ;;
55
+ --overlay) OVERLAYS+=("${2:?--overlay requires claude-review or gemini-review}"); shift 2 ;;
56
+ -h|--help) usage; exit 0 ;;
57
+ --*) echo "Unknown option: $1" >&2; exit 2 ;;
58
+ *) echo "Unexpected positional argument: $1" >&2; exit 2 ;;
59
+ esac
60
+ done
61
+
62
+ log() { echo "$@"; }
63
+ die() { echo "error: $*" >&2; exit 1; }
64
+ warn() { echo "warning: $*" >&2; }
65
+
66
+ REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
67
+ BASE_UPSTREAM="$REPO_ROOT/skills/skills-codex"
68
+ DEFAULT_GLOBAL_LOCAL="$HOME/.codex/skills"
69
+
70
+ # bash 3.2 (stock macOS): "${ARR[@]}" on an EMPTY array trips `set -u`; guard every
71
+ # possibly-empty expansion with a length check (repo-wide idiom).
72
+ if [[ ${#OVERLAYS[@]} -gt 0 ]]; then
73
+ for overlay in "${OVERLAYS[@]}"; do
74
+ case "$overlay" in
75
+ claude-review|gemini-review) ;;
76
+ *) die "--overlay must be claude-review or gemini-review (got: $overlay)" ;;
77
+ esac
78
+ done
79
+ fi
80
+
81
+ case "$MODE" in
82
+ explicit)
83
+ $HAS_CUSTOM_LOCAL || die "--local must be provided when using --upstream"
84
+ if $HAS_CUSTOM_UPSTREAM; then
85
+ [[ ${#OVERLAYS[@]} -eq 0 ]] || die "--overlay is only supported with repo-default upstream"
86
+ UPSTREAM_DIR="$CUSTOM_UPSTREAM"
87
+ else
88
+ UPSTREAM_DIR="$BASE_UPSTREAM"
89
+ fi
90
+ LOCAL_DIR="$CUSTOM_LOCAL"
91
+ SCOPE="local:$CUSTOM_LOCAL"
92
+ PROJECT_ROOT=""
93
+ ;;
94
+ project)
95
+ [[ -n "$PROJECT_PATH" ]] || die "--project requires a path"
96
+ PROJECT_ROOT="$(cd "$PROJECT_PATH" && pwd)"
97
+ UPSTREAM_DIR="$BASE_UPSTREAM"
98
+ LOCAL_DIR="$PROJECT_ROOT/.agents/skills"
99
+ SCOPE="project:$PROJECT_ROOT"
100
+ ;;
101
+ *)
102
+ PROJECT_ROOT=""
103
+ UPSTREAM_DIR="$BASE_UPSTREAM"
104
+ LOCAL_DIR="$DEFAULT_GLOBAL_LOCAL"
105
+ SCOPE="global"
106
+ ;;
107
+ esac
108
+
109
+ [[ -d "$UPSTREAM_DIR" ]] || die "upstream directory not found: $UPSTREAM_DIR"
110
+ [[ -d "$LOCAL_DIR" ]] || die "local directory not found: $LOCAL_DIR"
111
+
112
+ # ─── New-skill confirmation state (declined list + group catalog lookup) ──────
113
+ CATALOG_PATH="$REPO_ROOT/tools/skill-groups.tsv"
114
+ DECLINED_FILE="$LOCAL_DIR/.aris-declined.txt"
115
+
116
+ is_declined() { # $1 = skill name
117
+ [[ -f "$DECLINED_FILE" ]] && grep -qxF "$1" "$DECLINED_FILE"
118
+ }
119
+
120
+ catalog_group_of() { # $1 = skill name -> group id, or "?" if unknown
121
+ local g=""
122
+ [[ -f "$CATALOG_PATH" ]] && g=$(awk -F'\t' -v s="$1" '$1=="skill" && $2==s {print $3; exit}' "$CATALOG_PATH")
123
+ echo "${g:-?}"
124
+ }
125
+
126
+ # Layer-4 helper resolution (#366): a global pointer file lets globally/copy-
127
+ # installed skills find $ARIS_REPO/tools without a per-project install.
128
+ ensure_global_pointer() {
129
+ local pointer="$HOME/.aris/repo"
130
+ mkdir -p "$(dirname "$pointer")" 2>/dev/null || return 0
131
+ local cur=""
132
+ [[ -f "$pointer" ]] && cur="$(cat "$pointer" 2>/dev/null || true)"
133
+ [[ "$cur" == "$REPO_ROOT" ]] && return 0
134
+ printf '%s\n' "$REPO_ROOT" > "$pointer.tmp.$$" && mv -f "$pointer.tmp.$$" "$pointer"
135
+ }
136
+
137
+ MANAGED_MANIFEST=""
138
+ if [[ -n "$PROJECT_ROOT" ]]; then
139
+ MANAGED_MANIFEST="$PROJECT_ROOT/.aris/installed-skills-codex.txt"
140
+ fi
141
+ if [[ -n "$MANAGED_MANIFEST" && -f "$MANAGED_MANIFEST" ]]; then
142
+ die "target project is managed by install_aris_codex.sh. Use: git pull && bash $REPO_ROOT/tools/install_aris_codex.sh \"$PROJECT_ROOT\" --reconcile"
143
+ fi
144
+ if [[ -L "$LOCAL_DIR" ]]; then
145
+ die "local skill directory is a symlink. Use: git pull && bash $REPO_ROOT/tools/install_aris_codex.sh \"${PROJECT_ROOT:-<project>}\" --reconcile"
146
+ fi
147
+ while IFS= read -r link_entry; do
148
+ link_name="$(basename "$link_entry")"
149
+ if [[ "$link_name" == "shared-references" || -d "$UPSTREAM_DIR/$link_name" ]]; then
150
+ die "local skill directory contains symlink-managed ARIS entry '$link_name'. Use: git pull && bash $REPO_ROOT/tools/install_aris_codex.sh \"${PROJECT_ROOT:-<project>}\" --reconcile"
151
+ fi
152
+ if [[ ${#OVERLAYS[@]} -gt 0 ]]; then
153
+ for overlay in "${OVERLAYS[@]}"; do
154
+ if [[ -d "$REPO_ROOT/skills/skills-codex-$overlay/$link_name" ]]; then
155
+ die "local skill directory contains symlink-managed ARIS overlay entry '$link_name'. Use: git pull && bash $REPO_ROOT/tools/install_aris_codex.sh \"${PROJECT_ROOT:-<project>}\" --reconcile"
156
+ fi
157
+ done
158
+ fi
159
+ done < <(find "$LOCAL_DIR" -mindepth 1 -maxdepth 1 -type l)
160
+
161
+ TMP_ROOT=""
162
+ MERGED_UPSTREAM="$UPSTREAM_DIR"
163
+ cleanup() {
164
+ if [[ -n "$TMP_ROOT" ]]; then
165
+ rm -rf "$TMP_ROOT"
166
+ fi
167
+ return 0
168
+ }
169
+ trap cleanup EXIT INT TERM
170
+
171
+ if [[ ${#OVERLAYS[@]} -gt 0 ]]; then
172
+ TMP_ROOT="$(mktemp -d /tmp/aris-codex-update.XXXXXX)"
173
+ MERGED_UPSTREAM="$TMP_ROOT/upstream"
174
+ mkdir -p "$MERGED_UPSTREAM"
175
+ cp -a "$BASE_UPSTREAM/." "$MERGED_UPSTREAM/"
176
+ for overlay in "${OVERLAYS[@]}"; do
177
+ cp -a "$REPO_ROOT/skills/skills-codex-$overlay/." "$MERGED_UPSTREAM/"
178
+ done
179
+ fi
180
+
181
+ UPSTREAM_DIR="$MERGED_UPSTREAM"
182
+
183
+ list_entries() {
184
+ local root="$1"
185
+ local entry name
186
+ for entry in "$root"/*; do
187
+ [[ -e "$entry" ]] || continue
188
+ [[ -d "$entry" ]] || continue
189
+ name="$(basename "$entry")"
190
+ if [[ "$name" == "shared-references" || -f "$entry/SKILL.md" ]]; then
191
+ printf "%s\n" "$name"
192
+ fi
193
+ done | sort
194
+ }
195
+
196
+ NEW=0
197
+ IDENTICAL=0
198
+ SAFE_UPDATE=0
199
+ NEEDS_MERGE=0
200
+ LOCAL_ONLY=0
201
+
202
+ declare -a NEW_SKILLS=()
203
+ declare -a IDENTICAL_SKILLS=()
204
+ declare -a SAFE_SKILLS=()
205
+ declare -a MERGE_SKILLS=()
206
+ declare -a LOCAL_SKILLS=()
207
+ declare -a UPSTREAM_NAMES=()
208
+ declare -a NEW_SHARED_REFERENCES=()
209
+
210
+ while IFS= read -r name; do
211
+ [[ -z "$name" ]] && continue
212
+ UPSTREAM_NAMES+=("$name")
213
+ upstream_entry="$UPSTREAM_DIR/$name"
214
+ local_entry="$LOCAL_DIR/$name"
215
+ if [[ ! -d "$local_entry" ]]; then
216
+ NEW=$((NEW + 1))
217
+ NEW_SKILLS+=("$name")
218
+ continue
219
+ fi
220
+ if diff -qr "$upstream_entry" "$local_entry" >/dev/null 2>&1; then
221
+ IDENTICAL=$((IDENTICAL + 1))
222
+ IDENTICAL_SKILLS+=("$name")
223
+ continue
224
+ fi
225
+ if [[ ${#OVERLAYS[@]} -gt 0 && -d "$BASE_UPSTREAM/$name" ]] && diff -qr "$BASE_UPSTREAM/$name" "$local_entry" >/dev/null 2>&1; then
226
+ SAFE_UPDATE=$((SAFE_UPDATE + 1))
227
+ SAFE_SKILLS+=("$name")
228
+ continue
229
+ fi
230
+ # Unlike managed installs, copied installs have no manifest/baseline telling us
231
+ # whether a diff is upstream-only or includes local edits. Be conservative:
232
+ # any non-identical local entry requires manual merge instead of replacement.
233
+ NEEDS_MERGE=$((NEEDS_MERGE + 1))
234
+ MERGE_SKILLS+=("$name")
235
+ done < <(list_entries "$UPSTREAM_DIR")
236
+
237
+ while IFS= read -r name; do
238
+ [[ -z "$name" ]] && continue
239
+ found=false
240
+ if [[ ${#UPSTREAM_NAMES[@]} -gt 0 ]]; then
241
+ for upstream_name in "${UPSTREAM_NAMES[@]}"; do
242
+ if [[ "$upstream_name" == "$name" ]]; then
243
+ found=true
244
+ break
245
+ fi
246
+ done
247
+ fi
248
+ if ! $found; then
249
+ LOCAL_ONLY=$((LOCAL_ONLY + 1))
250
+ LOCAL_SKILLS+=("$name")
251
+ fi
252
+ done < <(list_entries "$LOCAL_DIR")
253
+
254
+ if [[ -d "$UPSTREAM_DIR/shared-references" ]]; then
255
+ while IFS= read -r ref_file; do
256
+ rel_ref="${ref_file#"$UPSTREAM_DIR/shared-references/"}"
257
+ local_ref="$LOCAL_DIR/shared-references/$rel_ref"
258
+ if [[ ! -e "$local_ref" ]]; then
259
+ NEW_SHARED_REFERENCES+=("$rel_ref")
260
+ fi
261
+ done < <(find "$UPSTREAM_DIR/shared-references" -type f | sort)
262
+ fi
263
+
264
+ log "ARIS Codex Smart Update"
265
+ log " Scope: $SCOPE"
266
+ log " Upstream: $UPSTREAM_DIR"
267
+ log " Local: $LOCAL_DIR"
268
+ if [[ ${#OVERLAYS[@]} -gt 0 ]]; then
269
+ log " Overlays: ${OVERLAYS[*]}"
270
+ fi
271
+ log ""
272
+
273
+ log "Identical: $IDENTICAL"
274
+ for s in "${IDENTICAL_SKILLS[@]:-}"; do [[ -n "$s" ]] && log " $s"; done
275
+ log ""
276
+ # Pre-declined subset of NEW_SKILLS (informational only — the decision of what
277
+ # to install/skip/prompt is only made inside the --apply block below).
278
+ declare -a NEW_PREDECLINED_SKILLS=()
279
+ for s in "${NEW_SKILLS[@]:-}"; do
280
+ [[ -n "$s" && "$s" != "shared-references" ]] || continue
281
+ is_declined "$s" && NEW_PREDECLINED_SKILLS+=("$s")
282
+ done
283
+
284
+ log "New: $NEW (confirmed one-by-one on --apply, unless --add-new/--skip-new; ${#NEW_PREDECLINED_SKILLS[@]} previously declined)"
285
+ for s in "${NEW_SKILLS[@]:-}"; do
286
+ [[ -n "$s" ]] || continue
287
+ if [[ "$s" != "shared-references" ]] && is_declined "$s"; then
288
+ log " $s (previously declined — stays skipped unless --add-new)"
289
+ else
290
+ log " $s"
291
+ fi
292
+ done
293
+ log ""
294
+ log "Safe update: $SAFE_UPDATE"
295
+ for s in "${SAFE_SKILLS[@]:-}"; do [[ -n "$s" ]] && log " $s"; done
296
+ log ""
297
+ log "Needs merge: $NEEDS_MERGE"
298
+ for s in "${MERGE_SKILLS[@]:-}"; do [[ -n "$s" ]] && log " $s"; done
299
+ log ""
300
+ log "Local only: $LOCAL_ONLY"
301
+ for s in "${LOCAL_SKILLS[@]:-}"; do [[ -n "$s" ]] && log " $s"; done
302
+ log ""
303
+ log "New shared references: ${#NEW_SHARED_REFERENCES[@]}"
304
+ for s in "${NEW_SHARED_REFERENCES[@]:-}"; do [[ -n "$s" ]] && log " shared-references/$s"; done
305
+ log ""
306
+
307
+ if ! $APPLY; then
308
+ log "Dry-run only. Re-run with --apply to copy new entries, new shared references, and replace safe-update entries."
309
+ exit 0
310
+ fi
311
+
312
+ # ── New-skill three-state policy: interactive confirm / --add-new / --skip-new ──
313
+ # A skill already in .aris-declined.txt is never re-asked and never installed —
314
+ # not even by --add-new (only editing/clearing the declined file restores it).
315
+ # shared-references is support content, not a selectable skill: always synced.
316
+ declare -a TO_INSTALL_NEW=()
317
+ declare -a SKIPPED_NEW=()
318
+ declare -a JUST_DECLINED=()
319
+
320
+ for name in "${NEW_SKILLS[@]:-}"; do
321
+ [[ -n "$name" ]] || continue
322
+ if [[ "$name" == "shared-references" ]]; then
323
+ TO_INSTALL_NEW+=("$name")
324
+ continue
325
+ fi
326
+ if is_declined "$name"; then
327
+ continue
328
+ fi
329
+ case "$NEW_POLICY" in
330
+ add)
331
+ TO_INSTALL_NEW+=("$name")
332
+ ;;
333
+ skip)
334
+ SKIPPED_NEW+=("$name")
335
+ ;;
336
+ *)
337
+ if [[ -t 0 ]]; then
338
+ grp="$(catalog_group_of "$name")"
339
+ printf " install new skill %-30s (group: %s) [y/N] " "$name" "$grp" >&2
340
+ read -r reply </dev/tty
341
+ if [[ "$reply" =~ ^[yY] ]]; then
342
+ TO_INSTALL_NEW+=("$name")
343
+ else
344
+ JUST_DECLINED+=("$name")
345
+ fi
346
+ else
347
+ SKIPPED_NEW+=("$name")
348
+ fi
349
+ ;;
350
+ esac
351
+ done
352
+
353
+ if [[ ${#JUST_DECLINED[@]} -gt 0 ]]; then
354
+ {
355
+ [[ -f "$DECLINED_FILE" ]] && cat "$DECLINED_FILE"
356
+ printf '%s\n' "${JUST_DECLINED[@]}"
357
+ } | sort -u > "$DECLINED_FILE.tmp.$$" && mv -f "$DECLINED_FILE.tmp.$$" "$DECLINED_FILE"
358
+ fi
359
+
360
+ for name in "${TO_INSTALL_NEW[@]:-}"; do
361
+ [[ -n "$name" ]] || continue
362
+ mkdir -p "$LOCAL_DIR"
363
+ cp -a "$UPSTREAM_DIR/$name" "$LOCAL_DIR/$name"
364
+ log " + added $name"
365
+ done
366
+
367
+ for name in "${SAFE_SKILLS[@]:-}"; do
368
+ [[ -n "$name" ]] || continue
369
+ rm -rf "$LOCAL_DIR/$name"
370
+ cp -a "$UPSTREAM_DIR/$name" "$LOCAL_DIR/$name"
371
+ log " ↻ updated $name"
372
+ done
373
+
374
+ for rel_ref in "${NEW_SHARED_REFERENCES[@]:-}"; do
375
+ [[ -n "$rel_ref" ]] || continue
376
+ mkdir -p "$(dirname "$LOCAL_DIR/shared-references/$rel_ref")"
377
+ cp -a "$UPSTREAM_DIR/shared-references/$rel_ref" "$LOCAL_DIR/shared-references/$rel_ref"
378
+ log " + added shared-references/$rel_ref"
379
+ done
380
+
381
+ validate_shared_references() {
382
+ local root="$1"
383
+ local failures=0
384
+ local name skill_file ref
385
+ for name in "${UPSTREAM_NAMES[@]:-}"; do
386
+ [[ -n "$name" && "$name" != "shared-references" ]] || continue
387
+ skill_file="$root/$name/SKILL.md"
388
+ [[ -f "$skill_file" ]] || continue
389
+ while IFS= read -r ref; do
390
+ [[ -n "$ref" ]] || continue
391
+ if [[ ! -f "$root/shared-references/$ref" ]]; then
392
+ warn "missing shared reference: $(basename "$(dirname "$skill_file")") -> shared-references/$ref"
393
+ failures=$((failures + 1))
394
+ fi
395
+ done < <(grep -Eo '\.\./shared-references/[A-Za-z0-9._-]+\.md' "$skill_file" 2>/dev/null | sed 's|../shared-references/||' | sort -u)
396
+ done
397
+ return "$failures"
398
+ }
399
+
400
+ log ""
401
+ log "Apply complete. ${#TO_INSTALL_NEW[@]} new + $SAFE_UPDATE updated."
402
+ if [[ ${#SKIPPED_NEW[@]} -gt 0 ]]; then
403
+ log " ${#SKIPPED_NEW[@]} new skill(s) skipped, not declined: ${SKIPPED_NEW[*]}"
404
+ log " Re-run with --add-new to install them (or re-run interactively on a TTY)."
405
+ fi
406
+ if [[ ${#JUST_DECLINED[@]} -gt 0 ]]; then
407
+ log " Declined just now (recorded in $DECLINED_FILE, won't be asked again): ${JUST_DECLINED[*]}"
408
+ fi
409
+ if [[ ${#NEW_PREDECLINED_SKILLS[@]} -gt 0 ]]; then
410
+ log " Previously declined, still skipped: ${#NEW_PREDECLINED_SKILLS[@]} (edit $DECLINED_FILE to reconsider)"
411
+ fi
412
+ if (( NEEDS_MERGE > 0 )); then
413
+ warn "$NEEDS_MERGE entries still need manual merge"
414
+ fi
415
+ if ! validate_shared_references "$LOCAL_DIR"; then
416
+ die "copied install has missing shared references after update; merge or copy the reported files before using affected skills"
417
+ fi
418
+
419
+ ensure_global_pointer