@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
package/DEVELOPMENT.md CHANGED
@@ -2,80 +2,128 @@
2
2
 
3
3
  面向 claude-forge 贡献者的架构与工作流说明。
4
4
 
5
+ > 高层架构 + 设计决策见 [docs/architecture/README.md](./docs/architecture/README.md)
6
+
5
7
  ---
6
8
 
7
9
  ## 仓库布局
8
10
 
9
11
  ```
10
12
  src/
11
- ├── core/
12
- │ ├── storage/ SQLite 存储(schema.sql + sqlite.ts),WAL 模式,单一 data.db
13
- │ ├── ai/ Anthropic SDK 封装(ClaudeProvider),被 classifier / planner / distiller 复用
14
- │ ├── utils/ logger / error-handler 等跨层工具
15
- └── types.ts ForgeEvent / HookResult 等核心类型契约
16
- ├── engine/
17
- │ ├── dsl/ 治理规则 DSL 编译器(types / lexer / parser / compiler)
18
- │ ├── conventions/ 打包进发布的默认 YAML 规则
19
- │ ├── rule-engine.ts 规则执行
20
- │ ├── context-builder.ts Hook 事件 → 规则上下文
21
- │ ├── evidence-store.ts 治理证据持久化
22
- │ ├── agent-router.ts Agent 路由(基于 routing.yaml)
23
- └── experiment-router.ts A/B 实验路由(基于 experiments.yaml)
24
- ├── intelligence/
25
- │ ├── classifier.ts IntentClassifier:complexity / taskType / keywords
26
- │ ├── quality-gate.ts AI 驱动的代码质量检查(PostToolUse)
27
- │ ├── distiller.ts Stop 时蒸馏会话为 decisions.md / timeline.md
28
- └── task-segmenter.ts 按 UserPromptSubmit 划分任务段
29
- ├── capability/
30
- │ ├── methodology-registry.ts 加载 src/capability/methodologies/*.yaml
31
- ├── methodology-planner.ts AI Planner 根据 intent 生成 ExecutionPlan
32
- ├── execution-manager.ts daemon 单例:前/后台路由、孤儿清理
33
- ├── executor/
34
- ├── types.ts PhaseExecutor 统一抽象
35
- ├── foreground-executor.ts 前台:directive pending 队列
36
- ├── background-executor.ts 后台:spawn claude -p 独立子进程
37
- ├── stream-parser.ts stream-json 事件解析
38
- │ └── orchestrator.ts 串行驱动 phases
39
- └── methodologies/ harness-engineering.yaml / bmad.yaml
40
- ├── daemon/
41
- │ ├── index.ts daemon 入口:socket server + hook router
42
- │ ├── router.ts 按 hook_type 分发到 handler
13
+ ├── core/ 共享核心,不反向依赖业务层
14
+ │ ├── storage/ SQLite 存储(schema.sql + sqlite.ts),WAL 模式,单一 data.db
15
+ ├── schema.sql 建表初始化
16
+ ├── migrations/ 增量 .sql 迁移
17
+ │ ├── events.ts writeEvent / queryEvents
18
+ │ │ ├── sessions.ts querySessions / upsertSession / countAllSessions
19
+ ├── tasks.ts writeTask / queryTasks / task_events
20
+ ├── injections.ts hook 注入审计
21
+ ├── routing.ts routing_events 表
22
+ ├── skills.ts skill_invocations
23
+ ├── token-usage.ts token_usage 聚合
24
+ ├── base.ts / rows.ts 连接 + 行映射工具
25
+ │ ├── maintenance.ts 清理/压缩
26
+ │ │ └── performance-indexes.sql 附加索引
27
+ │ ├── ai/ ClaudeProvider 封装(用于 classifier、distiller、skill-upgrade)
28
+ │ ├── queue/ 通用 SQLite 队列工具
29
+ │ ├── utils/ logger / git / path / time / lru-cache / forge-resume-block 等
30
+ ├── config.ts ConfigManager(~/.claude-forge/config.yaml)
31
+ ├── constants.ts FORGE_PATHS、各类阈值常量
32
+ │ ├── event-fields.ts hook 事件字段统一抽取
33
+ └── types.ts ForgeEvent / HookResult 等核心类型契约
34
+
35
+ ├── daemon/ 后台守护进程
36
+ │ ├── index.ts 入口:socket server + 生命周期 + 同步任务
37
+ │ ├── server.ts Unix socket 接收 hook payload
38
+ │ ├── router.ts hook_type 分发到 handler
39
+ │ ├── lifecycle.ts 启停 / 信号处理
40
+ ├── event-parser.ts hook 原始 JSON → ForgeEvent
41
+ ├── hook-sync.ts 启动时把 dist/hooks/ 同步到 ~/.claude/hooks/
42
+ ├── skill-sync.ts 启动时把 dist/skills/official/ 同步到 ~/.claude/skills/
43
+ │ ├── launchd-installer.ts macOS launchd 安装
44
+ │ ├── launchd/ launchd plist 模板
43
45
  │ ├── handlers/
44
- │ │ ├── user-prompt.ts UserPromptSubmit:分类 + 路由 + 方法论
45
- │ │ ├── pre-tool-use.ts PreToolUse:规则阻断
46
- │ │ ├── post-tool-use.ts PostToolUse:质量检查 + 方法论推进
47
- │ │ ├── stop.ts Stop:蒸馏 + 方法论兜底
48
- │ │ ├── methodology-formatter.ts 生成前/后台 directive 文本
46
+ │ │ ├── user-prompt.ts UserPromptSubmit:分类 + skill 推荐 + agent 路由
47
+ │ │ ├── post-tool-use.ts PostToolUse:观察,按需注入提示
48
+ │ │ ├── stop.ts Stop:写 session 摘要、distill 决策
49
49
  │ │ └── history-exporter.ts 导出完整历史到 .claude-forge/history/
50
- ├── routing-observer.ts 观察 Agent 调用 → 标注 obeyed
51
- ├── routing-state.ts 会话级路由状态(PreToolUse 强制校验用)
52
- ├── auto-disable-scheduler.ts 自动禁用频繁违规的 (taskType, agent) 组合
53
- │ └── methodology-pending-queue.ts 前台 directive 持久化兜底队列
54
- ├── hooks/ Shell 脚本:从 Claude Code 到 daemon socket 的桥
55
- ├── agents/ 内置 Agent 定义(13 个),可被 CLI 注入 ~/.claude/agents/
56
- ├── skills/ Skill registry
57
- ├── claudemd/ resume-manager / convention-extractor(CLAUDE.md 生成)
58
- ├── cli/ CLI 入口(claude-forge / cf),按命令组织在 cli/commands/
59
- ├── templates/ 新项目初始化模板
60
- └── web/ Express + SSE 服务器(react 前端产物从 web/dist 拷入)
61
-
62
- web/ React + TanStack Query + Tailwind 前端(独立 npm workspace)
63
- ├── src/pages/ 11 个页面(每个 lazy-loaded)
64
- ├── src/components/ Drawer / Toast / Confirm / SearchInput / MarkdownRenderer / CodeBlock
65
- └── vite.config.ts 手动 manualChunks 切分大库
66
-
67
- tests/unit/ Vitest 单测(vitest.config.ts include 仅覆盖此目录)
68
- scripts/ 开发/调试脚本:dev-web、demo-v2、smoke-background-executor
50
+ └── services/
51
+ └── task-segmenter.ts UserPromptSubmit 按时间窗划分任务段
52
+
53
+ ├── skills/ Skill 推荐与方法论分发
54
+ ├── registry.ts 扫描 ~/.claude/skills/ + src/skills/official/,提供 match()
55
+ ├── matcher.ts 关键词匹配
56
+ ├── semantic-matcher.ts AI 语义匹配(可选,需 API key)
57
+ ├── invocation-guard.ts 防止 agent 重复 invoke 同一 skill
58
+ ├── upgrade-engine.ts 社区 skill 升级核心:pull / match / evaluate / apply
59
+ ├── upgrade-prompt.ts AI evaluator prompt 模板
60
+ │ ├── official-skills.ts 加载内置官方 skill
61
+ │ ├── official/ 内置官方 skill .md 源(随发布打包)
62
+ │ ├── tools/ MCP 工具:skill_invoke / skill_list / pipeline_suggest
63
+ │ └── index.ts 对外导出
64
+
65
+ ├── web/ Web 管理后台
66
+ │ ├── server.ts Express 服务器 + 路由注册
67
+ │ ├── auth-middleware.ts 本地 token 校验
68
+ │ ├── ssrf-guard.ts SSRF 防护
69
+ │ ├── routes/ 每个 API 模块独立文件(sessions / events / tasks / skills / ai / patch ...)
70
+ │ ├── analytics/ 趋势/统计计算
71
+ │ └── static/ React 前端构建产物的最终落点(dist/web/static/)
72
+
73
+ ├── cli/
74
+ │ ├── index.ts CLI 入口(commander)
75
+ │ ├── init/ `cf init`:安装 hook 脚本
76
+ │ └── commands/ 子命令:daemon / config / skills / claudemd / status / logs / stats / menu / trace / mcp / executions / template
77
+
78
+ ├── claudemd/ CLAUDE.md 生成与维护
79
+ │ ├── tech-detector.ts 项目技术栈识别
80
+ │ ├── claudemd-generator.ts 生成 CLAUDE.md 正文
81
+ │ ├── convention-extractor.ts 从已有规则提取约定
82
+ │ ├── resume-manager.ts forge:resume 块续接管理
83
+ │ ├── persona-manager.ts 用户 persona 段管理
84
+ │ ├── templates/ 各类模板(含 swarm-protocol.md)
85
+ │ └── index.ts 对外导出
86
+
87
+ ├── hooks/ Shell 脚本:从 Claude Code 桥接到 daemon socket
88
+ │ ├── hook-lib.sh 共用工具(payload 拼装、容错)
89
+ │ ├── user-prompt-submit.sh
90
+ │ ├── pre-tool-use.sh
91
+ │ ├── post-tool-use.sh
92
+ │ ├── stop.sh
93
+ │ └── notification.sh
94
+
95
+ ├── mcp/ MCP server(暴露 skill_invoke / skill_list / pipeline_suggest 给 agent)
96
+ │ └── server.ts
97
+
98
+ └── templates/ 新项目初始化模板
99
+
100
+ web/ React 前端源码(独立 npm workspace)
101
+ ├── src/pages/ 各业务页面(lazy-loaded)
102
+ ├── src/components/ 通用组件
103
+ └── vite.config.ts Vite + 手动 manualChunks
104
+
105
+ tests/
106
+ └── unit/ vitest 单测(vitest.config.ts include 此目录)
107
+ ├── core/ daemon/ skills/ storage/ utils/ web/ hooks/ 各模块独立子目录
108
+ └── *.test.ts 顶层综合测试
109
+
110
+ scripts/ 辅助脚本:dev-daemon / dev-web / e2e-* / sync-agent-skills / check-spec-changelog 等
111
+ docs/
112
+ ├── design/ spec(planner 输出)
113
+ ├── implementation/ changelog(coder 输出)
114
+ └── skill-upgrade-guide.md skill 升级流程
69
115
  ```
