@winspan/claude-forge 8.53.2 → 8.54.3
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/DEVELOPMENT.md +290 -221
- package/README.md +50 -8
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +7 -3
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +1 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +0 -1
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/maintenance.d.ts +25 -3
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +33 -4
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/routing.d.ts +4 -0
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +10 -4
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/sessions.d.ts +17 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +64 -0
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +4 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +10 -2
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +5 -0
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +6 -0
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +2 -0
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +19 -4
- package/dist/daemon/index.js.map +1 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +13 -2
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/semantic-matcher.d.ts +2 -2
- package/dist/skills/semantic-matcher.d.ts.map +1 -1
- package/dist/skills/semantic-matcher.js +14 -19
- package/dist/skills/semantic-matcher.js.map +1 -1
- package/dist/skills/upgrade-engine.d.ts +3 -1
- package/dist/skills/upgrade-engine.d.ts.map +1 -1
- package/dist/skills/upgrade-engine.js +25 -14
- package/dist/skills/upgrade-engine.js.map +1 -1
- package/dist/web/analytics/weekly-report.d.ts.map +1 -1
- package/dist/web/analytics/weekly-report.js +21 -29
- package/dist/web/analytics/weekly-report.js.map +1 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +32 -2
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -7
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +2 -3
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +3 -2
- package/dist/web/server.js.map +1 -1
- package/package.json +12 -2
- package/scripts/postinstall.cjs +21 -0
- package/.claude/CLAUDE.md +0 -17
- package/.eslintrc.js +0 -23
- package/.prettierrc +0 -8
- package/ARCHITECTURE_ISSUES.md +0 -249
- package/CLAUDE.md +0 -265
- package/CLAUDE.md.backup +0 -488
- package/docs/concurrent-agents.md +0 -129
- package/docs/design/architecture-review-20260516.md +0 -232
- package/docs/design/fix-skills-data-and-set-leak-spec-20260516-1300.md +0 -219
- package/docs/design/h1-storage-aggregation-spec-20260518-1121.md +0 -299
- package/docs/design/h2-getdatabase-encapsulation-spec-20260518-1450.md +0 -191
- package/docs/design/h3-fallback-removal-spec-20260518-1245.md +0 -76
- package/docs/design/h4-index-dedup-spec-20260518-1230.md +0 -109
- package/docs/design/h6-services-migration-spec-20260518-1355.md +0 -82
- package/docs/design/hook-failure-queue-spec-20260516-1530.md +0 -204
- package/docs/design/l1-swarm-protocol-extract-spec-20260518-1605.md +0 -106
- package/docs/design/m10-forge-paths-spec-20260518-1320.md +0 -121
- package/docs/design/m2-m3-tool-input-spec-20260518-1425.md +0 -131
- package/docs/design/m7-routing-event-association-spec-20260518-1545.md +0 -103
- package/docs/design/project-path-gitroot-spec-20260518-1715.md +0 -134
- package/docs/design/refactor-phase1-spec-20260515-1600.md +0 -543
- package/docs/design/refactor-phase2-spec-20260515-1700.md +0 -424
- package/docs/design/skill-ai-upgrade-spec-20260518-1930.md +0 -297
- package/docs/design/task-active-gc-spec-20260518-1745.md +0 -146
- package/docs/design/tasks-list-filter-pagination-spec-20260518-0930.md +0 -208
- package/docs/implementation/daemon-skill-sync-changelog-20260518-2000.md +0 -22
- package/docs/implementation/fix-skills-data-and-set-leak-changelog-20260516-1300.md +0 -104
- package/docs/implementation/h1-storage-aggregation-changelog-20260518-1121.md +0 -82
- package/docs/implementation/h2-final-changelog-20260518-1530.md +0 -61
- package/docs/implementation/h2-phase1-safety-net-changelog-20260518-1450.md +0 -70
- package/docs/implementation/h2-phase2-operations-changelog-20260518-1450.md +0 -120
- package/docs/implementation/h2-phase3-callsites-changelog-20260518-1450.md +0 -71
- package/docs/implementation/h3-fallback-removal-changelog-20260518-1245.md +0 -71
- package/docs/implementation/h4-index-dedup-changelog-20260518-1230.md +0 -60
- package/docs/implementation/h6-services-migration-changelog-20260518-1355.md +0 -46
- package/docs/implementation/h7-m9-defaults-changelog-20260518-1300.md +0 -46
- package/docs/implementation/hook-failure-queue-changelog-20260516-1530.md +0 -196
- package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +0 -56
- package/docs/implementation/l1-swarm-protocol-extract-changelog-20260518-1605.md +0 -45
- package/docs/implementation/l3-l4-daemon-perf-changelog-20260518-1410.md +0 -63
- package/docs/implementation/l6-l8-final-cleanup-changelog-20260518-1640.md +0 -38
- package/docs/implementation/m1-m4-m5-l7-cleanup-changelog-20260518-1310.md +0 -58
- package/docs/implementation/m10-forge-paths-changelog-20260518-1320.md +0 -60
- package/docs/implementation/m2-m3-tool-input-changelog-20260518-1425.md +0 -43
- package/docs/implementation/m6-m8-naming-shutdown-changelog-20260518-1340.md +0 -56
- package/docs/implementation/m7-routing-association-changelog-20260518-1545.md +0 -69
- package/docs/implementation/project-path-gitroot-changelog-20260518-1715.md +0 -63
- package/docs/implementation/refactor-phase1-changelog-20260515-1630.md +0 -354
- package/docs/implementation/refactor-phase2-changelog-20260515-1705.md +0 -421
- package/docs/implementation/skill-ai-upgrade-changelog-20260518-1930.md +0 -49
- package/docs/implementation/task-active-gc-changelog-20260518-1745.md +0 -35
- package/docs/implementation/task-title-summary-changelog-20260518-1130.md +0 -39
- package/docs/implementation/tasks-detail-back-loses-filters-changelog-20260518-1100.md +0 -22
- package/docs/implementation/tasks-list-filter-pagination-changelog-20260518-0930.md +0 -72
- package/docs/implementation/tasks-page-white-screen-hotfix-changelog-20260518-1015.md +0 -56
- package/docs/reviews/claudemd-template-sync.md +0 -54
- package/docs/reviews/task-title-summary.md +0 -92
- package/docs/reviews/tasks-detail-back-loses-filters.md +0 -58
- package/docs/reviews/tasks-filter-pagination.md +0 -80
- package/docs/reviews/tasks-page-white-screen-hotfix.md +0 -126
- package/docs/ruflo-learning-strategy.md +0 -322
- package/docs/skills-deduplication-analysis.md +0 -83
- package/docs/skills-multiformat-support.md +0 -177
- package/docs/skills-third-party.md +0 -183
- package/docs/testing/tasks-filter-pagination-test-report.md +0 -86
- package/forge +0 -321
- package/playwright.config.ts +0 -40
- package/scripts/demo-v2.ts +0 -91
- package/scripts/dev-daemon.sh +0 -232
- package/scripts/dev-web.ts +0 -109
- package/scripts/e2e-mcp-link.ts +0 -423
- package/scripts/e2e-methodology-quality.ts +0 -253
- package/scripts/e2e-routing.ts +0 -456
- package/scripts/e2e-user-methodology.ts +0 -326
- package/scripts/e2e-web-workflows.ts +0 -299
- package/scripts/migrate-legacy-to-dynamic.sql +0 -108
- package/scripts/regenerate-execution-docs.ts +0 -116
- package/scripts/sync-agent-skills.ts +0 -193
- package/scripts/test-hook.sh +0 -71
- package/scripts/verify-skill-loading.ts +0 -62
- package/src/claudemd/claudemd-generator.ts +0 -568
- package/src/claudemd/convention-extractor.ts +0 -69
- package/src/claudemd/index.ts +0 -35
- package/src/claudemd/persona-manager.ts +0 -88
- package/src/claudemd/resume-manager.ts +0 -236
- package/src/claudemd/tech-detector.ts +0 -220
- package/src/claudemd/templates/swarm-protocol.md +0 -222
- package/src/cli/commands/claudemd.ts +0 -84
- package/src/cli/commands/config.ts +0 -46
- package/src/cli/commands/daemon.ts +0 -310
- package/src/cli/commands/executions.ts +0 -115
- package/src/cli/commands/init.ts +0 -204
- package/src/cli/commands/logs.ts +0 -181
- package/src/cli/commands/mcp.ts +0 -242
- package/src/cli/commands/menu.ts +0 -357
- package/src/cli/commands/skills.ts +0 -328
- package/src/cli/commands/stats.ts +0 -73
- package/src/cli/commands/status.ts +0 -69
- package/src/cli/commands/template.ts +0 -77
- package/src/cli/commands/trace.ts +0 -148
- package/src/cli/index.ts +0 -42
- package/src/cli/init/hook-manager.ts +0 -132
- package/src/core/ai/provider.ts +0 -308
- package/src/core/ai/types.ts +0 -51
- package/src/core/config.ts +0 -124
- package/src/core/constants.ts +0 -67
- package/src/core/event-fields.ts +0 -32
- package/src/core/queue/index.ts +0 -192
- package/src/core/storage/base.ts +0 -302
- package/src/core/storage/events.ts +0 -434
- package/src/core/storage/injections.ts +0 -78
- package/src/core/storage/maintenance.ts +0 -59
- package/src/core/storage/migrations/002_add_skill_tracking.sql +0 -6
- package/src/core/storage/migrations/003_add_skill_invocations.sql +0 -23
- package/src/core/storage/performance-indexes.sql +0 -23
- package/src/core/storage/routing.ts +0 -322
- package/src/core/storage/rows.ts +0 -112
- package/src/core/storage/schema.sql +0 -224
- package/src/core/storage/sessions.ts +0 -168
- package/src/core/storage/skills.ts +0 -233
- package/src/core/storage/sqlite.ts +0 -293
- package/src/core/storage/tasks.ts +0 -318
- package/src/core/storage/token-usage.ts +0 -93
- package/src/core/types.ts +0 -181
- package/src/core/utils/error-handler.ts +0 -257
- package/src/core/utils/forge-resume-block.ts +0 -74
- package/src/core/utils/format.ts +0 -69
- package/src/core/utils/git.ts +0 -23
- package/src/core/utils/logger.ts +0 -134
- package/src/core/utils/lru-cache.ts +0 -54
- package/src/core/utils/path.ts +0 -19
- package/src/core/utils/session.ts +0 -26
- package/src/core/utils/time.ts +0 -37
- package/src/core/utils/token-tracker.ts +0 -97
- package/src/daemon/event-parser.ts +0 -36
- package/src/daemon/handlers/history-exporter.ts +0 -117
- package/src/daemon/handlers/post-tool-use.ts +0 -54
- package/src/daemon/handlers/stop.ts +0 -208
- package/src/daemon/handlers/user-prompt.ts +0 -178
- package/src/daemon/hook-sync.ts +0 -91
- package/src/daemon/index.ts +0 -312
- package/src/daemon/launchd/com.claude-forge.daemon.plist.template +0 -47
- package/src/daemon/launchd-installer.ts +0 -260
- package/src/daemon/lifecycle.ts +0 -128
- package/src/daemon/router.ts +0 -40
- package/src/daemon/server.ts +0 -196
- package/src/daemon/services/task-segmenter.ts +0 -112
- package/src/daemon/skill-sync.ts +0 -88
- package/src/hooks/hook-lib.sh +0 -118
- package/src/hooks/notification.sh +0 -35
- package/src/hooks/post-tool-use.sh +0 -61
- package/src/hooks/pre-tool-use.sh +0 -63
- package/src/hooks/stop.sh +0 -43
- package/src/hooks/user-prompt-submit.sh +0 -69
- package/src/mcp/server.ts +0 -322
- package/src/skills/index.ts +0 -2
- package/src/skills/invocation-guard.ts +0 -177
- package/src/skills/matcher.ts +0 -148
- package/src/skills/official/code-simplifier.md +0 -52
- package/src/skills/official/find-skills.md +0 -142
- package/src/skills/official/official-api-design.md +0 -30
- package/src/skills/official/official-architecture-decision.md +0 -41
- package/src/skills/official/official-bmad.md +0 -118
- package/src/skills/official/official-db-schema-design.md +0 -34
- package/src/skills/official/official-debug.md +0 -25
- package/src/skills/official/official-doc-driven.md +0 -31
- package/src/skills/official/official-harness-engineering.md +0 -108
- package/src/skills/official/official-performance-optimization.md +0 -30
- package/src/skills/official/official-pr-review.md +0 -35
- package/src/skills/official/official-release-checklist.md +0 -30
- package/src/skills/official/official-security-hardening.md +0 -32
- package/src/skills/official/official-spec-driven-design.md +0 -31
- package/src/skills/official/planning-with-files.md +0 -241
- package/src/skills/official/ui-ux-pro-max.md +0 -105
- package/src/skills/official/webapp-testing.md +0 -96
- package/src/skills/official-skills.ts +0 -89
- package/src/skills/registry.ts +0 -355
- package/src/skills/semantic-matcher.ts +0 -234
- package/src/skills/tools/pipeline-suggest.ts +0 -226
- package/src/skills/tools/skill-invoke.ts +0 -168
- package/src/skills/tools/skill-list.ts +0 -59
- package/src/skills/upgrade-engine.ts +0 -541
- package/src/skills/upgrade-prompt.ts +0 -84
- package/src/templates/go.yaml +0 -53
- package/src/templates/python.yaml +0 -59
- package/src/templates/react.yaml +0 -55
- package/src/templates/template-manager.ts +0 -170
- package/src/web/analytics/anti-pattern-detector.ts +0 -367
- package/src/web/analytics/drift-detector.ts +0 -219
- package/src/web/analytics/weekly-report.ts +0 -431
- package/src/web/auth-middleware.ts +0 -54
- package/src/web/routes/_helpers.ts +0 -34
- package/src/web/routes/ai.ts +0 -204
- package/src/web/routes/auth.ts +0 -22
- package/src/web/routes/drift.ts +0 -25
- package/src/web/routes/error-handler.ts +0 -120
- package/src/web/routes/events.ts +0 -47
- package/src/web/routes/insights.ts +0 -43
- package/src/web/routes/patch.ts +0 -117
- package/src/web/routes/reports.ts +0 -34
- package/src/web/routes/rules.ts +0 -76
- package/src/web/routes/sessions.ts +0 -250
- package/src/web/routes/skill-stats.ts +0 -92
- package/src/web/routes/skills.ts +0 -350
- package/src/web/routes/static.ts +0 -67
- package/src/web/routes/stats.ts +0 -50
- package/src/web/routes/status.ts +0 -30
- package/src/web/routes/tasks.ts +0 -193
- package/src/web/routes/token-usage.ts +0 -20
- package/src/web/routes/trace.ts +0 -126
- package/src/web/routes/types.ts +0 -57
- package/src/web/server.ts +0 -134
- package/src/web/ssrf-guard.ts +0 -112
- package/src/web/static/index.html +0 -3251
- package/src/web/static/vendor/chart.umd.min.js +0 -20
- package/tests/e2e/dashboard.spec.ts +0 -205
- package/tests/e2e/routing-skill-e2e.test.ts +0 -39
- package/tests/helpers/mock-ai.ts +0 -92
- package/tests/helpers/mock-storage.ts +0 -159
- package/tests/integration/claudemd-generator.test.ts +0 -90
- package/tests/integration/queue-replay.integration.test.ts +0 -193
- package/tests/integration/tasks-filter.integration.test.ts +0 -154
- package/tests/integration/web-analytics.integration.test.ts +0 -133
- package/tests/integration/web-stats.integration.test.ts +0 -135
- package/tests/integration/web-trace.integration.test.ts +0 -175
- package/tests/performance/database.benchmark.ts +0 -161
- package/tests/semantic-matcher.test.ts +0 -99
- package/tests/skill-matcher.test.ts +0 -110
- package/tests/unit/ai-provider-retry.test.ts +0 -194
- package/tests/unit/ai-provider-vision.test.ts +0 -224
- package/tests/unit/claudemd-generator.test.ts +0 -68
- package/tests/unit/cli-mcp.test.ts +0 -141
- package/tests/unit/core/forge-paths.test.ts +0 -99
- package/tests/unit/daemon/hook-sync.test.ts +0 -71
- package/tests/unit/daemon/post-tool-use.test.ts +0 -121
- package/tests/unit/daemon/skill-sync.test.ts +0 -75
- package/tests/unit/daemon/stop-handler-behavior-summary.test.ts +0 -202
- package/tests/unit/daemon/task-segmenter-recover.test.ts +0 -84
- package/tests/unit/event-fields.test.ts +0 -88
- package/tests/unit/event-parser.test.ts +0 -55
- package/tests/unit/handlers.test.ts +0 -171
- package/tests/unit/hooks/resolve-project-path.test.ts +0 -122
- package/tests/unit/invocation-guard.test.ts +0 -125
- package/tests/unit/queue.test.ts +0 -272
- package/tests/unit/router.test.ts +0 -138
- package/tests/unit/security.test.ts +0 -128
- package/tests/unit/skill-invocations-workflow.test.ts +0 -495
- package/tests/unit/skill-registry.test.ts +0 -94
- package/tests/unit/skills/invocation-guard-ttl.test.ts +0 -211
- package/tests/unit/skills/official-skills-loader.test.ts +0 -126
- package/tests/unit/skills/registry-multiformat.test.ts +0 -92
- package/tests/unit/skills/upgrade-engine-parse.test.ts +0 -138
- package/tests/unit/skills/upgrade-engine.test.ts +0 -401
- package/tests/unit/skills/upgrade-prompt.test.ts +0 -89
- package/tests/unit/socket-server.test.ts +0 -183
- package/tests/unit/storage/event-operations-aggregates.test.ts +0 -342
- package/tests/unit/storage/migration-idempotent.test.ts +0 -304
- package/tests/unit/storage/routing-aggregates.test.ts +0 -276
- package/tests/unit/storage/routing.test.ts +0 -117
- package/tests/unit/storage/schema-missing.test.ts +0 -81
- package/tests/unit/storage/session-operations-aggregates.test.ts +0 -120
- package/tests/unit/storage/sessions-aggregate.test.ts +0 -435
- package/tests/unit/storage/skill-operations-counts.test.ts +0 -106
- package/tests/unit/storage/skills-aggregates.test.ts +0 -104
- package/tests/unit/storage/sqlite-refactor-harness.test.ts +0 -314
- package/tests/unit/storage/task-operations-counts.test.ts +0 -46
- package/tests/unit/storage/tasks-getById.test.ts +0 -343
- package/tests/unit/storage/tasks-stale-gc.test.ts +0 -86
- package/tests/unit/storage.test.ts +0 -172
- package/tests/unit/token-usage.test.ts +0 -144
- package/tests/unit/type-guards.test.ts +0 -201
- package/tests/unit/utils/format.test.ts +0 -189
- package/tests/unit/utils/session.test.ts +0 -89
- package/tests/unit/utils/time.test.ts +0 -112
- package/tests/unit/web/navigation-back-contract.test.ts +0 -134
- package/tests/unit/web/routes-auth.test.ts +0 -93
- package/tests/unit/web/routes-events.test.ts +0 -101
- package/tests/unit/web/routes-rules.test.ts +0 -182
- package/tests/unit/web/routes-sessions.test.ts +0 -181
- package/tests/unit/web/routes-skill-stats.test.ts +0 -179
- package/tests/unit/web/routes-stats.test.ts +0 -92
- package/tests/unit/web/routes-tasks.test.ts +0 -385
- package/tests/unit/web/task-title-contract.test.ts +0 -210
- package/tests/unit/web/tasks-component-contract.test.ts +0 -179
- package/tsconfig.json +0 -22
- package/vitest.config.ts +0 -21
- package/vitest.integration.config.ts +0 -16
- package/web/CLAUDE.md +0 -20
- package/web/index.html +0 -13
- package/web/package-lock.json +0 -4854
- package/web/package.json +0 -35
- package/web/postcss.config.js +0 -6
- package/web/src/App.tsx +0 -110
- package/web/src/components/CodeBlock.tsx +0 -31
- package/web/src/components/Confirm.tsx +0 -96
- package/web/src/components/Drawer.tsx +0 -60
- package/web/src/components/Layout.tsx +0 -145
- package/web/src/components/MarkdownRenderer.tsx +0 -77
- package/web/src/components/SearchInput.tsx +0 -31
- package/web/src/components/SessionDetailContent.tsx +0 -157
- package/web/src/components/Toast.tsx +0 -92
- package/web/src/index.css +0 -19
- package/web/src/main.tsx +0 -31
- package/web/src/pages/AIConfig.tsx +0 -233
- package/web/src/pages/Dashboard.tsx +0 -572
- package/web/src/pages/Events.tsx +0 -271
- package/web/src/pages/Reports.tsx +0 -428
- package/web/src/pages/SessionDetail.tsx +0 -162
- package/web/src/pages/Sessions.tsx +0 -205
- package/web/src/pages/Skills.tsx +0 -180
- package/web/src/pages/TaskDetail.tsx +0 -515
- package/web/src/pages/Tasks.tsx +0 -415
- package/web/src/utils/auth.ts +0 -59
- package/web/src/utils/export.ts +0 -54
- package/web/src/utils/navigation.ts +0 -25
- package/web/src/utils/task-title.ts +0 -49
- package/web/src/utils/time.ts +0 -13
- package/web/tailwind.config.js +0 -11
- package/web/tsconfig.json +0 -21
- package/web/tsconfig.node.json +0 -10
- package/web/vite.config.ts +0 -76
- package/winspan-claude-forge-8.43.0.tgz +0 -0
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
# 让 Claude 快速学会 Ruflo 模式的策略
|
|
2
|
-
|
|
3
|
-
## 背景
|
|
4
|
-
|
|
5
|
-
当前 claude-forge 已完成 Ruflo 模式重构:
|
|
6
|
-
- Claude 自主决策(通过 CLAUDE.md 的 AUTO-INVOKE 规则)
|
|
7
|
-
- daemon 只做观察和记录
|
|
8
|
-
- 静态 pipeline 模板(写在 CLAUDE.md 里)
|
|
9
|
-
|
|
10
|
-
但 Claude 可能仍然不遵守 CLAUDE.md 中的 AUTO-INVOKE 规则。需要加速学习过程。
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## 方案 A:强化 CLAUDE.md 的视觉锚点(立即生效)
|
|
15
|
-
|
|
16
|
-
### 问题诊断
|
|
17
|
-
当前 CLAUDE.md 虽然有 MUST/ALWAYS/NEVER,但可能不够显眼:
|
|
18
|
-
- 没有使用 ASCII 边框或分隔符
|
|
19
|
-
- 代码示例是静态的,不够"可执行"
|
|
20
|
-
- 触发条件(AUTO-INVOKE)在文件中间,可能被上下文压缩丢弃
|
|
21
|
-
|
|
22
|
-
### 改进措施
|
|
23
|
-
|
|
24
|
-
#### 1. 在文件最顶部添加 ASCII 横幅(Ruflo 风格)
|
|
25
|
-
|
|
26
|
-
```markdown
|
|
27
|
-
<!-- forge:claudemd-auto -->
|
|
28
|
-
# claude-forge 工作区规范
|
|
29
|
-
|
|
30
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
31
|
-
║ CRITICAL BEHAVIORAL RULES ║
|
|
32
|
-
║ (ALWAYS ENFORCED) ║
|
|
33
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
34
|
-
|
|
35
|
-
⚠️ BEFORE STARTING ANY TASK, CHECK THESE RULES:
|
|
36
|
-
|
|
37
|
-
1. ALWAYS read a file before editing it
|
|
38
|
-
2. NEVER create documentation files unless explicitly requested
|
|
39
|
-
3. ALWAYS spawn ALL agents in ONE message (concurrency rule)
|
|
40
|
-
4. MUST use Task tool for complex tasks (3+ files, new features, refactoring)
|
|
41
|
-
|
|
42
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
43
|
-
║ AUTO-INVOKE PIPELINE WHEN TASK INVOLVES: ║
|
|
44
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
45
|
-
║ ✓ Multiple files (3+) ║
|
|
46
|
-
║ ✓ New feature implementation ║
|
|
47
|
-
║ ✓ Refactoring across modules ║
|
|
48
|
-
║ ✓ Bug fix involving root-cause analysis ║
|
|
49
|
-
║ ✓ API changes with tests ║
|
|
50
|
-
║ ✓ Security-related changes ║
|
|
51
|
-
║ ✓ Performance optimization ║
|
|
52
|
-
║ ✓ Database schema changes ║
|
|
53
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
54
|
-
|
|
55
|
-
╔═══════════════════════════════════════════════════════════════╗
|
|
56
|
-
║ SKIP PIPELINE FOR: ║
|
|
57
|
-
╠═══════════════════════════════════════════════════════════════╣
|
|
58
|
-
║ ✗ Single file edits ║
|
|
59
|
-
║ ✗ Simple bug fixes (1-2 lines) ║
|
|
60
|
-
║ ✗ Documentation updates ║
|
|
61
|
-
║ ✗ Configuration changes ║
|
|
62
|
-
║ ✗ Quick questions/exploration ║
|
|
63
|
-
╚═══════════════════════════════════════════════════════════════╝
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**为什么有效**:
|
|
67
|
-
- ASCII 边框在 Claude 的视觉注意力中权重更高
|
|
68
|
-
- 放在文件最顶部,不会被上下文压缩丢弃
|
|
69
|
-
- 使用 ✓/✗ 符号增强可读性
|
|
70
|
-
|
|
71
|
-
#### 2. 将代码示例改为"立即可执行"格式
|
|
72
|
-
|
|
73
|
-
当前格式(静态):
|
|
74
|
-
```javascript
|
|
75
|
-
Task({ subagent_type: "tester", name: "reproducer", prompt: "...", run_in_background: true })
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
改进格式(可执行):
|
|
79
|
-
```javascript
|
|
80
|
-
// COPY-PASTE THIS EXACT CODE (replace [task description] with actual task):
|
|
81
|
-
Task({
|
|
82
|
-
subagent_type: "tester",
|
|
83
|
-
name: "reproducer",
|
|
84
|
-
prompt: "[task description]: Write a failing test that reproduces the bug. SendMessage findings to 'investigator' when done.",
|
|
85
|
-
run_in_background: true
|
|
86
|
-
})
|
|
87
|
-
Task({
|
|
88
|
-
subagent_type: "researcher",
|
|
89
|
-
name: "investigator",
|
|
90
|
-
prompt: "[task description]: Wait for SendMessage from 'reproducer'. Investigate root cause. SendMessage findings to 'fixer' when done.",
|
|
91
|
-
run_in_background: true
|
|
92
|
-
})
|
|
93
|
-
// ... (more Task calls)
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**为什么有效**:
|
|
97
|
-
- "COPY-PASTE THIS EXACT CODE" 是明确的行动指令
|
|
98
|
-
- `[task description]` 占位符让 Claude 知道需要填充什么
|
|
99
|
-
- 保留完整的参数结构,减少 Claude 自由发挥的空间
|
|
100
|
-
|
|
101
|
-
#### 3. 在每个 Pipeline 模板前添加触发条件检查清单
|
|
102
|
-
|
|
103
|
-
```markdown
|
|
104
|
-
#### Bug Fix (Code 1: harness-debug-full)
|
|
105
|
-
|
|
106
|
-
**TRIGGER CHECKLIST** — Use this pipeline if ALL of these are true:
|
|
107
|
-
- [ ] Bug involves multiple files OR root-cause analysis needed
|
|
108
|
-
- [ ] Not a simple 1-2 line fix
|
|
109
|
-
- [ ] Requires investigation + fix + verification
|
|
110
|
-
|
|
111
|
-
**IF TRIGGERED, COPY-PASTE ALL 4 TASK CALLS IN ONE MESSAGE:**
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**为什么有效**:
|
|
115
|
-
- Checklist 格式让 Claude 明确判断是否触发
|
|
116
|
-
- "COPY-PASTE ALL 4 TASK CALLS IN ONE MESSAGE" 强化并发原则
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## 方案 B:添加 MCP 工具提示(中等效果,需要 1 小时开发)
|
|
121
|
-
|
|
122
|
-
### 核心思路
|
|
123
|
-
当 Claude 开始处理复杂任务时,daemon 通过 MCP 工具主动提示"你应该考虑使用 pipeline"。
|
|
124
|
-
|
|
125
|
-
### 实现方式
|
|
126
|
-
|
|
127
|
-
#### 1. 新增 MCP 工具:`pipeline_suggest`
|
|
128
|
-
|
|
129
|
-
```typescript
|
|
130
|
-
// src/mcp/tools/pipeline-suggest.ts
|
|
131
|
-
export const pipelineSuggestTool = {
|
|
132
|
-
name: 'pipeline_suggest',
|
|
133
|
-
description: 'Get pipeline suggestions based on task complexity',
|
|
134
|
-
inputSchema: {
|
|
135
|
-
type: 'object',
|
|
136
|
-
properties: {
|
|
137
|
-
taskDescription: { type: 'string' },
|
|
138
|
-
fileCount: { type: 'number' },
|
|
139
|
-
isNewFeature: { type: 'boolean' },
|
|
140
|
-
isRefactor: { type: 'boolean' }
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
handler: async (args) => {
|
|
144
|
-
const { taskDescription, fileCount, isNewFeature, isRefactor } = args;
|
|
145
|
-
|
|
146
|
-
// 判断是否应该触发 pipeline
|
|
147
|
-
const shouldTrigger = fileCount >= 3 || isNewFeature || isRefactor;
|
|
148
|
-
|
|
149
|
-
if (!shouldTrigger) {
|
|
150
|
-
return { suggestion: 'No pipeline needed for this simple task.' };
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// 推荐具体的 pipeline
|
|
154
|
-
let pipelineCode = '';
|
|
155
|
-
if (isNewFeature) {
|
|
156
|
-
pipelineCode = `// Feature pipeline (bmad-feature-full)
|
|
157
|
-
Task({ subagent_type: "researcher", name: "analyst", prompt: "${taskDescription}: Analyze requirements...", run_in_background: true })
|
|
158
|
-
Task({ subagent_type: "planner", name: "designer", prompt: "${taskDescription}: Wait for 'analyst'...", run_in_background: true })
|
|
159
|
-
// ... (full template)`;
|
|
160
|
-
} else if (isRefactor) {
|
|
161
|
-
pipelineCode = `// Refactor pipeline (refactor-safe)
|
|
162
|
-
Task({ subagent_type: "tester", name: "safety-net", prompt: "${taskDescription}: Write tests...", run_in_background: true })
|
|
163
|
-
// ... (full template)`;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
suggestion: `⚠️ This task matches AUTO-INVOKE criteria. You MUST use a pipeline.`,
|
|
168
|
-
pipelineCode,
|
|
169
|
-
reminder: 'COPY-PASTE ALL TASK CALLS IN ONE MESSAGE'
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
#### 2. 在 CLAUDE.md 中添加 MCP 工具使用指南
|
|
176
|
-
|
|
177
|
-
```markdown
|
|
178
|
-
## Pipeline Decision Support (MCP Tool)
|
|
179
|
-
|
|
180
|
-
If you're unsure whether to trigger a pipeline, call the MCP tool:
|
|
181
|
-
|
|
182
|
-
```javascript
|
|
183
|
-
mcp__claude_forge__pipeline_suggest({
|
|
184
|
-
taskDescription: "implement user authentication",
|
|
185
|
-
fileCount: 5,
|
|
186
|
-
isNewFeature: true,
|
|
187
|
-
isRefactor: false
|
|
188
|
-
})
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
The tool will tell you:
|
|
192
|
-
1. Whether you MUST use a pipeline
|
|
193
|
-
2. Which pipeline template to use
|
|
194
|
-
3. The exact code to copy-paste
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**为什么有效**:
|
|
198
|
-
- 主动提示,而不是被动等待 Claude 遵守
|
|
199
|
-
- 提供具体的代码模板,减少 Claude 的认知负担
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## 方案 C:会话级强化学习(长期效果,需要多次会话)
|
|
204
|
-
|
|
205
|
-
### 核心思路
|
|
206
|
-
通过多次会话的反馈循环,让 Claude 逐渐"学会"遵守 CLAUDE.md 规则。
|
|
207
|
-
|
|
208
|
-
### 实现方式
|
|
209
|
-
|
|
210
|
-
#### 1. 在每次会话结束时,生成"行为报告"
|
|
211
|
-
|
|
212
|
-
```markdown
|
|
213
|
-
## Session Behavior Report
|
|
214
|
-
|
|
215
|
-
**Task**: Implement user authentication with OAuth
|
|
216
|
-
**Complexity**: High (5 files, new feature)
|
|
217
|
-
**Expected**: AUTO-INVOKE pipeline (bmad-feature-full)
|
|
218
|
-
**Actual**: Direct implementation (no Task calls)
|
|
219
|
-
**Result**: ❌ Violated AUTO-INVOKE rule
|
|
220
|
-
|
|
221
|
-
**Feedback for next session**:
|
|
222
|
-
- You should have spawned 5 Task calls in ONE message
|
|
223
|
-
- Template: bmad-feature-full (researcher → planner → developer → tester → reviewer)
|
|
224
|
-
- Reason: This task involves 5 files + new feature implementation
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
#### 2. 将报告写入 `~/.claude/memory/` 或 CLAUDE.md 的顶部
|
|
228
|
-
|
|
229
|
-
每次会话开始时,Claude 会看到上次的"违规记录",逐渐形成习惯。
|
|
230
|
-
|
|
231
|
-
#### 3. 使用 daemon 的 `routing_events` 表生成报告
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
// src/daemon/session-report.ts
|
|
235
|
-
export async function generateSessionReport(sessionId: string) {
|
|
236
|
-
const events = await storage.getRoutingEventsBySession(sessionId);
|
|
237
|
-
const violations = events.filter(e => e.obeyed === 0);
|
|
238
|
-
|
|
239
|
-
if (violations.length > 0) {
|
|
240
|
-
const report = `
|
|
241
|
-
## ⚠️ Previous Session Violations
|
|
242
|
-
|
|
243
|
-
You violated AUTO-INVOKE rules ${violations.length} times in the last session.
|
|
244
|
-
|
|
245
|
-
${violations.map(v => `
|
|
246
|
-
- Task: ${v.user_prompt_summary}
|
|
247
|
-
- Expected: ${v.routed_to_name}
|
|
248
|
-
- Actual: Direct implementation
|
|
249
|
-
- Fix: Use the pipeline template in CLAUDE.md
|
|
250
|
-
`).join('\n')}
|
|
251
|
-
|
|
252
|
-
**Remember**: ALWAYS spawn ALL agents in ONE message when task matches AUTO-INVOKE criteria.
|
|
253
|
-
`;
|
|
254
|
-
|
|
255
|
-
// 写入 CLAUDE.md 顶部或 memory
|
|
256
|
-
await fs.writeFile('CLAUDE.md', report + originalContent);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
**为什么有效**:
|
|
262
|
-
- 反馈循环让 Claude 看到自己的"错误"
|
|
263
|
-
- 多次会话后,Claude 会形成"条件反射"
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## 推荐实施顺序
|
|
268
|
-
|
|
269
|
-
### 第一阶段(立即执行,0 成本)
|
|
270
|
-
1. ✅ 强化 CLAUDE.md 的视觉锚点(方案 A)
|
|
271
|
-
- 添加 ASCII 横幅
|
|
272
|
-
- 改进代码示例格式
|
|
273
|
-
- 添加触发条件检查清单
|
|
274
|
-
|
|
275
|
-
### 第二阶段(1 小时开发)
|
|
276
|
-
2. ⏳ 添加 MCP 工具提示(方案 B)
|
|
277
|
-
- 实现 `pipeline_suggest` 工具
|
|
278
|
-
- 在 CLAUDE.md 中添加使用指南
|
|
279
|
-
|
|
280
|
-
### 第三阶段(长期优化)
|
|
281
|
-
3. ⏳ 会话级强化学习(方案 C)
|
|
282
|
-
- 实现会话行为报告生成
|
|
283
|
-
- 将报告写入 CLAUDE.md 或 memory
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 预期效果
|
|
288
|
-
|
|
289
|
-
| 方案 | 实施成本 | 生效时间 | 预期合规率提升 |
|
|
290
|
-
|------|---------|---------|--------------|
|
|
291
|
-
| A: 视觉锚点 | 10 分钟 | 立即 | +30% |
|
|
292
|
-
| B: MCP 提示 | 1 小时 | 立即 | +20% |
|
|
293
|
-
| C: 强化学习 | 2 小时 | 3-5 次会话后 | +40% |
|
|
294
|
-
| **组合效果** | 3 小时 | 3-5 次会话后 | **+70-90%** |
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## 验证方法
|
|
299
|
-
|
|
300
|
-
1. **重启 Claude Code 会话**(让新的 CLAUDE.md 生效)
|
|
301
|
-
2. **输入复杂任务**(如 "implement user authentication with OAuth")
|
|
302
|
-
3. **观察 Claude 的行为**:
|
|
303
|
-
- 是否自主判断触发 pipeline?
|
|
304
|
-
- 是否在一条消息中并发调用多个 Task?
|
|
305
|
-
- 是否使用 CLAUDE.md 中的静态模板?
|
|
306
|
-
4. **检查数据库**:
|
|
307
|
-
```sql
|
|
308
|
-
SELECT obeyed, COUNT(*) FROM routing_events GROUP BY obeyed;
|
|
309
|
-
```
|
|
310
|
-
- `obeyed=1` 的比例应该逐渐提升
|
|
311
|
-
|
|
312
|
-
---
|
|
313
|
-
|
|
314
|
-
## 关键洞察
|
|
315
|
-
|
|
316
|
-
Ruflo 的成功不是因为"语言更狠",而是因为:
|
|
317
|
-
1. **视觉锚点**:ASCII 边框、符号、位置(文件顶部)
|
|
318
|
-
2. **具体性**:可执行的代码示例,而不是抽象描述
|
|
319
|
-
3. **触发条件明确**:Checklist 格式,消除歧义
|
|
320
|
-
4. **反馈循环**:多次会话后形成习惯
|
|
321
|
-
|
|
322
|
-
claude-forge 已经有了正确的架构,现在只需要强化 CLAUDE.md 的"教学效果"。
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# claude-forge 与 addyosmani/agent-skills 去重分析报告
|
|
2
|
-
|
|
3
|
-
## 执行摘要
|
|
4
|
-
|
|
5
|
-
- **重叠项数量**:10 对
|
|
6
|
-
- **推荐下线数量**:6 个
|
|
7
|
-
- **推荐保留作 override**:4 个
|
|
8
|
-
- **新增技能数量**:6+ 个
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## A. 重叠项对比
|
|
13
|
-
|
|
14
|
-
| 本项目 skill | agent-skills 对应 | 功能重叠度 |
|
|
15
|
-
|---|---|---|
|
|
16
|
-
| `official-tdd` | `test-driven-development` | 100% |
|
|
17
|
-
| `official-debug` | `debugging-and-troubleshooting` | 95% |
|
|
18
|
-
| `official-pr-review` | `code-review-and-quality` | 90% |
|
|
19
|
-
| `official-spec-driven-design` | `spec-driven-development` | 100% |
|
|
20
|
-
| `official-architecture-decision` | `documentation-and-adrs` | 85% |
|
|
21
|
-
| `official-api-design` | `api-and-interface-design` | 95% |
|
|
22
|
-
| `official-db-schema-design` | `database-schema-design` | 90% |
|
|
23
|
-
| `official-performance-optimization` | `performance-optimization` | 95% |
|
|
24
|
-
| `official-security-hardening` | `security-and-hardening` | 90% |
|
|
25
|
-
| `official-release-checklist` | `shipping-and-launch` | 95% |
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## B. 处理决策
|
|
30
|
-
|
|
31
|
-
### 1. 推荐下线(6 个)
|
|
32
|
-
|
|
33
|
-
agent-skills 版本更成熟,推荐下线本项目版本:
|
|
34
|
-
|
|
35
|
-
- `official-tdd` → `test-driven-development`
|
|
36
|
-
- `official-debug` → `debugging-and-troubleshooting`
|
|
37
|
-
- `official-api-design` → `api-and-interface-design`
|
|
38
|
-
- `official-db-schema-design` → `database-schema-design`
|
|
39
|
-
- `official-performance-optimization` → `performance-optimization`
|
|
40
|
-
- `official-release-checklist` → `shipping-and-launch`
|
|
41
|
-
|
|
42
|
-
### 2. 保留作 user override(4 个)
|
|
43
|
-
|
|
44
|
-
本项目版本有中文本地化优势,改名为 `-cn` 后缀保留:
|
|
45
|
-
|
|
46
|
-
- `official-spec-driven-design` → `official-spec-driven-design-cn`
|
|
47
|
-
- `official-pr-review` → `official-pr-review-cn`
|
|
48
|
-
- `official-security-hardening` → `official-security-hardening-cn`
|
|
49
|
-
- `official-architecture-decision` → `official-architecture-decision-cn`
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## C. 新增技能清单
|
|
54
|
-
|
|
55
|
-
agent-skills 填补的空白(6+ 个):
|
|
56
|
-
|
|
57
|
-
- `idea-refine` — 想法精炼与需求澄清
|
|
58
|
-
- `planning-and-task-breakdown` — 任务分解与依赖图
|
|
59
|
-
- `frontend-ui-engineering` — 前端工程最佳实践
|
|
60
|
-
- `refactoring-and-cleanup` — 重构与代码清理
|
|
61
|
-
- `git-workflow-and-versioning` — Git 工作流与版本管理
|
|
62
|
-
- `using-agent-skills` — Agent Skills 元技能
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## D. 实施建议
|
|
67
|
-
|
|
68
|
-
### 第一阶段:下线重叠技能
|
|
69
|
-
|
|
70
|
-
从 `src/skills/official-skills.ts` 删除 6 个技能。
|
|
71
|
-
|
|
72
|
-
### 第二阶段:重命名本地化版本
|
|
73
|
-
|
|
74
|
-
4 个技能改名为 `-cn` 后缀。
|
|
75
|
-
|
|
76
|
-
### 第三阶段:集成 agent-skills
|
|
77
|
-
|
|
78
|
-
运行 `npm run sync:agent-skills` 同步外部技能。
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
**生成时间**:2026-05-10
|
|
83
|
-
**版本**:v1.0
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# Skills Multi-format Support
|
|
2
|
-
|
|
3
|
-
## 概述
|
|
4
|
-
|
|
5
|
-
`SkillRegistry` 现在支持两种 skill 文件格式:
|
|
6
|
-
|
|
7
|
-
1. **平铺格式**(原有):`~/.claude/skills/skill-name.md`
|
|
8
|
-
2. **目录格式**(新增):`~/.claude/skills/skill-name/SKILL.md`(agent-skills 格式)
|
|
9
|
-
|
|
10
|
-
两种格式可以共存,不会相互干扰。
|
|
11
|
-
|
|
12
|
-
## 改动内容
|
|
13
|
-
|
|
14
|
-
### 1. `Skill` 接口扩展
|
|
15
|
-
|
|
16
|
-
新增可选字段 `description`:
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
export interface Skill {
|
|
20
|
-
id: string;
|
|
21
|
-
name: string;
|
|
22
|
-
keywords: string[];
|
|
23
|
-
content: string;
|
|
24
|
-
path: string;
|
|
25
|
-
isOfficial?: boolean;
|
|
26
|
-
description?: string; // 新增:从 frontmatter 读取
|
|
27
|
-
}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### 2. `scan()` 方法支持两种格式
|
|
31
|
-
|
|
32
|
-
```typescript
|
|
33
|
-
const entries = fs.readdirSync(SKILLS_DIR, { withFileTypes: true });
|
|
34
|
-
|
|
35
|
-
for (const entry of entries) {
|
|
36
|
-
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
37
|
-
// 格式 1:平铺 .md 文件
|
|
38
|
-
filePath = path.join(SKILLS_DIR, entry.name);
|
|
39
|
-
} else if (entry.isDirectory()) {
|
|
40
|
-
// 格式 2:目录形式,读 SKILL.md
|
|
41
|
-
const skillMdPath = path.join(SKILLS_DIR, entry.name, 'SKILL.md');
|
|
42
|
-
if (fs.existsSync(skillMdPath)) {
|
|
43
|
-
filePath = skillMdPath;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### 3. 空 keywords 降级机制
|
|
50
|
-
|
|
51
|
-
当 skill 的 `keywords` 为空时,使用 `description` 进行 substring 匹配:
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
if (skill.keywords.length > 0) {
|
|
55
|
-
// 使用 keyword 匹配
|
|
56
|
-
} else if (skill.description) {
|
|
57
|
-
// 降级路径 1:使用 description substring 匹配
|
|
58
|
-
const descLower = skill.description.toLowerCase();
|
|
59
|
-
if (descLower.includes(promptLower) || promptLower.includes(descLower)) {
|
|
60
|
-
score = 1;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// 降级路径 2:返回 0,让 SemanticSkillMatcher 接管
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### 4. `SemanticSkillMatcher` 优先使用 description
|
|
67
|
-
|
|
68
|
-
```typescript
|
|
69
|
-
private extractDescription(skill: Skill): string {
|
|
70
|
-
// 优先使用 frontmatter description(agent-skills 格式)
|
|
71
|
-
if (skill.description) {
|
|
72
|
-
return skill.description;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// 降级:从 content 提取第一行描述
|
|
76
|
-
// ...
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## 使用示例
|
|
81
|
-
|
|
82
|
-
### 平铺格式(原有)
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
~/.claude/skills/
|
|
86
|
-
my-skill.md
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
`my-skill.md` 内容:
|
|
90
|
-
```markdown
|
|
91
|
-
---
|
|
92
|
-
name: my-skill
|
|
93
|
-
description: My custom skill
|
|
94
|
-
keywords: [custom, test]
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
# My Skill
|
|
98
|
-
|
|
99
|
-
Skill content here.
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### 目录格式(新增)
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
~/.claude/skills/
|
|
106
|
-
my-skill/
|
|
107
|
-
SKILL.md
|
|
108
|
-
README.md
|
|
109
|
-
examples/
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
`SKILL.md` 内容:
|
|
113
|
-
```markdown
|
|
114
|
-
---
|
|
115
|
-
name: my-skill
|
|
116
|
-
description: My custom skill
|
|
117
|
-
keywords: [custom, test]
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
# My Skill
|
|
121
|
-
|
|
122
|
-
Skill content here.
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## 兼容性
|
|
126
|
-
|
|
127
|
-
- ✅ 不破坏现有行为:16 个 `OFFICIAL_SKILLS` 的加载逻辑不变
|
|
128
|
-
- ✅ 用户 skills 可以覆盖官方 skills(原有行为保持)
|
|
129
|
-
- ✅ 目录中没有 `SKILL.md` 时静默跳过(不报错)
|
|
130
|
-
- ✅ 类型安全:所有新增字段都有 TypeScript 类型
|
|
131
|
-
|
|
132
|
-
## 测试
|
|
133
|
-
|
|
134
|
-
### 单元测试
|
|
135
|
-
|
|
136
|
-
- `tests/unit/skills/registry-multiformat.test.ts`:测试 frontmatter 解析
|
|
137
|
-
- 平铺格式解析
|
|
138
|
-
- 目录格式解析
|
|
139
|
-
- 空 keywords 处理
|
|
140
|
-
- 空 description 处理
|
|
141
|
-
- 空 frontmatter 处理
|
|
142
|
-
|
|
143
|
-
### 验证脚本
|
|
144
|
-
|
|
145
|
-
- `scripts/verify-skill-loading.ts`:验证实际文件系统加载
|
|
146
|
-
|
|
147
|
-
运行验证:
|
|
148
|
-
```bash
|
|
149
|
-
npx tsx scripts/verify-skill-loading.ts
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## 实际验证结果
|
|
153
|
-
|
|
154
|
-
在实际环境中验证成功:
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
Total skills loaded: 21
|
|
158
|
-
Directory format skills: 21
|
|
159
|
-
Skills with description field: 21
|
|
160
|
-
Skills without keywords: 21
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
所有 21 个用户 skill 都是从目录格式(`SKILL.md`)加载的,并且都正确读取了 `description` 字段。
|
|
164
|
-
|
|
165
|
-
## 注意事项
|
|
166
|
-
|
|
167
|
-
1. **同名优先级**:用户 skills 会覆盖官方 skills(原有行为)
|
|
168
|
-
2. **错误处理**:解析失败的 skill 会被跳过并记录警告日志
|
|
169
|
-
3. **性能**:扫描逻辑只在 `SkillRegistry` 构造时执行一次
|
|
170
|
-
4. **降级机制**:空 keywords 时会尝试 description 匹配,最后才交给 SemanticSkillMatcher
|
|
171
|
-
|
|
172
|
-
## 相关文件
|
|
173
|
-
|
|
174
|
-
- `src/skills/registry.ts` - 核心实现
|
|
175
|
-
- `src/skills/semantic-matcher.ts` - 语义匹配优化
|
|
176
|
-
- `tests/unit/skills/registry-multiformat.test.ts` - 单元测试
|
|
177
|
-
- `scripts/verify-skill-loading.ts` - 验证脚本
|