@zooique/memora 2.0.3 → 3.0.1

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 (588) hide show
  1. package/CHANGELOG.md +1037 -0
  2. package/README.en.md +305 -272
  3. package/README.md +303 -260
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +376 -408
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1166 -926
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +105 -43
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +543 -75
  12. package/dist/agent/assembler.js.map +1 -1
  13. package/dist/agent/budget.d.ts +131 -0
  14. package/dist/agent/budget.d.ts.map +1 -0
  15. package/dist/agent/budget.js +128 -0
  16. package/dist/agent/budget.js.map +1 -0
  17. package/dist/agent/builtinToolHandlers.d.ts +225 -38
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +748 -132
  20. package/dist/agent/builtinToolHandlers.js.map +1 -1
  21. package/dist/agent/builtinTools.d.ts +198 -7
  22. package/dist/agent/builtinTools.d.ts.map +1 -1
  23. package/dist/agent/builtinTools.js +646 -14
  24. package/dist/agent/builtinTools.js.map +1 -1
  25. package/dist/agent/compaction.d.ts +93 -0
  26. package/dist/agent/compaction.d.ts.map +1 -0
  27. package/dist/agent/compaction.js +192 -0
  28. package/dist/agent/compaction.js.map +1 -0
  29. package/dist/agent/constants.d.ts +137 -20
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +152 -20
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +119 -77
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +192 -135
  36. package/dist/agent/contextManager.js.map +1 -1
  37. package/dist/agent/contextPreparer.d.ts +78 -0
  38. package/dist/agent/contextPreparer.d.ts.map +1 -0
  39. package/dist/agent/contextPreparer.js +128 -0
  40. package/dist/agent/contextPreparer.js.map +1 -0
  41. package/dist/agent/duplicateInterceptor.d.ts +67 -0
  42. package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
  43. package/dist/agent/duplicateInterceptor.js +82 -0
  44. package/dist/agent/duplicateInterceptor.js.map +1 -0
  45. package/dist/agent/guardRail.d.ts +166 -0
  46. package/dist/agent/guardRail.d.ts.map +1 -0
  47. package/dist/agent/guardRail.js +333 -0
  48. package/dist/agent/guardRail.js.map +1 -0
  49. package/dist/agent/loop.d.ts +716 -295
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2178 -664
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +14 -171
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +19 -287
  56. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  57. package/dist/agent/managers/chatLockManager.d.ts +20 -88
  58. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  59. package/dist/agent/managers/chatLockManager.js +31 -103
  60. package/dist/agent/managers/chatLockManager.js.map +1 -1
  61. package/dist/agent/managers/dedupManager.d.ts +31 -115
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -1
  63. package/dist/agent/managers/dedupManager.js +48 -136
  64. package/dist/agent/managers/dedupManager.js.map +1 -1
  65. package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
  66. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
  67. package/dist/agent/managers/goalConsistencyChecker.js +178 -0
  68. package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
  69. package/dist/agent/managers/llmCaller.d.ts +124 -0
  70. package/dist/agent/managers/llmCaller.d.ts.map +1 -0
  71. package/dist/agent/managers/llmCaller.js +417 -0
  72. package/dist/agent/managers/llmCaller.js.map +1 -0
  73. package/dist/agent/managers/llmJudgeHelper.d.ts +8 -25
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -1
  75. package/dist/agent/managers/llmJudgeHelper.js +7 -24
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -1
  77. package/dist/agent/managers/loopMetrics.d.ts +58 -0
  78. package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
  79. package/dist/agent/managers/loopMetrics.js +68 -0
  80. package/dist/agent/managers/loopMetrics.js.map +1 -0
  81. package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
  82. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  83. package/dist/agent/managers/memoryAdvisor.js +85 -207
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +10 -42
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -1
  87. package/dist/agent/managers/memoryGovernance.js +19 -36
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -1
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -268
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +91 -442
  92. package/dist/agent/managers/memoryInspector.js.map +1 -1
  93. package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
  94. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
  95. package/dist/agent/managers/roundSummaryGenerator.js +201 -0
  96. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
  97. package/dist/agent/managers/sessionArchiver.d.ts +19 -68
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +76 -147
  100. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  101. package/dist/agent/managers/sessionManager.d.ts +286 -57
  102. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  103. package/dist/agent/managers/sessionManager.js +846 -85
  104. package/dist/agent/managers/sessionManager.js.map +1 -1
  105. package/dist/agent/managers/sessionNamer.d.ts +35 -0
  106. package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
  107. package/dist/agent/managers/sessionNamer.js +104 -0
  108. package/dist/agent/managers/sessionNamer.js.map +1 -0
  109. package/dist/agent/managers/streamAccumulator.d.ts +8 -33
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -1
  111. package/dist/agent/managers/streamAccumulator.js +4 -29
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -1
  113. package/dist/agent/managers/textPolishManager.d.ts +8 -44
  114. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  115. package/dist/agent/managers/textPolishManager.js +9 -41
  116. package/dist/agent/managers/textPolishManager.js.map +1 -1
  117. package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
  118. package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
  119. package/dist/agent/managers/toolCallHelpers.js +161 -0
  120. package/dist/agent/managers/toolCallHelpers.js.map +1 -0
  121. package/dist/agent/managers/workProjection.d.ts +55 -100
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +164 -268
  124. package/dist/agent/managers/workProjection.js.map +1 -1
  125. package/dist/agent/messageHistory.d.ts +134 -84
  126. package/dist/agent/messageHistory.d.ts.map +1 -1
  127. package/dist/agent/messageHistory.js +419 -133
  128. package/dist/agent/messageHistory.js.map +1 -1
  129. package/dist/agent/needsPlanning.d.ts +28 -0
  130. package/dist/agent/needsPlanning.d.ts.map +1 -0
  131. package/dist/agent/needsPlanning.js +68 -0
  132. package/dist/agent/needsPlanning.js.map +1 -0
  133. package/dist/agent/seed/index.d.ts +11 -0
  134. package/dist/agent/seed/index.d.ts.map +1 -0
  135. package/dist/agent/seed/index.js +10 -0
  136. package/dist/agent/seed/index.js.map +1 -0
  137. package/dist/agent/seed/orchestrator.d.ts +83 -0
  138. package/dist/agent/seed/orchestrator.d.ts.map +1 -0
  139. package/dist/agent/seed/orchestrator.js +260 -0
  140. package/dist/agent/seed/orchestrator.js.map +1 -0
  141. package/dist/agent/seed/prepare.d.ts +49 -0
  142. package/dist/agent/seed/prepare.d.ts.map +1 -0
  143. package/dist/agent/seed/prepare.js +107 -0
  144. package/dist/agent/seed/prepare.js.map +1 -0
  145. package/dist/agent/seed/types.d.ts +115 -0
  146. package/dist/agent/seed/types.d.ts.map +1 -0
  147. package/dist/agent/seed/types.js +15 -0
  148. package/dist/agent/seed/types.js.map +1 -0
  149. package/dist/agent/sessionStateMachine.d.ts +78 -0
  150. package/dist/agent/sessionStateMachine.d.ts.map +1 -0
  151. package/dist/agent/sessionStateMachine.js +182 -0
  152. package/dist/agent/sessionStateMachine.js.map +1 -0
  153. package/dist/agent/taskTableRenderer.d.ts +51 -0
  154. package/dist/agent/taskTableRenderer.d.ts.map +1 -0
  155. package/dist/agent/taskTableRenderer.js +115 -0
  156. package/dist/agent/taskTableRenderer.js.map +1 -0
  157. package/dist/agent/toolExecutor.d.ts +236 -10
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +932 -21
  160. package/dist/agent/toolExecutor.js.map +1 -1
  161. package/dist/agent/toolLedger.d.ts +120 -0
  162. package/dist/agent/toolLedger.d.ts.map +1 -0
  163. package/dist/agent/toolLedger.js +149 -0
  164. package/dist/agent/toolLedger.js.map +1 -0
  165. package/dist/agent/toolResultCache.d.ts +134 -0
  166. package/dist/agent/toolResultCache.d.ts.map +1 -0
  167. package/dist/agent/toolResultCache.js +243 -0
  168. package/dist/agent/toolResultCache.js.map +1 -0
  169. package/dist/agent/toolResultOffload.d.ts +59 -0
  170. package/dist/agent/toolResultOffload.d.ts.map +1 -0
  171. package/dist/agent/toolResultOffload.js +70 -0
  172. package/dist/agent/toolResultOffload.js.map +1 -0
  173. package/dist/agent/toolRunner.d.ts +59 -0
  174. package/dist/agent/toolRunner.d.ts.map +1 -0
  175. package/dist/agent/toolRunner.js +147 -0
  176. package/dist/agent/toolRunner.js.map +1 -0
  177. package/dist/agent/tracer.d.ts +99 -107
  178. package/dist/agent/tracer.d.ts.map +1 -1
  179. package/dist/agent/tracer.js +24 -69
  180. package/dist/agent/tracer.js.map +1 -1
  181. package/dist/agent/types.d.ts +510 -169
  182. package/dist/agent/types.d.ts.map +1 -1
  183. package/dist/agent/types.js +2 -51
  184. package/dist/agent/types.js.map +1 -1
  185. package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
  186. package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
  187. package/dist/code-exec/codeExecutionProvider.js +57 -0
  188. package/dist/code-exec/codeExecutionProvider.js.map +1 -0
  189. package/dist/code-exec/types.d.ts +37 -0
  190. package/dist/code-exec/types.d.ts.map +1 -0
  191. package/dist/code-exec/types.js +12 -0
  192. package/dist/code-exec/types.js.map +1 -0
  193. package/dist/config/expandEnvVars.d.ts +22 -0
  194. package/dist/config/expandEnvVars.d.ts.map +1 -0
  195. package/dist/config/expandEnvVars.js +38 -0
  196. package/dist/config/expandEnvVars.js.map +1 -0
  197. package/dist/config/loader.d.ts +27 -98
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +110 -223
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +67 -77
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +90 -69
  204. package/dist/index.js.map +1 -1
  205. package/dist/llm/abortSignal.d.ts +2 -3
  206. package/dist/llm/abortSignal.d.ts.map +1 -1
  207. package/dist/llm/abortSignal.js +2 -3
  208. package/dist/llm/abortSignal.js.map +1 -1
  209. package/dist/llm/factory.d.ts +22 -32
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +29 -46
  212. package/dist/llm/factory.js.map +1 -1
  213. package/dist/llm/openaiCompatible.d.ts +25 -40
  214. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  215. package/dist/llm/openaiCompatible.js +179 -120
  216. package/dist/llm/openaiCompatible.js.map +1 -1
  217. package/dist/llm/provider.d.ts +29 -42
  218. package/dist/llm/provider.d.ts.map +1 -1
  219. package/dist/llm/provider.js +11 -10
  220. package/dist/llm/provider.js.map +1 -1
  221. package/dist/llm/types.d.ts +54 -11
  222. package/dist/llm/types.d.ts.map +1 -1
  223. package/dist/llm/types.js +0 -5
  224. package/dist/llm/types.js.map +1 -1
  225. package/dist/logging/logger.d.ts +8 -31
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +28 -215
  228. package/dist/logging/logger.js.map +1 -1
  229. package/dist/logging/loggerInterface.d.ts +9 -8
  230. package/dist/logging/loggerInterface.d.ts.map +1 -1
  231. package/dist/memory/gcService.d.ts +164 -0
  232. package/dist/memory/gcService.d.ts.map +1 -0
  233. package/dist/memory/gcService.js +215 -0
  234. package/dist/memory/gcService.js.map +1 -0
  235. package/dist/memory/governance.d.ts +11 -44
  236. package/dist/memory/governance.d.ts.map +1 -1
  237. package/dist/memory/governance.js +11 -64
  238. package/dist/memory/governance.js.map +1 -1
  239. package/dist/memory/inMemoryRoundStore.d.ts +124 -0
  240. package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
  241. package/dist/memory/inMemoryRoundStore.js +216 -0
  242. package/dist/memory/inMemoryRoundStore.js.map +1 -0
  243. package/dist/memory/inMemorySessionStore.d.ts +92 -0
  244. package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
  245. package/dist/memory/inMemorySessionStore.js +219 -0
  246. package/dist/memory/inMemorySessionStore.js.map +1 -0
  247. package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
  248. package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
  249. package/dist/memory/inMemorySessionViewLoader.js +183 -0
  250. package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
  251. package/dist/memory/inMemoryStorage.d.ts +25 -175
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +32 -221
  254. package/dist/memory/inMemoryStorage.js.map +1 -1
  255. package/dist/memory/keywordsTouch.d.ts +20 -0
  256. package/dist/memory/keywordsTouch.d.ts.map +1 -0
  257. package/dist/memory/keywordsTouch.js +25 -0
  258. package/dist/memory/keywordsTouch.js.map +1 -0
  259. package/dist/memory/lockManager.d.ts +2 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +6 -8
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -129
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -189
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +14 -62
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +27 -111
  270. package/dist/memory/projectRegistry.js.map +1 -1
  271. package/dist/memory/roundStore.d.ts +629 -0
  272. package/dist/memory/roundStore.d.ts.map +1 -0
  273. package/dist/memory/roundStore.js +116 -0
  274. package/dist/memory/roundStore.js.map +1 -0
  275. package/dist/memory/sessionStore.d.ts +70 -61
  276. package/dist/memory/sessionStore.d.ts.map +1 -1
  277. package/dist/memory/sessionStore.js +23 -1
  278. package/dist/memory/sessionStore.js.map +1 -1
  279. package/dist/memory/sessionViewLoader.d.ts +141 -0
  280. package/dist/memory/sessionViewLoader.d.ts.map +1 -0
  281. package/dist/memory/sessionViewLoader.js +65 -0
  282. package/dist/memory/sessionViewLoader.js.map +1 -0
  283. package/dist/memory/sourceValidation.d.ts +10 -12
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +16 -32
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +44 -150
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +65 -164
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +81 -83
  292. package/dist/memory/types.js.map +1 -1
  293. package/dist/project-search/projectSearchProvider.d.ts +29 -0
  294. package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
  295. package/dist/project-search/projectSearchProvider.js +57 -0
  296. package/dist/project-search/projectSearchProvider.js.map +1 -0
  297. package/dist/project-search/terms.d.ts +14 -0
  298. package/dist/project-search/terms.d.ts.map +1 -0
  299. package/dist/project-search/terms.js +68 -0
  300. package/dist/project-search/terms.js.map +1 -0
  301. package/dist/project-search/types.d.ts +139 -0
  302. package/dist/project-search/types.d.ts.map +1 -0
  303. package/dist/project-search/types.js +8 -0
  304. package/dist/project-search/types.js.map +1 -0
  305. package/dist/role-pack/capabilityMap.d.ts +28 -0
  306. package/dist/role-pack/capabilityMap.d.ts.map +1 -0
  307. package/dist/role-pack/capabilityMap.js +56 -0
  308. package/dist/role-pack/capabilityMap.js.map +1 -0
  309. package/dist/role-pack/constants.d.ts +21 -0
  310. package/dist/role-pack/constants.d.ts.map +1 -0
  311. package/dist/role-pack/constants.js +21 -0
  312. package/dist/role-pack/constants.js.map +1 -0
  313. package/dist/role-pack/rolePackManager.d.ts +269 -0
  314. package/dist/role-pack/rolePackManager.d.ts.map +1 -0
  315. package/dist/role-pack/rolePackManager.js +1082 -0
  316. package/dist/role-pack/rolePackManager.js.map +1 -0
  317. package/dist/role-pack/strategyKeys.d.ts +100 -0
  318. package/dist/role-pack/strategyKeys.d.ts.map +1 -0
  319. package/dist/role-pack/strategyKeys.js +184 -0
  320. package/dist/role-pack/strategyKeys.js.map +1 -0
  321. package/dist/role-pack/strategyResolver.d.ts +109 -0
  322. package/dist/role-pack/strategyResolver.d.ts.map +1 -0
  323. package/dist/role-pack/strategyResolver.js +304 -0
  324. package/dist/role-pack/strategyResolver.js.map +1 -0
  325. package/dist/role-pack/types.d.ts +237 -0
  326. package/dist/role-pack/types.d.ts.map +1 -0
  327. package/dist/role-pack/types.js +8 -0
  328. package/dist/role-pack/types.js.map +1 -0
  329. package/dist/role-pack/validator.d.ts +38 -0
  330. package/dist/role-pack/validator.d.ts.map +1 -0
  331. package/dist/role-pack/validator.js +436 -0
  332. package/dist/role-pack/validator.js.map +1 -0
  333. package/dist/security/pathGuard.d.ts +69 -72
  334. package/dist/security/pathGuard.d.ts.map +1 -1
  335. package/dist/security/pathGuard.js +151 -131
  336. package/dist/security/pathGuard.js.map +1 -1
  337. package/dist/skill/skillLayer3.d.ts +91 -0
  338. package/dist/skill/skillLayer3.d.ts.map +1 -0
  339. package/dist/skill/skillLayer3.js +104 -0
  340. package/dist/skill/skillLayer3.js.map +1 -0
  341. package/dist/skill/skillManager.d.ts +136 -19
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +312 -61
  344. package/dist/skill/skillManager.js.map +1 -1
  345. package/dist/skill/skillScriptRunner.d.ts +97 -0
  346. package/dist/skill/skillScriptRunner.d.ts.map +1 -0
  347. package/dist/skill/skillScriptRunner.js +271 -0
  348. package/dist/skill/skillScriptRunner.js.map +1 -0
  349. package/dist/skill/types.d.ts +73 -16
  350. package/dist/skill/types.d.ts.map +1 -1
  351. package/dist/skill/types.js +5 -1
  352. package/dist/skill/types.js.map +1 -1
  353. package/dist/utils/array.d.ts +5 -6
  354. package/dist/utils/array.d.ts.map +1 -1
  355. package/dist/utils/array.js +6 -6
  356. package/dist/utils/array.js.map +1 -1
  357. package/dist/utils/atomicWrite.d.ts +8 -0
  358. package/dist/utils/atomicWrite.d.ts.map +1 -0
  359. package/dist/utils/atomicWrite.js +31 -0
  360. package/dist/utils/atomicWrite.js.map +1 -0
  361. package/dist/utils/backgroundTask.d.ts +38 -0
  362. package/dist/utils/backgroundTask.d.ts.map +1 -0
  363. package/dist/utils/backgroundTask.js +117 -0
  364. package/dist/utils/backgroundTask.js.map +1 -0
  365. package/dist/utils/configResourceManager.d.ts +40 -72
  366. package/dist/utils/configResourceManager.d.ts.map +1 -1
  367. package/dist/utils/configResourceManager.js +78 -76
  368. package/dist/utils/configResourceManager.js.map +1 -1
  369. package/dist/utils/errors.d.ts +44 -69
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +54 -71
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +104 -103
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +37 -45
  376. package/dist/utils/eventEmitter.js.map +1 -1
  377. package/dist/utils/fileSafe.d.ts +20 -0
  378. package/dist/utils/fileSafe.d.ts.map +1 -0
  379. package/dist/utils/fileSafe.js +56 -0
  380. package/dist/utils/fileSafe.js.map +1 -0
  381. package/dist/utils/frontmatter.d.ts +2 -3
  382. package/dist/utils/frontmatter.d.ts.map +1 -1
  383. package/dist/utils/frontmatter.js +2 -3
  384. package/dist/utils/frontmatter.js.map +1 -1
  385. package/dist/utils/hash.d.ts +12 -0
  386. package/dist/utils/hash.d.ts.map +1 -0
  387. package/dist/utils/hash.js +27 -0
  388. package/dist/utils/hash.js.map +1 -0
  389. package/dist/utils/http.d.ts +17 -0
  390. package/dist/utils/http.d.ts.map +1 -0
  391. package/dist/utils/http.js +29 -0
  392. package/dist/utils/http.js.map +1 -0
  393. package/dist/utils/json.d.ts +1 -1
  394. package/dist/utils/json.js +1 -1
  395. package/dist/utils/math.d.ts +25 -3
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +32 -16
  398. package/dist/utils/math.js.map +1 -1
  399. package/dist/utils/objects.d.ts +2 -3
  400. package/dist/utils/objects.d.ts.map +1 -1
  401. package/dist/utils/objects.js +2 -3
  402. package/dist/utils/objects.js.map +1 -1
  403. package/dist/utils/recallDefaults.d.ts +16 -0
  404. package/dist/utils/recallDefaults.d.ts.map +1 -0
  405. package/dist/utils/recallDefaults.js +16 -0
  406. package/dist/utils/recallDefaults.js.map +1 -0
  407. package/dist/utils/safeTimer.d.ts +8 -36
  408. package/dist/utils/safeTimer.d.ts.map +1 -1
  409. package/dist/utils/safeTimer.js +9 -37
  410. package/dist/utils/safeTimer.js.map +1 -1
  411. package/dist/utils/scanner.d.ts +97 -17
  412. package/dist/utils/scanner.d.ts.map +1 -1
  413. package/dist/utils/scanner.js +269 -47
  414. package/dist/utils/scanner.js.map +1 -1
  415. package/dist/utils/segmenter.d.ts +20 -19
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -97
  418. package/dist/utils/segmenter.js.map +1 -1
  419. package/dist/utils/strings.d.ts +15 -32
  420. package/dist/utils/strings.d.ts.map +1 -1
  421. package/dist/utils/strings.js +25 -44
  422. package/dist/utils/strings.js.map +1 -1
  423. package/dist/utils/time.d.ts +37 -0
  424. package/dist/utils/time.d.ts.map +1 -1
  425. package/dist/utils/time.js +56 -0
  426. package/dist/utils/time.js.map +1 -1
  427. package/dist/utils/toError.d.ts +13 -1
  428. package/dist/utils/toError.d.ts.map +1 -1
  429. package/dist/utils/toError.js +18 -1
  430. package/dist/utils/toError.js.map +1 -1
  431. package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
  432. package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
  433. package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
  434. package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
  435. package/dist/web-fetch/types.d.ts +30 -0
  436. package/dist/web-fetch/types.d.ts.map +1 -0
  437. package/dist/web-fetch/types.js +7 -0
  438. package/dist/web-fetch/types.js.map +1 -0
  439. package/dist/web-fetch/webFetchProvider.d.ts +10 -0
  440. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
  441. package/dist/web-fetch/webFetchProvider.js +28 -0
  442. package/dist/web-fetch/webFetchProvider.js.map +1 -0
  443. package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
  444. package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
  445. package/dist/web-search/fetchWebSearchProvider.js +199 -0
  446. package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
  447. package/dist/web-search/types.d.ts +46 -0
  448. package/dist/web-search/types.d.ts.map +1 -0
  449. package/dist/web-search/types.js +2 -0
  450. package/dist/{persona → web-search}/types.js.map +1 -1
  451. package/dist/web-search/webSearchProvider.d.ts +10 -0
  452. package/dist/web-search/webSearchProvider.d.ts.map +1 -0
  453. package/dist/web-search/webSearchProvider.js +30 -0
  454. package/dist/web-search/webSearchProvider.js.map +1 -0
  455. package/docs/architecture/role-pack-authoring-guide.md +243 -0
  456. package/docs/architecture/role-pack-spec.md +767 -0
  457. package/docs/memora-api-reference.md +416 -476
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +841 -806
  459. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
  460. package/package.json +105 -100
  461. package/role-packs/README.md +41 -0
  462. package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
  463. package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
  464. package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
  465. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
  466. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
  467. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
  468. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
  469. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
  470. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
  471. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
  472. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
  473. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
  474. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
  475. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
  476. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
  477. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
  478. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
  479. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
  480. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
  481. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
  482. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
  483. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
  484. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
  485. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +441 -0
  486. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
  487. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
  488. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
  489. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
  490. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
  491. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
  492. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
  493. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +48 -0
  494. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
  495. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +19 -0
  496. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
  497. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
  498. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
  499. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
  500. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
  501. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
  502. package/dist/agent/guardrail.d.ts +0 -49
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -59
  505. package/dist/agent/guardrail.js.map +0 -1
  506. package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
  507. package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
  508. package/dist/agent/managers/autoConfigRefiner.js +0 -146
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -209
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -331
  513. package/dist/agent/managers/configManager.js.map +0 -1
  514. package/dist/agent/managers/insightExtractor.d.ts +0 -139
  515. package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
  516. package/dist/agent/managers/insightExtractor.js +0 -401
  517. package/dist/agent/managers/insightExtractor.js.map +0 -1
  518. package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -239
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -413
  521. package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
  522. package/dist/agent/managers/relationBuilder.d.ts +0 -131
  523. package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
  524. package/dist/agent/managers/relationBuilder.js +0 -192
  525. package/dist/agent/managers/relationBuilder.js.map +0 -1
  526. package/dist/agent/personaMatcher.d.ts +0 -29
  527. package/dist/agent/personaMatcher.d.ts.map +0 -1
  528. package/dist/agent/personaMatcher.js +0 -60
  529. package/dist/agent/personaMatcher.js.map +0 -1
  530. package/dist/agent/userFactExtractor.d.ts +0 -25
  531. package/dist/agent/userFactExtractor.d.ts.map +0 -1
  532. package/dist/agent/userFactExtractor.js +0 -88
  533. package/dist/agent/userFactExtractor.js.map +0 -1
  534. package/dist/eval/evalRunner.d.ts +0 -94
  535. package/dist/eval/evalRunner.d.ts.map +0 -1
  536. package/dist/eval/evalRunner.js +0 -141
  537. package/dist/eval/evalRunner.js.map +0 -1
  538. package/dist/eval/evalTypes.d.ts +0 -148
  539. package/dist/eval/evalTypes.d.ts.map +0 -1
  540. package/dist/eval/evalTypes.js +0 -118
  541. package/dist/eval/evalTypes.js.map +0 -1
  542. package/dist/eval/scenarios.d.ts +0 -33
  543. package/dist/eval/scenarios.d.ts.map +0 -1
  544. package/dist/eval/scenarios.js +0 -109
  545. package/dist/eval/scenarios.js.map +0 -1
  546. package/dist/llm/embedding.d.ts +0 -79
  547. package/dist/llm/embedding.d.ts.map +0 -1
  548. package/dist/llm/embedding.js +0 -184
  549. package/dist/llm/embedding.js.map +0 -1
  550. package/dist/memory/hybridMerge.d.ts +0 -50
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -51
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -58
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -80
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -51
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -100
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -82
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -157
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -95
  567. package/dist/memory/relationStore.d.ts.map +0 -1
  568. package/dist/memory/relationStore.js +0 -2
  569. package/dist/memory/relationStore.js.map +0 -1
  570. package/dist/memory/store.d.ts +0 -71
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -199
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -180
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -381
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -179
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -284
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -109
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -315
  585. package/dist/persona/personaManager.js.map +0 -1
  586. package/dist/persona/types.d.ts +0 -32
  587. package/dist/persona/types.d.ts.map +0 -1
  588. package/dist/persona/types.js +0 -5