70
116
 
71
117
  ## 目录依赖约束
72
118
 
73
119
  - `core` 不反向依赖业务层
74
- - `engine` 可依赖 `core`
75
- - `intelligence` 可依赖 `core` / `engine`
76
- - `capability` 可依赖 `core` / `engine` / `intelligence`
77
- - `daemon` 可依赖 `core` / `engine` / `intelligence` / `capability` / `agents` / `skills`
78
- - `cli` 做命令分发,不塞核心规则逻辑
120
+ - `skills` 可依赖 `core`
121
+ - `claudemd` 可依赖 `core`
122
+ - `daemon` 可依赖 `core` / `skills` / `claudemd`
123
+ - `web` 可依赖 `core` / `skills` / `claudemd`(不依赖 `daemon`)
124
+ - `mcp` 可依赖 `core` / `skills`
125
+ - `cli` 做命令分发,可依赖任意模块,但不塞核心规则逻辑
126
+ - `hooks/*.sh` 不依赖代码,只通过 socket payload 跟 daemon 通信
79
127
 
80
128
  ---
81
129
 
@@ -86,225 +134,246 @@ scripts/ 开发/调试脚本:dev-web、demo-v2、smoke-backgro
86
134
  npm install
87
135
  npm run build
88
136
 
89
- # 启动 daemon(开发模式,用 tsx 直跑 ts
90
- npm run dev:daemon
137
+ # 启动 daemon(开发模式,复用 ./scripts/dev-daemon.sh
138
+ npm run dev:daemon:start
139
+ npm run dev:daemon:restart
140
+ npm run dev:daemon:logs
141
+ npm run dev:daemon:stop
91
142
 
