@winspan/claude-forge 8.53.2 → 8.54.3

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