@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.
Files changed (390) 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 +7 -3
  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/storage/events.d.ts.map +1 -1
  11. package/dist/core/storage/events.js +0 -1
  12. package/dist/core/storage/events.js.map +1 -1
  13. package/dist/core/storage/maintenance.d.ts +25 -3
  14. package/dist/core/storage/maintenance.d.ts.map +1 -1
  15. package/dist/core/storage/maintenance.js +33 -4
  16. package/dist/core/storage/maintenance.js.map +1 -1
  17. package/dist/core/storage/routing.d.ts +4 -0
  18. package/dist/core/storage/routing.d.ts.map +1 -1
  19. package/dist/core/storage/routing.js +10 -4
  20. package/dist/core/storage/routing.js.map +1 -1
  21. package/dist/core/storage/sessions.d.ts +17 -0
  22. package/dist/core/storage/sessions.d.ts.map +1 -1
  23. package/dist/core/storage/sessions.js +64 -0
  24. package/dist/core/storage/sessions.js.map +1 -1
  25. package/dist/core/storage/skills.d.ts +4 -0
  26. package/dist/core/storage/skills.d.ts.map +1 -1
  27. package/dist/core/storage/skills.js +10 -2
  28. package/dist/core/storage/skills.js.map +1 -1
  29. package/dist/core/storage/sqlite.d.ts +5 -0
  30. package/dist/core/storage/sqlite.d.ts.map +1 -1
  31. package/dist/core/storage/sqlite.js +6 -0
  32. package/dist/core/storage/sqlite.js.map +1 -1
  33. package/dist/core/storage/tasks.d.ts.map +1 -1
  34. package/dist/core/storage/tasks.js +2 -0
  35. package/dist/core/storage/tasks.js.map +1 -1
  36. package/dist/core/types.d.ts +7 -0
  37. package/dist/core/types.d.ts.map +1 -1
  38. package/dist/daemon/index.d.ts.map +1 -1
  39. package/dist/daemon/index.js +19 -4
  40. package/dist/daemon/index.js.map +1 -1
  41. package/dist/skills/registry.d.ts.map +1 -1
  42. package/dist/skills/registry.js +13 -2
  43. package/dist/skills/registry.js.map +1 -1
  44. package/dist/skills/semantic-matcher.d.ts +2 -2
  45. package/dist/skills/semantic-matcher.d.ts.map +1 -1
  46. package/dist/skills/semantic-matcher.js +14 -19
  47. package/dist/skills/semantic-matcher.js.map +1 -1
  48. package/dist/skills/upgrade-engine.d.ts +3 -1
  49. package/dist/skills/upgrade-engine.d.ts.map +1 -1
  50. package/dist/skills/upgrade-engine.js +25 -14
  51. package/dist/skills/upgrade-engine.js.map +1 -1
  52. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  53. package/dist/web/analytics/weekly-report.js +21 -29
  54. package/dist/web/analytics/weekly-report.js.map +1 -1
  55. package/dist/web/routes/patch.d.ts.map +1 -1
  56. package/dist/web/routes/patch.js +32 -2
  57. package/dist/web/routes/patch.js.map +1 -1
  58. package/dist/web/routes/sessions.d.ts.map +1 -1
  59. package/dist/web/routes/sessions.js +9 -7
  60. package/dist/web/routes/sessions.js.map +1 -1
  61. package/dist/web/routes/trace.d.ts.map +1 -1
  62. package/dist/web/routes/trace.js +2 -3
  63. package/dist/web/routes/trace.js.map +1 -1
  64. package/dist/web/server.d.ts.map +1 -1
  65. package/dist/web/server.js +3 -2
  66. package/dist/web/server.js.map +1 -1
  67. package/package.json +12 -2
  68. package/scripts/postinstall.cjs +21 -0
  69. package/.claude/CLAUDE.md +0 -17
  70. package/.eslintrc.js +0 -23
  71. package/.prettierrc +0 -8
  72. package/ARCHITECTURE_ISSUES.md +0 -249
  73. package/CLAUDE.md +0 -265
  74. package/CLAUDE.md.backup +0 -488
  75. package/docs/concurrent-agents.md +0 -129
  76. package/docs/design/architecture-review-20260516.md +0 -232
  77. package/docs/design/fix-skills-data-and-set-leak-spec-20260516-1300.md +0 -219
  78. package/docs/design/h1-storage-aggregation-spec-20260518-1121.md +0 -299
  79. package/docs/design/h2-getdatabase-encapsulation-spec-20260518-1450.md +0 -191
  80. package/docs/design/h3-fallback-removal-spec-20260518-1245.md +0 -76
  81. package/docs/design/h4-index-dedup-spec-20260518-1230.md +0 -109
  82. package/docs/design/h6-services-migration-spec-20260518-1355.md +0 -82
  83. package/docs/design/hook-failure-queue-spec-20260516-1530.md +0 -204
  84. package/docs/design/l1-swarm-protocol-extract-spec-20260518-1605.md +0 -106
  85. package/docs/design/m10-forge-paths-spec-20260518-1320.md +0 -121
  86. package/docs/design/m2-m3-tool-input-spec-20260518-1425.md +0 -131
  87. package/docs/design/m7-routing-event-association-spec-20260518-1545.md +0 -103
  88. package/docs/design/project-path-gitroot-spec-20260518-1715.md +0 -134
  89. package/docs/design/refactor-phase1-spec-20260515-1600.md +0 -543
  90. package/docs/design/refactor-phase2-spec-20260515-1700.md +0 -424
  91. package/docs/design/skill-ai-upgrade-spec-20260518-1930.md +0 -297
  92. package/docs/design/task-active-gc-spec-20260518-1745.md +0 -146
  93. package/docs/design/tasks-list-filter-pagination-spec-20260518-0930.md +0 -208
  94. package/docs/implementation/daemon-skill-sync-changelog-20260518-2000.md +0 -22
  95. package/docs/implementation/fix-skills-data-and-set-leak-changelog-20260516-1300.md +0 -104
  96. package/docs/implementation/h1-storage-aggregation-changelog-20260518-1121.md +0 -82
  97. package/docs/implementation/h2-final-changelog-20260518-1530.md +0 -61
  98. package/docs/implementation/h2-phase1-safety-net-changelog-20260518-1450.md +0 -70
  99. package/docs/implementation/h2-phase2-operations-changelog-20260518-1450.md +0 -120
  100. package/docs/implementation/h2-phase3-callsites-changelog-20260518-1450.md +0 -71
  101. package/docs/implementation/h3-fallback-removal-changelog-20260518-1245.md +0 -71
  102. package/docs/implementation/h4-index-dedup-changelog-20260518-1230.md +0 -60
  103. package/docs/implementation/h6-services-migration-changelog-20260518-1355.md +0 -46
  104. package/docs/implementation/h7-m9-defaults-changelog-20260518-1300.md +0 -46
  105. package/docs/implementation/hook-failure-queue-changelog-20260516-1530.md +0 -196
  106. package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +0 -56
  107. package/docs/implementation/l1-swarm-protocol-extract-changelog-20260518-1605.md +0 -45
  108. package/docs/implementation/l3-l4-daemon-perf-changelog-20260518-1410.md +0 -63
  109. package/docs/implementation/l6-l8-final-cleanup-changelog-20260518-1640.md +0 -38
  110. package/docs/implementation/m1-m4-m5-l7-cleanup-changelog-20260518-1310.md +0 -58
  111. package/docs/implementation/m10-forge-paths-changelog-20260518-1320.md +0 -60
  112. package/docs/implementation/m2-m3-tool-input-changelog-20260518-1425.md +0 -43
  113. package/docs/implementation/m6-m8-naming-shutdown-changelog-20260518-1340.md +0 -56
  114. package/docs/implementation/m7-routing-association-changelog-20260518-1545.md +0 -69
  115. package/docs/implementation/project-path-gitroot-changelog-20260518-1715.md +0 -63
  116. package/docs/implementation/refactor-phase1-changelog-20260515-1630.md +0 -354
  117. package/docs/implementation/refactor-phase2-changelog-20260515-1705.md +0 -421
  118. package/docs/implementation/skill-ai-upgrade-changelog-20260518-1930.md +0 -49
  119. package/docs/implementation/task-active-gc-changelog-20260518-1745.md +0 -35
  120. package/docs/implementation/task-title-summary-changelog-20260518-1130.md +0 -39
  121. package/docs/implementation/tasks-detail-back-loses-filters-changelog-20260518-1100.md +0 -22
  122. package/docs/implementation/tasks-list-filter-pagination-changelog-20260518-0930.md +0 -72
  123. package/docs/implementation/tasks-page-white-screen-hotfix-changelog-20260518-1015.md +0 -56
  124. package/docs/reviews/claudemd-template-sync.md +0 -54
  125. package/docs/reviews/task-title-summary.md +0 -92
  126. package/docs/reviews/tasks-detail-back-loses-filters.md +0 -58
  127. package/docs/reviews/tasks-filter-pagination.md +0 -80
  128. package/docs/reviews/tasks-page-white-screen-hotfix.md +0 -126
  129. package/docs/ruflo-learning-strategy.md +0 -322
  130. package/docs/skills-deduplication-analysis.md +0 -83
  131. package/docs/skills-multiformat-support.md +0 -177
  132. package/docs/skills-third-party.md +0 -183
  133. package/docs/testing/tasks-filter-pagination-test-report.md +0 -86
  134. package/forge +0 -321
  135. package/playwright.config.ts +0 -40
  136. package/scripts/demo-v2.ts +0 -91
  137. package/scripts/dev-daemon.sh +0 -232
  138. package/scripts/dev-web.ts +0 -109
  139. package/scripts/e2e-mcp-link.ts +0 -423
  140. package/scripts/e2e-methodology-quality.ts +0 -253
  141. package/scripts/e2e-routing.ts +0 -456
  142. package/scripts/e2e-user-methodology.ts +0 -326
  143. package/scripts/e2e-web-workflows.ts +0 -299
  144. package/scripts/migrate-legacy-to-dynamic.sql +0 -108
  145. package/scripts/regenerate-execution-docs.ts +0 -116
  146. package/scripts/sync-agent-skills.ts +0 -193
  147. package/scripts/test-hook.sh +0 -71
  148. package/scripts/verify-skill-loading.ts +0 -62
  149. package/src/claudemd/claudemd-generator.ts +0 -568
  150. package/src/claudemd/convention-extractor.ts +0 -69
  151. package/src/claudemd/index.ts +0 -35
  152. package/src/claudemd/persona-manager.ts +0 -88
  153. package/src/claudemd/resume-manager.ts +0 -236
  154. package/src/claudemd/tech-detector.ts +0 -220
  155. package/src/claudemd/templates/swarm-protocol.md +0 -222
  156. package/src/cli/commands/claudemd.ts +0 -84
  157. package/src/cli/commands/config.ts +0 -46
  158. package/src/cli/commands/daemon.ts +0 -310
  159. package/src/cli/commands/executions.ts +0 -115
  160. package/src/cli/commands/init.ts +0 -204
  161. package/src/cli/commands/logs.ts +0 -181
  162. package/src/cli/commands/mcp.ts +0 -242
  163. package/src/cli/commands/menu.ts +0 -357
  164. package/src/cli/commands/skills.ts +0 -328
  165. package/src/cli/commands/stats.ts +0 -73
  166. package/src/cli/commands/status.ts +0 -69
  167. package/src/cli/commands/template.ts +0 -77
  168. package/src/cli/commands/trace.ts +0 -148
  169. package/src/cli/index.ts +0 -42
  170. package/src/cli/init/hook-manager.ts +0 -132
  171. package/src/core/ai/provider.ts +0 -308
  172. package/src/core/ai/types.ts +0 -51
  173. package/src/core/config.ts +0 -124
  174. package/src/core/constants.ts +0 -67
  175. package/src/core/event-fields.ts +0 -32
  176. package/src/core/queue/index.ts +0 -192
  177. package/src/core/storage/base.ts +0 -302
  178. package/src/core/storage/events.ts +0 -434
  179. package/src/core/storage/injections.ts +0 -78
  180. package/src/core/storage/maintenance.ts +0 -59
  181. package/src/core/storage/migrations/002_add_skill_tracking.sql +0 -6
  182. package/src/core/storage/migrations/003_add_skill_invocations.sql +0 -23
  183. package/src/core/storage/performance-indexes.sql +0 -23
  184. package/src/core/storage/routing.ts +0 -322
  185. package/src/core/storage/rows.ts +0 -112
  186. package/src/core/storage/schema.sql +0 -224
  187. package/src/core/storage/sessions.ts +0 -168
  188. package/src/core/storage/skills.ts +0 -233
  189. package/src/core/storage/sqlite.ts +0 -293
  190. package/src/core/storage/tasks.ts +0 -318
  191. package/src/core/storage/token-usage.ts +0 -93
  192. package/src/core/types.ts +0 -181
  193. package/src/core/utils/error-handler.ts +0 -257
  194. package/src/core/utils/forge-resume-block.ts +0 -74
  195. package/src/core/utils/format.ts +0 -69
  196. package/src/core/utils/git.ts +0 -23
  197. package/src/core/utils/logger.ts +0 -134
  198. package/src/core/utils/lru-cache.ts +0 -54
  199. package/src/core/utils/path.ts +0 -19
  200. package/src/core/utils/session.ts +0 -26
  201. package/src/core/utils/time.ts +0 -37
  202. package/src/core/utils/token-tracker.ts +0 -97
  203. package/src/daemon/event-parser.ts +0 -36
  204. package/src/daemon/handlers/history-exporter.ts +0 -117
  205. package/src/daemon/handlers/post-tool-use.ts +0 -54
  206. package/src/daemon/handlers/stop.ts +0 -208
  207. package/src/daemon/handlers/user-prompt.ts +0 -178
  208. package/src/daemon/hook-sync.ts +0 -91
  209. package/src/daemon/index.ts +0 -312
  210. package/src/daemon/launchd/com.claude-forge.daemon.plist.template +0 -47
  211. package/src/daemon/launchd-installer.ts +0 -260
  212. package/src/daemon/lifecycle.ts +0 -128
  213. package/src/daemon/router.ts +0 -40
  214. package/src/daemon/server.ts +0 -196
  215. package/src/daemon/services/task-segmenter.ts +0 -112
  216. package/src/daemon/skill-sync.ts +0 -88
  217. package/src/hooks/hook-lib.sh +0 -118
  218. package/src/hooks/notification.sh +0 -35
  219. package/src/hooks/post-tool-use.sh +0 -61
  220. package/src/hooks/pre-tool-use.sh +0 -63
  221. package/src/hooks/stop.sh +0 -43
  222. package/src/hooks/user-prompt-submit.sh +0 -69
  223. package/src/mcp/server.ts +0 -322
  224. package/src/skills/index.ts +0 -2
  225. package/src/skills/invocation-guard.ts +0 -177
  226. package/src/skills/matcher.ts +0 -148
  227. package/src/skills/official/code-simplifier.md +0 -52
  228. package/src/skills/official/find-skills.md +0 -142
  229. package/src/skills/official/official-api-design.md +0 -30
  230. package/src/skills/official/official-architecture-decision.md +0 -41
  231. package/src/skills/official/official-bmad.md +0 -118
  232. package/src/skills/official/official-db-schema-design.md +0 -34
  233. package/src/skills/official/official-debug.md +0 -25
  234. package/src/skills/official/official-doc-driven.md +0 -31
  235. package/src/skills/official/official-harness-engineering.md +0 -108
  236. package/src/skills/official/official-performance-optimization.md +0 -30
  237. package/src/skills/official/official-pr-review.md +0 -35
  238. package/src/skills/official/official-release-checklist.md +0 -30
  239. package/src/skills/official/official-security-hardening.md +0 -32
  240. package/src/skills/official/official-spec-driven-design.md +0 -31
  241. package/src/skills/official/planning-with-files.md +0 -241
  242. package/src/skills/official/ui-ux-pro-max.md +0 -105
  243. package/src/skills/official/webapp-testing.md +0 -96
  244. package/src/skills/official-skills.ts +0 -89
  245. package/src/skills/registry.ts +0 -355
  246. package/src/skills/semantic-matcher.ts +0 -234
  247. package/src/skills/tools/pipeline-suggest.ts +0 -226
  248. package/src/skills/tools/skill-invoke.ts +0 -168
  249. package/src/skills/tools/skill-list.ts +0 -59
  250. package/src/skills/upgrade-engine.ts +0 -541
  251. package/src/skills/upgrade-prompt.ts +0 -84
  252. package/src/templates/go.yaml +0 -53
  253. package/src/templates/python.yaml +0 -59
  254. package/src/templates/react.yaml +0 -55
  255. package/src/templates/template-manager.ts +0 -170
  256. package/src/web/analytics/anti-pattern-detector.ts +0 -367
  257. package/src/web/analytics/drift-detector.ts +0 -219
  258. package/src/web/analytics/weekly-report.ts +0 -431
  259. package/src/web/auth-middleware.ts +0 -54
  260. package/src/web/routes/_helpers.ts +0 -34
  261. package/src/web/routes/ai.ts +0 -204
  262. package/src/web/routes/auth.ts +0 -22
  263. package/src/web/routes/drift.ts +0 -25
  264. package/src/web/routes/error-handler.ts +0 -120
  265. package/src/web/routes/events.ts +0 -47
  266. package/src/web/routes/insights.ts +0 -43
  267. package/src/web/routes/patch.ts +0 -117
  268. package/src/web/routes/reports.ts +0 -34
  269. package/src/web/routes/rules.ts +0 -76
  270. package/src/web/routes/sessions.ts +0 -250
  271. package/src/web/routes/skill-stats.ts +0 -92
  272. package/src/web/routes/skills.ts +0 -350
  273. package/src/web/routes/static.ts +0 -67
  274. package/src/web/routes/stats.ts +0 -50
  275. package/src/web/routes/status.ts +0 -30
  276. package/src/web/routes/tasks.ts +0 -193
  277. package/src/web/routes/token-usage.ts +0 -20
  278. package/src/web/routes/trace.ts +0 -126
  279. package/src/web/routes/types.ts +0 -57
  280. package/src/web/server.ts +0 -134
  281. package/src/web/ssrf-guard.ts +0 -112
  282. package/src/web/static/index.html +0 -3251
  283. package/src/web/static/vendor/chart.umd.min.js +0 -20
  284. package/tests/e2e/dashboard.spec.ts +0 -205
  285. package/tests/e2e/routing-skill-e2e.test.ts +0 -39
  286. package/tests/helpers/mock-ai.ts +0 -92
  287. package/tests/helpers/mock-storage.ts +0 -159
  288. package/tests/integration/claudemd-generator.test.ts +0 -90
  289. package/tests/integration/queue-replay.integration.test.ts +0 -193
  290. package/tests/integration/tasks-filter.integration.test.ts +0 -154
  291. package/tests/integration/web-analytics.integration.test.ts +0 -133
  292. package/tests/integration/web-stats.integration.test.ts +0 -135
  293. package/tests/integration/web-trace.integration.test.ts +0 -175
  294. package/tests/performance/database.benchmark.ts +0 -161
  295. package/tests/semantic-matcher.test.ts +0 -99
  296. package/tests/skill-matcher.test.ts +0 -110
  297. package/tests/unit/ai-provider-retry.test.ts +0 -194
  298. package/tests/unit/ai-provider-vision.test.ts +0 -224
  299. package/tests/unit/claudemd-generator.test.ts +0 -68
  300. package/tests/unit/cli-mcp.test.ts +0 -141
  301. package/tests/unit/core/forge-paths.test.ts +0 -99
  302. package/tests/unit/daemon/hook-sync.test.ts +0 -71
  303. package/tests/unit/daemon/post-tool-use.test.ts +0 -121
  304. package/tests/unit/daemon/skill-sync.test.ts +0 -75
  305. package/tests/unit/daemon/stop-handler-behavior-summary.test.ts +0 -202
  306. package/tests/unit/daemon/task-segmenter-recover.test.ts +0 -84
  307. package/tests/unit/event-fields.test.ts +0 -88
  308. package/tests/unit/event-parser.test.ts +0 -55
  309. package/tests/unit/handlers.test.ts +0 -171
  310. package/tests/unit/hooks/resolve-project-path.test.ts +0 -122
  311. package/tests/unit/invocation-guard.test.ts +0 -125
  312. package/tests/unit/queue.test.ts +0 -272
  313. package/tests/unit/router.test.ts +0 -138
  314. package/tests/unit/security.test.ts +0 -128
  315. package/tests/unit/skill-invocations-workflow.test.ts +0 -495
  316. package/tests/unit/skill-registry.test.ts +0 -94
  317. package/tests/unit/skills/invocation-guard-ttl.test.ts +0 -211
  318. package/tests/unit/skills/official-skills-loader.test.ts +0 -126
  319. package/tests/unit/skills/registry-multiformat.test.ts +0 -92
  320. package/tests/unit/skills/upgrade-engine-parse.test.ts +0 -138
  321. package/tests/unit/skills/upgrade-engine.test.ts +0 -401
  322. package/tests/unit/skills/upgrade-prompt.test.ts +0 -89
  323. package/tests/unit/socket-server.test.ts +0 -183
  324. package/tests/unit/storage/event-operations-aggregates.test.ts +0 -342
  325. package/tests/unit/storage/migration-idempotent.test.ts +0 -304
  326. package/tests/unit/storage/routing-aggregates.test.ts +0 -276
  327. package/tests/unit/storage/routing.test.ts +0 -117
  328. package/tests/unit/storage/schema-missing.test.ts +0 -81
  329. package/tests/unit/storage/session-operations-aggregates.test.ts +0 -120
  330. package/tests/unit/storage/sessions-aggregate.test.ts +0 -435
  331. package/tests/unit/storage/skill-operations-counts.test.ts +0 -106
  332. package/tests/unit/storage/skills-aggregates.test.ts +0 -104
  333. package/tests/unit/storage/sqlite-refactor-harness.test.ts +0 -314
  334. package/tests/unit/storage/task-operations-counts.test.ts +0 -46
  335. package/tests/unit/storage/tasks-getById.test.ts +0 -343
  336. package/tests/unit/storage/tasks-stale-gc.test.ts +0 -86
  337. package/tests/unit/storage.test.ts +0 -172
  338. package/tests/unit/token-usage.test.ts +0 -144
  339. package/tests/unit/type-guards.test.ts +0 -201
  340. package/tests/unit/utils/format.test.ts +0 -189
  341. package/tests/unit/utils/session.test.ts +0 -89
  342. package/tests/unit/utils/time.test.ts +0 -112
  343. package/tests/unit/web/navigation-back-contract.test.ts +0 -134
  344. package/tests/unit/web/routes-auth.test.ts +0 -93
  345. package/tests/unit/web/routes-events.test.ts +0 -101
  346. package/tests/unit/web/routes-rules.test.ts +0 -182
  347. package/tests/unit/web/routes-sessions.test.ts +0 -181
  348. package/tests/unit/web/routes-skill-stats.test.ts +0 -179
  349. package/tests/unit/web/routes-stats.test.ts +0 -92
  350. package/tests/unit/web/routes-tasks.test.ts +0 -385
  351. package/tests/unit/web/task-title-contract.test.ts +0 -210
  352. package/tests/unit/web/tasks-component-contract.test.ts +0 -179
  353. package/tsconfig.json +0 -22
  354. package/vitest.config.ts +0 -21
  355. package/vitest.integration.config.ts +0 -16
  356. package/web/CLAUDE.md +0 -20
  357. package/web/index.html +0 -13
  358. package/web/package-lock.json +0 -4854
  359. package/web/package.json +0 -35
  360. package/web/postcss.config.js +0 -6
  361. package/web/src/App.tsx +0 -110
  362. package/web/src/components/CodeBlock.tsx +0 -31
  363. package/web/src/components/Confirm.tsx +0 -96
  364. package/web/src/components/Drawer.tsx +0 -60
  365. package/web/src/components/Layout.tsx +0 -145
  366. package/web/src/components/MarkdownRenderer.tsx +0 -77
  367. package/web/src/components/SearchInput.tsx +0 -31
  368. package/web/src/components/SessionDetailContent.tsx +0 -157
  369. package/web/src/components/Toast.tsx +0 -92
  370. package/web/src/index.css +0 -19
  371. package/web/src/main.tsx +0 -31
  372. package/web/src/pages/AIConfig.tsx +0 -233
  373. package/web/src/pages/Dashboard.tsx +0 -572
  374. package/web/src/pages/Events.tsx +0 -271
  375. package/web/src/pages/Reports.tsx +0 -428
  376. package/web/src/pages/SessionDetail.tsx +0 -162
  377. package/web/src/pages/Sessions.tsx +0 -205
  378. package/web/src/pages/Skills.tsx +0 -180
  379. package/web/src/pages/TaskDetail.tsx +0 -515
  380. package/web/src/pages/Tasks.tsx +0 -415
  381. package/web/src/utils/auth.ts +0 -59
  382. package/web/src/utils/export.ts +0 -54
  383. package/web/src/utils/navigation.ts +0 -25
  384. package/web/src/utils/task-title.ts +0 -49
  385. package/web/src/utils/time.ts +0 -13
  386. package/web/tailwind.config.js +0 -11
  387. package/web/tsconfig.json +0 -21
  388. package/web/tsconfig.node.json +0 -10
  389. package/web/vite.config.ts +0 -76
  390. package/winspan-claude-forge-8.43.0.tgz +0 -0
