@winspan/claude-forge 8.51.1 → 8.54.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/DEVELOPMENT.md +290 -221
  2. package/README.md +50 -8
  3. package/dist/cli/commands/skills.d.ts.map +1 -1
  4. package/dist/cli/commands/skills.js +121 -2
  5. package/dist/cli/commands/skills.js.map +1 -1
  6. package/dist/cli/init/hook-manager.d.ts +1 -1
  7. package/dist/cli/init/hook-manager.d.ts.map +1 -1
  8. package/dist/cli/init/hook-manager.js +1 -0
  9. package/dist/cli/init/hook-manager.js.map +1 -1
  10. package/dist/core/constants.d.ts +2 -0
  11. package/dist/core/constants.d.ts.map +1 -1
  12. package/dist/core/constants.js +4 -0
  13. package/dist/core/constants.js.map +1 -1
  14. package/dist/core/storage/events.d.ts.map +1 -1
  15. package/dist/core/storage/events.js +0 -1
  16. package/dist/core/storage/events.js.map +1 -1
  17. package/dist/core/storage/maintenance.d.ts +25 -3
  18. package/dist/core/storage/maintenance.d.ts.map +1 -1
  19. package/dist/core/storage/maintenance.js +33 -4
  20. package/dist/core/storage/maintenance.js.map +1 -1
  21. package/dist/core/storage/routing.d.ts +4 -0
  22. package/dist/core/storage/routing.d.ts.map +1 -1
  23. package/dist/core/storage/routing.js +10 -4
  24. package/dist/core/storage/routing.js.map +1 -1
  25. package/dist/core/storage/sessions.d.ts +17 -0
  26. package/dist/core/storage/sessions.d.ts.map +1 -1
  27. package/dist/core/storage/sessions.js +64 -0
  28. package/dist/core/storage/sessions.js.map +1 -1
  29. package/dist/core/storage/skills.d.ts +4 -0
  30. package/dist/core/storage/skills.d.ts.map +1 -1
  31. package/dist/core/storage/skills.js +10 -2
  32. package/dist/core/storage/skills.js.map +1 -1
  33. package/dist/core/storage/sqlite.d.ts +5 -0
  34. package/dist/core/storage/sqlite.d.ts.map +1 -1
  35. package/dist/core/storage/sqlite.js +6 -0
  36. package/dist/core/storage/sqlite.js.map +1 -1
  37. package/dist/core/storage/tasks.d.ts.map +1 -1
  38. package/dist/core/storage/tasks.js +2 -0
  39. package/dist/core/storage/tasks.js.map +1 -1
  40. package/dist/core/types.d.ts +7 -0
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/daemon/index.d.ts.map +1 -1
  43. package/dist/daemon/index.js +30 -5
  44. package/dist/daemon/index.js.map +1 -1
  45. package/dist/daemon/skill-sync.d.ts +21 -0
  46. package/dist/daemon/skill-sync.d.ts.map +1 -0
  47. package/dist/daemon/skill-sync.js +75 -0
  48. package/dist/daemon/skill-sync.js.map +1 -0
  49. package/dist/hooks/notification.sh +1 -1
  50. package/dist/hooks/post-tool-use.sh +1 -1
  51. package/dist/hooks/pre-tool-use.sh +1 -1
  52. package/dist/hooks/stop.sh +1 -1
  53. package/dist/hooks/user-prompt-submit.sh +1 -1
  54. package/dist/skills/official/code-simplifier.md +37 -1
  55. package/dist/skills/official/find-skills.md +120 -1
  56. package/dist/skills/official/official-api-design.md +14 -1
  57. package/dist/skills/official/official-architecture-decision.md +22 -1
  58. package/dist/skills/official/official-db-schema-design.md +19 -1
  59. package/dist/skills/official/official-debug.md +9 -1
  60. package/dist/skills/official/official-pr-review.md +1 -1
  61. package/dist/skills/official/official-security-hardening.md +7 -1
  62. package/dist/skills/official/planning-with-files.md +206 -2
  63. package/dist/skills/official/ui-ux-pro-max.md +88 -1
  64. package/dist/skills/official/webapp-testing.md +85 -1
  65. package/dist/skills/registry.d.ts +1 -1
  66. package/dist/skills/registry.d.ts.map +1 -1
  67. package/dist/skills/registry.js +15 -4
  68. package/dist/skills/registry.js.map +1 -1
  69. package/dist/skills/semantic-matcher.d.ts +4 -3
  70. package/dist/skills/semantic-matcher.d.ts.map +1 -1
  71. package/dist/skills/semantic-matcher.js +20 -22
  72. package/dist/skills/semantic-matcher.js.map +1 -1
  73. package/dist/skills/upgrade-engine.d.ts +93 -0
  74. package/dist/skills/upgrade-engine.d.ts.map +1 -0
  75. package/dist/skills/upgrade-engine.js +447 -0
  76. package/dist/skills/upgrade-engine.js.map +1 -0
  77. package/dist/skills/upgrade-prompt.d.ts +20 -0
  78. package/dist/skills/upgrade-prompt.d.ts.map +1 -0
  79. package/dist/skills/upgrade-prompt.js +75 -0
  80. package/dist/skills/upgrade-prompt.js.map +1 -0
  81. package/dist/web/analytics/weekly-report.d.ts.map +1 -1
  82. package/dist/web/analytics/weekly-report.js +21 -29
  83. package/dist/web/analytics/weekly-report.js.map +1 -1
  84. package/dist/web/routes/patch.d.ts.map +1 -1
  85. package/dist/web/routes/patch.js +32 -2
  86. package/dist/web/routes/patch.js.map +1 -1
  87. package/dist/web/routes/sessions.d.ts.map +1 -1
  88. package/dist/web/routes/sessions.js +9 -7
  89. package/dist/web/routes/sessions.js.map +1 -1
  90. package/dist/web/routes/trace.d.ts.map +1 -1
  91. package/dist/web/routes/trace.js +2 -3
  92. package/dist/web/routes/trace.js.map +1 -1
  93. package/dist/web/server.d.ts.map +1 -1
  94. package/dist/web/server.js +3 -2
  95. package/dist/web/server.js.map +1 -1
  96. package/package.json +12 -2
  97. package/scripts/postinstall.cjs +21 -0
  98. package/.claude/CLAUDE.md +0 -17
  99. package/.eslintrc.js +0 -23
  100. package/.prettierrc +0 -8
  101. package/ARCHITECTURE_ISSUES.md +0 -249
  102. package/CLAUDE.md +0 -265
  103. package/CLAUDE.md.backup +0 -488
  104. package/docs/concurrent-agents.md +0 -129
  105. package/docs/design/architecture-review-20260516.md +0 -232
  106. package/docs/design/fix-skills-data-and-set-leak-spec-20260516-1300.md +0 -219
  107. package/docs/design/h1-storage-aggregation-spec-20260518-1121.md +0 -299
  108. package/docs/design/h2-getdatabase-encapsulation-spec-20260518-1450.md +0 -191
  109. package/docs/design/h3-fallback-removal-spec-20260518-1245.md +0 -76
  110. package/docs/design/h4-index-dedup-spec-20260518-1230.md +0 -109
  111. package/docs/design/h6-services-migration-spec-20260518-1355.md +0 -82
  112. package/docs/design/hook-failure-queue-spec-20260516-1530.md +0 -204
  113. package/docs/design/l1-swarm-protocol-extract-spec-20260518-1605.md +0 -106
  114. package/docs/design/m10-forge-paths-spec-20260518-1320.md +0 -121
  115. package/docs/design/m2-m3-tool-input-spec-20260518-1425.md +0 -131
  116. package/docs/design/m7-routing-event-association-spec-20260518-1545.md +0 -103
  117. package/docs/design/project-path-gitroot-spec-20260518-1715.md +0 -134
  118. package/docs/design/refactor-phase1-spec-20260515-1600.md +0 -543
  119. package/docs/design/refactor-phase2-spec-20260515-1700.md +0 -424
  120. package/docs/design/task-active-gc-spec-20260518-1745.md +0 -146
  121. package/docs/design/tasks-list-filter-pagination-spec-20260518-0930.md +0 -208
  122. package/docs/implementation/fix-skills-data-and-set-leak-changelog-20260516-1300.md +0 -104
  123. package/docs/implementation/h1-storage-aggregation-changelog-20260518-1121.md +0 -82
  124. package/docs/implementation/h2-final-changelog-20260518-1530.md +0 -61
  125. package/docs/implementation/h2-phase1-safety-net-changelog-20260518-1450.md +0 -70
  126. package/docs/implementation/h2-phase2-operations-changelog-20260518-1450.md +0 -120
  127. package/docs/implementation/h2-phase3-callsites-changelog-20260518-1450.md +0 -71
  128. package/docs/implementation/h3-fallback-removal-changelog-20260518-1245.md +0 -71
  129. package/docs/implementation/h4-index-dedup-changelog-20260518-1230.md +0 -60
  130. package/docs/implementation/h6-services-migration-changelog-20260518-1355.md +0 -46
  131. package/docs/implementation/h7-m9-defaults-changelog-20260518-1300.md +0 -46
  132. package/docs/implementation/hook-failure-queue-changelog-20260516-1530.md +0 -196
  133. package/docs/implementation/hotfix-daemon-event-reject-20260516-1430.md +0 -56
  134. package/docs/implementation/l1-swarm-protocol-extract-changelog-20260518-1605.md +0 -45
  135. package/docs/implementation/l3-l4-daemon-perf-changelog-20260518-1410.md +0 -63
  136. package/docs/implementation/l6-l8-final-cleanup-changelog-20260518-1640.md +0 -38
  137. package/docs/implementation/m1-m4-m5-l7-cleanup-changelog-20260518-1310.md +0 -58
  138. package/docs/implementation/m10-forge-paths-changelog-20260518-1320.md +0 -60
  139. package/docs/implementation/m2-m3-tool-input-changelog-20260518-1425.md +0 -43
  140. package/docs/implementation/m6-m8-naming-shutdown-changelog-20260518-1340.md +0 -56
  141. package/docs/implementation/m7-routing-association-changelog-20260518-1545.md +0 -69
  142. package/docs/implementation/project-path-gitroot-changelog-20260518-1715.md +0 -63
  143. package/docs/implementation/refactor-phase1-changelog-20260515-1630.md +0 -354
  144. package/docs/implementation/refactor-phase2-changelog-20260515-1705.md +0 -421
  145. package/docs/implementation/task-active-gc-changelog-20260518-1745.md +0 -35
  146. package/docs/implementation/task-title-summary-changelog-20260518-1130.md +0 -39
  147. package/docs/implementation/tasks-detail-back-loses-filters-changelog-20260518-1100.md +0 -22
  148. package/docs/implementation/tasks-list-filter-pagination-changelog-20260518-0930.md +0 -72
  149. package/docs/implementation/tasks-page-white-screen-hotfix-changelog-20260518-1015.md +0 -56
  150. package/docs/reviews/claudemd-template-sync.md +0 -54
  151. package/docs/reviews/task-title-summary.md +0 -92
  152. package/docs/reviews/tasks-detail-back-loses-filters.md +0 -58
  153. package/docs/reviews/tasks-filter-pagination.md +0 -80
  154. package/docs/reviews/tasks-page-white-screen-hotfix.md +0 -126
  155. package/docs/ruflo-learning-strategy.md +0 -322
  156. package/docs/skills-deduplication-analysis.md +0 -83
  157. package/docs/skills-multiformat-support.md +0 -177
  158. package/docs/skills-third-party.md +0 -183
  159. package/docs/testing/tasks-filter-pagination-test-report.md +0 -86
  160. package/forge +0 -321
  161. package/playwright.config.ts +0 -40
  162. package/scripts/demo-v2.ts +0 -91
  163. package/scripts/dev-daemon.sh +0 -232
  164. package/scripts/dev-web.ts +0 -109
  165. package/scripts/e2e-mcp-link.ts +0 -423
  166. package/scripts/e2e-methodology-quality.ts +0 -253
  167. package/scripts/e2e-routing.ts +0 -456
  168. package/scripts/e2e-user-methodology.ts +0 -326
  169. package/scripts/e2e-web-workflows.ts +0 -299
  170. package/scripts/migrate-legacy-to-dynamic.sql +0 -108
  171. package/scripts/regenerate-execution-docs.ts +0 -116
  172. package/scripts/sync-agent-skills.ts +0 -193
  173. package/scripts/test-hook.sh +0 -71
  174. package/scripts/verify-skill-loading.ts +0 -62
  175. package/src/claudemd/claudemd-generator.ts +0 -568
  176. package/src/claudemd/convention-extractor.ts +0 -69
  177. package/src/claudemd/index.ts +0 -35
  178. package/src/claudemd/persona-manager.ts +0 -88
  179. package/src/claudemd/resume-manager.ts +0 -236
  180. package/src/claudemd/tech-detector.ts +0 -220
  181. package/src/claudemd/templates/swarm-protocol.md +0 -222
  182. package/src/cli/commands/claudemd.ts +0 -84
  183. package/src/cli/commands/config.ts +0 -46
  184. package/src/cli/commands/daemon.ts +0 -310
  185. package/src/cli/commands/executions.ts +0 -115
  186. package/src/cli/commands/init.ts +0 -204
  187. package/src/cli/commands/logs.ts +0 -181
  188. package/src/cli/commands/mcp.ts +0 -242
  189. package/src/cli/commands/menu.ts +0 -357
  190. package/src/cli/commands/skills.ts +0 -185
  191. package/src/cli/commands/stats.ts +0 -73
  192. package/src/cli/commands/status.ts +0 -69
  193. package/src/cli/commands/template.ts +0 -77
  194. package/src/cli/commands/trace.ts +0 -148
  195. package/src/cli/index.ts +0 -42
  196. package/src/cli/init/hook-manager.ts +0 -132
  197. package/src/core/ai/provider.ts +0 -308
  198. package/src/core/ai/types.ts +0 -51
  199. package/src/core/config.ts +0 -124
  200. package/src/core/constants.ts +0 -62
  201. package/src/core/event-fields.ts +0 -32
  202. package/src/core/queue/index.ts +0 -192
  203. package/src/core/storage/base.ts +0 -302
  204. package/src/core/storage/events.ts +0 -434
  205. package/src/core/storage/injections.ts +0 -78
  206. package/src/core/storage/maintenance.ts +0 -59
  207. package/src/core/storage/migrations/002_add_skill_tracking.sql +0 -6
  208. package/src/core/storage/migrations/003_add_skill_invocations.sql +0 -23
  209. package/src/core/storage/performance-indexes.sql +0 -23
  210. package/src/core/storage/routing.ts +0 -322
  211. package/src/core/storage/rows.ts +0 -112
  212. package/src/core/storage/schema.sql +0 -224
  213. package/src/core/storage/sessions.ts +0 -168
  214. package/src/core/storage/skills.ts +0 -233
  215. package/src/core/storage/sqlite.ts +0 -293
  216. package/src/core/storage/tasks.ts +0 -318
  217. package/src/core/storage/token-usage.ts +0 -93
  218. package/src/core/types.ts +0 -181
  219. package/src/core/utils/error-handler.ts +0 -257
  220. package/src/core/utils/forge-resume-block.ts +0 -74
  221. package/src/core/utils/format.ts +0 -69
  222. package/src/core/utils/git.ts +0 -23
  223. package/src/core/utils/logger.ts +0 -134
  224. package/src/core/utils/lru-cache.ts +0 -54
  225. package/src/core/utils/path.ts +0 -19
  226. package/src/core/utils/session.ts +0 -26
  227. package/src/core/utils/time.ts +0 -37
  228. package/src/core/utils/token-tracker.ts +0 -97
  229. package/src/daemon/event-parser.ts +0 -36
  230. package/src/daemon/handlers/history-exporter.ts +0 -117
  231. package/src/daemon/handlers/post-tool-use.ts +0 -54
  232. package/src/daemon/handlers/stop.ts +0 -208
  233. package/src/daemon/handlers/user-prompt.ts +0 -178
  234. package/src/daemon/hook-sync.ts +0 -91
  235. package/src/daemon/index.ts +0 -302
  236. package/src/daemon/launchd/com.claude-forge.daemon.plist.template +0 -47
  237. package/src/daemon/launchd-installer.ts +0 -260
  238. package/src/daemon/lifecycle.ts +0 -128
  239. package/src/daemon/router.ts +0 -40
  240. package/src/daemon/server.ts +0 -196
  241. package/src/daemon/services/task-segmenter.ts +0 -112
  242. package/src/hooks/hook-lib.sh +0 -118
  243. package/src/hooks/notification.sh +0 -35
  244. package/src/hooks/post-tool-use.sh +0 -61
  245. package/src/hooks/pre-tool-use.sh +0 -63
  246. package/src/hooks/stop.sh +0 -43
  247. package/src/hooks/user-prompt-submit.sh +0 -69
  248. package/src/mcp/server.ts +0 -322
  249. package/src/skills/index.ts +0 -2
  250. package/src/skills/invocation-guard.ts +0 -177
  251. package/src/skills/matcher.ts +0 -148
  252. package/src/skills/official/code-simplifier.md +0 -16
  253. package/src/skills/official/find-skills.md +0 -23
  254. package/src/skills/official/official-api-design.md +0 -17
  255. package/src/skills/official/official-architecture-decision.md +0 -20
  256. package/src/skills/official/official-bmad.md +0 -118
  257. package/src/skills/official/official-db-schema-design.md +0 -16
  258. package/src/skills/official/official-debug.md +0 -17
  259. package/src/skills/official/official-doc-driven.md +0 -31
  260. package/src/skills/official/official-harness-engineering.md +0 -108
  261. package/src/skills/official/official-performance-optimization.md +0 -30
  262. package/src/skills/official/official-pr-review.md +0 -35
  263. package/src/skills/official/official-release-checklist.md +0 -30
  264. package/src/skills/official/official-security-hardening.md +0 -26
  265. package/src/skills/official/official-spec-driven-design.md +0 -31
  266. package/src/skills/official/planning-with-files.md +0 -37
  267. package/src/skills/official/ui-ux-pro-max.md +0 -18
  268. package/src/skills/official/webapp-testing.md +0 -12
  269. package/src/skills/official-skills.ts +0 -89
  270. package/src/skills/registry.ts +0 -355
  271. package/src/skills/semantic-matcher.ts +0 -231
  272. package/src/skills/tools/pipeline-suggest.ts +0 -226
  273. package/src/skills/tools/skill-invoke.ts +0 -168
  274. package/src/skills/tools/skill-list.ts +0 -59
  275. package/src/templates/go.yaml +0 -53
  276. package/src/templates/python.yaml +0 -59
  277. package/src/templates/react.yaml +0 -55
  278. package/src/templates/template-manager.ts +0 -170
  279. package/src/web/analytics/anti-pattern-detector.ts +0 -367
  280. package/src/web/analytics/drift-detector.ts +0 -219
  281. package/src/web/analytics/weekly-report.ts +0 -431
  282. package/src/web/auth-middleware.ts +0 -54
  283. package/src/web/routes/_helpers.ts +0 -34
  284. package/src/web/routes/ai.ts +0 -204
  285. package/src/web/routes/auth.ts +0 -22
  286. package/src/web/routes/drift.ts +0 -25
  287. package/src/web/routes/error-handler.ts +0 -120
  288. package/src/web/routes/events.ts +0 -47
  289. package/src/web/routes/insights.ts +0 -43
  290. package/src/web/routes/patch.ts +0 -117
  291. package/src/web/routes/reports.ts +0 -34
  292. package/src/web/routes/rules.ts +0 -76
  293. package/src/web/routes/sessions.ts +0 -250
  294. package/src/web/routes/skill-stats.ts +0 -92
  295. package/src/web/routes/skills.ts +0 -350
  296. package/src/web/routes/static.ts +0 -67
  297. package/src/web/routes/stats.ts +0 -50
  298. package/src/web/routes/status.ts +0 -30
  299. package/src/web/routes/tasks.ts +0 -193
  300. package/src/web/routes/token-usage.ts +0 -20
  301. package/src/web/routes/trace.ts +0 -126
  302. package/src/web/routes/types.ts +0 -57
  303. package/src/web/server.ts +0 -134
  304. package/src/web/ssrf-guard.ts +0 -112
  305. package/src/web/static/index.html +0 -3251
  306. package/src/web/static/vendor/chart.umd.min.js +0 -20
  307. package/tests/e2e/dashboard.spec.ts +0 -205
  308. package/tests/e2e/routing-skill-e2e.test.ts +0 -39
  309. package/tests/helpers/mock-ai.ts +0 -92
  310. package/tests/helpers/mock-storage.ts +0 -159
  311. package/tests/integration/claudemd-generator.test.ts +0 -90
  312. package/tests/integration/queue-replay.integration.test.ts +0 -193
  313. package/tests/integration/tasks-filter.integration.test.ts +0 -154
  314. package/tests/integration/web-analytics.integration.test.ts +0 -133
  315. package/tests/integration/web-stats.integration.test.ts +0 -135
  316. package/tests/integration/web-trace.integration.test.ts +0 -175
  317. package/tests/performance/database.benchmark.ts +0 -161
  318. package/tests/semantic-matcher.test.ts +0 -99
  319. package/tests/skill-matcher.test.ts +0 -110
  320. package/tests/unit/ai-provider-retry.test.ts +0 -194
  321. package/tests/unit/ai-provider-vision.test.ts +0 -224
  322. package/tests/unit/claudemd-generator.test.ts +0 -68
  323. package/tests/unit/cli-mcp.test.ts +0 -141
  324. package/tests/unit/core/forge-paths.test.ts +0 -99
  325. package/tests/unit/daemon/hook-sync.test.ts +0 -71
  326. package/tests/unit/daemon/post-tool-use.test.ts +0 -121
  327. package/tests/unit/daemon/stop-handler-behavior-summary.test.ts +0 -202
  328. package/tests/unit/daemon/task-segmenter-recover.test.ts +0 -84
  329. package/tests/unit/event-fields.test.ts +0 -88
  330. package/tests/unit/event-parser.test.ts +0 -55
  331. package/tests/unit/handlers.test.ts +0 -171
  332. package/tests/unit/hooks/resolve-project-path.test.ts +0 -122
  333. package/tests/unit/invocation-guard.test.ts +0 -125
  334. package/tests/unit/queue.test.ts +0 -272
  335. package/tests/unit/router.test.ts +0 -138
  336. package/tests/unit/security.test.ts +0 -128
  337. package/tests/unit/skill-invocations-workflow.test.ts +0 -495
  338. package/tests/unit/skill-registry.test.ts +0 -94
  339. package/tests/unit/skills/invocation-guard-ttl.test.ts +0 -211
  340. package/tests/unit/skills/official-skills-loader.test.ts +0 -126
  341. package/tests/unit/skills/registry-multiformat.test.ts +0 -92
  342. package/tests/unit/socket-server.test.ts +0 -183
  343. package/tests/unit/storage/event-operations-aggregates.test.ts +0 -342
  344. package/tests/unit/storage/migration-idempotent.test.ts +0 -304
  345. package/tests/unit/storage/routing-aggregates.test.ts +0 -276
  346. package/tests/unit/storage/routing.test.ts +0 -117
  347. package/tests/unit/storage/schema-missing.test.ts +0 -81
  348. package/tests/unit/storage/session-operations-aggregates.test.ts +0 -120
  349. package/tests/unit/storage/sessions-aggregate.test.ts +0 -435
  350. package/tests/unit/storage/skill-operations-counts.test.ts +0 -106
  351. package/tests/unit/storage/skills-aggregates.test.ts +0 -104
  352. package/tests/unit/storage/sqlite-refactor-harness.test.ts +0 -314
  353. package/tests/unit/storage/task-operations-counts.test.ts +0 -46
  354. package/tests/unit/storage/tasks-getById.test.ts +0 -343
  355. package/tests/unit/storage/tasks-stale-gc.test.ts +0 -86
  356. package/tests/unit/storage.test.ts +0 -172
  357. package/tests/unit/token-usage.test.ts +0 -144
  358. package/tests/unit/type-guards.test.ts +0 -201
  359. package/tests/unit/utils/format.test.ts +0 -189
  360. package/tests/unit/utils/session.test.ts +0 -89
  361. package/tests/unit/utils/time.test.ts +0 -112
  362. package/tests/unit/web/navigation-back-contract.test.ts +0 -134
  363. package/tests/unit/web/routes-auth.test.ts +0 -93
  364. package/tests/unit/web/routes-events.test.ts +0 -101
  365. package/tests/unit/web/routes-rules.test.ts +0 -182
  366. package/tests/unit/web/routes-sessions.test.ts +0 -181
  367. package/tests/unit/web/routes-skill-stats.test.ts +0 -179
  368. package/tests/unit/web/routes-stats.test.ts +0 -92
  369. package/tests/unit/web/routes-tasks.test.ts +0 -385
  370. package/tests/unit/web/task-title-contract.test.ts +0 -210
  371. package/tests/unit/web/tasks-component-contract.test.ts +0 -179
  372. package/tsconfig.json +0 -22
  373. package/vitest.config.ts +0 -21
  374. package/vitest.integration.config.ts +0 -16
  375. package/web/CLAUDE.md +0 -20
  376. package/web/index.html +0 -13
  377. package/web/package-lock.json +0 -4854
  378. package/web/package.json +0 -35
  379. package/web/postcss.config.js +0 -6
  380. package/web/src/App.tsx +0 -110
  381. package/web/src/components/CodeBlock.tsx +0 -31
  382. package/web/src/components/Confirm.tsx +0 -96
  383. package/web/src/components/Drawer.tsx +0 -60
  384. package/web/src/components/Layout.tsx +0 -145
  385. package/web/src/components/MarkdownRenderer.tsx +0 -77
  386. package/web/src/components/SearchInput.tsx +0 -31
  387. package/web/src/components/SessionDetailContent.tsx +0 -157
  388. package/web/src/components/Toast.tsx +0 -92
  389. package/web/src/index.css +0 -19
  390. package/web/src/main.tsx +0 -31
  391. package/web/src/pages/AIConfig.tsx +0 -233
  392. package/web/src/pages/Dashboard.tsx +0 -572
  393. package/web/src/pages/Events.tsx +0 -271
  394. package/web/src/pages/Reports.tsx +0 -428
  395. package/web/src/pages/SessionDetail.tsx +0 -162
  396. package/web/src/pages/Sessions.tsx +0 -205
  397. package/web/src/pages/Skills.tsx +0 -180
  398. package/web/src/pages/TaskDetail.tsx +0 -515
  399. package/web/src/pages/Tasks.tsx +0 -415
  400. package/web/src/utils/auth.ts +0 -59
  401. package/web/src/utils/export.ts +0 -54
  402. package/web/src/utils/navigation.ts +0 -25
  403. package/web/src/utils/task-title.ts +0 -49
  404. package/web/src/utils/time.ts +0 -13
  405. package/web/tailwind.config.js +0 -11
  406. package/web/tsconfig.json +0 -21
  407. package/web/tsconfig.node.json +0 -10
  408. package/web/vite.config.ts +0 -76
  409. package/winspan-claude-forge-8.43.0.tgz +0 -0