@@ -2,37 +2,52 @@
2
2
  * OpenAI Chat Completions 兼容实现
3
3
  *
4
4
  * 适用于:DeepSeek / 豆包 / 通义 / Ollama / 任何兼容 OpenAI 协议的 API
5
- * 详见 ADR-003
6
5
  */
7
6
  import { LlmProvider } from '../llm/provider.js';
8
- import { llmError, networkError, configError, toError } from '../utils/errors.js';
7
+ import { llmError, networkError, configError, isAbortError, isTimeoutError, } from '../utils/errors.js';
8
+ import { toError } from '../utils/toError.js';
9
9
  import { logger } from '../logging/logger.js';
10
10
  import { mergeAbortSignals } from '../llm/abortSignal.js';
11
+ /** 错误响应体截断长度(字符数):统一 4 处 errorText.slice(0,200) 的常量,避免魔法数字 */
12
+ const MAX_ERROR_BODY_LEN = 200;
13
+ // ─── LLM 请求参数边界(外部注入防失控) ─────────────────
14
+ /** timeoutMs 上限:5 分钟,防配置超大值导致请求等待失控(下限不设,测试/调试用小值模拟超时) */
15
+ const MAX_TIMEOUT_MS = 300_000;
11
16
  /**
12
- * 错误响应体截断长度(字符数)。
13
- *
14
- * handleResponseError 中 4 处 errorText.slice(0, 200) 的统一常量,
15
- * 避免魔法数字散落,便于后续调整截断策略。
17
+ * 归一化 maxTokens:仅做**形态防御**——正整数才透传(向下取整),零/负/非数值返回 undefined
18
+ * (不传,让服务端默认)。
19
+ * **上限不裁决**(有意为之,勿加回):真实上限由模型/服务端决定,超限值原样透传、由服务端
20
+ * 可见报错——本地任何一层静默丢弃都会造出「UI 显示值 ≠ 真实生效值」的坑(同一裁决见
21
+ * contextWindow:宿主护栏是输入边界的唯一可见裁决点,内核只防形态)。
16
22
  */