92
- # 启动 web dev 同步(监听 web/src 变化自动拷贝到 dist/web/static/)
93
- npm run dev:web
143
+ # 前端开发(在 web/ 目录)
144
+ cd web && npm install && npm run dev
94
145
  ```
95
146
 
96
- CLI 开发:`npm run dev -- <command>`(比如 `npm run dev -- status`)。
147
+ Daemon / CLI 都用系统 node(项目要求 Node 18+,实际跑在 24/26 上)。
97
148
 
98
149
  ---
99
150
 
100
151
  ## 构建与测试
101
152
 
102
153
  ```bash
103
- # 后端:tsc + 拷贝 hooks/schema/yaml dist/
154
+ # 后端:tsc + 拷贝 hooks / schema / templates / 前端产物到 dist/
104
155
  npm run build
105
156
 
106
- # 前端:vite 构建到 web/dist/,随后 npm run build 会把它复制进 dist/web/static/
107
- npm run build:web
108
-
109
- # 完整:先前端再后端
110
- npm run build:all
111
-
112
157
  # 测试
113
- npm test # vitest run,只跑 tests/unit/
114
- npm run test:watch # watch 模式
115
- npm run test:coverage # 覆盖率
158
+ npm test # vitest run(只跑 tests/unit/)
159
+ npm run test:watch # watch 模式
116
160
 
