@winspan/claude-forge 3.1.0 → 3.5.2

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 (357) hide show
  1. package/README.md +2 -2
  2. package/dist/ai/base-provider.d.ts.map +1 -0
  3. package/dist/ai/base-provider.js.map +1 -0
  4. package/dist/ai/factory.d.ts.map +1 -0
  5. package/dist/ai/factory.js.map +1 -0
  6. package/dist/{ai-gateway → ai}/index.d.ts +2 -2
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/ai/model-selector.d.ts.map +1 -0
  10. package/dist/ai/model-selector.js.map +1 -0
  11. package/dist/ai/ollama-provider.d.ts.map +1 -0
  12. package/dist/ai/ollama-provider.js.map +1 -0
  13. package/dist/ai/openai-provider.d.ts.map +1 -0
  14. package/dist/ai/openai-provider.js.map +1 -0
  15. package/dist/ai/rate-limiter.d.ts.map +1 -0
  16. package/dist/ai/rate-limiter.js.map +1 -0
  17. package/dist/ai/response-cache.d.ts.map +1 -0
  18. package/dist/ai/response-cache.js.map +1 -0
  19. package/dist/ai/token-budget.d.ts.map +1 -0
  20. package/dist/ai/token-budget.js.map +1 -0
  21. package/dist/ai/types.d.ts.map +1 -0
  22. package/dist/ai/types.js.map +1 -0
  23. package/dist/autopilot/index.d.ts +0 -1
  24. package/dist/autopilot/index.d.ts.map +1 -1
  25. package/dist/autopilot/index.js +0 -1
  26. package/dist/autopilot/index.js.map +1 -1
  27. package/dist/autopilot/issue-tracker.d.ts +1 -1
  28. package/dist/autopilot/issue-tracker.d.ts.map +1 -1
  29. package/dist/autopilot/issue-tracker.js +1 -1
  30. package/dist/autopilot/issue-tracker.js.map +1 -1
  31. package/dist/autopilot/phase-gap-detector.d.ts +1 -1
  32. package/dist/autopilot/phase-gap-detector.d.ts.map +1 -1
  33. package/dist/autopilot/phase-gap-detector.js +1 -1
  34. package/dist/autopilot/phase-gap-detector.js.map +1 -1
  35. package/dist/autopilot/quality-gate.d.ts +2 -2
  36. package/dist/autopilot/quality-gate.d.ts.map +1 -1
  37. package/dist/autopilot/quality-gate.js +2 -2
  38. package/dist/autopilot/quality-gate.js.map +1 -1
  39. package/dist/autopilot/rule-distiller.d.ts +1 -1
  40. package/dist/autopilot/rule-distiller.d.ts.map +1 -1
  41. package/dist/autopilot/task-completion-detector.d.ts +2 -2
  42. package/dist/autopilot/task-completion-detector.d.ts.map +1 -1
  43. package/dist/claudemd/index.d.ts +1 -1
  44. package/dist/claudemd/index.d.ts.map +1 -1
  45. package/dist/claudemd/writer.js +1 -1
  46. package/dist/claudemd/writer.js.map +1 -1
  47. package/dist/cli/commands/pipeline.d.ts.map +1 -1
  48. package/dist/cli/commands/pipeline.js +3 -13
  49. package/dist/cli/commands/pipeline.js.map +1 -1
  50. package/dist/convention/convention-distiller.d.ts +1 -1
  51. package/dist/convention/convention-distiller.d.ts.map +1 -1
  52. package/dist/convention/convention-evolver.d.ts +1 -1
  53. package/dist/convention/convention-evolver.d.ts.map +1 -1
  54. package/dist/daemon/engine-registry/init-autopilot.d.ts +3 -3
  55. package/dist/daemon/engine-registry/init-autopilot.d.ts.map +1 -1
  56. package/dist/daemon/engine-registry/init-autopilot.js +7 -8
  57. package/dist/daemon/engine-registry/init-autopilot.js.map +1 -1
  58. package/dist/daemon/engine-registry/init-distill.d.ts +1 -1
  59. package/dist/daemon/engine-registry/init-distill.d.ts.map +1 -1
  60. package/dist/daemon/engine-registry/init-pipeline.d.ts +1 -1
  61. package/dist/daemon/engine-registry/init-pipeline.d.ts.map +1 -1
  62. package/dist/daemon/engine-registry/init-resume.d.ts +1 -1
  63. package/dist/daemon/engine-registry/init-resume.d.ts.map +1 -1
  64. package/dist/daemon/engine-registry/init-skill-registry.d.ts +1 -1
  65. package/dist/daemon/engine-registry/init-skill-registry.d.ts.map +1 -1
  66. package/dist/daemon/engine-registry.d.ts +1 -1
  67. package/dist/daemon/engine-registry.d.ts.map +1 -1
  68. package/dist/daemon/engine-registry.js +6 -6
  69. package/dist/daemon/engine-registry.js.map +1 -1
  70. package/dist/daemon/handler-context.d.ts +6 -6
  71. package/dist/daemon/handler-context.d.ts.map +1 -1
  72. package/dist/daemon/handlers/context-builder.js +1 -1
  73. package/dist/daemon/handlers/context-builder.js.map +1 -1
  74. package/dist/daemon/handlers/orchestration-context.d.ts +1 -1
  75. package/dist/daemon/handlers/orchestration-context.d.ts.map +1 -1
  76. package/dist/daemon/handlers/post-tool-use-handler.js +4 -4
  77. package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
  78. package/dist/daemon/handlers/session-cleanup.d.ts.map +1 -1
  79. package/dist/daemon/handlers/session-cleanup.js +2 -16
  80. package/dist/daemon/handlers/session-cleanup.js.map +1 -1
  81. package/dist/daemon/handlers/stages/06-engine-check.js +1 -1
  82. package/dist/daemon/handlers/stages/06-engine-check.js.map +1 -1
  83. package/dist/daemon/handlers/stages/09-pipeline-active.d.ts.map +1 -1
  84. package/dist/daemon/handlers/stages/09-pipeline-active.js +0 -7
  85. package/dist/daemon/handlers/stages/09-pipeline-active.js.map +1 -1
  86. package/dist/daemon/handlers/stages/11-intent-analysis.d.ts +1 -1
  87. package/dist/daemon/handlers/stages/11-intent-analysis.d.ts.map +1 -1
  88. package/dist/daemon/handlers/stages/11-intent-analysis.js +12 -6
  89. package/dist/daemon/handlers/stages/11-intent-analysis.js.map +1 -1
  90. package/dist/daemon/handlers/stages/18-complex-task.js +1 -1
  91. package/dist/daemon/handlers/stages/18-complex-task.js.map +1 -1
  92. package/dist/daemon/handlers/stages/19-moderate-task.js +2 -2
  93. package/dist/daemon/handlers/stages/19-moderate-task.js.map +1 -1
  94. package/dist/daemon/handlers/stop-handler.js +3 -3
  95. package/dist/daemon/handlers/stop-handler.js.map +1 -1
  96. package/dist/daemon/handlers/user-prompt-handler.js +1 -1
  97. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  98. package/dist/daemon/index.js +3 -3
  99. package/dist/daemon/index.js.map +1 -1
  100. package/dist/distill/index.d.ts +1 -1
  101. package/dist/distill/index.d.ts.map +1 -1
  102. package/dist/distill/tree-index.d.ts +1 -1
  103. package/dist/distill/tree-index.d.ts.map +1 -1
  104. package/dist/distill/trigger.js +1 -1
  105. package/dist/distill/trigger.js.map +1 -1
  106. package/dist/distill/writer.d.ts +1 -1
  107. package/dist/distill/writer.d.ts.map +1 -1
  108. package/dist/goal/goal-classifier.d.ts +38 -0
  109. package/dist/goal/goal-classifier.d.ts.map +1 -0
  110. package/dist/{autopilot/intent-engine.js → goal/goal-classifier.js} +187 -297
  111. package/dist/goal/goal-classifier.js.map +1 -0
  112. package/dist/goal/goal-decomposer.d.ts +32 -0
  113. package/dist/goal/goal-decomposer.d.ts.map +1 -0
  114. package/dist/{pipeline/analyzer.js → goal/goal-decomposer.js} +45 -112
  115. package/dist/goal/goal-decomposer.js.map +1 -0
  116. package/dist/goal/goal-planner.d.ts +16 -0
  117. package/dist/goal/goal-planner.d.ts.map +1 -0
  118. package/dist/goal/goal-planner.js +90 -0
  119. package/dist/goal/goal-planner.js.map +1 -0
  120. package/dist/goal/goal-types.d.ts +62 -0
  121. package/dist/goal/goal-types.d.ts.map +1 -0
  122. package/dist/goal/goal-types.js +8 -0
  123. package/dist/goal/goal-types.js.map +1 -0
  124. package/dist/goal/index.d.ts +5 -0
  125. package/dist/goal/index.d.ts.map +1 -0
  126. package/dist/goal/index.js +4 -0
  127. package/dist/goal/index.js.map +1 -0
  128. package/dist/pipeline/artifact-generator.d.ts +1 -1
  129. package/dist/pipeline/artifact-generator.d.ts.map +1 -1
  130. package/dist/pipeline/artifact-generator.js +0 -1
  131. package/dist/pipeline/artifact-generator.js.map +1 -1
  132. package/dist/pipeline/dynamic-node-executor.d.ts +3 -29
  133. package/dist/pipeline/dynamic-node-executor.d.ts.map +1 -1
  134. package/dist/pipeline/dynamic-node-executor.js +49 -115
  135. package/dist/pipeline/dynamic-node-executor.js.map +1 -1
  136. package/dist/pipeline/execution-plan.d.ts +1 -1
  137. package/dist/pipeline/execution-plan.d.ts.map +1 -1
  138. package/dist/pipeline/index.d.ts +5 -13
  139. package/dist/pipeline/index.d.ts.map +1 -1
  140. package/dist/pipeline/index.js +23 -63
  141. package/dist/pipeline/index.js.map +1 -1
  142. package/dist/pipeline/node-runtime.d.ts +41 -0
  143. package/dist/pipeline/node-runtime.d.ts.map +1 -0
  144. package/dist/pipeline/node-runtime.js +73 -0
  145. package/dist/pipeline/node-runtime.js.map +1 -0
  146. package/dist/pipeline/semantic-validator.d.ts +1 -1
  147. package/dist/pipeline/semantic-validator.d.ts.map +1 -1
  148. package/dist/pipeline/step-orchestrator.d.ts +1 -1
  149. package/dist/pipeline/step-orchestrator.d.ts.map +1 -1
  150. package/dist/pipeline/store.d.ts +18 -48
  151. package/dist/pipeline/store.d.ts.map +1 -1
  152. package/dist/pipeline/store.js +101 -424
  153. package/dist/pipeline/store.js.map +1 -1
  154. package/dist/pipeline/template-router.d.ts +1 -1
  155. package/dist/pipeline/template-router.d.ts.map +1 -1
  156. package/dist/pipeline/types.d.ts +3 -3
  157. package/dist/pipeline/types.d.ts.map +1 -1
  158. package/dist/pipeline/types.js +1 -1
  159. package/dist/pipeline/types.js.map +1 -1
  160. package/dist/resume/context-gen.d.ts +1 -1
  161. package/dist/resume/context-gen.d.ts.map +1 -1
  162. package/dist/resume/index.d.ts +1 -1
  163. package/dist/resume/index.d.ts.map +1 -1
  164. package/dist/retrospective/index.d.ts +1 -1
  165. package/dist/retrospective/index.d.ts.map +1 -1
  166. package/dist/retrospective/pattern-learner.d.ts +1 -1
  167. package/dist/retrospective/pattern-learner.d.ts.map +1 -1
  168. package/dist/skill-registry/collector.d.ts +1 -1
  169. package/dist/skill-registry/collector.d.ts.map +1 -1
  170. package/dist/skill-registry/evolver/community-distiller.d.ts +1 -1
  171. package/dist/skill-registry/evolver/community-distiller.d.ts.map +1 -1
  172. package/dist/skill-registry/evolver/generation-engine.d.ts +1 -1
  173. package/dist/skill-registry/evolver/generation-engine.d.ts.map +1 -1
  174. package/dist/skill-registry/evolver/index.d.ts +1 -1
  175. package/dist/skill-registry/evolver/index.d.ts.map +1 -1
  176. package/dist/skill-registry/evolver/keyword-evolver.d.ts +1 -1
  177. package/dist/skill-registry/evolver/keyword-evolver.d.ts.map +1 -1
  178. package/dist/skill-registry/evolver/official-evolver.d.ts +1 -1
  179. package/dist/skill-registry/evolver/official-evolver.d.ts.map +1 -1
  180. package/dist/skill-registry/evolver/optimization-engine.d.ts +1 -1
  181. package/dist/skill-registry/evolver/optimization-engine.d.ts.map +1 -1
  182. package/dist/skill-registry/evolver/repair-engine.d.ts +1 -1
  183. package/dist/skill-registry/evolver/repair-engine.d.ts.map +1 -1
  184. package/dist/skill-registry/index.d.ts +1 -1
  185. package/dist/skill-registry/index.d.ts.map +1 -1
  186. package/dist/skill-registry/official-sync/skill-definitions.d.ts.map +1 -1
  187. package/dist/skill-registry/official-sync/skill-definitions.js +675 -0
  188. package/dist/skill-registry/official-sync/skill-definitions.js.map +1 -1
  189. package/dist/skill-registry/orchestrator.d.ts +1 -1
  190. package/dist/skill-registry/orchestrator.d.ts.map +1 -1
  191. package/dist/skill-registry/pattern-evolver.d.ts +1 -1
  192. package/dist/skill-registry/pattern-evolver.d.ts.map +1 -1
  193. package/dist/skill-registry/project-learner.d.ts +1 -1
  194. package/dist/skill-registry/project-learner.d.ts.map +1 -1
  195. package/dist/{core/types.d.ts → types/core-types.d.ts} +1 -1
  196. package/dist/types/core-types.d.ts.map +1 -0
  197. package/dist/{core/types.js → types/core-types.js} +1 -1
  198. package/dist/types/core-types.js.map +1 -0
  199. package/dist/utils/cache-registry.d.ts.map +1 -0
  200. package/dist/utils/cache-registry.js.map +1 -0
  201. package/dist/utils/circuit-breaker.js +1 -1
  202. package/dist/utils/circuit-breaker.js.map +1 -1
  203. package/dist/utils/claude-api.d.ts +3 -3
  204. package/dist/utils/claude-api.d.ts.map +1 -1
  205. package/dist/utils/claude-api.js +2 -2
  206. package/dist/utils/claude-api.js.map +1 -1
  207. package/dist/utils/error-handler.d.ts +0 -4
  208. package/dist/utils/error-handler.d.ts.map +1 -1
  209. package/dist/utils/error-handler.js +0 -20
  210. package/dist/utils/error-handler.js.map +1 -1
  211. package/dist/utils/pending-prompt-sink.d.ts.map +1 -0
  212. package/dist/utils/pending-prompt-sink.js.map +1 -0
  213. package/dist/web/routes/pipelines.d.ts.map +1 -1
  214. package/dist/web/routes/pipelines.js +68 -12
  215. package/dist/web/routes/pipelines.js.map +1 -1
  216. package/dist/web/routes/quality.d.ts +1 -1
  217. package/dist/web/routes/quality.d.ts.map +1 -1
  218. package/dist/web/server.d.ts +1 -1
  219. package/dist/web/server.d.ts.map +1 -1
  220. package/dist/web-static/assets/{index-DABYEmUB.js → index-3iTzJKjz.js} +1 -1
  221. package/dist/web-static/index.html +1 -1
  222. package/package.json +1 -1
  223. package/dist/ai-gateway/index.d.ts.map +0 -1
  224. package/dist/ai-gateway/index.js.map +0 -1
  225. package/dist/ai-gateway/model-selector.d.ts.map +0 -1
  226. package/dist/ai-gateway/model-selector.js.map +0 -1
  227. package/dist/ai-gateway/rate-limiter.d.ts.map +0 -1
  228. package/dist/ai-gateway/rate-limiter.js.map +0 -1
  229. package/dist/ai-gateway/response-cache.d.ts.map +0 -1
  230. package/dist/ai-gateway/response-cache.js.map +0 -1
  231. package/dist/ai-gateway/token-budget.d.ts.map +0 -1
  232. package/dist/ai-gateway/token-budget.js.map +0 -1
  233. package/dist/ai-provider/base-provider.d.ts.map +0 -1
  234. package/dist/ai-provider/base-provider.js.map +0 -1
  235. package/dist/ai-provider/factory.d.ts.map +0 -1
  236. package/dist/ai-provider/factory.js.map +0 -1
  237. package/dist/ai-provider/index.d.ts +0 -7
  238. package/dist/ai-provider/index.d.ts.map +0 -1
  239. package/dist/ai-provider/index.js +0 -6
  240. package/dist/ai-provider/index.js.map +0 -1
  241. package/dist/ai-provider/ollama-provider.d.ts.map +0 -1
  242. package/dist/ai-provider/ollama-provider.js.map +0 -1
  243. package/dist/ai-provider/openai-provider.d.ts.map +0 -1
  244. package/dist/ai-provider/openai-provider.js.map +0 -1
  245. package/dist/ai-provider/types.d.ts.map +0 -1
  246. package/dist/ai-provider/types.js.map +0 -1
  247. package/dist/autopilot/intent-engine.d.ts +0 -100
  248. package/dist/autopilot/intent-engine.d.ts.map +0 -1
  249. package/dist/autopilot/intent-engine.js.map +0 -1
  250. package/dist/autopilot/knowledge-engine.d.ts +0 -67
  251. package/dist/autopilot/knowledge-engine.d.ts.map +0 -1
  252. package/dist/autopilot/knowledge-engine.js +0 -262
  253. package/dist/autopilot/knowledge-engine.js.map +0 -1
  254. package/dist/core/cache-registry.d.ts.map +0 -1
  255. package/dist/core/cache-registry.js.map +0 -1
  256. package/dist/core/pending-prompt-sink.d.ts.map +0 -1
  257. package/dist/core/pending-prompt-sink.js.map +0 -1
  258. package/dist/core/types.d.ts.map +0 -1
  259. package/dist/core/types.js.map +0 -1
  260. package/dist/doc-sync/index.d.ts +0 -29
  261. package/dist/doc-sync/index.d.ts.map +0 -1
  262. package/dist/doc-sync/index.js +0 -276
  263. package/dist/doc-sync/index.js.map +0 -1
  264. package/dist/pipeline/aggregator.d.ts +0 -161
  265. package/dist/pipeline/aggregator.d.ts.map +0 -1
  266. package/dist/pipeline/aggregator.js +0 -261
  267. package/dist/pipeline/aggregator.js.map +0 -1
  268. package/dist/pipeline/analyzer.d.ts +0 -46
  269. package/dist/pipeline/analyzer.d.ts.map +0 -1
  270. package/dist/pipeline/analyzer.js.map +0 -1
  271. package/dist/pipeline/artifact-enforcement.d.ts +0 -74
  272. package/dist/pipeline/artifact-enforcement.d.ts.map +0 -1
  273. package/dist/pipeline/artifact-enforcement.js +0 -187
  274. package/dist/pipeline/artifact-enforcement.js.map +0 -1
  275. package/dist/pipeline/artifact-rules.d.ts +0 -39
  276. package/dist/pipeline/artifact-rules.d.ts.map +0 -1
  277. package/dist/pipeline/artifact-rules.js +0 -104
  278. package/dist/pipeline/artifact-rules.js.map +0 -1
  279. package/dist/pipeline/checkpoint.d.ts +0 -38
  280. package/dist/pipeline/checkpoint.d.ts.map +0 -1
  281. package/dist/pipeline/checkpoint.js +0 -132
  282. package/dist/pipeline/checkpoint.js.map +0 -1
  283. package/dist/pipeline/dynamic-aggregator.d.ts +0 -83
  284. package/dist/pipeline/dynamic-aggregator.d.ts.map +0 -1
  285. package/dist/pipeline/dynamic-aggregator.js +0 -303
  286. package/dist/pipeline/dynamic-aggregator.js.map +0 -1
  287. package/dist/pipeline/event-sourced-engine.d.ts +0 -77
  288. package/dist/pipeline/event-sourced-engine.d.ts.map +0 -1
  289. package/dist/pipeline/event-sourced-engine.js +0 -267
  290. package/dist/pipeline/event-sourced-engine.js.map +0 -1
  291. package/dist/pipeline/event-store.d.ts +0 -58
  292. package/dist/pipeline/event-store.d.ts.map +0 -1
  293. package/dist/pipeline/event-store.js +0 -184
  294. package/dist/pipeline/event-store.js.map +0 -1
  295. package/dist/pipeline/events.d.ts +0 -308
  296. package/dist/pipeline/events.d.ts.map +0 -1
  297. package/dist/pipeline/events.js +0 -49
  298. package/dist/pipeline/events.js.map +0 -1
  299. package/dist/pipeline/execution-plan-builder.d.ts +0 -20
  300. package/dist/pipeline/execution-plan-builder.d.ts.map +0 -1
  301. package/dist/pipeline/execution-plan-builder.js +0 -100
  302. package/dist/pipeline/execution-plan-builder.js.map +0 -1
  303. package/dist/pipeline/optimized-aggregator.d.ts +0 -36
  304. package/dist/pipeline/optimized-aggregator.d.ts.map +0 -1
  305. package/dist/pipeline/optimized-aggregator.js +0 -93
  306. package/dist/pipeline/optimized-aggregator.js.map +0 -1
  307. package/dist/pipeline/progress-tracker.d.ts +0 -29
  308. package/dist/pipeline/progress-tracker.d.ts.map +0 -1
  309. package/dist/pipeline/progress-tracker.js +0 -99
  310. package/dist/pipeline/progress-tracker.js.map +0 -1
  311. package/dist/pipeline/snapshot-store.d.ts +0 -45
  312. package/dist/pipeline/snapshot-store.d.ts.map +0 -1
  313. package/dist/pipeline/snapshot-store.js +0 -89
  314. package/dist/pipeline/snapshot-store.js.map +0 -1
  315. package/dist/pipeline/state-machine-types.d.ts +0 -157
  316. package/dist/pipeline/state-machine-types.d.ts.map +0 -1
  317. package/dist/pipeline/state-machine-types.js +0 -2
  318. package/dist/pipeline/state-machine-types.js.map +0 -1
  319. package/dist/pipeline/state-machine.d.ts +0 -44
  320. package/dist/pipeline/state-machine.d.ts.map +0 -1
  321. package/dist/pipeline/state-machine.js +0 -206
  322. package/dist/pipeline/state-machine.js.map +0 -1
  323. package/dist/pipeline/state-query.d.ts +0 -71
  324. package/dist/pipeline/state-query.d.ts.map +0 -1
  325. package/dist/pipeline/state-query.js +0 -213
  326. package/dist/pipeline/state-query.js.map +0 -1
  327. package/dist/pipeline/transitions.d.ts +0 -28
  328. package/dist/pipeline/transitions.d.ts.map +0 -1
  329. package/dist/pipeline/transitions.js +0 -336
  330. package/dist/pipeline/transitions.js.map +0 -1
  331. package/dist/strategy/bandit.d.ts +0 -51
  332. package/dist/strategy/bandit.d.ts.map +0 -1
  333. package/dist/strategy/bandit.js +0 -116
  334. package/dist/strategy/bandit.js.map +0 -1
  335. /package/dist/{ai-provider → ai}/base-provider.d.ts +0 -0
  336. /package/dist/{ai-provider → ai}/base-provider.js +0 -0
  337. /package/dist/{ai-provider → ai}/factory.d.ts +0 -0
  338. /package/dist/{ai-provider → ai}/factory.js +0 -0
  339. /package/dist/{ai-gateway → ai}/index.js +0 -0
  340. /package/dist/{ai-gateway → ai}/model-selector.d.ts +0 -0
  341. /package/dist/{ai-gateway → ai}/model-selector.js +0 -0
  342. /package/dist/{ai-provider → ai}/ollama-provider.d.ts +0 -0
  343. /package/dist/{ai-provider → ai}/ollama-provider.js +0 -0
  344. /package/dist/{ai-provider → ai}/openai-provider.d.ts +0 -0
  345. /package/dist/{ai-provider → ai}/openai-provider.js +0 -0
  346. /package/dist/{ai-gateway → ai}/rate-limiter.d.ts +0 -0
  347. /package/dist/{ai-gateway → ai}/rate-limiter.js +0 -0
  348. /package/dist/{ai-gateway → ai}/response-cache.d.ts +0 -0
  349. /package/dist/{ai-gateway → ai}/response-cache.js +0 -0
  350. /package/dist/{ai-gateway → ai}/token-budget.d.ts +0 -0
  351. /package/dist/{ai-gateway → ai}/token-budget.js +0 -0
  352. /package/dist/{ai-provider → ai}/types.d.ts +0 -0
  353. /package/dist/{ai-provider → ai}/types.js +0 -0
  354. /package/dist/{core → utils}/cache-registry.d.ts +0 -0
  355. /package/dist/{core → utils}/cache-registry.js +0 -0
  356. /package/dist/{core → utils}/pending-prompt-sink.d.ts +0 -0
  357. /package/dist/{core → utils}/pending-prompt-sink.js +0 -0
