@research-copilot/plugin 1.1.17 → 1.1.19

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 (800) hide show
  1. package/README.md +18 -9
  2. package/dist/.claude-plugin/plugin.json +1 -1
  3. package/dist/.codex-plugin/plugin.toml +1 -1
  4. package/dist/.cursor-plugin/plugin.json +1 -1
  5. package/dist/.gemini-plugin/plugin.json +1 -1
  6. package/dist/.opencode-plugin/plugin.json +1 -1
  7. package/dist/.windsurf-plugin/plugin.json +1 -1
  8. package/dist/skills/ablation-planner/SKILL.md +126 -0
  9. package/dist/skills/alphaxiv/SKILL.md +186 -0
  10. package/dist/skills/analyze-results/SKILL.md +45 -0
  11. package/dist/skills/arxiv/SKILL.md +210 -0
  12. package/dist/skills/auto-paper-improvement-loop/SKILL.md +574 -0
  13. package/dist/skills/auto-review-loop/SKILL.md +370 -0
  14. package/dist/skills/auto-review-loop-llm/SKILL.md +247 -0
  15. package/dist/skills/auto-review-loop-minimax/SKILL.md +290 -0
  16. package/dist/skills/benchmark-paper-template/SKILL.md +142 -0
  17. package/dist/skills/benchmark-paper-template/references/benchmark-design.md +180 -0
  18. package/dist/skills/benchmark-paper-template/references/checklist.md +113 -0
  19. package/dist/skills/benchmark-paper-template/references/construction-pipeline.md +127 -0
  20. package/dist/skills/benchmark-paper-template/references/experiments.md +159 -0
  21. package/dist/skills/benchmark-paper-template/references/gap-analysis.md +86 -0
  22. package/dist/skills/benchmark-paper-template/references/instantiation-template.md +194 -0
  23. package/dist/skills/benchmark-paper-template/references/orchestrator-notes.md +96 -0
  24. package/dist/skills/benchmark-paper-template/references/paper-structure.md +209 -0
  25. package/dist/skills/citation-audit/SKILL.md +494 -0
  26. package/dist/skills/claims-drafting/SKILL.md +239 -0
  27. package/dist/skills/comm-lit-review/SKILL.md +299 -0
  28. package/dist/skills/comm-lit-review/references/domain-taxonomy.md +57 -0
  29. package/dist/skills/comm-lit-review/references/output-template.md +37 -0
  30. package/dist/skills/comm-lit-review/references/source-policy.md +99 -0
  31. package/dist/skills/comm-lit-review/references/venue-tiering.md +112 -0
  32. package/dist/skills/composer/SKILL.md +840 -0
  33. package/dist/skills/composer/references/section_guides.md +675 -0
  34. package/dist/skills/composer/references/writing_standards.md +629 -0
  35. package/dist/skills/composer/scripts/chapter_quality_check.py +470 -0
  36. package/dist/skills/composer/scripts/final_evaluation.py +550 -0
  37. package/dist/skills/deepxiv/SKILL.md +142 -0
  38. package/dist/skills/dse-loop/SKILL.md +277 -0
  39. package/dist/skills/embodiment-description/SKILL.md +129 -0
  40. package/dist/skills/exa-search/SKILL.md +192 -0
  41. package/dist/skills/experiment-audit/SKILL.md +262 -0
  42. package/dist/skills/experiment-bridge/SKILL.md +316 -0
  43. package/dist/skills/experiment-plan/SKILL.md +249 -0
  44. package/dist/skills/experiment-queue/SKILL.md +380 -0
  45. package/dist/skills/experiment-queue/scripts/build_manifest.py +142 -0
  46. package/dist/skills/experiment-queue/scripts/queue_manager.py +426 -0
  47. package/dist/skills/feishu-notify/SKILL.md +155 -0
  48. package/dist/skills/figure-description/SKILL.md +138 -0
  49. package/dist/skills/figure-designer/SKILL.md +207 -0
  50. package/dist/skills/figure-designer/references/design-rules.md +99 -0
  51. package/dist/skills/figure-designer/references/experimental-results.md +127 -0
  52. package/dist/skills/figure-designer/references/motivated-example.md +138 -0
  53. package/dist/skills/figure-designer/references/solution-overview.md +145 -0
  54. package/dist/skills/figure-designer/references/tools.md +124 -0
  55. package/dist/skills/figure-spec/SKILL.md +252 -0
  56. package/dist/skills/figure-spec/scripts/figure_renderer.py +799 -0
  57. package/dist/skills/formula-derivation/SKILL.md +280 -0
  58. package/dist/skills/gemini-search/SKILL.md +205 -0
  59. package/dist/skills/grant-proposal/SKILL.md +625 -0
  60. package/dist/skills/humanizer/AGENTS.md +25 -0
  61. package/dist/skills/humanizer/SKILL.md +621 -0
  62. package/dist/skills/idea-creator/SKILL.md +311 -0
  63. package/dist/skills/idea-discovery/SKILL.md +340 -0
  64. package/dist/skills/idea-discovery-robot/SKILL.md +362 -0
  65. package/dist/skills/idea-evaluator/SKILL.md +265 -0
  66. package/dist/skills/idea-evaluator/references/fatal-flaws.md +192 -0
  67. package/dist/skills/idea-evaluator/references/five-dimensions.md +251 -0
  68. package/dist/skills/idea-evaluator/references/lifecycle-capability-matching.md +177 -0
  69. package/dist/skills/idea-evaluator/references/paradigm-elephant.md +112 -0
  70. package/dist/skills/idea-evaluator/references/paradigm-examples.md +107 -0
  71. package/dist/skills/idea-evaluator/references/paradigm-first-principles.md +115 -0
  72. package/dist/skills/idea-evaluator/references/paradigm-hamming.md +137 -0
  73. package/dist/skills/idea-evaluator/references/paradigm-shift-probe.md +160 -0
  74. package/dist/skills/idea-evaluator/references/paradigm-technology-cycle.md +116 -0
  75. package/dist/skills/idea-evaluator/references/worked-examples.md +206 -0
  76. package/dist/skills/interview-cheatsheet/SKILL.md +245 -0
  77. package/dist/skills/intro-drafter/SKILL.md +250 -0
  78. package/dist/skills/intro-drafter/references/contribution-patterns.md +116 -0
  79. package/dist/skills/intro-drafter/references/flowchart.md +204 -0
  80. package/dist/skills/intro-drafter/references/paper-types.md +155 -0
  81. package/dist/skills/intro-drafter/references/running-example.md +133 -0
  82. package/dist/skills/intro-drafter/references/worked-examples.md +161 -0
  83. package/dist/skills/invention-structuring/SKILL.md +188 -0
  84. package/dist/skills/jurisdiction-format/SKILL.md +192 -0
  85. package/dist/skills/kill-argument/SKILL.md +384 -0
  86. package/dist/skills/llm-wiki/.mise.toml +2 -0
  87. package/dist/skills/llm-wiki/.nvmrc +1 -0
  88. package/dist/skills/llm-wiki/AGENTS.md +132 -0
  89. package/dist/skills/llm-wiki/CHANGELOG.md +459 -0
  90. package/dist/skills/llm-wiki/CLAUDE.md +109 -0
  91. package/dist/skills/llm-wiki/HERMES.md +44 -0
  92. package/dist/skills/llm-wiki/SKILL.md +1133 -0
  93. package/dist/skills/llm-wiki/assets/graph-demo.gif +0 -0
  94. package/dist/skills/llm-wiki/assets/graph-preview.png +0 -0
  95. package/dist/skills/llm-wiki/deps/LICENSE-d3.txt +13 -0
  96. package/dist/skills/llm-wiki/deps/LICENSE-marked.txt +44 -0
  97. package/dist/skills/llm-wiki/deps/LICENSE-purify.txt +568 -0
  98. package/{LICENSE → dist/skills/llm-wiki/deps/LICENSE-roughjs.txt} +1 -1
  99. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/SKILL.md +261 -0
  100. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/references/config/first-time-setup.md +106 -0
  101. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/cdp.ts +179 -0
  102. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/constants.ts +13 -0
  103. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/defuddle-converter.ts +58 -0
  104. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/html-to-markdown.ts +135 -0
  105. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/legacy-converter.ts +629 -0
  106. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/main.ts +314 -0
  107. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/markdown-conversion-shared.ts +305 -0
  108. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/media-localizer.ts +317 -0
  109. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/package.json +14 -0
  110. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/paths.ts +29 -0
  111. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/package.json +9 -0
  112. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.test.ts +307 -0
  113. package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.ts +523 -0
  114. package/dist/skills/llm-wiki/deps/d3.min.js +2 -0
  115. package/dist/skills/llm-wiki/deps/marked.min.js +6 -0
  116. package/dist/skills/llm-wiki/deps/purify.min.js +3 -0
  117. package/dist/skills/llm-wiki/deps/rough.min.js +7 -0
  118. package/dist/skills/llm-wiki/deps/youtube-transcript/SKILL.md +47 -0
  119. package/dist/skills/llm-wiki/deps/youtube-transcript/scripts/get_transcript.py +72 -0
  120. package/dist/skills/llm-wiki/docs/design/oriental-atlas/DESIGN.md +183 -0
  121. package/dist/skills/llm-wiki/docs/design/oriental-atlas/design-brief.md +170 -0
  122. package/dist/skills/llm-wiki/docs/design/oriental-atlas/oriental-editorial-atlas.html +1908 -0
  123. package/dist/skills/llm-wiki/docs/design/oriental-atlas/reviews/result-review.md +68 -0
  124. package/dist/skills/llm-wiki/docs/plans/2026-06-15-omp-tool-status-events-phased-plan.md +655 -0
  125. package/dist/skills/llm-wiki/docs/plans/2026-06-15-omp-tool-status-events-progress.json +913 -0
  126. package/dist/skills/llm-wiki/docs/spark/2026-06-15-omp-tool-status-events-design.md +174 -0
  127. package/dist/skills/llm-wiki/install.ps1 +87 -0
  128. package/dist/skills/llm-wiki/install.sh +722 -0
  129. package/dist/skills/llm-wiki/package-lock.json +10309 -0
  130. package/dist/skills/llm-wiki/package.json +24 -0
  131. package/dist/skills/llm-wiki/packages/graph-engine/package.json +33 -0
  132. package/dist/skills/llm-wiki/packages/graph-engine/src/anim/.gitkeep +1 -0
  133. package/dist/skills/llm-wiki/packages/graph-engine/src/anim/index.ts +179 -0
  134. package/dist/skills/llm-wiki/packages/graph-engine/src/diff.ts +121 -0
  135. package/dist/skills/llm-wiki/packages/graph-engine/src/graph-node.ts +37 -0
  136. package/dist/skills/llm-wiki/packages/graph-engine/src/index.ts +140 -0
  137. package/dist/skills/llm-wiki/packages/graph-engine/src/model/atlas.ts +18 -0
  138. package/dist/skills/llm-wiki/packages/graph-engine/src/model/index.ts +6 -0
  139. package/dist/skills/llm-wiki/packages/graph-engine/src/model/labels.ts +11 -0
  140. package/dist/skills/llm-wiki/packages/graph-engine/src/model/learning.ts +8 -0
  141. package/dist/skills/llm-wiki/packages/graph-engine/src/model/legacy-helpers.ts +1373 -0
  142. package/dist/skills/llm-wiki/packages/graph-engine/src/model/queue.ts +7 -0
  143. package/dist/skills/llm-wiki/packages/graph-engine/src/model/storage.ts +4 -0
  144. package/dist/skills/llm-wiki/packages/graph-engine/src/model/visibility.ts +9 -0
  145. package/dist/skills/llm-wiki/packages/graph-engine/src/render/.gitkeep +1 -0
  146. package/dist/skills/llm-wiki/packages/graph-engine/src/render/index.ts +59 -0
  147. package/dist/skills/llm-wiki/packages/graph-engine/src/render/legend.ts +25 -0
  148. package/dist/skills/llm-wiki/packages/graph-engine/src/render/model.ts +593 -0
  149. package/dist/skills/llm-wiki/packages/graph-engine/src/render/preview.ts +65 -0
  150. package/dist/skills/llm-wiki/packages/graph-engine/src/render/search.ts +48 -0
  151. package/dist/skills/llm-wiki/packages/graph-engine/src/render/static-renderer.ts +2783 -0
  152. package/dist/skills/llm-wiki/packages/graph-engine/src/render/toolbar.ts +40 -0
  153. package/dist/skills/llm-wiki/packages/graph-engine/src/render/viewport.ts +272 -0
  154. package/dist/skills/llm-wiki/packages/graph-engine/src/select/.gitkeep +1 -0
  155. package/dist/skills/llm-wiki/packages/graph-engine/src/select/index.ts +189 -0
  156. package/dist/skills/llm-wiki/packages/graph-engine/src/sim/index.ts +298 -0
  157. package/dist/skills/llm-wiki/packages/graph-engine/src/sim/pins.ts +96 -0
  158. package/dist/skills/llm-wiki/packages/graph-engine/src/themes/.gitkeep +1 -0
  159. package/dist/skills/llm-wiki/packages/graph-engine/src/themes/index.ts +8 -0
  160. package/dist/skills/llm-wiki/packages/graph-engine/src/themes/tokens.ts +107 -0
  161. package/dist/skills/llm-wiki/packages/graph-engine/src/types.ts +313 -0
  162. package/dist/skills/llm-wiki/packages/graph-engine/test/anim.test.ts +100 -0
  163. package/dist/skills/llm-wiki/packages/graph-engine/test/diff.test.ts +133 -0
  164. package/dist/skills/llm-wiki/packages/graph-engine/test/helpers.test.ts +275 -0
  165. package/dist/skills/llm-wiki/packages/graph-engine/test/learning.test.ts +259 -0
  166. package/dist/skills/llm-wiki/packages/graph-engine/test/preview.test.ts +56 -0
  167. package/dist/skills/llm-wiki/packages/graph-engine/test/queue.test.ts +114 -0
  168. package/dist/skills/llm-wiki/packages/graph-engine/test/render-model.test.ts +322 -0
  169. package/dist/skills/llm-wiki/packages/graph-engine/test/runtime-state.test.ts +281 -0
  170. package/dist/skills/llm-wiki/packages/graph-engine/test/search-and-legend.test.ts +111 -0
  171. package/dist/skills/llm-wiki/packages/graph-engine/test/select.test.ts +168 -0
  172. package/dist/skills/llm-wiki/packages/graph-engine/test/sim.test.ts +123 -0
  173. package/dist/skills/llm-wiki/packages/graph-engine/test/themes.test.ts +62 -0
  174. package/dist/skills/llm-wiki/packages/graph-engine/test/toolbar.test.ts +64 -0
  175. package/dist/skills/llm-wiki/packages/graph-engine/test/viewport.test.ts +167 -0
  176. package/dist/skills/llm-wiki/packages/graph-engine/tsconfig.json +17 -0
  177. package/dist/skills/llm-wiki/packages/graph-engine/vite.config.ts +15 -0
  178. package/dist/skills/llm-wiki/platforms/claude/CLAUDE.md +37 -0
  179. package/dist/skills/llm-wiki/platforms/claude/companions/llm-wiki-upgrade/SKILL.md +95 -0
  180. package/dist/skills/llm-wiki/platforms/codex/AGENTS.md +23 -0
  181. package/dist/skills/llm-wiki/scripts/adapter-state.sh +424 -0
  182. package/dist/skills/llm-wiki/scripts/build-graph-data.sh +395 -0
  183. package/dist/skills/llm-wiki/scripts/build-graph-html.sh +453 -0
  184. package/dist/skills/llm-wiki/scripts/cache.sh +352 -0
  185. package/dist/skills/llm-wiki/scripts/create-source-page.sh +100 -0
  186. package/dist/skills/llm-wiki/scripts/delete-helper.sh +68 -0
  187. package/dist/skills/llm-wiki/scripts/graph-analysis.js +732 -0
  188. package/dist/skills/llm-wiki/scripts/hook-session-start.sh +46 -0
  189. package/dist/skills/llm-wiki/scripts/init-wiki.sh +95 -0
  190. package/dist/skills/llm-wiki/scripts/lib/source-signal-eligibility.js +158 -0
  191. package/dist/skills/llm-wiki/scripts/lint-fix.sh +114 -0
  192. package/dist/skills/llm-wiki/scripts/lint-runner.sh +217 -0
  193. package/dist/skills/llm-wiki/scripts/runtime-context.sh +77 -0
  194. package/dist/skills/llm-wiki/scripts/shared-config.sh +83 -0
  195. package/dist/skills/llm-wiki/scripts/source-record-contract.tsv +10 -0
  196. package/dist/skills/llm-wiki/scripts/source-registry.sh +349 -0
  197. package/dist/skills/llm-wiki/scripts/source-registry.tsv +10 -0
  198. package/dist/skills/llm-wiki/scripts/source-signal-coverage.js +83 -0
  199. package/dist/skills/llm-wiki/scripts/validate-step1.sh +144 -0
  200. package/dist/skills/llm-wiki/scripts/wiki-compat.sh +267 -0
  201. package/dist/skills/llm-wiki/setup.sh +8 -0
  202. package/dist/skills/llm-wiki/templates/entity-template.md +30 -0
  203. package/dist/skills/llm-wiki/templates/graph-styles/wash/footer.html +27 -0
  204. package/dist/skills/llm-wiki/templates/graph-styles/wash/graph-wash-helpers.js +1326 -0
  205. package/dist/skills/llm-wiki/templates/graph-styles/wash/graph-wash.js +1009 -0
  206. package/dist/skills/llm-wiki/templates/graph-styles/wash/header.html +2002 -0
  207. package/dist/skills/llm-wiki/templates/index-en-template.md +51 -0
  208. package/dist/skills/llm-wiki/templates/index-template.md +51 -0
  209. package/dist/skills/llm-wiki/templates/log-en-template.md +11 -0
  210. package/dist/skills/llm-wiki/templates/log-template.md +11 -0
  211. package/dist/skills/llm-wiki/templates/overview-en-template.md +41 -0
  212. package/dist/skills/llm-wiki/templates/overview-template.md +41 -0
  213. package/dist/skills/llm-wiki/templates/purpose-en-template.md +16 -0
  214. package/dist/skills/llm-wiki/templates/purpose-template.md +16 -0
  215. package/dist/skills/llm-wiki/templates/query-template.md +19 -0
  216. package/dist/skills/llm-wiki/templates/schema-template.md +185 -0
  217. package/dist/skills/llm-wiki/templates/source-template.md +51 -0
  218. package/dist/skills/llm-wiki/templates/synthesis-template.md +25 -0
  219. package/dist/skills/llm-wiki/templates/topic-template.md +35 -0
  220. package/dist/skills/llm-wiki/tests/adapter-state.sh +338 -0
  221. package/dist/skills/llm-wiki/tests/browser/graph-density-preview.mjs +53 -0
  222. package/dist/skills/llm-wiki/tests/browser/graph-html-insights.mjs +41 -0
  223. package/dist/skills/llm-wiki/tests/browser/graph-node-slim.mjs +71 -0
  224. package/dist/skills/llm-wiki/tests/browser/graph-stage-4-5.mjs +717 -0
  225. package/dist/skills/llm-wiki/tests/expected/graph-data-empty.json +60 -0
  226. package/dist/skills/llm-wiki/tests/expected/graph-data-sample.json +396 -0
  227. package/dist/skills/llm-wiki/tests/expected/graph-interactive-basic.html +1736 -0
  228. package/dist/skills/llm-wiki/tests/expected/lint-output.txt +44 -0
  229. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/index.md +1 -0
  230. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Alpha.md +10 -0
  231. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Beta.md +7 -0
  232. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Delta.md +8 -0
  233. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Gamma.md +8 -0
  234. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/queries/20260422-abc.md +10 -0
  235. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/synthesis/Crystal.md +8 -0
  236. package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/topics/Overview.md +9 -0
  237. package/dist/skills/llm-wiki/tests/fixtures/graph-data-empty-wiki/wiki/entities/.gitkeep +0 -0
  238. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/purpose.md +3 -0
  239. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Attention.md +7 -0
  240. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Decoder.md +7 -0
  241. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Encoder.md +7 -0
  242. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/GPT.md +7 -0
  243. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Transformer.md +13 -0
  244. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/sources/paper.md +9 -0
  245. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/topics/arch.md +12 -0
  246. package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/topics/finetune.md +9 -0
  247. package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-basic/wiki/graph-data.json +40 -0
  248. package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-dense/wiki/graph-data.json +3965 -0
  249. package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-multicomm/wiki/graph-data.json +212 -0
  250. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/index.md +14 -0
  251. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/C++.md +6 -0
  252. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Lonely.md +4 -0
  253. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Other.md +8 -0
  254. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Real.md +7 -0
  255. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/sources/2026-01-01-test-source.md +15 -0
  256. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/sources/2026-02-01-inline-img.md +12 -0
  257. package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/topics/AIbasic.md +3 -0
  258. package/dist/skills/llm-wiki/tests/graph-analysis-helper.regression-1.sh +237 -0
  259. package/dist/skills/llm-wiki/tests/graph-browser-stage-4-5.regression-1.sh +157 -0
  260. package/dist/skills/llm-wiki/tests/graph-build-failures.regression-1.sh +91 -0
  261. package/dist/skills/llm-wiki/tests/graph-data-confidence-merge.regression-1.sh +309 -0
  262. package/dist/skills/llm-wiki/tests/graph-data-source-paths.regression-1.sh +49 -0
  263. package/dist/skills/llm-wiki/tests/graph-html-a11y.regression-1.sh +47 -0
  264. package/dist/skills/llm-wiki/tests/graph-html-brand-link.regression-1.sh +47 -0
  265. package/dist/skills/llm-wiki/tests/graph-html-density.regression-1.sh +228 -0
  266. package/dist/skills/llm-wiki/tests/graph-html-drawer-neighbors.regression-1.sh +47 -0
  267. package/dist/skills/llm-wiki/tests/graph-html-insights.regression-1.sh +80 -0
  268. package/dist/skills/llm-wiki/tests/graph-html-long-label.regression-1.sh +92 -0
  269. package/dist/skills/llm-wiki/tests/graph-html-minimap.regression-1.sh +51 -0
  270. package/dist/skills/llm-wiki/tests/graph-html-mobile.regression-1.sh +48 -0
  271. package/dist/skills/llm-wiki/tests/graph-html-oriental-atlas-contract.regression-1.sh +94 -0
  272. package/dist/skills/llm-wiki/tests/graph-html-oriental-design-contract.regression-1.sh +82 -0
  273. package/dist/skills/llm-wiki/tests/graph-html-search.regression-1.sh +52 -0
  274. package/dist/skills/llm-wiki/tests/graph-html-styles.regression-1.sh +66 -0
  275. package/dist/skills/llm-wiki/tests/graph-html-toolbar.regression-1.sh +62 -0
  276. package/dist/skills/llm-wiki/tests/js/graph-wash-bootstrap.test.js +110 -0
  277. package/dist/skills/llm-wiki/tests/js/graph-wash-helpers.test.js +296 -0
  278. package/dist/skills/llm-wiki/tests/js/graph-wash-learning.test.js +260 -0
  279. package/dist/skills/llm-wiki/tests/js/graph-wash-queue.test.js +115 -0
  280. package/dist/skills/llm-wiki/tests/js/graph-wash-runtime-state.test.js +282 -0
  281. package/dist/skills/llm-wiki/tests/js/source-signal-coverage.test.js +48 -0
  282. package/dist/skills/llm-wiki/tests/js/source-signal-eligibility.test.js +202 -0
  283. package/dist/skills/llm-wiki/tests/lib/graph-html-engine-helpers.sh +110 -0
  284. package/dist/skills/llm-wiki/tests/lint-output.regression-1.sh +32 -0
  285. package/dist/skills/llm-wiki/tests/regression.sh +1754 -0
  286. package/dist/skills/llm-wiki/workbench/.claude/skills/.gitkeep +0 -0
  287. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/SKILL.md +590 -0
  288. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/__init__.py +1 -0
  289. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/accept_changes.py +135 -0
  290. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/comment.py +318 -0
  291. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/__init__.py +0 -0
  292. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  293. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  294. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/pack.py +159 -0
  295. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  296. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  297. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  298. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  299. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  300. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  301. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  302. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  303. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  304. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  305. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  306. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  307. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  308. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  309. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  310. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  311. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  312. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  313. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  314. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  315. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  316. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  317. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  318. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  319. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  320. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  321. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  322. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  323. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  324. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  325. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  326. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  327. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  328. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  329. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  330. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  331. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  332. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  333. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  334. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/soffice.py +183 -0
  335. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/unpack.py +132 -0
  336. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validate.py +111 -0
  337. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/__init__.py +15 -0
  338. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/base.py +847 -0
  339. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/docx.py +446 -0
  340. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/pptx.py +275 -0
  341. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/redlining.py +247 -0
  342. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/comments.xml +3 -0
  343. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  344. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  345. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
  346. package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/people.xml +3 -0
  347. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/SKILL.md +314 -0
  348. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/forms.md +294 -0
  349. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/reference.md +612 -0
  350. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  351. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/check_fillable_fields.py +11 -0
  352. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  353. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/create_validation_image.py +37 -0
  354. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/extract_form_field_info.py +122 -0
  355. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/extract_form_structure.py +115 -0
  356. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  357. package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  358. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/SKILL.md +232 -0
  359. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/editing.md +205 -0
  360. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/pptxgenjs.md +420 -0
  361. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/__init__.py +0 -0
  362. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/add_slide.py +195 -0
  363. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/clean.py +286 -0
  364. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  365. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  366. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  367. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/pack.py +159 -0
  368. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  369. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  370. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  371. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  372. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  373. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  374. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  375. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  376. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  377. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  378. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  379. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  380. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  381. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  382. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  383. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  384. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  385. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  386. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  387. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  388. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  389. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  390. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  391. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  392. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  393. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  394. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  395. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  396. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  397. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  398. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  399. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  400. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  401. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  402. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  403. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  404. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  405. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  406. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  407. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/soffice.py +183 -0
  408. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/unpack.py +132 -0
  409. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validate.py +111 -0
  410. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/__init__.py +15 -0
  411. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/base.py +847 -0
  412. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/docx.py +446 -0
  413. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/pptx.py +275 -0
  414. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/redlining.py +247 -0
  415. package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/thumbnail.py +289 -0
  416. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/SKILL.md +292 -0
  417. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  418. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  419. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  420. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/pack.py +159 -0
  421. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  422. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  423. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  424. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  425. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  426. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  427. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  428. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  429. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  430. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  431. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  432. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  433. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  434. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  435. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  436. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  437. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  438. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  439. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  440. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  441. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  442. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  443. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  444. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  445. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  446. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  447. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  448. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  449. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  450. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  451. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  452. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  453. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  454. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  455. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  456. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  457. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  458. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  459. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  460. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/soffice.py +183 -0
  461. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/unpack.py +132 -0
  462. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validate.py +111 -0
  463. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  464. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/base.py +847 -0
  465. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/docx.py +446 -0
  466. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  467. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  468. package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/recalc.py +184 -0
  469. package/dist/skills/llm-wiki/workbench/AGENTS.md +110 -0
  470. package/dist/skills/llm-wiki/workbench/CLAUDE.md +54 -0
  471. package/dist/skills/llm-wiki/workbench/PRODUCT.md +1268 -0
  472. package/dist/skills/llm-wiki/workbench/docs/current-kb-retrieval-design.md +587 -0
  473. package/dist/skills/llm-wiki/workbench/docs/graph-evolution-1-design.md +210 -0
  474. package/dist/skills/llm-wiki/workbench/docs/stage-2-design.md +1139 -0
  475. package/dist/skills/llm-wiki/workbench/docs/stage-3-design.md +1269 -0
  476. package/dist/skills/llm-wiki/workbench/docs/stage-3.5-design.md +1164 -0
  477. package/dist/skills/llm-wiki/workbench/docs/stage-4-design.md +504 -0
  478. package/dist/skills/llm-wiki/workbench/docs/stage-4.5-design.md +195 -0
  479. package/dist/skills/llm-wiki/workbench/docs/superpowers/specs/2026-05-28-resizable-preview-layout-design.md +165 -0
  480. package/dist/skills/llm-wiki/workbench/docs/superpowers/specs/2026-05-28-settings-panel-scroll-fix.md +50 -0
  481. package/dist/skills/llm-wiki/workbench/server/package.json +29 -0
  482. package/dist/skills/llm-wiki/workbench/server/src/agent.ts +457 -0
  483. package/dist/skills/llm-wiki/workbench/server/src/artifacts.ts +248 -0
  484. package/dist/skills/llm-wiki/workbench/server/src/auth.ts +164 -0
  485. package/dist/skills/llm-wiki/workbench/server/src/config.ts +130 -0
  486. package/dist/skills/llm-wiki/workbench/server/src/conversations.test.ts +121 -0
  487. package/dist/skills/llm-wiki/workbench/server/src/conversations.ts +255 -0
  488. package/dist/skills/llm-wiki/workbench/server/src/digest/batch.ts +189 -0
  489. package/dist/skills/llm-wiki/workbench/server/src/digest/concurrency.test.ts +36 -0
  490. package/dist/skills/llm-wiki/workbench/server/src/digest/concurrency.ts +31 -0
  491. package/dist/skills/llm-wiki/workbench/server/src/digest/subagent.ts +91 -0
  492. package/dist/skills/llm-wiki/workbench/server/src/extensions/artifacts.ts +81 -0
  493. package/dist/skills/llm-wiki/workbench/server/src/extensions/knowledge-base.ts +263 -0
  494. package/dist/skills/llm-wiki/workbench/server/src/extensions/new-wiki.ts +42 -0
  495. package/dist/skills/llm-wiki/workbench/server/src/extensions/synthesis.ts +172 -0
  496. package/dist/skills/llm-wiki/workbench/server/src/graph-watcher.test.ts +196 -0
  497. package/dist/skills/llm-wiki/workbench/server/src/graph.test.ts +84 -0
  498. package/dist/skills/llm-wiki/workbench/server/src/graph.ts +379 -0
  499. package/dist/skills/llm-wiki/workbench/server/src/index.ts +1148 -0
  500. package/dist/skills/llm-wiki/workbench/server/src/knowledge-bases.test.ts +30 -0
  501. package/dist/skills/llm-wiki/workbench/server/src/knowledge-bases.ts +321 -0
  502. package/dist/skills/llm-wiki/workbench/server/src/pages.test.ts +16 -0
  503. package/dist/skills/llm-wiki/workbench/server/src/pages.ts +158 -0
  504. package/dist/skills/llm-wiki/workbench/server/src/retrieval.test.ts +151 -0
  505. package/dist/skills/llm-wiki/workbench/server/src/retrieval.ts +427 -0
  506. package/dist/skills/llm-wiki/workbench/server/src/tool-status-events.test.ts +363 -0
  507. package/dist/skills/llm-wiki/workbench/server/src/tool-status-events.ts +616 -0
  508. package/dist/skills/llm-wiki/workbench/server/src/wiki-init.test.ts +19 -0
  509. package/dist/skills/llm-wiki/workbench/server/src/wiki-init.ts +188 -0
  510. package/dist/skills/llm-wiki/workbench/server/tsconfig.json +10 -0
  511. package/dist/skills/llm-wiki/workbench/tsconfig.json +20 -0
  512. package/dist/skills/llm-wiki/workbench/web/components.json +21 -0
  513. package/dist/skills/llm-wiki/workbench/web/eslint.config.js +22 -0
  514. package/dist/skills/llm-wiki/workbench/web/index.html +13 -0
  515. package/dist/skills/llm-wiki/workbench/web/package.json +48 -0
  516. package/dist/skills/llm-wiki/workbench/web/src/App.tsx +749 -0
  517. package/dist/skills/llm-wiki/workbench/web/src/components/AddExternalDialog.tsx +373 -0
  518. package/dist/skills/llm-wiki/workbench/web/src/components/ArtifactView.tsx +15 -0
  519. package/dist/skills/llm-wiki/workbench/web/src/components/BatchDigestPanel.tsx +106 -0
  520. package/dist/skills/llm-wiki/workbench/web/src/components/ChatPanel.tsx +821 -0
  521. package/dist/skills/llm-wiki/workbench/web/src/components/CommandMenu.tsx +65 -0
  522. package/dist/skills/llm-wiki/workbench/web/src/components/ExportButtons.tsx +54 -0
  523. package/dist/skills/llm-wiki/workbench/web/src/components/GraphPanel.tsx +516 -0
  524. package/dist/skills/llm-wiki/workbench/web/src/components/GraphReader.tsx +48 -0
  525. package/dist/skills/llm-wiki/workbench/web/src/components/GraphSelection.tsx +100 -0
  526. package/dist/skills/llm-wiki/workbench/web/src/components/MarkdownView.tsx +56 -0
  527. package/dist/skills/llm-wiki/workbench/web/src/components/NewWikiDialog.tsx +101 -0
  528. package/dist/skills/llm-wiki/workbench/web/src/components/RefMenu.tsx +40 -0
  529. package/dist/skills/llm-wiki/workbench/web/src/components/RightDrawer.tsx +227 -0
  530. package/dist/skills/llm-wiki/workbench/web/src/components/SettingsPanel.tsx +331 -0
  531. package/dist/skills/llm-wiki/workbench/web/src/components/Sidebar.tsx +436 -0
  532. package/dist/skills/llm-wiki/workbench/web/src/components/ToolHistorySummary.tsx +123 -0
  533. package/dist/skills/llm-wiki/workbench/web/src/components/ToolStatusRunway.tsx +90 -0
  534. package/dist/skills/llm-wiki/workbench/web/src/components/renderers/DownloadOnlyRenderer.tsx +88 -0
  535. package/dist/skills/llm-wiki/workbench/web/src/components/renderers/HtmlRenderer.tsx +92 -0
  536. package/dist/skills/llm-wiki/workbench/web/src/components/ui/button.tsx +52 -0
  537. package/dist/skills/llm-wiki/workbench/web/src/components/ui/command.tsx +50 -0
  538. package/dist/skills/llm-wiki/workbench/web/src/components/ui/dialog.tsx +156 -0
  539. package/dist/skills/llm-wiki/workbench/web/src/components/ui/input.tsx +21 -0
  540. package/dist/skills/llm-wiki/workbench/web/src/components/ui/tooltip.tsx +57 -0
  541. package/dist/skills/llm-wiki/workbench/web/src/index.css +1737 -0
  542. package/dist/skills/llm-wiki/workbench/web/src/lib/api.ts +648 -0
  543. package/dist/skills/llm-wiki/workbench/web/src/lib/drawer-state.ts +79 -0
  544. package/dist/skills/llm-wiki/workbench/web/src/lib/graph-reader.ts +25 -0
  545. package/dist/skills/llm-wiki/workbench/web/src/lib/graph-selection-drawer.ts +35 -0
  546. package/dist/skills/llm-wiki/workbench/web/src/lib/graph-selection.ts +96 -0
  547. package/dist/skills/llm-wiki/workbench/web/src/lib/legacy-tool-status.ts +113 -0
  548. package/dist/skills/llm-wiki/workbench/web/src/lib/sse.ts +72 -0
  549. package/dist/skills/llm-wiki/workbench/web/src/lib/tool-status-format.ts +170 -0
  550. package/dist/skills/llm-wiki/workbench/web/src/lib/tool-status-model.ts +392 -0
  551. package/dist/skills/llm-wiki/workbench/web/src/lib/utils.ts +10 -0
  552. package/dist/skills/llm-wiki/workbench/web/src/lib/wiki-links.ts +32 -0
  553. package/dist/skills/llm-wiki/workbench/web/src/main.tsx +10 -0
  554. package/dist/skills/llm-wiki/workbench/web/test/api.test.ts +61 -0
  555. package/dist/skills/llm-wiki/workbench/web/test/chat-panel-tool-status.test.tsx +26 -0
  556. package/dist/skills/llm-wiki/workbench/web/test/graph-drawer-state.test.ts +78 -0
  557. package/dist/skills/llm-wiki/workbench/web/test/graph-reader-request.test.ts +32 -0
  558. package/dist/skills/llm-wiki/workbench/web/test/graph-reader.test.ts +62 -0
  559. package/dist/skills/llm-wiki/workbench/web/test/graph-selection-drawer.test.ts +56 -0
  560. package/dist/skills/llm-wiki/workbench/web/test/graph-selection.test.ts +83 -0
  561. package/dist/skills/llm-wiki/workbench/web/test/tool-history-summary.test.tsx +124 -0
  562. package/dist/skills/llm-wiki/workbench/web/test/tool-status-format.test.ts +107 -0
  563. package/dist/skills/llm-wiki/workbench/web/test/tool-status-model.test.ts +324 -0
  564. package/dist/skills/llm-wiki/workbench/web/test/tool-status-runway.test.ts +134 -0
  565. package/dist/skills/llm-wiki/workbench/web/test/wiki-links.test.ts +23 -0
  566. package/dist/skills/llm-wiki/workbench/web/tsconfig.app.json +30 -0
  567. package/dist/skills/llm-wiki/workbench/web/tsconfig.json +7 -0
  568. package/dist/skills/llm-wiki/workbench/web/tsconfig.node.json +24 -0
  569. package/dist/skills/llm-wiki/workbench/web/vite.config.ts +26 -0
  570. package/dist/skills/mean-reviewer/SECURITY.md +23 -0
  571. package/dist/skills/mean-reviewer/SKILL.md +203 -0
  572. package/dist/skills/mean-reviewer/examples/13446_1000_Layer_Networks_for_.pdf +0 -0
  573. package/dist/skills/mean-reviewer/examples/13446_mean_reviewer.md +116 -0
  574. package/dist/skills/mean-reviewer/examples/13446_mean_reviewer_author_rebuttal_simulated.md +282 -0
  575. package/dist/skills/mean-reviewer/examples/13446_mean_reviewer_reply.md +91 -0
  576. package/dist/skills/mean-reviewer/examples/13446_official_review.json +973 -0
  577. package/dist/skills/mean-reviewer/examples/ChatGPT_AC_Roleplay.jpeg +0 -0
  578. package/dist/skills/medical-imaging-review/SKILL.md +295 -0
  579. package/dist/skills/medical-imaging-review/references/CITATION_INTEGRITY.md +233 -0
  580. package/dist/skills/medical-imaging-review/references/DOMAINS.md +302 -0
  581. package/dist/skills/medical-imaging-review/references/HALLUCINATION_PATTERNS.md +211 -0
  582. package/dist/skills/medical-imaging-review/references/MCP_SETUP.md +216 -0
  583. package/dist/skills/medical-imaging-review/references/PARADIGM.md +221 -0
  584. package/dist/skills/medical-imaging-review/references/QUALITY_CHECKLIST.md +169 -0
  585. package/dist/skills/medical-imaging-review/references/TEMPLATES.md +291 -0
  586. package/dist/skills/medical-imaging-review/references/WORKFLOW.md +289 -0
  587. package/dist/skills/mermaid-diagram/SKILL.md +379 -0
  588. package/dist/skills/meta-apply/SKILL.md +137 -0
  589. package/dist/skills/meta-optimize/SKILL.md +253 -0
  590. package/dist/skills/monitor-experiment/SKILL.md +98 -0
  591. package/dist/skills/novelty-check/SKILL.md +89 -0
  592. package/dist/skills/openalex/SKILL.md +228 -0
  593. package/dist/skills/overleaf-sync/SKILL.md +220 -0
  594. package/dist/skills/paper-claim-audit/SKILL.md +340 -0
  595. package/dist/skills/paper-compile/SKILL.md +253 -0
  596. package/dist/skills/paper-figure/SKILL.md +279 -0
  597. package/dist/skills/paper-illustration/SKILL.md +690 -0
  598. package/dist/skills/paper-illustration-image2/SKILL.md +383 -0
  599. package/dist/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  600. package/dist/skills/paper-plan/SKILL.md +278 -0
  601. package/dist/skills/paper-poster/SKILL.md +19 -0
  602. package/dist/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  603. package/dist/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  604. package/dist/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  605. package/dist/skills/paper-poster-html/NOTICE.md +57 -0
  606. package/dist/skills/paper-poster-html/SKILL.md +357 -0
  607. package/dist/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  608. package/dist/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  609. package/dist/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  610. package/dist/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  611. package/dist/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  612. package/dist/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  613. package/dist/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  614. package/dist/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  615. package/dist/skills/paper-poster-html/scripts/asset_check.py +897 -0
  616. package/dist/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  617. package/dist/skills/paper-poster-html/scripts/poster_check.py +251 -0
  618. package/dist/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  619. package/dist/skills/paper-poster-html/scripts/render_preview.py +217 -0
  620. package/dist/skills/paper-poster-html/scripts/run_gates.py +556 -0
  621. package/dist/skills/paper-poster-html/scripts/style_check.py +1324 -0
  622. package/dist/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  623. package/dist/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  624. package/dist/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  625. package/dist/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  626. package/dist/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  627. package/dist/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  628. package/dist/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  629. package/dist/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  630. package/dist/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  631. package/dist/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  632. package/dist/skills/paper-slide-deck/SKILL.md +464 -0
  633. package/dist/skills/paper-slide-deck/references/analysis-framework.md +392 -0
  634. package/dist/skills/paper-slide-deck/references/base-prompt.md +70 -0
  635. package/dist/skills/paper-slide-deck/references/content-rules.md +95 -0
  636. package/dist/skills/paper-slide-deck/references/figure-container-template.md +177 -0
  637. package/dist/skills/paper-slide-deck/references/modification-guide.md +85 -0
  638. package/dist/skills/paper-slide-deck/references/outline-template.md +437 -0
  639. package/dist/skills/paper-slide-deck/references/styles/academic-paper.md +109 -0
  640. package/dist/skills/paper-slide-deck/references/styles/blueprint.md +67 -0
  641. package/dist/skills/paper-slide-deck/references/styles/bold-editorial.md +70 -0
  642. package/dist/skills/paper-slide-deck/references/styles/chalkboard.md +68 -0
  643. package/dist/skills/paper-slide-deck/references/styles/corporate.md +69 -0
  644. package/dist/skills/paper-slide-deck/references/styles/dark-atmospheric.md +69 -0
  645. package/dist/skills/paper-slide-deck/references/styles/editorial-infographic.md +73 -0
  646. package/dist/skills/paper-slide-deck/references/styles/fantasy-animation.md +69 -0
  647. package/dist/skills/paper-slide-deck/references/styles/intuition-machine.md +72 -0
  648. package/dist/skills/paper-slide-deck/references/styles/minimal.md +64 -0
  649. package/dist/skills/paper-slide-deck/references/styles/notion.md +69 -0
  650. package/dist/skills/paper-slide-deck/references/styles/pixel-art.md +67 -0
  651. package/dist/skills/paper-slide-deck/references/styles/scientific.md +73 -0
  652. package/dist/skills/paper-slide-deck/references/styles/sketch-notes.md +66 -0
  653. package/dist/skills/paper-slide-deck/references/styles/vector-illustration.md +72 -0
  654. package/dist/skills/paper-slide-deck/references/styles/vintage.md +73 -0
  655. package/dist/skills/paper-slide-deck/references/styles/watercolor.md +68 -0
  656. package/dist/skills/paper-slide-deck/scripts/apply-template.ts +282 -0
  657. package/dist/skills/paper-slide-deck/scripts/detect-figures.ts +283 -0
  658. package/dist/skills/paper-slide-deck/scripts/extract-figure.ts +140 -0
  659. package/dist/skills/paper-slide-deck/scripts/generate-slides.py +182 -0
  660. package/dist/skills/paper-slide-deck/scripts/merge-to-pdf.ts +116 -0
  661. package/dist/skills/paper-slide-deck/scripts/merge-to-pptx.ts +137 -0
  662. package/dist/skills/paper-slide-deck/scripts/package-lock.json +899 -0
  663. package/dist/skills/paper-slide-deck/scripts/package.json +8 -0
  664. package/dist/skills/paper-slides/SKILL.md +571 -0
  665. package/dist/skills/paper-talk/SKILL.md +381 -0
  666. package/dist/skills/paper-write/SKILL.md +411 -0
  667. package/dist/skills/paper-write/templates/IEEEtran.bst +2409 -0
  668. package/dist/skills/paper-write/templates/IEEEtran.cls +6347 -0
  669. package/dist/skills/paper-write/templates/aaai2026.bst +1493 -0
  670. package/dist/skills/paper-write/templates/aaai2026.sty +315 -0
  671. package/dist/skills/paper-write/templates/aaai2026.tex +952 -0
  672. package/dist/skills/paper-write/templates/acl.sty +312 -0
  673. package/dist/skills/paper-write/templates/acl2026.tex +377 -0
  674. package/dist/skills/paper-write/templates/acl_natbib.bst +1940 -0
  675. package/dist/skills/paper-write/templates/acm.bst +3081 -0
  676. package/dist/skills/paper-write/templates/acm_mm2026.tex +204 -0
  677. package/dist/skills/paper-write/templates/acmart.cls +3520 -0
  678. package/dist/skills/paper-write/templates/cvpr.bst +1448 -0
  679. package/dist/skills/paper-write/templates/cvpr.sty +508 -0
  680. package/dist/skills/paper-write/templates/cvpr2026.tex +63 -0
  681. package/dist/skills/paper-write/templates/iclr2026.tex +84 -0
  682. package/dist/skills/paper-write/templates/iclr2026_conference.bst +1440 -0
  683. package/dist/skills/paper-write/templates/iclr2026_conference.sty +246 -0
  684. package/dist/skills/paper-write/templates/icml2025.tex +87 -0
  685. package/dist/skills/paper-write/templates/icml2026.sty +767 -0
  686. package/dist/skills/paper-write/templates/icml2026.tex +662 -0
  687. package/dist/skills/paper-write/templates/ieee_conference.tex +89 -0
  688. package/dist/skills/paper-write/templates/ieee_journal.tex +93 -0
  689. package/dist/skills/paper-write/templates/math_commands.tex +48 -0
  690. package/dist/skills/paper-write/templates/neurips2025.tex +80 -0
  691. package/dist/skills/paper-write/templates/neurips2026.tex +493 -0
  692. package/dist/skills/paper-write/templates/neurips_2026.sty +437 -0
  693. package/dist/skills/paper-writing/SKILL.md +632 -0
  694. package/dist/skills/patent-novelty-check/SKILL.md +153 -0
  695. package/dist/skills/patent-pipeline/SKILL.md +344 -0
  696. package/dist/skills/patent-review/SKILL.md +202 -0
  697. package/dist/skills/pixel-art/SKILL.md +139 -0
  698. package/dist/skills/pre-submission-reviewer/SKILL.md +247 -0
  699. package/dist/skills/pre-submission-reviewer/references/forbidden-patterns.md +163 -0
  700. package/dist/skills/pre-submission-reviewer/references/grammar-rules.md +135 -0
  701. package/dist/skills/pre-submission-reviewer/references/latex-rules.md +158 -0
  702. package/dist/skills/pre-submission-reviewer/references/logic-and-structure.md +125 -0
  703. package/dist/skills/pre-submission-reviewer/references/section-guides.md +169 -0
  704. package/dist/skills/prior-art-search/SKILL.md +146 -0
  705. package/dist/skills/proof-checker/SKILL.md +499 -0
  706. package/dist/skills/proof-writer/SKILL.md +222 -0
  707. package/dist/skills/qzcli/SKILL.md +316 -0
  708. package/dist/skills/rebuttal/SKILL.md +304 -0
  709. package/dist/skills/render-html/SKILL.md +299 -0
  710. package/dist/skills/render-html/scripts/render_html.py +905 -0
  711. package/dist/skills/render-html/scripts/templates/academic.html +342 -0
  712. package/dist/skills/render-html/scripts/templates/dashboard.html +333 -0
  713. package/dist/skills/research-lit/SKILL.md +353 -0
  714. package/dist/skills/research-paper-writing/SKILL.md +99 -0
  715. package/dist/skills/research-paper-writing/agents/openai.yaml +4 -0
  716. package/dist/skills/research-paper-writing/references/abstract.md +102 -0
  717. package/dist/skills/research-paper-writing/references/conclusion.md +35 -0
  718. package/dist/skills/research-paper-writing/references/does-my-writing-flow-source.md +45 -0
  719. package/dist/skills/research-paper-writing/references/examples/abstract/template-a.md +21 -0
  720. package/dist/skills/research-paper-writing/references/examples/abstract/template-b.md +34 -0
  721. package/dist/skills/research-paper-writing/references/examples/abstract/template-c.md +28 -0
  722. package/dist/skills/research-paper-writing/references/examples/abstract-examples.md +13 -0
  723. package/dist/skills/research-paper-writing/references/examples/index.md +21 -0
  724. package/dist/skills/research-paper-writing/references/examples/introduction/novel-task-challenge-decomposition.md +18 -0
  725. package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-not-recommended-abstract-only.md +30 -0
  726. package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-1-one-contribution-multi-advantages.md +30 -0
  727. package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-2-two-contributions.md +34 -0
  728. package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-3-new-module-on-existing-pipeline.md +18 -0
  729. package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-4-observation-driven.md +16 -0
  730. package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-1-existing-task.md +32 -0
  731. package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-2-existing-task-insight-backed-by-traditional.md +33 -0
  732. package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-3-novel-task.md +21 -0
  733. package/dist/skills/research-paper-writing/references/examples/introduction/version-1-task-then-application.md +14 -0
  734. package/dist/skills/research-paper-writing/references/examples/introduction/version-2-application-first.md +10 -0
  735. package/dist/skills/research-paper-writing/references/examples/introduction/version-3-general-to-specific-setting.md +14 -0
  736. package/dist/skills/research-paper-writing/references/examples/introduction/version-4-open-with-challenge.md +20 -0
  737. package/dist/skills/research-paper-writing/references/examples/introduction-examples.md +25 -0
  738. package/dist/skills/research-paper-writing/references/examples/method/example-of-the-three-elements.md +67 -0
  739. package/dist/skills/research-paper-writing/references/examples/method/method-writing-common-issues-note.md +10 -0
  740. package/dist/skills/research-paper-writing/references/examples/method/module-design-instant-ngp.md +55 -0
  741. package/dist/skills/research-paper-writing/references/examples/method/module-motivation-patterns.md +15 -0
  742. package/dist/skills/research-paper-writing/references/examples/method/module-triad-neural-body.md +19 -0
  743. package/dist/skills/research-paper-writing/references/examples/method/neural-body-annotated-figure-text.md +66 -0
  744. package/dist/skills/research-paper-writing/references/examples/method/overview-template.md +30 -0
  745. package/dist/skills/research-paper-writing/references/examples/method/pre-writing-questions.md +17 -0
  746. package/dist/skills/research-paper-writing/references/examples/method/section-skeleton.md +9 -0
  747. package/dist/skills/research-paper-writing/references/examples/method-examples.md +24 -0
  748. package/dist/skills/research-paper-writing/references/experiments.md +102 -0
  749. package/dist/skills/research-paper-writing/references/introduction.md +408 -0
  750. package/dist/skills/research-paper-writing/references/method.md +196 -0
  751. package/dist/skills/research-paper-writing/references/paper-review.md +86 -0
  752. package/dist/skills/research-paper-writing/references/related-work.md +41 -0
  753. package/dist/skills/research-pipeline/SKILL.md +257 -0
  754. package/dist/skills/research-proposal/SKILL.md +573 -0
  755. package/dist/skills/research-proposal/assets/proposal_scaffold_en.md +323 -0
  756. package/dist/skills/research-proposal/assets/proposal_scaffold_zh.md +346 -0
  757. package/dist/skills/research-proposal/references/DOMAIN_TEMPLATES.md +518 -0
  758. package/dist/skills/research-proposal/references/LITERATURE_WORKFLOW.md +529 -0
  759. package/dist/skills/research-proposal/references/QUALITY_CHECKLIST.md +325 -0
  760. package/dist/skills/research-proposal/references/STRUCTURE_GUIDE.md +398 -0
  761. package/dist/skills/research-proposal/references/WRITING_STYLE_GUIDE.md +661 -0
  762. package/dist/skills/research-refine/SKILL.md +716 -0
  763. package/dist/skills/research-refine-pipeline/SKILL.md +186 -0
  764. package/dist/skills/research-review/SKILL.md +119 -0
  765. package/dist/skills/research-wiki/SKILL.md +373 -0
  766. package/dist/skills/resubmit-pipeline/SKILL.md +427 -0
  767. package/dist/skills/result-to-claim/SKILL.md +190 -0
  768. package/dist/skills/run-experiment/SKILL.md +227 -0
  769. package/dist/skills/scientific-figure-making/SKILL.md +38 -0
  770. package/dist/skills/scientific-figure-making/references/api.md +152 -0
  771. package/dist/skills/scientific-figure-making/references/common-patterns.md +74 -0
  772. package/dist/skills/scientific-figure-making/references/demos.md +30 -0
  773. package/dist/skills/scientific-figure-making/references/design-theory.md +138 -0
  774. package/dist/skills/scientific-figure-making/references/tutorials.md +135 -0
  775. package/dist/skills/semantic-scholar/SKILL.md +219 -0
  776. package/dist/skills/serverless-modal/SKILL.md +324 -0
  777. package/dist/skills/slides-polish/SKILL.md +563 -0
  778. package/dist/skills/specification-writing/SKILL.md +211 -0
  779. package/dist/skills/strategist/SKILL.md +670 -0
  780. package/dist/skills/strategist/references/quality_standards.md +336 -0
  781. package/dist/skills/strategist/references/search_strategy.md +459 -0
  782. package/dist/skills/strategist/scripts/evaluate_samples.py +300 -0
  783. package/dist/skills/strategist/scripts/gap_analysis.py +399 -0
  784. package/dist/skills/system-profile/SKILL.md +103 -0
  785. package/dist/skills/tech-paper-template/SKILL.md +192 -0
  786. package/dist/skills/tech-paper-template/references/consistency-checks.md +166 -0
  787. package/dist/skills/tech-paper-template/references/paper-types.md +127 -0
  788. package/dist/skills/tech-paper-template/references/thinking-template.md +194 -0
  789. package/dist/skills/tech-paper-template/references/worked-examples.md +124 -0
  790. package/dist/skills/training-check/SKILL.md +83 -0
  791. package/dist/skills/vast-gpu/SKILL.md +380 -0
  792. package/dist/skills/vibe-research-workflow/SKILL.md +189 -0
  793. package/dist/skills/vibe-research-workflow/references/behavior-guidelines.md +149 -0
  794. package/dist/skills/vibe-research-workflow/references/tool-selection.md +144 -0
  795. package/dist/skills/vibe-research-workflow/references/vibe-coding.md +154 -0
  796. package/dist/skills/vibe-research-workflow/references/vibe-figure.md +131 -0
  797. package/dist/skills/vibe-research-workflow/references/vibe-writing.md +181 -0
  798. package/dist/skills/wiki-enrich/SKILL.md +254 -0
  799. package/dist/skills/writing-systems-papers/SKILL.md +184 -0
  800. package/package.json +1 -1