117
- # TS 双侧检查
161
+ # TS 类型检查
118
162
  npx tsc --noEmit
119
163
  cd web && npx tsc --noEmit
164
+
165
+ # spec / changelog 配对检查(开发流程治理)
166
+ npm run check:specs
120
167
  ```
121
168
 
122
- > 发布流程:`npm run prepublishOnly`(= `npm run build`)会自动跑一遍,之后 `npm publish` 即可。发布前记得 `bump version`(两处:`package.json` + `package-lock.json`)。
169
+ > 发布流程:用户手动 `npm publish`。AI 只做 `git commit / git push` bump version(`package.json` 一处)。
123
170
 
124
171
  ---
125
172
 
126
173
  ## 架构要点
127
174
 
128
- ### 方法论执行链路
175
+ ### Hook 事件流
129
176
 
130
177
  ```
131
- ┌───────────────────────┐ ┌──────────────────┐
132
- UserPromptSubmit │ or │ POST /api/ │
133
- │ 自动识别任务 → 创建 │ │ methodology- │
134
- │ execution (mode=fg) │ │ executions │
135
- └──────────┬────────────┘ (mode=bg) │
136
- │ └────────┬─────────┘
137
- │ │
138
- ▼ ▼
139
- ┌──────────────────────────────────────┐
140
- │ ExecutionManager.start()
141
- ├─ createMethodologyExecution() │
142
- │ ├─ seed phase 0 row │
143
- │ └─ new Orchestrator(executor).run() │
144
- └──────────┬───────────────────────────┘
145
-
146
- ┌──────────┴──────────┐
147
- mode? │
148
- └──┬───────────────┬──┘
149
- foreground │ background
150
- ▼ ▼
151
- ┌──────────────┐ ┌────────────────────────┐
152
- Foreground │ │ Background │
153
- │ Executor │ │ Executor │
154
- │ ─ enqueue │ │ ─ spawn claude -p │
155
- │ directive │ │ ─ parse stream-json │
156
- │ ─ return │ │ ─ update phase_exec │
157
- │ 'injected' │ │ ─ wait exit │
158
- └──────┬───────┘ └──────────┬─────────────┘
159
- │ │
160
- ▼ │
161
- ┌──────────────┐ │
162
- │ Pending │ │
163
- │ Queue │ │
164
- └──────┬───────┘ │
165
- │ │
166
- ▼ ▼
167
- ┌──────────────┐ ┌─────────────────┐
168
- │ Claude │ │ Orchestrator │
169
- │ 主会话 │ │ 推进到下一 phase │
170
- │ 下一次输入时 │ │ 直到完成或失败 │
171
- │ 消费队列 │ └─────────────────┘
172
- └──────────────┘
178
+ Claude Code ──hook payload(JSON via stdin)──► src/hooks/*.sh
179
+
180
+
181
+ $(socat / nc) ──► ~/.claude-forge/daemon.sock
182
+
183
+
184
+ src/daemon/server.ts (接收 + 反序列化)
185
+
186
+
187
+ src/daemon/event-parser.ts (统一 ForgeEvent)
188
+
189
+
190
+ src/daemon/router.ts ──┬──► handlers/user-prompt.ts
191
+ ├──► handlers/post-tool-use.ts
192
+ ├──► handlers/stop.ts
193
+ └──► (PreToolUse / Notification: 直接 allow)
194
+
195
+
196
+ core/storage/* 持久化 + 返回 HookResult
197
+
198
+
199
+ Claude Code 读取 HookResult.systemMessage / additionalContext / allow
173
200
  ```
174
201
 
175
- ### 存储
202
+ 要点:
203
+ - daemon 必须在 100ms 内返回,超时则 Claude Code 视为放行
204
+ - handler 抛错被 router 捕获,不会让 daemon 崩溃
205
+ - `PreToolUse` 当前不做规则阻断,统一放行
206
+ - daemon 不主动推消息:任何延后的指令必须等下一次 UserPromptSubmit 注入
176
207
 
177
- - `~/.claude-forge/data.db` —— 单一运行时数据库:events / sessions / routing_events / methodology_executions / phase_executions / tasks / injections / decisions / token_usage
178
- - Schema 由 `src/core/storage/schema.sql` 初始化,增量迁移放在 `runMigrations()`(幂等 `ALTER TABLE` + `PRAGMA table_info` 检测)
208
+ ### Skill 系统
179
209
 
180
- ### Hook 注入原则
210
+ ```
211
+ ┌─────────────────────┐
212
+ │ UserPromptSubmit │
213
+ │ handler │
214
+ └─────────┬───────────┘
215
+
216
+
217
+ ┌──────────────────────────┐ ┌──────────────────────────┐
218
+ │ SkillRegistry.match() │ ───────►│ semantic-matcher (AI) │
219
+ │ (registry.ts) │ │ 若配置了 API key 则优先 │
220
+ │ │ └────────────┬─────────────┘
221
+ │ 扫描两类来源: │ │ 失败/无 key
222
+ │ - 内置 src/skills/ │ ▼
223
+ │ official/*.md │ ┌──────────────────────────┐
224
+ │ - 用户 ~/.claude/skills/│ ───────►│ keyword matcher │
225
+ │ {name}.md │ │ (matcher.ts) │
226
+ │ or {name}/SKILL.md │ └────────────┬─────────────┘
227
+ └──────────────────────────┘ │
228
+ │ │
229
+ ▼ ▼
230
+ ┌──────────────────────────────────────────────────────┐
231
+ │ invocation-guard 防重复 → 注入 systemMessage 推荐 │
232
+ │ (skill_invocations 表落库) │
233
+ └──────────────────────────────────────────────────────┘
234
+
235
+ Agent 通过 MCP 工具:
236
+ - skill_list 列出可用 skill
237
+ - skill_invoke <id> 取完整方法论
238
+ - pipeline_suggest 根据 intent 拼工作流
239
+ ```
181
240
 
182
- - UserPromptSubmit 返回 `{ systemMessage, additionalContext, allow }`;systemMessage 优先级高于 additionalContext
183
- - PostToolUse 只能观察,不能修改工具结果;返回 systemMessage 会拼到 Claude 下一轮的系统消息
184
- - Stop 返回 systemMessage 会作为"本轮结束"的最后一条系统提示
185
- - **daemon 无法主动推送消息**。前台方法论的兜底设计正是基于这条约束(Stop → 写 pending 队列 → 下一次 UserPromptSubmit 消费)
241
+ frontmatter 必须有 `name: string`,否则 registry 静默跳过(debug 日志,不打扰用户)。`keywords` `tags` 都接受。
186
242
 
187
- ### Agent Worker 隔离
243
+ ### Skill 远程升级
188
244
 
189
- 后台 BackgroundExecutor spawn `claude -p` 时:
245
+ `cf skills upgrade` `src/skills/upgrade-engine.ts` 驱动,三阶段:
190
246
 
191
- - **不用 `--bare`**(会关闭 `~/.claude/agents/` 加载,破坏 phase.agent 语义)
192
- - 用 `--settings <worker-settings.json>`(内容 `{"hooks": {}}`)阻断 worker 递归触发 daemon hook
193
- - env 里写入 `CLAUDE_FORGE_WORKER=1`,未来 daemon 侧若需识别 worker 事件可用此标记
194
- - `--permission-mode bypassPermissions` + `--add-dir <projectRoot>` 限制只在项目目录内动手
195
- - `--disallowed-tools WebFetch,WebSearch` 默认禁用爬虫类工具
196
- - `--max-budget-usd 2` phase 预算上限
197
- - stream-json 全量落盘到 `~/.claude-forge/logs/execution-{id}-phase-{n}.jsonl`
247
+ 1. `pullCandidates(DEFAULT_SOURCES, ~/.claude-forge/skill-candidates/)`
248
+ - 默认源:`addyosmani/agent-skills` + `obra/superpowers`
249
+ - 已存在则 `git pull`,不存在则 `git clone`
250
+ 2. 对每个候选用 `matchToOfficial()` 找最相似官方 skill,再用 `evaluateWithAI()` 让 AI 给出 `upgrade / merge / skip`,AI 解析失败 → `needs_review`
251
+ 3. `generateReport()` 写到 `~/.claude-forge/skill-upgrade-report.md`,每条带 `<!-- upgrade-entry: ... -->` 标记
252
+ 4. `cf skills upgrade --apply` 读报告 备份 `~/.claude-forge/backups/skills/<ts>/` → 覆盖 `src/skills/official/`
253
+ 5. `--rollback <ts>` 反向拷回
198
254
 
199
- ---
255
+ 详见 `docs/skill-upgrade-guide.md`。
200
256
 
201
- ## 调试技巧
257
+ ### CLAUDE.md 生成与维护
202
258
 
203
- ```bash
204
- # 看 daemon 日志(启动时写在 stderr,daemon 模式写入 ~/.claude-forge/daemon.log)
205
- tail -f ~/.claude-forge/daemon.log
259
+ `src/claudemd/` 负责项目级规则文件的生成、续接与扩充:
206
260
 
207
- # 直接查 SQLite 运行时数据
208
- sqlite3 ~/.claude-forge/data.db "SELECT id, methodology_id, status, mode, current_phase_index FROM methodology_executions ORDER BY id DESC LIMIT 10"
261
+ - `tech-detector.ts` 识别项目语言/框架(读 `package.json` / `pyproject.toml` 等)
262
+ - `claudemd-generator.ts` 拼装结果到 `CLAUDE.md`
263
+ - `convention-extractor.ts` — 把已有规则段抽离合并
264
+ - `resume-manager.ts` — 维护 `<!-- forge:resume-begin -->` 续接块(daemon 在 Stop 时写入)
265
+ - `persona-manager.ts` — 用户自定义 persona 段
266
+ - 模板存放在 `src/claudemd/templates/`(build 时拷到 `dist/claudemd/templates/`)
209
267
 
210
- # 查看后台 worker 的完整 stream-json 日志
211
- ls ~/.claude-forge/logs/
268
+ 入口命令:`cf claudemd detect` / `cf claudemd init` / `cf claudemd update`(详见 `src/cli/commands/claudemd.ts`)。
212
269
 
213
- # Hook 脚本手工模拟(绕开 Claude Code)
214
- echo '{"session_id":"test","hook_type":"UserPromptSubmit","user_prompt":"重构xxx"}' | ~/.claude/hooks/user-prompt-submit.sh
270
+ ### Daemon 自动同步
215
271
 
216
- # Web 后台 SSE 实时监控(默认 3456,可在 ~/.claude-forge/config.yaml 修改 web.port)
217
- curl -N http://127.0.0.1:3456/api/methodology-executions/events
218
- ```
272
+ daemon 启动时(`src/daemon/index.ts`)执行两个一次性同步:
219
273
 
220
- ---
274
+ - `syncHooks()` — 把 `dist/hooks/*.sh` 对照 sha256 同步到 `~/.claude/hooks/`,避免用户忘了重跑 `cf init`
275
+ - `syncSkills()` — 把 `dist/skills/official/*.md` 同步到 `~/.claude/skills/`,user-owned 文件(已存在)跳过
221
276
 
222
- ## 新增方法论
223
-
224
- 1. 在 `src/capability/methodologies/` 新建 `<id>.yaml`,参考 `harness-engineering.yaml` 结构:
225
- ```yaml
226
- id: my-methodology
227
- name: "My Methodology"
228
- description: "..."
229
- trigger:
230
- taskType: [refactor, migrate]
231
- complexity: [moderate, complex]
232
- phase_templates:
233
- understand:
234
- agent: researcher
235
- description: ...
236
- prompt_template: ...
237
- artifacts:
238
- - type: file
239
- pattern: "docs/**/*behavior*.md"
240
- required: true
241
- decision_rules:
242
- - condition: "complexity == 'complex' && taskType == 'migrate'"
243
- phases: [understand, characterize, refactor, verify]
244
- description: "full workflow"
245
- ```
246
- 2. `phase_templates.<id>.agent` 必须对应 `~/.claude/agents/` 里真实存在的 agent 名(Planner 会用它生成 `phase.agent`,matcher 会严格校验)
247
- 3. 重启 daemon(Registry 启动时加载一次)
248
- 4. 在 Web UI `/methodologies` 点"新建执行"选它,或发一条符合 trigger 的 prompt
249
-
250
- ## 新增 Agent
251
-
252
- 最简方式:`~/.claude/agents/<name>.md` 按 frontmatter 规范写:
277
+ 两者都幂等,文件相同时不写盘。
253
278
 
254
- ```markdown
255
- ---
256
- name: my-agent
257
- description: "简明描述"
258
- tools: [Read, Grep, Edit]
259
- ---
279
+ ### 数据流(事件 → API → UI)
260
280
 
