@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
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# L6 + L8 最终扫尾 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 16:40
|
|
4
|
-
**Status**: 完成
|
|
5
|
-
|
|
6
|
-
## 完成清单
|
|
7
|
-
|
|
8
|
-
- [x] L6: setLogLevel env 解析移到 logger 模块加载
|
|
9
|
-
- [x] L8: token_usage FK 注释补充
|
|
10
|
-
|
|
11
|
-
## 关键代码定位
|
|
12
|
-
|
|
13
|
-
- `src/core/utils/logger.ts:5-22` — 新增 `getLogLevelFromEnv()`,模块加载时初始化 `currentLevel`
|
|
14
|
-
- `src/daemon/index.ts:23` / `src/daemon/index.ts:60-63` — 删除手动 env 解析与 setLogLevel 调用,import 收窄为 `logger`
|
|
15
|
-
- `src/core/storage/schema.sql:16-18` / `src/core/storage/schema.sql:20` / `src/core/storage/schema.sql:153-163` —
|
|
16
|
-
- header 关系图增加 `token_usage` 章节
|
|
17
|
-
- "Why no FK" 注释主语扩展为 routing_events / skill_invocations / token_usage
|
|
18
|
-
- token_usage.session_id 字段处补充内联注释(与 routing_events / skill_invocations 同口径)
|
|
19
|
-
|
|
20
|
-
## 测试结果
|
|
21
|
-
|
|
22
|
-
- tsc: 0 errors
|
|
23
|
-
- npm test: 551 / 552 通过(1 个 pre-existing 失败:`tests/unit/storage/sqlite-refactor-harness.test.ts` 的 `writeEvent` Invalid uuid 校验失败,与本次改动无关)
|
|
24
|
-
|
|
25
|
-
## 实施决策
|
|
26
|
-
|
|
27
|
-
- **L6**:采用「模块加载时一次性读取 env + `getLogLevelFromEnv()` 辅助函数」混合方案。
|
|
28
|
-
- 顶层 `let currentLevel: LogLevel = getLogLevelFromEnv();` 在模块首次 import 时执行一次。
|
|
29
|
-
- 由于 logger 模块当前无单元测试(`find src/tests tests/unit -name "logger.test.ts"` 为空),顶层副作用不会破坏测试 mock。
|
|
30
|
-
- 保留 `setLogLevel()` 导出函数以便测试或运行时覆写(向后兼容)。
|
|
31
|
-
- daemon/index.ts 不再需要重复 env 解析;其它入口(CLI、web)若 import logger 自动享受同样行为,无需改动。
|
|
32
|
-
- **L8**:纯文档/注释级补充,零 SQL 行为变更。
|
|
33
|
-
- 沿用 routing_events / skill_invocations 已有的 "logical ref,no FK due to write-order race" 表述。
|
|
34
|
-
- 同时更新文件头的表关系图,保持单一信息源。
|
|
35
|
-
|
|
36
|
-
## 已知问题
|
|
37
|
-
|
|
38
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts:166` — `writeEvent Invalid uuid` 断言失败(pre-existing,与 `linkEventToTask` 重构 harness 同一组),本次未修复,按指令不扩大范围。
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# M1 + M4 + M5 + L7 清理 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 13:10
|
|
4
|
-
**Status**: 完成
|
|
5
|
-
|
|
6
|
-
## 完成清单
|
|
7
|
-
- [x] M4: events.ts 删 UpsertCapableEmitter 重复声明
|
|
8
|
-
- [x] L7: types.ts 删 ForgeEvent.pipeline_id 死字段(顺带删除 BaseEvent.pipeline_id)
|
|
9
|
-
- [x] M1: truncateField 抽到 web/routes/_helpers.ts
|
|
10
|
-
- [x] M5: user-prompt.ts 改用 LRUCache(保持两个独立实例)
|
|
11
|
-
|
|
12
|
-
## 关键代码定位
|
|
13
|
-
|
|
14
|
-
### M4 — UpsertCapableEmitter 去重
|
|
15
|
-
- `src/core/storage/events.ts:19-22`(旧 L19-21 + 空行)— 删除
|
|
16
|
-
- `src/core/storage/events.ts:57-59` — 保留(更靠近使用点 L64 constructor)
|
|
17
|
-
|
|
18
|
-
### L7 — pipeline_id 死代码清理
|
|
19
|
-
- `src/core/types.ts:34` — 删除 `ForgeEvent.pipeline_id?`
|
|
20
|
-
- `src/core/types.ts:43` — 删除 `BaseEvent.pipeline_id?`
|
|
21
|
-
- 全量 grep 验证:`pipeline_id` 仅在 types.ts 中出现,无任何运行时引用,无 schema 字段、无注释、无解析逻辑。直接清理。
|
|
22
|
-
|
|
23
|
-
### M1 — truncateField 抽取
|
|
24
|
-
- 新建 `src/web/routes/_helpers.ts` — 导出 `truncateField(obj, maxLen=300, arrayLimit=10)`
|
|
25
|
-
- 增加 `arrayLimit` 参数以兼容两个调用点的不同行为(tasks: 10, sessions: 5)
|
|
26
|
-
- 类型从 `any` 升为 `unknown` + `Record<string, unknown>`
|
|
27
|
-
- `src/web/routes/tasks.ts:1-4` — 新 import `truncateField from './_helpers.js'`
|
|
28
|
-
- `src/web/routes/tasks.ts` — 移除本地 `truncateField` 闭包定义(原 L87-99),调用点保持不变(默认参数 300/10 与原一致)
|
|
29
|
-
- `src/web/routes/sessions.ts:1-3` — 新 import
|
|
30
|
-
- `src/web/routes/sessions.ts` — 移除本地 `truncateField`(原 L189-201),两个调用点显式传 `(toolInput, 200, 5)` / `(toolOutput, 200, 5)` 以保留原有行为
|
|
31
|
-
|
|
32
|
-
### M5 — LRUCache 替换手写 LRU
|
|
33
|
-
- `src/core/utils/lru-cache.ts:39-45` — 新增 `delete(key)` 方法(必须,否则 clearSession 无法实现)
|
|
34
|
-
- `src/daemon/handlers/user-prompt.ts:10` — 新 import `LRUCache`
|
|
35
|
-
- `src/daemon/handlers/user-prompt.ts:19-25` — 字段替换:
|
|
36
|
-
- `resumeInjected: Map<string, number>` → `LRUCache<string, number>(1000)`
|
|
37
|
-
- `conventionInjected: Map<string, number>` → `LRUCache<string, number>(1000)`
|
|
38
|
-
- `src/daemon/handlers/user-prompt.ts:markInjected` — 从 17 行手写 LRU 缩减为单行 `cache.set(key, Date.now())`
|
|
39
|
-
- `src/daemon/handlers/user-prompt.ts:hasInjected` / `clearSession` — 签名从 `Map` 改为 `LRUCache`,行为一致
|
|
40
|
-
|
|
41
|
-
### M5 设计决策:不合并键集合
|
|
42
|
-
两个 Map 虽然 key 类型相同(`sessionKey`),但语义独立:
|
|
43
|
-
- `resumeInjected` 控制 resume context 注入;同时还会触发 `resume.clear()`
|
|
44
|
-
- `conventionInjected` 控制 project guidance 注入
|
|
45
|
-
|
|
46
|
-
如果合并成单一键集合,会丧失"同一 session 各自独立标记是否注入过"的语义。保留两个独立 LRUCache 实例最安全,不扩大改动范围。
|
|
47
|
-
|
|
48
|
-
## 测试结果
|
|
49
|
-
- `npx tsc --noEmit`: **0 errors**
|
|
50
|
-
- `npm test`: **423 passed / 1 failed**
|
|
51
|
-
- 失败项:`tests/unit/storage/sqlite-refactor-harness.test.ts > linkEventToTask associates events with tasks`
|
|
52
|
-
- 失败原因:pre-existing UUID 校验问题,与本次清理无关
|
|
53
|
-
|
|
54
|
-
## 跳过项
|
|
55
|
-
无
|
|
56
|
-
|
|
57
|
-
## 已知问题
|
|
58
|
-
- pre-existing `linkEventToTask` test failure(与本次清理无关)
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# M10 实施 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 13:20
|
|
4
|
-
**Spec**: docs/design/m10-forge-paths-spec-20260518-1320.md
|
|
5
|
-
**Status**: 完成
|
|
6
|
-
|
|
7
|
-
## 完成清单
|
|
8
|
-
- [x] safety-net: tests/unit/core/forge-paths.test.ts(16 个断言)
|
|
9
|
-
- [x] FORGE_PATHS 扩展 11 方法(daemonSocket/Pid/Token/Log/Stdout/Stderr, hooks, queue, queueDead, routingYaml, backups(kind))
|
|
10
|
-
- [x] Group A: daemon 运行时(lifecycle / cli/daemon / cli/status / cli/mcp / web/auth-middleware)
|
|
11
|
-
- [x] Group B: queue(core/queue/index.ts)
|
|
12
|
-
- [x] Group C: hooks(cli/init/hook-manager.ts)
|
|
13
|
-
- [x] Group D: web patch(web/routes/types.ts + web/routes/skills.ts × 4 处)
|
|
14
|
-
- [x] Group E: cli/stats.ts + error-handler.ts 文案 `forge.sock` → `daemon.sock`
|
|
15
|
-
|
|
16
|
-
## 关键代码定位
|
|
17
|
-
|
|
18
|
-
**FORGE_PATHS 扩展**:
|
|
19
|
-
- `src/core/constants.ts:9-31` — 新增 11 个方法
|
|
20
|
-
- `tests/unit/core/forge-paths.test.ts` — 新增测试文件,16 个用例
|
|
21
|
-
|
|
22
|
-
**Group A(daemon 运行时)**:
|
|
23
|
-
- `src/daemon/lifecycle.ts:8-10` — TOKEN_FILE/PID_FILE 改用 FORGE_PATHS;`getSocketPath` (L51) 复用 daemonSocket
|
|
24
|
-
- `src/cli/commands/daemon.ts:34,44-47,114` — PID_FILE/STDOUT_LOG/STDERR_LOG/logFile,并移除未用的 FORGE_HOME import
|
|
25
|
-
- `src/cli/commands/status.ts:5-8` — PID_FILE 改 FORGE_PATHS.daemonPid();移除 FORGE_HOME import
|
|
26
|
-
- `src/cli/commands/mcp.ts:17-22,45,86` — tokenPath / daemon.pid 路径;移除 homedir/join import
|
|
27
|
-
- `src/web/auth-middleware.ts:13-17` — TOKEN_FILE 改 FORGE_PATHS.daemonToken();移除 path import
|
|
28
|
-
|
|
29
|
-
**Group B(queue)**:
|
|
30
|
-
- `src/core/queue/index.ts:16-27` — QUEUE_DIR/DEAD_DIR 改 FORGE_PATHS;移除 homedir import 与未用的 FORGE_DIR 常量
|
|
31
|
-
|
|
32
|
-
**Group C(hooks)**:
|
|
33
|
-
- `src/cli/init/hook-manager.ts:4,8` — HOOKS_DIR 改 FORGE_PATHS.hooks()
|
|
34
|
-
|
|
35
|
-
**Group D(web patch)**:
|
|
36
|
-
- `src/web/routes/types.ts:11,30-39` — resolvePatchTarget 中 4 处路径全部改 FORGE_PATHS
|
|
37
|
-
- `src/web/routes/skills.ts:7,208,235,279,321` — backupDir × 4 处统一 → FORGE_PATHS.backups('skills')
|
|
38
|
-
|
|
39
|
-
**Group E(其它)**:
|
|
40
|
-
- `src/cli/commands/stats.ts:10-21` — dbPath 改 FORGE_PATHS.database();移除 path/homedir import
|
|
41
|
-
- `src/core/utils/error-handler.ts:239` — 提示文本 `forge.sock` → `daemon.sock`
|
|
42
|
-
|
|
43
|
-
## 测试结果
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
forge-paths.test.ts: 16/16 passed
|
|
47
|
-
tests/unit/core/ + storage/ + queue: 85/86 passed(1 pre-existing linkEventToTask)
|
|
48
|
-
npm test 全量: 439/440 passed(1 pre-existing linkEventToTask)
|
|
49
|
-
npx tsc --noEmit: 0 errors
|
|
50
|
-
npm run build: 成功
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 超出 spec 改动
|
|
54
|
-
|
|
55
|
-
无。严格按 spec 12 文件机械替换。附带顺手清理(与 spec 风险一致):
|
|
56
|
-
- 删除替换后未引用的 import(`homedir`、`path`、`FORGE_HOME`、`FORGE_DIR` 常量)以保持文件干净,不引入新逻辑。
|
|
57
|
-
|
|
58
|
-
## 已知问题
|
|
59
|
-
|
|
60
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts` > `linkEventToTask associates events with tasks` 失败 — pre-existing UUID 校验问题,与 M10 改动无关(spec 已明示)。
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# M2 + M3 实施 Changelog
|
|
2
|
-
|
|
3
|
-
**Date**: 2026-05-18 14:25
|
|
4
|
-
**Spec**: docs/design/m2-m3-tool-input-spec-20260518-1425.md
|
|
5
|
-
**Status**: 完成
|
|
6
|
-
|
|
7
|
-
## 完成清单
|
|
8
|
-
- [x] M3: `event-parser.ts` 改为 `event_id: validated.event_id ?? randomUUID()`,schema 加 `event_id: z.string().uuid().optional()`
|
|
9
|
-
- [x] M2: `ToolInputFields` 接口 + 4 个 getter(`getCommand` / `getFilePath` / `getUserPrompt` / `getSubagentType`)
|
|
10
|
-
- [x] 替换所有 `(tool_input as any)` / `(tool_input as Record<string,unknown>)` 使用点(10 处源文件)
|
|
11
|
-
- [x] 新增 `tests/unit/event-fields.test.ts`(15 cases)
|
|
12
|
-
- [x] 新增 `tests/unit/event-parser.test.ts`(5 cases)
|
|
13
|
-
|
|
14
|
-
## 关键代码定位
|
|
15
|
-
- `src/core/types.ts:25-61` — `ToolInputFields` 接口 + `ForgeEvent.tool_input: ToolInputFields | undefined`
|
|
16
|
-
- `src/core/event-fields.ts:1-32` — 4 个 getter
|
|
17
|
-
- `src/daemon/event-parser.ts:16,23,29` — M3 schema + event_id 透传 + `as ToolInputFields` cast
|
|
18
|
-
- `src/web/routes/sessions.ts:4,82-100,158-167,222-234` — sessions 路由 getter 化(8 处)
|
|
19
|
-
- `src/web/routes/tasks.ts:5,111-131,156-172` — tasks 路由 getter 化(5 处)
|
|
20
|
-
- `src/web/analytics/anti-pattern-detector.ts:95,354-364` — helpers 签名调整为 `ForgeEvent['tool_input']`,line 95 显式 cast
|
|
21
|
-
- `src/daemon/handlers/post-tool-use.ts:5,29` — `getSubagentType(event)`
|
|
22
|
-
- `src/daemon/handlers/history-exporter.ts:102` — 去掉 `as Record<string, unknown>` cast
|
|
23
|
-
- `src/cli/commands/logs.ts:43` — 去掉 `as Record<string, unknown>` cast
|
|
24
|
-
- `src/claudemd/resume-manager.ts:118` — 去掉 `as string` cast,改 `typeof === 'string'` 守卫
|
|
25
|
-
- `src/daemon/index.ts:39-40,161` — import + 改用 `getUserPrompt(event)`
|
|
26
|
-
|
|
27
|
-
## 测试结果
|
|
28
|
-
- `tests/unit/event-fields.test.ts`: 15 / 15 passed
|
|
29
|
-
- `tests/unit/event-parser.test.ts`: 5 / 5 passed
|
|
30
|
-
- `npx tsc --noEmit`: 0 errors
|
|
31
|
-
- `npm test --reporter=dot`: **480 / 481 passed**(唯一失败为 pre-existing `linkEventToTask`,spec 第 5 项明确豁免)
|
|
32
|
-
|
|
33
|
-
## 顺手发现的额外 as any(如有)
|
|
34
|
-
无新增。`src/web/routes/sessions.ts:188-190` 的 `tool_input as any` 同步消除;`tool_output as any` 保留 1 处(`?.error` 防御访问,超出本 spec 范围)。
|
|
35
|
-
|
|
36
|
-
## 已知问题
|
|
37
|
-
- `tests/unit/storage/sqlite-refactor-harness.test.ts > linkEventToTask` 失败:pre-existing,spec 已豁免;根因是测试构造的 event_id 不是 UUID,与本次 M3 schema 收紧无关(写入端 `writeEvent` 早已校验 UUID)。
|
|
38
|
-
- `tests/unit/web/routes-tasks.test.ts` 在全量并行跑时偶发首例 404(B 路径下 `getStorage()` 状态同步问题),单独跑 21/21 全过;非本次回归。
|
|
39
|
-
|
|
40
|
-
## 设计要点
|
|
41
|
-
- `ToolInputFields` 加 `[key: string]: unknown` 索引签名:兼顾 forward-compat 与窄化收益(spec 风险 1 已确认接受)。
|
|
42
|
-
- M3 让 hook 端可选自带 `event_id`:未带时 parser 兜底 `randomUUID()`,与 queue / storage 层 `event.event_id ?? randomUUID()` 形成端到端去重链路(hook 端真正生成 event_id 是后续 follow-up)。
|
|
43
|
-
- `anti-pattern-detector.ts` 走保守路径:保留 `extractFilePath` / `extractBashCommand` 私有签名,只调整参数类型为 `ForgeEvent['tool_input']`,调用方零改动。
|
|
@@ -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,与本次改动无关
|