17
- const MAX_ERROR_BODY_LEN = 200;
23
+ function normalizeMaxTokens(value) {
24
+ if (typeof value !== 'number' || !Number.isFinite(value))
25
+ return undefined;
26
+ if (value < 1)
27
+ return undefined;
28
+ return Math.floor(value);
29
+ }
18
30
  /**
19
- * chunk 级读超时区分首 chunk 与 chunk 间(reasoning 模型适配)
20
- *
21
- * 背景:reasoning 模型(DeepSeek-R1/o1/QwQ 等)首 chunk 前需完成思维链推理,
22
- * 可能耗时 30-90s;chunk 间正常停顿 < 10s,但复杂推理节点可能短暂停顿。
23
- *
24
- * 策略:
25
- * - 首 chunk 超时 120s:与请求级超时一致,给 reasoning 模型足够思考时间
26
- * - chunk 间超时 60s:首 chunk 已到说明连接正常,60s 足以覆盖正常停顿
27
- *
28
- * 判定依据:firstChunkReceived 标志位区分两种阶段
31
+ * 归一化 timeoutMs:合法(≤MAX_TIMEOUT_MS 且 >0)返回原值,越界/非法回退默认。
32
+ * 防超大值等待失控;不设下限以保留测试用小超时值。
29
33
  */