261
- 完整 agent 系统指令...
281
+ ```
282
+ hook event ──► writeEvent() ──┐
283
+ ──► writeTask()/task_events ─┤
284
+ ──► writeRoutingEvent() ─┼─► ~/.claude-forge/data.db
285
+ ──► writeSkillInvocation() ─┤
286
+ ──► writeInjection() ─┘
287
+
288
+
289
+ src/web/routes/*.ts (queryXxx)
290
+
291
+
292
+ GET /api/events / sessions / tasks / skill-invocations ...
293
+
294
+
295
+ web/src/pages/*.tsx (TanStack Query)
262
296
  ```
263
297
 
264
- 或通过 Web UI `/agents` 可视化编辑。daemon 启动时 AgentRegistry 会扫描并加载。
298
+ 存储:
299
+ - 主库 `~/.claude-forge/data.db`,表:`events`、`sessions`、`tasks`、`task_events`、`injections`、`routing_events`、`token_usage`、`skill_invocations`
300
+ - Schema 由 `src/core/storage/schema.sql` 初始化
301
+ - 增量改动放 `src/core/storage/migrations/*.sql`(按文件名顺序执行)
265
302
 
266
- ---
303
+ ### 长跑稳定性(v8.53.6 加)
304
+
305
+ daemon 通过三个机制保证长时间运行不膨胀:
267
306
 