@@ -1,91 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * Rule Engine Smoke Demo
5
- */
6
-
7
- import path from 'node:path';
8
- import { RuleEngine } from '../src/engine/rule-engine.js';
9
- import { EvidenceStore } from '../src/engine/evidence-store.js';
10
- import { ContextBuilder } from '../src/engine/context-builder.js';
11
- import type { ForgeEvent } from '../src/core/types.js';
12
-
13
- console.log('=== Claude Forge Rule Demo ===\n');
14
-
15
- const conventionsDir = path.join(process.cwd(), 'src/engine/conventions');
16
- const engine = new RuleEngine(conventionsDir);
17
- engine.loadAll();
18
-
19
- const conventions = engine.getConventions();
20
- console.log(`✓ 加载了 ${conventions.size} 个 Convention:`);
21
- for (const [id, conv] of conventions) {
22
- console.log(` - ${id}: ${conv.name} (v${conv.version})`);
23
- }
24
- console.log();
25
-
26
- const evidenceStore = new EvidenceStore();
27
- const contextBuilder = new ContextBuilder(evidenceStore);
28
-
29
- const blockedEvent: ForgeEvent = {
30
- event_id: 'evt-001',
31
- session_id: 'demo-session',
32
- project_path: '/demo/project',
33
- timestamp: new Date().toISOString(),
34
- hook_type: 'PreToolUse',
35
- tool_name: 'Bash',
36
- tool_input: { command: 'git push --force origin main' },
37
- };
38
-
39
- const blockedContext = contextBuilder.build(blockedEvent, {
40
- sessionStartTime: Date.now(),
41
- gitBranch: 'main',
42
- });
43
- const blockedEvaluation = engine.evaluateDetailed(blockedContext);
44
-
45
- console.log('场景 1: git push --force origin main');
46
- console.log(` 决策: ${blockedEvaluation.decision.level}`);
47
- console.log(` 规则: ${blockedEvaluation.decision.rule_id}`);
48
- console.log(` 原因: ${blockedEvaluation.decision.reason}`);
49
- console.log(` 命中数: ${blockedEvaluation.matches.length}`);
50
- if (blockedEvaluation.matches[0]?.operator_guidance) {
51
- console.log(` 指引: ${blockedEvaluation.matches[0].operator_guidance}`);
52
- }
53
- console.log();
54
-
55
- const safeEvent: ForgeEvent = {
56
- event_id: 'evt-002',
57
- session_id: 'demo-session',
58
- project_path: '/demo/project',
59
- timestamp: new Date().toISOString(),
60
- hook_type: 'PreToolUse',
61
- tool_name: 'Bash',
62
- tool_input: { command: 'git status' },
63
- };
64
-
65
- const safeContext = contextBuilder.build(safeEvent, {
66
- sessionStartTime: Date.now(),
67
- gitBranch: 'main',
68
- });
69
- const safeEvaluation = engine.evaluateDetailed(safeContext);
70
-
71
- console.log('场景 2: git status');
72
- console.log(` 决策: ${safeEvaluation.decision.level}`);
73
- console.log();
74
-
75
- const blockedToolEvent = contextBuilder.toToolEvent(blockedEvent, false, blockedEvaluation.decision.reason);
76
- evidenceStore.recordEvent('demo-session', blockedToolEvent);
77
- evidenceStore.recordDecision('demo-session', blockedEvaluation.decision, blockedToolEvent);
78
-
79
- const safeToolEvent = contextBuilder.toToolEvent(safeEvent, true);
80
- evidenceStore.recordEvent('demo-session', safeToolEvent);
81
-
82
- const stats = evidenceStore.getStats('demo-session');
83
- console.log('会话统计:');
84
- console.log(` 工具调用: ${stats.tool_calls}`);
85
- console.log(` 总失败: ${stats.total_failures}`);
86
- console.log(` 阻断次数: ${stats.total_blocks}`);
87
- console.log(` 警告次数: ${stats.total_warns}`);
88
- console.log();
89
-
90
- console.log('=== Demo 完成 ===');
91
- console.log('可继续启动 daemon + web,查看 /api/decisions 和 /api/decisions/stream。');
@@ -1,232 +0,0 @@
1
- #!/bin/bash
2
- # Development daemon management script
3
- # Always uses the local build, not the global installation
4
-
5
- set -e
6
-
7
- PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8
- DAEMON_SCRIPT="$PROJECT_ROOT/dist/daemon/index.js"
9
- PID_FILE="$HOME/.claude-forge/daemon.pid"
10
- LOG_FILE="$HOME/.claude-forge/daemon-dev.log"
11
-
12
- # Use system node (no version pinning)
13
- if [ -z "$NODE_BIN" ]; then
14
- NODE_BIN="node"
15
- fi
16
-
17
- function get_pid() {
18
- if [ -f "$PID_FILE" ]; then
19
- cat "$PID_FILE"
20
- fi
21
- }
22
-
23
- function is_running() {
24
- local pid=$(get_pid)
25
- if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
26
- return 0
27
- fi
28
- return 1
29
- }
30
-
31
- function find_orphan_daemons() {
32
- # 查找所有 dist/daemon/index.js 进程(不管是否在 PID 文件里)
33
- # 排除当前脚本自己和 grep 进程
34
- pgrep -f "node.*${PROJECT_ROOT}/dist/daemon/index.js" 2>/dev/null || true
35
- }
36
-
37
- function stop_daemon() {
38
- local stopped_any=0
39
-
40
- # 1. 先按 PID 文件杀主 daemon
41
- if is_running; then
42
- local pid=$(get_pid)
43
- echo "Stopping daemon (PID: $pid)..."
44
- kill -TERM "$pid" 2>/dev/null || true
45
- sleep 1
46
- if kill -0 "$pid" 2>/dev/null; then
47
- echo "Force killing daemon..."
48
- kill -9 "$pid" 2>/dev/null || true
49
- fi
50
- stopped_any=1
51
- fi
52
- rm -f "$PID_FILE"
53
-
54
- # 2. 兜底:清理所有孤儿 daemon 进程(没写 PID 文件的、或 PID 文件不同步的)
55
- local orphan_pids=$(find_orphan_daemons)
56
- if [ -n "$orphan_pids" ]; then
57
- echo "Found orphan daemon process(es): $orphan_pids"
58
- # shellcheck disable=SC2086
59
- kill -TERM $orphan_pids 2>/dev/null || true
60
- sleep 1
61
- # 仍存活的强制杀掉
62
- local still_alive=$(find_orphan_daemons)
63
- if [ -n "$still_alive" ]; then
64
- echo "Force killing orphan(s): $still_alive"
65
- # shellcheck disable=SC2086
66
- kill -9 $still_alive 2>/dev/null || true
67
- fi
68
- stopped_any=1
69
- fi
70
-
71
- if [ $stopped_any -eq 1 ]; then
72
- echo "Daemon stopped"
73
- else
74
- echo "Daemon not running"
75
- fi
76
- }
77
-
78
- function start_daemon() {
79
- if is_running; then
80
- echo "Daemon already running (PID: $(get_pid))"
81
- return 1
82
- fi
83
-
84
- # 检查是否有孤儿 daemon 占着端口(PID 文件不在但进程还在)
85
- local orphan_pids=$(find_orphan_daemons)
86
- if [ -n "$orphan_pids" ]; then
87
- echo "Warning: found orphan daemon process(es) without PID file: $orphan_pids"
88
- echo "Cleaning up before starting..."
89
- # shellcheck disable=SC2086
90
- kill -9 $orphan_pids 2>/dev/null || true
91
- sleep 1
92
- fi
93
-
94
- if [ ! -f "$DAEMON_SCRIPT" ]; then
95
- echo "Error: Daemon script not found at $DAEMON_SCRIPT"
96
- echo "Run 'npm run build' first"
97
- return 1
98
- fi
99
-
100
- echo "Starting daemon from local build..."
101
- echo "Script: $DAEMON_SCRIPT"
102
- echo "Log: $LOG_FILE"
103
-
104
- # Start daemon in background with FORGE_DAEMON_FOREGROUND=1
105
- FORGE_DAEMON_FOREGROUND=1 nohup "$NODE_BIN" "$DAEMON_SCRIPT" > "$LOG_FILE" 2>&1 &
106
- local pid=$!
107
-
108
- # Wait for daemon to start (check PID file or port)
109
- local max_wait=10
110
- local waited=0
111
- while [ $waited -lt $max_wait ]; do
112
- sleep 1
113
- waited=$((waited + 1))
114
-
115
- # Check if PID file exists and process is running
116
- if [ -f "$PID_FILE" ]; then
117
- local daemon_pid=$(cat "$PID_FILE")
118
- if kill -0 "$daemon_pid" 2>/dev/null; then
119
- echo "Daemon started (PID: $daemon_pid)"
120
- echo "✅ Using LOCAL build (not global installation)"
121
- return 0
122
- fi
123
- fi
124
-
125
- # Also check if the spawned process is still alive
126
- if ! kill -0 "$pid" 2>/dev/null; then
127
- echo "Error: Daemon process died during startup"
128
- echo "Check log: $LOG_FILE"
129
- if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then
130
- echo ""
131
- echo "Last 20 lines of log:"
132
- tail -20 "$LOG_FILE"
133
- fi
134
- return 1
135
- fi
136
- done
137
-
138
- echo "Error: Daemon failed to start within ${max_wait}s"
139
- echo "Check log: $LOG_FILE"
140
- if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then
141
- echo ""
142
- echo "Last 20 lines of log:"
143
- tail -20 "$LOG_FILE"
144
- fi
145
- return 1
146
- }
147
-
148
- function restart_daemon() {
149
- stop_daemon
150
- sleep 1
151
- start_daemon
152
- }
153
-
154
- function status_daemon() {
155
- if is_running; then
156
- local pid=$(get_pid)
157
- echo "Daemon is running (PID: $pid)"
158
-
159
- # Check which version is running
160
- local exe=$(ps -p "$pid" -o command= | awk '{print $2}')
161
- if [[ "$exe" == *"$PROJECT_ROOT"* ]]; then
162
- echo "✅ Running LOCAL build"
163
- else
164
- echo "⚠️ Running GLOBAL installation: $exe"
165
- fi
166
-
167
- # Show recent logs
168
- if [ -f "$LOG_FILE" ]; then
169
- echo ""
170
- echo "Recent logs:"
171
- tail -10 "$LOG_FILE"
172
- fi
173
- else
174
- echo "Daemon is not running"
175
- fi
176
-
177
- # 检查是否有未被 PID 文件追踪的孤儿 daemon
178
- local orphan_pids=$(find_orphan_daemons)
179
- if [ -n "$orphan_pids" ]; then
180
- local tracked_pid=$(get_pid)
181
- local orphans=""
182
- for opid in $orphan_pids; do
183
- if [ "$opid" != "$tracked_pid" ]; then
184
- orphans="$orphans $opid"
185
- fi
186
- done
187
- if [ -n "$orphans" ]; then
188
- echo ""
189
- echo "⚠️ Orphan daemon process(es) detected (not in PID file):$orphans"
190
- echo " Run '$0 stop' to clean them up."
191
- fi
192
- fi
193
- }
194
-
195
- function logs_daemon() {
196
- if [ -f "$LOG_FILE" ]; then
197
- tail -f "$LOG_FILE"
198
- else
199
- echo "Log file not found: $LOG_FILE"
200
- fi
201
- }
202
-
203
- case "${1:-}" in
204
- start)
205
- start_daemon
206
- ;;
207
- stop)
208
- stop_daemon
209
- ;;
210
- restart)
211
- restart_daemon
212
- ;;
213
- status)
214
- status_daemon
215
- ;;
216
- logs)
217
- logs_daemon
218
- ;;
219
- *)
220
- echo "Usage: $0 {start|stop|restart|status|logs}"
221
- echo ""
222
- echo "Development daemon management (always uses local build)"
223
- echo ""
224
- echo "Commands:"
225
- echo " start - Start the daemon from local build"
226
- echo " stop - Stop the daemon"
227
- echo " restart - Restart the daemon"
228
- echo " status - Check daemon status"
229
- echo " logs - Tail daemon logs"
230
- exit 1
231
- ;;
232
- esac
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Dev watch mode for web frontend files.
4
- *
5
- * Watches src/web/static/ for changes and syncs to:
6
- * - dist/web/static/ (local build output)
7
- * - $(npm root -g)/@winspan/claude-forge/dist/web/static/ (global install)
8
- *
9
- * This avoids having to run `npm run build && npm link` after every edit.
10
- *
11
- * Usage: npm run dev:web
12
- */
13
-
14
- import fs from 'fs';
15
- import path from 'path';
16
- import { execSync } from 'child_process';
17
- import { fileURLToPath } from 'url';
18
-
19
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
20
- const ROOT = path.resolve(__dirname, '..');
21
- const SRC_DIR = path.join(ROOT, 'src/web/static');
22
- const LOCAL_DIST = path.join(ROOT, 'dist/web/static');
23
-
24
- function globalInstallPath(): string | null {
25
- try {
26
- const npmRoot = execSync('npm root -g', { encoding: 'utf-8' }).trim();
27
- const candidate = path.join(npmRoot, '@winspan/claude-forge/dist/web/static');
28
- return fs.existsSync(candidate) ? candidate : null;
29
- } catch {
30
- return null;
31
- }
32
- }
33
-
34
- function syncFile(relPath: string, targets: string[]) {
35
- const srcPath = path.join(SRC_DIR, relPath);
36
- if (!fs.existsSync(srcPath)) return;
37
-
38
- for (const target of targets) {
39
- const destPath = path.join(target, relPath);
40
- fs.mkdirSync(path.dirname(destPath), { recursive: true });
41
- fs.copyFileSync(srcPath, destPath);
42
- }
43
-
44
- const ts = new Date().toLocaleTimeString('zh-CN');
45
- console.log(`[${ts}] ✓ 已同步 ${relPath} → ${targets.length} 个位置`);
46
- }
47
-
48
- function syncAll(targets: string[]) {
49
- const entries = fs.readdirSync(SRC_DIR, { recursive: true, withFileTypes: true });
50
- for (const entry of entries) {
51
- if (!entry.isFile()) continue;
52
- const relPath = path.relative(SRC_DIR, path.join((entry as any).parentPath ?? entry.path, entry.name));
53
- syncFile(relPath, targets);
54
- }
55
- }
56
-
57
- function main() {
58
- if (!fs.existsSync(SRC_DIR)) {
59
- console.error(`✗ 源目录不存在: ${SRC_DIR}`);
60
- process.exit(1);
61
- }
62
-
63
- const targets: string[] = [];
64
-
65
- if (fs.existsSync(path.dirname(LOCAL_DIST))) {
66
- targets.push(LOCAL_DIST);
67
- } else {
68
- console.warn(`⚠ dist/ 不存在,请先运行 npm run build(将跳过本地 dist 同步)`);
69
- }
70
-
71
- const globalPath = globalInstallPath();
72
- if (globalPath) {
73
- targets.push(globalPath);
74
- console.log(`→ 全局安装路径: ${globalPath}`);
75
- } else {
76
- console.warn(`⚠ 未检测到全局安装的 @winspan/claude-forge(将跳过全局同步)`);
77
- console.warn(` 如需测试生产环境,请先运行: npm link`);
78
- }
79
-
80
- if (targets.length === 0) {
81
- console.error('✗ 没有可用的同步目标,退出');
82
- process.exit(1);
83
- }
84
-
85
- console.log(`\n📂 监听源: ${SRC_DIR}`);
86
- console.log(`🎯 同步目标: ${targets.length} 个`);
87
- console.log(`\n首次全量同步...\n`);
88
- syncAll(targets);
89
-
90
- console.log(`\n👀 开始监听变更(Ctrl+C 退出)...\n`);
91
-
92
- let debounceTimer: NodeJS.Timeout | null = null;
93
- const pending = new Set<string>();
94
-
95
- fs.watch(SRC_DIR, { recursive: true }, (eventType, filename) => {
96
- if (!filename) return;
97
- if (filename.endsWith('.backup') || filename.endsWith('.tmp')) return;
98
-
99
- pending.add(filename);
100
-
101
- if (debounceTimer) clearTimeout(debounceTimer);
102
- debounceTimer = setTimeout(() => {
103
- for (const f of pending) syncFile(f, targets);
104
- pending.clear();
105
- }, 100);
106
- });
107
- }
108
-
109
- main();