@@ -1,424 +0,0 @@
1
- # claude-forge 渐进式重构 - 第 2 迭代实施方案
2
-
3
- **版本**: v1.0
4
- **创建时间**: 2026-05-15 17:00
5
- **迭代周期**: 2 周(10 个工作日)
6
- **前置条件**: 第 1 迭代已完成(P0 安全漏洞修复 + P1 基础设施改进 + 测试覆盖率 40%)
7
-
8
- ---
9
-
10
- ## 1. 目标与范围
11
-
12
- ### 1.1 迭代目标
13
-
14
- **主要目标**:
15
- 1. 消除代码重复,提升可维护性(P1-3, P1-4, P1-5)
16
- 2. 统一命名风格,提升代码可读性(P1-6, P1-7)
17
- 3. 优化数据库查询性能(P2-6, P2-7)
18
- 4. 防护内存泄漏风险(P2-8)
19
- 5. 提升测试覆盖率至 60%
20
-
21
- **量化指标**:
22
- - 代码重复率:从 ~15% 降至 <8%
23
- - 测试覆盖率:从 40% 提升至 60%
24
- - 数据库查询性能:N+1 查询减少 80%
25
- - 内存泄漏风险:InvocationGuard 增加 TTL 机制
26
-
27
- ### 1.2 包含的问题
28
-
29
- **P1 级问题**(必须完成):
30
- - ✅ P1-3: 时间戳归一化逻辑重复(3 处)
31
- - ✅ P1-4: 错误日志模式重复(5 处)
32
- - ✅ P1-5: Session ID 截断逻辑重复(4 处)
33
- - ✅ P1-6: 文件命名风格混乱(kebab-case vs camelCase)
34
- - ✅ P1-7: 函数命名不一致(get vs query vs list)
35
-
36
- **P2 级问题**(部分完成):
37
- - ✅ P2-6: 数据库查询未使用预编译语句(部分文件)
38
- - ✅ P2-7: 缺少连接池(SQLite WAL 模式优化)
39
- - ✅ P2-8: 内存泄漏风险(InvocationGuard 无 TTL)
40
-
41
- ### 1.3 不包含的问题
42
-
43
- **留到第 3 迭代**:
44
- - P2-1: 类型断言滥用(需要更大范围的类型系统重构)
45
- - P2-2: 错误处理不一致(需要统一错误处理策略)
46
- - P2-3: 配置验证缺失(需要 Zod schema 设计)
47
- - P2-4: 日志级别混乱(需要日志策略重新设计)
48
- - P2-5: 魔法数字(需要常量提取策略)
49
- - P2-9: 事件监听器泄漏(需要生命周期管理重构)
50
-
51
- ---
52
-
53
- ## 2. 改动文件清单
54
-
55
- ### 2.1 新增文件(6 个)
56
-
57
- | 文件路径 | 用途 | 预计行数 |
58
- |---------|------|---------|
59
- | `src/core/utils/time.ts` | 时间戳归一化工具 | 50 |
60
- | `src/core/utils/session.ts` | Session ID 处理工具 | 40 |
61
- | `src/core/utils/format.ts` | 通用格式化工具(日志、错误) | 80 |
62
- | `tests/unit/utils/time.test.ts` | 时间工具测试 | 100 |
63
- | `tests/unit/utils/session.test.ts` | Session 工具测试 | 80 |
64
- | `tests/unit/utils/format.test.ts` | 格式化工具测试 | 120 |
65
-
66
- ### 2.2 修改文件(18 个)
67
-
68
- | 文件路径 | 改动类型 | 预计改动行数 | 改动原因 |
69
- |---------|---------|-------------|---------|
70
- | `src/daemon/event-parser.ts` | 重构 | 20 | 使用 `normalizeTimestamp` |
71
- | `src/daemon/handlers/stop.ts` | 重构 | 30 | 使用 `truncateSessionId` + `formatError` |
72
- | `src/daemon/handlers/user-prompt.ts` | 重构 | 25 | 使用 `truncateSessionId` |
73
- | `src/daemon/handlers/history-exporter.ts` | 重构 | 20 | 使用 `normalizeTimestamp` |
74
- | `src/daemon/services/task-segmenter.ts` | 重构 | 30 | 使用 `normalizeTimestamp` |
75
- | `src/claudemd/resume-manager.ts` | 重构 | 25 | 使用 `normalizeTimestamp` + `truncateSessionId` |
76
- | `src/core/storage/events.ts` | 优化 | 40 | 预编译语句 + 批量插入 |
77
- | `src/core/storage/sessions.ts` | 优化 | 30 | 预编译语句优化 |
78
- | `src/core/storage/routing.ts` | 优化 | 35 | 预编译语句 + 索引优化 |
79
- | `src/core/storage/tasks.ts` | 优化 | 25 | 预编译语句优化 |
80
- | `src/core/storage/injections.ts` | 优化 | 20 | 预编译语句优化 |
81
- | `src/core/storage/token-usage.ts` | 优化 | 20 | 预编译语句优化 |
82
- | `src/core/storage/skills.ts` | 优化 | 30 | 预编译语句 + N+1 查询优化 |
83
- | `src/core/storage/base.ts` | 优化 | 40 | WAL 模式优化 + 连接池配置 |
84
- | `src/skills/invocation-guard.ts` | 增强 | 50 | 增加 TTL 机制 + 自动清理 |
85
- | `src/daemon/router.ts` | 重构 | 15 | 使用 `formatError` |
86
- | `src/daemon/server.ts` | 重构 | 20 | 使用 `formatError` |
87
- | `src/web/server.ts` | 重构 | 15 | 使用 `formatError` |
88
-
89
- ### 2.3 重命名文件(0 个)
90
-
91
- **说明**:文件命名风格混乱问题(P1-6)通过代码审查和新文件命名规范解决,不涉及现有文件重命名(避免 git 历史混乱)。
92
-
93
- ---
94
-
95
- ## 3. 实施步骤
96
-
97
- ### Step 1: 抽取重复逻辑(3 天)
98
-
99
- **目标**:消除时间戳、日志、ID 截断的重复代码。
100
-
101
- #### 3.1.1 创建工具函数
102
-
103
- **文件**: `src/core/utils/time.ts`
104
-
105
- ```typescript
106
- /**
107
- * 时间戳归一化工具
108
- *
109
- * 统一处理 ISO 8601 时间戳的 Z 后缀问题,确保所有时间戳都带 Z。
110
- */
111
-
112
- /**
113
- * 归一化时间戳,确保带 Z 后缀
114
- */
115
- export function normalizeTimestamp(timestamp: string): string {
116
- if (!timestamp) return new Date().toISOString();
117
- return timestamp.endsWith('Z') ? timestamp : timestamp + 'Z';
118
- }
119
-
120
- /**
121
- * 将时间戳转换为 Unix 毫秒数
122
- */
123
- export function timestampToMs(timestamp: string): number {
124
- return new Date(normalizeTimestamp(timestamp)).getTime();
125
- }
126
-
127
- /**
128
- * 计算两个时间戳之间的毫秒差
129
- */
130
- export function timeDiff(start: string, end: string): number {
131
- return timestampToMs(end) - timestampToMs(start);
132
- }
133
- ```
134
-
135
- **文件**: `src/core/utils/session.ts`
136
-
137
- ```typescript
138
- /**
139
- * Session ID 处理工具
140
- */
141
-
142
- /**
143
- * 截断 Session ID 到指定长度(用于日志显示)
144
- */
145
- export function truncateSessionId(sessionId: string, length: number = 8): string {
146
- if (!sessionId) return 'unknown';
147
- return sessionId.slice(0, length);
148
- }
149
-
150
- /**
151
- * 验证 Session ID 格式(UUID v4)
152
- */
153
- export function isValidSessionId(sessionId: string): boolean {
154
- const uuidV4Regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
155
- return uuidV4Regex.test(sessionId);
156
- }
157
- ```
158
-
159
- **文件**: `src/core/utils/format.ts`
160
-
161
- ```typescript
162
- /**
163
- * 通用格式化工具
164
- */
165
-
166
- /**
167
- * 格式化错误信息(用于日志)
168
- */
169
- export function formatError(context: string, error: unknown): string {
170
- const errorMessage = error instanceof Error ? error.message : String(error);
171
- const errorStack = error instanceof Error ? error.stack : undefined;
172
- return `${context}: ${errorMessage}${errorStack ? `\n${errorStack}` : ''}`;
173
- }
174
-
175
- /**
176
- * 格式化文件大小(字节 → 人类可读)
177
- */
178
- export function formatFileSize(bytes: number): string {
179
- if (bytes === 0) return '0 B';
180
- const k = 1024;
181
- const sizes = ['B', 'KB', 'MB', 'GB'];
182
- const i = Math.floor(Math.log(bytes) / Math.log(k));
183
- return `${(bytes / Math.pow(k, i)).toFixed(1)} ${sizes[i]}`;
184
- }
185
- ```
186
-
187
- #### 3.1.2 替换重复代码
188
-
189
- **改动文件**:
190
- - `src/daemon/event-parser.ts`:使用 `normalizeTimestamp`
191
- - `src/daemon/handlers/stop.ts`:使用 `truncateSessionId` + `formatError`
192
- - `src/daemon/handlers/user-prompt.ts`:使用 `truncateSessionId`
193
- - `src/daemon/handlers/history-exporter.ts`:使用 `normalizeTimestamp`
194
- - `src/daemon/services/task-segmenter.ts`:使用 `normalizeTimestamp`
195
- - `src/claudemd/resume-manager.ts`:使用 `normalizeTimestamp` + `truncateSessionId`
196
-
197
- **验证方法**:
198
- 1. 运行单元测试:`npx vitest run tests/unit/utils/`
199
- 2. 运行集成测试:`npx vitest run tests/integration/`
200
- 3. 手动测试:启动 daemon,触发各类事件,检查日志格式
201
-
202
- **回滚方案**:
203
- - Git revert 到 Step 1 开始前的 commit
204
-
205
- ---
206
-
207
- ### Step 2: 统一命名风格(2 天)
208
-
209
- **目标**:统一文件命名和函数命名风格。
210
-
211
- #### 3.2.1 文件命名规范
212
-
213
- **规范**:
214
- - 所有新文件使用 `kebab-case.ts`(如 `time-utils.ts`)
215
- - 现有文件保持不变(避免 git 历史混乱)
216
- - 在 `CLAUDE.md` 中明确规范
217
-
218
- **改动**:
219
- - 更新 `CLAUDE.md`,添加文件命名规范章节
220
-
221
- #### 3.2.2 函数命名规范
222
-
223
- **规范**:
224
- - 查询单条记录:`get*`(如 `getSession`)
225
- - 查询多条记录:`query*`(如 `querySessions`)
226
- - 列出所有记录:`list*`(如 `listSkills`)
227
- - 写入记录:`write*`(如 `writeEvent`)
228
- - 更新记录:`update*`(如 `updateTask`)
229
-
230
- **说明**:经过检查,现有函数命名已基本符合规范,无需大规模重命名。
231
-
232
- **验证方法**:
233
- 1. 代码审查:检查所有新增函数是否符合规范
234
- 2. 文档审查:检查 `CLAUDE.md` 是否明确规范
235
-
236
- ---
237
-
238
- ### Step 3: 优化数据库查询(3 天)
239
-
240
- **目标**:使用预编译语句,消除 N+1 查询,优化连接池。
241
-
242
- #### 3.3.1 预编译语句优化
243
-
244
- **改动示例**(`src/core/storage/events.ts`):
245
-
246
- **Before**:
247
- ```typescript
248
- const sql = `SELECT * FROM events ${where} ORDER BY timestamp DESC LIMIT ${limit} OFFSET ${offset}`;
249
- const rows = this.db.prepare(sql).all(...params);
250
- ```
251
-
252
- **After**:
253
- ```typescript
254
- const sql = `SELECT * FROM events ${where} ORDER BY timestamp DESC LIMIT ? OFFSET ?`;
255
- params.push(limit, offset);
256
- const rows = this.db.prepare(sql).all(...params);
257
- ```
258
-
259
- #### 3.3.2 连接池优化
260
-
261
- **改动文件**:`src/core/storage/base.ts`
262
-
263
- ```typescript
264
- // Before
265
- this.db.pragma('busy_timeout = 5000');
266
- this.db.pragma('cache_size = -2000'); // 2MB
267
-
268
- // After
269
- this.db.pragma('busy_timeout = 10000'); // 增加到 10 秒
270
- this.db.pragma('cache_size = -8000'); // 增加到 8MB
271
- this.db.pragma('temp_store = MEMORY'); // 临时表使用内存
272
- this.db.pragma('mmap_size = 30000000000'); // 启用 mmap(30GB)
273
- ```
274
-
275
- **验证方法**:
276
- 1. 性能测试:并发写入 1000 条事件,测量延迟
277
- 2. 内存测试:监控 daemon 内存占用(应 <100MB)
278
-
279
- ---
280
-
281
- ### Step 4: 内存泄漏防护(1 天)
282
-
283
- **目标**:为 `InvocationGuard` 增加 TTL 机制。
284
-
285
- **改动文件**:`src/skills/invocation-guard.ts`
286
-
287
- **改动方案**:
288
-
289
- ```typescript
290
- export interface SessionInvocations {
291
- total: number;
292
- depth: number;
293
- calledSkills: Set<string>;
294
- lastAccessTime: number; // 新增:最后访问时间
295
- }
296
-
297
- export class InvocationGuard {
298
- private sessions = new Map<string, SessionInvocations>();
299
- private readonly TTL_MS = 30 * 60 * 1000; // 30 分钟
300
- private cleanupInterval: NodeJS.Timeout | null = null;
301
-
302
- constructor() {
303
- // 启动定时清理任务(每 5 分钟)
304
- this.cleanupInterval = setInterval(() => {
305
- this.cleanupExpiredSessions();
306
- }, 5 * 60 * 1000);
307
- }
308
-
309
- private cleanupExpiredSessions(): void {
310
- const now = Date.now();
311
- const expired: string[] = [];
312
-
313
- for (const [sessionId, session] of this.sessions.entries()) {
314
- if (now - session.lastAccessTime > this.TTL_MS) {
315
- expired.push(sessionId);
316
- }
317
- }
318
-
319
- for (const sessionId of expired) {
320
- this.sessions.delete(sessionId);
321
- }
322
- }
323
-
324
- destroy(): void {
325
- if (this.cleanupInterval) {
326
- clearInterval(this.cleanupInterval);
327
- this.cleanupInterval = null;
328
- }
329
- }
330
- }
331
- ```
332
-
333
- **验证方法**:
334
- 1. 单元测试:模拟 30 分钟后清理过期 session
335
- 2. 内存测试:运行 daemon 24 小时,监控内存占用
336
-
337
- ---
338
-
339
- ### Step 5: 提升测试覆盖率(1 天)
340
-
341
- **目标**:将测试覆盖率从 40% 提升至 60%。
342
-
343
- **新增测试文件**:
344
- - `tests/unit/utils/time.test.ts`(100 行)
345
- - `tests/unit/utils/session.test.ts`(80 行)
346
- - `tests/unit/utils/format.test.ts`(120 行)
347
- - `tests/unit/skills/invocation-guard-ttl.test.ts`(150 行)
348
-
349
- **验证方法**:
350
- 1. 运行覆盖率报告:`npx vitest run --coverage`
351
- 2. 确保覆盖率 ≥ 60%
352
-
353
- ---
354
-
355
- ## 4. 风险点
356
-
357
- ### 4.1 高风险改动
358
-
359
- | 风险点 | 影响范围 | 降低措施 |
360
- |-------|---------|---------|
361
- | 数据库查询优化 | 所有存储操作 | 1. 保留原查询作为备份<br>2. 性能测试验证<br>3. 灰度发布 |
362
- | InvocationGuard TTL | Skill 调用链路 | 1. TTL 设置为 30 分钟<br>2. 单元测试覆盖<br>3. 监控内存占用 |
363
- | 时间戳归一化 | 所有时间相关逻辑 | 1. 单元测试覆盖<br>2. 集成测试验证<br>3. 保留原逻辑备份 |
364
-
365
- ---
366
-
367
- ## 5. 验收标准
368
-
369
- ### 5.1 功能验收
370
-
371
- - ✅ 所有现有功能正常
372
- - ✅ daemon 启动正常
373
- - ✅ Web 仪表盘正常访问
374
- - ✅ CLI 命令正常执行
375
-
376
- ### 5.2 性能验收
377
-
378
- - ✅ 数据库查询性能提升(对比修改前后)
379
- - ✅ 内存占用稳定(<100MB)
380
- - ✅ N+1 查询消除
381
-
382
- ### 5.3 测试验收
383
-
384
- - ✅ 单元测试覆盖率 ≥ 60%
385
- - ✅ 所有测试通过
386
- - ✅ 代码重复率 <8%
387
-
388
- ---
389
-
390
- ## 6. 时间估算
391
-
392
- | 步骤 | 工作量(天) | 依赖 |
393
- |---|---|---|
394
- | Step 1: 抽取重复逻辑 | 3 | 无 |
395
- | Step 2: 统一命名风格 | 2 | 无 |
396
- | Step 3: 优化数据库查询 | 3 | 无 |
397
- | Step 4: 内存泄漏防护 | 1 | 无 |
398
- | Step 5: 提升测试覆盖率 | 1 | Step 1-4 完成后 |
399
- | **总计** | **10 天** | - |
400
-
401
- **总工作量**:10 天(2 周)
402
-
403
- ---
404
-
405
- ## 7. 里程碑
406
-
407
- | 日期 | 里程碑 | 交付物 |
408
- |---|---|---|
409
- | 2026-05-20 | 重复逻辑抽取完成 | 3 个工具模块 + 测试 |
410
- | 2026-05-22 | 命名风格统一完成 | 更新 CLAUDE.md |
411
- | 2026-05-27 | 数据库优化完成 | 性能测试报告 |
412
- | 2026-05-28 | 内存泄漏防护完成 | TTL 机制 + 测试 |
413
- | 2026-05-29 | 第 2 迭代验收 | 覆盖率 ≥ 60% |
414
-
415
- ---
416
-
417
- ## 8. 下一步
418
-
419
- **Phase 2.5: User Review**
420
-
421
- 请 review 本方案后回复:
422
- - **"批准"** / **"approve"** → spawn coder 开始实施
423
- - **"修改 [意见]"** → 调整 spec
424
- - **"取消"** → 停止任务