@winspan/claude-forge 8.51.1 → 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 +121 -2
- 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/constants.d.ts +2 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +4 -0
- package/dist/core/constants.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 +30 -5
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/skill-sync.d.ts +21 -0
- package/dist/daemon/skill-sync.d.ts.map +1 -0
- package/dist/daemon/skill-sync.js +75 -0
- package/dist/daemon/skill-sync.js.map +1 -0
- package/dist/hooks/notification.sh +1 -1
- package/dist/hooks/post-tool-use.sh +1 -1
- package/dist/hooks/pre-tool-use.sh +1 -1
- package/dist/hooks/stop.sh +1 -1
- package/dist/hooks/user-prompt-submit.sh +1 -1
- package/dist/skills/official/code-simplifier.md +37 -1
- package/dist/skills/official/find-skills.md +120 -1
- package/dist/skills/official/official-api-design.md +14 -1
- package/dist/skills/official/official-architecture-decision.md +22 -1
- package/dist/skills/official/official-db-schema-design.md +19 -1
- package/dist/skills/official/official-debug.md +9 -1
- package/dist/skills/official/official-pr-review.md +1 -1
- package/dist/skills/official/official-security-hardening.md +7 -1
- package/dist/skills/official/planning-with-files.md +206 -2
- package/dist/skills/official/ui-ux-pro-max.md +88 -1
- package/dist/skills/official/webapp-testing.md +85 -1
- package/dist/skills/registry.d.ts +1 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +15 -4
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/semantic-matcher.d.ts +4 -3
- package/dist/skills/semantic-matcher.d.ts.map +1 -1
- package/dist/skills/semantic-matcher.js +20 -22
- package/dist/skills/semantic-matcher.js.map +1 -1
- package/dist/skills/upgrade-engine.d.ts +93 -0
- package/dist/skills/upgrade-engine.d.ts.map +1 -0
- package/dist/skills/upgrade-engine.js +447 -0
- package/dist/skills/upgrade-engine.js.map +1 -0
- package/dist/skills/upgrade-prompt.d.ts +20 -0
- package/dist/skills/upgrade-prompt.d.ts.map +1 -0
- package/dist/skills/upgrade-prompt.js +75 -0
- package/dist/skills/upgrade-prompt.js.map +1 -0
- 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/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/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/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 -185
- 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 -62
- 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 -302
- 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/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 -16
- package/src/skills/official/find-skills.md +0 -23
- package/src/skills/official/official-api-design.md +0 -17
- package/src/skills/official/official-architecture-decision.md +0 -20
- package/src/skills/official/official-bmad.md +0 -118
- package/src/skills/official/official-db-schema-design.md +0 -16
- package/src/skills/official/official-debug.md +0 -17
- 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 -26
- package/src/skills/official/official-spec-driven-design.md +0 -31
- package/src/skills/official/planning-with-files.md +0 -37
- package/src/skills/official/ui-ux-pro-max.md +0 -18
- package/src/skills/official/webapp-testing.md +0 -12
- package/src/skills/official-skills.ts +0 -89
- package/src/skills/registry.ts +0 -355
- package/src/skills/semantic-matcher.ts +0 -231
- 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/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/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/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
package/DEVELOPMENT.md
CHANGED
|
@@ -2,80 +2,128 @@
|
|
|
2
2
|
|
|
3
3
|
面向 claude-forge 贡献者的架构与工作流说明。
|
|
4
4
|
|
|
5
|
+
> 高层架构 + 设计决策见 [docs/architecture/README.md](./docs/architecture/README.md)
|
|
6
|
+
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
## 仓库布局
|
|
8
10
|
|
|
9
11
|
```
|
|
10
12
|
src/
|
|
11
|
-
├── core/
|
|
12
|
-
│ ├── storage/
|
|
13
|
-
│ ├──
|
|
14
|
-
│ ├──
|
|
15
|
-
│
|
|
16
|
-
├──
|
|
17
|
-
│ ├──
|
|
18
|
-
│ ├──
|
|
19
|
-
│ ├──
|
|
20
|
-
│ ├──
|
|
21
|
-
│ ├──
|
|
22
|
-
│ ├──
|
|
23
|
-
│
|
|
24
|
-
|
|
25
|
-
│ ├──
|
|
26
|
-
│ ├──
|
|
27
|
-
│ ├──
|
|
28
|
-
│
|
|
29
|
-
├──
|
|
30
|
-
│ ├──
|
|
31
|
-
│
|
|
32
|
-
│
|
|
33
|
-
|
|
34
|
-
│
|
|
35
|
-
│
|
|
36
|
-
│
|
|
37
|
-
│
|
|
38
|
-
│
|
|
39
|
-
│
|
|
40
|
-
├──
|
|
41
|
-
│ ├──
|
|
42
|
-
│ ├──
|
|
13
|
+
├── core/ 共享核心,不反向依赖业务层
|
|
14
|
+
│ ├── storage/ SQLite 存储(schema.sql + sqlite.ts),WAL 模式,单一 data.db
|
|
15
|
+
│ │ ├── schema.sql 建表初始化
|
|
16
|
+
│ │ ├── migrations/ 增量 .sql 迁移
|
|
17
|
+
│ │ ├── events.ts writeEvent / queryEvents
|
|
18
|
+
│ │ ├── sessions.ts querySessions / upsertSession / countAllSessions
|
|
19
|
+
│ │ ├── tasks.ts writeTask / queryTasks / task_events
|
|
20
|
+
│ │ ├── injections.ts hook 注入审计
|
|
21
|
+
│ │ ├── routing.ts routing_events 表
|
|
22
|
+
│ │ ├── skills.ts skill_invocations 表
|
|
23
|
+
│ │ ├── token-usage.ts token_usage 聚合
|
|
24
|
+
│ │ ├── base.ts / rows.ts 连接 + 行映射工具
|
|
25
|
+
│ │ ├── maintenance.ts 清理/压缩
|
|
26
|
+
│ │ └── performance-indexes.sql 附加索引
|
|
27
|
+
│ ├── ai/ ClaudeProvider 封装(用于 classifier、distiller、skill-upgrade)
|
|
28
|
+
│ ├── queue/ 通用 SQLite 队列工具
|
|
29
|
+
│ ├── utils/ logger / git / path / time / lru-cache / forge-resume-block 等
|
|
30
|
+
│ ├── config.ts ConfigManager(~/.claude-forge/config.yaml)
|
|
31
|
+
│ ├── constants.ts FORGE_PATHS、各类阈值常量
|
|
32
|
+
│ ├── event-fields.ts hook 事件字段统一抽取
|
|
33
|
+
│ └── types.ts ForgeEvent / HookResult 等核心类型契约
|
|
34
|
+
│
|
|
35
|
+
├── daemon/ 后台守护进程
|
|
36
|
+
│ ├── index.ts 入口:socket server + 生命周期 + 同步任务
|
|
37
|
+
│ ├── server.ts Unix socket 接收 hook payload
|
|
38
|
+
│ ├── router.ts 按 hook_type 分发到 handler
|
|
39
|
+
│ ├── lifecycle.ts 启停 / 信号处理
|
|
40
|
+
│ ├── event-parser.ts hook 原始 JSON → ForgeEvent
|
|
41
|
+
│ ├── hook-sync.ts 启动时把 dist/hooks/ 同步到 ~/.claude/hooks/
|
|
42
|
+
│ ├── skill-sync.ts 启动时把 dist/skills/official/ 同步到 ~/.claude/skills/
|
|
43
|
+
│ ├── launchd-installer.ts macOS launchd 安装
|
|
44
|
+
│ ├── launchd/ launchd plist 模板
|
|
43
45
|
│ ├── handlers/
|
|
44
|
-
│ │ ├── user-prompt.ts UserPromptSubmit:分类 +
|
|
45
|
-
│ │ ├──
|
|
46
|
-
│ │ ├──
|
|
47
|
-
│ │ ├── stop.ts Stop:蒸馏 + 方法论兜底
|
|
48
|
-
│ │ ├── methodology-formatter.ts 生成前/后台 directive 文本
|
|
46
|
+
│ │ ├── user-prompt.ts UserPromptSubmit:分类 + skill 推荐 + agent 路由
|
|
47
|
+
│ │ ├── post-tool-use.ts PostToolUse:观察,按需注入提示
|
|
48
|
+
│ │ ├── stop.ts Stop:写 session 摘要、distill 决策
|
|
49
49
|
│ │ └── history-exporter.ts 导出完整历史到 .claude-forge/history/
|
|
50
|
-
│
|
|
51
|
-
│
|
|
52
|
-
│
|
|
53
|
-
|
|
54
|
-
├──
|
|
55
|
-
├──
|
|
56
|
-
├──
|
|
57
|
-
├──
|
|
58
|
-
├──
|
|
59
|
-
├──
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
50
|
+
│ └── services/
|
|
51
|
+
│ └── task-segmenter.ts UserPromptSubmit 按时间窗划分任务段
|
|
52
|
+
│
|
|
53
|
+
├── skills/ Skill 推荐与方法论分发
|
|
54
|
+
│ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/official/,提供 match()
|
|
55
|
+
│ ├── matcher.ts 关键词匹配
|
|
56
|
+
│ ├── semantic-matcher.ts AI 语义匹配(可选,需 API key)
|
|
57
|
+
│ ├── invocation-guard.ts 防止 agent 重复 invoke 同一 skill
|
|
58
|
+
│ ├── upgrade-engine.ts 社区 skill 升级核心:pull / match / evaluate / apply
|
|
59
|
+
│ ├── upgrade-prompt.ts AI evaluator prompt 模板
|
|
60
|
+
│ ├── official-skills.ts 加载内置官方 skill
|
|
61
|
+
│ ├── official/ 内置官方 skill .md 源(随发布打包)
|
|
62
|
+
│ ├── tools/ MCP 工具:skill_invoke / skill_list / pipeline_suggest
|
|
63
|
+
│ └── index.ts 对外导出
|
|
64
|
+
│
|
|
65
|
+
├── web/ Web 管理后台
|
|
66
|
+
│ ├── server.ts Express 服务器 + 路由注册
|
|
67
|
+
│ ├── auth-middleware.ts 本地 token 校验
|
|
68
|
+
│ ├── ssrf-guard.ts SSRF 防护
|
|
69
|
+
│ ├── routes/ 每个 API 模块独立文件(sessions / events / tasks / skills / ai / patch ...)
|
|
70
|
+
│ ├── analytics/ 趋势/统计计算
|
|
71
|
+
│ └── static/ React 前端构建产物的最终落点(dist/web/static/)
|
|
72
|
+
│
|
|
73
|
+
├── cli/
|
|
74
|
+
│ ├── index.ts CLI 入口(commander)
|
|
75
|
+
│ ├── init/ `cf init`:安装 hook 脚本
|
|
76
|
+
│ └── commands/ 子命令:daemon / config / skills / claudemd / status / logs / stats / menu / trace / mcp / executions / template
|
|
77
|
+
│
|
|
78
|
+
├── claudemd/ CLAUDE.md 生成与维护
|
|
79
|
+
│ ├── tech-detector.ts 项目技术栈识别
|
|
80
|
+
│ ├── claudemd-generator.ts 生成 CLAUDE.md 正文
|
|
81
|
+
│ ├── convention-extractor.ts 从已有规则提取约定
|
|
82
|
+
│ ├── resume-manager.ts forge:resume 块续接管理
|
|
83
|
+
│ ├── persona-manager.ts 用户 persona 段管理
|
|
84
|
+
│ ├── templates/ 各类模板(含 swarm-protocol.md)
|
|
85
|
+
│ └── index.ts 对外导出
|
|
86
|
+
│
|
|
87
|
+
├── hooks/ Shell 脚本:从 Claude Code 桥接到 daemon socket
|
|
88
|
+
│ ├── hook-lib.sh 共用工具(payload 拼装、容错)
|
|
89
|
+
│ ├── user-prompt-submit.sh
|
|
90
|
+
│ ├── pre-tool-use.sh
|
|
91
|
+
│ ├── post-tool-use.sh
|
|
92
|
+
│ ├── stop.sh
|
|
93
|
+
│ └── notification.sh
|
|
94
|
+
│
|
|
95
|
+
├── mcp/ MCP server(暴露 skill_invoke / skill_list / pipeline_suggest 给 agent)
|
|
96
|
+
│ └── server.ts
|
|
97
|
+
│
|
|
98
|
+
└── templates/ 新项目初始化模板
|
|
99
|
+
|
|
100
|
+
web/ React 前端源码(独立 npm workspace)
|
|
101
|
+
├── src/pages/ 各业务页面(lazy-loaded)
|
|
102
|
+
├── src/components/ 通用组件
|
|
103
|
+
└── vite.config.ts Vite + 手动 manualChunks
|
|
104
|
+
|
|
105
|
+
tests/
|
|
106
|
+
└── unit/ vitest 单测(vitest.config.ts include 此目录)
|
|
107
|
+
├── core/ daemon/ skills/ storage/ utils/ web/ hooks/ 各模块独立子目录
|
|
108
|
+
└── *.test.ts 顶层综合测试
|
|
109
|
+
|
|
110
|
+
scripts/ 辅助脚本:dev-daemon / dev-web / e2e-* / sync-agent-skills / check-spec-changelog 等
|
|
111
|
+
docs/
|
|
112
|
+
├── design/ spec(planner 输出)
|
|
113
|
+
├── implementation/ changelog(coder 输出)
|
|
114
|
+
└── skill-upgrade-guide.md skill 升级流程
|
|
69
115
|
```
|
|
70
116
|
|
|
71
117
|
## 目录依赖约束
|
|
72
118
|
|
|
73
119
|
- `core` 不反向依赖业务层
|
|
74
|
-
- `
|
|
75
|
-
- `
|
|
76
|
-
- `
|
|
77
|
-
- `
|
|
78
|
-
- `
|
|
120
|
+
- `skills` 可依赖 `core`
|
|
121
|
+
- `claudemd` 可依赖 `core`
|
|
122
|
+
- `daemon` 可依赖 `core` / `skills` / `claudemd`
|
|
123
|
+
- `web` 可依赖 `core` / `skills` / `claudemd`(不依赖 `daemon`)
|
|
124
|
+
- `mcp` 可依赖 `core` / `skills`
|
|
125
|
+
- `cli` 做命令分发,可依赖任意模块,但不塞核心规则逻辑
|
|
126
|
+
- `hooks/*.sh` 不依赖代码,只通过 socket payload 跟 daemon 通信
|
|
79
127
|
|
|
80
128
|
---
|
|
81
129
|
|
|
@@ -86,225 +134,246 @@ scripts/ 开发/调试脚本:dev-web、demo-v2、smoke-backgro
|
|
|
86
134
|
npm install
|
|
87
135
|
npm run build
|
|
88
136
|
|
|
89
|
-
# 启动 daemon
|
|
90
|
-
npm run dev:daemon
|
|
137
|
+
# 启动 daemon(开发模式,复用 ./scripts/dev-daemon.sh)
|
|
138
|
+
npm run dev:daemon:start
|
|
139
|
+
npm run dev:daemon:restart
|
|
140
|
+
npm run dev:daemon:logs
|
|
141
|
+
npm run dev:daemon:stop
|
|
91
142
|
|
|
92
|
-
#
|
|
93
|
-
npm run dev
|
|
143
|
+
# 前端开发(在 web/ 目录)
|
|
144
|
+
cd web && npm install && npm run dev
|
|
94
145
|
```
|
|
95
146
|
|
|
96
|
-
|
|
147
|
+
Daemon / CLI 都用系统 node(项目要求 Node 18+,实际跑在 24/26 上)。
|
|
97
148
|
|
|
98
149
|
---
|
|
99
150
|
|
|
100
151
|
## 构建与测试
|
|
101
152
|
|
|
102
153
|
```bash
|
|
103
|
-
# 后端:tsc + 拷贝 hooks/schema/
|
|
154
|
+
# 后端:tsc + 拷贝 hooks / schema / templates / 前端产物到 dist/
|
|
104
155
|
npm run build
|
|
105
156
|
|
|
106
|
-
# 前端:vite 构建到 web/dist/,随后 npm run build 会把它复制进 dist/web/static/
|
|
107
|
-
npm run build:web
|
|
108
|
-
|
|
109
|
-
# 完整:先前端再后端
|
|
110
|
-
npm run build:all
|
|
111
|
-
|
|
112
157
|
# 测试
|
|
113
|
-
npm test
|
|
114
|
-
npm run test:watch
|
|
115
|
-
npm run test:coverage # 覆盖率
|
|
158
|
+
npm test # vitest run(只跑 tests/unit/)
|
|
159
|
+
npm run test:watch # watch 模式
|
|
116
160
|
|
|
117
|
-
# TS
|
|
161
|
+
# TS 类型检查
|
|
118
162
|
npx tsc --noEmit
|
|
119
163
|
cd web && npx tsc --noEmit
|
|
164
|
+
|
|
165
|
+
# spec / changelog 配对检查(开发流程治理)
|
|
166
|
+
npm run check:specs
|
|
120
167
|
```
|
|
121
168
|
|
|
122
|
-
>
|
|
169
|
+
> 发布流程:用户手动 `npm publish`。AI 只做 `git commit / git push` 和 bump version(`package.json` 一处)。
|
|
123
170
|
|
|
124
171
|
---
|
|
125
172
|
|
|
126
173
|
## 架构要点
|
|
127
174
|
|
|
128
|
-
###
|
|
175
|
+
### Hook 事件流
|
|
129
176
|
|
|
130
177
|
```
|
|
131
|
-
|
|
132
|
-
│
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
│ Executor │ │ Executor │
|
|
154
|
-
│ ─ enqueue │ │ ─ spawn claude -p │
|
|
155
|
-
│ directive │ │ ─ parse stream-json │
|
|
156
|
-
│ ─ return │ │ ─ update phase_exec │
|
|
157
|
-
│ 'injected' │ │ ─ wait exit │
|
|
158
|
-
└──────┬───────┘ └──────────┬─────────────┘
|
|
159
|
-
│ │
|
|
160
|
-
▼ │
|
|
161
|
-
┌──────────────┐ │
|
|
162
|
-
│ Pending │ │
|
|
163
|
-
│ Queue │ │
|
|
164
|
-
└──────┬───────┘ │
|
|
165
|
-
│ │
|
|
166
|
-
▼ ▼
|
|
167
|
-
┌──────────────┐ ┌─────────────────┐
|
|
168
|
-
│ Claude │ │ Orchestrator │
|
|
169
|
-
│ 主会话 │ │ 推进到下一 phase │
|
|
170
|
-
│ 下一次输入时 │ │ 直到完成或失败 │
|
|
171
|
-
│ 消费队列 │ └─────────────────┘
|
|
172
|
-
└──────────────┘
|
|
178
|
+
Claude Code ──hook payload(JSON via stdin)──► src/hooks/*.sh
|
|
179
|
+
│
|
|
180
|
+
▼
|
|
181
|
+
$(socat / nc) ──► ~/.claude-forge/daemon.sock
|
|
182
|
+
│
|
|
183
|
+
▼
|
|
184
|
+
src/daemon/server.ts (接收 + 反序列化)
|
|
185
|
+
│
|
|
186
|
+
▼
|
|
187
|
+
src/daemon/event-parser.ts (统一 ForgeEvent)
|
|
188
|
+
│
|
|
189
|
+
▼
|
|
190
|
+
src/daemon/router.ts ──┬──► handlers/user-prompt.ts
|
|
191
|
+
├──► handlers/post-tool-use.ts
|
|
192
|
+
├──► handlers/stop.ts
|
|
193
|
+
└──► (PreToolUse / Notification: 直接 allow)
|
|
194
|
+
│
|
|
195
|
+
▼
|
|
196
|
+
core/storage/* 持久化 + 返回 HookResult
|
|
197
|
+
│
|
|
198
|
+
▼
|
|
199
|
+
Claude Code 读取 HookResult.systemMessage / additionalContext / allow
|
|
173
200
|
```
|
|
174
201
|
|
|
175
|
-
|
|
202
|
+
要点:
|
|
203
|
+
- daemon 必须在 100ms 内返回,超时则 Claude Code 视为放行
|
|
204
|
+
- handler 抛错被 router 捕获,不会让 daemon 崩溃
|
|
205
|
+
- `PreToolUse` 当前不做规则阻断,统一放行
|
|
206
|
+
- daemon 不主动推消息:任何延后的指令必须等下一次 UserPromptSubmit 注入
|
|
176
207
|
|
|
177
|
-
|
|
178
|
-
- Schema 由 `src/core/storage/schema.sql` 初始化,增量迁移放在 `runMigrations()`(幂等 `ALTER TABLE` + `PRAGMA table_info` 检测)
|
|
208
|
+
### Skill 系统
|
|
179
209
|
|
|
180
|
-
|
|
210
|
+
```
|
|
211
|
+
┌─────────────────────┐
|
|
212
|
+
│ UserPromptSubmit │
|
|
213
|
+
│ handler │
|
|
214
|
+
└─────────┬───────────┘
|
|
215
|
+
│
|
|
216
|
+
▼
|
|
217
|
+
┌──────────────────────────┐ ┌──────────────────────────┐
|
|
218
|
+
│ SkillRegistry.match() │ ───────►│ semantic-matcher (AI) │
|
|
219
|
+
│ (registry.ts) │ │ 若配置了 API key 则优先 │
|
|
220
|
+
│ │ └────────────┬─────────────┘
|
|
221
|
+
│ 扫描两类来源: │ │ 失败/无 key
|
|
222
|
+
│ - 内置 src/skills/ │ ▼
|
|
223
|
+
│ official/*.md │ ┌──────────────────────────┐
|
|
224
|
+
│ - 用户 ~/.claude/skills/│ ───────►│ keyword matcher │
|
|
225
|
+
│ {name}.md │ │ (matcher.ts) │
|
|
226
|
+
│ or {name}/SKILL.md │ └────────────┬─────────────┘
|
|
227
|
+
└──────────────────────────┘ │
|
|
228
|
+
│ │
|
|
229
|
+
▼ ▼
|
|
230
|
+
┌──────────────────────────────────────────────────────┐
|
|
231
|
+
│ invocation-guard 防重复 → 注入 systemMessage 推荐 │
|
|
232
|
+
│ (skill_invocations 表落库) │
|
|
233
|
+
└──────────────────────────────────────────────────────┘
|
|
234
|
+
|
|
235
|
+
Agent 通过 MCP 工具:
|
|
236
|
+
- skill_list 列出可用 skill
|
|
237
|
+
- skill_invoke <id> 取完整方法论
|
|
238
|
+
- pipeline_suggest 根据 intent 拼工作流
|
|
239
|
+
```
|
|
181
240
|
|
|
182
|
-
|
|
183
|
-
- PostToolUse 只能观察,不能修改工具结果;返回 systemMessage 会拼到 Claude 下一轮的系统消息
|
|
184
|
-
- Stop 返回 systemMessage 会作为"本轮结束"的最后一条系统提示
|
|
185
|
-
- **daemon 无法主动推送消息**。前台方法论的兜底设计正是基于这条约束(Stop → 写 pending 队列 → 下一次 UserPromptSubmit 消费)
|
|
241
|
+
frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日志,不打扰用户)。`keywords` 与 `tags` 都接受。
|
|
186
242
|
|
|
187
|
-
###
|
|
243
|
+
### Skill 远程升级
|
|
188
244
|
|
|
189
|
-
|
|
245
|
+
`cf skills upgrade` 由 `src/skills/upgrade-engine.ts` 驱动,三阶段:
|
|
190
246
|
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
|
|
247
|
+
1. `pullCandidates(DEFAULT_SOURCES, ~/.claude-forge/skill-candidates/)`
|
|
248
|
+
- 默认源:`addyosmani/agent-skills` + `obra/superpowers`
|
|
249
|
+
- 已存在则 `git pull`,不存在则 `git clone`
|
|
250
|
+
2. 对每个候选用 `matchToOfficial()` 找最相似官方 skill,再用 `evaluateWithAI()` 让 AI 给出 `upgrade / merge / skip`,AI 解析失败 → `needs_review`
|
|
251
|
+
3. `generateReport()` 写到 `~/.claude-forge/skill-upgrade-report.md`,每条带 `<!-- upgrade-entry: ... -->` 标记
|
|
252
|
+
4. `cf skills upgrade --apply` 读报告 → 备份 `~/.claude-forge/backups/skills/<ts>/` → 覆盖 `src/skills/official/`
|
|
253
|
+
5. `--rollback <ts>` 反向拷回
|
|
198
254
|
|
|
199
|
-
|
|
255
|
+
详见 `docs/skill-upgrade-guide.md`。
|
|
200
256
|
|
|
201
|
-
|
|
257
|
+
### CLAUDE.md 生成与维护
|
|
202
258
|
|
|
203
|
-
|
|
204
|
-
# 看 daemon 日志(启动时写在 stderr,daemon 模式写入 ~/.claude-forge/daemon.log)
|
|
205
|
-
tail -f ~/.claude-forge/daemon.log
|
|
259
|
+
`src/claudemd/` 负责项目级规则文件的生成、续接与扩充:
|
|
206
260
|
|
|
207
|
-
|
|
208
|
-
|
|
261
|
+
- `tech-detector.ts` — 识别项目语言/框架(读 `package.json` / `pyproject.toml` 等)
|
|
262
|
+
- `claudemd-generator.ts` — 拼装结果到 `CLAUDE.md`
|
|
263
|
+
- `convention-extractor.ts` — 把已有规则段抽离合并
|
|
264
|
+
- `resume-manager.ts` — 维护 `<!-- forge:resume-begin -->` 续接块(daemon 在 Stop 时写入)
|
|
265
|
+
- `persona-manager.ts` — 用户自定义 persona 段
|
|
266
|
+
- 模板存放在 `src/claudemd/templates/`(build 时拷到 `dist/claudemd/templates/`)
|
|
209
267
|
|
|
210
|
-
|
|
211
|
-
ls ~/.claude-forge/logs/
|
|
268
|
+
入口命令:`cf claudemd detect` / `cf claudemd init` / `cf claudemd update`(详见 `src/cli/commands/claudemd.ts`)。
|
|
212
269
|
|
|
213
|
-
|
|
214
|
-
echo '{"session_id":"test","hook_type":"UserPromptSubmit","user_prompt":"重构xxx"}' | ~/.claude/hooks/user-prompt-submit.sh
|
|
270
|
+
### Daemon 自动同步
|
|
215
271
|
|
|
216
|
-
|
|
217
|
-
curl -N http://127.0.0.1:3456/api/methodology-executions/events
|
|
218
|
-
```
|
|
272
|
+
daemon 启动时(`src/daemon/index.ts`)执行两个一次性同步:
|
|
219
273
|
|
|
220
|
-
|
|
274
|
+
- `syncHooks()` — 把 `dist/hooks/*.sh` 对照 sha256 同步到 `~/.claude/hooks/`,避免用户忘了重跑 `cf init`
|
|
275
|
+
- `syncSkills()` — 把 `dist/skills/official/*.md` 同步到 `~/.claude/skills/`,user-owned 文件(已存在)跳过
|
|
221
276
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
1. 在 `src/capability/methodologies/` 新建 `<id>.yaml`,参考 `harness-engineering.yaml` 结构:
|
|
225
|
-
```yaml
|
|
226
|
-
id: my-methodology
|
|
227
|
-
name: "My Methodology"
|
|
228
|
-
description: "..."
|
|
229
|
-
trigger:
|
|
230
|
-
taskType: [refactor, migrate]
|
|
231
|
-
complexity: [moderate, complex]
|
|
232
|
-
phase_templates:
|
|
233
|
-
understand:
|
|
234
|
-
agent: researcher
|
|
235
|
-
description: ...
|
|
236
|
-
prompt_template: ...
|
|
237
|
-
artifacts:
|
|
238
|
-
- type: file
|
|
239
|
-
pattern: "docs/**/*behavior*.md"
|
|
240
|
-
required: true
|
|
241
|
-
decision_rules:
|
|
242
|
-
- condition: "complexity == 'complex' && taskType == 'migrate'"
|
|
243
|
-
phases: [understand, characterize, refactor, verify]
|
|
244
|
-
description: "full workflow"
|
|
245
|
-
```
|
|
246
|
-
2. `phase_templates.<id>.agent` 必须对应 `~/.claude/agents/` 里真实存在的 agent 名(Planner 会用它生成 `phase.agent`,matcher 会严格校验)
|
|
247
|
-
3. 重启 daemon(Registry 启动时加载一次)
|
|
248
|
-
4. 在 Web UI `/methodologies` 点"新建执行"选它,或发一条符合 trigger 的 prompt
|
|
249
|
-
|
|
250
|
-
## 新增 Agent
|
|
251
|
-
|
|
252
|
-
最简方式:`~/.claude/agents/<name>.md` 按 frontmatter 规范写:
|
|
277
|
+
两者都幂等,文件相同时不写盘。
|
|
253
278
|
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
name: my-agent
|
|
257
|
-
description: "简明描述"
|
|
258
|
-
tools: [Read, Grep, Edit]
|
|
259
|
-
---
|
|
279
|
+
### 数据流(事件 → API → UI)
|
|
260
280
|
|
|
261
|
-
|
|
281
|
+
```
|
|
282
|
+
hook event ──► writeEvent() ──┐
|
|
283
|
+
──► writeTask()/task_events ─┤
|
|
284
|
+
──► writeRoutingEvent() ─┼─► ~/.claude-forge/data.db
|
|
285
|
+
──► writeSkillInvocation() ─┤
|
|
286
|
+
──► writeInjection() ─┘
|
|
287
|
+
│
|
|
288
|
+
▼
|
|
289
|
+
src/web/routes/*.ts (queryXxx)
|
|
290
|
+
│
|
|
291
|
+
▼
|
|
292
|
+
GET /api/events / sessions / tasks / skill-invocations ...
|
|
293
|
+
│
|
|
294
|
+
▼
|
|
295
|
+
web/src/pages/*.tsx (TanStack Query)
|
|
262
296
|
```
|
|
263
297
|
|
|
264
|
-
|
|
298
|
+
存储:
|
|
299
|
+
- 主库 `~/.claude-forge/data.db`,表:`events`、`sessions`、`tasks`、`task_events`、`injections`、`routing_events`、`token_usage`、`skill_invocations`
|
|
300
|
+
- Schema 由 `src/core/storage/schema.sql` 初始化
|
|
301
|
+
- 增量改动放 `src/core/storage/migrations/*.sql`(按文件名顺序执行)
|
|
265
302
|
|
|
266
|
-
|
|
303
|
+
### 长跑稳定性(v8.53.6 加)
|
|
304
|
+
|
|
305
|
+
daemon 通过三个机制保证长时间运行不膨胀:
|
|
267
306
|
|
|
268
|
-
|
|
307
|
+
- **多表 GC**:`cleanOldData(30)` 定期清理 30 天前的 events / routing_events / skill_invocations / token_usage,防止数据库无限增长
|
|
308
|
+
- **SQLite VACUUM**:`runMaintenance(500)` 在数据库超过 500 MB 时触发 `VACUUM`,回收空间;上次 VACUUM 超 7 天也强制执行
|
|
309
|
+
- **Stale task 回收**:`staleTaskGcInterval` 每 5 分钟扫描并关闭异常 active 状态的 task(避免僵尸任务阻塞计数)
|
|
269
310
|
|
|
270
|
-
|
|
271
|
-
- 集成测试:可以在 `tests/unit/executor/` 下用 fake 子进程的方式(参考 `background-executor.test.ts` 的 shell wrapper 手法)
|
|
272
|
-
- E2E(真 claude -p):写进 `scripts/smoke-*.ts`,手动触发,不进 CI
|
|
273
|
-
- 新增功能必须 at least 一个单测,关键路径需要集成测试
|
|
311
|
+
相关代码:`src/core/storage/maintenance.ts`(cleanOldData / runMaintenance),daemon 在 `src/daemon/index.ts` 启动时注册定时任务。
|
|
274
312
|
|
|
275
313
|
---
|
|
276
314
|
|
|
277
|
-
##
|
|
315
|
+
## 添加新 Hook
|
|
278
316
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
317
|
+
1. 在 `src/hooks/` 加 `.sh` 脚本,复用 `hook-lib.sh` 的 payload 工具
|
|
318
|
+
2. `src/daemon/event-parser.ts` 加 hook_type 解析(如有新字段)
|
|
319
|
+
3. `src/daemon/router.ts` 加分发分支;如需 handler 新建 `src/daemon/handlers/<name>.ts`
|
|
320
|
+
4. `src/core/types.ts` 加事件类型 + type guard
|
|
321
|
+
5. 重 build 后 `cf init` 重装 hook,或重启 daemon 让 `syncHooks()` 自动覆盖
|
|
322
|
+
6. 测试覆盖:hook 脚本 + handler 都要补 `tests/unit/`
|
|
323
|
+
|
|
324
|
+
> hooks/*.sh 无单元测试覆盖,改 hook 必走 Hybrid 工作流(见根 CLAUDE.md「工作流升级判定」)。
|
|
284
325
|
|
|
285
|
-
|
|
286
|
-
# package.json + package-lock.json 两处同步改
|
|
326
|
+
## 添加新 Skill
|
|
287
327
|
|
|
288
|
-
|
|
289
|
-
git commit -am "chore: bump version to X.Y.Z"
|
|
290
|
-
git tag vX.Y.Z
|
|
328
|
+
最简方式:在 `src/skills/official/<name>.md` 写 frontmatter:
|
|
291
329
|
|
|
292
|
-
|
|
293
|
-
|
|
330
|
+
```markdown
|
|
331
|
+
---
|
|
332
|
+
name: my-skill
|
|
333
|
+
description: 用一句话说明 skill 触发场景
|
|
334
|
+
keywords: [refactor, legacy, test]
|
|
335
|
+
version: 1.0.0
|
|
336
|
+
---
|
|
294
337
|
|
|
295
|
-
#
|
|
296
|
-
|
|
338
|
+
# 方法论正文
|
|
339
|
+
|
|
340
|
+
完整的多 phase 工作流...
|
|
297
341
|
```
|
|
298
342
|
|
|
343
|
+
发布后 daemon 启动会自动 sync 到用户的 `~/.claude/skills/`。如果是只面向自己的 skill,直接放 `~/.claude/skills/` 即可。
|
|
344
|
+
|
|
345
|
+
社区 skill 升级走 `cf skills upgrade`,详见 `docs/skill-upgrade-guide.md`。
|
|
346
|
+
|
|
347
|
+
## 添加新 CLI 子命令
|
|
348
|
+
|
|
349
|
+
1. 在 `src/cli/commands/<name>.ts` 写 `register(program)`
|
|
350
|
+
2. 在 `src/cli/index.ts` 引入并调用 `register()`
|
|
351
|
+
3. 子命令测试放 `tests/unit/cli-<name>.test.ts`
|
|
352
|
+
|
|
299
353
|
---
|
|
300
354
|
|
|
301
|
-
##
|
|
355
|
+
## 故障排查
|
|
302
356
|
|
|
303
|
-
| 现象 |
|
|
357
|
+
| 现象 | 排查 |
|
|
304
358
|
|---|---|
|
|
305
|
-
| Hook 没触发 |
|
|
306
|
-
| daemon 启动报 EADDRINUSE | 上次进程没退;`cf daemon stop` 或 `lsof -i
|
|
307
|
-
|
|
|
308
|
-
|
|
|
309
|
-
|
|
|
310
|
-
|
|
|
359
|
+
| Hook 没触发 | `ls -la ~/.claude/hooks/` 看是否指向 `dist/hooks/`;缺失就跑 `cf init`;或重启 daemon 让 `syncHooks()` 自动补 |
|
|
360
|
+
| daemon 启动报 `EADDRINUSE` | 上次进程没退;`cf daemon stop` 或 `lsof -i :3721` 找 pid 杀 |
|
|
361
|
+
| Web 后台 404 | `dist/web/static/` 是否存在;`npm run build` 是否成功;Vite 前端 `cd web && npm run build` 后再 root build |
|
|
362
|
+
| Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name` 字段;语义匹配需要 `cf config` 配 API key |
|
|
363
|
+
| `cf skills upgrade` 无候选 | `~/.claude-forge/skill-candidates/` 是否拉成功;网络问题用代理重试 |
|
|
364
|
+
| better-sqlite3 native binding error | Node 版本与 binding 不匹配;`npm rebuild better-sqlite3` |
|
|
365
|
+
| Schema 改动后查不到字段 | 手动加 `src/core/storage/migrations/<n>_<desc>.sql`,daemon 启动会自动执行 |
|
|
366
|
+
|
|
367
|
+
调试入口:
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# daemon 日志
|
|
371
|
+
tail -f ~/.claude-forge/daemon.log
|
|
372
|
+
|
|
373
|
+
# 查 SQLite 运行时数据
|
|
374
|
+
sqlite3 ~/.claude-forge/data.db "SELECT id, hook_type, timestamp FROM events ORDER BY id DESC LIMIT 10"
|
|
375
|
+
|
|
376
|
+
# 手工模拟 hook 调用(绕开 Claude Code)
|
|
377
|
+
echo '{"session_id":"test","hook_type":"UserPromptSubmit","user_prompt":"重构 xxx"}' \
|
|
378
|
+
| ~/.claude/hooks/user-prompt-submit.sh
|
|
379
|
+
```
|