30
- const FIRST_CHUNK_TIMEOUT_MS = 120_000;
31
- const INTER_CHUNK_TIMEOUT_MS = 60_000;
34
+ function normalizeTimeoutMs(value, fallback) {
35
+ if (typeof value !== 'number' || !Number.isFinite(value))
36
+ return fallback;
37
+ if (value <= 0 || value > MAX_TIMEOUT_MS)
38
+ return fallback;
39
+ return value;
40
+ }
32
41
  /**
33
- * 通用 OpenAI 兼容 Provider
34
- * 通过 baseUrl 适配不同厂商
42
+ * chunk 级读超时区分首 chunk 与 chunk 间(reasoning 适配):
43
+ * 首 chunk 前可能思考 30-90s(DeepSeek-R1/o1/QwQ 等)→ 120s;连接正常后停顿 <10s → 60s
35
44
  */
45
+ const FIRST_CHUNK_TIMEOUT_MS = 120_000;
46
+ const INTER_CHUNK_TIMEOUT_MS = 60_000;
47
+ /** 有效 SSE 事件停滞超时:即便有字节持续到达(keep-alive/代理心跳),只要长时间无 `data:` 事件,
48
+ * 也判超时——补 chunk 级超时(按 read 重置)对「有字节无进展」的真空区,防止连接半挂永久等待。 */
49
+ const EVENT_STALL_TIMEOUT_MS = 120_000;
50
+ /** 通用 OpenAI 兼容 Provider:通过 baseUrl 适配不同厂商 */
36
51
  export class OpenAICompatibleProvider extends LlmProvider {
37
52
  config;
38
53
  name;
@@ -40,14 +55,32 @@ export class OpenAICompatibleProvider extends LlmProvider {
40
55
  super();
41
56
  this.config = config;
42
57
  this.name = name;
58
+ this._setCapabilities(config);
59
+ }
60
+ /**
61
+ * 能力位赋值(内置为只读,外部不可改):默认 true 保留存量云 LLM「有工具集即走原生 FC」行为,
62
+ * 本地运行时(Ollama/LM Studio 等)无原生 FC 须在宿主配置时显式置 false。
63
+ * @param config 构造时的能力位声明(undefined → 回落默认)
64
+ */
65
+ _setCapabilities(config) {
66
+ this.supportsToolCalling =
67
+ config.supportsToolCalling ?? true;
68
+ this.supportsStructuredOutput =
69
+ config.supportsStructuredOutput ?? false;
43
70
  }
44
71
  /** 默认请求超时:120 秒 */
45
72
  static DEFAULT_TIMEOUT_MS = 120_000;
73
+ /** tool_call id 兜底的自增序列:id 缺失时给出**跨批唯一**的占位——
74
+ * 本批内下标 `call_${idx}` 会让同一 turn 的两次迭代各产 `call_0`,
75
+ * 服务端按 tool_call_id 配对时错位。实例级自增,杜绝模块级全局态(架构约束)。 */
76
+ toolCallIdSeq = 0;
46
77
  async *chat(messages, opts = {}) {
47
78
  const url = `${this.config.baseUrl}/chat/completions`;
48
79
  const model = opts.model ?? this.config.defaultModel;
49
- // 请求超时控制:默认 120s,可通过 opts.timeoutMs 覆盖
50
- const timeoutMs = opts.timeoutMs ?? OpenAICompatibleProvider.DEFAULT_TIMEOUT_MS;
80
+ // 请求超时控制:默认 120s,可通过 opts.timeoutMs 覆盖(越界回退默认,防超大值等待失控)
81
+ const timeoutMs = normalizeTimeoutMs(opts.timeoutMs, OpenAICompatibleProvider.DEFAULT_TIMEOUT_MS);
82
+ // maxTokens 形态归一:正整数透传(零/负/非数值忽略,让服务端默认);上限不裁决(超限原样发,服务端可见报错)
83
+ const maxTokens = normalizeMaxTokens(opts.maxTokens);
51
84
  const body = {
52
85
  model,
53
86
  messages: this.formatMessages(messages),
@@ -57,15 +90,16 @@ export class OpenAICompatibleProvider extends LlmProvider {
57
90
  };
58
91
  if (opts.tools)
59
92
  body['tools'] = opts.tools;
60
- if (opts.maxTokens)
61
- body['max_tokens'] = opts.maxTokens;
62
- // 结构化输出约束:透传 response_format 到请求 body
63
- // 供未来非 tool_call 场景使用(如归档摘要强制 JSON、配置建议提取)
64
- // 注意:不能与 tools 同时使用(OpenAI 协议限制),调用方需自行保证互斥
93
+ if (maxTokens !== undefined)
94
+ body['max_tokens'] = maxTokens;
95
+ // 透传 response_format;不能与 tools 同时使用(OpenAI 协议限制),调用方保证互斥
65
96
  if (opts.response_format)
66
97
  body['response_format'] = opts.response_format;
67
- // 合并 AbortSignal:外部取消信号 + 超时信号(mergeAbortSignals 集中维护,ADR-017 枝叶层 2 次提取)
68
- // 确保用户取消和请求超时都能中断 fetch 和流读取
98
+ // 透传推理深度(reasoning_effort):loop 在 multiStepReasoning='manual' 时设置 'low'
99
+ // 实现快速回答,必须转达给 provider 才生效(只声明+消费而不转达 = 契约断裂)
100
+ if (opts.reasoning_effort)
101
+ body['reasoning_effort'] = opts.reasoning_effort;
102
+ // 合并外部取消 + 超时信号,确保用户取消和请求超时都能中断 fetch 和流读取
69
103
  const abort = mergeAbortSignals(opts.signal, timeoutMs, 'LLM 请求超时');
70
104
  let response;
71
105
  try {
@@ -82,8 +116,8 @@ export class OpenAICompatibleProvider extends LlmProvider {
82
116
  catch (err) {
83
117
  abort.dispose();
84
118
  const e = toError(err);
85
- // 区分超时错误和网络错误
86
- if (e.name === 'AbortError' || e.name === 'TimeoutError') {
119
+ // 区分超时错误和网络错误(复用 errors.ts 探测器 SSOT,避免手写 name 判断双源漂移)
120
+ if (isAbortError(e) || isTimeoutError(e)) {
87
121
  throw networkError('LLM 请求超时', `${this.config.baseUrl} 请求超过 ${timeoutMs / 1000}s 未响应`, [
88
122
  '检查网络连接稳定性',
89
123
  '如频繁超时,考虑切换 provider 或在 config.json 调整 timeoutMs',
@@ -96,11 +130,8 @@ export class OpenAICompatibleProvider extends LlmProvider {
96
130
  '如使用 VPN/代理,检查代理设置',
97
131
  ], e);
98
132
  }
99
- // fetch 成功后保留 optsSignal 监听:用户在 SSE 流式阶段取消时,
100
- // 仍需通过 mergeAbortSignals 内部的 onOptsAbort 触发 abort 中断 reader.read()。
101
- // 注意:{ once: true } 仅在 optsSignal 自身 abort 时移除监听器;
102
- // 正常完成或异常路径必须显式 dispose(),否则监听器常驻泄漏。
103
- // 下方外层 try-finally 统一调用 abort.dispose(),覆盖所有抛错路径。
133
+ // fetch 成功后保留 optsSignal 监听,使用户在 SSE 阶段取消也能中断 reader.read();
134
+ // 正常完成/异常路径须显式 dispose(),否则监听器常驻泄漏(外层 try-finally 统一调用)
104
135
  try {
105
136
  if (!response.ok) {
106
137
  await this.handleResponseError(response);
@@ -111,23 +142,18 @@ export class OpenAICompatibleProvider extends LlmProvider {
111
142
  '如持续出现,联系厂商',
112
143
  ]);
113
144
  }
114
- // fetch 成功且响应正常:清除请求级总超时
115
- // SSE 阶段由 chunk 级超时(FIRST_CHUNK_TIMEOUT_MS / INTER_CHUNK_TIMEOUT_MS)独立保护
116
- // 若保留总超时,长文生成(>timeoutMs)会被错误中断
145
+ // fetch 成功后清除请求级总超时,SSE 阶段由 chunk 级超时独立保护,否则长文生成(>timeoutMs)会被错误中断
117
146
  abort.clearTimer();
118
147
  try {
119
- // 将 abort.signal 传入 SSE 解析器,使超时/取消能中断流读取
120
148
  yield* this.parseSseStream(response.body, abort.signal);
121
149
  }
122
150
  catch (err) {
123
- // SSE 解析异常时也要 cancel stream(Node 24 + undici 同上)
151
+ // SSE 解析异常时也 cancel stream 释放底层连接
124
152
  await this.safeCancelBody(response);
125
- // DOMException(AbortError/TimeoutError)是 LLM 中断协议:
126
- // 上游 AgentLoop/contextManager/agent.ts 按 err.name === 'AbortError' 识别,
127
- // 必须原样传播,不能包装为 MemoraError(否则中断协议失效)
153
+ // DOMException(AbortError/TimeoutError)是 LLM 中断协议,按 err.name==='AbortError' 识别,须原样传播不能包装为 MemoraError
128
154
  if (err instanceof DOMException)
129
155
  throw err;
130
- // 其他未知流读取异常统一包装为 MemoraError(避免裸 throw 逃逸非 MemoraError)
156
+ // 其他未知流异常统一包装为 MemoraError,避免裸 throw 逃逸非 MemoraError
131
157
  throw networkError('LLM 流读取异常', toError(err).message, ['稍后重试', '如持续出现,检查网络稳定性或切换 provider'], toError(err));
132
158
  }
133
159
  }
@@ -136,18 +162,14 @@ export class OpenAICompatibleProvider extends LlmProvider {
136
162
  abort.dispose();
137
163
  }
138
164
  }
139
- /**
140
- * 处理 HTTP 错误响应
141
- *
142
- * 消费并释放 body,根据状态码抛出相应的错误类型。
143
- */
165
+ /** 处理 HTTP 错误响应:消费并释放 body,按状态码抛相应错误类型 */
144
166
  async handleResponseError(response) {
145
167
  const errorText = await response.text().catch(() => '<无法读取响应体>');
146
168
  await this.safeCancelBody(response);
147
169
  const status = response.status;
148
170
  if (status === 401 || status === 403) {
149
171
  throw configError('LLM API Key 无效', `HTTP ${status}:${errorText.slice(0, MAX_ERROR_BODY_LEN)}`, [
150
- '检查 API Key 是否正确(注意 ${MEMORA_LLM_API_KEY} 占位符是否已展开)',
172
+ '检查 API Key 是否正确(注意 ${MEMORA_API_KEY} 占位符是否已展开)',
151
173
  '确认 Key 未过期',
152
174
  '如使用 DeepSeek/豆包,确认 Key 来自对应平台',
153
175
  ]);
@@ -171,14 +193,7 @@ export class OpenAICompatibleProvider extends LlmProvider {
171
193
  '可在 config.json 切换 provider 兜底',
172
194
  ]);
173
195
  }
174
- /**
175
- * 安全取消 response.body
176
- *
177
- * 在 SSE 异常和 HTTP 错误处理路径中均需 cancel response.body 释放底层连接,
178
- * cancel 本身失败不应阻塞后续错误抛出,仅 debug 记录。
179
- *
180
- * @param response - HTTP 响应对象
181
- */
196
+ /** 安全取消 response.body:cancel 失败不阻塞后续错误抛出,仅 debug 记录 */
182
197
  async safeCancelBody(response) {
183
198
  try {
184
199
  await response.body?.cancel();
@@ -188,12 +203,8 @@ export class OpenAICompatibleProvider extends LlmProvider {
188
203
  }
189
204
  }
190
205
  /**
191
- * 格式化消息为 OpenAI 协议格式
192
- *
193
- * 关键兼容性处理:
194
- * - assistant 消息带 tool_calls 时,若 content 为空字符串,转为 null
195
- * (部分 LLM provider 对空字符串 content 处理异常,导致请求挂起或报错)
196
- * - tool 消息必须包含 tool_call_id 关联对应的工具调用
206
+ * 格式化消息为 OpenAI 协议格式:assistant 带 tool_calls 时 content 空串转 null
207
+ * (部分 provider 对空串 content 处理异常);tool 消息须带 tool_call_id
197
208
  */
198
209
  formatMessages(messages) {
199
210
  return messages.map((m) => {
@@ -203,8 +214,7 @@ export class OpenAICompatibleProvider extends LlmProvider {
203
214
  if (m.role === 'assistant' && m.toolCalls) {
204
215
  return {
205
216
  role: 'assistant',
206
- // OpenAI 协议:有 tool_calls 时 content 应为 null(而非空字符串),
207
- // 空字符串会导致部分 provider 请求异常或无响应
217
+ // OpenAI 协议:有 tool_calls 时 content 应为 null(空串会致部分 provider 请求异常)
208
218
  content: m.content && m.content.length > 0 ? m.content : null,
209
219
  tool_calls: m.toolCalls,
210
220
  };
@@ -213,60 +223,82 @@ export class OpenAICompatibleProvider extends LlmProvider {
213
223
  });
214
224
  }
215
225
  /**
216
- * 解析 SSE 流
217
- * OpenAI 协议:data: {...}\n\n
218
- *
219
- * 支持解析 tool_calls delta(流式工具调用):
220
- * OpenAI 协议中 tool_calls 以 delta 形式分片传输,
221
- * 需要跨 chunk 累积 function.name 和 function.arguments,
222
- * 在 finish_reason='tool_calls' 或流结束时输出完整的 toolCalls。
223
- *
224
- * @param body - SSE 响应流
225
- * @param signal - 中止信号(超时/用户取消),中断 reader.read() 等待
226
+ * 解析 SSE 流(data: {...}\n\n)。tool_calls 以 delta 分片传输,
227
+ * 需跨 chunk 累积 name/arguments,在 finish_reason='tool_calls' 或流结束时输出完整 toolCalls
226
228
  */
227
229
  async *parseSseStream(body, signal) {
228
230
  const reader = body.getReader();
229
231
  const decoder = new TextDecoder();
230
232
  let buffer = '';
231
- // 流式 tool_calls 累积器:按 index 分片累积 name + arguments
232
- // OpenAI 协议:同一个 tool_call 的 name/arguments 可能跨多个 delta 分片到达
233
+ // 流式 tool_calls 累积器:同一 tool_call 的 name/arguments 可能跨多个 delta 分片到达
233
234
  const toolCallAccumulators = new Map();
234
- // chunk 级读超时区分首 chunk 与 chunk 间
235
- // reader.read() 阻塞时若无超时,连接半挂(NAT/代理/服务端慢响应不关 TCP)会永久等待
236
- // 采用 setTimeout + reader.cancel:超时则 cancel reader 让 read() reject 退出
235
+ // 已发射过「工具意图预告」的累积器 idx:同一工具只提前上报一次,防 delta 风暴。
236
+ // 必须是本生成器局部变量——随流结束/中断自然回收,防跨请求泄漏。
237
+ const emittedPendingIndexes = new Set();
238
+ // chunk 级读超时:无超时则连接半挂(NAT/代理不关 TCP)会永久等待;
239
+ // 区分首 chunk(reasoning 思考数十秒,120s)与 chunk 间(连接已正常,60s);
240
+ // 另有有效事件停滞监视(收到任意 data: 行即重置),补 chunk 超时漏掉的
241
+ // 「服务端持续发 keep-alive 字节但无进展」真空区。
237
242
  //
238
- // 区分首 chunk 与 chunk 间(reasoning 模型适配):
239
- // - 首 chunk 前 LLM 可能思考数十秒(reasoning 模型),用 FIRST_CHUNK_TIMEOUT_MS(120s)
240
- // - 首 chunk 到达后连接已正常,chunk 间停顿用 INTER_CHUNK_TIMEOUT_MS(60s)
243
+ // ⚠️ **超时必须经竞速闸 reject,不得用 `reader.cancel()` 表达——本看门狗成立的前提,勿回改**:
244
+ // `reader.cancel(reason)` 的语义是「关闭流并让**挂起的 read() 以 `{done:true}` 收尾**」,
245
+ // reason **不会**出现在任何抛出物上(WHATWG 规范行为;Node 22 / undici 实测:cancel 后
246
+ // read 产 `{done:true}`;对照 `AbortController.abort(reason)` 才会让 read reject reason)。
247
+ // 若把 cancel 当作「让 read 抛错」→ 超时被读成「流正常结束且零产出」→ 落「空响应重试」
248
+ // 通道 → **超时被静默吞成重试**(坑)。真机故障实证(`round-1789462982489`):
249
+ // 中断源在 reasoning 结束后停摆,60s(chunk 间)+120s+120s
250
+ // (两次重试首 chunk)三段超时全被吞成静默重试,期间**零 UI 事件**(tokenOut 恒 0),
251
+ // 用户干等 5 分 5 秒后手动取消。
252
+ // 故看门狗只负责「以真超时驳回当前读」;底层连接的释放仍由 finally 的 reader.cancel() 负责。
253
+ /** 看门狗已到期的超时(竞速闸未挂起时的落账处:下一轮读之前立即抛,账面不丢) */
254
+ let overdueTimeout = null;
255
+ /** 竞速闸的驳回句柄(仅在一次读的存活期内非空) */
256
+ let pendingReadReject = null;
257
+ /** 看门狗统一出口:以真超时驳回当前读;两读之间到期则记账,由循环顶部补抛 */
258
+ const failCurrentRead = (reason) => {
259
+ overdueTimeout ??= new DOMException(reason, 'TimeoutError');
260
+ pendingReadReject?.(overdueTimeout);
261
+ };
262
+ let stallTimer = null;
263
+ const stallReset = () => {
264
+ if (stallTimer)
265
+ clearTimeout(stallTimer);
266
+ stallTimer = setTimeout(() => {
267
+ failCurrentRead('LLM 流长时间无有效事件(有字节但无 data 事件)');
268
+ }, EVENT_STALL_TIMEOUT_MS);
269
+ };
270
+ // 进入流读取即启动停滞监视(首事件前的“有字节无事件”同样覆盖)
271
+ stallReset();
241
272
  let firstChunkReceived = false;
242
273
  try {
243
274
  while (true) {
244
- // 检查中止信号:超时或用户取消时立即退出
245
- // 注意:此处刻意抛 DOMException 而非 MemoraError——
246
- // AbortError 是 LLM 中断协议,上游(AgentLoop/contextManager/agent.ts)按
247
- // err.name === 'AbortError' 识别用户取消/超时,包装为 MemoraError 会破坏协议
275
+ // 检查中止信号:刻意抛 DOMException(AbortError)而非 MemoraError——它是 LLM 中断协议,上游按 err.name==='AbortError' 识别
248
276
  if (signal?.aborted) {
249
277
  throw new DOMException('LLM 流读取被中止', signal.reason?.name ?? 'AbortError');
250
278
  }
251
- // chunk 级读超时:根据是否收到首 chunk 选择不同超时阈值
252
- // reader.cancel() 会让 pending 的 reader.read() 抛 AbortError(DOMException)
253
- const chunkTimeoutMs = firstChunkReceived
254
- ? INTER_CHUNK_TIMEOUT_MS
255
- : FIRST_CHUNK_TIMEOUT_MS;
279
+ // 两读之间到期的超时不丢账:读之前先补抛
280
+ if (overdueTimeout)
281
+ throw overdueTimeout;
282
+ // 根据是否收到首 chunk 选不同超时阈值(到期经 failCurrentRead 驳回当前读,见上方注释)
283
+ const chunkTimeoutMs = firstChunkReceived ? INTER_CHUNK_TIMEOUT_MS : FIRST_CHUNK_TIMEOUT_MS;
256
284
  const chunkTimer = setTimeout(() => {
257
- // cancel 失败也不影响(reader 可能已 done 或被其他路径 cancel),记日志便于排查偶发连接泄漏
258
- const reason = firstChunkReceived ? 'LLM chunk 间读取超时' : 'LLM 首 chunk 读取超时';
259
- reader.cancel(new DOMException(reason, 'TimeoutError')).catch((err) => {
260
- logger.debug({ err: toError(err).message }, 'reader.cancel 失败(超时清理路径)');
261
- });
285
+ failCurrentRead(firstChunkReceived ? 'LLM chunk 间读取超时' : 'LLM 首 chunk 读取超时');
262
286
  }, chunkTimeoutMs);
287
+ // 超时竞速闸:read 与超时赛跑。超时先到 → 本读以真超时 reject;被落空的 read 仍挂起,
288
+ // 待 finally 释放连接时自然收尾,其无人观察的 resolve 无副作用。
289
+ const timeoutGate = new Promise((_, reject) => {
290
+ pendingReadReject = reject;
291
+ });
292
+ // 兜底观察者:闸被「已被真实数据抢先的读」落空时,其拒绝不得变成无人处理的拒绝
293
+ void timeoutGate.catch(() => undefined);
263
294
  let readResult;
264
295
  try {
265
- readResult = await reader.read();
296
+ readResult = await Promise.race([reader.read(), timeoutGate]);
266
297
  }
267
298
  finally {
268
- // read 完成(无论成功/失败)都清理 chunk timer,避免泄漏
299
+ // read 完成(无论成功/失败)都清理 chunk timer 与竞速闸句柄,避免泄漏
269
300
  clearTimeout(chunkTimer);
301
+ pendingReadReject = null;
270
302
  }
271
303
  const { done, value } = readResult;
272
304
  if (done)
@@ -282,6 +314,8 @@ export class OpenAICompatibleProvider extends LlmProvider {
282
314
  const trimmed = line.trim();
283
315
  if (!trimmed.startsWith('data:'))
284
316
  continue;
317
+ // 有效事件停滞重置:收到 data 行即代表服务端仍在推进(即便内容暂无可输出)
318
+ stallReset();
285
319
  const data = trimmed.slice(5).trim();
286
320
  if (data === '[DONE]') {
287
321
  // 流结束:输出累积的 tool_calls(如果有)
@@ -292,14 +326,32 @@ export class OpenAICompatibleProvider extends LlmProvider {
292
326
  }
293
327
  try {
294
328
  const json = JSON.parse(data);
329
+ // 提取 usage 数据(部分 Provider 在流式响应末尾携带 token 用量统计)
330
+ const usage = json.usage
331
+ ? {
332
+ inputTokens: json.usage.prompt_tokens ?? 0,
333
+ outputTokens: json.usage.completion_tokens ?? 0,
334
+ totalTokens: json.usage.total_tokens,
335
+ }
336
+ : undefined;
295
337
  const choice = json.choices?.[0];
296
- if (!choice)
338
+ // 纯 usage 事件(末尾统计块,choices 为空数组):单独 yield,跳过 choices 处理
339
+ if (!choice) {
340
+ if (usage)
341
+ yield { usage };
297
342
  continue;
343
+ }
298
344
  const chunk = {};
299
- // delta.content 可能为 null(tool_calls 场景),!= null 排除 null/undefined
300
- // 空字符串在流式中极少出现,但不影响语义,保持原有 truthy 检查即可
345
+ // usage 与 choices 并存时合并到同一 chunk(单出口,防同事件双 yield 致 content 重复)
346
+ if (usage)
347
+ chunk.usage = usage;
348
+ // delta.content 可能为 null(tool_calls 场景),truthy 检查即可
301
349
  if (choice.delta?.content)
302
350
  chunk.content = choice.delta.content;
351
+ // 模型思考(协议字段 reasoning_content → LlmChunk.thought):增量透传,与 content 并列
352
+ // 增量语义:消费侧自行累积。thought 命名避开路由 TaskType='reasoning' 与相位 'thinking'。
353
+ if (choice.delta?.reasoning_content)
354
+ chunk.thought = choice.delta.reasoning_content;
303
355
  // 累积 tool_calls delta
304
356
  if (choice.delta?.tool_calls) {
305
357
  for (const tc of choice.delta.tool_calls) {
@@ -312,6 +364,17 @@ export class OpenAICompatibleProvider extends LlmProvider {
312
364
  if (tc.function?.arguments)
313
365
  acc.arguments += tc.function.arguments;
314
366
  toolCallAccumulators.set(idx, acc);
367
+ // 工具意图预告:name 首次由空变非空即上报,不必等 finish_reason——
368
+ // 写文件等大参数工具的参数生成段可能数十秒,UI 需提前显示「准备中」工具行。
369
+ // 每 idx 只发一次(emittedPendingIndexes 去重防风暴);id 缺失时按与最终构建
370
+ // 同一规则合成并**写回 acc.id**(acc.id || `call_${seq}`),保证 finish_reason
371
+ // 时 buildToolCallsFromAccumulators 复用同一 id,宿主侧可按 id 配对升级。
372
+ if (acc.name && !emittedPendingIndexes.has(idx)) {
373
+ emittedPendingIndexes.add(idx);
374
+ if (!acc.id)
375
+ acc.id = `call_${this.toolCallIdSeq++}`;
376
+ chunk.partialToolCall = { id: acc.id, name: acc.name };
377
+ }
315
378
  }
316
379
  }
317
380
  // finish_reason='tool_calls' 时输出完整的 toolCalls
@@ -320,8 +383,7 @@ export class OpenAICompatibleProvider extends LlmProvider {
320
383
  toolCallAccumulators.clear();
321
384
  }
322
385
  else if (choice.finish_reason && toolCallAccumulators.size > 0) {
323
- // finish_reason 为 stop/length 等非 tool_calls 值时,清空累积器防止污染下一次调用
324
- // (某些模型可能在 stop 时残留不完整的 tool_calls 碎片)
386
+ // 非 tool_calls 的 finish_reason(stop/length 等)时清空累积器,防残留碎片污染下一次调用
325
387
  toolCallAccumulators.clear();
326
388
  }
327
389
  if (choice.finish_reason) {
@@ -336,36 +398,33 @@ export class OpenAICompatibleProvider extends LlmProvider {
336
398
  }
337
399
  }
338
400
  finally {
339
- // reader.cancel() 彻底释放底层 TCP 连接(releaseLock 仅释放锁不取消流,
340
- // 无法避免 generator 提前 break 时底层连接悬挂;也是 CallLlmWithRetry
341
- // 无 finally 触发 abort 时的兜底)
342
- // 已 done/cancel 的 reader 调 cancel 是 no-op,安全
401
+ // 清理事件停滞监视(流已结束,不再需要 stall 兜底)
402
+ if (stallTimer)
403
+ clearTimeout(stallTimer);
404
+ // reader.cancel() 彻底释放底层 TCP 连接(releaseLock 仅释放锁不取消流,防止 break 时连接悬挂);已 done 的 cancel 是 no-op
343
405
  try {
344
406
  await reader.cancel();
345
407
  }
346
408
  catch (err) {
347
- // cancel 失败不阻塞,reader 会被 GC 回收;记日志便于排查偶发连接泄漏
409
+ // cancel 失败不阻塞,reader 会被 GC 回收;记日志排查偶发连接泄漏
348
410
  logger.debug({ err: toError(err).message }, 'reader.cancel 失败(finally 清理路径)');
349
411
  }
350
412
  }
351
413
  }
352
- /**
353
- * 从累积器构建完整的 toolCalls 数组(用于 finish_reason='tool_calls' 场景)
354
- */
414
+ /** 从累积器构建完整 toolCalls 数组(finish_reason='tool_calls' 场景)。
415
+ * id 缺失时兜底为 `call_<toolCallIdSeq++>`(跨批唯一),不因两次迭代都缺 id 而产出重复 id。 */
355
416
  buildToolCallsFromAccumulators(accs) {
356
417
  const calls = [];
357
- for (const [idx, acc] of accs) {
418
+ for (const [, acc] of accs) {
358
419
  calls.push({
359
- id: acc.id || `call_${idx}`,
420
+ id: acc.id || `call_${this.toolCallIdSeq++}`,
360
421
  type: 'function',
361
422
  function: { name: acc.name, arguments: acc.arguments },
362
423
  });
363
424
  }
364
425
  return calls;
365
426
  }
366
- /**
367
- * 从累积器构建 LlmChunk(用于流结束时的兜底输出)
368
- */
427
+ /** 从累积器构建 LlmChunk(流结束时的兜底输出) */
369
428
  buildToolCallsChunk(accs) {
370
429
  return {
371
430
  toolCalls: this.buildToolCallsFromAccumulators(accs),
@@ -1 +1 @@
1
- {"version":3,"file":"openaiCompatible.js","sourceRoot":"","sources":["../../src/llm/openaiCompatible.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;;;;;;;;;GAWG;AACH,MAAM,sBAAsB,GAAG,OAAO,CAAC;AACvC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC;;;GAGG;AACH,MAAM,OAAO,wBAAyB,SAAQ,WAAW;IAKpC;IAJV,IAAI,CAAS;IAEtB,YACE,IAAY,EACK,MAA8B;QAE/C,KAAK,EAAE,CAAC;QAFS,WAAM,GAAN,MAAM,CAAwB;QAG/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,mBAAmB;IACX,MAAM,CAAU,kBAAkB,GAAG,OAAO,CAAC;IAErD,KAAK,CAAC,CAAC,IAAI,CAAC,QAAmB,EAAE,OAAoB,EAAE;QACrD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QACrD,uCAAuC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,wBAAwB,CAAC,kBAAkB,CAAC;QAEhF,MAAM,IAAI,GAA4B;YACpC,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YACvC,2CAA2C;YAC3C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACxD,sCAAsC;QACtC,2CAA2C;QAC3C,4CAA4C;QAC5C,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QAEzE,yEAAyE;QACzE,6BAA6B;QAC7B,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEpE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC1B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;iBAC9C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACvB,cAAc;YACd,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACzD,MAAM,YAAY,CAChB,UAAU,EACV,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,SAAS,SAAS,GAAG,IAAI,OAAO,EACtD;oBACE,WAAW;oBACX,iDAAiD;oBACjD,MAAM;iBACP,EACD,CAAC,CACF,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,CAChB,YAAY,EACZ,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,EAC1C;gBACE,uBAAuB;gBACvB,iBAAiB;gBACjB,mBAAmB;aACpB,EACD,CAAC,CACF,CAAC;QACJ,CAAC;QAED,6CAA6C;QAC7C,oEAAoE;QACpE,mDAAmD;QACnD,qCAAqC;QACrC,kDAAkD;QAElD,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,QAAQ,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,kBAAkB,EAAE;oBAC3E,MAAM;oBACN,YAAY;iBACb,CAAC,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,yEAAyE;YACzE,gCAAgC;YAChC,KAAK,CAAC,UAAU,EAAE,CAAC;YAEnB,IAAI,CAAC;gBACH,yCAAyC;gBACzC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iDAAiD;gBACjD,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACpC,mDAAmD;gBACnD,uEAAuE;gBACvE,qCAAqC;gBACrC,IAAI,GAAG,YAAY,YAAY;oBAAE,MAAM,GAAG,CAAC;gBAC3C,wDAAwD;gBACxD,MAAM,YAAY,CAChB,WAAW,EACX,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EACpB,CAAC,MAAM,EAAE,2BAA2B,CAAC,EACrC,OAAO,CAAC,GAAG,CAAC,CACb,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,yCAAyC;YACzC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,mBAAmB,CAAC,QAAkB;QAClD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACrC,MAAM,WAAW,CAAC,gBAAgB,EAAE,QAAQ,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE;gBAC9F,oDAAoD;gBACpD,YAAY;gBACZ,+BAA+B;aAChC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,QAAQ,CAAC,UAAU,EAAE,YAAY,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE;gBAC/E,MAAM;gBACN,2BAA2B;aAC5B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YAClC,MAAM,QAAQ,CAAC,YAAY,EAAE,QAAQ,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE;gBACvF,eAAe;gBACf,eAAe;gBACf,6BAA6B;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,CAAC,WAAW,EAAE,QAAQ,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,EAAE;YACtF,MAAM;YACN,qBAAqB;YACrB,+BAA+B;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,cAAc,CAAC,QAAkB;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,cAAc,CAAC,QAAmB;QACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC1C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,oDAAoD;oBACpD,8BAA8B;oBAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC7D,UAAU,EAAE,CAAC,CAAC,SAAS;iBACxB,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACK,KAAK,CAAC,CAAC,cAAc,CAAC,IAAgC,EAAE,MAAoB;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,kDAAkD;QAClD,4DAA4D;QAC5D,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA2D,CAAC;QAEhG,gCAAgC;QAChC,uDAAuD;QACvD,qEAAqE;QACrE,EAAE;QACF,uCAAuC;QACvC,yEAAyE;QACzE,8DAA8D;QAC9D,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC;YACH,OAAO,IAAI,EAAE,CAAC;gBACZ,sBAAsB;gBACtB,yCAAyC;gBACzC,+DAA+D;gBAC/D,4DAA4D;gBAC5D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;gBAC5E,CAAC;gBAED,oCAAoC;gBACpC,wEAAwE;gBACxE,MAAM,cAAc,GAAG,kBAAkB;oBACvC,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,sBAAsB,CAAC;gBAC3B,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;oBACjC,6DAA6D;oBAC7D,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;oBAC3E,MAAM,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;wBAC7E,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;oBAC1E,CAAC,CAAC,CAAC;gBACL,CAAC,EAAE,cAAc,CAAC,CAAC;gBAEnB,IAAI,UAAU,CAAC;gBACf,IAAI,CAAC;oBACH,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC;wBAAS,CAAC;oBACT,uCAAuC;oBACvC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;gBAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;gBACnC,IAAI,IAAI;oBAAE,MAAM;gBAEhB,4CAA4C;gBAC5C,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACxB,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACtB,4BAA4B;wBAC5B,IAAI,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;4BAClC,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;wBACvD,CAAC;wBACD,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAa3B,CAAC;wBAEF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,MAAM;4BAAE,SAAS;wBAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;wBAC3B,kEAAkE;wBAClE,uCAAuC;wBACvC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO;4BAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;wBAEhE,sBAAsB;wBACtB,IAAI,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;4BAC7B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gCACzC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;gCAC1B,MAAM,GAAG,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;gCACjF,IAAI,EAAE,CAAC,EAAE;oCAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gCAC1B,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI;oCAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gCACpD,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS;oCAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gCACnE,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BACrC,CAAC;wBACH,CAAC;wBAED,8CAA8C;wBAC9C,IAAI,MAAM,CAAC,aAAa,KAAK,YAAY,EAAE,CAAC;4BAC1C,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,8BAA8B,CAAC,oBAAoB,CAAC,CAAC;4BAC5E,oBAAoB,CAAC,KAAK,EAAE,CAAC;wBAC/B,CAAC;6BAAM,IAAI,MAAM,CAAC,aAAa,IAAI,oBAAoB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;4BACjE,8DAA8D;4BAC9D,uCAAuC;4BACvC,oBAAoB,CAAC,KAAK,EAAE,CAAC;wBAC/B,CAAC;wBAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;4BACzB,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,aAAyC,CAAC;wBACxE,CAAC;wBACD,MAAM,KAAK,CAAC;oBACd,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,sDAAsD;YACtD,sDAAsD;YACtD,2BAA2B;YAC3B,6CAA6C;YAC7C,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,6CAA6C;gBAC7C,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,8BAA8B,CACpC,IAAkE;QAElE,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,QAAQ,GAAG,EAAE;gBAC3B,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,IAAkE;QAElE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC;YACpD,YAAY,EAAE,YAAY;SAC3B,CAAC;IACJ,CAAC"}
1
+ {"version":3,"file":"openaiCompatible.js","sourceRoot":"","sources":["../../src/llm/openaiCompatible.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,16 @@
1
- /**
2
- * LLM Provider 抽象接口
3
- * 所有 LLM 实现(DeepSeek / 豆包 / OpenAI / Mock)必须实现此接口
4
- * 详见 ADR-003
5
- */
1
+ /** LLM Provider 抽象接口:所有 LLM 实现(DeepSeek/豆包/OpenAI/Mock)必须实现 */
6
2
  import type { LlmChunk } from '../llm/types.js';
7
3
  export interface Message {
8
4
  role: 'system' | 'user' | 'assistant' | 'tool';
9
5
  content: string;
6
+ /**
7
+ * 轮次 ID(可选):标识该消息归属的「问答轮次」。
8
+ * 由 loop 在写入 user/assistant/tool 消息时附上当前 currentRoundId,
9
+ * 作为替换式压缩(第一级 LRU)取 round-summary 的单一真理源——
10
+ * roundId 随消息携带,不依赖任何外部序列的尾部对齐,杜绝错位替换。
11
+ */
12
+ roundId?: string;
13
+ name?: string;
10
14
  toolCalls?: Array<{
11
15
  id: string;
12
16
  type: 'function';
@@ -30,11 +34,10 @@ export interface ChatOptions {
30
34
  };
31
35
  }>;
32
36
  /**
33
- * 结构化输出约束(OpenAI response_format 兼容协议)
34
- *
35
- * 当 Provider 支持 structured output 且工具定义标记 strict 时,
36
- * AgentLoop 自动生成 json_schema 约束,强制 LLM 输出合法 tool_call。
37
- * 不支持的 Provider 静默跳过,fallback 到纯文本 tool_call 模式。
37
+ * 结构化输出约束(OpenAI Function Calling 响应格式约束)。
38
+ * 注意:response_format 不能与 tools 同时使用(OpenAI 协议限制),故 AgentLoop 默认不生成它
39
+ * (见 loop.ts buildChatOptions 注释)——此处仅为调用方显式传入时的可选能力孔,不宣称任何
40
+ * 「fallback 到纯文本 tool_call」的静默降级(文本出口不是可调用通道)。
38
41
  */
39
42
  response_format?: {
40
43
  type: 'json_schema';
@@ -44,48 +47,32 @@ export interface ChatOptions {
44
47
  schema: Record<string, unknown>;
45
48
  };
46
49
  };
47
- /**
48
- * 强制不使用流式(预留字段,当前无消费者)
49
- *
50
- * openaiCompatible 始终以 stream:true 发起请求(chat() 返回 AsyncIterable)。
51
- * 本字段保留用于未来"非流式回退"场景(如低延迟短回复或 Provider 不支持 SSE 时)。
52
- * 保留在公共 API 中以维持 ChatOptions 契约稳定。
53
- */
54
- stream?: boolean;
55
- /**
56
- * 中止信号:用于取消正在进行的 LLM 请求
57
- *
58
- * AgentLoop 在用户取消对话时传入 AbortSignal,
59
- * Provider 应将 signal 传给底层 fetch/stream 读取,确保请求可被中断。
60
- */
50
+ /** 推理深度控制:'low'|'medium'|'high',Provider 不支持时静默忽略 */
51
+ reasoning_effort?: 'low' | 'medium' | 'high';
52
+ /** 中止信号:用户取消时传入,Provider 应传给底层 fetch/stream 以支持中断 */
61
53
  signal?: AbortSignal;
62
- /**
63
- * 请求超时(毫秒)。默认 120 秒。
64
- * 超时后抛出 networkError,由 callLlmWithRetry 决定是否重试。
65
- */
54
+ /** 请求超时(毫秒,默认 120s):超时抛 networkError,由 callLlmWithRetry 决定是否重试 */
66
55
  timeoutMs?: number;
67
56
  }
68
- /**
69
- * LLM Provider 抽象类
70
- * 实现类需实现 chat() 流式方法
71
- */
57
+ /** LLM Provider 抽象类:实现类需实现 chat() 流式方法 */
72
58
  export declare abstract class LlmProvider {
73
59
  abstract readonly name: string;
74
60
  /**
75
- * 是否支持结构化输出(response_format json_schema)
61
+ * 是否支持原生工具调用(OpenAI Function Calling 的 tools 协议)。
76
62
  *
77
- * 默认 false,子类可覆盖。用于非 tool_call 场景的结构化输出约束
78
- * (如归档摘要强制 JSON、配置建议提取等)。调用方在构造 ChatOptions
79
- * 时显式传入 response_format,Provider 应将其透传到请求 body。
63
+ * 与 supportsStructuredOutput 互斥(response_format 不能与 tools 同时使用,OpenAI 协议限制):
64
+ * - 支持 tools → loop 走原生工具通道(列工具 + 传 tools 参数)。
65
+ * - 支持 structured → loop 传 response_format(JSON mode 回落)。
66
+ * - 两者皆 false → 无工具能力,loop 收起工具清单并显式告知(可观测,不静默)。
80
67
  *
81
- * 注意:response_format 不能与 tools 同时使用(OpenAI 协议限制),
82
- * tool_calls 走独立的 SSE delta 流式协议,无需此约束。
68
+ * 默认 **true**(存量行为):云 LLM 绝大多数支持原生 FC(有工具集就传 tools,与历史一致)。
69
+ * 本地运行时(Ollama/LM Studio 等)是否支持原生 FC 无法从 baseUrl 推断,须在宿主配置时
70
+ * 显式置 false(互斥双能力位)。
83
71
  */
72
+ readonly supportsToolCalling: boolean;
73
+ /** 是否支持结构化输出(默认 false)。注意:response_format 不能与 tools 同时使用(OpenAI 协议限制) */
84
74
  readonly supportsStructuredOutput: boolean;
85
- /**
86
- * 流式对话
87
- * 返回 AsyncIterable,每项是一个增量块
88
- */
75
+ /** 流式对话:返回 AsyncIterable,每项是一个增量块 */
89
76
  abstract chat(messages: Message[], opts?: ChatOptions): AsyncIterable<LlmChunk>;
90
77
  }
91
78
  //# sourceMappingURL=provider.d.ts.map