@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.
Files changed (409) hide show
  1. package/DEVELOPMENT.md +290 -221
  2. package/README.md +50 -8
  3. package/dist/cli/commands/skills.d.ts.map +1 -1
  4. package/dist/cli/commands/skills.js +121 -2
  5. package/dist/cli/commands/skills.js.map +1 -1
  6. package/dist/cli/init/hook-manager.d.ts +1 -1
  7. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  8. package/dist/cli/init/hook-manager.js +1 -0
  9. package/dist/cli/init/hook-manager.js.map +1 -1
  10. package/dist/core/constants.d.ts +2 -0
  11. package/dist/core/constants.d.ts.map +1 -1
  12. package/dist/core/constants.js +4 -0
  13. package/dist/core/constants.js.map +1 -1
  14. package/dist/core/storage/events.d.ts.map +1 -1
  15. package/dist/core/storage/events.js +0 -1
  16. package/dist/core/storage/events.js.map +1 -1
  17. package/dist/core/storage/maintenance.d.ts +25 -3
  18. package/dist/core/storage/maintenance.d.ts.map +1 -1
  19. package/dist/core/storage/maintenance.js +33 -4
  20. package/dist/core/storage/maintenance.js.map +1 -1
  21. package/dist/core/storage/routing.d.ts +4 -0
  22. package/dist/core/storage/routing.d.ts.map +1 -1
  23. package/dist/core/storage/routing.js +10 -4
  24. package/dist/core/storage/routing.js.map +1 -1
  25. package/dist/core/storage/sessions.d.ts +17 -0
  26. package/dist/core/storage/sessions.d.ts.map +1 -1
  27. package/dist/core/storage/sessions.js +64 -0
  28. package/dist/core/storage/sessions.js.map +1 -1
  29. package/dist/core/storage/skills.d.ts +4 -0
  30. package/dist/core/storage/skills.d.ts.map +1 -1
  31. package/dist/core/storage/skills.js +10 -2
  32. package/dist/core/storage/skills.js.map +1 -1
  33. package/dist/core/storage/sqlite.d.ts +5 -0
  34. package/dist/core/storage/sqlite.d.ts.map +1 -1
  35. package/dist/core/storage/sqlite.js +6 -0
  36. package/dist/core/storage/sqlite.js.map +1 -1
  37. package/dist/core/storage/tasks.d.ts.map +1 -1
  38. package/dist/core/storage/tasks.js +2 -0
  39. package/dist/core/storage/tasks.js.map +1 -1
  40. package/dist/core/types.d.ts +7 -0
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/daemon/index.d.ts.map +1 -1
  43. package/dist/daemon/index.js +30 -5
  44. package/dist/daemon/index.js.map +1 -1
  45. package/dist/daemon/skill-sync.d.ts +21 -0
  46. package/dist/daemon/skill-sync.d.ts.map +1 -0
  47. package/dist/daemon/skill-sync.js +75 -0
  48. package/dist/daemon/skill-sync.js.map +1 -0
  49. package/dist/hooks/notification.sh +1 -1
  50. package/dist/hooks/post-tool-use.sh +1 -1
  51. package/dist/hooks/pre-tool-use.sh +1 -1
  52. package/dist/hooks/stop.sh +1 -1
  53. package/dist/hooks/user-prompt-submit.sh +1 -1
  54. package/dist/skills/official/code-simplifier.md +37 -1
  55. package/dist/skills/official/find-skills.md +120 -1
  56. package/dist/skills/official/official-api-design.md +14 -1
  57. package/dist/skills/official/official-architecture-decision.md +22 -1
  58. package/dist/skills/official/official-db-schema-design.md +19 -1
  59. package/dist/skills/official/official-debug.md +9 -1
  60. package/dist/skills/official/official-pr-review.md +1 -1
  61. package/dist/skills/official/official-security-hardening.md +7 -1
  62. package/dist/skills/official/planning-with-files.md +206 -2
  63. package/dist/skills/official/ui-ux-pro-max.md +88 -1
  64. package/dist/skills/official/webapp-testing.md +85 -1
  65. package/dist/skills/registry.d.ts +1 -1
  66. package/dist/skills/registry.d.ts.map +1 -1
  67. package/dist/skills/registry.js +15 -4
  68. package/dist/skills/registry.js.map +1 -1
  69. package/dist/skills/semantic-matcher.d.ts +4 -3
  70. package/dist/skills/semantic-matcher.d.ts.map +1 -1
  71. package/dist/skills/semantic-matcher.js +20 -22
  72. package/dist/skills/semantic-matcher.js.map +1 -1
  73. package/dist/skills/upgrade-engine.d.ts +93 -0
  74. package/dist/skills/upgrade-engine.d.ts.map +1 -0
  75. package/dist/skills/upgrade-engine.js +447 -0
  76. package/dist/skills/upgrade-engine.js.map +1 -0
  77. package/dist/skills/upgrade-prompt.d.ts +20 -0
  78. package/dist/skills/upgrade-prompt.d.ts.map +1 -0
  79. package/dist/skills/upgrade-prompt.js +75 -0
  80. package/dist/skills/upgrade-prompt.js.map +1 -0
  81. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  82. package/dist/web/analytics/weekly-report.js +21 -29
  83. package/dist/web/analytics/weekly-report.js.map +1 -1
  84. package/dist/web/routes/patch.d.ts.map +1 -1
  85. package/dist/web/routes/patch.js +32 -2
  86. package/dist/web/routes/patch.js.map +1 -1
  87. package/dist/web/routes/sessions.d.ts.map +1 -1
  88. package/dist/web/routes/sessions.js +9 -7
  89. package/dist/web/routes/sessions.js.map +1 -1
  90. package/dist/web/routes/trace.d.ts.map +1 -1
  91. package/dist/web/routes/trace.js +2 -3
  92. package/dist/web/routes/trace.js.map +1 -1
  93. package/dist/web/server.d.ts.map +1 -1
  94. package/dist/web/server.js +3 -2
  95. package/dist/web/server.js.map +1 -1
  96. package/package.json +12 -2
  97. package/scripts/postinstall.cjs +21 -0
  98. package/.claude/CLAUDE.md +0 -17
  99. package/.eslintrc.js +0 -23
  100. package/.prettierrc +0 -8
  101. package/ARCHITECTURE_ISSUES.md +0 -249
  102. package/CLAUDE.md +0 -265
  103. package/CLAUDE.md.backup +0 -488
  104. package/docs/concurrent-agents.md +0 -129
  105. package/docs/design/architecture-review-20260516.md +0 -232
  106. package/docs/design/fix-skills-data-and-set-leak-spec-20260516-1300.md +0 -219
  107. package/docs/design/h1-storage-aggregation-spec-20260518-1121.md +0 -299
  108. package/docs/design/h2-getdatabase-encapsulation-spec-20260518-1450.md +0 -191
  109. package/docs/design/h3-fallback-removal-spec-20260518-1245.md +0 -76
  110. package/docs/design/h4-index-dedup-spec-20260518-1230.md +0 -109
  111. package/docs/design/h6-services-migration-spec-20260518-1355.md +0 -82
  112. package/docs/design/hook-failure-queue-spec-20260516-1530.md +0 -204
  113. package/docs/design/l1-swarm-protocol-extract-spec-20260518-1605.md +0 -106
  114. package/docs/design/m10-forge-paths-spec-20260518-1320.md +0 -121
  115. package/docs/design/m2-m3-tool-input-spec-20260518-1425.md +0 -131
  116. package/docs/design/m7-routing-event-association-spec-20260518-1545.md +0 -103
  117. package/docs/design/project-path-gitroot-spec-20260518-1715.md +0 -134
  118. package/docs/design/refactor-phase1-spec-20260515-1600.md +0 -543
  119. package/docs/design/refactor-phase2-spec-20260515-1700.md +0 -424
  120. package/docs/design/task-active-gc-spec-20260518-1745.md +0 -146
  121. package/docs/design/tasks-list-filter-pagination-spec-20260518-0930.md +0 -208
  122. package/docs/implementation/fix-skills-data-and-set-leak-changelog-20260516-1300.md +0 -104
  123. package/docs/implementation/h1-storage-aggregation-changelog-20260518-1121.md +0 -82
  124. package/docs/implementation/h2-final-changelog-20260518-1530.md +0 -61
  125. package/docs/implementation/h2-phase1-safety-net-changelog-20260518-1450.md +0 -70
  126. package/docs/implementation/h2-phase2-operations-changelog-20260518-1450.md +0 -120
  127. package/docs/implementation/h2-phase3-callsites-changelog-20260518-1450.md +0 -71
  128. package/docs/implementation/h3-fallback-removal-changelog-20260518-1245.md +0 -71
  129. package/docs/implementation/h4-index-dedup-changelog-20260518-1230.md +0 -60
  130. package/docs/implementation/h6-services-migration-changelog-20260518-1355.md +0 -46
  131. package/docs/implementation/h7-m9-defaults-changelog-20260518-1300.md +0 -46
  132. package/docs/implementation/hook-failure-queue-changelog-20260516-1530.md +0 -196
  133. package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +0 -56
  134. package/docs/implementation/l1-swarm-protocol-extract-changelog-20260518-1605.md +0 -45
  135. package/docs/implementation/l3-l4-daemon-perf-changelog-20260518-1410.md +0 -63
  136. package/docs/implementation/l6-l8-final-cleanup-changelog-20260518-1640.md +0 -38
  137. package/docs/implementation/m1-m4-m5-l7-cleanup-changelog-20260518-1310.md +0 -58
  138. package/docs/implementation/m10-forge-paths-changelog-20260518-1320.md +0 -60
  139. package/docs/implementation/m2-m3-tool-input-changelog-20260518-1425.md +0 -43
  140. package/docs/implementation/m6-m8-naming-shutdown-changelog-20260518-1340.md +0 -56
  141. package/docs/implementation/m7-routing-association-changelog-20260518-1545.md +0 -69
  142. package/docs/implementation/project-path-gitroot-changelog-20260518-1715.md +0 -63
  143. package/docs/implementation/refactor-phase1-changelog-20260515-1630.md +0 -354
  144. package/docs/implementation/refactor-phase2-changelog-20260515-1705.md +0 -421
  145. package/docs/implementation/task-active-gc-changelog-20260518-1745.md +0 -35
  146. package/docs/implementation/task-title-summary-changelog-20260518-1130.md +0 -39
  147. package/docs/implementation/tasks-detail-back-loses-filters-changelog-20260518-1100.md +0 -22
  148. package/docs/implementation/tasks-list-filter-pagination-changelog-20260518-0930.md +0 -72
  149. package/docs/implementation/tasks-page-white-screen-hotfix-changelog-20260518-1015.md +0 -56
  150. package/docs/reviews/claudemd-template-sync.md +0 -54
  151. package/docs/reviews/task-title-summary.md +0 -92
  152. package/docs/reviews/tasks-detail-back-loses-filters.md +0 -58
  153. package/docs/reviews/tasks-filter-pagination.md +0 -80
  154. package/docs/reviews/tasks-page-white-screen-hotfix.md +0 -126
  155. package/docs/ruflo-learning-strategy.md +0 -322
  156. package/docs/skills-deduplication-analysis.md +0 -83
  157. package/docs/skills-multiformat-support.md +0 -177
  158. package/docs/skills-third-party.md +0 -183
  159. package/docs/testing/tasks-filter-pagination-test-report.md +0 -86
  160. package/forge +0 -321
  161. package/playwright.config.ts +0 -40
  162. package/scripts/demo-v2.ts +0 -91
  163. package/scripts/dev-daemon.sh +0 -232
  164. package/scripts/dev-web.ts +0 -109
  165. package/scripts/e2e-mcp-link.ts +0 -423
  166. package/scripts/e2e-methodology-quality.ts +0 -253
  167. package/scripts/e2e-routing.ts +0 -456
  168. package/scripts/e2e-user-methodology.ts +0 -326
  169. package/scripts/e2e-web-workflows.ts +0 -299
  170. package/scripts/migrate-legacy-to-dynamic.sql +0 -108
  171. package/scripts/regenerate-execution-docs.ts +0 -116
  172. package/scripts/sync-agent-skills.ts +0 -193
  173. package/scripts/test-hook.sh +0 -71
  174. package/scripts/verify-skill-loading.ts +0 -62
  175. package/src/claudemd/claudemd-generator.ts +0 -568
  176. package/src/claudemd/convention-extractor.ts +0 -69
  177. package/src/claudemd/index.ts +0 -35
  178. package/src/claudemd/persona-manager.ts +0 -88
  179. package/src/claudemd/resume-manager.ts +0 -236
  180. package/src/claudemd/tech-detector.ts +0 -220
  181. package/src/claudemd/templates/swarm-protocol.md +0 -222
  182. package/src/cli/commands/claudemd.ts +0 -84
  183. package/src/cli/commands/config.ts +0 -46
  184. package/src/cli/commands/daemon.ts +0 -310
  185. package/src/cli/commands/executions.ts +0 -115
  186. package/src/cli/commands/init.ts +0 -204
  187. package/src/cli/commands/logs.ts +0 -181
  188. package/src/cli/commands/mcp.ts +0 -242
  189. package/src/cli/commands/menu.ts +0 -357
  190. package/src/cli/commands/skills.ts +0 -185
  191. package/src/cli/commands/stats.ts +0 -73
  192. package/src/cli/commands/status.ts +0 -69
  193. package/src/cli/commands/template.ts +0 -77
  194. package/src/cli/commands/trace.ts +0 -148
  195. package/src/cli/index.ts +0 -42
  196. package/src/cli/init/hook-manager.ts +0 -132
  197. package/src/core/ai/provider.ts +0 -308
  198. package/src/core/ai/types.ts +0 -51
  199. package/src/core/config.ts +0 -124
  200. package/src/core/constants.ts +0 -62
  201. package/src/core/event-fields.ts +0 -32
  202. package/src/core/queue/index.ts +0 -192
  203. package/src/core/storage/base.ts +0 -302
  204. package/src/core/storage/events.ts +0 -434
  205. package/src/core/storage/injections.ts +0 -78
  206. package/src/core/storage/maintenance.ts +0 -59
  207. package/src/core/storage/migrations/002_add_skill_tracking.sql +0 -6
  208. package/src/core/storage/migrations/003_add_skill_invocations.sql +0 -23
  209. package/src/core/storage/performance-indexes.sql +0 -23
  210. package/src/core/storage/routing.ts +0 -322
  211. package/src/core/storage/rows.ts +0 -112
  212. package/src/core/storage/schema.sql +0 -224
  213. package/src/core/storage/sessions.ts +0 -168
  214. package/src/core/storage/skills.ts +0 -233
  215. package/src/core/storage/sqlite.ts +0 -293
  216. package/src/core/storage/tasks.ts +0 -318
  217. package/src/core/storage/token-usage.ts +0 -93
  218. package/src/core/types.ts +0 -181
  219. package/src/core/utils/error-handler.ts +0 -257
  220. package/src/core/utils/forge-resume-block.ts +0 -74
  221. package/src/core/utils/format.ts +0 -69
  222. package/src/core/utils/git.ts +0 -23
  223. package/src/core/utils/logger.ts +0 -134
  224. package/src/core/utils/lru-cache.ts +0 -54
  225. package/src/core/utils/path.ts +0 -19
  226. package/src/core/utils/session.ts +0 -26
  227. package/src/core/utils/time.ts +0 -37
  228. package/src/core/utils/token-tracker.ts +0 -97
  229. package/src/daemon/event-parser.ts +0 -36
  230. package/src/daemon/handlers/history-exporter.ts +0 -117
  231. package/src/daemon/handlers/post-tool-use.ts +0 -54
  232. package/src/daemon/handlers/stop.ts +0 -208
  233. package/src/daemon/handlers/user-prompt.ts +0 -178
  234. package/src/daemon/hook-sync.ts +0 -91
  235. package/src/daemon/index.ts +0 -302
  236. package/src/daemon/launchd/com.claude-forge.daemon.plist.template +0 -47
  237. package/src/daemon/launchd-installer.ts +0 -260
  238. package/src/daemon/lifecycle.ts +0 -128
  239. package/src/daemon/router.ts +0 -40
  240. package/src/daemon/server.ts +0 -196
  241. package/src/daemon/services/task-segmenter.ts +0 -112
  242. package/src/hooks/hook-lib.sh +0 -118
  243. package/src/hooks/notification.sh +0 -35
  244. package/src/hooks/post-tool-use.sh +0 -61
  245. package/src/hooks/pre-tool-use.sh +0 -63
  246. package/src/hooks/stop.sh +0 -43
  247. package/src/hooks/user-prompt-submit.sh +0 -69
  248. package/src/mcp/server.ts +0 -322
  249. package/src/skills/index.ts +0 -2
  250. package/src/skills/invocation-guard.ts +0 -177
  251. package/src/skills/matcher.ts +0 -148
  252. package/src/skills/official/code-simplifier.md +0 -16
  253. package/src/skills/official/find-skills.md +0 -23
  254. package/src/skills/official/official-api-design.md +0 -17
  255. package/src/skills/official/official-architecture-decision.md +0 -20
  256. package/src/skills/official/official-bmad.md +0 -118
  257. package/src/skills/official/official-db-schema-design.md +0 -16
  258. package/src/skills/official/official-debug.md +0 -17
  259. package/src/skills/official/official-doc-driven.md +0 -31
  260. package/src/skills/official/official-harness-engineering.md +0 -108
  261. package/src/skills/official/official-performance-optimization.md +0 -30
  262. package/src/skills/official/official-pr-review.md +0 -35
  263. package/src/skills/official/official-release-checklist.md +0 -30
  264. package/src/skills/official/official-security-hardening.md +0 -26
  265. package/src/skills/official/official-spec-driven-design.md +0 -31
  266. package/src/skills/official/planning-with-files.md +0 -37
  267. package/src/skills/official/ui-ux-pro-max.md +0 -18
  268. package/src/skills/official/webapp-testing.md +0 -12
  269. package/src/skills/official-skills.ts +0 -89
  270. package/src/skills/registry.ts +0 -355
  271. package/src/skills/semantic-matcher.ts +0 -231
  272. package/src/skills/tools/pipeline-suggest.ts +0 -226
  273. package/src/skills/tools/skill-invoke.ts +0 -168
  274. package/src/skills/tools/skill-list.ts +0 -59
  275. package/src/templates/go.yaml +0 -53
  276. package/src/templates/python.yaml +0 -59
  277. package/src/templates/react.yaml +0 -55
  278. package/src/templates/template-manager.ts +0 -170
  279. package/src/web/analytics/anti-pattern-detector.ts +0 -367
  280. package/src/web/analytics/drift-detector.ts +0 -219
  281. package/src/web/analytics/weekly-report.ts +0 -431
  282. package/src/web/auth-middleware.ts +0 -54
  283. package/src/web/routes/_helpers.ts +0 -34
  284. package/src/web/routes/ai.ts +0 -204
  285. package/src/web/routes/auth.ts +0 -22
  286. package/src/web/routes/drift.ts +0 -25
  287. package/src/web/routes/error-handler.ts +0 -120
  288. package/src/web/routes/events.ts +0 -47
  289. package/src/web/routes/insights.ts +0 -43
  290. package/src/web/routes/patch.ts +0 -117
  291. package/src/web/routes/reports.ts +0 -34
  292. package/src/web/routes/rules.ts +0 -76
  293. package/src/web/routes/sessions.ts +0 -250
  294. package/src/web/routes/skill-stats.ts +0 -92
  295. package/src/web/routes/skills.ts +0 -350
  296. package/src/web/routes/static.ts +0 -67
  297. package/src/web/routes/stats.ts +0 -50
  298. package/src/web/routes/status.ts +0 -30
  299. package/src/web/routes/tasks.ts +0 -193
  300. package/src/web/routes/token-usage.ts +0 -20
  301. package/src/web/routes/trace.ts +0 -126
  302. package/src/web/routes/types.ts +0 -57
  303. package/src/web/server.ts +0 -134
  304. package/src/web/ssrf-guard.ts +0 -112
  305. package/src/web/static/index.html +0 -3251
  306. package/src/web/static/vendor/chart.umd.min.js +0 -20
  307. package/tests/e2e/dashboard.spec.ts +0 -205
  308. package/tests/e2e/routing-skill-e2e.test.ts +0 -39
  309. package/tests/helpers/mock-ai.ts +0 -92
  310. package/tests/helpers/mock-storage.ts +0 -159
  311. package/tests/integration/claudemd-generator.test.ts +0 -90
  312. package/tests/integration/queue-replay.integration.test.ts +0 -193
  313. package/tests/integration/tasks-filter.integration.test.ts +0 -154
  314. package/tests/integration/web-analytics.integration.test.ts +0 -133
  315. package/tests/integration/web-stats.integration.test.ts +0 -135
  316. package/tests/integration/web-trace.integration.test.ts +0 -175
  317. package/tests/performance/database.benchmark.ts +0 -161
  318. package/tests/semantic-matcher.test.ts +0 -99
  319. package/tests/skill-matcher.test.ts +0 -110
  320. package/tests/unit/ai-provider-retry.test.ts +0 -194
  321. package/tests/unit/ai-provider-vision.test.ts +0 -224
  322. package/tests/unit/claudemd-generator.test.ts +0 -68
  323. package/tests/unit/cli-mcp.test.ts +0 -141
  324. package/tests/unit/core/forge-paths.test.ts +0 -99
  325. package/tests/unit/daemon/hook-sync.test.ts +0 -71
  326. package/tests/unit/daemon/post-tool-use.test.ts +0 -121
  327. package/tests/unit/daemon/stop-handler-behavior-summary.test.ts +0 -202
  328. package/tests/unit/daemon/task-segmenter-recover.test.ts +0 -84
  329. package/tests/unit/event-fields.test.ts +0 -88
  330. package/tests/unit/event-parser.test.ts +0 -55
  331. package/tests/unit/handlers.test.ts +0 -171
  332. package/tests/unit/hooks/resolve-project-path.test.ts +0 -122
  333. package/tests/unit/invocation-guard.test.ts +0 -125
  334. package/tests/unit/queue.test.ts +0 -272
  335. package/tests/unit/router.test.ts +0 -138
  336. package/tests/unit/security.test.ts +0 -128
  337. package/tests/unit/skill-invocations-workflow.test.ts +0 -495
  338. package/tests/unit/skill-registry.test.ts +0 -94
  339. package/tests/unit/skills/invocation-guard-ttl.test.ts +0 -211
  340. package/tests/unit/skills/official-skills-loader.test.ts +0 -126
  341. package/tests/unit/skills/registry-multiformat.test.ts +0 -92
  342. package/tests/unit/socket-server.test.ts +0 -183
  343. package/tests/unit/storage/event-operations-aggregates.test.ts +0 -342
  344. package/tests/unit/storage/migration-idempotent.test.ts +0 -304
  345. package/tests/unit/storage/routing-aggregates.test.ts +0 -276
  346. package/tests/unit/storage/routing.test.ts +0 -117
  347. package/tests/unit/storage/schema-missing.test.ts +0 -81
  348. package/tests/unit/storage/session-operations-aggregates.test.ts +0 -120
  349. package/tests/unit/storage/sessions-aggregate.test.ts +0 -435
  350. package/tests/unit/storage/skill-operations-counts.test.ts +0 -106
  351. package/tests/unit/storage/skills-aggregates.test.ts +0 -104
  352. package/tests/unit/storage/sqlite-refactor-harness.test.ts +0 -314
  353. package/tests/unit/storage/task-operations-counts.test.ts +0 -46
  354. package/tests/unit/storage/tasks-getById.test.ts +0 -343
  355. package/tests/unit/storage/tasks-stale-gc.test.ts +0 -86
  356. package/tests/unit/storage.test.ts +0 -172
  357. package/tests/unit/token-usage.test.ts +0 -144
  358. package/tests/unit/type-guards.test.ts +0 -201
  359. package/tests/unit/utils/format.test.ts +0 -189
  360. package/tests/unit/utils/session.test.ts +0 -89
  361. package/tests/unit/utils/time.test.ts +0 -112
  362. package/tests/unit/web/navigation-back-contract.test.ts +0 -134
  363. package/tests/unit/web/routes-auth.test.ts +0 -93
  364. package/tests/unit/web/routes-events.test.ts +0 -101
  365. package/tests/unit/web/routes-rules.test.ts +0 -182
  366. package/tests/unit/web/routes-sessions.test.ts +0 -181
  367. package/tests/unit/web/routes-skill-stats.test.ts +0 -179
  368. package/tests/unit/web/routes-stats.test.ts +0 -92
  369. package/tests/unit/web/routes-tasks.test.ts +0 -385
  370. package/tests/unit/web/task-title-contract.test.ts +0 -210
  371. package/tests/unit/web/tasks-component-contract.test.ts +0 -179
  372. package/tsconfig.json +0 -22
  373. package/vitest.config.ts +0 -21
  374. package/vitest.integration.config.ts +0 -16
  375. package/web/CLAUDE.md +0 -20
  376. package/web/index.html +0 -13
  377. package/web/package-lock.json +0 -4854
  378. package/web/package.json +0 -35
  379. package/web/postcss.config.js +0 -6
  380. package/web/src/App.tsx +0 -110
  381. package/web/src/components/CodeBlock.tsx +0 -31
  382. package/web/src/components/Confirm.tsx +0 -96
  383. package/web/src/components/Drawer.tsx +0 -60
  384. package/web/src/components/Layout.tsx +0 -145
  385. package/web/src/components/MarkdownRenderer.tsx +0 -77
  386. package/web/src/components/SearchInput.tsx +0 -31
  387. package/web/src/components/SessionDetailContent.tsx +0 -157
  388. package/web/src/components/Toast.tsx +0 -92
  389. package/web/src/index.css +0 -19
  390. package/web/src/main.tsx +0 -31
  391. package/web/src/pages/AIConfig.tsx +0 -233
  392. package/web/src/pages/Dashboard.tsx +0 -572
  393. package/web/src/pages/Events.tsx +0 -271
  394. package/web/src/pages/Reports.tsx +0 -428
  395. package/web/src/pages/SessionDetail.tsx +0 -162
  396. package/web/src/pages/Sessions.tsx +0 -205
  397. package/web/src/pages/Skills.tsx +0 -180
  398. package/web/src/pages/TaskDetail.tsx +0 -515
  399. package/web/src/pages/Tasks.tsx +0 -415
  400. package/web/src/utils/auth.ts +0 -59
  401. package/web/src/utils/export.ts +0 -54
  402. package/web/src/utils/navigation.ts +0 -25
  403. package/web/src/utils/task-title.ts +0 -49
  404. package/web/src/utils/time.ts +0 -13
  405. package/web/tailwind.config.js +0 -11
  406. package/web/tsconfig.json +0 -21
  407. package/web/tsconfig.node.json +0 -10
  408. package/web/vite.config.ts +0 -76
  409. 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,与本次改动无关