@@ -1,262 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import os from 'os';
4
- import { logger } from '../utils/logger.js';
5
- const KNOWLEDGE_DIR = path.join(os.homedir(), '.claude-forge', 'knowledge');
6
- const INDEX_FILE = path.join(KNOWLEDGE_DIR, 'index.json');
7
- /**
8
- * KnowledgeEngine — 知识搜索与沉淀引擎
9
- *
10
- * 1. 联网搜索最佳实践
11
- * 2. 蒸馏为可复用的知识文件
12
- * 3. 下次遇到类似场景优先使用沉淀的知识
13
- * 4. 知识自动过期和刷新
14
- */
15
- export class KnowledgeEngine {
16
- api;
17
- index;
18
- constructor(api) {
19
- this.api = api;
20
- this.ensureDir();
21
- this.index = this.loadIndex();
22
- }
23
- /**
24
- * 搜索知识库 — 优先本地,不足时联网搜索
25
- */
26
- async search(keywords, techStack = []) {
27
- // 1. 先查本地知识库
28
- const localResults = this.searchLocal(keywords, techStack);
29
- if (localResults.length > 0) {
30
- logger.info(`[知识库] 找到 ${localResults.length} 条本地记录:${keywords.join(', ')}`);
31
- // 更新使用计数
32
- for (const entry of localResults) {
33
- entry.usageCount++;
34
- entry.updatedAt = new Date().toISOString();
35
- }
36
- this.saveIndex();
37
- return this.formatLocalResults(localResults);
38
- }
39
- // 2. 本地没有,联网搜索并沉淀
40
- logger.info(`[知识库] 无本地结果,联网搜索:${keywords.join(', ')}`);
41
- return this.searchAndDistill(keywords, techStack);
42
- }
43
- /**
44
- * 联网搜索并蒸馏为知识条目
45
- */
46
- async searchAndDistill(keywords, techStack) {
47
- const query = keywords.join(' ') + (techStack.length > 0 ? ` ${techStack.join(' ')}` : '');
48
- const searchPrompt = `你是一个技术研究助手。请针对以下技术主题,提供最佳实践总结。
49
-
50
- ## 搜索主题
51
- ${query}
52
-
53
- ## 技术栈上下文
54
- ${techStack.length > 0 ? techStack.join(', ') : '通用'}
55
-
56
- ## 要求
57
- 1. 总结该领域的最佳实践(3-5 条核心原则)
58
- 2. 推荐的技术方案和工具
59
- 3. 常见的坑和注意事项
60
- 4. 示例代码片段(如适用)
61
- 5. 参考来源(如已知)
62
-
63
- ## 输出格式
64
- 用 Markdown 格式输出,结构清晰。`;
65
- try {
66
- const content = await this.api.complete(searchPrompt, 'knowledge');
67
- // 蒸馏并存储
68
- const entry = await this.distillAndSave(keywords, techStack, content);
69
- logger.info(`[知识库] 已蒸馏并保存:${entry.title}`);
70
- return `[Forge Knowledge] 已搜索并沉淀最佳实践:\n\n${content}`;
71
- }
72
- catch (err) {
73
- logger.error(`[知识库] 搜索失败:${err}`);
74
- return `[Forge Knowledge] 搜索失败,请手动查找 ${keywords.join(', ')} 相关的最佳实践。`;
75
- }
76
- }
77
- /**
78
- * 蒸馏搜索结果为知识条目并保存
79
- */
80
- async distillAndSave(keywords, techStack, rawContent) {
81
- // 用 AI 生成标题和摘要
82
- const metaPrompt = `基于以下内容,生成一个简短标题(不超过 30 字)。
83
- 只输出标题文本,不要引号或其他格式。
84
-
85
- ${rawContent.substring(0, 500)}`;
86
- let title;
87
- try {
88
- title = (await this.api.complete(metaPrompt, 'knowledge')).trim();
89
- }
90
- catch {
91
- title = keywords.slice(0, 3).join('-') + ' 最佳实践';
92
- }
93
- const id = this.slugify(keywords.join('-'));
94
- const entry = {
95
- id,
96
- title,
97
- keywords,
98
- content: rawContent,
99
- source: 'search',
100
- techStack,
101
- usageCount: 1,
102
- quality: 0.5, // 初始中等质量
103
- createdAt: new Date().toISOString(),
104
- updatedAt: new Date().toISOString(),
105
- };
106
- // 保存知识文件
107
- const filePath = path.join(KNOWLEDGE_DIR, `${id}.md`);
108
- const fileContent = `---
109
- title: ${title}
110
- keywords: ${JSON.stringify(keywords)}
111
- techStack: ${JSON.stringify(techStack)}
112
- source: search
113
- quality: ${entry.quality}
114
- createdAt: ${entry.createdAt}
115
- ---
116
-
117
- ${rawContent}`;
118
- fs.writeFileSync(filePath, fileContent, 'utf-8');
119
- // 更新索引(去重)
120
- const existingIdx = this.index.entries.findIndex(e => e.id === id);
121
- if (existingIdx >= 0) {
122
- this.index.entries[existingIdx] = entry;
123
- }
124
- else {
125
- this.index.entries.push(entry);
126
- }
127
- this.saveIndex();
128
- return entry;
129
- }
130
- /**
131
- * 本地搜索:关键词匹配 + 技术栈匹配
132
- */
133
- searchLocal(keywords, techStack) {
134
- return this.index.entries
135
- .map(entry => {
136
- let score = 0;
137
- // 关键词匹配
138
- for (const kw of keywords) {
139
- const lower = kw.toLowerCase();
140
- if (entry.keywords.some(ek => ek.toLowerCase().includes(lower)))
141
- score += 3;
142
- if (entry.title.toLowerCase().includes(lower))
143
- score += 2;
144
- if (entry.content.toLowerCase().includes(lower))
145
- score += 1;
146
- }
147
- // 技术栈匹配
148
- for (const ts of techStack) {
149
- if (entry.techStack.some(et => et.toLowerCase() === ts.toLowerCase()))
150
- score += 2;
151
- }
152
- // 质量加权
153
- score *= entry.quality;
154
- // 使用频率加分
155
- score += Math.min(entry.usageCount * 0.1, 1);
156
- return { entry, score };
157
- })
158
- .filter(r => r.score > 2) // 至少有一个关键词匹配
159
- .sort((a, b) => b.score - a.score)
160
- .slice(0, 3) // 最多返回 3 条
161
- .map(r => r.entry);
162
- }
163
- /**
164
- * 格式化本地搜索结果
165
- */
166
- formatLocalResults(entries) {
167
- const parts = ['[Forge Knowledge] 已从知识库中找到相关最佳实践:', ''];
168
- for (const entry of entries) {
169
- parts.push(`### ${entry.title}`);
170
- parts.push(`来源: ${entry.source} | 使用次数: ${entry.usageCount} | 质量评分: ${(entry.quality * 100).toFixed(0)}%`);
171
- parts.push('');
172
- // 只取前 1000 字符避免注入过多上下文
173
- parts.push(entry.content.substring(0, 1000));
174
- if (entry.content.length > 1000)
175
- parts.push('...(更多内容请参考知识库文件)');
176
- parts.push('');
177
- }
178
- return parts.join('\n');
179
- }
180
- /**
181
- * 反馈:标记知识质量(被采纳则提升,被忽略则降低)
182
- */
183
- updateQuality(entryId, delta) {
184
- const entry = this.index.entries.find(e => e.id === entryId);
185
- if (entry) {
186
- entry.quality = Math.max(0, Math.min(1, entry.quality + delta));
187
- entry.updatedAt = new Date().toISOString();
188
- this.saveIndex();
189
- }
190
- }
191
- /**
192
- * 清理过期知识(超过 90 天未使用且质量低)
193
- */
194
- prune(maxAgeDays = 90) {
195
- const cutoff = new Date(Date.now() - maxAgeDays * 86400000).toISOString();
196
- const before = this.index.entries.length;
197
- this.index.entries = this.index.entries.filter(entry => {
198
- if (entry.updatedAt > cutoff)
199
- return true;
200
- if (entry.quality > 0.7)
201
- return true; // 高质量保留
202
- if (entry.usageCount > 5)
203
- return true; // 高频使用保留
204
- // 删除文件
205
- const filePath = path.join(KNOWLEDGE_DIR, `${entry.id}.md`);
206
- try {
207
- fs.unlinkSync(filePath);
208
- }
209
- catch { /* ignore */ }
210
- return false;
211
- });
212
- this.saveIndex();
213
- const pruned = before - this.index.entries.length;
214
- if (pruned > 0)
215
- logger.info(`[知识库] 已清理 ${pruned} 条过期记录`);
216
- return pruned;
217
- }
218
- /**
219
- * 获取知识库统计
220
- */
221
- getStats() {
222
- const entries = this.index.entries;
223
- const bySource = {};
224
- let totalQuality = 0;
225
- for (const e of entries) {
226
- bySource[e.source] = (bySource[e.source] || 0) + 1;
227
- totalQuality += e.quality;
228
- }
229
- return {
230
- total: entries.length,
231
- bySource,
232
- avgQuality: entries.length > 0 ? totalQuality / entries.length : 0,
233
- };
234
- }
235
- ensureDir() {
236
- if (!fs.existsSync(KNOWLEDGE_DIR)) {
237
- fs.mkdirSync(KNOWLEDGE_DIR, { recursive: true });
238
- }
239
- }
240
- loadIndex() {
241
- if (!fs.existsSync(INDEX_FILE)) {
242
- return { entries: [], version: 1 };
243
- }
244
- try {
245
- return JSON.parse(fs.readFileSync(INDEX_FILE, 'utf-8'));
246
- }
247
- catch {
248
- return { entries: [], version: 1 };
249
- }
250
- }
251
- saveIndex() {
252
- fs.writeFileSync(INDEX_FILE, JSON.stringify(this.index, null, 2), 'utf-8');
253
- }
254
- slugify(text) {
255
- return text
256
- .toLowerCase()
257
- .replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
258
- .replace(/^-+|-+$/g, '')
259
- .substring(0, 60);
260
- }
261
- }
262
- //# sourceMappingURL=knowledge-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge-engine.js","sourceRoot":"","sources":["../../src/autopilot/knowledge-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-registry.d.ts","sourceRoot":"","sources":["../../src/core/cache-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAW1E,cAAM,iBAAiB;IACrB,OAAO,CAAC,OAAO,CAAoB;IAEnC;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;KAAE,GAC3E,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAgBjB;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAc7C;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAa1C;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAU/F;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,QAAQ,IAAI,IAAI;CAMjB;AAED,gBAAgB;AAChB,eAAO,MAAM,aAAa,mBAA0B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache-registry.js","sourceRoot":"","sources":["../../src/core/cache-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pending-prompt-sink.d.ts","sourceRoot":"","sources":["../../src/core/pending-prompt-sink.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pending-prompt-sink.js","sourceRoot":"","sources":["../../src/core/pending-prompt-sink.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEnG,eAAO,MAAM,WAAW,EAAE,aAAa,EAEtC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAQtD,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,GAAG,aAAa,CAIhG;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CACjE,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAkC;IACzD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,OAAsB,EAAE,aAA+B;IAC/E,MAAM,MAAM,GAAG,aAAa,IAAI,WAAW,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5D,CAAC"}
@@ -1,29 +0,0 @@
1
- import type { ForgeEvent } from '../types/index.js';
2
- import type { AIProvider } from '../ai-provider/types.js';
3
- /**
4
- * 从会话事件中提取本次被修改的文件路径(去重)
5
- */
6
- export declare function extractChangedFiles(events: ForgeEvent[]): string[];
7
- /**
8
- * 递归扫描 projectPath 下所有 .md 文件(排除常见无关目录)
9
- * 异步版本,避免阻塞事件循环
10
- */
11
- export declare function findProjectDocs(projectPath: string): Promise<string[]>;
12
- export declare class DocSyncEngine {
13
- private readonly api;
14
- constructor(api: AIProvider);
15
- /**
16
- * 主入口:根据本次会话事件,找出受影响的文档并更新
17
- */
18
- sync(sessionId: string, projectPath: string, events: ForgeEvent[]): Promise<void>;
19
- /**
20
- * 第一阶段:轻量判断哪些文档受影响(只传文件名和改动摘要)
21
- */
22
- private detectImpactedDocs;
23
- /**
24
- * 第二阶段:针对单个文档生成 patch(逐个处理,避免 prompt 过长)
25
- */
26
- private generatePatchesForDoc;
27
- private applyPatches;
28
- }
29
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/doc-sync/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAc1D;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAUlE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB5E;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,UAAU;IAE5C;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvF;;OAEG;YACW,kBAAkB;IAiEhC;;OAEG;YACW,qBAAqB;YA6ErB,YAAY;CA8C3B"}
@@ -1,276 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { logger } from '../utils/logger.js';
4
- import { truncateHead } from '../utils/truncate.js';
5
- import { PromptRegistry } from '../prompts/registry.js';
6
- // 写操作工具名
7
- const WRITE_TOOLS = new Set(['Write', 'Edit', 'MultiEdit', 'NotebookEdit']);
8
- // 扫描时排除的目录
9
- const EXCLUDE_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.claude-forge', '.claude', 'coverage']);
10
- // 单个文档内容最大字符数(避免超长文档撑爆 prompt)
11
- const MAX_DOC_CHARS = 8000;
12
- /**
13
- * 从会话事件中提取本次被修改的文件路径(去重)
14
- */
15
- export function extractChangedFiles(events) {
16
- const files = new Set();
17
- for (const e of events) {
18
- if (!WRITE_TOOLS.has(e.tool_name ?? ''))
19
- continue;
20
- const input = e.tool_input;
21
- if (!input)
22
- continue;
23
- const p = (input['file_path'] ?? input['path']);
24
- if (p && typeof p === 'string')
25
- files.add(p);
26
- }
27
- return [...files];
28
- }
29
- /**
30
- * 递归扫描 projectPath 下所有 .md 文件(排除常见无关目录)
31
- * 异步版本,避免阻塞事件循环
32
- */
33
- export async function findProjectDocs(projectPath) {
34
- const results = [];
35
- async function walk(dir) {
36
- let entries;
37
- try {
38
- entries = await fs.promises.readdir(dir, { withFileTypes: true });
39
- }
40
- catch {
41
- return;
42
- }
43
- for (const entry of entries) {
44
- if (EXCLUDE_DIRS.has(entry.name))
45
- continue;
46
- const full = path.join(dir, entry.name);
47
- if (entry.isDirectory()) {
48
- await walk(full);
49
- }
50
- else if (entry.isFile() && entry.name.endsWith('.md')) {
51
- results.push(full);
52
- }
53
- }
54
- }
55
- await walk(projectPath);
56
- return results;
57
- }
58
- export class DocSyncEngine {
59
- api;
60
- constructor(api) {
61
- this.api = api;
62
- }
63
- /**
64
- * 主入口:根据本次会话事件,找出受影响的文档并更新
65
- */
66
- async sync(sessionId, projectPath, events) {
67
- const changedFiles = extractChangedFiles(events);
68
- if (changedFiles.length === 0) {
69
- logger.info('[Forge:文档同步] 本次会话无写操作,跳过');
70
- return;
71
- }
72
- const allDocs = await findProjectDocs(projectPath);
73
- if (allDocs.length === 0) {
74
- logger.info('[Forge:文档同步] 项目内无 .md 文档,跳过');
75
- return;
76
- }
77
- logger.info(`[Forge:文档同步] 本次改动文件 ${changedFiles.length} 个,扫描到文档 ${allDocs.length} 个`);
78
- // 第一阶段:先轻量判断哪些文档受影响(不传全文)
79
- const impactedDocs = await this.detectImpactedDocs(changedFiles, allDocs, projectPath);
80
- if (impactedDocs.length === 0) {
81
- logger.info('[Forge:文档同步] AI 判断无文档需要更新');
82
- return;
83
- }
84
- logger.info(`[Forge:文档同步] 受影响文档 ${impactedDocs.length} 个:${impactedDocs.map(f => path.relative(projectPath, f)).join(', ')}`);
85
- // 第二阶段:逐个文档生成 patch,避免单次 prompt 过长
86
- for (const docPath of impactedDocs) {
87
- const patches = await this.generatePatchesForDoc(changedFiles, docPath, projectPath);
88
- if (patches.length > 0) {
89
- await this.applyPatches(docPath, patches, projectPath);
90
- }
91
- }
92
- }
93
- /**
94
- * 第一阶段:轻量判断哪些文档受影响(只传文件名和改动摘要)
95
- */
96
- async detectImpactedDocs(changedFiles, allDocs, projectPath) {
97
- const relChanged = changedFiles.map(f => path.relative(projectPath, f));
98
- const relDocs = allDocs.map(f => path.relative(projectPath, f));
99
- const changedSummaries = await Promise.all(changedFiles.map(async (f) => {
100
- try {
101
- const content = (await fs.promises.readFile(f, 'utf-8')).slice(0, 300);
102
- return `### ${path.relative(projectPath, f)}\n${content}`;
103
- }
104
- catch {
105
- return `### ${path.relative(projectPath, f)}\n(文件不存在或已删除)`;
106
- }
107
- }));
108
- const prompt = PromptRegistry.load('doc-sync-detect', {
109
- changedFilesList: relChanged.map(f => `- ${f}`).join('\n'),
110
- changedSummaries: changedSummaries.join('\n\n'),
111
- docsList: relDocs.map(f => `- ${f}`).join('\n'),
112
- });
113
- try {
114
- const raw = await this.api.complete(prompt, 'doc-sync', { retries: 1, timeoutMs: 60_000 });
115
- const jsonMatch = raw.match(/\[[\s\S]*\]/);
116
- if (!jsonMatch)
117
- return [];
118
- let jsonContent = jsonMatch[0];
119
- let parsed;
120
- try {
121
- parsed = JSON.parse(jsonContent);
122
- }
123
- catch {
124
- // 清理常见 AI 输出问题后重试
125
- jsonContent = jsonContent
126
- .replace(/,\s*([}\]])/g, '$1')
127
- .replace(/\/\/.*$/gm, '')
128
- .replace(/[\x00-\x1f]/g, ' ')
129
- .replace(/```json\s*/g, '')
130
- .replace(/```\s*/g, '');
131
- try {
132
- parsed = JSON.parse(jsonContent);
133
- }
134
- catch {
135
- // 最后尝试:提取引号内的文件路径
136
- const paths = [];
137
- const pathRegex = /"([^"]+\.md)"/g;
138
- let m;
139
- while ((m = pathRegex.exec(jsonContent)) !== null) {
140
- paths.push(m[1]);
141
- }
142
- parsed = paths;
143
- }
144
- }
145
- if (!Array.isArray(parsed))
146
- return [];
147
- return parsed
148
- .filter(rel => typeof rel === 'string')
149
- .map(rel => path.join(projectPath, rel))
150
- .filter(full => allDocs.includes(full));
151
- }
152
- catch (err) {
153
- logger.warn(`[Forge:文档同步] 第一阶段 AI 调用失败:${err}`);
154
- return [];
155
- }
156
- }
157
- /**
158
- * 第二阶段:针对单个文档生成 patch(逐个处理,避免 prompt 过长)
159
- */
160
- async generatePatchesForDoc(changedFiles, docPath, projectPath) {
161
- const relChanged = changedFiles.map(f => path.relative(projectPath, f));
162
- const relDoc = path.relative(projectPath, docPath);
163
- const changedSummaries = await Promise.all(changedFiles.map(async (f) => {
164
- try {
165
- const content = (await fs.promises.readFile(f, 'utf-8')).slice(0, 500);
166
- return `### ${path.relative(projectPath, f)}\n${content}`;
167
- }
168
- catch {
169
- return `### ${path.relative(projectPath, f)}\n(文件不存在或已删除)`;
170
- }
171
- }));
172
- let docContent;
173
- try {
174
- const raw = await fs.promises.readFile(docPath, 'utf-8');
175
- docContent = truncateHead(raw, MAX_DOC_CHARS);
176
- }
177
- catch {
178
- logger.warn(`[Forge:文档同步] 读取文档失败:${relDoc}`);
179
- return [];
180
- }
181
- const prompt = PromptRegistry.load('doc-sync-patch', {
182
- changedFilesList: relChanged.map(f => `- ${f}`).join('\n'),
183
- changedSummaries: changedSummaries.join('\n\n'),
184
- docPath: relDoc,
185
- docContent,
186
- });
187
- try {
188
- const raw = await this.api.complete(prompt, 'doc-sync', { retries: 1, timeoutMs: 60_000 });
189
- const jsonMatch = raw.match(/\[[\s\S]*\]/);
190
- if (!jsonMatch)
191
- return [];
192
- let jsonContent = jsonMatch[0];
193
- let parsed;
194
- try {
195
- parsed = JSON.parse(jsonContent);
196
- }
197
- catch {
198
- // 尝试修复常见的 AI JSON 输出问题
199
- jsonContent = jsonContent
200
- .replace(/,\s*([}\]])/g, '$1') // 尾随逗号
201
- .replace(/\/\/.*$/gm, '') // 行注释
202
- .replace(/\/\*[\s\S]*?\*\//g, '') // 块注释
203
- .replace(/[\x00-\x1f]/g, ' ') // 控制字符
204
- .replace(/```json\s*/g, '') // markdown 代码块标记
205
- .replace(/```\s*/g, '');
206
- try {
207
- parsed = JSON.parse(jsonContent);
208
- }
209
- catch {
210
- // 最后尝试:提取每个 {old, new} 对象
211
- const objects = [];
212
- const objRegex = /\{\s*"old"\s*:\s*"([^"]*?)"\s*,\s*"new"\s*:\s*"([^"]*?)"\s*\}/g;
213
- let m;
214
- while ((m = objRegex.exec(jsonContent)) !== null) {
215
- objects.push({ old: m[1], new: m[2] });
216
- }
217
- if (objects.length > 0) {
218
- parsed = objects;
219
- }
220
- else {
221
- logger.debug(`[Forge:文档同步] JSON 修复失败,跳过:${relDoc}`);
222
- return [];
223
- }
224
- }
225
- }
226
- return parsed.filter(p => p.old && p.new);
227
- }
228
- catch (err) {
229
- logger.warn(`[Forge:文档同步] 第二阶段 AI 调用失败(${relDoc}):${err}`);
230
- return [];
231
- }
232
- }
233
- async applyPatches(docPath, patches, projectPath) {
234
- let current;
235
- try {
236
- current = await fs.promises.readFile(docPath, 'utf-8');
237
- }
238
- catch {
239
- logger.warn(`[Forge:文档同步] 读取文档失败:${docPath}`);
240
- return;
241
- }
242
- const lines = current.split('\n');
243
- let hitCount = 0;
244
- for (const { old: oldLine, new: newLine } of patches) {
245
- if (!oldLine)
246
- continue;
247
- const trimmedOld = oldLine.trim();
248
- // 精确匹配
249
- let idx = lines.findIndex(l => l === oldLine);
250
- // 模糊匹配(trim 后比较)
251
- if (idx === -1) {
252
- idx = lines.findIndex(l => l.trim() === trimmedOld);
253
- }
254
- // 包含匹配(AI 可能只给了行的一部分)
255
- if (idx === -1 && trimmedOld.length > 10) {
256
- idx = lines.findIndex(l => l.includes(trimmedOld));
257
- }
258
- if (idx !== -1) {
259
- lines[idx] = newLine;
260
- hitCount++;
261
- }
262
- }
263
- if (hitCount === 0) {
264
- logger.info(`[Forge:文档同步] patch 未命中任何行:${path.relative(projectPath, docPath)}`);
265
- return;
266
- }
267
- try {
268
- await fs.promises.writeFile(docPath, lines.join('\n'), 'utf-8');
269
- logger.info(`[Forge:文档同步] 已更新(${hitCount} 处):${path.relative(projectPath, docPath)}`);
270
- }
271
- catch (err) {
272
- logger.warn(`[Forge:文档同步] 写入文档失败(${path.relative(projectPath, docPath)}):${err}`);
273
- }
274
- }
275
- }
276
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/doc-sync/index.ts"],"names":[],"mappings":"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"}