268
- ## 测试规范
307
+ - **多表 GC**:`cleanOldData(30)` 定期清理 30 天前的 events / routing_events / skill_invocations / token_usage,防止数据库无限增长
308
+ - **SQLite VACUUM**:`runMaintenance(500)` 在数据库超过 500 MB 时触发 `VACUUM`,回收空间;上次 VACUUM 超 7 天也强制执行
309
+ - **Stale task 回收**:`staleTaskGcInterval` 每 5 分钟扫描并关闭异常 active 状态的 task(避免僵尸任务阻塞计数)
269
310
 
270
- - 单元测试放 `tests/unit/**/*.test.ts`,vitest include 只认这个目录
271
- - 集成测试:可以在 `tests/unit/executor/` 下用 fake 子进程的方式(参考 `background-executor.test.ts` 的 shell wrapper 手法)
272
- - E2E(真 claude -p):写进 `scripts/smoke-*.ts`,手动触发,不进 CI
273
- - 新增功能必须 at least 一个单测,关键路径需要集成测试
311
+ 相关代码:`src/core/storage/maintenance.ts`(cleanOldData / runMaintenance),daemon 在 `src/daemon/index.ts` 启动时注册定时任务。
274
312
 
275
313
  ---
276
314
 
277
- ## 发布流程
315
+ ## 添加新 Hook
278
316
 
