@winspan/claude-forge 8.53.2 → 8.54.4

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