@research-copilot/plugin 1.1.16 → 1.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.claude-plugin/plugin.json +1 -1
- package/dist/.codex-plugin/plugin.toml +1 -1
- package/dist/.cursor-plugin/plugin.json +1 -1
- package/dist/.gemini-plugin/plugin.json +1 -1
- package/dist/.opencode-plugin/plugin.json +1 -1
- package/dist/.windsurf-plugin/plugin.json +1 -1
- package/dist/skills/ablation-planner/SKILL.md +126 -0
- package/dist/skills/alphaxiv/SKILL.md +186 -0
- package/dist/skills/analyze-results/SKILL.md +45 -0
- package/dist/skills/arxiv/SKILL.md +210 -0
- package/dist/skills/auto-paper-improvement-loop/SKILL.md +574 -0
- package/dist/skills/auto-review-loop/SKILL.md +370 -0
- package/dist/skills/auto-review-loop-llm/SKILL.md +247 -0
- package/dist/skills/auto-review-loop-minimax/SKILL.md +290 -0
- package/dist/skills/benchmark-paper-template/SKILL.md +142 -0
- package/dist/skills/benchmark-paper-template/references/benchmark-design.md +180 -0
- package/dist/skills/benchmark-paper-template/references/checklist.md +113 -0
- package/dist/skills/benchmark-paper-template/references/construction-pipeline.md +127 -0
- package/dist/skills/benchmark-paper-template/references/experiments.md +159 -0
- package/dist/skills/benchmark-paper-template/references/gap-analysis.md +86 -0
- package/dist/skills/benchmark-paper-template/references/instantiation-template.md +194 -0
- package/dist/skills/benchmark-paper-template/references/orchestrator-notes.md +96 -0
- package/dist/skills/benchmark-paper-template/references/paper-structure.md +209 -0
- package/dist/skills/citation-audit/SKILL.md +494 -0
- package/dist/skills/claims-drafting/SKILL.md +239 -0
- package/dist/skills/comm-lit-review/SKILL.md +299 -0
- package/dist/skills/comm-lit-review/references/domain-taxonomy.md +57 -0
- package/dist/skills/comm-lit-review/references/output-template.md +37 -0
- package/dist/skills/comm-lit-review/references/source-policy.md +99 -0
- package/dist/skills/comm-lit-review/references/venue-tiering.md +112 -0
- package/dist/skills/composer/SKILL.md +840 -0
- package/dist/skills/composer/references/section_guides.md +675 -0
- package/dist/skills/composer/references/writing_standards.md +629 -0
- package/dist/skills/composer/scripts/chapter_quality_check.py +470 -0
- package/dist/skills/composer/scripts/final_evaluation.py +550 -0
- package/dist/skills/deepxiv/SKILL.md +142 -0
- package/dist/skills/dse-loop/SKILL.md +277 -0
- package/dist/skills/embodiment-description/SKILL.md +129 -0
- package/dist/skills/exa-search/SKILL.md +192 -0
- package/dist/skills/experiment-audit/SKILL.md +262 -0
- package/dist/skills/experiment-bridge/SKILL.md +316 -0
- package/dist/skills/experiment-plan/SKILL.md +249 -0
- package/dist/skills/experiment-queue/SKILL.md +380 -0
- package/dist/skills/experiment-queue/scripts/build_manifest.py +142 -0
- package/dist/skills/experiment-queue/scripts/queue_manager.py +426 -0
- package/dist/skills/feishu-notify/SKILL.md +155 -0
- package/dist/skills/figure-description/SKILL.md +138 -0
- package/dist/skills/figure-designer/SKILL.md +207 -0
- package/dist/skills/figure-designer/references/design-rules.md +99 -0
- package/dist/skills/figure-designer/references/experimental-results.md +127 -0
- package/dist/skills/figure-designer/references/motivated-example.md +138 -0
- package/dist/skills/figure-designer/references/solution-overview.md +145 -0
- package/dist/skills/figure-designer/references/tools.md +124 -0
- package/dist/skills/figure-spec/SKILL.md +252 -0
- package/dist/skills/figure-spec/scripts/figure_renderer.py +799 -0
- package/dist/skills/formula-derivation/SKILL.md +280 -0
- package/dist/skills/gemini-search/SKILL.md +205 -0
- package/dist/skills/grant-proposal/SKILL.md +625 -0
- package/dist/skills/humanizer/AGENTS.md +25 -0
- package/dist/skills/humanizer/SKILL.md +621 -0
- package/dist/skills/idea-creator/SKILL.md +311 -0
- package/dist/skills/idea-discovery/SKILL.md +340 -0
- package/dist/skills/idea-discovery-robot/SKILL.md +362 -0
- package/dist/skills/idea-evaluator/SKILL.md +265 -0
- package/dist/skills/idea-evaluator/references/fatal-flaws.md +192 -0
- package/dist/skills/idea-evaluator/references/five-dimensions.md +251 -0
- package/dist/skills/idea-evaluator/references/lifecycle-capability-matching.md +177 -0
- package/dist/skills/idea-evaluator/references/paradigm-elephant.md +112 -0
- package/dist/skills/idea-evaluator/references/paradigm-examples.md +107 -0
- package/dist/skills/idea-evaluator/references/paradigm-first-principles.md +115 -0
- package/dist/skills/idea-evaluator/references/paradigm-hamming.md +137 -0
- package/dist/skills/idea-evaluator/references/paradigm-shift-probe.md +160 -0
- package/dist/skills/idea-evaluator/references/paradigm-technology-cycle.md +116 -0
- package/dist/skills/idea-evaluator/references/worked-examples.md +206 -0
- package/dist/skills/interview-cheatsheet/SKILL.md +245 -0
- package/dist/skills/intro-drafter/SKILL.md +250 -0
- package/dist/skills/intro-drafter/references/contribution-patterns.md +116 -0
- package/dist/skills/intro-drafter/references/flowchart.md +204 -0
- package/dist/skills/intro-drafter/references/paper-types.md +155 -0
- package/dist/skills/intro-drafter/references/running-example.md +133 -0
- package/dist/skills/intro-drafter/references/worked-examples.md +161 -0
- package/dist/skills/invention-structuring/SKILL.md +188 -0
- package/dist/skills/jurisdiction-format/SKILL.md +192 -0
- package/dist/skills/kill-argument/SKILL.md +384 -0
- package/dist/skills/llm-wiki/.mise.toml +2 -0
- package/dist/skills/llm-wiki/.nvmrc +1 -0
- package/dist/skills/llm-wiki/AGENTS.md +132 -0
- package/dist/skills/llm-wiki/CHANGELOG.md +459 -0
- package/dist/skills/llm-wiki/CLAUDE.md +109 -0
- package/dist/skills/llm-wiki/HERMES.md +44 -0
- package/dist/skills/llm-wiki/SKILL.md +1133 -0
- package/dist/skills/llm-wiki/assets/graph-demo.gif +0 -0
- package/dist/skills/llm-wiki/assets/graph-preview.png +0 -0
- package/dist/skills/llm-wiki/deps/LICENSE-d3.txt +13 -0
- package/dist/skills/llm-wiki/deps/LICENSE-marked.txt +44 -0
- package/dist/skills/llm-wiki/deps/LICENSE-purify.txt +568 -0
- package/{LICENSE → dist/skills/llm-wiki/deps/LICENSE-roughjs.txt} +1 -1
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/SKILL.md +261 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/references/config/first-time-setup.md +106 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/cdp.ts +179 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/constants.ts +13 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/defuddle-converter.ts +58 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/html-to-markdown.ts +135 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/legacy-converter.ts +629 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/main.ts +314 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/markdown-conversion-shared.ts +305 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/media-localizer.ts +317 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/package.json +14 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/paths.ts +29 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/package.json +9 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.test.ts +307 -0
- package/dist/skills/llm-wiki/deps/baoyu-url-to-markdown/scripts/vendor/baoyu-chrome-cdp/src/index.ts +523 -0
- package/dist/skills/llm-wiki/deps/d3.min.js +2 -0
- package/dist/skills/llm-wiki/deps/marked.min.js +6 -0
- package/dist/skills/llm-wiki/deps/purify.min.js +3 -0
- package/dist/skills/llm-wiki/deps/rough.min.js +7 -0
- package/dist/skills/llm-wiki/deps/youtube-transcript/SKILL.md +47 -0
- package/dist/skills/llm-wiki/deps/youtube-transcript/scripts/get_transcript.py +72 -0
- package/dist/skills/llm-wiki/docs/design/oriental-atlas/DESIGN.md +183 -0
- package/dist/skills/llm-wiki/docs/design/oriental-atlas/design-brief.md +170 -0
- package/dist/skills/llm-wiki/docs/design/oriental-atlas/oriental-editorial-atlas.html +1908 -0
- package/dist/skills/llm-wiki/docs/design/oriental-atlas/reviews/result-review.md +68 -0
- package/dist/skills/llm-wiki/docs/plans/2026-06-15-omp-tool-status-events-phased-plan.md +655 -0
- package/dist/skills/llm-wiki/docs/plans/2026-06-15-omp-tool-status-events-progress.json +913 -0
- package/dist/skills/llm-wiki/docs/spark/2026-06-15-omp-tool-status-events-design.md +174 -0
- package/dist/skills/llm-wiki/install.ps1 +87 -0
- package/dist/skills/llm-wiki/install.sh +722 -0
- package/dist/skills/llm-wiki/package-lock.json +10309 -0
- package/dist/skills/llm-wiki/package.json +24 -0
- package/dist/skills/llm-wiki/packages/graph-engine/package.json +33 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/anim/.gitkeep +1 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/anim/index.ts +179 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/diff.ts +121 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/graph-node.ts +37 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/index.ts +140 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/atlas.ts +18 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/index.ts +6 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/labels.ts +11 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/learning.ts +8 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/legacy-helpers.ts +1373 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/queue.ts +7 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/storage.ts +4 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/model/visibility.ts +9 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/.gitkeep +1 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/index.ts +59 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/legend.ts +25 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/model.ts +593 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/preview.ts +65 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/search.ts +48 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/static-renderer.ts +2783 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/toolbar.ts +40 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/render/viewport.ts +272 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/select/.gitkeep +1 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/select/index.ts +189 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/sim/index.ts +298 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/sim/pins.ts +96 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/themes/.gitkeep +1 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/themes/index.ts +8 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/themes/tokens.ts +107 -0
- package/dist/skills/llm-wiki/packages/graph-engine/src/types.ts +313 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/anim.test.ts +100 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/diff.test.ts +133 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/helpers.test.ts +275 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/learning.test.ts +259 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/preview.test.ts +56 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/queue.test.ts +114 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/render-model.test.ts +322 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/runtime-state.test.ts +281 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/search-and-legend.test.ts +111 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/select.test.ts +168 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/sim.test.ts +123 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/themes.test.ts +62 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/toolbar.test.ts +64 -0
- package/dist/skills/llm-wiki/packages/graph-engine/test/viewport.test.ts +167 -0
- package/dist/skills/llm-wiki/packages/graph-engine/tsconfig.json +17 -0
- package/dist/skills/llm-wiki/packages/graph-engine/vite.config.ts +15 -0
- package/dist/skills/llm-wiki/platforms/claude/CLAUDE.md +37 -0
- package/dist/skills/llm-wiki/platforms/claude/companions/llm-wiki-upgrade/SKILL.md +95 -0
- package/dist/skills/llm-wiki/platforms/codex/AGENTS.md +23 -0
- package/dist/skills/llm-wiki/scripts/adapter-state.sh +424 -0
- package/dist/skills/llm-wiki/scripts/build-graph-data.sh +395 -0
- package/dist/skills/llm-wiki/scripts/build-graph-html.sh +453 -0
- package/dist/skills/llm-wiki/scripts/cache.sh +352 -0
- package/dist/skills/llm-wiki/scripts/create-source-page.sh +100 -0
- package/dist/skills/llm-wiki/scripts/delete-helper.sh +68 -0
- package/dist/skills/llm-wiki/scripts/graph-analysis.js +732 -0
- package/dist/skills/llm-wiki/scripts/hook-session-start.sh +46 -0
- package/dist/skills/llm-wiki/scripts/init-wiki.sh +95 -0
- package/dist/skills/llm-wiki/scripts/lib/source-signal-eligibility.js +158 -0
- package/dist/skills/llm-wiki/scripts/lint-fix.sh +114 -0
- package/dist/skills/llm-wiki/scripts/lint-runner.sh +217 -0
- package/dist/skills/llm-wiki/scripts/runtime-context.sh +77 -0
- package/dist/skills/llm-wiki/scripts/shared-config.sh +83 -0
- package/dist/skills/llm-wiki/scripts/source-record-contract.tsv +10 -0
- package/dist/skills/llm-wiki/scripts/source-registry.sh +349 -0
- package/dist/skills/llm-wiki/scripts/source-registry.tsv +10 -0
- package/dist/skills/llm-wiki/scripts/source-signal-coverage.js +83 -0
- package/dist/skills/llm-wiki/scripts/validate-step1.sh +144 -0
- package/dist/skills/llm-wiki/scripts/wiki-compat.sh +267 -0
- package/dist/skills/llm-wiki/setup.sh +8 -0
- package/dist/skills/llm-wiki/templates/entity-template.md +30 -0
- package/dist/skills/llm-wiki/templates/graph-styles/wash/footer.html +27 -0
- package/dist/skills/llm-wiki/templates/graph-styles/wash/graph-wash-helpers.js +1326 -0
- package/dist/skills/llm-wiki/templates/graph-styles/wash/graph-wash.js +1009 -0
- package/dist/skills/llm-wiki/templates/graph-styles/wash/header.html +2002 -0
- package/dist/skills/llm-wiki/templates/index-en-template.md +51 -0
- package/dist/skills/llm-wiki/templates/index-template.md +51 -0
- package/dist/skills/llm-wiki/templates/log-en-template.md +11 -0
- package/dist/skills/llm-wiki/templates/log-template.md +11 -0
- package/dist/skills/llm-wiki/templates/overview-en-template.md +41 -0
- package/dist/skills/llm-wiki/templates/overview-template.md +41 -0
- package/dist/skills/llm-wiki/templates/purpose-en-template.md +16 -0
- package/dist/skills/llm-wiki/templates/purpose-template.md +16 -0
- package/dist/skills/llm-wiki/templates/query-template.md +19 -0
- package/dist/skills/llm-wiki/templates/schema-template.md +185 -0
- package/dist/skills/llm-wiki/templates/source-template.md +51 -0
- package/dist/skills/llm-wiki/templates/synthesis-template.md +25 -0
- package/dist/skills/llm-wiki/templates/topic-template.md +35 -0
- package/dist/skills/llm-wiki/tests/adapter-state.sh +338 -0
- package/dist/skills/llm-wiki/tests/browser/graph-density-preview.mjs +53 -0
- package/dist/skills/llm-wiki/tests/browser/graph-html-insights.mjs +41 -0
- package/dist/skills/llm-wiki/tests/browser/graph-node-slim.mjs +71 -0
- package/dist/skills/llm-wiki/tests/browser/graph-stage-4-5.mjs +717 -0
- package/dist/skills/llm-wiki/tests/expected/graph-data-empty.json +60 -0
- package/dist/skills/llm-wiki/tests/expected/graph-data-sample.json +396 -0
- package/dist/skills/llm-wiki/tests/expected/graph-interactive-basic.html +1736 -0
- package/dist/skills/llm-wiki/tests/expected/lint-output.txt +44 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/index.md +1 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Alpha.md +10 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Beta.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Delta.md +8 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/entities/Gamma.md +8 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/queries/20260422-abc.md +10 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/synthesis/Crystal.md +8 -0
- package/dist/skills/llm-wiki/tests/fixtures/coverage-sample-wiki/wiki/topics/Overview.md +9 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-empty-wiki/wiki/entities/.gitkeep +0 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/purpose.md +3 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Attention.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Decoder.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Encoder.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/GPT.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/entities/Transformer.md +13 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/sources/paper.md +9 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/topics/arch.md +12 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-data-sample-wiki/wiki/topics/finetune.md +9 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-basic/wiki/graph-data.json +40 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-dense/wiki/graph-data.json +3965 -0
- package/dist/skills/llm-wiki/tests/fixtures/graph-interactive-multicomm/wiki/graph-data.json +212 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/index.md +14 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/C++.md +6 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Lonely.md +4 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Other.md +8 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/entities/Real.md +7 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/sources/2026-01-01-test-source.md +15 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/sources/2026-02-01-inline-img.md +12 -0
- package/dist/skills/llm-wiki/tests/fixtures/lint-sample-wiki/wiki/topics/AIbasic.md +3 -0
- package/dist/skills/llm-wiki/tests/graph-analysis-helper.regression-1.sh +237 -0
- package/dist/skills/llm-wiki/tests/graph-browser-stage-4-5.regression-1.sh +157 -0
- package/dist/skills/llm-wiki/tests/graph-build-failures.regression-1.sh +91 -0
- package/dist/skills/llm-wiki/tests/graph-data-confidence-merge.regression-1.sh +309 -0
- package/dist/skills/llm-wiki/tests/graph-data-source-paths.regression-1.sh +49 -0
- package/dist/skills/llm-wiki/tests/graph-html-a11y.regression-1.sh +47 -0
- package/dist/skills/llm-wiki/tests/graph-html-brand-link.regression-1.sh +47 -0
- package/dist/skills/llm-wiki/tests/graph-html-density.regression-1.sh +228 -0
- package/dist/skills/llm-wiki/tests/graph-html-drawer-neighbors.regression-1.sh +47 -0
- package/dist/skills/llm-wiki/tests/graph-html-insights.regression-1.sh +80 -0
- package/dist/skills/llm-wiki/tests/graph-html-long-label.regression-1.sh +92 -0
- package/dist/skills/llm-wiki/tests/graph-html-minimap.regression-1.sh +51 -0
- package/dist/skills/llm-wiki/tests/graph-html-mobile.regression-1.sh +48 -0
- package/dist/skills/llm-wiki/tests/graph-html-oriental-atlas-contract.regression-1.sh +94 -0
- package/dist/skills/llm-wiki/tests/graph-html-oriental-design-contract.regression-1.sh +82 -0
- package/dist/skills/llm-wiki/tests/graph-html-search.regression-1.sh +52 -0
- package/dist/skills/llm-wiki/tests/graph-html-styles.regression-1.sh +66 -0
- package/dist/skills/llm-wiki/tests/graph-html-toolbar.regression-1.sh +62 -0
- package/dist/skills/llm-wiki/tests/js/graph-wash-bootstrap.test.js +110 -0
- package/dist/skills/llm-wiki/tests/js/graph-wash-helpers.test.js +296 -0
- package/dist/skills/llm-wiki/tests/js/graph-wash-learning.test.js +260 -0
- package/dist/skills/llm-wiki/tests/js/graph-wash-queue.test.js +115 -0
- package/dist/skills/llm-wiki/tests/js/graph-wash-runtime-state.test.js +282 -0
- package/dist/skills/llm-wiki/tests/js/source-signal-coverage.test.js +48 -0
- package/dist/skills/llm-wiki/tests/js/source-signal-eligibility.test.js +202 -0
- package/dist/skills/llm-wiki/tests/lib/graph-html-engine-helpers.sh +110 -0
- package/dist/skills/llm-wiki/tests/lint-output.regression-1.sh +32 -0
- package/dist/skills/llm-wiki/tests/regression.sh +1754 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/.gitkeep +0 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/SKILL.md +590 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/__init__.py +1 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/accept_changes.py +135 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/comment.py +318 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/pack.py +159 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/soffice.py +183 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/unpack.py +132 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validate.py +111 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/base.py +847 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/docx.py +446 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/comments.xml +3 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/docx/scripts/templates/people.xml +3 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/SKILL.md +314 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/forms.md +294 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/reference.md +612 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/create_validation_image.py +37 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/SKILL.md +232 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/editing.md +205 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/pptxgenjs.md +420 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/__init__.py +0 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/add_slide.py +195 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/clean.py +286 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/pack.py +159 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/soffice.py +183 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/unpack.py +132 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validate.py +111 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/base.py +847 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/pptx/scripts/thumbnail.py +289 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/SKILL.md +292 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/pack.py +159 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/soffice.py +183 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/unpack.py +132 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validate.py +111 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/dist/skills/llm-wiki/workbench/.claude/skills/xlsx/scripts/recalc.py +184 -0
- package/dist/skills/llm-wiki/workbench/AGENTS.md +110 -0
- package/dist/skills/llm-wiki/workbench/CLAUDE.md +54 -0
- package/dist/skills/llm-wiki/workbench/PRODUCT.md +1268 -0
- package/dist/skills/llm-wiki/workbench/docs/current-kb-retrieval-design.md +587 -0
- package/dist/skills/llm-wiki/workbench/docs/graph-evolution-1-design.md +210 -0
- package/dist/skills/llm-wiki/workbench/docs/stage-2-design.md +1139 -0
- package/dist/skills/llm-wiki/workbench/docs/stage-3-design.md +1269 -0
- package/dist/skills/llm-wiki/workbench/docs/stage-3.5-design.md +1164 -0
- package/dist/skills/llm-wiki/workbench/docs/stage-4-design.md +504 -0
- package/dist/skills/llm-wiki/workbench/docs/stage-4.5-design.md +195 -0
- package/dist/skills/llm-wiki/workbench/docs/superpowers/specs/2026-05-28-resizable-preview-layout-design.md +165 -0
- package/dist/skills/llm-wiki/workbench/docs/superpowers/specs/2026-05-28-settings-panel-scroll-fix.md +50 -0
- package/dist/skills/llm-wiki/workbench/server/package.json +29 -0
- package/dist/skills/llm-wiki/workbench/server/src/agent.ts +457 -0
- package/dist/skills/llm-wiki/workbench/server/src/artifacts.ts +248 -0
- package/dist/skills/llm-wiki/workbench/server/src/auth.ts +164 -0
- package/dist/skills/llm-wiki/workbench/server/src/config.ts +130 -0
- package/dist/skills/llm-wiki/workbench/server/src/conversations.test.ts +121 -0
- package/dist/skills/llm-wiki/workbench/server/src/conversations.ts +255 -0
- package/dist/skills/llm-wiki/workbench/server/src/digest/batch.ts +189 -0
- package/dist/skills/llm-wiki/workbench/server/src/digest/concurrency.test.ts +36 -0
- package/dist/skills/llm-wiki/workbench/server/src/digest/concurrency.ts +31 -0
- package/dist/skills/llm-wiki/workbench/server/src/digest/subagent.ts +91 -0
- package/dist/skills/llm-wiki/workbench/server/src/extensions/artifacts.ts +81 -0
- package/dist/skills/llm-wiki/workbench/server/src/extensions/knowledge-base.ts +263 -0
- package/dist/skills/llm-wiki/workbench/server/src/extensions/new-wiki.ts +42 -0
- package/dist/skills/llm-wiki/workbench/server/src/extensions/synthesis.ts +172 -0
- package/dist/skills/llm-wiki/workbench/server/src/graph-watcher.test.ts +196 -0
- package/dist/skills/llm-wiki/workbench/server/src/graph.test.ts +84 -0
- package/dist/skills/llm-wiki/workbench/server/src/graph.ts +379 -0
- package/dist/skills/llm-wiki/workbench/server/src/index.ts +1148 -0
- package/dist/skills/llm-wiki/workbench/server/src/knowledge-bases.test.ts +30 -0
- package/dist/skills/llm-wiki/workbench/server/src/knowledge-bases.ts +321 -0
- package/dist/skills/llm-wiki/workbench/server/src/pages.test.ts +16 -0
- package/dist/skills/llm-wiki/workbench/server/src/pages.ts +158 -0
- package/dist/skills/llm-wiki/workbench/server/src/retrieval.test.ts +151 -0
- package/dist/skills/llm-wiki/workbench/server/src/retrieval.ts +427 -0
- package/dist/skills/llm-wiki/workbench/server/src/tool-status-events.test.ts +363 -0
- package/dist/skills/llm-wiki/workbench/server/src/tool-status-events.ts +616 -0
- package/dist/skills/llm-wiki/workbench/server/src/wiki-init.test.ts +19 -0
- package/dist/skills/llm-wiki/workbench/server/src/wiki-init.ts +188 -0
- package/dist/skills/llm-wiki/workbench/server/tsconfig.json +10 -0
- package/dist/skills/llm-wiki/workbench/tsconfig.json +20 -0
- package/dist/skills/llm-wiki/workbench/web/components.json +21 -0
- package/dist/skills/llm-wiki/workbench/web/eslint.config.js +22 -0
- package/dist/skills/llm-wiki/workbench/web/index.html +13 -0
- package/dist/skills/llm-wiki/workbench/web/package.json +48 -0
- package/dist/skills/llm-wiki/workbench/web/src/App.tsx +749 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/AddExternalDialog.tsx +373 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ArtifactView.tsx +15 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/BatchDigestPanel.tsx +106 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ChatPanel.tsx +821 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/CommandMenu.tsx +65 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ExportButtons.tsx +54 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/GraphPanel.tsx +516 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/GraphReader.tsx +48 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/GraphSelection.tsx +100 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/MarkdownView.tsx +56 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/NewWikiDialog.tsx +101 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/RefMenu.tsx +40 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/RightDrawer.tsx +227 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/SettingsPanel.tsx +331 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/Sidebar.tsx +436 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ToolHistorySummary.tsx +123 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ToolStatusRunway.tsx +90 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/renderers/DownloadOnlyRenderer.tsx +88 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/renderers/HtmlRenderer.tsx +92 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ui/button.tsx +52 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ui/command.tsx +50 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ui/dialog.tsx +156 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ui/input.tsx +21 -0
- package/dist/skills/llm-wiki/workbench/web/src/components/ui/tooltip.tsx +57 -0
- package/dist/skills/llm-wiki/workbench/web/src/index.css +1737 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/api.ts +648 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/drawer-state.ts +79 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/graph-reader.ts +25 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/graph-selection-drawer.ts +35 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/graph-selection.ts +96 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/legacy-tool-status.ts +113 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/sse.ts +72 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/tool-status-format.ts +170 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/tool-status-model.ts +392 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/utils.ts +10 -0
- package/dist/skills/llm-wiki/workbench/web/src/lib/wiki-links.ts +32 -0
- package/dist/skills/llm-wiki/workbench/web/src/main.tsx +10 -0
- package/dist/skills/llm-wiki/workbench/web/test/api.test.ts +61 -0
- package/dist/skills/llm-wiki/workbench/web/test/chat-panel-tool-status.test.tsx +26 -0
- package/dist/skills/llm-wiki/workbench/web/test/graph-drawer-state.test.ts +78 -0
- package/dist/skills/llm-wiki/workbench/web/test/graph-reader-request.test.ts +32 -0
- package/dist/skills/llm-wiki/workbench/web/test/graph-reader.test.ts +62 -0
- package/dist/skills/llm-wiki/workbench/web/test/graph-selection-drawer.test.ts +56 -0
- package/dist/skills/llm-wiki/workbench/web/test/graph-selection.test.ts +83 -0
- package/dist/skills/llm-wiki/workbench/web/test/tool-history-summary.test.tsx +124 -0
- package/dist/skills/llm-wiki/workbench/web/test/tool-status-format.test.ts +107 -0
- package/dist/skills/llm-wiki/workbench/web/test/tool-status-model.test.ts +324 -0
- package/dist/skills/llm-wiki/workbench/web/test/tool-status-runway.test.ts +134 -0
- package/dist/skills/llm-wiki/workbench/web/test/wiki-links.test.ts +23 -0
- package/dist/skills/llm-wiki/workbench/web/tsconfig.app.json +30 -0
- package/dist/skills/llm-wiki/workbench/web/tsconfig.json +7 -0
- package/dist/skills/llm-wiki/workbench/web/tsconfig.node.json +24 -0
- package/dist/skills/llm-wiki/workbench/web/vite.config.ts +26 -0
- package/dist/skills/mean-reviewer/SECURITY.md +23 -0
- package/dist/skills/mean-reviewer/SKILL.md +203 -0
- package/dist/skills/mean-reviewer/examples/13446_1000_Layer_Networks_for_.pdf +0 -0
- package/dist/skills/mean-reviewer/examples/13446_mean_reviewer.md +116 -0
- package/dist/skills/mean-reviewer/examples/13446_mean_reviewer_author_rebuttal_simulated.md +282 -0
- package/dist/skills/mean-reviewer/examples/13446_mean_reviewer_reply.md +91 -0
- package/dist/skills/mean-reviewer/examples/13446_official_review.json +973 -0
- package/dist/skills/mean-reviewer/examples/ChatGPT_AC_Roleplay.jpeg +0 -0
- package/dist/skills/medical-imaging-review/SKILL.md +295 -0
- package/dist/skills/medical-imaging-review/references/CITATION_INTEGRITY.md +233 -0
- package/dist/skills/medical-imaging-review/references/DOMAINS.md +302 -0
- package/dist/skills/medical-imaging-review/references/HALLUCINATION_PATTERNS.md +211 -0
- package/dist/skills/medical-imaging-review/references/MCP_SETUP.md +216 -0
- package/dist/skills/medical-imaging-review/references/PARADIGM.md +221 -0
- package/dist/skills/medical-imaging-review/references/QUALITY_CHECKLIST.md +169 -0
- package/dist/skills/medical-imaging-review/references/TEMPLATES.md +291 -0
- package/dist/skills/medical-imaging-review/references/WORKFLOW.md +289 -0
- package/dist/skills/mermaid-diagram/SKILL.md +379 -0
- package/dist/skills/meta-apply/SKILL.md +137 -0
- package/dist/skills/meta-optimize/SKILL.md +253 -0
- package/dist/skills/monitor-experiment/SKILL.md +98 -0
- package/dist/skills/novelty-check/SKILL.md +89 -0
- package/dist/skills/openalex/SKILL.md +228 -0
- package/dist/skills/overleaf-sync/SKILL.md +220 -0
- package/dist/skills/paper-claim-audit/SKILL.md +340 -0
- package/dist/skills/paper-compile/SKILL.md +253 -0
- package/dist/skills/paper-figure/SKILL.md +279 -0
- package/dist/skills/paper-illustration/SKILL.md +690 -0
- package/dist/skills/paper-illustration-image2/SKILL.md +383 -0
- package/dist/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
- package/dist/skills/paper-plan/SKILL.md +278 -0
- package/dist/skills/paper-poster/SKILL.md +19 -0
- package/dist/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
- package/dist/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
- package/dist/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
- package/dist/skills/paper-poster-html/NOTICE.md +57 -0
- package/dist/skills/paper-poster-html/SKILL.md +357 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
- package/dist/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
- package/dist/skills/paper-poster-html/scripts/asset_check.py +897 -0
- package/dist/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
- package/dist/skills/paper-poster-html/scripts/poster_check.py +251 -0
- package/dist/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
- package/dist/skills/paper-poster-html/scripts/render_preview.py +217 -0
- package/dist/skills/paper-poster-html/scripts/run_gates.py +556 -0
- package/dist/skills/paper-poster-html/scripts/style_check.py +1324 -0
- package/dist/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
- package/dist/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
- package/dist/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
- package/dist/skills/paper-poster-html/templates/portrait_2col.html +947 -0
- package/dist/skills/paper-poster-html/templates/tokens/acl.json +9 -0
- package/dist/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
- package/dist/skills/paper-poster-html/templates/tokens/generic.json +9 -0
- package/dist/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
- package/dist/skills/paper-poster-html/templates/tokens/icml.json +9 -0
- package/dist/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
- package/dist/skills/paper-slide-deck/SKILL.md +464 -0
- package/dist/skills/paper-slide-deck/references/analysis-framework.md +392 -0
- package/dist/skills/paper-slide-deck/references/base-prompt.md +70 -0
- package/dist/skills/paper-slide-deck/references/content-rules.md +95 -0
- package/dist/skills/paper-slide-deck/references/figure-container-template.md +177 -0
- package/dist/skills/paper-slide-deck/references/modification-guide.md +85 -0
- package/dist/skills/paper-slide-deck/references/outline-template.md +437 -0
- package/dist/skills/paper-slide-deck/references/styles/academic-paper.md +109 -0
- package/dist/skills/paper-slide-deck/references/styles/blueprint.md +67 -0
- package/dist/skills/paper-slide-deck/references/styles/bold-editorial.md +70 -0
- package/dist/skills/paper-slide-deck/references/styles/chalkboard.md +68 -0
- package/dist/skills/paper-slide-deck/references/styles/corporate.md +69 -0
- package/dist/skills/paper-slide-deck/references/styles/dark-atmospheric.md +69 -0
- package/dist/skills/paper-slide-deck/references/styles/editorial-infographic.md +73 -0
- package/dist/skills/paper-slide-deck/references/styles/fantasy-animation.md +69 -0
- package/dist/skills/paper-slide-deck/references/styles/intuition-machine.md +72 -0
- package/dist/skills/paper-slide-deck/references/styles/minimal.md +64 -0
- package/dist/skills/paper-slide-deck/references/styles/notion.md +69 -0
- package/dist/skills/paper-slide-deck/references/styles/pixel-art.md +67 -0
- package/dist/skills/paper-slide-deck/references/styles/scientific.md +73 -0
- package/dist/skills/paper-slide-deck/references/styles/sketch-notes.md +66 -0
- package/dist/skills/paper-slide-deck/references/styles/vector-illustration.md +72 -0
- package/dist/skills/paper-slide-deck/references/styles/vintage.md +73 -0
- package/dist/skills/paper-slide-deck/references/styles/watercolor.md +68 -0
- package/dist/skills/paper-slide-deck/scripts/apply-template.ts +282 -0
- package/dist/skills/paper-slide-deck/scripts/detect-figures.ts +283 -0
- package/dist/skills/paper-slide-deck/scripts/extract-figure.ts +140 -0
- package/dist/skills/paper-slide-deck/scripts/generate-slides.py +182 -0
- package/dist/skills/paper-slide-deck/scripts/merge-to-pdf.ts +116 -0
- package/dist/skills/paper-slide-deck/scripts/merge-to-pptx.ts +137 -0
- package/dist/skills/paper-slide-deck/scripts/package-lock.json +899 -0
- package/dist/skills/paper-slide-deck/scripts/package.json +8 -0
- package/dist/skills/paper-slides/SKILL.md +571 -0
- package/dist/skills/paper-talk/SKILL.md +381 -0
- package/dist/skills/paper-write/SKILL.md +411 -0
- package/dist/skills/paper-write/templates/IEEEtran.bst +2409 -0
- package/dist/skills/paper-write/templates/IEEEtran.cls +6347 -0
- package/dist/skills/paper-write/templates/aaai2026.bst +1493 -0
- package/dist/skills/paper-write/templates/aaai2026.sty +315 -0
- package/dist/skills/paper-write/templates/aaai2026.tex +952 -0
- package/dist/skills/paper-write/templates/acl.sty +312 -0
- package/dist/skills/paper-write/templates/acl2026.tex +377 -0
- package/dist/skills/paper-write/templates/acl_natbib.bst +1940 -0
- package/dist/skills/paper-write/templates/acm.bst +3081 -0
- package/dist/skills/paper-write/templates/acm_mm2026.tex +204 -0
- package/dist/skills/paper-write/templates/acmart.cls +3520 -0
- package/dist/skills/paper-write/templates/cvpr.bst +1448 -0
- package/dist/skills/paper-write/templates/cvpr.sty +508 -0
- package/dist/skills/paper-write/templates/cvpr2026.tex +63 -0
- package/dist/skills/paper-write/templates/iclr2026.tex +84 -0
- package/dist/skills/paper-write/templates/iclr2026_conference.bst +1440 -0
- package/dist/skills/paper-write/templates/iclr2026_conference.sty +246 -0
- package/dist/skills/paper-write/templates/icml2025.tex +87 -0
- package/dist/skills/paper-write/templates/icml2026.sty +767 -0
- package/dist/skills/paper-write/templates/icml2026.tex +662 -0
- package/dist/skills/paper-write/templates/ieee_conference.tex +89 -0
- package/dist/skills/paper-write/templates/ieee_journal.tex +93 -0
- package/dist/skills/paper-write/templates/math_commands.tex +48 -0
- package/dist/skills/paper-write/templates/neurips2025.tex +80 -0
- package/dist/skills/paper-write/templates/neurips2026.tex +493 -0
- package/dist/skills/paper-write/templates/neurips_2026.sty +437 -0
- package/dist/skills/paper-writing/SKILL.md +632 -0
- package/dist/skills/patent-novelty-check/SKILL.md +153 -0
- package/dist/skills/patent-pipeline/SKILL.md +344 -0
- package/dist/skills/patent-review/SKILL.md +202 -0
- package/dist/skills/pixel-art/SKILL.md +139 -0
- package/dist/skills/pre-submission-reviewer/SKILL.md +247 -0
- package/dist/skills/pre-submission-reviewer/references/forbidden-patterns.md +163 -0
- package/dist/skills/pre-submission-reviewer/references/grammar-rules.md +135 -0
- package/dist/skills/pre-submission-reviewer/references/latex-rules.md +158 -0
- package/dist/skills/pre-submission-reviewer/references/logic-and-structure.md +125 -0
- package/dist/skills/pre-submission-reviewer/references/section-guides.md +169 -0
- package/dist/skills/prior-art-search/SKILL.md +146 -0
- package/dist/skills/proof-checker/SKILL.md +499 -0
- package/dist/skills/proof-writer/SKILL.md +222 -0
- package/dist/skills/qzcli/SKILL.md +316 -0
- package/dist/skills/rebuttal/SKILL.md +304 -0
- package/dist/skills/render-html/SKILL.md +299 -0
- package/dist/skills/render-html/scripts/render_html.py +905 -0
- package/dist/skills/render-html/scripts/templates/academic.html +342 -0
- package/dist/skills/render-html/scripts/templates/dashboard.html +333 -0
- package/dist/skills/research-lit/SKILL.md +353 -0
- package/dist/skills/research-paper-writing/SKILL.md +99 -0
- package/dist/skills/research-paper-writing/agents/openai.yaml +4 -0
- package/dist/skills/research-paper-writing/references/abstract.md +102 -0
- package/dist/skills/research-paper-writing/references/conclusion.md +35 -0
- package/dist/skills/research-paper-writing/references/does-my-writing-flow-source.md +45 -0
- package/dist/skills/research-paper-writing/references/examples/abstract/template-a.md +21 -0
- package/dist/skills/research-paper-writing/references/examples/abstract/template-b.md +34 -0
- package/dist/skills/research-paper-writing/references/examples/abstract/template-c.md +28 -0
- package/dist/skills/research-paper-writing/references/examples/abstract-examples.md +13 -0
- package/dist/skills/research-paper-writing/references/examples/index.md +21 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/novel-task-challenge-decomposition.md +18 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-not-recommended-abstract-only.md +30 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-1-one-contribution-multi-advantages.md +30 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-2-two-contributions.md +34 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-3-new-module-on-existing-pipeline.md +18 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/pipeline-version-4-observation-driven.md +16 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-1-existing-task.md +32 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-2-existing-task-insight-backed-by-traditional.md +33 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/technical-challenge-version-3-novel-task.md +21 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/version-1-task-then-application.md +14 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/version-2-application-first.md +10 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/version-3-general-to-specific-setting.md +14 -0
- package/dist/skills/research-paper-writing/references/examples/introduction/version-4-open-with-challenge.md +20 -0
- package/dist/skills/research-paper-writing/references/examples/introduction-examples.md +25 -0
- package/dist/skills/research-paper-writing/references/examples/method/example-of-the-three-elements.md +67 -0
- package/dist/skills/research-paper-writing/references/examples/method/method-writing-common-issues-note.md +10 -0
- package/dist/skills/research-paper-writing/references/examples/method/module-design-instant-ngp.md +55 -0
- package/dist/skills/research-paper-writing/references/examples/method/module-motivation-patterns.md +15 -0
- package/dist/skills/research-paper-writing/references/examples/method/module-triad-neural-body.md +19 -0
- package/dist/skills/research-paper-writing/references/examples/method/neural-body-annotated-figure-text.md +66 -0
- package/dist/skills/research-paper-writing/references/examples/method/overview-template.md +30 -0
- package/dist/skills/research-paper-writing/references/examples/method/pre-writing-questions.md +17 -0
- package/dist/skills/research-paper-writing/references/examples/method/section-skeleton.md +9 -0
- package/dist/skills/research-paper-writing/references/examples/method-examples.md +24 -0
- package/dist/skills/research-paper-writing/references/experiments.md +102 -0
- package/dist/skills/research-paper-writing/references/introduction.md +408 -0
- package/dist/skills/research-paper-writing/references/method.md +196 -0
- package/dist/skills/research-paper-writing/references/paper-review.md +86 -0
- package/dist/skills/research-paper-writing/references/related-work.md +41 -0
- package/dist/skills/research-pipeline/SKILL.md +257 -0
- package/dist/skills/research-proposal/SKILL.md +573 -0
- package/dist/skills/research-proposal/assets/proposal_scaffold_en.md +323 -0
- package/dist/skills/research-proposal/assets/proposal_scaffold_zh.md +346 -0
- package/dist/skills/research-proposal/references/DOMAIN_TEMPLATES.md +518 -0
- package/dist/skills/research-proposal/references/LITERATURE_WORKFLOW.md +529 -0
- package/dist/skills/research-proposal/references/QUALITY_CHECKLIST.md +325 -0
- package/dist/skills/research-proposal/references/STRUCTURE_GUIDE.md +398 -0
- package/dist/skills/research-proposal/references/WRITING_STYLE_GUIDE.md +661 -0
- package/dist/skills/research-refine/SKILL.md +716 -0
- package/dist/skills/research-refine-pipeline/SKILL.md +186 -0
- package/dist/skills/research-review/SKILL.md +119 -0
- package/dist/skills/research-wiki/SKILL.md +373 -0
- package/dist/skills/resubmit-pipeline/SKILL.md +427 -0
- package/dist/skills/result-to-claim/SKILL.md +190 -0
- package/dist/skills/run-experiment/SKILL.md +227 -0
- package/dist/skills/scientific-figure-making/SKILL.md +38 -0
- package/dist/skills/scientific-figure-making/references/api.md +152 -0
- package/dist/skills/scientific-figure-making/references/common-patterns.md +74 -0
- package/dist/skills/scientific-figure-making/references/demos.md +30 -0
- package/dist/skills/scientific-figure-making/references/design-theory.md +138 -0
- package/dist/skills/scientific-figure-making/references/tutorials.md +135 -0
- package/dist/skills/semantic-scholar/SKILL.md +219 -0
- package/dist/skills/serverless-modal/SKILL.md +324 -0
- package/dist/skills/slides-polish/SKILL.md +563 -0
- package/dist/skills/specification-writing/SKILL.md +211 -0
- package/dist/skills/strategist/SKILL.md +670 -0
- package/dist/skills/strategist/references/quality_standards.md +336 -0
- package/dist/skills/strategist/references/search_strategy.md +459 -0
- package/dist/skills/strategist/scripts/evaluate_samples.py +300 -0
- package/dist/skills/strategist/scripts/gap_analysis.py +399 -0
- package/dist/skills/system-profile/SKILL.md +103 -0
- package/dist/skills/tech-paper-template/SKILL.md +192 -0
- package/dist/skills/tech-paper-template/references/consistency-checks.md +166 -0
- package/dist/skills/tech-paper-template/references/paper-types.md +127 -0
- package/dist/skills/tech-paper-template/references/thinking-template.md +194 -0
- package/dist/skills/tech-paper-template/references/worked-examples.md +124 -0
- package/dist/skills/training-check/SKILL.md +83 -0
- package/dist/skills/vast-gpu/SKILL.md +380 -0
- package/dist/skills/vibe-research-workflow/SKILL.md +189 -0
- package/dist/skills/vibe-research-workflow/references/behavior-guidelines.md +149 -0
- package/dist/skills/vibe-research-workflow/references/tool-selection.md +144 -0
- package/dist/skills/vibe-research-workflow/references/vibe-coding.md +154 -0
- package/dist/skills/vibe-research-workflow/references/vibe-figure.md +131 -0
- package/dist/skills/vibe-research-workflow/references/vibe-writing.md +181 -0
- package/dist/skills/wiki-enrich/SKILL.md +254 -0
- package/dist/skills/writing-systems-papers/SKILL.md +184 -0
- package/package.json +1 -1
|
@@ -0,0 +1,1269 @@
|
|
|
1
|
+
# 阶段三设计文档:产出能力(PDF / Word / PPT / Excel / HTML)
|
|
2
|
+
|
|
3
|
+
> 状态:**设计待 codex 实施** · 创建于 2026-05-27 · 阶段三验收通过后归档不再修改
|
|
4
|
+
>
|
|
5
|
+
> 与 PRODUCT.md 的关系:PRODUCT.md §4 阶段三 + §10 是**顶层意图**,本文档是**落地细则**。冲突时以 PRODUCT.md 为准;本文档外发现新决策需要先回写 PRODUCT.md。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## §0 文档用法
|
|
10
|
+
|
|
11
|
+
- **范围**:阶段三 8 个 step 的实施细则、API 契约、新增依赖、验收命令、执行 plan、总验收剧本
|
|
12
|
+
- **给谁看**:
|
|
13
|
+
- codex(实施):按 §9 执行 plan 一次性做完 8 step,每 step 一个 commit,最后提 1 个 PR
|
|
14
|
+
- claude(总验收):按 §10 端到端验收,发现问题按 §10.8 列 issue 清单交作者决策
|
|
15
|
+
- 作者(决策):审 issue 清单决定让 codex 修还是让 claude 修
|
|
16
|
+
- **不在范围**:图谱(阶段四)、Tauri 打包(阶段五)、open-design 的 130+ 个设计向 Skill(仅借鉴架构思想,不批量挂载)
|
|
17
|
+
- **工作流**(沿用阶段二验证有效的流程):
|
|
18
|
+
1. 作者按 §9.6 完成前置准备(vendor anthropics/skills 进项目、装/确认依赖)
|
|
19
|
+
2. codex 按 §9 一次性做完 8 step,提 1 个 PR(8 commit + 允许 fix-commit)
|
|
20
|
+
3. claude 按 §10 端到端验收 + 安全审计 + §10.7 对账
|
|
21
|
+
4. claude 列 issue 清单(§10.8 格式),作者决策让 codex 还是 claude 修
|
|
22
|
+
5. 全过后作者按 §11 回写 PRODUCT.md
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## §1 阶段三总览
|
|
27
|
+
|
|
28
|
+
**目标**:让"对话 → 产出"成为视觉广告位。用户**打开界面就能看到能产出什么**(PDF/Word/PPT/Excel/HTML),不必通过 README 或 `/` 试探。
|
|
29
|
+
|
|
30
|
+
**核心设计原则**(贯穿阶段三所有 UI 决策):
|
|
31
|
+
|
|
32
|
+
> **打开界面看到功能(discoverability first)**:用户不读 README,只扫一眼界面找能用的功能。
|
|
33
|
+
|
|
34
|
+
**8 step 概览**:
|
|
35
|
+
|
|
36
|
+
| # | Step | 后端 | 前端 | 重难度 |
|
|
37
|
+
|---|---|:---:|:---:|---|
|
|
38
|
+
| 1 | anthropics/skills 4 个 vendor 进项目 + Skill loader 收紧(项目优先、全局折叠)| ✅ | — | 🟡 含 TBD-3 |
|
|
39
|
+
| 2 | ArtifactManifest 数据契约 + 后端 artifacts API + prepare/finalize Extension 工具 | ✅ | — | 🟡 含 TBD-2 |
|
|
40
|
+
| 3 | 产出按钮区(5 个固定按钮)+ 三通道触发逻辑 | — | ✅ | 🟢 |
|
|
41
|
+
| 4 | 右抽屉多产物 tab 切换 UI | — | ✅ | 🟡 |
|
|
42
|
+
| 5 | HtmlRenderer(iframe sandbox + srcDoc inline)| — | ✅ | 🟡 含 TBD-4 |
|
|
43
|
+
| 6 | DownloadOnlyRenderer(pdf/docx/pptx/xlsx 元数据卡片 + 下载按钮)| — | ✅ | 🟢 |
|
|
44
|
+
| 7 | 设置面板加 toggle:"展示用户全局 Skill"(默认 off)| ✅ | ✅ | 🟢 |
|
|
45
|
+
| 8 | 总验收 + UX 体感打磨 | — | ✅ | 🟢 |
|
|
46
|
+
|
|
47
|
+
**总验收 3 条**(来自 PRODUCT.md §4 阶段三 + 我们的扩展):
|
|
48
|
+
|
|
49
|
+
1. **5 种格式产出全过**:一次对话能产出 HTML、PDF、Word、PPT、Excel 五种格式,UI 内可直接预览(HTML)或下载(其余 4 种)
|
|
50
|
+
2. **三通道触发等价**:点按钮 / 输 `/pdf` / 自然语言 "做成 PDF" 三种方式都能触发同一条产出流程,产物 manifest 结构一致
|
|
51
|
+
3. **Skill 噪音可控**:默认 `/` 菜单只显示项目内置 + pi 默认 Skill,用户全局 Skill(如 30+ cc-switch 软链)默认隐藏在折叠区;设置面板有 toggle 可打开
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## §2 关键技术决策
|
|
56
|
+
|
|
57
|
+
| ID | 决策 | 选定 | 拒绝项 & 拒绝原因 |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| E1 | 图谱集成时机 | **推迟到阶段四**(作者要重新构思图谱设计)| 阶段三塞图谱:范围过大;图谱设计未定稿 |
|
|
60
|
+
| E2 | Skill 来源 | **anthropics/skills 4 个**(docx/pdf/pptx/xlsx)作为基础能力底座 | open-design 132 个:除了产出向其余无关;anthropics 7+ 个:阶段三只取产出基础,其余精选放阶段后规划 |
|
|
61
|
+
| E3 | Skill 挂载方式 | **项目内置 vendor 到 `<repo>/.claude/skills/<skill>/`** | submodule:新手不友好(多一步 init);用户手装:违反"打开界面看功能"原则,用户不读 README |
|
|
62
|
+
| E4 | Skill loader 优先级 | **项目 `<repo>/.claude/skills/` > pi 默认 `~/.pi/agent/skills/` > 用户全局 `~/.claude/skills/`(默认隐藏)** | 全部混合显示:阶段二实测被 30+ 全局 Skill 淹没;仅项目级:用户的 pi-skills 也用不了 |
|
|
63
|
+
| E5 | 触发形态 | **三通道**:固定按钮区 + `/` 命令补全 + 自然语言 | 仅 `/`:违反"打开界面看功能";仅按钮:熟手快键缺失;仅自然语言:discoverability 0 |
|
|
64
|
+
| E6 | 按钮数量 | **v1 固定 5 个**(PDF / Word / PPT / Excel / HTML) | 用户可配:MVP 阶段过早灵活;按钮 > 5 个:折叠到"更多 ▼"是阶段后的事 |
|
|
65
|
+
| E7 | 按钮位置 | **输入框下方一行**(textarea 与 status/send 行之间) | 输入框右侧聚合 + 菜单:藏一层,违反 discoverability;assistant 气泡末尾:每条都加噪音 |
|
|
66
|
+
| E8 | 多产物 UI | **右抽屉 tab 切换**(复用阶段二 RightDrawer 容器) | 侧栏新增"产物区":跨对话不切合;每次新窗口:丢失上下文 |
|
|
67
|
+
| E9 | HTML 预览模式 | **iframe + sandbox + srcDoc inline**(单文件 HTML 注入)| URL-load 双模式:open-design 用,但需要 host-iframe bridge,v1 过重 |
|
|
68
|
+
| E10 | PDF/docx/xlsx/pptx 预览 | **不浏览器渲染**:元数据卡片 + 下载按钮(系统应用打开)| PPTXjs / pdf.js / docx-preview:兼容性坑深、字体/动画/公式渲染不全;用户下载用 Keynote/Office/Numbers 更顺 |
|
|
69
|
+
| E11 | 产物元数据契约 | **ArtifactManifest**(借鉴 open-design 的 manifest 概念)| 不带 manifest:前端无法决定用哪个 renderer;硬编码 if-else:扩展性差 |
|
|
70
|
+
| E12 | 后端实现路径 | **三通道前端 → 单条 `/api/prompt` → agent → prepare_artifact + Skill + finalize_artifact** | 每通道独立后端 API:违反 D9(Skill 已有)+ 3 倍维护成本 |
|
|
71
|
+
| E13 | D9 能力归属(沿用 ADR-16)| **不新建 `/export-*` Extension 命令**;产出操作走 Skill;`prepare_artifact` / `finalize_artifact` 是 agent 工作台元能力 → Extension | 每个产出格式建 `/export-pdf` 等 Extension:违反 D9(anthropics pdf Skill 已有)|
|
|
72
|
+
|
|
73
|
+
**E13 落地细节**:
|
|
74
|
+
- `/` 菜单显示的 `/pdf` `/docx` `/pptx` `/xlsx` 是 **Skill 命令**(来自 anthropics 的 SKILL.md `name` 字段),不是 Extension 命令
|
|
75
|
+
- 我们只新建 2 个 Extension 工具:`prepare_artifact` + `finalize_artifact`,管 artifact 工作流(id 分配、目录创建、manifest 写入);不管"怎么生成 PDF/docx"
|
|
76
|
+
- agent 接到任务时的流程:
|
|
77
|
+
```
|
|
78
|
+
按钮触发的 prompt → agent:
|
|
79
|
+
1. tool_call: prepare_artifact(kind="pdf", title=...) → { id, path }
|
|
80
|
+
2. tool_call: pdf Skill 的实际操作(读对话历史 + 写文件到 path)
|
|
81
|
+
3. tool_call: finalize_artifact(id, primaryFile="report.pdf") → 完成
|
|
82
|
+
→ SSE 发 artifact_created event → 前端右抽屉自动开 tab
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## §3 新增依赖
|
|
88
|
+
|
|
89
|
+
### 前端
|
|
90
|
+
**零新依赖**。HTML 预览用浏览器原生 iframe,元数据卡片用 shadcn 已有的 Card/Button,tab 切换用现有的 cmdk + 自写 tabs 即可(也可用 radix-ui 已经引入的 Tabs primitive,免新加包)。
|
|
91
|
+
|
|
92
|
+
### 后端
|
|
93
|
+
**零新依赖**。Node 内置 `crypto` 用于生成 artifact id(randomUUID),`fs/promises` 写 manifest.json,`child_process.execFile` 调 Skill(沿用阶段二 wiki-init.ts 套路)。
|
|
94
|
+
|
|
95
|
+
### 与 PRODUCT.md §3.2 的关系
|
|
96
|
+
阶段三**零新依赖**,是个意外的好消息——意味着我们"挂载 Skill"的方向选对了(Skill 自带能力,前端不必引入巨型 PPT/PDF 渲染库)。验收通过后 PRODUCT.md §3.2 无需新增行,ADR-17 已经覆盖了阶段二依赖。
|
|
97
|
+
|
|
98
|
+
如果阶段三实施中发现**实在需要**新依赖(如 HTML srcDoc 模式遇到无法解决的安全问题需要 DOMPurify),按 CLAUDE.md 规则**先停下报备**,不要先 npm install。
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## §4 八个 Step 详细设计
|
|
103
|
+
|
|
104
|
+
每个 step 包含:**动机 / 范围(做+不做)/ 改动文件 / 接口设计 / 实现要点 / 验收 fingerprint / 依赖关系**。
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### Step 1:anthropics/skills 4 个 vendor + Skill loader 收紧
|
|
109
|
+
|
|
110
|
+
**动机**:
|
|
111
|
+
- E2 + E3:把 docx/pdf/pptx/xlsx 4 个 Skill 内置进项目,开箱即用
|
|
112
|
+
- E4:阶段二实测发现 `/` 菜单被用户全局 30+ Skill 淹没,必须收紧加载源
|
|
113
|
+
|
|
114
|
+
**范围**:
|
|
115
|
+
- ✅ 从 `anthropics/skills` 仓库 git clone 后 copy 4 个 Skill 目录到 `<repo>/.claude/skills/{docx,pdf,pptx,xlsx}/`
|
|
116
|
+
- ✅ 在 `<repo>/.claude/skills/README.md` 写明:内置 Skill 由哪个 anthropics commit 同步而来 + sync 命令
|
|
117
|
+
- ✅ 修改 `server/src/agent.ts`:Skill loader 扫描三个目录,分组打 label:`builtin`(项目)/ `pi-default`(pi 默认)/ `user-global`(用户)
|
|
118
|
+
- ✅ 修改 `server/src/index.ts::/api/commands`:默认只返回 `builtin` + `pi-default` 两组;接受 query `?includeUserGlobal=true` 才返回 `user-global`
|
|
119
|
+
- ❌ git submodule(拒,新手不友好)
|
|
120
|
+
- ❌ 自动从 anthropics 同步最新版(v1 手动,未来加 `npm run sync-skills` 脚本)
|
|
121
|
+
- ❌ 让用户自定义"哪些 Skill 算 builtin"(v1 固定 4 个)
|
|
122
|
+
|
|
123
|
+
**改动文件**:
|
|
124
|
+
- 新增 `<repo>/.claude/skills/docx/` `pdf/` `pptx/` `xlsx/`(4 个完整 Skill 目录,含 SKILL.md + scripts + dependencies)
|
|
125
|
+
- 新增 `<repo>/.claude/skills/README.md`(来源说明 + sync 命令)
|
|
126
|
+
- 新增 `<repo>/.claude/skills/.gitkeep`(保险)
|
|
127
|
+
- 修改 `server/src/agent.ts`:扩展 `loadAllSkills()` 添加 source 标签
|
|
128
|
+
- 修改 `server/src/index.ts`:`/api/commands` 加 `includeUserGlobal` 参数 + 返回 source 字段
|
|
129
|
+
- 修改 `web/src/lib/api.ts`:`listCommands(includeUserGlobal?: boolean)` 接受参数
|
|
130
|
+
|
|
131
|
+
**接口变更**:
|
|
132
|
+
```
|
|
133
|
+
GET /api/commands?includeUserGlobal=false (default)
|
|
134
|
+
|
|
135
|
+
Response:
|
|
136
|
+
{
|
|
137
|
+
"ok": true,
|
|
138
|
+
"items": [
|
|
139
|
+
{
|
|
140
|
+
"slug": "/pdf",
|
|
141
|
+
"name": "pdf",
|
|
142
|
+
"description": "...",
|
|
143
|
+
"source": "builtin", // ← 新字段:builtin | pi-default | user-global
|
|
144
|
+
"skillPath": "/repo/.claude/skills/pdf"
|
|
145
|
+
},
|
|
146
|
+
...
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**实现要点**:
|
|
152
|
+
- vendor 方式:`git clone https://github.com/anthropics/skills /tmp/anthropics-skills && cp -r /tmp/anthropics-skills/{docx,pdf,pptx,xlsx} <repo>/.claude/skills/`
|
|
153
|
+
- README 记录 vendor 时刻的 anthropics/skills HEAD commit hash,方便未来 sync diff
|
|
154
|
+
- Skill loader 三个路径优先级:项目 > pi-default > user-global(重名时按优先级保留高优先级)
|
|
155
|
+
- 内置命令(sediment_to_wiki / new_wiki)source 标 `builtin` 但 skillPath 为 null
|
|
156
|
+
- 不要 chmod / 不要 sym-link,直接物理 copy
|
|
157
|
+
|
|
158
|
+
**验收 fingerprint**:
|
|
159
|
+
```bash
|
|
160
|
+
# 1. 项目里有 4 个 anthropics Skill
|
|
161
|
+
ls -la .claude/skills/
|
|
162
|
+
# 应有:docx/ pdf/ pptx/ xlsx/ + README.md
|
|
163
|
+
for s in docx pdf pptx xlsx; do
|
|
164
|
+
test -f ".claude/skills/$s/SKILL.md" && echo "✅ $s/SKILL.md 存在" || echo "❌ $s 缺 SKILL.md"
|
|
165
|
+
done
|
|
166
|
+
|
|
167
|
+
# 2. /api/commands 默认只返回项目级 + pi 默认
|
|
168
|
+
curl -s 'http://localhost:8787/api/commands' | python3 -c "
|
|
169
|
+
import sys, json
|
|
170
|
+
d = json.load(sys.stdin)
|
|
171
|
+
by_source = {}
|
|
172
|
+
for item in d['items']:
|
|
173
|
+
by_source.setdefault(item['source'], []).append(item['name'])
|
|
174
|
+
print('builtin:', by_source.get('builtin', []))
|
|
175
|
+
print('pi-default:', by_source.get('pi-default', []))
|
|
176
|
+
print('user-global:', by_source.get('user-global', []))
|
|
177
|
+
"
|
|
178
|
+
# 期望:builtin 至少含 pdf/docx/pptx/xlsx/sediment_to_wiki/new_wiki
|
|
179
|
+
# 期望:user-global 为空 []
|
|
180
|
+
|
|
181
|
+
# 3. 显式打开 user-global
|
|
182
|
+
curl -s 'http://localhost:8787/api/commands?includeUserGlobal=true' | python3 -c "..."
|
|
183
|
+
# 期望:user-global 含用户 ~/.claude/skills/ 下所有 Skill
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**依赖关系**:阻塞 Step 3(按钮区需要 Skill 加载好)+ Step 7(设置面板 toggle 需要 API 支持)。
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### Step 2:ArtifactManifest 契约 + 后端 artifacts API + prepare/finalize Extension
|
|
191
|
+
|
|
192
|
+
**动机**:
|
|
193
|
+
- E11:每个产物带 manifest,前端按 manifest 选 renderer
|
|
194
|
+
- E12 + E13:D9 落地——只新建 2 个 Extension 工具(`prepare_artifact` / `finalize_artifact`),管 artifact 工作流;Skill 负责实际产出
|
|
195
|
+
|
|
196
|
+
**范围**:
|
|
197
|
+
- ✅ 定义 ArtifactManifest TypeScript interface(§5.1)
|
|
198
|
+
- ✅ 新增 `server/src/artifacts.ts`:存储管理 + 内存索引 + 启动时从磁盘重建
|
|
199
|
+
- ✅ 新增 `server/src/extensions/artifacts.ts`:两个 Extension 工具 `prepare_artifact` + `finalize_artifact`
|
|
200
|
+
- ✅ 新增 5 个路由:`/api/artifacts`(列表)/ `/api/artifacts/:id`(manifest)/ `/api/artifacts/:id/files/:filename`(文件)/ `/api/artifacts/:id`(DELETE,可选 v1.5)
|
|
201
|
+
- ✅ SSE 事件:`artifact_created`(推 artifact id 给前端)
|
|
202
|
+
- ❌ 跨对话产物合并视图(v1 只按 conversation 索引)
|
|
203
|
+
- ❌ 产物去重 / 缓存(v1 每次产出独立)
|
|
204
|
+
|
|
205
|
+
**改动文件**:
|
|
206
|
+
- 新增 `server/src/artifacts.ts`
|
|
207
|
+
- 新增 `server/src/extensions/artifacts.ts`
|
|
208
|
+
- 修改 `server/src/agent.ts`:注册新 Extension + bootstrap 时调 `artifacts.scanAndRebuildIndex()`
|
|
209
|
+
- 修改 `server/src/index.ts`:新增 4 个路由
|
|
210
|
+
- 修改 `web/src/lib/api.ts`:`listArtifacts(conversationId)` / `getArtifactManifest(id)` / `getArtifactFileUrl(id, filename)`
|
|
211
|
+
|
|
212
|
+
**ArtifactManifest schema**(详见 §5.1):
|
|
213
|
+
```ts
|
|
214
|
+
interface ArtifactManifest {
|
|
215
|
+
id: string; // crypto.randomUUID()
|
|
216
|
+
kind: "html" | "pdf" | "docx" | "pptx" | "xlsx";
|
|
217
|
+
renderer: "iframe" | "download-only";
|
|
218
|
+
metadata: {
|
|
219
|
+
title: string;
|
|
220
|
+
createdAt: string; // ISO 8601
|
|
221
|
+
sourceConversationId: string;
|
|
222
|
+
sourceKbPath: string;
|
|
223
|
+
sourceSkill: string; // "pdf" | "docx" | ...
|
|
224
|
+
sizeBytes: number; // 主文件大小
|
|
225
|
+
};
|
|
226
|
+
files: Array<{
|
|
227
|
+
name: string;
|
|
228
|
+
sizeBytes: number;
|
|
229
|
+
mimeType: string;
|
|
230
|
+
}>;
|
|
231
|
+
primaryFile: string; // files[].name 中的主文件
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**存储**:
|
|
236
|
+
```
|
|
237
|
+
~/.llm-wiki-agent/artifacts/<artifact-id>/
|
|
238
|
+
├── manifest.json
|
|
239
|
+
├── <primaryFile> # 如 report.pdf
|
|
240
|
+
└── [其他附属文件] # 如 HTML 的 img/foo.png
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Extension 工具**:
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
// server/src/extensions/artifacts.ts
|
|
247
|
+
|
|
248
|
+
prepare_artifact:
|
|
249
|
+
params: { kind, title }
|
|
250
|
+
returns: { id, workspacePath } # 创建空目录,返回 path 给 agent
|
|
251
|
+
|
|
252
|
+
finalize_artifact:
|
|
253
|
+
params: { id, primaryFile }
|
|
254
|
+
returns: { ok, manifest } # 扫 workspacePath 下所有文件,写 manifest.json
|
|
255
|
+
# 触发 SSE artifact_created event
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**SSE 事件**(新增到 `/api/prompt` 流):
|
|
259
|
+
```
|
|
260
|
+
event: artifact_created
|
|
261
|
+
data: {"id":"<uuid>","kind":"pdf","title":"..."}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**实现要点**:
|
|
265
|
+
- artifact id 用 `crypto.randomUUID()`
|
|
266
|
+
- workspacePath:`<HOME>/.llm-wiki-agent/artifacts/<id>/`,新建时 `mkdir -p`
|
|
267
|
+
- finalize_artifact 扫目录列出所有文件 + size + mimeType(用 `mime-types` 包?不引入新依赖,硬编码常见后缀→mime 映射就行)
|
|
268
|
+
- manifest.json 用 atomic write(tmp + rename,沿用阶段二 auth.ts 套路)
|
|
269
|
+
- 启动时 `scanAndRebuildIndex()`:遍历 `~/.llm-wiki-agent/artifacts/*/manifest.json` 重建内存索引
|
|
270
|
+
- 文件路径安全:所有 artifact id 必须是 uuid 格式正则匹配;files/:filename 必须是 manifest.files 列表中的名字,不接受 `..` / 绝对路径
|
|
271
|
+
- 单文件大小硬限制 100MB(生成超过的话 finalize 报错)
|
|
272
|
+
|
|
273
|
+
**验收 fingerprint**:
|
|
274
|
+
```bash
|
|
275
|
+
# 1. 调用 prepare_artifact 创建工作区
|
|
276
|
+
# 在对话里说:"调用 prepare_artifact(kind='pdf', title='test') 然后告诉我 path"
|
|
277
|
+
# 预期:~/.llm-wiki-agent/artifacts/<新 uuid>/ 出现,agent 回复 path
|
|
278
|
+
|
|
279
|
+
# 2. 写一个 dummy 文件到 path(让 agent 跑:cat > <path>/dummy.pdf <<<'fake pdf')
|
|
280
|
+
ls ~/.llm-wiki-agent/artifacts/<id>/ # dummy.pdf
|
|
281
|
+
|
|
282
|
+
# 3. 调用 finalize_artifact(id, primaryFile='dummy.pdf')
|
|
283
|
+
cat ~/.llm-wiki-agent/artifacts/<id>/manifest.json
|
|
284
|
+
# 期望:含 id/kind/renderer/metadata/files/primaryFile,files 含 dummy.pdf
|
|
285
|
+
|
|
286
|
+
# 4. API 验证
|
|
287
|
+
curl -s 'http://localhost:8787/api/artifacts?conversation=<cid>' | jq
|
|
288
|
+
# 期望:返回数组含新 artifact 的 manifest
|
|
289
|
+
|
|
290
|
+
curl -s 'http://localhost:8787/api/artifacts/<id>' | jq
|
|
291
|
+
# 期望:返回单个 manifest
|
|
292
|
+
|
|
293
|
+
curl -sI "http://localhost:8787/api/artifacts/<id>/files/dummy.pdf"
|
|
294
|
+
# 期望:200,Content-Type: application/pdf,Content-Disposition: attachment
|
|
295
|
+
|
|
296
|
+
# 5. 路径安全
|
|
297
|
+
curl -s -w "HTTP %{http_code}\n" "http://localhost:8787/api/artifacts/<id>/files/../../../etc/passwd"
|
|
298
|
+
# 期望:400
|
|
299
|
+
|
|
300
|
+
curl -s -w "HTTP %{http_code}\n" "http://localhost:8787/api/artifacts/not-a-uuid"
|
|
301
|
+
# 期望:400
|
|
302
|
+
|
|
303
|
+
# 6. 启动重建
|
|
304
|
+
# 杀后端 → 重启 → 再次 curl /api/artifacts?conversation=<cid>
|
|
305
|
+
# 期望:能返回之前创建的 artifact(持久化)
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
**依赖关系**:阻塞 Step 3/4/5/6(前端 UI 需要后端 API)。
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
### Step 3:产出按钮区 + 三通道触发逻辑
|
|
313
|
+
|
|
314
|
+
**动机**:
|
|
315
|
+
- E5 + E6 + E7:5 个固定按钮放输入框下方
|
|
316
|
+
- 按钮 = 等同于发一段固定 prompt,让 agent 走 prepare→Skill→finalize 三步流程
|
|
317
|
+
|
|
318
|
+
**范围**:
|
|
319
|
+
- ✅ ChatPanel 输入框下方加按钮行:📄 PDF · 📝 Word · 📊 PPT · 📋 Excel · 🌐 HTML
|
|
320
|
+
- ✅ 点击按钮 = 自动发送对应 prompt(不需要用户再按发送)
|
|
321
|
+
- ✅ 按钮 disabled 条件:无活跃 kb / 当前 `status === "streaming"` / 输入框无对话历史(messages.length === 0)
|
|
322
|
+
- ✅ hover 显示 tooltip:导出为 PDF / Word / ...
|
|
323
|
+
- ✅ `/` 菜单 + 自然语言两通道沿用阶段二既有路径(agent 自动识别意图调 Skill)
|
|
324
|
+
- ❌ 按钮自定义 / 排序 / 隐藏(v1 固定)
|
|
325
|
+
- ❌ 一键导出多种格式(v1 一次一个)
|
|
326
|
+
- ❌ 导出进度条 / 取消按钮(v1 看 SSE event 即可)
|
|
327
|
+
|
|
328
|
+
**改动文件**:
|
|
329
|
+
- 修改 `web/src/components/ChatPanel.tsx`:加按钮区组件
|
|
330
|
+
- 新增 `web/src/components/ExportButtons.tsx`(独立组件,方便测试 / 复用)
|
|
331
|
+
- 修改 `web/src/lib/api.ts`:可能加 helper `buildExportPrompt(kind, conversationContext)`
|
|
332
|
+
|
|
333
|
+
**按钮区 UI**(紧贴 textarea 下、status/send 上):
|
|
334
|
+
```
|
|
335
|
+
┌─────────────────────────────┐
|
|
336
|
+
│ textarea │
|
|
337
|
+
└─────────────────────────────┘
|
|
338
|
+
[chip if URL] ← 阶段二已有
|
|
339
|
+
┌─ 导出 ──────────────────────────────────┐ ← 阶段三新增
|
|
340
|
+
│ 📄 PDF · 📝 Word · 📊 PPT · 📋 Excel · 🌐 HTML │
|
|
341
|
+
└─────────────────────────────────────────┘
|
|
342
|
+
状态: idle [发送] ← 阶段二已有
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**按钮发送的固定 prompt(v1 模板)**:
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
请用 <skillName> Skill 把当前对话整理产出为 <kindLabel>,按以下三步:
|
|
349
|
+
|
|
350
|
+
1. 调用 prepare_artifact(kind="<kind>", title="<对话首条用户消息截前 30 字>") 获得 { id, workspacePath }
|
|
351
|
+
2. 用 <skillName> Skill 在 workspacePath 下生成主文件(命名建议:<kind>-<timestamp>.<ext>)
|
|
352
|
+
3. 调用 finalize_artifact(id, primaryFile="<生成的文件名>") 完成登记
|
|
353
|
+
|
|
354
|
+
完成后回复 artifact id 和大致内容摘要。
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
其中:
|
|
358
|
+
- skillName / kind / kindLabel / ext 映射表:
|
|
359
|
+
- PDF → `skillName=pdf`, `kind=pdf`, `kindLabel=PDF`, `ext=pdf`
|
|
360
|
+
- Word → `skillName=docx`, `kind=docx`, `kindLabel=Word 文档`, `ext=docx`
|
|
361
|
+
- PPT → `skillName=pptx`, `kind=pptx`, `kindLabel=PPT 演示文稿`, `ext=pptx`
|
|
362
|
+
- Excel → `skillName=xlsx`, `kind=xlsx`, `kindLabel=Excel 表格`, `ext=xlsx`
|
|
363
|
+
- HTML → `skillName=html`(**TBD-5**:是用 anthropics 的哪个 HTML Skill?阶段二 D9 时讨论的 `web-artifacts-builder` 可能是更好选择,需要 codex 实施时查 anthropics/skills 仓库)
|
|
364
|
+
|
|
365
|
+
**实现要点**:
|
|
366
|
+
- 按钮组件接收 `disabled` / `onExport(kind)` props,纯展示
|
|
367
|
+
- onExport(kind) → `setInput(buildExportPrompt(kind))` 然后调 `sendPrompt()`
|
|
368
|
+
- 不要在前端直接构造 artifact id(让 agent 调 prepare_artifact)
|
|
369
|
+
- tooltip 用阶段二已有的 `<Tooltip>` shadcn 组件
|
|
370
|
+
- 按钮区在暗色主题下用 muted 色,不抢戏
|
|
371
|
+
|
|
372
|
+
**验收 fingerprint**:
|
|
373
|
+
```
|
|
374
|
+
1. 进入有对话历史的 kb(至少 2 条消息)
|
|
375
|
+
2. 5 个按钮可见、可点(不灰)
|
|
376
|
+
3. 点 📄 PDF → 输入框瞬间出现长 prompt(不可见也行,关键是发送)→ 流式输出 → agent 调 prepare_artifact + pdf Skill + finalize_artifact
|
|
377
|
+
4. 等右抽屉收到 SSE event → 自动开 PDF tab
|
|
378
|
+
5. 关闭浏览器再开 → 历史里能看到这次产出过程
|
|
379
|
+
|
|
380
|
+
按钮 disabled 边界:
|
|
381
|
+
- 没选 kb → 5 个按钮全灰
|
|
382
|
+
- 正在 streaming → 5 个按钮全灰
|
|
383
|
+
- 切到没消息的新对话 → 5 个按钮全灰
|
|
384
|
+
- hover 灰按钮:tooltip 说明原因("请先选择知识库" / "请先开始对话")
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
**依赖关系**:依赖 Step 1(Skill 加载好)+ Step 2(prepare/finalize 可调用)。阻塞 Step 4(按钮触发后右抽屉要响应)。
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
### Step 4:右抽屉多产物 tab 切换 UI
|
|
392
|
+
|
|
393
|
+
**动机**:E8 + 单对话内多次产出需要可切换查看
|
|
394
|
+
|
|
395
|
+
**范围**:
|
|
396
|
+
- ✅ 收到 SSE `artifact_created` event → 右抽屉自动打开 + 新 tab 高亮
|
|
397
|
+
- ✅ 一个对话下的所有 artifacts 排成横向 tab 列表(最新在最右,自动滚到最新)
|
|
398
|
+
- ✅ tab 标题:`<kindIcon> <title 截前 12 字>`
|
|
399
|
+
- ✅ 点 tab 切 manifest → 根据 `renderer` 字段加载对应 Renderer(HtmlRenderer / DownloadOnlyRenderer,Step 5/6 实现)
|
|
400
|
+
- ✅ 切对话:抽屉清空(不跨对话累积,避免错乱)
|
|
401
|
+
- ✅ 关闭抽屉按钮(沿用阶段二,Esc 也关)
|
|
402
|
+
- ❌ 重命名 tab / 删除 artifact(v1 不做;删除走 DELETE API 是 Step 2.5 范围)
|
|
403
|
+
- ❌ 拖拽排序 tab(v1 按 createdAt 升序)
|
|
404
|
+
|
|
405
|
+
**改动文件**:
|
|
406
|
+
- 修改 `web/src/components/RightDrawer.tsx`:增强为多内容 + tab 切换
|
|
407
|
+
- 新增 `web/src/components/ArtifactView.tsx`:根据 manifest.renderer 路由到 HtmlRenderer / DownloadOnlyRenderer
|
|
408
|
+
- 修改 `web/src/App.tsx`:state 管理:`{ kind: "wikiPage"; path: string } | { kind: "artifacts"; conversationId: string; activeId: string }`
|
|
409
|
+
- 修改 `web/src/components/ChatPanel.tsx`:处理 SSE `artifact_created` event → 调 App 的 openArtifact()
|
|
410
|
+
- 修改 `web/src/lib/sse.ts`(如果有)/ 流处理逻辑:支持新事件类型
|
|
411
|
+
|
|
412
|
+
**抽屉布局**:
|
|
413
|
+
```
|
|
414
|
+
┌─ 右抽屉(400px / 全屏切换)──────────────┐
|
|
415
|
+
│ × 关闭 ⛶ 全屏 📥 下载 │ ← Tab 顶栏
|
|
416
|
+
├──────────────────────────────────────────┤
|
|
417
|
+
│ [📄 报告 v1] [📊 PPT] [🌐 demo] ←→ │ ← Tab 切换条(横滚)
|
|
418
|
+
├──────────────────────────────────────────┤
|
|
419
|
+
│ │
|
|
420
|
+
│ <ArtifactView manifest> │ ← Renderer 区
|
|
421
|
+
│ │
|
|
422
|
+
└──────────────────────────────────────────┘
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**实现要点**:
|
|
426
|
+
- App.tsx 维护:
|
|
427
|
+
- `drawerMode: "closed" | "wiki-page" | "artifacts"`
|
|
428
|
+
- `wikiPagePath: string | null`(沿用阶段二)
|
|
429
|
+
- `activeArtifactId: string | null`(阶段三新)
|
|
430
|
+
- `artifactsForCurrentConversation: ArtifactManifest[]`(来自 GET /api/artifacts)
|
|
431
|
+
- SSE event 处理:`artifact_created` → 调 listArtifacts 刷新 → setActive(新 id) → openDrawer("artifacts")
|
|
432
|
+
- 切对话:`useEffect` 检测 conversationId 变化 → setActive(null) + closeDrawer
|
|
433
|
+
- tab 切换状态:每个 tab 是个 iframe(HtmlRenderer)的话,切换时 iframe 应**卸载**而非隐藏(避免内存占用);切回再重新挂载
|
|
434
|
+
- 全屏切换按钮:右抽屉 width 在 400px ↔ 100vw 切换
|
|
435
|
+
- 下载按钮:定位到 `primaryFile`,触发 `<a href download>` 点击
|
|
436
|
+
|
|
437
|
+
**验收 fingerprint**:
|
|
438
|
+
```
|
|
439
|
+
1. 在一个对话里依次点 5 个按钮(PDF/Word/PPT/Excel/HTML)
|
|
440
|
+
2. 每次按钮点击后 5-10 秒(agent 时间),右抽屉自动打开 + 新 tab 高亮
|
|
441
|
+
3. 5 次都完成后,tab 条有 5 个 tab
|
|
442
|
+
4. 点击切换 tab,对应 ArtifactView 切换内容
|
|
443
|
+
5. 关闭抽屉 → 切对话 → 再开抽屉(如果有产物)→ 显示新对话的 artifacts
|
|
444
|
+
6. 浏览器 DevTools 检查:HtmlRenderer iframe 切走后 DOM 中应被移除(非 display:none)
|
|
445
|
+
7. 全屏切换流畅、Esc 关闭、点 × 关闭
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**依赖关系**:依赖 Step 2 + Step 3。阻塞 Step 5 + 6(实际渲染器)。
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
### Step 5:HtmlRenderer(iframe sandbox + srcDoc inline)
|
|
453
|
+
|
|
454
|
+
**动机**:E9 + HTML 产物 v1 用最安全的 srcDoc inline 模式预览
|
|
455
|
+
|
|
456
|
+
**范围**:
|
|
457
|
+
- ✅ 读取 manifest.primaryFile(必须是 `.html` 后缀) → 后端 `GET /api/artifacts/:id/files/:filename` 拿 raw HTML 内容 → 注入 iframe srcDoc
|
|
458
|
+
- ✅ iframe sandbox 严格:`sandbox="allow-scripts"`(**不带** `allow-same-origin`,防恶意 HTML 读父域 cookie/localStorage)
|
|
459
|
+
- ✅ iframe `loading="lazy"`、宽 100% / 高 100%
|
|
460
|
+
- ✅ 加载失败 fallback:显示"⚠️ HTML 解析失败"+ 下载原文件按钮
|
|
461
|
+
- ❌ URL-load 双模式(v1 不做,open-design 是设计稿场景才需要外部 CSS/JS)
|
|
462
|
+
- ❌ host-iframe postMessage bridge(v1 没有"父子通信"需求)
|
|
463
|
+
- ❌ HTML 内的相对路径资源支持(如 `<img src="./img.png">` 找不到——TBD-4)
|
|
464
|
+
|
|
465
|
+
**改动文件**:
|
|
466
|
+
- 新增 `web/src/components/renderers/HtmlRenderer.tsx`
|
|
467
|
+
- 修改 `web/src/components/ArtifactView.tsx`:根据 manifest.renderer 路由到此
|
|
468
|
+
|
|
469
|
+
**iframe 设置**:
|
|
470
|
+
```tsx
|
|
471
|
+
<iframe
|
|
472
|
+
sandbox="allow-scripts"
|
|
473
|
+
srcDoc={htmlContent}
|
|
474
|
+
className="h-full w-full border-0 bg-white"
|
|
475
|
+
loading="lazy"
|
|
476
|
+
title={manifest.metadata.title}
|
|
477
|
+
/>
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**实现要点**:
|
|
481
|
+
- htmlContent 通过 fetch 拿到(`getArtifactFile(id, primaryFile)` 返回 text)
|
|
482
|
+
- 状态管理:loading / loaded / error 三态
|
|
483
|
+
- error 时显示 fallback 卡片(含 size + 下载按钮)
|
|
484
|
+
- sandbox 严格度:`allow-scripts` 允许内部 JS 跑,不带 `allow-same-origin` 即可隔离父域
|
|
485
|
+
- ⚠️ 不要因为 "为了 HTML 更好看" 而加 `allow-same-origin` / `allow-top-navigation`——这违反安全原则
|
|
486
|
+
- iframe 容器要给固定高度(计算 `100vh - 抽屉顶栏高 - tab 条高`)
|
|
487
|
+
|
|
488
|
+
**验收 fingerprint**:
|
|
489
|
+
```
|
|
490
|
+
1. 用 web-artifacts-builder Skill 产出一个 HTML(带内嵌 CSS/JS)
|
|
491
|
+
2. 右抽屉 HTML tab:iframe 渲染正常,样式生效,按钮可点
|
|
492
|
+
3. 浏览器 DevTools 检查 iframe:sandbox="allow-scripts" 无 allow-same-origin
|
|
493
|
+
4. 尝试在 iframe 里跑 `top.document.cookie`:应抛 SecurityError(沙箱隔离生效)
|
|
494
|
+
5. 主动构造一个含外部 <img src="http://attacker.com/track.png"> 的 HTML 产物:
|
|
495
|
+
- srcDoc 模式默认会发请求(这是浏览器行为)
|
|
496
|
+
- 在 fallback 里加说明:"建议产物使用 data: URI 内嵌图片"
|
|
497
|
+
6. 上传一个故意损坏的 HTML(不完整标签):iframe 仍能渲染(浏览器宽容),无 fallback 触发
|
|
498
|
+
7. 切走 HTML tab → DOM 检查 iframe 被移除(不是 display:none)
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
**依赖关系**:依赖 Step 4(抽屉框架)。可并行 Step 6。
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
### Step 6:DownloadOnlyRenderer(pdf/docx/pptx/xlsx 元数据卡片)
|
|
506
|
+
|
|
507
|
+
**动机**:E10 + 这 4 种格式不浏览器渲染,给用户元数据卡片 + 下载按钮
|
|
508
|
+
|
|
509
|
+
**范围**:
|
|
510
|
+
- ✅ 元数据卡片:图标(kind 对应 emoji)+ 标题 + 来源对话 / Skill / 创建时间 / 大小
|
|
511
|
+
- ✅ 主下载按钮 "📥 下载 <primaryFile>"
|
|
512
|
+
- ✅ 如果 files 有多个:列出附属文件 + 各自下载按钮
|
|
513
|
+
- ✅ "在系统应用中打开"按钮(macOS 下用 `file://` URL + window.open)
|
|
514
|
+
- ✅ 显示来源对话片段(最后几条 message 截首尾,让用户回忆)
|
|
515
|
+
- ❌ 实际浏览器内渲染 PPT/PDF/docx/xlsx(明确不做)
|
|
516
|
+
- ❌ 文档内搜索 / 翻页(不做)
|
|
517
|
+
|
|
518
|
+
**改动文件**:
|
|
519
|
+
- 新增 `web/src/components/renderers/DownloadOnlyRenderer.tsx`
|
|
520
|
+
- 修改 `web/src/components/ArtifactView.tsx`:路由
|
|
521
|
+
|
|
522
|
+
**卡片布局**:
|
|
523
|
+
```
|
|
524
|
+
┌──────────────────────────────────┐
|
|
525
|
+
│ │
|
|
526
|
+
│ 📄 │
|
|
527
|
+
│ │
|
|
528
|
+
│ PDF 文档 │
|
|
529
|
+
│ 2026 阶段二验收报告.pdf │
|
|
530
|
+
│ │
|
|
531
|
+
│ 📐 1.2 MB · 由 pdf Skill 生成 │
|
|
532
|
+
│ 🕐 2026-05-27 15:42 │
|
|
533
|
+
│ 💬 来自对话:"奥派经济学..." │
|
|
534
|
+
│ │
|
|
535
|
+
│ ┌─ 📥 下载 ─────────────┐ │
|
|
536
|
+
│ └────────────────────────┘ │
|
|
537
|
+
│ │
|
|
538
|
+
│ ┌─ 📂 在系统应用打开 ──┐ │
|
|
539
|
+
│ └───────────────────────┘ │
|
|
540
|
+
│ │
|
|
541
|
+
└──────────────────────────────────┘
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
**实现要点**:
|
|
545
|
+
- 图标映射:pdf 📄 / docx 📝 / pptx 📊 / xlsx 📋 / html 🌐
|
|
546
|
+
- 大小格式化:< 1KB 显示 "X bytes",< 1MB "X.Y KB",>= 1MB "X.Y MB"
|
|
547
|
+
- 下载按钮触发 `<a href="/api/artifacts/:id/files/:filename" download="原文件名" />`
|
|
548
|
+
- "在系统应用打开":浏览器版本下用 `window.open('file://<absPath>')`,Tauri 版本(阶段五)会用 Tauri 的 shell.open
|
|
549
|
+
- 来源对话片段:调 GET /api/conversations 拿对话历史,截取片段(首条用户消息 + 最后一条 assistant 消息)
|
|
550
|
+
|
|
551
|
+
**验收 fingerprint**:
|
|
552
|
+
```
|
|
553
|
+
1. 产出一个 PDF → 切到 PDF tab → 显示元数据卡片 + 下载 + 在系统应用打开
|
|
554
|
+
2. 点下载 → 浏览器开始下载到 ~/Downloads/<filename>.pdf
|
|
555
|
+
3. 打开下载的 PDF → 应能正常打开(macOS Preview 或 Chrome PDF viewer)
|
|
556
|
+
4. 切到 docx/xlsx/pptx tab → 都显示同样结构的元数据卡片
|
|
557
|
+
5. 来源对话片段显示正确(首条用户消息截前 30 字)
|
|
558
|
+
6. 文件大小显示格式正确(KB/MB)
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
**依赖关系**:依赖 Step 4。可并行 Step 5。
|
|
562
|
+
|
|
563
|
+
---
|
|
564
|
+
|
|
565
|
+
### Step 7:设置面板加 toggle:"展示用户全局 Skill"
|
|
566
|
+
|
|
567
|
+
**动机**:E4 + 用户偶尔需要把全局 Skill 调出来用
|
|
568
|
+
|
|
569
|
+
**范围**:
|
|
570
|
+
- ✅ 设置面板(阶段二已建)加新区段 "Skill 加载"
|
|
571
|
+
- ✅ 单个 toggle:`展示用户全局 Skill (~/.claude/skills/) — 默认关`
|
|
572
|
+
- ✅ 状态持久化到 `~/.llm-wiki-agent/config.json`(沿用阶段二 config 文件)
|
|
573
|
+
- ✅ toggle 切换后立即生效:`/` 菜单 listCommands(includeUserGlobal=newValue) + UI 重新渲染
|
|
574
|
+
- ❌ 按 Skill 精细启用 / 禁用(v1 一键开关全部)
|
|
575
|
+
- ❌ 项目级 Skill / pi 默认 Skill 的隐藏开关(v1 这两个始终显示)
|
|
576
|
+
|
|
577
|
+
**改动文件**:
|
|
578
|
+
- 修改 `server/src/config.ts`:AppConfig 加 `showUserGlobalSkills?: boolean`
|
|
579
|
+
- 修改 `server/src/index.ts`:`/api/commands` 的默认值改为读 config(前端可显式覆盖)
|
|
580
|
+
- 修改 `web/src/components/SettingsPanel.tsx`:加 Skill 加载区段 + toggle
|
|
581
|
+
- 修改 `web/src/lib/api.ts`:加 `getConfig()` / `setConfig(partial)` 两个 helper(如果阶段二没有)
|
|
582
|
+
|
|
583
|
+
**接口变更**:
|
|
584
|
+
```
|
|
585
|
+
GET /api/config (read showUserGlobalSkills 字段)
|
|
586
|
+
POST /api/config { showUserGlobalSkills: true }
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
**实现要点**:
|
|
590
|
+
- 沿用阶段二 config.ts 的原子写入
|
|
591
|
+
- toggle 状态变更后,前端调 invalidate 重新拉 listCommands
|
|
592
|
+
- 设置面板 toggle 用原生 `<input type="checkbox">` 或 shadcn Switch(看现有有没有),避免新依赖
|
|
593
|
+
- 区段标题 "Skill 加载",副标题说明文字:当前已加载 N 个 Skill(项目内置 X / pi 默认 Y / 用户全局 Z 隐藏中)
|
|
594
|
+
|
|
595
|
+
**验收 fingerprint**:
|
|
596
|
+
```
|
|
597
|
+
1. 默认 toggle 关 → / 菜单只看到项目内置 + pi 默认
|
|
598
|
+
2. 打开 toggle → 立即看到 / 菜单多出用户全局 Skill
|
|
599
|
+
3. 关闭 toggle → 立即缩回
|
|
600
|
+
4. 刷新页面 → toggle 状态保留(持久化)
|
|
601
|
+
5. cat ~/.llm-wiki-agent/config.json → 应有 "showUserGlobalSkills": true/false 字段
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
**依赖关系**:依赖 Step 1(loader 收紧已实现)。独立于其他。
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
### Step 8:总验收 + UX 体感打磨
|
|
609
|
+
|
|
610
|
+
**动机**:阶段三对外是"产品亮点",UX 必须丝滑
|
|
611
|
+
|
|
612
|
+
**范围**:
|
|
613
|
+
- ✅ 跑一遍 §10 总验收剧本
|
|
614
|
+
- ✅ 暗色主题:所有新组件检查无白色露馅
|
|
615
|
+
- ✅ 按钮区 hover 状态、disabled 状态视觉清晰
|
|
616
|
+
- ✅ 右抽屉 tab 切换动画 < 200ms
|
|
617
|
+
- ✅ SSE artifact_created 事件触发到抽屉打开 < 500ms
|
|
618
|
+
- ✅ 元数据卡片在 400px 抽屉 / 全屏抽屉两种宽度下都不破版
|
|
619
|
+
- ✅ HTML iframe 加载状态有 loading 反馈
|
|
620
|
+
- ✅ 全键盘可达:Tab 焦点能到按钮区每个按钮,Enter 触发,Esc 关抽屉
|
|
621
|
+
- ❌ 动画细节调到像 Linear / Notion 那种级别(v1 不追求)
|
|
622
|
+
- ❌ 无障碍 ARIA 完整(v1 基础够用)
|
|
623
|
+
|
|
624
|
+
**改动文件**:
|
|
625
|
+
- 各前端组件 polish(不新增文件,可能微调 CSS)
|
|
626
|
+
- 修改 `docs/stage-3-design.md`:本 step commit 时把 §6 验收 checklist 全打勾
|
|
627
|
+
|
|
628
|
+
**实现要点**:
|
|
629
|
+
- 这一步不应该新增大功能,只是打磨
|
|
630
|
+
- 如果验收过程中发现 5-8 个小问题,作为 fix(stage-3) commit 解决(沿用阶段二允许 fix-commit 的策略)
|
|
631
|
+
- 不要在这步引入新依赖;不要重构其他 step 已实现的组件结构
|
|
632
|
+
|
|
633
|
+
**验收 fingerprint**:
|
|
634
|
+
```
|
|
635
|
+
跑完 §10 全部剧本,§10.7 对账单全打勾,§10.6 体感全 pass。
|
|
636
|
+
没有 🔴 阻塞 issue。
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
**依赖关系**:依赖前 7 个 step 全完成。
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
## §5 数据契约
|
|
644
|
+
|
|
645
|
+
### 5.1 ArtifactManifest schema
|
|
646
|
+
|
|
647
|
+
```ts
|
|
648
|
+
interface ArtifactManifest {
|
|
649
|
+
/** 唯一 id,crypto.randomUUID() 生成 */
|
|
650
|
+
id: string;
|
|
651
|
+
|
|
652
|
+
/** 产物种类,决定 renderer */
|
|
653
|
+
kind: "html" | "pdf" | "docx" | "pptx" | "xlsx";
|
|
654
|
+
|
|
655
|
+
/** 渲染器类型,前端 ArtifactView 据此路由 */
|
|
656
|
+
renderer: "iframe" | "download-only";
|
|
657
|
+
|
|
658
|
+
metadata: {
|
|
659
|
+
/** 用户可见的标题,从产生时的对话首条用户消息提取,截前 30 字 */
|
|
660
|
+
title: string;
|
|
661
|
+
|
|
662
|
+
/** ISO 8601 时间戳(带时区)*/
|
|
663
|
+
createdAt: string;
|
|
664
|
+
|
|
665
|
+
/** 来源对话 id(pi session id)*/
|
|
666
|
+
sourceConversationId: string;
|
|
667
|
+
|
|
668
|
+
/** 来源知识库的绝对路径 */
|
|
669
|
+
sourceKbPath: string;
|
|
670
|
+
|
|
671
|
+
/** 调用的 Skill 名(与 SKILL.md 的 name 字段一致)*/
|
|
672
|
+
sourceSkill: string;
|
|
673
|
+
|
|
674
|
+
/** 主文件 size(bytes),用于 UI 展示 */
|
|
675
|
+
sizeBytes: number;
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
/** 产物目录下的所有文件清单 */
|
|
679
|
+
files: Array<{
|
|
680
|
+
name: string; // 文件名(不含路径)
|
|
681
|
+
sizeBytes: number;
|
|
682
|
+
mimeType: string; // 如 "application/pdf"
|
|
683
|
+
}>;
|
|
684
|
+
|
|
685
|
+
/** files[].name 中作为"主文件"的那一个 */
|
|
686
|
+
primaryFile: string;
|
|
687
|
+
}
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
### 5.2 kind → renderer 映射规则
|
|
691
|
+
| kind | renderer | 默认 mimeType |
|
|
692
|
+
|---|---|---|
|
|
693
|
+
| html | iframe | text/html |
|
|
694
|
+
| pdf | download-only | application/pdf |
|
|
695
|
+
| docx | download-only | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
|
|
696
|
+
| pptx | download-only | application/vnd.openxmlformats-officedocument.presentationml.presentation |
|
|
697
|
+
| xlsx | download-only | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
|
|
698
|
+
|
|
699
|
+
### 5.3 存储路径规则
|
|
700
|
+
- 所有 artifact 存在 `~/.llm-wiki-agent/artifacts/<artifact-id>/`
|
|
701
|
+
- 目录名 = artifact id(uuid v4)
|
|
702
|
+
- 目录里至少含:`manifest.json` + `<primaryFile>`
|
|
703
|
+
- 可选含:附属文件(如 HTML 的 `img/`、`css/`)
|
|
704
|
+
|
|
705
|
+
### 5.4 API 命名空间一览(阶段三新增)
|
|
706
|
+
|
|
707
|
+
| 路径 | 方法 | step | 用途 |
|
|
708
|
+
|---|---|---|---|
|
|
709
|
+
| `/api/commands` | GET | 1 | 加 `includeUserGlobal` 参数 + 返回 `source` 字段 |
|
|
710
|
+
| `/api/artifacts` | GET | 2 | `?conversation=<id>` 列对话的 artifacts |
|
|
711
|
+
| `/api/artifacts/:id` | GET | 2 | 单个 manifest |
|
|
712
|
+
| `/api/artifacts/:id/files/:filename` | GET | 2 | 下载文件,`Content-Disposition: attachment` |
|
|
713
|
+
| `/api/config` | GET/POST | 7 | 读 / 改 `showUserGlobalSkills` 等偏好 |
|
|
714
|
+
|
|
715
|
+
### 5.5 SSE 事件(新增)
|
|
716
|
+
|
|
717
|
+
```
|
|
718
|
+
event: artifact_created
|
|
719
|
+
data: {"id":"<uuid>","kind":"pdf","title":"..."}
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
注入到现有 `/api/prompt` 流。前端识别后调 `listArtifacts` 刷新右抽屉。
|
|
723
|
+
|
|
724
|
+
### 5.6 按钮 prompt 模板(按 kind 实例化)
|
|
725
|
+
|
|
726
|
+
| kind | skillName | prompt 第 1 行 |
|
|
727
|
+
|---|---|---|
|
|
728
|
+
| pdf | pdf | "请用 pdf Skill 把当前对话整理产出为 PDF" |
|
|
729
|
+
| docx | docx | "请用 docx Skill 把当前对话整理产出为 Word 文档" |
|
|
730
|
+
| pptx | pptx | "请用 pptx Skill 把当前对话整理产出为 PPT 演示" |
|
|
731
|
+
| xlsx | xlsx | "请用 xlsx Skill 把当前对话整理产出为 Excel 表格" |
|
|
732
|
+
| html | html / web-artifacts-builder | (TBD-5 决定,codex 实施时查 anthropics/skills 实际有什么 HTML 类 Skill) |
|
|
733
|
+
|
|
734
|
+
完整 prompt 见 §4 Step 3。
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## §6 验收清单
|
|
739
|
+
|
|
740
|
+
### 6.1 总验收 3 条
|
|
741
|
+
- [ ] **验收 1**:5 种格式产出全过 —— 同一对话依次点 5 个按钮,5 个产物都在右抽屉出现 tab,下载到本地能用对应应用打开
|
|
742
|
+
- [ ] **验收 2**:三通道触发等价 —— 同一格式分别用按钮 / `/pdf` / 自然语言"做成 PDF"触发,3 次产出的 manifest 结构一致(kind/renderer 相同,files 都含主文件)
|
|
743
|
+
- [ ] **验收 3**:Skill 噪音可控 —— 默认 `/` 菜单看不到用户全局 Skill;设置面板 toggle 打开后看到;关闭后看不到
|
|
744
|
+
|
|
745
|
+
### 6.2 各 Step 本地验收
|
|
746
|
+
见 §4 各 step 的"验收 fingerprint"。每个 step 提交时 PR body 必含其 fingerprint 实测输出。
|
|
747
|
+
|
|
748
|
+
### 6.3 体感测试(§10.6 复述)
|
|
749
|
+
- [ ] 按钮 hover ≤ 100ms 出 tooltip
|
|
750
|
+
- [ ] 按钮 disabled 时灰度明显(opacity 50% 或更低)
|
|
751
|
+
- [ ] 点按钮到右抽屉打开 ≤ 5s(agent 调用 Skill 的时间)
|
|
752
|
+
- [ ] 右抽屉打开后第一个 tab 自动高亮 + 抽屉内容自动滚到对应 ArtifactView
|
|
753
|
+
- [ ] 切换 tab ≤ 200ms,无白屏闪烁
|
|
754
|
+
- [ ] HTML iframe 加载时显示 loading 反馈
|
|
755
|
+
- [ ] 暗色主题:5 个按钮 + 抽屉 + tab + 元数据卡片无白色露馅
|
|
756
|
+
- [ ] Tab 焦点流:textarea → 5 个按钮 → 发送按钮 → 抽屉 tab → 关闭按钮
|
|
757
|
+
- [ ] Esc 关抽屉
|
|
758
|
+
- [ ] 全屏 / 非全屏切换流畅
|
|
759
|
+
|
|
760
|
+
### 6.4 安全审计(§10.5 复述)
|
|
761
|
+
- [ ] iframe sandbox = `allow-scripts`,**无** `allow-same-origin`
|
|
762
|
+
- [ ] iframe 内尝试 `top.document.cookie` 抛 SecurityError
|
|
763
|
+
- [ ] artifact id 必须是 uuid v4 格式(正则校验)
|
|
764
|
+
- [ ] `/api/artifacts/:id/files/:filename` 拒绝 `..` / 绝对路径 / 不在 manifest.files 里的文件名
|
|
765
|
+
- [ ] `~/.llm-wiki-agent/artifacts/<id>/` 路径解析后必须在 `~/.llm-wiki-agent/artifacts/` 内
|
|
766
|
+
- [ ] grep 全工程无 key / 真名 / 用户主目录绝对路径(沿用阶段二)
|
|
767
|
+
- [ ] vendor 进项目的 `.claude/skills/*/SKILL.md` 不含 anthropic 仓库的私有 commit hash / 内部 URL
|
|
768
|
+
|
|
769
|
+
### 6.5 阶段二回归
|
|
770
|
+
- [ ] `/sediment` 仍能结晶对话
|
|
771
|
+
- [ ] `/new-wiki` 仍能新建库
|
|
772
|
+
- [ ] `@` 引用菜单 + wiki 链接点击 + 右抽屉 wiki 页面预览
|
|
773
|
+
- [ ] 设置面板填 API key + 测试连接(沿用 DeepSeek 测)
|
|
774
|
+
|
|
775
|
+
---
|
|
776
|
+
|
|
777
|
+
## §7 给 codex 的交接说明
|
|
778
|
+
|
|
779
|
+
### 7.1 工作前必读
|
|
780
|
+
1. `CLAUDE.md`(项目规则)
|
|
781
|
+
2. `PRODUCT.md`(产品意图全文,**特别是 §3 架构、§4 阶段三、§5 UI、§7 ADR-16 / ADR-17**)
|
|
782
|
+
3. `docs/stage-2-design.md`(阶段二归档,有相似的工作流和归属原则)
|
|
783
|
+
4. 本文档(实施细则)
|
|
784
|
+
|
|
785
|
+
### 7.2 工作节奏(沿用阶段二验证有效的流程)
|
|
786
|
+
- **一次性按 §9 顺序做完 8 step**,不等逐 step 验收
|
|
787
|
+
- **每个 step 一个原子 commit**(共 8 个)
|
|
788
|
+
- **允许在 8 个 step commit 之外补充 `fix(stage-3): ...` 修复 commit**(自查或验收发现的真实 bug,每个 fix 也是原子 commit)
|
|
789
|
+
- commit message 格式:
|
|
790
|
+
```
|
|
791
|
+
feat(stage-3-step-N): <一句话>
|
|
792
|
+
|
|
793
|
+
- 改动 1
|
|
794
|
+
- 改动 2
|
|
795
|
+
|
|
796
|
+
本 step 验收:
|
|
797
|
+
$ <command>
|
|
798
|
+
<expected output>
|
|
799
|
+
```
|
|
800
|
+
- 8 step 全做完后提 1 个 PR(base: main, head: stage-3),PR body 必须含 §7.5 + §10.7 对账单
|
|
801
|
+
- 每个 step diff 控制在 300 行以内(含新增文件),超出在 commit body 说明
|
|
802
|
+
|
|
803
|
+
### 7.3 不要做的事
|
|
804
|
+
- ❌ 加 §3 之外的新依赖(阶段三零新依赖是设计目标;实在需要先停下报备)
|
|
805
|
+
- ❌ 重构阶段二已有代码(除非本文档明确写要改,如 `/api/commands` 的扩展)
|
|
806
|
+
- ❌ 顺手"改善"旁边的代码 / 注释 / 格式
|
|
807
|
+
- ❌ commit message 或代码里出现作者真实姓名,统一用 `Kiro`
|
|
808
|
+
- ❌ `server/src/` 或 `web/src/` 出现本机用户主目录绝对路径(用相对路径或 `homedir()`;docs/ 内允许示例)
|
|
809
|
+
- ❌ `--no-verify` 跳 hook、`--amend` 改前一个 commit、`-f` push
|
|
810
|
+
- ❌ push 到 main、合并到 main
|
|
811
|
+
- ❌ 修改 PRODUCT.md / CLAUDE.md(如发现这些文档有问题,在 PR body 的"本文档需要修订"清单列出)
|
|
812
|
+
- ❌ **新建 `/export-pdf` / `/export-docx` 等 Extension 命令**(违反 D9 + E13——anthropics 已有 Skill)
|
|
813
|
+
|
|
814
|
+
### 7.4 卡住怎么办(与一次性 8 step 工作流一致)
|
|
815
|
+
- 本文档未覆盖的细节歧义:先按合理推测做,commit body 标 `[judgment: ...]` 描述判断依据,claude 总验收时审
|
|
816
|
+
- 某 step 完成后发现下一个 step 设计有问题:先做完本 step,再用 commit body 标 `[design-issue: step N+1 描述]`
|
|
817
|
+
- **TBD 项**(§8):按 §9.5 降级矩阵自动决策,触发降级在 commit body 标 `[TBD-X 降级到 方案Y: 原因]`
|
|
818
|
+
|
|
819
|
+
### 7.5 PR 交付清单(PR body 必含)
|
|
820
|
+
8 step 全做完提 1 个 PR 时,PR body 必含:
|
|
821
|
+
- 8 个 commit 的 hash + 一句话(+ 所有 fix commit)
|
|
822
|
+
- 每个 step fingerprint 的实测输出(可折叠 `<details>`)
|
|
823
|
+
- §10.7 交付物对账单(逐项打勾)
|
|
824
|
+
- 触发的 TBD 降级记录(哪个 TBD → 哪个方案 → 原因)
|
|
825
|
+
- 已知妥协 / 推迟事项
|
|
826
|
+
- 实施中发现的"本文档需要修订"清单
|
|
827
|
+
|
|
828
|
+
---
|
|
829
|
+
|
|
830
|
+
## §8 风险与待办(TBD)
|
|
831
|
+
|
|
832
|
+
### TBD-1:anthropics/skills 4 个 Skill 实际 size 与依赖
|
|
833
|
+
|
|
834
|
+
**影响**:Step 1 vendor 决策
|
|
835
|
+
|
|
836
|
+
**事实**:未实测 4 个 Skill 总大小。如果含大型 binary(如 LibreOffice),vendor 进 git 仓库会很大。
|
|
837
|
+
|
|
838
|
+
**调研路径**:
|
|
839
|
+
1. `git clone https://github.com/anthropics/skills /tmp/anthropics-skills`
|
|
840
|
+
2. `du -sh /tmp/anthropics-skills/{docx,pdf,pptx,xlsx}` —— 看每个 Skill 的总大小
|
|
841
|
+
3. 看 SKILL.md 是否声明外部 binary 依赖
|
|
842
|
+
|
|
843
|
+
**降级方案**:
|
|
844
|
+
- 总 size > 50MB → 不 vendor,改用 `npm run sync-skills` 脚本从 anthropics/skills 拉到 `<repo>/.claude/skills/`(gitignore 此目录)+ README 引导
|
|
845
|
+
- 含外部 binary 依赖(如 libreoffice、wkhtmltopdf) → 在项目 README 加"前置依赖"小节,引导用户 brew install
|
|
846
|
+
|
|
847
|
+
### TBD-2:产物存储位置
|
|
848
|
+
|
|
849
|
+
**影响**:Step 2 存储路径设计
|
|
850
|
+
|
|
851
|
+
**候选**:
|
|
852
|
+
- A(首选):`~/.llm-wiki-agent/artifacts/<id>/` —— 跟应用配置同根,不污染知识库;但跨 kb 共用一处
|
|
853
|
+
- B:`<kbPath>/wiki/artifacts/<id>/` —— 产物归属知识库;但用户可能用 Obsidian 浏览知识库时看到一堆 uuid 目录不友好
|
|
854
|
+
|
|
855
|
+
**推荐 A**(首选)。理由:
|
|
856
|
+
- 产物本质是"对话工作产出",不是知识库的一部分(结晶到 wiki/synthesis/ 才是)
|
|
857
|
+
- 跨知识库切换时产物可保留(user 体验更好)
|
|
858
|
+
- 不污染 Obsidian 视图
|
|
859
|
+
|
|
860
|
+
### TBD-3:anthropics/skills 是否能被 pi-agent loader 加载
|
|
861
|
+
|
|
862
|
+
**影响**:Step 1 + 阶段三能否跑通
|
|
863
|
+
|
|
864
|
+
**事实**:阶段二验证了 `~/.claude/skills/` 下的 Skill 能被 pi-agent 加载(用户的 baoyu-* / dbs-* 都被列出)。但 anthropics/skills 仓库的 SKILL.md 格式是否与 pi-agent 期待的一致**未验证**。
|
|
865
|
+
|
|
866
|
+
**调研路径**:
|
|
867
|
+
1. clone anthropics/skills 看 SKILL.md 顶部 frontmatter 字段
|
|
868
|
+
2. 跟 pi-agent docs/skills.md 或 SDK 源码对照
|
|
869
|
+
3. 实际把一个 Skill 放进 `~/.claude/skills/` 跑一次
|
|
870
|
+
|
|
871
|
+
**降级方案**:
|
|
872
|
+
- 如果格式不兼容:写 adapter 把 anthropics 的 SKILL.md 转成 pi-agent 格式
|
|
873
|
+
- 如果完全不能加载:放弃 anthropics,改用 pi-skills 或 open-design 的产出 Skill
|
|
874
|
+
- 阶段三启动时这是**第一个**要验证的事
|
|
875
|
+
|
|
876
|
+
### TBD-4:HTML 产物的相对路径资源
|
|
877
|
+
|
|
878
|
+
**影响**:Step 5
|
|
879
|
+
|
|
880
|
+
**问题**:HTML 产物如果含 `<img src="./img.png">`,srcDoc 模式下 iframe 没有 base URL,相对路径失效。
|
|
881
|
+
|
|
882
|
+
**候选**:
|
|
883
|
+
- A(首选):v1 不支持外部资源,README 引导 Skill 产出"自包含 HTML"(图片 base64 内嵌、CSS/JS inline)
|
|
884
|
+
- B:用 `<base href="data:..."` 但相对路径仍无效
|
|
885
|
+
- C:升级到 URL-load 模式(用 `/api/artifacts/:id/files/:filename` 服务静态资源),代价是 host-iframe bridge 复杂度
|
|
886
|
+
|
|
887
|
+
**推荐 A**:v1 简单,README 说明清楚即可。如果用户的 Skill 真的产出多文件 HTML,未来阶段升级到 C。
|
|
888
|
+
|
|
889
|
+
### TBD-5:HTML 产物用哪个 Skill
|
|
890
|
+
|
|
891
|
+
**影响**:Step 3 按钮 prompt 模板
|
|
892
|
+
|
|
893
|
+
**事实**:anthropics/skills 仓库有没有专门的 HTML 产出 Skill 未确认。可能候选:
|
|
894
|
+
- `web-artifacts-builder`(用户机器上有,符合阶段三 §4 PRODUCT.md 提到)
|
|
895
|
+
- 或者就用 docx Skill 输出 HTML(不太合理)
|
|
896
|
+
|
|
897
|
+
**调研路径**:codex 实施 Step 1 时确认 anthropics/skills 仓库实际有什么 HTML 类 Skill。
|
|
898
|
+
|
|
899
|
+
**降级方案**:
|
|
900
|
+
- 有 HTML Skill:用它
|
|
901
|
+
- 无:HTML 按钮的 prompt 用 `agent 你直接生成一段 HTML 内容,调 prepare_artifact 拿 path,写到 <path>/index.html,再调 finalize_artifact` —— agent 内置能力(用 fs Skill 或类似)也能写文件,不依赖专门的 HTML Skill
|
|
902
|
+
|
|
903
|
+
### TBD-6:anthropics Skill 可能要求 API key(如 pdf Skill 调外部服务?)
|
|
904
|
+
|
|
905
|
+
**影响**:Step 1 + Step 3 验收
|
|
906
|
+
|
|
907
|
+
**事实**:未知。anthropics 的某些 Skill 可能依赖外部服务(如调 Anthropic API 把 markdown 转 PDF)。
|
|
908
|
+
|
|
909
|
+
**调研路径**:Skill 装好后试跑一次,看是否报"missing API key"。
|
|
910
|
+
|
|
911
|
+
**降级方案**:
|
|
912
|
+
- 报错:在文档加"前置依赖",要求用户在设置面板配 Anthropic key
|
|
913
|
+
- 不报错:忽略
|
|
914
|
+
|
|
915
|
+
---
|
|
916
|
+
|
|
917
|
+
## §9 执行 plan(codex 工作清单)
|
|
918
|
+
|
|
919
|
+
### 9.1 工作流概览
|
|
920
|
+
|
|
921
|
+
```
|
|
922
|
+
作者准备 ───→ codex 实施 ───→ claude 总验收 ───→ 作者决策
|
|
923
|
+
↓ ↓ ↓ ↓
|
|
924
|
+
§9.6 前置 §9.3 8 commit §10 剧本 §10.8 issue
|
|
925
|
+
+ 1 PR + 安全审计 分工修复
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
### 9.2 step 依赖图
|
|
929
|
+
|
|
930
|
+
```
|
|
931
|
+
Step 1 (vendor + loader)
|
|
932
|
+
↓
|
|
933
|
+
├─→ Step 3 (按钮 + 三通道) ─┐
|
|
934
|
+
↓ ↓
|
|
935
|
+
Step 2 (manifest + API) ──→ Step 4 (抽屉 tab) ─┐
|
|
936
|
+
├─→ Step 5 (HtmlRenderer)
|
|
937
|
+
└─→ Step 6 (DownloadOnlyRenderer)
|
|
938
|
+
|
|
939
|
+
Step 7 (设置 toggle,依赖 Step 1 的 source 字段) [独立可早做]
|
|
940
|
+
|
|
941
|
+
Step 8 (总验收 + 打磨) [依赖前 7 个全完成]
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
- **强依赖**:1→{3, 4};2→{3, 4};4→{5, 6};前 7 个→8
|
|
945
|
+
- **可并行**:Step 5 和 Step 6 完全并行;Step 7 可在 Step 1 后任意时间做
|
|
946
|
+
|
|
947
|
+
### 9.3 推荐执行顺序与 commit 编号
|
|
948
|
+
|
|
949
|
+
| Commit # | Step | 复杂度 | 说明 |
|
|
950
|
+
|---|---|---|---|
|
|
951
|
+
| C1 | Step 1(Skill vendor + loader 收紧)| 🟡 中 | 含 TBD-1 / TBD-3 调研;阻塞最多 |
|
|
952
|
+
| C2 | Step 2(ArtifactManifest + API + Extension)| 🟡 中 | 含 TBD-2;后端核心 |
|
|
953
|
+
| C3 | Step 7(设置面板 toggle)| 🟢 低 | 独立可早做,趁后端思路热 |
|
|
954
|
+
| C4 | Step 3(按钮区 + 三通道)| 🟢 低 | 第一个用户可见的前端改动 |
|
|
955
|
+
| C5 | Step 4(右抽屉 tab)| 🟡 中 | 框架,为 5/6 让路 |
|
|
956
|
+
| C6 | Step 5(HtmlRenderer)| 🟡 中 | 含 TBD-4 |
|
|
957
|
+
| C7 | Step 6(DownloadOnlyRenderer)| 🟢 低 | 跟 Step 5 并行做也行,但 commit 顺序还是分开 |
|
|
958
|
+
| C8 | Step 8(总验收 + 打磨)| 🟢 低 | 不新增功能 |
|
|
959
|
+
|
|
960
|
+
**顺序设计原因**:
|
|
961
|
+
- C1 先:解开最多依赖
|
|
962
|
+
- C2 后:后端核心,让前端有 API 可调
|
|
963
|
+
- C3(Step 7)插中间:纯后端 + 简单前端 toggle,省得最后插
|
|
964
|
+
- C4-C6 前端按依赖顺序
|
|
965
|
+
- C8 最后
|
|
966
|
+
|
|
967
|
+
### 9.4 commit 策略
|
|
968
|
+
- 每 step 一个原子 commit(共 8 个)
|
|
969
|
+
- 允许补 `fix(stage-3): ...` commit(自查或验收发现真问题)
|
|
970
|
+
- 全做完提 1 个 PR,PR body 含 §10.7 对账单
|
|
971
|
+
- 在新分支 `stage-3` 上 commit(已开好);不要在 main 上动
|
|
972
|
+
|
|
973
|
+
### 9.5 TBD 降级矩阵(codex 自动决策表)
|
|
974
|
+
|
|
975
|
+
| TBD | 影响 Step | 先试(方案 A)| 失败降级(方案 B)| 终极兜底(方案 C)|
|
|
976
|
+
|---|---|---|---|---|
|
|
977
|
+
| TBD-1(Skill size)| 1 | vendor 4 个 Skill 直接 copy 进 `<repo>/.claude/skills/` | 写 `npm run sync-skills` 脚本 + gitignore | 文档 README 引导用户手动 clone |
|
|
978
|
+
| TBD-2(存储位置)| 2 | `~/.llm-wiki-agent/artifacts/<id>/` | — | — |
|
|
979
|
+
| TBD-3(Skill 兼容)| 1 | 直接放 `.claude/skills/`,期待 pi-agent 加载 | 写 SKILL.md adapter | 阶段三暂停,PR body 报"pi-agent 不兼容 anthropics Skill",等作者决策 |
|
|
980
|
+
| TBD-4(HTML 资源)| 5 | v1 不支持外部资源,README 引导自包含 | — | — |
|
|
981
|
+
| TBD-5(HTML Skill)| 3 | 用 `web-artifacts-builder` Skill | 用 agent 内置 fs 能力直接写 HTML 文件 | 不做 HTML 按钮(v1 4 个按钮)|
|
|
982
|
+
| TBD-6(Skill API key)| 1 + 3 | 直接试跑 | 报错就在文档加"前置依赖"section | — |
|
|
983
|
+
|
|
984
|
+
**触发降级时**:codex 必须在对应 commit body 标 `[TBD-X 降级到 方案Y: 原因]`。
|
|
985
|
+
|
|
986
|
+
### 9.6 前置准备(作者在 codex 启动前完成)
|
|
987
|
+
|
|
988
|
+
- [ ] 当前分支已在 `stage-3`(claude 已切;codex 接管时 `git status` 确认)
|
|
989
|
+
- [ ] **Anthropic API key 可用**(设置面板已配 / 或环境变量 ANTHROPIC_API_KEY;至少有一个 provider 能跑 agent)
|
|
990
|
+
- [ ] 用户机器有足够磁盘空间装 anthropics/skills(预估 < 100MB,但要确认 TBD-1)
|
|
991
|
+
- [ ] 阶段二的 llm-wiki-skill 仍在 `~/.claude/skills/llm-wiki-skill/`(不要动)
|
|
992
|
+
|
|
993
|
+
---
|
|
994
|
+
|
|
995
|
+
## §10 总验收剧本(claude 总验收用)
|
|
996
|
+
|
|
997
|
+
### 10.1 验收顺序
|
|
998
|
+
|
|
999
|
+
1. **静态检查**:grep / typecheck / 文件结构对账(不跑应用)
|
|
1000
|
+
2. **启动检查**:`npm run dev` 后端起、前端起、**阶段二回归**
|
|
1001
|
+
3. **端到端剧本 A**:5 种格式产出全过(覆盖验收 1)
|
|
1002
|
+
4. **端到端剧本 B**:三通道触发等价(覆盖验收 2)
|
|
1003
|
+
5. **端到端剧本 C**:Skill 噪音可控 + 设置面板 toggle(覆盖验收 3)
|
|
1004
|
+
6. **安全审计**:sandbox / 路径逃逸 / id 校验
|
|
1005
|
+
7. **体感测试**:菜单延迟、抽屉切换、暗色
|
|
1006
|
+
8. **对账单核对**:§10.7 逐项打勾
|
|
1007
|
+
9. **issue 清单**:按 §10.8 格式列 → 交作者
|
|
1008
|
+
|
|
1009
|
+
### 10.2 端到端剧本 A:5 种格式产出(验收 1)
|
|
1010
|
+
|
|
1011
|
+
```bash
|
|
1012
|
+
# 预置:已启动 app,选一个 kb,对话 5-10 轮(话题:奥派经济学的中心论点)
|
|
1013
|
+
|
|
1014
|
+
# Phase 1:触发 5 个按钮
|
|
1015
|
+
# UI: 依次点 📄 PDF · 📝 Word · 📊 PPT · 📋 Excel · 🌐 HTML
|
|
1016
|
+
# 每次点击预期:
|
|
1017
|
+
# 1. 输入框瞬间出现 prompt 文本
|
|
1018
|
+
# 2. 流式输出(agent 调用 prepare_artifact → Skill → finalize_artifact)
|
|
1019
|
+
# 3. ~10s 后右抽屉自动打开 + 新 tab 高亮
|
|
1020
|
+
# 4. SSE event artifact_created 触发(DevTools Network 看 EventSource)
|
|
1021
|
+
|
|
1022
|
+
# Phase 2:5 个产物验证
|
|
1023
|
+
ARTIFACT_DIR=~/.llm-wiki-agent/artifacts
|
|
1024
|
+
ls -d ${ARTIFACT_DIR}/*/ | wc -l # 应至少 5(可能更多,历史累积)
|
|
1025
|
+
|
|
1026
|
+
# 找到本次 5 个 artifact
|
|
1027
|
+
ls -dt ${ARTIFACT_DIR}/*/ | head -5 # 按 mtime 倒序最新 5 个
|
|
1028
|
+
|
|
1029
|
+
for D in $(ls -dt ${ARTIFACT_DIR}/*/ | head -5); do
|
|
1030
|
+
echo "=== $D ==="
|
|
1031
|
+
cat "$D/manifest.json" | python3 -c "import sys,json;d=json.load(sys.stdin);print(f' kind={d[\"kind\"]} renderer={d[\"renderer\"]} primaryFile={d[\"primaryFile\"]} size={d[\"metadata\"][\"sizeBytes\"]}')"
|
|
1032
|
+
ls "$D"
|
|
1033
|
+
done
|
|
1034
|
+
# 期望:5 个 manifest,kind 分别是 pdf/docx/pptx/xlsx/html
|
|
1035
|
+
|
|
1036
|
+
# Phase 3:右抽屉 tab 验证
|
|
1037
|
+
# UI: 右抽屉 tab 条有 5 个 tab,最新(HTML)高亮
|
|
1038
|
+
# 切换每个 tab:
|
|
1039
|
+
# - HTML tab → iframe 渲染(可见内容)
|
|
1040
|
+
# - PDF/Word/PPT/Excel tab → 元数据卡片 + 下载按钮
|
|
1041
|
+
|
|
1042
|
+
# Phase 4:下载验证
|
|
1043
|
+
# UI: 切到 PDF tab,点"📥 下载"
|
|
1044
|
+
ls ~/Downloads/*.pdf | tail -1 # 应有新文件
|
|
1045
|
+
|
|
1046
|
+
# Mac 下打开下载的文件:
|
|
1047
|
+
# - PDF:Preview 能开
|
|
1048
|
+
# - docx:Word 能开(如已装)
|
|
1049
|
+
# - pptx:Keynote 能开
|
|
1050
|
+
# - xlsx:Numbers 能开
|
|
1051
|
+
|
|
1052
|
+
# Phase 5:HTML 渲染深度检查
|
|
1053
|
+
# UI: 切回 HTML tab,DevTools Elements 检查 iframe:
|
|
1054
|
+
# - sandbox="allow-scripts"
|
|
1055
|
+
# - 没有 allow-same-origin
|
|
1056
|
+
# - srcDoc 含完整 HTML 内容
|
|
1057
|
+
# 在 iframe DevTools console 跑:top.document.title
|
|
1058
|
+
# 期望:抛 SecurityError(沙箱隔离生效)
|
|
1059
|
+
```
|
|
1060
|
+
|
|
1061
|
+
### 10.3 端到端剧本 B:三通道触发等价(验收 2)
|
|
1062
|
+
|
|
1063
|
+
```bash
|
|
1064
|
+
# 同一对话内,分别用三通道触发 PDF 产出
|
|
1065
|
+
|
|
1066
|
+
# 通道 A:点 📄 PDF 按钮
|
|
1067
|
+
# → 等产出完成,记录 artifact id(看 manifest.json)
|
|
1068
|
+
ID_A=...
|
|
1069
|
+
|
|
1070
|
+
# 通道 B:输入框输 /pdf → 选中 → 发送
|
|
1071
|
+
# → 等产出,记录 id
|
|
1072
|
+
ID_B=...
|
|
1073
|
+
|
|
1074
|
+
# 通道 C:自然语言"请把这次讨论做成 PDF"
|
|
1075
|
+
# → 等产出,记录 id
|
|
1076
|
+
ID_C=...
|
|
1077
|
+
|
|
1078
|
+
# 验证三个 manifest 结构一致
|
|
1079
|
+
for ID in $ID_A $ID_B $ID_C; do
|
|
1080
|
+
jq '{kind, renderer, primaryFile: .primaryFile, fileCount: (.files | length)}' ~/.llm-wiki-agent/artifacts/$ID/manifest.json
|
|
1081
|
+
done
|
|
1082
|
+
|
|
1083
|
+
# 期望:三个输出
|
|
1084
|
+
# {
|
|
1085
|
+
# "kind": "pdf",
|
|
1086
|
+
# "renderer": "download-only",
|
|
1087
|
+
# "primaryFile": "<some>.pdf",
|
|
1088
|
+
# "fileCount": 1
|
|
1089
|
+
# }
|
|
1090
|
+
# (三次完全一样,证明三通道后端走同一路径)
|
|
1091
|
+
```
|
|
1092
|
+
|
|
1093
|
+
### 10.4 端到端剧本 C:Skill 噪音可控(验收 3)
|
|
1094
|
+
|
|
1095
|
+
```bash
|
|
1096
|
+
# Phase 1:默认状态
|
|
1097
|
+
# UI: 进入对话 → 输 /
|
|
1098
|
+
# 期望:菜单分组
|
|
1099
|
+
# 📦 内置:sediment_to_wiki, new_wiki
|
|
1100
|
+
# 🎨 产出:pdf, docx, pptx, xlsx, html(项目级)
|
|
1101
|
+
# 🛠 pi 默认:(用户 ~/.pi/agent/skills/ 下的,brainstorming/dbs/etc.)
|
|
1102
|
+
# 🌍 用户全局:[空 / 不显示]
|
|
1103
|
+
|
|
1104
|
+
# API 验证
|
|
1105
|
+
curl -s 'http://localhost:8787/api/commands' | jq '[.items[] | .source] | group_by(.) | map({source: .[0], count: length})'
|
|
1106
|
+
# 期望:no source=="user-global" entry
|
|
1107
|
+
|
|
1108
|
+
# Phase 2:打开 toggle
|
|
1109
|
+
# UI: ⚙ 设置 → Skill 加载 section → 打开"展示用户全局 Skill" toggle
|
|
1110
|
+
|
|
1111
|
+
# 立即 / 菜单刷新
|
|
1112
|
+
# 期望:多出"🌍 用户全局"分组,含 30+ Skill(用户机器实际数)
|
|
1113
|
+
|
|
1114
|
+
# API 验证
|
|
1115
|
+
curl -s 'http://localhost:8787/api/commands' | jq '[.items[] | .source] | group_by(.) | map({source: .[0], count: length})'
|
|
1116
|
+
# 期望:含 source=="user-global", count > 0
|
|
1117
|
+
|
|
1118
|
+
# Phase 3:持久化验证
|
|
1119
|
+
cat ~/.llm-wiki-agent/config.json | jq '.showUserGlobalSkills'
|
|
1120
|
+
# 期望:true
|
|
1121
|
+
|
|
1122
|
+
# 重启后端 → 重新 GET /api/commands
|
|
1123
|
+
# 期望:仍含 user-global
|
|
1124
|
+
|
|
1125
|
+
# Phase 4:关闭 toggle → 立即缩回
|
|
1126
|
+
```
|
|
1127
|
+
|
|
1128
|
+
### 10.5 阶段二回归(防止破坏既有功能)
|
|
1129
|
+
|
|
1130
|
+
```bash
|
|
1131
|
+
# A. 启动
|
|
1132
|
+
npm run dev # 应一行起前后端,无 error
|
|
1133
|
+
|
|
1134
|
+
# B. 阶段二验收 1:新建库
|
|
1135
|
+
# UI: 侧栏 + 新建知识库 → 输 stage3-regression + 方向"测试阶段三是否破坏阶段二"
|
|
1136
|
+
ls ~/llm-wiki/stage3-regression/ # 应有 wiki/ raw/ purpose.md
|
|
1137
|
+
|
|
1138
|
+
# C. 阶段二验收 2:消化→讨论→结晶
|
|
1139
|
+
# 粘 URL → chip 亮 → 发送
|
|
1140
|
+
# 看 raw/ 出新文件
|
|
1141
|
+
# 讨论 → /sediment → 看 wiki/synthesis/sessions/
|
|
1142
|
+
|
|
1143
|
+
# D. 阶段二验收 3:API key
|
|
1144
|
+
# 设置面板 → DeepSeek(或 Anthropic)→ 保存并测试 → 绿色提示
|
|
1145
|
+
cat ~/.pi/agent/auth.json | jq 'keys' # 应含已配 provider
|
|
1146
|
+
|
|
1147
|
+
# E. @ 引用 + 右抽屉 wiki 页面预览
|
|
1148
|
+
# 输 @ → 弹菜单 → 选 → [[wiki/...]] 插入
|
|
1149
|
+
# 发送让 agent 回引用 → 点链接 → 抽屉打开
|
|
1150
|
+
|
|
1151
|
+
# F. 全部 pass 才算阶段二未破坏
|
|
1152
|
+
```
|
|
1153
|
+
|
|
1154
|
+
### 10.6 安全审计 checklist
|
|
1155
|
+
|
|
1156
|
+
> ⚠️ 本 checklist 只扫 `server/src/`、`web/src/`,不扫 `docs/` 避免本文档自身的占位/示例文本被自报警。
|
|
1157
|
+
|
|
1158
|
+
- [ ] `grep -rE "sk-[a-zA-Z0-9_-]{20,}" ~/.llm-wiki-agent/` 无输出
|
|
1159
|
+
- [ ] `grep -rE "sk-[a-zA-Z0-9_-]{20,}" server/src/ web/src/` 无输出
|
|
1160
|
+
- [ ] `~/.pi/agent/auth.json` 权限 `-rw-------`
|
|
1161
|
+
- [ ] iframe sandbox attr 检查(DevTools):`allow-scripts` 无 `allow-same-origin`
|
|
1162
|
+
- [ ] iframe 内执行 `top.document.cookie` 抛 SecurityError
|
|
1163
|
+
- [ ] `curl 'http://localhost:8787/api/artifacts/not-uuid'` → 400
|
|
1164
|
+
- [ ] `curl 'http://localhost:8787/api/artifacts/<valid-uuid>/files/../../../etc/passwd'` → 400
|
|
1165
|
+
- [ ] `curl 'http://localhost:8787/api/artifacts/<valid-uuid>/files/not-in-manifest.txt'` → 404 或 400
|
|
1166
|
+
- [ ] React DevTools 看 SettingsPanel:保存后 state 不含 key 明文(沿用阶段二)
|
|
1167
|
+
- [ ] commit log + `server/src/` + `web/src/` 不含本机用户主目录绝对路径
|
|
1168
|
+
- [ ] commit log 不含真实姓名(应统一 `Kiro`)
|
|
1169
|
+
- [ ] `.claude/skills/` 下 4 个 vendor Skill 不含可执行 binary(如果含,README 必须明示)
|
|
1170
|
+
|
|
1171
|
+
### 10.7 交付物对账单
|
|
1172
|
+
|
|
1173
|
+
**新文件**:
|
|
1174
|
+
- [ ] `<repo>/.claude/skills/docx/SKILL.md` + scripts
|
|
1175
|
+
- [ ] `<repo>/.claude/skills/pdf/SKILL.md` + scripts
|
|
1176
|
+
- [ ] `<repo>/.claude/skills/pptx/SKILL.md` + scripts
|
|
1177
|
+
- [ ] `<repo>/.claude/skills/xlsx/SKILL.md` + scripts
|
|
1178
|
+
- [ ] `<repo>/.claude/skills/README.md`(vendor 来源说明 + sync 命令)
|
|
1179
|
+
- [ ] `server/src/artifacts.ts`
|
|
1180
|
+
- [ ] `server/src/extensions/artifacts.ts`
|
|
1181
|
+
- [ ] `web/src/components/ExportButtons.tsx`
|
|
1182
|
+
- [ ] `web/src/components/ArtifactView.tsx`
|
|
1183
|
+
- [ ] `web/src/components/renderers/HtmlRenderer.tsx`
|
|
1184
|
+
- [ ] `web/src/components/renderers/DownloadOnlyRenderer.tsx`
|
|
1185
|
+
|
|
1186
|
+
**修改文件**:
|
|
1187
|
+
- [ ] `server/src/agent.ts`(Skill loader 加 source 标签 + 注册 artifacts Extension)
|
|
1188
|
+
- [ ] `server/src/index.ts`(5 个新路由 + `/api/commands` 加参数 + SSE artifact_created event)
|
|
1189
|
+
- [ ] `server/src/config.ts`(AppConfig 加 `showUserGlobalSkills`)
|
|
1190
|
+
- [ ] `web/src/App.tsx`(drawerMode + activeArtifactId 状态)
|
|
1191
|
+
- [ ] `web/src/components/RightDrawer.tsx`(多 tab 支持)
|
|
1192
|
+
- [ ] `web/src/components/ChatPanel.tsx`(按钮区 + SSE artifact_created 处理)
|
|
1193
|
+
- [ ] `web/src/components/SettingsPanel.tsx`(Skill 加载 toggle)
|
|
1194
|
+
- [ ] `web/src/lib/api.ts`(新 API client)
|
|
1195
|
+
|
|
1196
|
+
**新增 API**(curl 应全部 200 或预期错误码):
|
|
1197
|
+
- [ ] `GET /api/commands?includeUserGlobal=true` 返回 source 字段
|
|
1198
|
+
- [ ] `GET /api/artifacts?conversation=<id>`
|
|
1199
|
+
- [ ] `GET /api/artifacts/:id`
|
|
1200
|
+
- [ ] `GET /api/artifacts/:id/files/:filename`
|
|
1201
|
+
- [ ] `GET /api/config`
|
|
1202
|
+
- [ ] `POST /api/config`
|
|
1203
|
+
|
|
1204
|
+
**新增 Extension 工具**(agent 应能调用):
|
|
1205
|
+
- [ ] `prepare_artifact`
|
|
1206
|
+
- [ ] `finalize_artifact`
|
|
1207
|
+
|
|
1208
|
+
**新增 SSE 事件**:
|
|
1209
|
+
- [ ] `artifact_created`
|
|
1210
|
+
|
|
1211
|
+
**新增前端依赖**:**预期 0 个**(如果实际有,PR body 必须说明原因并补 ADR)
|
|
1212
|
+
|
|
1213
|
+
**Commit 数量**:8 个核心 + 0-N 个 fix(顺序见 §9.3)
|
|
1214
|
+
|
|
1215
|
+
### 10.8 issue 清单格式(策略 B:claude 列 → 作者决策 → 谁修)
|
|
1216
|
+
|
|
1217
|
+
沿用阶段二 §10.8 格式:
|
|
1218
|
+
|
|
1219
|
+
```markdown
|
|
1220
|
+
### Issue #N:<一句话标题>
|
|
1221
|
+
|
|
1222
|
+
**严重度**:🔴 阻塞验收 / 🟡 不阻塞但应修 / 🟢 建议
|
|
1223
|
+
|
|
1224
|
+
**所属 step**:Step X
|
|
1225
|
+
|
|
1226
|
+
**期望**(来自本文档):
|
|
1227
|
+
> <引用本文档对应段落>
|
|
1228
|
+
|
|
1229
|
+
**实际**:
|
|
1230
|
+
<观察到的事实,附 commit hash + 文件路径 + 命令输出>
|
|
1231
|
+
|
|
1232
|
+
**复现**:
|
|
1233
|
+
\`\`\`bash
|
|
1234
|
+
<具体命令>
|
|
1235
|
+
\`\`\`
|
|
1236
|
+
|
|
1237
|
+
**根因猜测**:
|
|
1238
|
+
<我的分析;明确标"猜测" vs "事实">
|
|
1239
|
+
|
|
1240
|
+
**建议归属**:
|
|
1241
|
+
- [ ] codex 修(实现质量问题)
|
|
1242
|
+
- [ ] claude 修(设计文档没写清楚,由 claude 改文档 + 改实现)
|
|
1243
|
+
- [ ] 作者决策(不确定归属)
|
|
1244
|
+
|
|
1245
|
+
**修复路径草案**:
|
|
1246
|
+
<可选,给一个修法思路>
|
|
1247
|
+
```
|
|
1248
|
+
|
|
1249
|
+
全部 issue 列完后给作者总览表:
|
|
1250
|
+
|
|
1251
|
+
```
|
|
1252
|
+
| # | 严重度 | step | 一句话 | 建议归属 |
|
|
1253
|
+
|---|---|---|---|---|
|
|
1254
|
+
| ... |
|
|
1255
|
+
```
|
|
1256
|
+
|
|
1257
|
+
作者按归属批准 → claude/codex 分别修 → claude 再验收一轮 → 直到全绿。
|
|
1258
|
+
|
|
1259
|
+
---
|
|
1260
|
+
|
|
1261
|
+
## §11 文档维护
|
|
1262
|
+
|
|
1263
|
+
- **本文档 = 阶段三实施计划**。实施过程偏离时在本文档加"实施记录"块说明
|
|
1264
|
+
- **阶段三验收通过后**:
|
|
1265
|
+
- PRODUCT.md §10 阶段三章节填具体 commit hash + 完成情况 + 接受的妥协
|
|
1266
|
+
- PRODUCT.md §3.2 如有新依赖加行(预期 0 个)
|
|
1267
|
+
- PRODUCT.md 如需新增 ADR-18+(如有未预见的架构决策)
|
|
1268
|
+
- 本文档标 `✅ 已完成 <日期>`,不再修改(归档)
|
|
1269
|
+
- **阶段四启动**:新建 `docs/stage-4-design.md`,本文档作为参考样本
|