@@ -0,0 +1,1139 @@
1
+ # 阶段二设计文档:核心循环(@、/、结晶、消化)
2
+
3
+ > 状态:**✅ 已完成 2026-05-27**(已归档,仅作历史参考)· 创建于 2026-05-27
4
+ >
5
+ > **最终交付**:PR [#1 feat: complete stage 2 core loop](https://github.com/sdyckjq-lab/llm-wiki-agent/pull/1)(14 commit)
6
+ >
7
+ > **验收结果**:3 条总验收全过;6 个 issue 全部闭合;超出原设计 3 处增强(详见 PRODUCT.md §10 阶段二)
8
+ >
9
+ > 与 PRODUCT.md 的关系:PRODUCT.md §4 阶段二 + §10 是**顶层意图**,本文档是**落地细则**。冲突时以 PRODUCT.md 为准。
10
+ >
11
+ > ⚠️ 本文档已归档,**不再修改**。阶段三另开 `docs/stage-3-design.md`。
12
+
13
+ ---
14
+
15
+ ## §0 文档用法
16
+
17
+ - **范围**:阶段二 8 个 step 的实施细则、API 契约、新增依赖、验收命令、执行 plan、总验收剧本
18
+ - **给谁看**:
19
+ - codex(实施):按 §9 执行 plan 一次性做完 8 step,每 step 一个 commit,最后提 1 个 PR
20
+ - claude(总验收):按 §10 端到端验收,发现问题按 §10.8 列 issue 清单交作者决策
21
+ - 作者(决策):审 issue 清单决定让 codex 修还是让 claude 修
22
+ - **不在范围**:阶段三 / 四 / 五,open-design Skill 批量挂载(推迟到阶段三)
23
+ - **工作流**(重要 — 与本文档既有"逐 step 验收"措辞冲突时以此为准):
24
+ 1. 作者按 §9.6 完成前置准备 → 把本文档交给 codex
25
+ 2. codex 按 §9 一次性做完 8 step,提 1 个 PR(8 commit)
26
+ 3. claude 按 §10 端到端验收 + 安全审计 + §10.7 对账
27
+ 4. claude 列 issue 清单(§10.8 格式),作者决策让 codex 还是 claude 修
28
+ 5. 全过后作者按 §11 回写 PRODUCT.md
29
+
30
+ ---
31
+
32
+ ## §1 阶段二总览
33
+
34
+ **目标**:完成"对话 → 沉淀"闭环。用户能在 chat 里:
35
+ - `@` 引用当前库的页面 → agent 知道该读哪一页
36
+ - `/` 触发命令 → 内置或 Skill 命令一致入口
37
+ - `/sediment` 一键把对话结晶成 wiki 页面
38
+ - `/new-wiki` 一键建新知识库
39
+ - 粘 URL 触发素材消化
40
+ - 在设置面板填 API key(落到 pi-agent 的 auth.json)
41
+
42
+ **8 step 概览**:
43
+
44
+ | # | Step | 后端 | 前端 | 重难度 |
45
+ |---|---|:---:|:---:|---|
46
+ | 1 | `/sediment` Extension 工具 | ✅ | — | 🟢 |
47
+ | 2 | `/new-wiki` Extension 工具 | ✅ | — | 🟢 |
48
+ | 3 | `/` 命令列表 API | ✅ | — | 🟡 含 TBD-1 |
49
+ | 4 | `/` 命令补全 UI | — | ✅ | 🟢 |
50
+ | 5 | `@` 引用候选 API | ✅ | — | 🟢 |
51
+ | 6 | `@` 补全 UI + 右抽屉 + markdown 渲染 | ✅ 单接口 | ✅ | 🔴 阶段二最重 |
52
+ | 7 | 消化新素材 | — | ✅ | 🟢 |
53
+ | 8 | 设置面板最小可用 | ✅ | ✅ | 🟡 含 TBD-2 |
54
+
55
+ **总验收 3 条(来自 PRODUCT.md §4 阶段二)**:
56
+
57
+ 1. 在 app 内点 "+ 新建知识库",输入名字和方向 → 自动创建 → 出现在列表里
58
+ 2. 丢一篇文章链接 → agent 消化进库 → 在对话里基于这篇讨论 → 一键结晶为新页面 → 在 `wiki/synthesis/sessions/` 目录里能看到新文件
59
+ 3. 在 UI 里填一个 Anthropic API key → 测试连接成功 → key 出现在 `~/.pi/agent/auth.json`,未泄露到 `~/.llm-wiki-agent/`
60
+
61
+ ---
62
+
63
+ ## §2 关键技术决策
64
+
65
+ | ID | 决策 | 选定 | 拒绝项 & 拒绝原因 |
66
+ |---|---|---|---|
67
+ | D1 | open-design Skill 纳入时机 | **推迟到阶段三**(连同 docx/pdf/pptx 一起批量挂载) | 阶段二范围已满;open-design 132 个 Skill 主体是产出向,恰是阶段三主题 |
68
+ | D2 | `/sediment` + `/new-wiki` 形态 | **Extension 工具** | 写成 Skill:可控性差、错误难定位 |
69
+ | D3 | 设置面板深度 | **最小可用**:仅 API key 三层认证 + 测试连接 | 完整面板:阶段二验收只要 key 路径,其他可后续补丁 |
70
+ | D4 | step 颗粒度 | **8 step** | 5-6 大 step:验收边界模糊;12+ 细 step:流程冗长 |
71
+ | D5 | llm-wiki-skill 接入方式 | **作者手动装到 `~/.claude/skills/llm-wiki-skill/`** | submodule:新手不友好;脚本复制:双份维护 |
72
+ | D6 | Markdown 渲染器 | **react-markdown + remark-gfm** | marked / markdown-it:生态/类型/插件不如前者稳 |
73
+ | D7 | `/` 菜单组件 | **cmdk**(即 shadcn `<Command>` 底层) | Radix Popover / 自写:键盘导航/a11y 要重写 |
74
+ | D8 | `@` 候选数据源 | **扫 `wiki/{entities,topics,sources,comparisons,synthesis}/` 全部 .md** | 只读 `index.md`:依赖维护;二者合并:阶段二过早优化 |
75
+ | **D9** | **能力归属原则**(对应 PRODUCT.md ADR-16) | **Skill 已有 → 调 Skill;agent 工作台新能力 → Extension** | 100% Skill:让 Skill 塞 agent 特有命令,污染纯提示词系统;100% Extension:重复造轮子,浪费 1.7k 星已有实现 |
76
+
77
+ **D9 判断标准**:这个功能在 llm-wiki-skill 单独使用时**是否已经存在**?
78
+
79
+ | 类别 | 归属 | 阶段二例子 |
80
+ |---|---|---|
81
+ | 建库 / 消化各平台 / 知识库查询 / 健康检查 | **Skill** | Step 2 spawn `init-wiki.sh`;Step 7 包装提示明确调 Skill |
82
+ | 对话结晶 / 列页面 / 读单页 / 命令路由 / @ 候选 / auth | **Extension** | Step 1 / 5 / 6 / 3 / 8 |
83
+
84
+ **为什么 D9 重要**:今天的"agent 调 Skill"边界 = 未来 agent 并入 llm-wiki 仓库后的过渡线(ADR-16)。今天 spawn 外部脚本,合并后变成同仓库调用,调用关系不变;今天 Extension 实现的工作台元能力,合并后直接成为 llm-wiki 的 `agent/` 子目录。
85
+
86
+ ---
87
+
88
+ ## §3 新增依赖
89
+
90
+ ### 前端(`web/package.json`)
91
+ - `react-markdown` ^9 — markdown 渲染(Step 6)
92
+ - `remark-gfm` ^4 — GFM 支持:表格、任务列表、自动链接(Step 6)
93
+ - `cmdk` ^1 — 命令/补全菜单(Step 4 & Step 6 共用)
94
+
95
+ ### 后端
96
+ **零新依赖**。现有的 `@earendil-works/pi-coding-agent`、`@earendil-works/pi-agent-core`、`@sinclair/typebox`、`hono`、Node 内置 `fs/child_process/crypto` 已足够。
97
+
98
+ ### 与 PRODUCT.md §3.2 的关系
99
+ 这 3 个依赖**未在 §3.2 表格列出**。阶段二验收通过后,作者需要:
100
+ - §3.2 技术栈表加 2 行(markdown 渲染、命令菜单)
101
+ - 新增 **ADR-17:阶段二新增前端依赖(react-markdown + cmdk)**
102
+
103
+ 本文档作为 ADR-17 的草案依据,不抢先改 PRODUCT.md。(ADR-16 已用于「长期与 llm-wiki 仓库合并」决策,见 PRODUCT.md。)
104
+
105
+ ---
106
+
107
+ ## §4 八个 Step 详细设计
108
+
109
+ 每个 step 包含:**动机 / 范围(做+不做)/ 改动文件 / 接口设计 / 实现要点 / 验收 fingerprint / 依赖关系**。
110
+
111
+ ---
112
+
113
+ ### Step 1:`/sediment` Extension 工具
114
+
115
+ **动机**:阶段二验收第 2 条"结晶"环节。Extension 形态比 Skill 可控、可测、错误可定位(D2)。
116
+
117
+ **范围**:
118
+ - ✅ 把当前 session 的完整对话历史写为单个 markdown 文件到 `<kbPath>/wiki/synthesis/sessions/<timestamp>-<slug>.md`
119
+ - ❌ 选中文本结晶(v1 只做整段;选区结晶涉及前后端状态同步,推迟)
120
+ - ❌ 让 agent 二次总结(先把对话原文落下来,总结由用户在调用前自己决定要不要让 agent 先 sum 一遍)
121
+
122
+ **改动文件**:
123
+ - 新增 `server/src/extensions/synthesis.ts`
124
+ - 修改 `server/src/agent.ts` — 在 `extensionFactories` 数组里注册新 Extension
125
+
126
+ **接口设计**:
127
+ ```ts
128
+ // server/src/extensions/synthesis.ts
129
+ import { Extension } from "@earendil-works/pi-coding-agent";
130
+ import { Type } from "@sinclair/typebox";
131
+
132
+ export function createSynthesisExtension(getActiveKbPath: () => string | null) {
133
+ return new Extension({
134
+ name: "synthesis",
135
+ tools: [{
136
+ name: "sediment_to_wiki",
137
+ description: "把当前对话结晶为 wiki/synthesis/sessions/ 下的一个 markdown 文件。可选 topic 影响文件名。",
138
+ parameters: Type.Object({
139
+ topic: Type.Optional(Type.String()),
140
+ note: Type.Optional(Type.String({ description: "结晶时想补充的备注,写在文件 frontmatter 后" }))
141
+ }),
142
+ handler: async (params, ctx) => {
143
+ const kbPath = getActiveKbPath();
144
+ if (!kbPath) return { content: "❌ 当前没有活跃知识库", details: {} };
145
+ // 1. 用 ctx.session.messages() 读对话历史(参考 server/src/conversations.ts:piMessagesToUIMessages)
146
+ // 2. 拼装 markdown:frontmatter + 备注 + 对话正文
147
+ // 3. 文件名:computeFilename(topic, firstUserMessage)
148
+ // 4. 写到 path(确保 sessions/ 目录已存在)
149
+ // 5. 返回 { content: "已结晶为 wiki/synthesis/sessions/xxx.md", details: { path: relPath } }
150
+ }
151
+ }]
152
+ });
153
+ }
154
+ ```
155
+
156
+ **实现要点**:
157
+
158
+ - **文件名规则**:`<YYYY-MM-DD-HHmm>-<slug>.md`
159
+ - slug = `topic` 或 firstUserMessage 截前 20 字
160
+ - trim、空格/标点 → `-`、保留中文/字母/数字/`-`、折叠重复 `-`、去首尾 `-`
161
+ - 例:`2026-05-27-1030-奥派经济学是什么.md`
162
+ - **frontmatter**:
163
+ ```yaml
164
+ ---
165
+ date: 2026-05-27T10:30:00+08:00
166
+ source: chat
167
+ conversation_id: <pi session id>
168
+ topic: <topic or empty>
169
+ ---
170
+ ```
171
+ - **对话正文**:
172
+ ```md
173
+ ## 👤 用户
174
+ <user content>
175
+
176
+ ## 🤖 助手
177
+ <assistant content>
178
+ ```
179
+ - 工具调用:append 到对应 assistant 消息后 `<details><summary>工具调用</summary>...</details>`,默认折叠
180
+ - 路径安全:写之前确保解析后的 path 仍在 `kbPath/wiki/synthesis/sessions/` 之内
181
+
182
+ **验收 fingerprint**:
183
+ ```bash
184
+ # 准备:选一个测试 kb 并对话几轮
185
+ ls ~/llm-wiki/test-kb/wiki/synthesis/sessions/ # 记录现有数量 N
186
+
187
+ # 在对话里说:"调用 sediment_to_wiki,topic 设为 测试"
188
+ ls ~/llm-wiki/test-kb/wiki/synthesis/sessions/ # 应为 N+1
189
+ cat ~/llm-wiki/test-kb/wiki/synthesis/sessions/<新文件> | head -30
190
+ # 应看到 frontmatter + ## 👤 用户 + ## 🤖 助手 结构
191
+ ```
192
+
193
+ **依赖关系**:可独立完成。被 Step 3 引用(builtin 命令清单)。
194
+
195
+ ---
196
+
197
+ ### Step 2:`/new-wiki` Extension 工具
198
+
199
+ **动机**:阶段二验收第 1 条"app 内一键建库"。
200
+
201
+ **范围**:
202
+ - ✅ spawn `~/.claude/skills/llm-wiki-skill/init-wiki.sh`,传库名 + 研究方向
203
+ - ✅ 等待退出,把 stdout/stderr 返回给 agent
204
+ - ❌ 自动切换到新库(保持单一职责,agent 用 list_knowledge_bases + select 工具自己切)
205
+ - ❌ 自动 reload 前端列表(前端有"刷新"按钮,用户自己点)
206
+
207
+ **改动文件**:
208
+ - 新增 `server/src/extensions/new-wiki.ts`
209
+ - 修改 `server/src/agent.ts` — 注册 Extension
210
+
211
+ **接口设计**:
212
+ ```ts
213
+ // server/src/extensions/new-wiki.ts
214
+ new Extension({
215
+ name: "wiki-init",
216
+ tools: [{
217
+ name: "new_wiki",
218
+ description: "在 ~/llm-wiki/ 下新建一个知识库(调用 llm-wiki-skill 的 init-wiki.sh)。需要 llm-wiki-skill 已安装到 ~/.claude/skills/llm-wiki-skill/。",
219
+ parameters: Type.Object({
220
+ name: Type.String({ description: "知识库名(用作目录名,建议英文 kebab-case)" }),
221
+ purpose: Type.String({ description: "研究方向,写入 purpose.md" })
222
+ }),
223
+ handler: async (params) => {
224
+ // 1. 检测 ~/.claude/skills/llm-wiki-skill/init-wiki.sh 是否存在 + 可执行
225
+ // 缺失 → 返回 { content: "❌ llm-wiki-skill 未安装。请 git clone <repo> ~/.claude/skills/llm-wiki-skill/", details: {} }
226
+ // 2. execFile(不要 shell=true),timeout 60s
227
+ // 3. 退出码 0:返回新库绝对路径
228
+ // 4. 退出码非 0:返回 stderr 摘要
229
+ }
230
+ }]
231
+ });
232
+ ```
233
+
234
+ **实现要点**:
235
+ - 用 `child_process.execFile`(**禁用 shell=true** 避免参数注入)
236
+ - 超时 60s(init-wiki.sh 实际 5-10s,留余量)
237
+ - 参数传递:`execFile(scriptPath, [name, purpose], { timeout: 60_000 })`——具体参数 schema 待确认 llm-wiki-skill 的 init-wiki.sh 签名(TBD-3)
238
+ - env:保留 PATH + HOME,其他清空(防止 leak 敏感环境变量到子进程)
239
+ - stdout/stderr 收集后 truncate 到 4KB 返回(避免污染 agent context)
240
+
241
+ **验收 fingerprint**:
242
+ ```bash
243
+ ls ~/llm-wiki/ # 记录现有库
244
+ # 在对话里说:"用 new_wiki 建一个叫 test-stage2 的库,方向是测试阶段二"
245
+ ls ~/llm-wiki/ # 应多 test-stage2/
246
+ ls ~/llm-wiki/test-stage2/ # 应包含 wiki/ raw/ purpose.md .wiki-schema.md
247
+ # 前端点侧栏刷新 → 应看到 test-stage2 出现
248
+ ```
249
+
250
+ **依赖关系**:依赖**用户已装 llm-wiki-skill**(D5),由作者在 step 验收前确保。
251
+
252
+ ---
253
+
254
+ ### Step 3:`/` 命令列表 API
255
+
256
+ **动机**:Step 4 前端补全菜单需要数据源。
257
+
258
+ **范围**:
259
+ - ✅ `GET /api/commands` → 合并返回:内置命令(Step 1/2 注册的)+ 已加载 Skill 命令
260
+ - ✅ 每个命令:`{ slug, name, description, source: "builtin" | "skill:<name>" }`
261
+
262
+ **改动文件**:
263
+ - 修改 `server/src/index.ts` — 新增路由
264
+ - 修改 `server/src/agent.ts` — 暴露 `listLoadedSkills()`(看 TBD-1 决定如何实现)
265
+
266
+ **接口设计**:
267
+ ```
268
+ GET /api/commands
269
+
270
+ Response 200:
271
+ {
272
+ "ok": true,
273
+ "items": [
274
+ { "slug": "/sediment", "name": "sediment_to_wiki", "description": "...", "source": "builtin" },
275
+ { "slug": "/new-wiki", "name": "new_wiki", "description": "...", "source": "builtin" },
276
+ { "slug": "/llm-wiki", "name": "llm-wiki", "description": "...", "source": "skill:llm-wiki" }
277
+ ]
278
+ }
279
+ ```
280
+
281
+ **实现要点**:
282
+ - **内置命令**:硬编码 2 条 builtin,slug 用 kebab-case(`/sediment`、`/new-wiki`)
283
+ - **Skill 命令枚举(TBD-1)**:
284
+ - 方案 A(首选):调 pi-coding-agent SDK 暴露的接口(**先调研,详见 §8 TBD-1**)
285
+ - 方案 B(降级):fs 扫以下目录,解析 SKILL.md 顶部 YAML frontmatter 拿 `name` + `description`:
286
+ 1. `<activeKbPath>/.claude/skills/`(项目级,与 Claude Code 习惯一致)
287
+ 2. `~/.claude/skills/`
288
+ 3. `~/.pi/agent/skills/`
289
+ - 重名时优先级 1 > 2 > 3,slug 一律 `/<name>`
290
+
291
+ **验收 fingerprint**:
292
+ ```bash
293
+ curl http://localhost:8787/api/commands | jq
294
+ # 至少 2 条 builtin
295
+ # 用户机器装了 30+ Skill(cc-switch 软链到 ~/.claude/skills/),应一并列出
296
+ ```
297
+
298
+ **依赖关系**:依赖 Step 1 & Step 2(要有 builtin 内容)。
299
+
300
+ ---
301
+
302
+ ### Step 4:`/` 命令补全 UI
303
+
304
+ **动机**:让用户在输入框输入 `/` 直接选命令。符合 PRODUCT.md §5.3 "`/` 是做事情" 契约。
305
+
306
+ **范围**:
307
+ - ✅ textarea 监听 `/`(位于 token 开头,前一个字符是空格 / 行首 / 空)
308
+ - ✅ cmdk 弹出菜单:命令名 + 描述 + 来源分组("内置" / "Skill")
309
+ - ✅ 键盘导航(↑↓ Enter Esc),模糊搜索(输 `/sed` 匹配 `/sediment`)
310
+ - ✅ 选中后替换当前 `/xxx` token 为 `/<slug> `(末尾加空格)
311
+ - ❌ 命令参数自动填充(agent 自己填,UI 不替它填)
312
+
313
+ **改动文件**:
314
+ - 修改 `web/package.json` — 加 `cmdk` 依赖
315
+ - 运行 `npx shadcn@latest add command` 安装 `web/src/components/ui/command.tsx`
316
+ - 新增 `web/src/components/CommandMenu.tsx` — 业务封装
317
+ - 修改 `web/src/components/ChatPanel.tsx` — 在 textarea 旁挂 CommandMenu
318
+ - 修改 `web/src/lib/api.ts` — 新增 `listCommands(): Promise<CommandItem[]>`
319
+
320
+ **实现要点**:
321
+ - **触发判断**:
322
+ - textarea onChange 时取 `value.slice(0, cursorPos)`
323
+ - 用 `/(^|\s)\/(\S*)$/` 匹配,捕获组 2 是当前查询字符串
324
+ - 没匹配到 → 关菜单;匹配到 → 开菜单并把查询字符串传给 cmdk
325
+ - **菜单定位**:用 cursor 的像素坐标(用 textarea-caret-position 算 / 或简化为 textarea 上方固定位置)
326
+ - **数据缓存**:组件 mount 时调一次 `listCommands()`,切库时 invalidate
327
+ - **选中插入**:保留当前 token 前的内容 + `/<slug> ` + 光标后内容,光标设到插入末尾
328
+
329
+ **验收 fingerprint**:
330
+ ```
331
+ 1. 输入框打 / → 1s 内弹菜单,至少 /sediment、/new-wiki
332
+ 2. 继续输 sed → 列表过滤到 /sediment
333
+ 3. Enter → 输入框变 "/sediment "(光标在末尾)
334
+ 4. Esc → 菜单关
335
+ 5. 输入 "你好 /se" → 在 /se 位置弹菜单(前面有正常文本)
336
+ ```
337
+
338
+ **依赖关系**:依赖 Step 3。
339
+
340
+ ---
341
+
342
+ ### Step 5:`@` 引用候选 API
343
+
344
+ **动机**:Step 6 前端 @ 补全需要数据源。
345
+
346
+ **范围**:
347
+ - ✅ `GET /api/refs?kb=<encoded path>&q=<query>` → 当前库下匹配 query 的页面
348
+ - ✅ 候选 = 扫 `wiki/{entities,topics,sources,comparisons,synthesis}/` 全部 .md(D8)
349
+ - ✅ 每条:`{ path, name, category, title }`
350
+
351
+ **改动文件**:
352
+ - 新增 `server/src/pages.ts` — 扫描 + 缓存
353
+ - 修改 `server/src/index.ts` — 新增 `/api/refs` 路由
354
+
355
+ **接口设计**:
356
+ ```
357
+ GET /api/refs?kb=<encoded absolute kb path>&q=<optional query>&limit=20
358
+
359
+ Response 200:
360
+ {
361
+ "ok": true,
362
+ "items": [
363
+ {
364
+ "path": "wiki/entities/austrian-economics.md",
365
+ "name": "austrian-economics",
366
+ "category": "entities",
367
+ "title": "奥派经济学"
368
+ }
369
+ ]
370
+ }
371
+ ```
372
+
373
+ **实现要点**:
374
+ - **扫描**:用 `fs.readdir(dir, { recursive: true })`(Node 20+),过滤 `.md`
375
+ - **忽略**:以 `.` 开头的文件 / 目录、`.wiki-tmp/`、`.git/`、`.obsidian/`、`node_modules/`
376
+ - **title 提取**:读文件前 1KB,匹配 `/^#\s+(.+)$/m` 拿第一行 H1;没有就用 name
377
+ - **缓存**:内存 `Map<kbPath, { items: PageRef[]; scannedAt: number }>`
378
+ - 每次请求 stat `wiki/` 顶层 mtime,与缓存 scannedAt 比,没变直接返回
379
+ - 阶段二只做最简缓存,阶段三再考虑 fs.watch
380
+ - **匹配**:q 大小写不敏感
381
+ - 评分:title 命中 + 2,name 命中 + 1,path 命中 + 0.5
382
+ - 按分数降序,取 limit
383
+ - **路径安全**:kb 参数必须是已注册的库(在 kbs 列表里),防止扫任意目录
384
+
385
+ **验收 fingerprint**:
386
+ ```bash
387
+ curl 'http://localhost:8787/api/refs?kb=%2FUsers%2Fxxx%2Fllm-wiki%2Ftest-kb&q=eco' | jq
388
+ # 应返回所有 name 或 title 包含 eco 的页面,按相关度排序
389
+ ```
390
+
391
+ **依赖关系**:可独立完成。
392
+
393
+ ---
394
+
395
+ ### Step 6:`@` 补全 UI + 右抽屉 + markdown 渲染 🔴
396
+
397
+ **动机**:阶段二最重的一步。一次承载 @ 补全 + wiki 链接预览 + 右抽屉首次落地。
398
+
399
+ **范围**:
400
+ - ✅ textarea 监听 `@`,弹 cmdk 菜单(候选来自 /api/refs,输入实时查询)
401
+ - ✅ 选中后插入 `[[wiki/<category>/<name>.md]]` 链接(agent 看到能直接 Read,与 Obsidian `[[name]]` 风格兼容)
402
+ - ✅ assistant 消息用 react-markdown 渲染,自定义组件把 `[[...]]` 渲染为可点击链接
403
+ - ✅ 点击 wiki 链接 → 右抽屉打开 → 渲染该 .md 的内容
404
+ - ✅ 右抽屉:宽 400px,标题(页面相对路径)+ markdown body + 关闭按钮
405
+ - ✅ 切对话时右抽屉**保持**(不强关)
406
+ - ❌ 用户消息暂不走 markdown 渲染(保持 whitespace-pre-wrap,避免 `*` `_` 误转义)
407
+ - ❌ 代码块语法高亮(阶段二不上 highlight.js,react-markdown 默认 `<code>` 即可)
408
+ - ❌ 右抽屉里的 wiki 链接二次跳转(防止递归打开)
409
+
410
+ **改动文件**:
411
+
412
+ **后端**:
413
+ - 修改 `server/src/index.ts` — 新增 `GET /api/page?kb=<path>&path=<rel>` 返回单页内容
414
+
415
+ **前端**:
416
+ - 修改 `web/package.json` — 加 `react-markdown` `remark-gfm`
417
+ - 新增 `web/src/components/RightDrawer.tsx` — 固定右抽屉容器
418
+ - 新增 `web/src/components/MarkdownView.tsx` — react-markdown 封装 + wiki 链接拦截
419
+ - 新增 `web/src/components/RefMenu.tsx` — `@` 弹出菜单(结构与 CommandMenu 类似,复用 cmdk)
420
+ - 修改 `web/src/components/ChatPanel.tsx`:
421
+ - textarea 同时挂 CommandMenu + RefMenu
422
+ - assistant message bubble 用 MarkdownView 渲染
423
+ - 修改 `web/src/App.tsx` — 加右抽屉状态(drawerPage: string | null)+ 传递 openPage callback 给 ChatPanel
424
+ - 修改 `web/src/lib/api.ts` — 加 `listRefs(kb, q)` + `readPage(kb, relPath)`
425
+
426
+ **接口设计**(后端 page 接口):
427
+ ```
428
+ GET /api/page?kb=<encoded absolute kb path>&path=<encoded relative path inside kb>
429
+
430
+ Response 200:
431
+ { "ok": true, "content": "<raw markdown>" }
432
+
433
+ Response 400 (path escape attempt):
434
+ { "ok": false, "error": "path must be inside kb" }
435
+ ```
436
+
437
+ **实现要点**:
438
+
439
+ **`@` 触发**:与 `/` 类似,正则 `/(^|\s)@(\S*)$/`;选中后插入 `[[wiki/<category>/<name>.md]] `
440
+
441
+ **wiki 链接渲染**:react-markdown 的 `components.a` 自定义:
442
+ ```tsx
443
+ <ReactMarkdown
444
+ remarkPlugins={[remarkGfm]}
445
+ components={{
446
+ a: ({ href, children }) => {
447
+ if (href?.startsWith("wiki/")) {
448
+ return <a onClick={(e) => { e.preventDefault(); openPage(href); }} ...>{children}</a>;
449
+ }
450
+ return <a href={href} target="_blank" rel="noopener noreferrer">{children}</a>;
451
+ }
452
+ }}
453
+ >{content}</ReactMarkdown>
454
+ ```
455
+
456
+ 但 `[[wiki/...]]` 不是标准 markdown 链接。两种处理:
457
+ - **A(推荐)**:在渲染前预处理,把 `[[wiki/x]]` 替换为 `[wiki/x](wiki/x)`,让 react-markdown 当链接处理
458
+ - **B**:用 remark plugin 注册自定义 inline 语法(复杂,阶段二不推荐)
459
+
460
+ **右抽屉**:
461
+ - 用 `<aside>` 固定定位 `right-0 top-0 h-full w-[400px]`
462
+ - 关闭按钮 + 标题栏 + 滚动区
463
+ - 全屏切换推迟到阶段三(PRODUCT.md §5.1 写了 0 / 400 / 全屏三档,阶段二只做 0 / 400)
464
+
465
+ **路径安全**(后端 page 接口):
466
+ ```ts
467
+ const requested = path.resolve(kbPath, relPath);
468
+ if (!requested.startsWith(path.resolve(kbPath) + path.sep)) {
469
+ return 400; // escape attempt
470
+ }
471
+ ```
472
+
473
+ **验收 fingerprint**:
474
+ ```
475
+ 1. 输入框打 @ → 1s 内弹菜单,列出当前库页面
476
+ 2. 输 @aus → 过滤到包含 aus 的页面
477
+ 3. 选中 → 输入框变 "[[wiki/entities/austrian-economics.md]] "
478
+ 4. 发送,让 agent 回复时引用此页面(或自己粘一段 [[wiki/...]] 测试)
479
+ 5. assistant 消息里的 [[...]] 应显示为下划线可点击链接
480
+ 6. 点链接 → 右抽屉滑出,显示该 md 的渲染结果(标题、段落、列表、表格都正常)
481
+ 7. 切对话 → 右抽屉应保持
482
+ 8. 点抽屉关闭按钮 → 抽屉收起
483
+ 9. 试在 url 里加 ?path=../../../../etc/passwd → 应 400
484
+ ```
485
+
486
+ **依赖关系**:依赖 Step 5。
487
+
488
+ ---
489
+
490
+ ### Step 7:消化新素材
491
+
492
+ **动机**:阶段二验收第 2 条"消化"环节。
493
+
494
+ **范围**:
495
+ - ✅ 输入框识别"看起来像 URL"或"本地路径"
496
+ - ✅ 检测到时显示 chip:"📎 检测到 URL/路径,发送时将作为消化素材",可关
497
+ - ✅ 发送时若 chip 仍亮,把消息包装成(**D9 归属原则:消化是 Skill 本职,明确指示 agent 调 Skill**):
498
+ ```
499
+ 请调用 llm-wiki Skill 把以下素材消化到当前知识库的 raw/,完成后回到对话告诉我落地路径:
500
+ <原文 URL 或 路径>
501
+ ```
502
+ - ✅ 走现有 prompt 流(agent 调 llm-wiki Skill 的消化流程;Skill 内部决定是否用 WebFetch / yt-dlp / 各平台抓取器)
503
+ - ❌ 拖放上传(推迟到阶段三)
504
+ - ❌ 自动消化(用户必须保持 chip 亮 + 按发送,避免误触发)
505
+ - ❌ 绕过 Skill 用 agent 内置 WebFetch 自己消化(违反 D9 归属原则;万一 Skill 缺失,agent 应明确报错而非 fallback 到自己写文件)
506
+
507
+ **改动文件**:
508
+ - 修改 `web/src/components/ChatPanel.tsx`
509
+
510
+ **实现要点**:
511
+ - **URL 识别**:`/^https?:\/\/\S+$/`(trim 后整段是 URL)
512
+ - **路径识别**:`/^(\/|~\/)\S+$/`(trim 后整段以 / 或 ~/ 开头,无空格)
513
+ - **chip UI**:输入框上方,灰色背景 + 文字 + 关闭 ✕
514
+ - **包装时机**:onSend 时检查 chip 状态,亮就 wrap,灭就照原文发
515
+ - **不强加**:若用户只是想讨论 URL 而非消化,关 chip 即可正常发
516
+
517
+ **验收 fingerprint**:
518
+ ```
519
+ 1. 输入框粘贴 https://karpathy.github.io/2025/06/27/something/
520
+ 2. 输入框上方应出现 chip "📎 检测到 URL..."
521
+ 3. 点 ✕ → chip 消失
522
+ 4. 重新粘贴 → chip 又出现
523
+ 5. 保持 chip 亮,发送
524
+ 6. agent 应触发 WebFetch + Skill 流程
525
+ 7. ls ~/llm-wiki/<kb>/raw/ # 应有新文件
526
+ ```
527
+
528
+ **依赖关系**:建议在 Step 2 验收完成后做(这样测试时能用 /new-wiki 建测试库)。
529
+
530
+ ---
531
+
532
+ ### Step 8:设置面板最小可用
533
+
534
+ **动机**:阶段二验收第 3 条(D3 决策:只做 API key 三层 + 测试连接)。
535
+
536
+ **范围**:
537
+ - ✅ 独立面板(modal 形式,不复用右抽屉)
538
+ - ✅ 只有 1 个 Tab "认证",包含三个区:
539
+ - **登录方式状态**:检测 `~/.pi/agent/auth.json` 是否存在 + 列已配 provider(不显示 key)
540
+ - **添加 API key**:provider 选择器 + key 输入(type=password)+ "保存并测试" 按钮
541
+ - **环境变量**:只读列 `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `DEEPSEEK_API_KEY` 等是否存在(不显示值)
542
+ - ❌ 默认模型选择器、根目录修改、外部库管理 UI(阶段二补丁或阶段三)
543
+
544
+ **改动文件**:
545
+
546
+ **后端**:
547
+ - 新增 `server/src/auth.ts` — 读写 `~/.pi/agent/auth.json`(原子 + 0600 + 备份)
548
+ - 修改 `server/src/index.ts` — 新增 3 个路由
549
+
550
+ **前端**:
551
+ - 新增 `web/src/components/SettingsPanel.tsx`
552
+ - 修改 `web/src/components/ChatPanel.tsx` — 把 disabled 的 "⚙ 设置" 按钮接通
553
+ - 修改 `web/src/lib/api.ts` — 加 `getAuthStatus / setAuthKey / testAuthConnection`
554
+
555
+ **接口设计**:
556
+
557
+ ```
558
+ GET /api/auth/status
559
+
560
+ Response 200:
561
+ {
562
+ "ok": true,
563
+ "authFileExists": true,
564
+ "providers": [
565
+ { "id": "zai", "type": "api_key", "configured": true }
566
+ ],
567
+ "envKeys": [
568
+ { "name": "ANTHROPIC_API_KEY", "present": false },
569
+ { "name": "OPENAI_API_KEY", "present": false }
570
+ ]
571
+ }
572
+ ```
573
+
574
+ ```
575
+ POST /api/auth/set
576
+ Body: { "provider": "anthropic", "type": "api_key", "key": "sk-ant-xxx" }
577
+
578
+ Response 200:
579
+ { "ok": true }
580
+ ```
581
+
582
+ ```
583
+ POST /api/auth/test
584
+ Body: { "provider": "anthropic" }
585
+
586
+ Response 200:
587
+ { "ok": true, "message": "连接成功,模型可用" }
588
+
589
+ Response 200 (失败):
590
+ { "ok": false, "error": "401 Unauthorized" }
591
+ ```
592
+
593
+ **实现要点**:
594
+
595
+ **写 `~/.pi/agent/auth.json` 安全流程**:
596
+ 1. read 现有内容 → JSON.parse(解析失败 → 备份后视为空对象)
597
+ 2. 备份到 `~/.pi/agent/auth.json.bak.<unix-timestamp>`
598
+ 3. merge 新条目
599
+ 4. JSON.stringify(merged, null, 2)
600
+ 5. write 到 `auth.json.tmp.<pid>.<random>`
601
+ 6. fs.chmod 0o600
602
+ 7. fsync
603
+ 8. rename 到 `auth.json`
604
+ 9. 失败时从备份回滚
605
+
606
+ **测试连接(TBD-2)**:
607
+ - 方案 A(首选):用 pi-coding-agent SDK 创建一个临时 session,发空 prompt,等到第一个事件成功就销毁(最小成本一次调用)
608
+ - 方案 B(降级):直接对 provider endpoint 发一次最小请求
609
+ - Anthropic:POST `/v1/messages`,model: claude-haiku-4-5(最便宜),max_tokens: 1
610
+ - OpenAI:GET `/v1/models`
611
+ - **不在前端持有 key**:先 `/api/auth/set` 写入,再 `/api/auth/test` 测试(避免 key 在前端 state 久留)
612
+
613
+ **安全约束**:
614
+ - 全程不在 `~/.llm-wiki-agent/` 写 key
615
+ - 不在日志打 key(即使 prefix)
616
+ - input type=password + autocomplete=off
617
+ - 已存 key 只显示"已配置 ✓",不显示明文 / 不显示前缀 / 不显示长度
618
+
619
+ **验收 fingerprint**:
620
+ ```bash
621
+ # 1. 点 ⚙ 设置 → SettingsPanel 弹出
622
+ # 2. 看到当前 providers(如 zai 已配)+ envKeys 列表
623
+ # 3. 选 Anthropic → 输 sk-ant-xxx → 保存
624
+ ls -la ~/.pi/agent/auth.json # 权限应为 -rw------- (600)
625
+ cat ~/.pi/agent/auth.json | jq '.anthropic' # 应有新条目
626
+ # 4. 点"测试连接"
627
+ # 成功 → 绿色"连接成功"提示
628
+ # 失败 → 红色错误 + 原始错误信息(不含 key 值)
629
+ # 5. 排查泄露
630
+ grep -r "sk-ant" ~/.llm-wiki-agent/ 2>/dev/null # 应无输出
631
+ ls ~/.pi/agent/auth.json.bak.* # 应有备份
632
+ ```
633
+
634
+ **依赖关系**:可独立完成。阶段二验收第 3 条**强依赖**。
635
+
636
+ ---
637
+
638
+ ## §5 数据契约
639
+
640
+ ### 5.1 Wiki 链接格式
641
+ - **形式**:`[[wiki/<category>/<name>.md]]`
642
+ - **例**:`[[wiki/entities/austrian-economics.md]]`
643
+ - **理由**:
644
+ - 路径显式,agent 看到能直接 Read,不依赖索引
645
+ - 与 Obsidian `[[name]]` 风格兼容(Obsidian 会把它当文件链接处理)
646
+ - 与 PRODUCT.md §5.3 "@ 是引用、/ 是执行" 契约对齐
647
+
648
+ ### 5.2 `/sediment` 文件命名
649
+ - **格式**:`<YYYY-MM-DD-HHmm>-<slug>.md`
650
+ - **slug 规则**:
651
+ 1. 取 `topic` 参数(若有),否则取 firstUserMessage 前 20 字
652
+ 2. trim
653
+ 3. 空格/标点 → `-`
654
+ 4. 保留中文 / 字母 / 数字 / `-`
655
+ 5. 折叠重复 `-`,去首尾 `-`
656
+ - **例**:`2026-05-27-1030-奥派经济学是什么.md`
657
+
658
+ ### 5.3 命令 slug 命名
659
+ - 内置工具名:snake_case,如 `sediment_to_wiki`、`new_wiki`(沿用阶段一)
660
+ - 命令 slug:kebab-case,如 `/sediment`、`/new-wiki`
661
+ - Skill 命令 slug:`/<skill name>`(Skill 的 name 通常本就是 kebab-case)
662
+
663
+ ### 5.4 API 命名空间一览
664
+ | 路径 | 方法 | step | 用途 |
665
+ |---|---|---|---|
666
+ | `/api/commands` | GET | 3 | 命令列表 |
667
+ | `/api/refs` | GET | 5 | @ 候选页面 |
668
+ | `/api/page` | GET | 6 | 读单页 markdown |
669
+ | `/api/auth/status` | GET | 8 | 三层认证状态 |
670
+ | `/api/auth/set` | POST | 8 | 写入 key 到 pi auth.json |
671
+ | `/api/auth/test` | POST | 8 | 测试连接 |
672
+
673
+ 阶段一已有:`/api/health`、`/api/knowledge-bases`、`/api/knowledge-base`、`/api/knowledge-bases/external`、`/api/conversations`、`/api/conversations/new`、`/api/prompt`。
674
+
675
+ ---
676
+
677
+ ## §6 验收清单
678
+
679
+ ### 6.1 总验收(PRODUCT.md §4 阶段二)
680
+ - [ ] **验收 1**:在 app 内点 "+ 新建知识库",输入名字和方向 → 自动创建 → 出现在列表里
681
+ - 通过路径:UI 触发 → agent 调 `new_wiki` 工具 → init-wiki.sh 跑完 → 用户点侧栏刷新看到新库
682
+ - [ ] **验收 2**:丢一篇文章链接 → agent 消化进库 → 在对话里基于这篇讨论 → 一键结晶为新页面 → 在 `wiki/synthesis/sessions/` 目录里能看到新文件
683
+ - 通过路径:粘 URL → chip 亮 → 发送 → agent WebFetch + 写 raw/ → 对话讨论 → 调 `sediment_to_wiki` → 文件落地
684
+ - [ ] **验收 3**:在 UI 里填一个 Anthropic API key → 测试连接成功 → key 出现在 `~/.pi/agent/auth.json`,未泄露到 `~/.llm-wiki-agent/`
685
+ - 通过路径:设置面板 → 输 key → 保存 → 测试 → 看 auth.json + 0600 权限 + grep 排查泄露
686
+
687
+ ### 6.2 每个 Step 的本地验收
688
+ 见 §4 各 step 的"验收 fingerprint"小节。每个 step 完成后必须跑完对应命令并 attach 输出。
689
+
690
+ ### 6.3 综合体感验收(作者主观)
691
+ - [ ] 输入 `/` 1 秒内菜单弹出
692
+ - [ ] 输入 `@` 1 秒内菜单弹出(首次扫描可稍久,含缓存后必须 1s)
693
+ - [ ] 切对话后右抽屉保持
694
+ - [ ] 暗色主题下所有新组件无白色露馅
695
+ - [ ] 设置面板的"测试连接"成功后有明显视觉反馈(绿色 + 文案,不只是文字)
696
+ - [ ] 三档键盘体验:Tab 焦点流可控、Esc 关菜单 / 抽屉 / 面板、Enter 不误提交
697
+
698
+ ### 6.4 安全验收(设置面板专项)
699
+ - [ ] `grep -r "sk-" ~/.llm-wiki-agent/` 无输出
700
+ - [ ] `grep -r "sk-" server/` 无输出(除测试 fixture)
701
+ - [ ] `~/.pi/agent/auth.json` 权限 `-rw-------`
702
+ - [ ] 前端 React DevTools 检查:保存 key 后任何组件 state 都不含 key 明文
703
+
704
+ ---
705
+
706
+ ## §7 给 codex 的交接说明
707
+
708
+ ### 7.1 工作前必读
709
+ 1. `CLAUDE.md`(项目级 + 全局 AI 协作规则)
710
+ 2. `PRODUCT.md`(产品意图全文,特别是 §3 架构、§4 阶段二、§5 UI、§6 数据、§7 ADR)
711
+ 3. 本文档(实施细则)
712
+
713
+ ### 7.2 工作节奏
714
+ - **一次性按 §9 顺序做完 8 step**,不等逐 step 验收
715
+ - **每个 step 一个原子 commit**(共 8 个,方便 review 和回滚;禁止 1 大 commit)
716
+ - **允许在 8 个 step commit 之外补充 `fix(stage-2): ...` 修复 commit**:codex 自查或 claude 验收过程中发现真实 bug 应立即补修复 commit(比"留给作者"更负责);每个 fix 也是原子 commit,不要把多个修复揉一起;触发 fix 时在 PR body 的"已知妥协"段落里说明"额外 N 个修复 commit + 原因"
717
+ - commit message 格式:
718
+ ```
719
+ feat(stage-2-step-N): <一句话>
720
+
721
+ - 改动 1
722
+ - 改动 2
723
+
724
+ 本 step 验收:
725
+ $ <command>
726
+ <expected output>
727
+ ```
728
+ - 8 step 全做完后提 **1 个 PR**,PR body 必须含 §10.7 交付物对账单(详见 §7.5)
729
+ - 每个 step 的 diff 控制在 300 行以内(含新增文件);超出请在 commit body 说明原因
730
+ - **遇到 TBD**:按 §9.5 预定的降级矩阵自动决策,**不要停下等作者**
731
+
732
+ ### 7.3 不要做的事
733
+ - ❌ 加 §3 之外的新依赖
734
+ - ❌ 重构阶段一已有代码(除非本文档明确写要改)
735
+ - ❌ 顺手"改善"旁边的代码 / 注释 / 格式
736
+ - ❌ commit message 或代码里出现作者真实姓名,统一用 `Kiro`
737
+ - ❌ `server/src/` 或 `web/src/` 出现本机用户主目录绝对路径(用相对路径或 `homedir()`;docs/ 内允许此类示例文本)
738
+ - ❌ `--no-verify` 跳 hook、`--amend` 改前一个 commit、`-f` push
739
+ - ❌ push 到 main、合并到 main
740
+ - ❌ 修改 PRODUCT.md(除非本文档明确要求)
741
+
742
+ ### 7.4 卡住怎么办(与一次性 8 step 工作流一致)
743
+ - **本文档未覆盖的细节歧义**:先按合理推测做,在 commit body 标 `[judgment: ...]` 描述判断依据,claude 总验收时审
744
+ - **某 step 完成后发现下一个 step 设计有问题**:先做完本 step,再用 commit body 标 `[design-issue: step N+1 描述]`,**不要顺手改下一个 step 的设计**
745
+ - **TBD 项**(§8):按 §9.5 降级矩阵自动决策,触发降级在 commit body 标 `[TBD-X 降级到 方案Y: 原因]`
746
+
747
+ ### 7.5 PR 交付清单(PR body 必含)
748
+ 8 step 全做完提 1 个 PR 时,PR body 必含:
749
+ - 8 个 commit 的 hash + 一句话
750
+ - 每个 step fingerprint 的实测输出(粘贴或截图,可折叠 `<details>`)
751
+ - §10.7 交付物对账单(逐项打勾)
752
+ - 触发的 TBD 降级记录(哪个 TBD → 哪个方案 → 原因)
753
+ - 已知的妥协 / 推迟事项
754
+ - 实施过程中发现的"本文档需要修订"清单
755
+
756
+ ---
757
+
758
+ ## §8 风险与待办(TBD)
759
+
760
+ ### TBD-1:pi-coding-agent SDK 是否暴露 Skill 列表 API
761
+ **影响**:Step 3 实现方式
762
+
763
+ **调研路径**:
764
+ 1. `grep -rE "Skill|skill" server/node_modules/@earendil-works/pi-coding-agent/dist/*.d.ts`
765
+ 2. 看 pi-agent 官方文档 sdk.md / skills.md(在 pi-agent 源码 `docs/` 下)
766
+ 3. 如有 `session.skills()` / `session.listLoadedSkills()` 类 API 直接用
767
+
768
+ **降级方案**:fs 扫目录 + 解析 SKILL.md frontmatter
769
+ - 扫描路径优先级:
770
+ 1. `<activeKbPath>/.claude/skills/`(项目级)
771
+ 2. `~/.claude/skills/`(用户级)
772
+ 3. `~/.pi/agent/skills/`(pi-agent 默认)
773
+ - 解析每个 Skill 目录下的 `SKILL.md`:
774
+ ```yaml
775
+ ---
776
+ name: <skill-name>
777
+ description: <one-liner>
778
+ ---
779
+ ```
780
+ - 重名时优先级 1 > 2 > 3
781
+
782
+ ### TBD-2:测试连接的实现方式
783
+ **影响**:Step 8 测试按钮
784
+
785
+ **候选方案**:
786
+ - **A(首选)**:用 pi-coding-agent SDK 临时 session + 最小 prompt
787
+ - 优点:完全复用 pi-agent 的多 provider 抽象
788
+ - 风险:需要找到"创建 session 不实际发请求"或"发完立即销毁"的 API
789
+ - **B**:直接调 provider endpoint
790
+ - Anthropic:POST `/v1/messages`,最小 model + max_tokens=1
791
+ - OpenAI:GET `/v1/models`
792
+ - 风险:每加一个 provider 要写一份测试代码
793
+ - **C(兜底)**:不做按钮,验收第 3 条改为"看 auth.json 落地 + 0600"作为唯一硬标准
794
+ - 风险:UX 不闭环,用户不知道 key 对不对
795
+
796
+ **推荐**:先按 A 试,遇阻降到 B(仅 Anthropic + OpenAI),都失败降到 C 并修改本文档 + 与作者确认。
797
+
798
+ ### TBD-3:llm-wiki-skill 的 init-wiki.sh 参数签名 ✅ 已解决(codex Step 2 实施时确认)
799
+
800
+ **设计期事实**:当时用户机器 `~/.claude/skills/llm-wiki-skill/` 和 `~/.pi/agent/skills/llm-wiki-skill/` **都没有**这个 Skill。
801
+
802
+ **已确认参数签名**:`init-wiki.sh <wiki path> <topic> <language>`(三个位置参数)
803
+
804
+ **已确认脚本实际位置**:`~/.claude/skills/llm-wiki-skill/scripts/init-wiki.sh`(**不在** skill 根目录)。codex 的 `server/src/wiki-init.ts::findInitScript()` 已兼容两种位置——先查根目录后查 `scripts/`,对未来 llm-wiki-skill 重组目录有韧性。
805
+
806
+ **作者操作**(已完成):手动 clone llm-wiki-skill 到 `~/.claude/skills/llm-wiki-skill/`。
807
+
808
+ **长期**:阶段五打包时考虑把 llm-wiki-skill 作为 onboarding 一键安装项。
809
+
810
+ ### TBD-4:右抽屉与 PRODUCT.md §5.1 的契合度
811
+ **事实**:PRODUCT.md §5.1 说"右抽屉默认隐藏,呼出场景:产物预览、引用页面查看、设置面板"
812
+
813
+ **阶段二**:
814
+ - 引用页面查看 → Step 6 右抽屉 ✅
815
+ - 设置面板 → Step 8 做成 modal(D3 范围内)
816
+
817
+ **疑问**:是否需要把设置面板也改回右抽屉形态?
818
+
819
+ **当前判断**:设置面板用 modal,因为:
820
+ - 设置是"打断式"操作,modal 的"必须先关才能继续"模式更合适
821
+ - 右抽屉只放"参考式"内容(页面预览),与 chat 并行查看
822
+ - 这条偏离 PRODUCT.md §5.1,验收时与作者确认
823
+
824
+ ### TBD-5:消化新素材的"包装提示"语 ✅ 已解决(D9 / ADR-16)
825
+
826
+ **事实**:Step 7 的 wrap 文本会影响 agent 行为。
827
+
828
+ **已选定**(D9 归属原则强制):
829
+ ```
830
+ 请调用 llm-wiki Skill 把以下素材消化到当前知识库的 raw/,完成后回到对话告诉我落地路径:
831
+ <原文 URL 或 路径>
832
+ ```
833
+
834
+ **为什么这个表述**:
835
+ - 明确指示走 Skill(不是 "agent 自己看着办"),遵守 D9 「消化属于 Skill 本职」
836
+ - 指定落地位置 `raw/`(防止 agent 自由发挥写错地方)
837
+ - 要求回报落地路径(方便用户验收)
838
+
839
+ **Skill 缺失时**:Step 7 不 fallback 到 agent 自己写文件;agent 应明确报错"llm-wiki Skill 未加载",由用户去装。这避免破坏 Skill 边界。
840
+
841
+ ---
842
+
843
+ ## §9 执行 plan(codex 工作清单)
844
+
845
+ ### 9.1 工作流概览
846
+
847
+ ```
848
+ 作者准备 ───→ codex 实施 ───→ claude 总验收 ───→ 作者决策
849
+ ↓ ↓ ↓ ↓
850
+ §9.6 前置 §9.3 8 commit §10 剧本 §10.8 issue
851
+ + 1 PR + 安全审计 分工修复
852
+ ```
853
+
854
+ ### 9.2 step 依赖图
855
+
856
+ ```
857
+ Step 1 (/sediment)
858
+
859
+ ├─→ Step 3 (/api/commands) ──→ Step 4 (/ UI)
860
+
861
+ Step 2 (/new-wiki) ──→ Step 7 (消化) [测试期依赖]
862
+
863
+ Step 5 (/api/refs) ──→ Step 6 (@ UI + 右抽屉 + md)
864
+
865
+ Step 8 (设置面板) [独立]
866
+ ```
867
+
868
+ - **强依赖**(不可并行):1→3→4;2→7(仅测试期);5→6
869
+ - **可并行/独立**:8 全程独立;1/2/5/8 之间无依赖;3 必须在 1+2 完成后
870
+
871
+ ### 9.3 推荐执行顺序与 commit 编号
872
+
873
+ | Commit # | Step | 复杂度 | 说明 |
874
+ |---|---|---|---|
875
+ | C1 | Step 1(/sediment Extension) | 🟢 低 | 后端独立,先建立信心 |
876
+ | C2 | Step 2(/new-wiki Extension) | 🟢 低 | 依赖 D5(llm-wiki-skill 已装) |
877
+ | C3 | Step 5(/api/refs API) | 🟢 低 | 后端独立,为 Step 6 让路 |
878
+ | C4 | Step 3(/api/commands API) | 🟡 中 | 含 TBD-1 调研 |
879
+ | C5 | Step 8(设置面板后端 + 前端) | 🟡 中 | 含 TBD-2 调研 + 安全敏感 |
880
+ | C6 | Step 4(/ 命令补全 UI) | 🟡 中 | 引入 cmdk + 第一个补全菜单 |
881
+ | C7 | Step 6(@ UI + 右抽屉 + md)🔴 | 🔴 高 | 阶段二最重,引入 react-markdown |
882
+ | C8 | Step 7(消化 chip) | 🟢 低 | 收尾贯穿测试用例 |
883
+
884
+ **顺序设计原因**:
885
+ - 先后端(1/2/3/5)再前端(4/6):前端补全菜单需要后端数据源
886
+ - Step 8(设置面板)放中段:含 TBD-2 风险,早暴露
887
+ - Step 6 放倒数第二:最重,留足时间
888
+ - Step 7 放最后:是"消化→讨论→结晶"贯穿测试,依赖其他 step 已就位
889
+
890
+ ### 9.4 commit 策略
891
+
892
+ - 每 step 一个原子 commit(共 8 个)
893
+ - commit message 见 §7.2
894
+ - **禁止**:1 个大 commit 覆盖 8 step;多个 step 揉进同一 commit
895
+ - **允许**:单个 step 内部多次 reset 整理后压成 1 个 commit
896
+ - 全做完后提 **1 个 PR**,PR body 含 §10.7 对账单
897
+ - 在新分支 `stage-2` 上 commit,不要在 main 上动
898
+
899
+ ### 9.5 TBD 降级矩阵(codex 自动决策表)
900
+
901
+ 遇到 TBD 时按下表预定方案,**不要停下等作者**:
902
+
903
+ | TBD | 影响 Step | 先试(方案 A) | 失败降级(方案 B) | 终极兜底(方案 C) |
904
+ |---|---|---|---|---|
905
+ | TBD-1(Skill 列表 API) | 3 | grep SDK dist + 读 pi-agent docs 确认 API 存在 → 直接调 | fs 扫 `~/.claude/skills/` + `~/.pi/agent/skills/` + 解析 SKILL.md frontmatter | 内置命令 only,不列 Skill |
906
+ | TBD-2(测试连接) | 8 | SDK 临时 session 发空 prompt | 直打 Anthropic `/v1/messages`(model=claude-haiku-4-5, max_tokens=1)+ OpenAI `/v1/models` | 不做按钮,仅靠 auth.json 落地 + 0600 作硬验收 |
907
+ | ~~TBD-3~~(init-wiki.sh 参数,✅ 已由 Step 2 实施时解决) | 2 | 已确认参数 `<wiki path> <topic> <language>`;脚本实际在 `~/.claude/skills/llm-wiki-skill/scripts/init-wiki.sh`;`findInitScript()` 兼容根目录与 `scripts/` 两种位置 | — | — |
908
+ | TBD-4(设置面板形态) | 8 | 实现成 modal(推荐方案) | — | — |
909
+ | ~~TBD-5~~(消化包装语,✅ 已由 D9 / ADR-16 解决) | 7 | 固定使用 §8 TBD-5 已选定的"请调用 llm-wiki Skill 消化..."文本 | — | — |
910
+
911
+ **触发降级时**:codex 必须在对应 commit body 标 `[TBD-X 降级到 方案Y: 原因]`,方便 claude 验收时知道偏离。
912
+
913
+ ### 9.6 前置准备(作者在 codex 启动前完成)
914
+
915
+ - [ ] git clone llm-wiki-skill → `~/.claude/skills/llm-wiki-skill/`(D5 / TBD-3)
916
+ - [ ] 确认 `chmod +x ~/.claude/skills/llm-wiki-skill/scripts/init-wiki.sh`(实际位置);旧版若在根目录请 chmod 那个;codex 的 findInitScript 已兼容两种位置
917
+ - [ ] 准备 1 个 Anthropic / OpenAI test key(用于 Step 8 验收,可临时)
918
+ - [ ] 准备 1-2 个测试用 URL(karpathy 博客或任意公开文章)
919
+ - [ ] git checkout 新分支 `stage-2`(codex 在此分支 commit)
920
+
921
+ ---
922
+
923
+ ## §10 总验收剧本(claude 总验收用)
924
+
925
+ ### 10.1 验收顺序
926
+
927
+ 1. **静态检查**:grep / lint / 文件结构对账(不跑应用)
928
+ 2. **启动检查**:`npm run dev` 后端起、前端起、阶段一回归
929
+ 3. **端到端剧本 1**:建库 → 消化 → 讨论 → 结晶(覆盖验收 1+2)
930
+ 4. **端到端剧本 2**:设置面板 → 填 key → 测试 → 落地(覆盖验收 3)
931
+ 5. **安全审计**:grep key 泄露、文件权限、路径逃逸
932
+ 6. **体感测试**:菜单延迟、键盘、暗色主题
933
+ 7. **对账单核对**:§10.7 逐项打勾
934
+ 8. **issue 清单**:按 §10.8 格式列 → 交作者
935
+
936
+ ### 10.2 端到端剧本 1:建库 → 消化 → 讨论 → 结晶
937
+
938
+ ```bash
939
+ # 预置:app 已启动,已 git clone llm-wiki-skill 到 ~/.claude/skills/
940
+
941
+ # Phase 1:建库(覆盖验收 1)
942
+ # 在 UI 对话框说:"用 new_wiki 建一个叫 stage2-acceptance 的库,方向是测试阶段二验收"
943
+ # 预期:agent 调用 new_wiki 工具,几秒后返回成功
944
+ ls ~/llm-wiki/stage2-acceptance/ # 应有 wiki/ raw/ purpose.md .wiki-schema.md
945
+ # 点侧栏刷新 → 应看到 stage2-acceptance
946
+ # 切换到 stage2-acceptance
947
+
948
+ # Phase 2:消化(验收 2 第 1 段)
949
+ # 输入框粘贴 https://karpathy.github.io/2025/06/27/...(任一公开文章)
950
+ # 预期:chip 出现 "📎 检测到 URL..."
951
+ # 发送 → agent 应触发 WebFetch + llm-wiki Skill
952
+ ls ~/llm-wiki/stage2-acceptance/raw/ # 应有新文件
953
+
954
+ # Phase 3:讨论(验收 2 第 2 段)
955
+ # 在对话里继续问:"这篇文章的核心论点是什么?基于已消化的素材分析"
956
+ # 预期:agent 读取 raw/ 内容 + 给出讨论
957
+ # 试输入 @ → 应弹出 @ 菜单
958
+
959
+ # Phase 4:结晶(验收 2 第 3 段)
960
+ # 在对话里说:"/sediment topic:karpathy-核心论点"
961
+ # 或:"调用 sediment_to_wiki,topic 设为 karpathy-核心论点"
962
+ ls ~/llm-wiki/stage2-acceptance/wiki/synthesis/sessions/ # 应有新 .md
963
+ # cat 看 frontmatter + ## 👤 用户 + ## 🤖 助手 结构
964
+
965
+ # Phase 5:链接预览(Step 6)
966
+ # 在对话里发送一条含 [[wiki/synthesis/sessions/<新文件名>]] 的消息
967
+ # 预期:assistant 回复里点击该链接 → 右抽屉打开 → 显示该页 markdown
968
+ ```
969
+
970
+ ### 10.3 端到端剧本 2:设置面板填 key(覆盖验收 3)
971
+
972
+ ```bash
973
+ # 预置:备份现有 ~/.pi/agent/auth.json
974
+ cp ~/.pi/agent/auth.json ~/.pi/agent/auth.json.preacceptance
975
+
976
+ # Phase 1:UI 操作
977
+ # 点 ⚙ 设置 → SettingsPanel 弹出
978
+ # 应看到当前 providers(如 zai 已配)+ envKeys 列表
979
+
980
+ # Phase 2:填 key
981
+ # 选 Anthropic → 输 sk-ant-test-xxx → 保存
982
+
983
+ # Phase 3:测试连接
984
+ # 点测试连接按钮
985
+ # 期望:成功 → 绿色提示;失败 → 红色错误但不含 key 值
986
+
987
+ # Phase 4:验收落地
988
+ cat ~/.pi/agent/auth.json | jq '.anthropic' # 应有新条目
989
+ ls -la ~/.pi/agent/auth.json # 权限必须是 -rw------- (600)
990
+
991
+ # Phase 5:泄露检查(§10.5 重点)
992
+ grep -rE "sk-ant" ~/.llm-wiki-agent/ 2>/dev/null # 必须无输出
993
+
994
+ # Phase 6:清理
995
+ cp ~/.pi/agent/auth.json.preacceptance ~/.pi/agent/auth.json
996
+ rm ~/.pi/agent/auth.json.preacceptance
997
+ ```
998
+
999
+ ### 10.4 阶段一回归测试(防止破坏既有功能)
1000
+
1001
+ ```bash
1002
+ # A. 启动
1003
+ npm run dev # 应一行起前后端,无 error
1004
+ curl http://localhost:8787/api/health # 200 OK
1005
+
1006
+ # B. 知识库
1007
+ # 侧栏应列出 ~/llm-wiki/ 下所有库 + 外部登记的库
1008
+ # 点不同库 → 应切换 + 自动选最近对话
1009
+
1010
+ # C. 对话
1011
+ # 在已有库新建对话 → 输入 → 发送 → 应流式返回
1012
+ # 切对话 → 重挂载 → 显示该对话历史
1013
+
1014
+ # D. 自动恢复
1015
+ # 关闭后端 → 重启 → 应自动恢复到 lastUsedKbPath
1016
+ ```
1017
+
1018
+ ### 10.5 安全审计 checklist
1019
+
1020
+ > ⚠️ 本 checklist 故意只扫 `server/src/`、`web/src/`,**不扫 `docs/`**——避免本设计文档自身的占位/示例文本被自报警。
1021
+
1022
+ - [ ] `grep -rE "sk-[a-zA-Z0-9_-]{20,}" ~/.llm-wiki-agent/` 无输出
1023
+ - [ ] `grep -rE "sk-[a-zA-Z0-9_-]{20,}" server/src/` 无输出
1024
+ - [ ] `grep -rE "sk-[a-zA-Z0-9_-]{20,}" web/src/` 无输出
1025
+ - [ ] `~/.pi/agent/auth.json` 权限 `-rw-------`(600)
1026
+ - [ ] 试 `curl 'http://localhost:8787/api/page?kb=<valid>&path=../../../../etc/passwd'` → 应 400
1027
+ - [ ] 试 `curl 'http://localhost:8787/api/refs?kb=/etc'` → 应 400(未注册的 kb)
1028
+ - [ ] React DevTools 看 SettingsPanel:保存后任何 state 都不含 key 明文
1029
+ - [ ] commit log + `server/src/` + `web/src/` 不含本机用户主目录绝对路径(请用相对路径或 `homedir()`;不在 `docs/` 范围内扫,文档可以使用抽象占位)
1030
+ - [ ] commit log 不含真实姓名(应统一 `Kiro`)
1031
+
1032
+ ### 10.6 体感测试
1033
+
1034
+ - [ ] 输入 `/` → 菜单 ≤1s 弹出
1035
+ - [ ] 输入 `@` → 菜单 ≤1s 弹出(首次扫描可 2s,缓存后必须 ≤1s)
1036
+ - [ ] 切对话 → 右抽屉**保持**
1037
+ - [ ] 点右抽屉关闭 → 平滑收起,不闪
1038
+ - [ ] 暗色主题:所有新组件无白色露馅、无对比度不足
1039
+ - [ ] 设置面板"测试连接"成功 → 绿色 + 文案,不只是文字
1040
+ - [ ] Tab 焦点流可控、Esc 关菜单/抽屉/面板、Enter 不误提交对话
1041
+
1042
+ ### 10.7 交付物对账单
1043
+
1044
+ **新增文件**(codex 必须全部产出):
1045
+ - [ ] `server/src/extensions/synthesis.ts`
1046
+ - [ ] `server/src/extensions/new-wiki.ts`
1047
+ - [ ] `server/src/pages.ts`
1048
+ - [ ] `server/src/auth.ts`
1049
+ - [ ] `web/src/components/ui/command.tsx`(shadcn 生成)
1050
+ - [ ] `web/src/components/CommandMenu.tsx`
1051
+ - [ ] `web/src/components/RefMenu.tsx`
1052
+ - [ ] `web/src/components/MarkdownView.tsx`
1053
+ - [ ] `web/src/components/RightDrawer.tsx`
1054
+ - [ ] `web/src/components/SettingsPanel.tsx`
1055
+
1056
+ **修改文件**(codex 必须全部触达):
1057
+ - [ ] `server/src/agent.ts`(注册 2 个新 Extension)
1058
+ - [ ] `server/src/index.ts`(新增 6 个路由)
1059
+ - [ ] `web/src/App.tsx`(右抽屉状态)
1060
+ - [ ] `web/src/components/ChatPanel.tsx`(挂菜单 + markdown 渲染 + chip + 设置按钮接通)
1061
+ - [ ] `web/src/lib/api.ts`(6 个新 client 函数)
1062
+ - [ ] `web/package.json`(3 个新依赖)
1063
+
1064
+ **新增 API**(curl 应全部 200):
1065
+ - [ ] `GET /api/commands`
1066
+ - [ ] `GET /api/refs?kb=...&q=...`
1067
+ - [ ] `GET /api/page?kb=...&path=...`
1068
+ - [ ] `GET /api/auth/status`
1069
+ - [ ] `POST /api/auth/set`
1070
+ - [ ] `POST /api/auth/test`
1071
+
1072
+ **新增 Extension 工具**(agent 应能调用):
1073
+ - [ ] `sediment_to_wiki`
1074
+ - [ ] `new_wiki`
1075
+
1076
+ **新增前端依赖**(package.json 应有):
1077
+ - [ ] `react-markdown` ^9
1078
+ - [ ] `remark-gfm` ^4
1079
+ - [ ] `cmdk` ^1
1080
+
1081
+ **Commit 数量**:8 个(顺序见 §9.3)
1082
+
1083
+ ### 10.8 issue 清单格式(策略 B:claude 列 → 作者决策 → 谁修)
1084
+
1085
+ 总验收发现问题 → 不直接改 → 列清单交作者决策。每条 issue 含:
1086
+
1087
+ ```markdown
1088
+ ### Issue #N:<一句话标题>
1089
+
1090
+ **严重度**:🔴 阻塞验收 / 🟡 不阻塞但应修 / 🟢 建议
1091
+
1092
+ **所属 step**:Step X
1093
+
1094
+ **期望**(来自本文档):
1095
+ > <引用本文档对应段落>
1096
+
1097
+ **实际**:
1098
+ <观察到的事实,附 commit hash + 文件路径 + 命令输出>
1099
+
1100
+ **复现**:
1101
+ \`\`\`bash
1102
+ <具体命令>
1103
+ \`\`\`
1104
+
1105
+ **根因猜测**:
1106
+ <我的分析;明确标"猜测" vs "事实">
1107
+
1108
+ **建议归属**:
1109
+ - [ ] codex 修(属于实现质量问题,回到 codex)
1110
+ - [ ] claude 修(属于设计文档没写清楚,由 claude 改文档 + 改实现)
1111
+ - [ ] 作者决策(不确定归属,需作者拍板)
1112
+
1113
+ **修复路径草案**:
1114
+ <可选,给一个修法思路>
1115
+ ```
1116
+
1117
+ 全部 issue 列完后给作者一个总览表:
1118
+
1119
+ ```
1120
+ | # | 严重度 | step | 一句话 | 建议归属 |
1121
+ |---|---|---|---|---|
1122
+ | 1 | 🔴 | 6 | 右抽屉点击 wiki 链接无反应 | codex |
1123
+ | 2 | 🟡 | 8 | 测试连接成功后无视觉反馈 | codex |
1124
+ | 3 | 🟢 | 5 | 缓存失效条件可优化 | 后续 |
1125
+ ```
1126
+
1127
+ 作者按归属批准 → claude/codex 分别修 → claude 再验收一轮 → 直到全绿。
1128
+
1129
+ ---
1130
+
1131
+ ## §11 文档维护
1132
+
1133
+ - **本文档 = 阶段二实施计划**。实施过程偏离时在本文档加"实施记录"块说明
1134
+ - **阶段二验收通过后**:
1135
+ - PRODUCT.md §10 阶段二章节填具体 commit hash + 完成情况 + 接受的妥协
1136
+ - PRODUCT.md §3.2 技术栈表加 2 行(react-markdown、cmdk)
1137
+ - PRODUCT.md 新增 **ADR-17:阶段二新增前端依赖(react-markdown + cmdk)**(ADR-16 已用于「长期合并」决策)
1138
+ - 本文档标 `✅ 已完成 <日期>`,不再修改(归档)
1139
+ - **阶段三启动**:新建 `docs/stage-3-design.md`,本文档作为参考样本