279
- ```bash
280
- # 1. 本地全量验证
281
- npm run build:all
282
- npx tsc --noEmit && (cd web && npx tsc --noEmit)
283
- npm test
317
+ 1. 在 `src/hooks/` 加 `.sh` 脚本,复用 `hook-lib.sh` 的 payload 工具
318
+ 2. `src/daemon/event-parser.ts` 加 hook_type 解析(如有新字段)
319
+ 3. `src/daemon/router.ts` 加分发分支;如需 handler 新建 `src/daemon/handlers/<name>.ts`
320
+ 4. `src/core/types.ts` 加事件类型 + type guard
321
+ 5. 重 build 后 `cf init` 重装 hook,或重启 daemon 让 `syncHooks()` 自动覆盖
322
+ 6. 测试覆盖:hook 脚本 + handler 都要补 `tests/unit/`
323
+
324
+ > hooks/*.sh 无单元测试覆盖,改 hook 必走 Hybrid 工作流(见根 CLAUDE.md「工作流升级判定」)。
284
325
 
285
- # 2. bump version
286
- # package.json + package-lock.json 两处同步改
326
+ ## 添加新 Skill
287
327
 
288
- # 3. commit + tag
289
- git commit -am "chore: bump version to X.Y.Z"
290
- git tag vX.Y.Z
328
+ 最简方式:在 `src/skills/official/<name>.md` frontmatter:
291
329
 
292
- # 4. publish
293
- npm publish # 自动触发 prepublishOnly
330
+ ```markdown
331
+ ---
332
+ name: my-skill
333
+ description: 用一句话说明 skill 触发场景
334
+ keywords: [refactor, legacy, test]
335
+ version: 1.0.0
336
+ ---
294
337
 
