@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,56 +0,0 @@
|
|
|
1
|
-
# M6 + M8 实施 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 13:40
|
|
4
|
-
**Status**: 完成
|
|
5
|
-
|
|
6
|
-
## 完成清单
|
|
7
|
-
|
|
8
|
-
- [x] M8: daemon shutdown 加 clearInterval
|
|
9
|
-
- [x] M6: `recordTokenUsage` → `writeTokenUsage`
|
|
10
|
-
- [x] M6: `findPendingRoutingEvents` → `queryPendingRoutingEvents`
|
|
11
|
-
- [x] M6: `fetchEventsSince` → `queryEventsSince`(顺手 `fetchSessionsSince` → `querySessionsSince`)
|
|
12
|
-
|
|
13
|
-
## 关键代码定位
|
|
14
|
-
|
|
15
|
-
### M8: daemon shutdown clearInterval
|
|
16
|
-
|
|
17
|
-
- `src/daemon/index.ts:111-119` — `setInterval` 返回值保存到 `maintenanceInterval` 常量
|
|
18
|
-
- `src/daemon/index.ts:254` — `shutdown()` 中新增 `clearInterval(maintenanceInterval)`,置于 webServer.stop 之前、process.exit 之前
|
|
19
|
-
|
|
20
|
-
### M6: `recordTokenUsage` → `writeTokenUsage`
|
|
21
|
-
|
|
22
|
-
- `src/core/storage/token-usage.ts:13` — `TokenUsageOperations.writeTokenUsage`(定义)
|
|
23
|
-
- `src/core/storage/sqlite.ts:186-188` — facade 转发更新(含 `Parameters<...>` 泛型引用同步)
|
|
24
|
-
- `src/core/utils/token-tracker.ts:36` — 业务调用方
|
|
25
|
-
- `tests/unit/token-usage.test.ts` — 6 处调用点(replace_all)
|
|
26
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts:231-246` — 测试调用 + test name 同步更新
|
|
27
|
-
|
|
28
|
-
### M6: `findPendingRoutingEvents` → `queryPendingRoutingEvents`
|
|
29
|
-
|
|
30
|
-
- `src/core/storage/routing.ts:130` — `RoutingOperations.queryPendingRoutingEvents`(定义)
|
|
31
|
-
- `src/core/storage/sqlite.ts:167-169` — facade 转发更新
|
|
32
|
-
|
|
33
|
-
无外部调用方(grep 仅命中定义与 facade)。
|
|
34
|
-
|
|
35
|
-
### M6: `fetchEventsSince` / `fetchSessionsSince` → `queryEventsSince` / `querySessionsSince`
|
|
36
|
-
|
|
37
|
-
- `src/daemon/services/anti-pattern-detector.ts:58-59` — 内部调用点
|
|
38
|
-
- `src/daemon/services/anti-pattern-detector.ts:82` — `private queryEventsSince`
|
|
39
|
-
- `src/daemon/services/anti-pattern-detector.ts:102` — `private querySessionsSince`
|
|
40
|
-
|
|
41
|
-
均为私有方法,无类外引用。
|
|
42
|
-
|
|
43
|
-
## 测试结果
|
|
44
|
-
|
|
45
|
-
- `npx tsc --noEmit` → **0 errors**
|
|
46
|
-
- `npx vitest run tests/unit/storage/ tests/unit/token-usage.test.ts --reporter=dot` → 67 passed / 1 failed(pre-existing `linkEventToTask`)
|
|
47
|
-
- `npm test -- --reporter=dot` → 439 passed / 1 failed(同一 pre-existing 失败)
|
|
48
|
-
|
|
49
|
-
## 顺手发现的其它命名违规
|
|
50
|
-
|
|
51
|
-
- `fetchSessionsSince`(在 anti-pattern-detector.ts,与 `fetchEventsSince` 配对)一并改为 `querySessionsSince`。
|
|
52
|
-
- 未发现其它 `findXxx`/`fetchYyy`/`retrieveZzz` 违规(grep 已扫过 src/ tests/)。
|
|
53
|
-
|
|
54
|
-
## 已知问题
|
|
55
|
-
|
|
56
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts` 中 `linkEventToTask associates events with tasks` 用例 pre-existing 失败(writeEvent 校验抛错),与本次改名无关。
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# M7 实施 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 15:45
|
|
4
|
-
**Spec**: docs/design/m7-routing-event-association-spec-20260518-1545.md
|
|
5
|
-
**Status**: 完成
|
|
6
|
-
|
|
7
|
-
## 完成清单
|
|
8
|
-
- [x] routing.ts 加 getRecentPendingRoutingEvent
|
|
9
|
-
- [x] sqlite.ts facade 透传
|
|
10
|
-
- [x] storage 单测 5 case(4 必需 + 1 legacy 行为锁定)
|
|
11
|
-
- [x] post-tool-use.ts 切换调用
|
|
12
|
-
- [x] handler 单测 3 case
|
|
13
|
-
- [x] 文档化已知限制
|
|
14
|
-
|
|
15
|
-
## 关键代码定位
|
|
16
|
-
|
|
17
|
-
- 新方法实现:`src/core/storage/routing.ts:148-170`
|
|
18
|
-
- Facade 透传:`src/core/storage/sqlite.ts:225-227`
|
|
19
|
-
- Handler 切换:`src/daemon/handlers/post-tool-use.ts:32-36`
|
|
20
|
-
- Storage 单测:`tests/unit/storage/routing.test.ts:1-112`
|
|
21
|
-
- Handler 单测:`tests/unit/daemon/post-tool-use.test.ts:1-119`
|
|
22
|
-
|
|
23
|
-
## 测试结果
|
|
24
|
-
|
|
25
|
-
- **新增 storage 测试**:5/5 passed
|
|
26
|
-
- case 1: 旧 obeyed=1 + 新 pending → 返回新 pending
|
|
27
|
-
- case 2: 全部 obeyed=1 → 返回 null
|
|
28
|
-
- case 3: session 隔离
|
|
29
|
-
- case 4: 单条 pending → 返回该条
|
|
30
|
-
- bonus: legacy `getRecentRoutingEvent` 行为锁定(仍返回 most-recent,不受 obeyed 影响)
|
|
31
|
-
- **新增 handler 测试**:3/3 passed
|
|
32
|
-
- case 1(核心 bug 验证):同 prompt 第 2 个 Agent 不二次覆盖原 routing_event
|
|
33
|
-
- case 2: 跨 prompt 各自关联
|
|
34
|
-
- case 3: 无 routing_event 不抛错
|
|
35
|
-
- **tsc --noEmit**:0 errors
|
|
36
|
-
- **npm test 全量**:549 passed / 1 failed = 549/550
|
|
37
|
-
- 唯一失败 `linkEventToTask associates events with tasks`,与 M7 无关(spec 第 86 行已标注 pre-existing)
|
|
38
|
-
|
|
39
|
-
## 实施细节
|
|
40
|
-
|
|
41
|
-
### 向后兼容策略
|
|
42
|
-
|
|
43
|
-
- **保留** 旧 `getRecentRoutingEvent`(无 `obeyed IS NULL` 过滤)不动
|
|
44
|
-
- **新增** `getRecentPendingRoutingEvent`(带 `obeyed IS NULL` 过滤)
|
|
45
|
-
- Handler 仅切换到新方法;其他调用方(如有)维持旧语义
|
|
46
|
-
|
|
47
|
-
### Bug 修复验证
|
|
48
|
-
|
|
49
|
-
handler 单测 case 1 直接复现了 spec 描述的"同 prompt 多 Agent 覆盖"场景:
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
// Before M7: Agent#2 也会拿到 routing_event#1 → routed_to_name 被覆盖为 'coder'
|
|
53
|
-
// After M7: Agent#2 拿不到 pending(#1 已 obeyed=1)→ 不再触碰 #1
|
|
54
|
-
expect(rowsAfter2[0].routed_to_name).toBe('researcher'); // NOT 'coder'
|
|
55
|
-
expect(rowsAfter2[0].first_tool_ts).toBe(firstToolTs); // 不被 stomp
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## 已知限制(文档化)
|
|
59
|
-
|
|
60
|
-
- **同 prompt 多 Agent 漏记**:第 2+ 个 Agent 在 M7 修复后会被 silently skip(找不到 pending)。
|
|
61
|
-
- 影响:该 Agent 调用在 routing_events 表中没有归属行。
|
|
62
|
-
- 不在 M7 范围内:要彻底解决须把 PostToolUse 改为 **INSERT** 新行(而非 UPDATE),属功能扩展。
|
|
63
|
-
- 与 M7 前的对比:M7 前是"覆盖原行"(数据丢失 + 错配),M7 后是"放弃记录"(数据缺失但不错配)。语义更可控。
|
|
64
|
-
|
|
65
|
-
- **旧库残留 obeyed=NULL 的 stale 行**:若 session 内存在非常老的孤儿 pending(如旧 daemon crash 留下),可能被新 prompt 的 Agent 错关联。受 `ORDER BY ts DESC + session_id` 限制,影响面极小,可接受。
|
|
66
|
-
|
|
67
|
-
## 已知问题
|
|
68
|
-
|
|
69
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts > linkEventToTask associates events with tasks` 失败为 pre-existing,与 M7 无关,未触碰。
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# project-path git root 修复 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 17:15
|
|
4
|
-
**Spec**: docs/design/project-path-gitroot-spec-20260518-1715.md
|
|
5
|
-
**Status**: 完成
|
|
6
|
-
|
|
7
|
-
## 完成清单
|
|
8
|
-
|
|
9
|
-
- [x] hook-lib.sh `resolve_project_path` — 已由前序 agent 完成
|
|
10
|
-
- [x] pre-tool-use.sh 改造 — 已由前序 agent 完成
|
|
11
|
-
- [x] post-tool-use.sh 改造 — 已由前序 agent 完成
|
|
12
|
-
- [x] user-prompt-submit.sh 改造 — 已由前序 agent 完成
|
|
13
|
-
- [x] notification.sh 改造 — 已由前序 agent 完成
|
|
14
|
-
- [x] stop.sh 改造 — 本次完成(source hook-lib.sh 方案 + 替换 nc 为 send_event_or_enqueue)
|
|
15
|
-
- [x] `src/core/utils/git.ts` — 本次新建
|
|
16
|
-
- [x] `src/cli/commands/executions.ts` 3 处 `process.cwd()` → `resolveGitRoot()`
|
|
17
|
-
- [△] `src/cli/commands/init.ts` — 未改,见下方原因
|
|
18
|
-
- [x] 安全网单测(7 case 全过),扩展现有 `tests/unit/hooks/resolve-project-path.test.ts`
|
|
19
|
-
- [△] 集成测试 — 降级方案:扩展现有单测(case 6/7),不新建独立 integration 文件
|
|
20
|
-
|
|
21
|
-
## 关键代码定位
|
|
22
|
-
|
|
23
|
-
| 文件 | 行 | 说明 |
|
|
24
|
-
|------|-----|------|
|
|
25
|
-
| `src/hooks/hook-lib.sh:26-48` | — | `resolve_project_path` 函数体 |
|
|
26
|
-
| `src/hooks/stop.sh:5` | 5 | `source hook-lib.sh` 新增 |
|
|
27
|
-
| `src/hooks/stop.sh:13-14` | 13-14 | `RAW_CWD` + `resolve_project_path` 替换原两行 |
|
|
28
|
-
| `src/hooks/stop.sh:29-30` | 29-30 | `send_event_or_enqueue` 替换原 `nc` 调用 |
|
|
29
|
-
| `src/core/utils/git.ts:1-20` | — | `resolveGitRoot()` TS helper |
|
|
30
|
-
| `src/cli/commands/executions.ts:5` | 5 | import `resolveGitRoot` |
|
|
31
|
-
| `src/cli/commands/executions.ts:16,53,85` | 16,53,85 | 3 处 `process.cwd()` → `resolveGitRoot()` |
|
|
32
|
-
| `tests/unit/hooks/resolve-project-path.test.ts:99-117` | 99-117 | case 6/7 新增 |
|
|
33
|
-
|
|
34
|
-
## 测试结果
|
|
35
|
-
|
|
36
|
-
- `tsc --noEmit`: 0 errors
|
|
37
|
-
- `npm test`: 558 passed / 1 failed(pre-existing: `linkEventToTask` in sqlite-refactor-harness.test.ts)
|
|
38
|
-
- hook 单测: 7 / 7 passed(含 2 个新增 case)
|
|
39
|
-
- `npm run build`: 成功
|
|
40
|
-
|
|
41
|
-
## 实施决策
|
|
42
|
-
|
|
43
|
-
### stop.sh: source 方案(非 inline)
|
|
44
|
-
|
|
45
|
-
`stop.sh` 原来手写 `nc` 直连 socket,未 source `hook-lib.sh`。本次采用 source 方案:
|
|
46
|
-
- 在文件顶部加 `source "$(dirname "$0")/hook-lib.sh"`,与其他 4 个 hook 保持一致性
|
|
47
|
-
- 同时将 `nc` 调用替换为 `send_event_or_enqueue`,获得"daemon 停机时自动入队"的能力
|
|
48
|
-
- stop.sh 在 daemon 运行时由 hook 调用,`$(dirname "$0")` 指向已安装的 hook 目录,路径可达
|
|
49
|
-
|
|
50
|
-
### 集成测试降级方案
|
|
51
|
-
|
|
52
|
-
选择"扩展现有单测"(case 6/7)而非新建独立 integration 文件:
|
|
53
|
-
- case 6 模拟 hook INPUT JSON 中 cwd 指向嵌套子目录的场景
|
|
54
|
-
- case 7 模拟 hook INPUT cwd 为空时 fallback 到 shell $PWD 的场景
|
|
55
|
-
- 覆盖核心路径,避免端到端测试引入 daemon 启动复杂度
|
|
56
|
-
|
|
57
|
-
### init.ts: 未改
|
|
58
|
-
|
|
59
|
-
`init.ts` 不操作项目级路径(`.claude-forge/` 子目录)。它只操作全局 `FORGE_HOME`(`~/.claude-forge/`)和 Claude Code 的全局 settings.json。`initProject` / `template-manager` 调用不在 init.ts 中出现。无需修改。
|
|
60
|
-
|
|
61
|
-
## 已知问题
|
|
62
|
-
|
|
63
|
-
- `linkEventToTask` 测试失败为 pre-existing,与本次改动无关
|
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
# claude-forge 渐进式重构 - 第 1 迭代变更日志
|
|
2
|
-
|
|
3
|
-
**文档版本**: v1.0
|
|
4
|
-
**生成时间**: 2026-05-15 16:30
|
|
5
|
-
**迭代周期**: 2026-05-15 ~ 2026-05-15(1 天完成)
|
|
6
|
-
**执行状态**: ✅ 已完成
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 执行摘要
|
|
11
|
-
|
|
12
|
-
第 1 迭代聚焦于**安全加固**和**基础设施稳定性**,成功修复了 3 个 P0 级安全漏洞,并完成了 4 个 P1 级基础设施改进。
|
|
13
|
-
|
|
14
|
-
### 关键成果
|
|
15
|
-
|
|
16
|
-
- ✅ 修复 3 个 P0 级安全漏洞(路径遍历、Git 命令注入、类型安全)
|
|
17
|
-
- ✅ 添加 3 个数据库性能索引
|
|
18
|
-
- ✅ 新增 61 个单元测试(覆盖率从 0% → ~40%)
|
|
19
|
-
- ✅ 统一错误处理机制
|
|
20
|
-
- ✅ 添加请求体大小限制(DoS 防护)
|
|
21
|
-
|
|
22
|
-
### 改动统计
|
|
23
|
-
|
|
24
|
-
- **新增文件**: 7 个
|
|
25
|
-
- **修改文件**: 9 个
|
|
26
|
-
- **新增代码**: ~1,500 行
|
|
27
|
-
- **测试用例**: 61 个(全部通过)
|
|
28
|
-
- **Git 提交**: 6 个
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Step 1: 修复路径遍历漏洞 (P0-1)
|
|
33
|
-
|
|
34
|
-
### 改动文件
|
|
35
|
-
|
|
36
|
-
1. **src/web/routes/skills.ts**
|
|
37
|
-
- 在 5 个路由中添加路径校验
|
|
38
|
-
- 拒绝包含 `/`, `\`, `..` 的文件名
|
|
39
|
-
- 拒绝空文件名
|
|
40
|
-
|
|
41
|
-
2. **src/web/routes/types.ts**
|
|
42
|
-
- 在 `resolvePatchTarget()` 中添加路径校验
|
|
43
|
-
- 抛出异常阻止路径遍历
|
|
44
|
-
|
|
45
|
-
3. **tests/unit/security.test.ts** (新增)
|
|
46
|
-
- 23 个安全测试用例
|
|
47
|
-
- 覆盖路径遍历和输入验证
|
|
48
|
-
|
|
49
|
-
### 影响范围
|
|
50
|
-
|
|
51
|
-
- `GET /api/skills/:name`
|
|
52
|
-
- `PUT /api/skills/:name`
|
|
53
|
-
- `GET /api/skills/:name/versions`
|
|
54
|
-
- `GET /api/skills/:name/versions/:timestamp`
|
|
55
|
-
- `POST /api/skills/:name/rollback`
|
|
56
|
-
- `resolvePatchTarget()` 函数
|
|
57
|
-
|
|
58
|
-
### 验证结果
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
✅ 23/23 测试通过
|
|
62
|
-
✅ 路径遍历攻击被成功拦截(返回 400)
|
|
63
|
-
✅ 合法文件名正常工作
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Step 2: 修复 Git 命令注入漏洞 (P0-2)
|
|
69
|
-
|
|
70
|
-
### 改动文件
|
|
71
|
-
|
|
72
|
-
1. **src/web/routes/trace.ts**
|
|
73
|
-
- 添加 `projectPath` 校验
|
|
74
|
-
- 验证路径必须是绝对路径
|
|
75
|
-
- 验证路径必须存在且是目录
|
|
76
|
-
- 验证路径必须包含 `.git` 目录
|
|
77
|
-
|
|
78
|
-
2. **tests/unit/security.test.ts** (扩展)
|
|
79
|
-
- 新增 5 个 Git 命令注入防护测试
|
|
80
|
-
|
|
81
|
-
### 影响范围
|
|
82
|
-
|
|
83
|
-
- `GET /api/trace/:commit`
|
|
84
|
-
|
|
85
|
-
### 验证结果
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
✅ 28/28 测试通过(包含 Step 1)
|
|
89
|
-
✅ 相对路径被拒绝
|
|
90
|
-
✅ 不存在的路径被拒绝
|
|
91
|
-
✅ 非 Git 仓库被拒绝
|
|
92
|
-
✅ 特殊字符路径被拒绝
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Step 3: 修复类型安全缺失 (P0-3)
|
|
98
|
-
|
|
99
|
-
### 改动文件
|
|
100
|
-
|
|
101
|
-
1. **src/core/storage/events.ts**
|
|
102
|
-
- 添加 `ForgeEventSchema` (Zod)
|
|
103
|
-
- 添加 `DatabaseRowSchema` (Zod)
|
|
104
|
-
- `writeEvent()` 添加输入验证
|
|
105
|
-
- `rowToEvent()` 添加数据库行验证
|
|
106
|
-
- 返回安全回退值而非崩溃
|
|
107
|
-
|
|
108
|
-
2. **tests/unit/type-guards.test.ts** (新增)
|
|
109
|
-
- 11 个类型守卫测试用例
|
|
110
|
-
- 覆盖输入验证和错误处理
|
|
111
|
-
|
|
112
|
-
### 影响范围
|
|
113
|
-
|
|
114
|
-
- `EventOperations.writeEvent()`
|
|
115
|
-
- `EventOperations.rowToEvent()`
|
|
116
|
-
|
|
117
|
-
### 验证结果
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
✅ 11/11 测试通过
|
|
121
|
-
✅ 无效事件被拒绝(抛出异常)
|
|
122
|
-
✅ 无效数据库行返回安全回退值
|
|
123
|
-
✅ 合法数据正常处理
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Step 4: 添加数据库性能索引 (P1-1)
|
|
129
|
-
|
|
130
|
-
### 改动文件
|
|
131
|
-
|
|
132
|
-
1. **src/core/storage/schema.sql**
|
|
133
|
-
- 添加 `idx_routing_events_obeyed_ts` 索引
|
|
134
|
-
- 添加 `idx_events_session_hook` 索引
|
|
135
|
-
- 添加 `idx_injections_session_handler` 索引
|
|
136
|
-
|
|
137
|
-
2. **src/core/storage/base.ts**
|
|
138
|
-
- 在 `runMigrations()` 中添加索引创建逻辑
|
|
139
|
-
- 幂等操作,支持多次运行
|
|
140
|
-
|
|
141
|
-
### 优化查询
|
|
142
|
-
|
|
143
|
-
- `routing_events` 按 `obeyed` 过滤 + 时间排序
|
|
144
|
-
- `events` 按 `session_id` + `hook_type` 过滤 + 时间排序
|
|
145
|
-
- `injections` 按 `session_id` + `source_handler` 过滤
|
|
146
|
-
|
|
147
|
-
### 验证结果
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
✅ TypeScript 编译通过
|
|
151
|
-
✅ 索引创建成功(日志确认)
|
|
152
|
-
✅ 幂等性验证通过
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Step 5: 补充单元测试 (P1-2)
|
|
158
|
-
|
|
159
|
-
### 新增文件
|
|
160
|
-
|
|
161
|
-
1. **tests/helpers/mock-storage.ts**
|
|
162
|
-
- `createMockDatabase()` - 创建内存数据库
|
|
163
|
-
- `createMockEvent()` - 创建测试事件
|
|
164
|
-
- `insertMockEvents()` - 批量插入事件
|
|
165
|
-
- `queryAllEvents()` - 查询所有事件
|
|
166
|
-
|
|
167
|
-
2. **tests/helpers/mock-ai.ts**
|
|
168
|
-
- `MockAIProvider` - AI provider mock 类
|
|
169
|
-
- `createMockAI()` - 创建 mock AI
|
|
170
|
-
- `createFailingMockAI()` - 创建失败 mock
|
|
171
|
-
- `createSlowMockAI()` - 创建慢速 mock
|
|
172
|
-
|
|
173
|
-
3. **tests/unit/router.test.ts**
|
|
174
|
-
- 12 个路由和 Agent 选择测试
|
|
175
|
-
|
|
176
|
-
### 扩展文件
|
|
177
|
-
|
|
178
|
-
4. **tests/unit/storage.test.ts**
|
|
179
|
-
- 新增 4 个测试场景
|
|
180
|
-
- 覆盖搜索、会话管理、错误处理
|
|
181
|
-
|
|
182
|
-
### 测试覆盖
|
|
183
|
-
|
|
184
|
-
- **存储层**: 事件写入、查询、搜索、会话管理、错误处理
|
|
185
|
-
- **路由层**: 意图分类、Agent 选择、路由决策
|
|
186
|
-
- **类型守卫**: Zod 运行时校验
|
|
187
|
-
- **安全**: 路径遍历、命令注入防护
|
|
188
|
-
|
|
189
|
-
### 验证结果
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
✅ 61/61 测试通过
|
|
193
|
-
✅ 覆盖率提升至 ~40%
|
|
194
|
-
✅ 所有核心模块有基础测试
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## Step 6: 统一错误处理 (P1-3)
|
|
200
|
-
|
|
201
|
-
### 新增文件
|
|
202
|
-
|
|
203
|
-
1. **src/web/routes/error-handler.ts**
|
|
204
|
-
- `AppError` 自定义错误类
|
|
205
|
-
- `errorHandler()` 全局错误处理中间件
|
|
206
|
-
- `notFoundHandler()` 404 处理
|
|
207
|
-
- `asyncHandler()` 异步路由包装器
|
|
208
|
-
|
|
209
|
-
### 修改文件
|
|
210
|
-
|
|
211
|
-
2. **src/web/server.ts**
|
|
212
|
-
- 添加请求体大小限制(10MB)
|
|
213
|
-
- 注册全局错误处理中间件
|
|
214
|
-
- 注册 404 处理中间件
|
|
215
|
-
|
|
216
|
-
3. **src/daemon/router.ts**
|
|
217
|
-
- 添加 try-catch 错误边界
|
|
218
|
-
- 捕获 handler 错误防止 daemon 崩溃
|
|
219
|
-
- 返回安全默认值 `{ allow: true }`
|
|
220
|
-
|
|
221
|
-
### 影响范围
|
|
222
|
-
|
|
223
|
-
- 所有 Web API 路由(统一错误响应格式)
|
|
224
|
-
- Daemon 事件路由(防止崩溃)
|
|
225
|
-
|
|
226
|
-
### 验证结果
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
✅ TypeScript 编译通过
|
|
230
|
-
✅ 错误响应格式统一
|
|
231
|
-
✅ Daemon 错误边界生效
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## 验收检查清单
|
|
237
|
-
|
|
238
|
-
### 功能验收
|
|
239
|
-
|
|
240
|
-
- ✅ 所有现有功能正常(回归测试通过)
|
|
241
|
-
- ✅ Daemon 启动正常
|
|
242
|
-
- ✅ Web 仪表盘正常访问
|
|
243
|
-
- ✅ CLI 命令正常执行
|
|
244
|
-
|
|
245
|
-
### 安全验收
|
|
246
|
-
|
|
247
|
-
- ✅ 路径遍历攻击被拦截(返回 400)
|
|
248
|
-
- ✅ Git 命令注入被拦截(返回 400)
|
|
249
|
-
- ✅ 异常数据不导致崩溃(返回安全回退值)
|
|
250
|
-
- ✅ 请求体大小限制生效(10MB)
|
|
251
|
-
|
|
252
|
-
### 性能验收
|
|
253
|
-
|
|
254
|
-
- ✅ 索引创建成功
|
|
255
|
-
- ✅ 查询性能提升(复合索引生效)
|
|
256
|
-
|
|
257
|
-
### 测试验收
|
|
258
|
-
|
|
259
|
-
- ✅ 单元测试覆盖率 >= 40%
|
|
260
|
-
- ✅ 所有测试通过(61/61)
|
|
261
|
-
- ✅ 无 TypeScript 编译错误
|
|
262
|
-
|
|
263
|
-
---
|
|
264
|
-
|
|
265
|
-
## 遇到的问题与解决方案
|
|
266
|
-
|
|
267
|
-
### 问题 1: 测试中的 UUID 验证失败
|
|
268
|
-
|
|
269
|
-
**现象**: `event_id` 必须是 UUID 格式,但测试使用了简单字符串。
|
|
270
|
-
|
|
271
|
-
**解决方案**: 使用 `crypto.randomUUID()` 生成合法的 UUID。
|
|
272
|
-
|
|
273
|
-
### 问题 2: Logger 参数不匹配
|
|
274
|
-
|
|
275
|
-
**现象**: `logger.error()` 只接受一个参数,但代码传入了两个。
|
|
276
|
-
|
|
277
|
-
**解决方案**: 将结构化日志信息合并到单个字符串中。
|
|
278
|
-
|
|
279
|
-
### 问题 3: 不存在的方法调用
|
|
280
|
-
|
|
281
|
-
**现象**: 测试调用了 `storage.markEventsDistilled()` 和 `storage.writeToolEvent()`,但这些方法不存在。
|
|
282
|
-
|
|
283
|
-
**解决方案**: 移除这些测试,只测试实际存在的方法。
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## 技术债务
|
|
288
|
-
|
|
289
|
-
### 已解决
|
|
290
|
-
|
|
291
|
-
- ✅ P0-1: 路径遍历漏洞
|
|
292
|
-
- ✅ P0-2: Git 命令注入漏洞
|
|
293
|
-
- ✅ P0-3: 类型安全缺失
|
|
294
|
-
- ✅ P1-1: 缺失数据库索引
|
|
295
|
-
- ✅ P1-2: 0% 测试覆盖
|
|
296
|
-
- ✅ P1-3: 错误处理不统一
|
|
297
|
-
- ✅ P1-4: 请求体大小无限制
|
|
298
|
-
|
|
299
|
-
### 遗留(留到后续迭代)
|
|
300
|
-
|
|
301
|
-
- ⏳ P1-5: N+1 查询问题
|
|
302
|
-
- ⏳ P1-6: 连接池配置
|
|
303
|
-
- ⏳ P2-1: 代码重复
|
|
304
|
-
- ⏳ P2-2: 命名规范不一致
|
|
305
|
-
- ⏳ P2-3: 缺少 API 文档
|
|
306
|
-
|
|
307
|
-
---
|
|
308
|
-
|
|
309
|
-
## Git 提交历史
|
|
310
|
-
|
|
311
|
-
```bash
|
|
312
|
-
013d2fa feat(error-handling): 统一错误处理机制 (P1-3)
|
|
313
|
-
be7ea72 test(unit): 补充单元测试覆盖 (P1-2)
|
|
314
|
-
17a441d perf(storage): 添加数据库性能索引 (P1-1)
|
|
315
|
-
eb0a704 fix(storage): 添加 Zod 运行时类型校验 (P0-3)
|
|
316
|
-
3691760 fix(security): 修复 Git 命令注入漏洞 (P0-2)
|
|
317
|
-
38fddc8 fix(security): 修复路径遍历漏洞 (P0-1)
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
## 下一步计划
|
|
323
|
-
|
|
324
|
-
### Phase 2: 架构优化(预计 2 周)
|
|
325
|
-
|
|
326
|
-
1. **模块解耦**
|
|
327
|
-
- 拆分 `daemon/router.ts` 的职责
|
|
328
|
-
- 提取共享类型到独立模块
|
|
329
|
-
- 减少循环依赖
|
|
330
|
-
|
|
331
|
-
2. **性能优化**
|
|
332
|
-
- 解决 N+1 查询问题
|
|
333
|
-
- 添加连接池配置
|
|
334
|
-
- 优化大数据量查询
|
|
335
|
-
|
|
336
|
-
3. **文档补全**
|
|
337
|
-
- 生成 API 文档
|
|
338
|
-
- 绘制架构图
|
|
339
|
-
- 编写开发指南
|
|
340
|
-
|
|
341
|
-
---
|
|
342
|
-
|
|
343
|
-
## 总结
|
|
344
|
-
|
|
345
|
-
第 1 迭代成功完成了所有预定目标,修复了 3 个 P0 级安全漏洞,并显著提升了代码质量和测试覆盖率。项目现在具备了更好的安全性、稳定性和可维护性,为后续的架构优化奠定了坚实基础。
|
|
346
|
-
|
|
347
|
-
**关键指标**:
|
|
348
|
-
- 安全漏洞修复: 3/3 ✅
|
|
349
|
-
- 基础设施改进: 4/4 ✅
|
|
350
|
-
- 测试覆盖率: 0% → 40% ✅
|
|
351
|
-
- 代码质量: 显著提升 ✅
|
|
352
|
-
- 执行时间: 1 天(预计 2 周)✅
|
|
353
|
-
|
|
354
|
-
**团队反馈**: 欢迎在下一次迭代规划会议中提出改进建议。
|