@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,456 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * E2E 验证:意图 → 路由 → preset Agent
4
- *
5
- * 策略:
6
- * - 直接构造 RouteInput(绕过 AI / IntentClassifier 调用,避免成本和不确定性)
7
- * - 加载真实 shipped 的 src/engine/conventions/routing.yaml
8
- * - 调用 agentRouter.decide() 看实际路由结果
9
- * - 不修改 routing.yaml 或 agent-router 源码
10
- *
11
- * 运行:npx tsx scripts/e2e-routing.ts
12
- */
13
-
14
- import path from 'node:path';
15
- import { fileURLToPath } from 'node:url';
16
- import {
17
- AgentRouter,
18
- type RouteInput,
19
- type RouteAction,
20
- type TaskType,
21
- type Complexity,
22
- type ActionVerb,
23
- type Artifact,
24
- type Domain,
25
- } from '../src/engine/agent-router.js';
26
-
27
- const __filename = fileURLToPath(import.meta.url);
28
- const __dirname = path.dirname(__filename);
29
-
30
- // 加载真实的 routing.yaml(与 tests/unit/agent-router-bmad-harness.test.ts 同模式)
31
- const SHIPPED_YAML = path.resolve(
32
- __dirname,
33
- '..',
34
- 'src',
35
- 'engine',
36
- 'conventions',
37
- 'routing.yaml',
38
- );
39
-
40
- function makeRouter(): AgentRouter {
41
- // userPath 指向不存在的路径,确保使用 shipped default
42
- return new AgentRouter({
43
- defaultPath: SHIPPED_YAML,
44
- userPath: '/nonexistent/forge-routing.yaml',
45
- });
46
- }
47
-
48
- // ── 测试用例类型 ─────────────────────────────────────────
49
- type ExpectedKind =
50
- | { kind: 'agent'; name: string }
51
- | { kind: 'agent_group' }
52
- | { kind: 'skill' }
53
- | { kind: 'none' }
54
- | { kind: 'not_agent'; name: string }; // 验证不是某 agent
55
-
56
- interface TestCase {
57
- name: string;
58
- input: {
59
- taskType: TaskType;
60
- complexity: Complexity;
61
- action?: ActionVerb;
62
- artifact?: Artifact;
63
- domain?: Domain;
64
- };
65
- expected: ExpectedKind;
66
- note?: string;
67
- }
68
-
69
- const TEST_CASES: TestCase[] = [
70
- // ── BMAD Feature 路由 ──────────────────────────
71
- {
72
- name: '复杂新功能 → bmad-feature-full',
73
- input: { taskType: 'add_feature', complexity: 'complex' },
74
- expected: { kind: 'agent', name: 'bmad-feature-full' },
75
- },
76
- {
77
- name: '中等新功能 → bmad-feature-quick',
78
- input: { taskType: 'add_feature', complexity: 'moderate' },
79
- expected: { kind: 'agent', name: 'bmad-feature-quick' },
80
- },
81
- {
82
- name: '简单新功能 → feature-developer (兜底)',
83
- input: { taskType: 'add_feature', complexity: 'simple' },
84
- expected: { kind: 'agent', name: 'feature-developer' },
85
- note: '简单任务保留原 Agent',
86
- },
87
-
88
- // ── BMAD Spec Only 路由 ────────────────────────
89
- {
90
- name: '需求分析 complex → bmad-spec-only',
91
- input: { taskType: 'analyze_requirement', complexity: 'complex' },
92
- expected: { kind: 'agent', name: 'bmad-spec-only' },
93
- },
94
- {
95
- name: '需求分析 moderate → bmad-spec-only',
96
- input: { taskType: 'analyze_requirement', complexity: 'moderate' },
97
- expected: { kind: 'agent', name: 'bmad-spec-only' },
98
- },
99
- {
100
- name: '架构设计 moderate → bmad-spec-only',
101
- input: { taskType: 'design_architecture', complexity: 'moderate' },
102
- expected: { kind: 'agent', name: 'bmad-spec-only' },
103
- },
104
- {
105
- name: 'API 设计 complex → bmad-spec-only',
106
- input: { taskType: 'design_api', complexity: 'complex' },
107
- expected: { kind: 'agent', name: 'bmad-spec-only' },
108
- },
109
- {
110
- name: 'Schema 设计 moderate → bmad-spec-only',
111
- input: { taskType: 'design_schema', complexity: 'moderate' },
112
- expected: { kind: 'agent', name: 'bmad-spec-only' },
113
- },
114
- {
115
- name: '简单需求分析 → planner (兜底,无方法论)',
116
- input: { taskType: 'analyze_requirement', complexity: 'simple' },
117
- expected: { kind: 'agent', name: 'planner' },
118
- note: 'simple 时 BMAD 规则不命中',
119
- },
120
-
121
- // ── Harness 路由 ───────────────────────────────
122
- {
123
- name: '复杂 bug → harness-debug-full',
124
- input: { taskType: 'fix_bug', complexity: 'complex' },
125
- expected: { kind: 'agent', name: 'harness-debug-full' },
126
- },
127
- {
128
- name: '中等 bug → coder (无 harness-hotfix 自动路由)',
129
- input: { taskType: 'fix_bug', complexity: 'moderate' },
130
- expected: { kind: 'agent', name: 'coder' },
131
- note: '中等 fix_bug 不应触发 hotfix',
132
- },
133
- {
134
- name: '简单 bug → coder (兜底)',
135
- input: { taskType: 'fix_bug', complexity: 'simple' },
136
- expected: { kind: 'agent', name: 'coder' },
137
- note: '简单任务保留原 Agent',
138
- },
139
- {
140
- name: '复杂调查 → harness-debug-full',
141
- input: { taskType: 'investigate', complexity: 'complex' },
142
- expected: { kind: 'agent', name: 'harness-debug-full' },
143
- },
144
- {
145
- name: '中等调查 → harness-investigate',
146
- input: { taskType: 'investigate', complexity: 'moderate' },
147
- expected: { kind: 'agent', name: 'harness-investigate' },
148
- },
149
- {
150
- name: '简单调查 → researcher (兜底)',
151
- input: { taskType: 'investigate', complexity: 'simple' },
152
- expected: { kind: 'agent', name: 'researcher' },
153
- },
154
-
155
- // ── V2 维度路由 ────────────────────────────────
156
- {
157
- name: 'V2: other + 代码级复杂调查 → harness-debug-full',
158
- input: {
159
- taskType: 'other',
160
- complexity: 'complex',
161
- action: 'investigate',
162
- artifact: 'code',
163
- },
164
- expected: { kind: 'agent', name: 'harness-debug-full' },
165
- note: 'V2 axes 救援路由',
166
- },
167
- {
168
- name: 'V2: other + 代码级中等调查 → harness-investigate',
169
- input: {
170
- taskType: 'other',
171
- complexity: 'moderate',
172
- action: 'investigate',
173
- artifact: 'code',
174
- },
175
- expected: { kind: 'agent', name: 'harness-investigate' },
176
- note: 'V2 axes 救援路由',
177
- },
178
- {
179
- name: 'V2: build 调查 → researcher (V2 precision 优先于方法论)',
180
- input: {
181
- taskType: 'investigate',
182
- complexity: 'complex',
183
- action: 'investigate',
184
- artifact: 'build',
185
- },
186
- expected: { kind: 'agent', name: 'researcher' },
187
- note: 'V2 precision 规则在方法论之前评估',
188
- },
189
- {
190
- name: 'V2: fix build → refactor-specialist',
191
- input: {
192
- taskType: 'fix_bug',
193
- complexity: 'complex',
194
- action: 'fix',
195
- artifact: 'build',
196
- },
197
- expected: { kind: 'agent', name: 'refactor-specialist' },
198
- note: 'V2 precision 规则覆盖 fix_bug+complex',
199
- },
200
- {
201
- name: 'V2: explain + complex → researcher',
202
- input: {
203
- taskType: 'explain',
204
- complexity: 'complex',
205
- action: 'explain',
206
- },
207
- expected: { kind: 'agent', name: 'researcher' },
208
- },
209
-
210
- // ── Agent Group 路由 ───────────────────────────
211
- {
212
- name: 'multi_domain + complex → route_to_agent_group',
213
- input: { taskType: 'multi_domain', complexity: 'complex' },
214
- expected: { kind: 'agent_group' },
215
- note: '并行执行场景',
216
- },
217
-
218
- // ── 边界场景 ───────────────────────────────────
219
- {
220
- name: 'other → general-purpose (兜底)',
221
- input: { taskType: 'other', complexity: 'simple' },
222
- expected: { kind: 'agent', name: 'general-purpose' },
223
- note: 'fallback 路径',
224
- },
225
- {
226
- name: 'add_feature + simple + V2(create+code) 不应触发 BMAD',
227
- input: {
228
- taskType: 'add_feature',
229
- complexity: 'simple',
230
- action: 'create',
231
- artifact: 'code',
232
- },
233
- expected: { kind: 'agent', name: 'feature-developer' },
234
- note: 'V2 axes 不应错误激活 BMAD',
235
- },
236
-
237
- // ── harness-hotfix 防错路由 ────────────────────
238
- {
239
- name: 'harness-hotfix 不被自动路由 (fix_bug + simple)',
240
- input: { taskType: 'fix_bug', complexity: 'simple' },
241
- expected: { kind: 'not_agent', name: 'harness-hotfix' },
242
- note: 'hotfix 应该手动调用',
243
- },
244
- {
245
- name: 'harness-hotfix 不被自动路由 (fix_bug + moderate)',
246
- input: { taskType: 'fix_bug', complexity: 'moderate' },
247
- expected: { kind: 'not_agent', name: 'harness-hotfix' },
248
- },
249
- {
250
- name: 'harness-hotfix 不被自动路由 (fix_bug + complex)',
251
- input: { taskType: 'fix_bug', complexity: 'complex' },
252
- expected: { kind: 'not_agent', name: 'harness-hotfix' },
253
- },
254
- ];
255
-
256
- // ── 工具函数 ────────────────────────────────────────────
257
- function actionToString(action: RouteAction): string {
258
- switch (action.type) {
259
- case 'route_to_agent':
260
- return `agent:${action.name}`;
261
- case 'route_to_agent_group':
262
- return `agent_group:[${action.agents.map((a) => a.name).join(',')}]`;
263
- case 'route_to_skill':
264
- return `skill:${action.strategy}`;
265
- case 'none':
266
- return 'none';
267
- }
268
- }
269
-
270
- function expectedToString(exp: ExpectedKind): string {
271
- switch (exp.kind) {
272
- case 'agent':
273
- return `agent:${exp.name}`;
274
- case 'agent_group':
275
- return 'agent_group:*';
276
- case 'skill':
277
- return 'skill:*';
278
- case 'none':
279
- return 'none';
280
- case 'not_agent':
281
- return `NOT agent:${exp.name}`;
282
- }
283
- }
284
-
285
- function checkExpected(actual: RouteAction, expected: ExpectedKind): boolean {
286
- switch (expected.kind) {
287
- case 'agent':
288
- return actual.type === 'route_to_agent' && actual.name === expected.name;
289
- case 'agent_group':
290
- return actual.type === 'route_to_agent_group';
291
- case 'skill':
292
- return actual.type === 'route_to_skill';
293
- case 'none':
294
- return actual.type === 'none';
295
- case 'not_agent':
296
- // 必须不是指定 agent;其他任何路由都算通过
297
- return !(actual.type === 'route_to_agent' && actual.name === expected.name);
298
- }
299
- }
300
-
301
- // ── 执行测试 ─────────────────────────────────────────────
302
- console.log('='.repeat(60));
303
- console.log(' 路由 E2E 验证 (真实 routing.yaml + 真实 AgentRouter)');
304
- console.log('='.repeat(60));
305
- console.log(`Routing YAML: ${SHIPPED_YAML}`);
306
-
307
- const router = makeRouter();
308
- const rules = router.getRules();
309
- console.log(`Loaded ${rules.length} routing rules\n`);
310
-
311
- let passed = 0;
312
- let failed = 0;
313
- const failures: { tc: TestCase; actual: string }[] = [];
314
-
315
- for (const tc of TEST_CASES) {
316
- const input: RouteInput = {
317
- taskType: tc.input.taskType,
318
- complexity: tc.input.complexity,
319
- };
320
- if (tc.input.action !== undefined) input.action = tc.input.action;
321
- if (tc.input.artifact !== undefined) input.artifact = tc.input.artifact;
322
- if (tc.input.domain !== undefined) input.domain = tc.input.domain;
323
-
324
- const decision = router.decide(input);
325
- const actualStr = actionToString(decision.action);
326
- const expectedStr = expectedToString(tc.expected);
327
- const pass = checkExpected(decision.action, tc.expected);
328
-
329
- const mark = pass ? 'PASS' : 'FAIL';
330
- const noteStr = tc.note ? ` [${tc.note}]` : '';
331
- console.log(
332
- `[${mark}] ${tc.name}\n` +
333
- ` expected=${expectedStr} actual=${actualStr} matchedRule=${decision.matchedRuleIndex}${noteStr}`,
334
- );
335
-
336
- if (pass) {
337
- passed++;
338
- } else {
339
- failed++;
340
- failures.push({ tc, actual: actualStr });
341
- }
342
- }
343
-
344
- // ── 跨规则优先级专项验证 ─────────────────────────────
345
- console.log('\n' + '─'.repeat(60));
346
- console.log(' 跨规则优先级专项验证');
347
- console.log('─'.repeat(60));
348
-
349
- interface PriorityCheck {
350
- name: string;
351
- input: RouteInput;
352
- expected: ExpectedKind;
353
- rationale: string;
354
- }
355
-
356
- const PRIORITY_CHECKS: PriorityCheck[] = [
357
- {
358
- name: 'V2 precision > 方法论 (build 调查)',
359
- input: {
360
- taskType: 'investigate',
361
- complexity: 'complex',
362
- action: 'investigate',
363
- artifact: 'build',
364
- },
365
- expected: { kind: 'agent', name: 'researcher' },
366
- rationale: 'V2 precision 规则在 YAML 中位列第一,应该优先于方法论规则',
367
- },
368
- {
369
- name: '方法论 > 通用兜底 (复杂 add_feature)',
370
- input: { taskType: 'add_feature', complexity: 'complex' },
371
- expected: { kind: 'agent', name: 'bmad-feature-full' },
372
- rationale: '复杂任务应优先匹配方法论 Agent,而非通用 feature-developer',
373
- },
374
- {
375
- name: '简单任务 > 方法论 fallback (简单 add_feature)',
376
- input: { taskType: 'add_feature', complexity: 'simple' },
377
- expected: { kind: 'agent', name: 'feature-developer' },
378
- rationale: '简单任务应该绕过方法论规则,命中通用 add_feature 兜底',
379
- },
380
- ];
381
-
382
- let pPassed = 0;
383
- let pFailed = 0;
384
-
385
- for (const pc of PRIORITY_CHECKS) {
386
- const decision = router.decide(pc.input);
387
- const actual = actionToString(decision.action);
388
- const exp = expectedToString(pc.expected);
389
- const pass = checkExpected(decision.action, pc.expected);
390
- console.log(`[${pass ? 'PASS' : 'FAIL'}] ${pc.name}`);
391
- console.log(` 理由: ${pc.rationale}`);
392
- console.log(` expected=${exp} actual=${actual} matchedRule=${decision.matchedRuleIndex}`);
393
- pass ? pPassed++ : pFailed++;
394
- }
395
-
396
- // ── harness-hotfix 全空间扫描 ──────────────────────
397
- console.log('\n' + '─'.repeat(60));
398
- console.log(' harness-hotfix 全空间扫描 (确保不被自动路由)');
399
- console.log('─'.repeat(60));
400
-
401
- const HOTFIX_SCAN_INPUTS: RouteInput[] = [
402
- // 各种 fix_bug 组合
403
- { taskType: 'fix_bug', complexity: 'simple' },
404
- { taskType: 'fix_bug', complexity: 'moderate' },
405
- { taskType: 'fix_bug', complexity: 'complex' },
406
- // 各种 investigate 组合
407
- { taskType: 'investigate', complexity: 'simple' },
408
- { taskType: 'investigate', complexity: 'moderate' },
409
- { taskType: 'investigate', complexity: 'complex' },
410
- // 带 V2 axes 的 fix
411
- { taskType: 'fix_bug', complexity: 'complex', action: 'fix', artifact: 'code' },
412
- { taskType: 'fix_bug', complexity: 'moderate', action: 'fix', artifact: 'code' },
413
- { taskType: 'fix_bug', complexity: 'simple', action: 'fix', artifact: 'code' },
414
- ];
415
-
416
- let hotfixViolations = 0;
417
- for (const input of HOTFIX_SCAN_INPUTS) {
418
- const decision = router.decide(input);
419
- const isHotfix =
420
- decision.action.type === 'route_to_agent' && decision.action.name === 'harness-hotfix';
421
- const tag = `${input.taskType}+${input.complexity}${input.action ? `+${input.action}` : ''}${input.artifact ? `+${input.artifact}` : ''}`;
422
- const actualName = actionToString(decision.action);
423
- if (isHotfix) {
424
- console.log(`[FAIL] ${tag} → ${actualName} (不应路由到 harness-hotfix)`);
425
- hotfixViolations++;
426
- } else {
427
- console.log(`[PASS] ${tag} → ${actualName}`);
428
- }
429
- }
430
-
431
- // ── 总结 ─────────────────────────────────────────────────
432
- console.log('\n' + '='.repeat(60));
433
- console.log(' Summary');
434
- console.log('='.repeat(60));
435
- console.log(`Test cases: ${passed}/${passed + failed} passed`);
436
- console.log(`Priority checks: ${pPassed}/${pPassed + pFailed} passed`);
437
- console.log(
438
- `Hotfix scan: ${HOTFIX_SCAN_INPUTS.length - hotfixViolations}/${HOTFIX_SCAN_INPUTS.length} passed (violations=${hotfixViolations})`,
439
- );
440
-
441
- if (failures.length > 0) {
442
- console.log('\nFailures:');
443
- for (const f of failures) {
444
- console.log(` - ${f.tc.name}`);
445
- console.log(` expected=${expectedToString(f.tc.expected)} actual=${f.actual}`);
446
- }
447
- }
448
-
449
- const totalFailed = failed + pFailed + hotfixViolations;
450
- if (totalFailed === 0) {
451
- console.log('\n>>> RESULT: PASS <<<');
452
- process.exit(0);
453
- } else {
454
- console.log(`\n>>> RESULT: FAIL (${totalFailed} failures) <<<`);
455
- process.exit(1);
456
- }