@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,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();