295
- # 5. push
296
- git push && git push --tags
338
+ # 方法论正文
339
+
340
+ 完整的多 phase 工作流...
297
341
  ```
298
342
 
343
+ 发布后 daemon 启动会自动 sync 到用户的 `~/.claude/skills/`。如果是只面向自己的 skill,直接放 `~/.claude/skills/` 即可。
344
+
345
+ 社区 skill 升级走 `cf skills upgrade`,详见 `docs/skill-upgrade-guide.md`。
346
+
347
+ ## 添加新 CLI 子命令
348
+
349
+ 1. 在 `src/cli/commands/<name>.ts` 写 `register(program)`
350
+ 2. 在 `src/cli/index.ts` 引入并调用 `register()`
351
+ 3. 子命令测试放 `tests/unit/cli-<name>.test.ts`
352
+
299
353
  ---
300
354
 
301
- ## 排障清单
355
+ ## 故障排查
302
356
 
303
- | 现象 | 可能原因 |
357
+ | 现象 | 排查 |
304
358
  |---|---|
305
- | Hook 没触发 | `~/.claude/hooks/` 未软链到 `dist/hooks/`;跑 `cf init` 重装 |
306
- | daemon 启动报 EADDRINUSE | 上次进程没退;`cf daemon stop` 或 `lsof -i :<web.port>`(默认 3456)找 pid kill |
307
- | 方法论 execution 长期卡 0% | 前台模式需用户输入才推进;Web UI 可改用后台模式 |
308
- | BackgroundExecutor 直接报 auth 失败 | 确认 `ANTHROPIC_API_KEY` 环境变量可用,或配了 OAuth |
309
- | stream-json 行数突然变少 | claude CLI 版本升级,对齐 `stream-parser.ts` type 定义 |
310
- | Web 构建 chunk >500KB 警告 | 加新大依赖时,在 `web/vite.config.ts` `manualChunks` 追加分组 |
359
+ | Hook 没触发 | `ls -la ~/.claude/hooks/` 看是否指向 `dist/hooks/`;缺失就跑 `cf init`;或重启 daemon 让 `syncHooks()` 自动补 |
360
+ | daemon 启动报 `EADDRINUSE` | 上次进程没退;`cf daemon stop` 或 `lsof -i :3721` pid |
361
+ | Web 后台 404 | `dist/web/static/` 是否存在;`npm run build` 是否成功;Vite 前端 `cd web && npm run build` 后再 root build |
362
+ | Skill 没被推荐 | `cf skills list` 看是否加载;frontmatter 检查是否缺 `name` 字段;语义匹配需要 `cf config` 配 API key |
363
+ | `cf skills upgrade` 无候选 | `~/.claude-forge/skill-candidates/` 是否拉成功;网络问题用代理重试 |
364
+ | better-sqlite3 native binding error | Node 版本与 binding 不匹配;`npm rebuild better-sqlite3` |
365
+ | Schema 改动后查不到字段 | 手动加 `src/core/storage/migrations/<n>_<desc>.sql`,daemon 启动会自动执行 |
366
+
367
+ 调试入口:
368
+
369
+ ```bash
370
+ # daemon 日志
371
+ tail -f ~/.claude-forge/daemon.log
372
+
373
+ # 查 SQLite 运行时数据
374
+ sqlite3 ~/.claude-forge/data.db "SELECT id, hook_type, timestamp FROM events ORDER BY id DESC LIMIT 10"
375
+
376
+ # 手工模拟 hook 调用(绕开 Claude Code)
377
+ echo '{"session_id":"test","hook_type":"UserPromptSubmit","user_prompt":"重构 xxx"}' \
378
+ | ~/.claude/hooks/user-prompt-submit.sh
379
+ ```