@itphx/synth-core 0.2.0 → 0.4.4

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 (670) hide show
  1. package/definitions/protected-paths.json +36 -0
  2. package/definitions/shell-policy.json +36 -0
  3. package/dist/auth/local.d.ts +14 -0
  4. package/dist/auth/local.d.ts.map +1 -1
  5. package/dist/auth/local.js +63 -11
  6. package/dist/auth/local.js.map +1 -1
  7. package/dist/auth/local.test.js +59 -0
  8. package/dist/auth/local.test.js.map +1 -1
  9. package/dist/definitions/protected-paths.json +36 -0
  10. package/dist/definitions/shell-policy.json +36 -0
  11. package/dist/engine/agents/definitions/admin.json +3 -1
  12. package/dist/engine/agents/definitions/analyst.json +3 -1
  13. package/dist/engine/agents/definitions/assistant.json +2 -2
  14. package/dist/engine/agents/definitions/auditor.json +4 -1
  15. package/dist/engine/agents/definitions/developer.json +4 -1
  16. package/dist/engine/agents/definitions/devops.json +4 -1
  17. package/dist/engine/agents/definitions/explore.json +3 -3
  18. package/dist/engine/agents/definitions/general.json +2 -2
  19. package/dist/engine/agents/definitions/pm.json +5 -1
  20. package/dist/engine/agents/definitions/qa.json +4 -1
  21. package/dist/engine/agents/definitions/title.json +2 -2
  22. package/dist/engine/agents/index.d.ts +4 -0
  23. package/dist/engine/agents/index.d.ts.map +1 -1
  24. package/dist/engine/agents/index.js +9 -3
  25. package/dist/engine/agents/index.js.map +1 -1
  26. package/dist/engine/agents/mode.d.ts +5 -3
  27. package/dist/engine/agents/mode.d.ts.map +1 -1
  28. package/dist/engine/agents/mode.js +6 -6
  29. package/dist/engine/agents/mode.js.map +1 -1
  30. package/dist/engine/agents/mode.test.js +9 -3
  31. package/dist/engine/agents/mode.test.js.map +1 -1
  32. package/dist/engine/agents/normalize.d.ts +9 -0
  33. package/dist/engine/agents/normalize.d.ts.map +1 -0
  34. package/dist/engine/agents/normalize.js +22 -0
  35. package/dist/engine/agents/normalize.js.map +1 -0
  36. package/dist/engine/agents/normalize.test.d.ts +2 -0
  37. package/dist/engine/agents/normalize.test.d.ts.map +1 -0
  38. package/dist/engine/agents/normalize.test.js +37 -0
  39. package/dist/engine/agents/normalize.test.js.map +1 -0
  40. package/dist/engine/agents/registry.d.ts +2 -1
  41. package/dist/engine/agents/registry.d.ts.map +1 -1
  42. package/dist/engine/agents/registry.js +7 -6
  43. package/dist/engine/agents/registry.js.map +1 -1
  44. package/dist/engine/agents/registry.test.js +24 -0
  45. package/dist/engine/agents/registry.test.js.map +1 -1
  46. package/dist/engine/context/config.d.ts +43 -6
  47. package/dist/engine/context/config.d.ts.map +1 -1
  48. package/dist/engine/context/config.js +123 -26
  49. package/dist/engine/context/config.js.map +1 -1
  50. package/dist/engine/context/config.security.test.d.ts +2 -0
  51. package/dist/engine/context/config.security.test.d.ts.map +1 -0
  52. package/dist/engine/context/config.security.test.js +82 -0
  53. package/dist/engine/context/config.security.test.js.map +1 -0
  54. package/dist/engine/context/config.test.js +199 -10
  55. package/dist/engine/context/config.test.js.map +1 -1
  56. package/dist/engine/context/optimizer.d.ts +20 -1
  57. package/dist/engine/context/optimizer.d.ts.map +1 -1
  58. package/dist/engine/context/optimizer.js +63 -29
  59. package/dist/engine/context/optimizer.js.map +1 -1
  60. package/dist/engine/context/optimizer.test.js +156 -0
  61. package/dist/engine/context/optimizer.test.js.map +1 -1
  62. package/dist/engine/gateway/gateway-provider.d.ts +4 -0
  63. package/dist/engine/gateway/gateway-provider.d.ts.map +1 -1
  64. package/dist/engine/gateway/gateway-provider.js +7 -2
  65. package/dist/engine/gateway/gateway-provider.js.map +1 -1
  66. package/dist/engine/gateway/gateway-provider.test.js +3 -3
  67. package/dist/engine/gateway/gateway-provider.test.js.map +1 -1
  68. package/dist/engine/gateway/input-guard.d.ts.map +1 -1
  69. package/dist/engine/gateway/input-guard.js +2 -1
  70. package/dist/engine/gateway/input-guard.js.map +1 -1
  71. package/dist/engine/gateway/secret-detector.d.ts.map +1 -1
  72. package/dist/engine/gateway/secret-detector.js +2 -3
  73. package/dist/engine/gateway/secret-detector.js.map +1 -1
  74. package/dist/engine/gateway/secret-detector.test.js +4 -4
  75. package/dist/engine/gateway/secret-detector.test.js.map +1 -1
  76. package/dist/engine/llm-error.d.ts +23 -0
  77. package/dist/engine/llm-error.d.ts.map +1 -0
  78. package/dist/engine/llm-error.js +86 -0
  79. package/dist/engine/llm-error.js.map +1 -0
  80. package/dist/engine/llm-error.test.d.ts +2 -0
  81. package/dist/engine/llm-error.test.d.ts.map +1 -0
  82. package/dist/engine/llm-error.test.js +101 -0
  83. package/dist/engine/llm-error.test.js.map +1 -0
  84. package/dist/engine/orchestrator-deny-abort.test.d.ts +2 -0
  85. package/dist/engine/orchestrator-deny-abort.test.d.ts.map +1 -0
  86. package/dist/engine/orchestrator-deny-abort.test.js +414 -0
  87. package/dist/engine/orchestrator-deny-abort.test.js.map +1 -0
  88. package/dist/engine/orchestrator-error.test.d.ts +2 -0
  89. package/dist/engine/orchestrator-error.test.d.ts.map +1 -0
  90. package/dist/engine/orchestrator-error.test.js +136 -0
  91. package/dist/engine/orchestrator-error.test.js.map +1 -0
  92. package/dist/engine/orchestrator.d.ts +123 -10
  93. package/dist/engine/orchestrator.d.ts.map +1 -1
  94. package/dist/engine/orchestrator.js +791 -181
  95. package/dist/engine/orchestrator.js.map +1 -1
  96. package/dist/engine/orchestrator.test.js +723 -0
  97. package/dist/engine/orchestrator.test.js.map +1 -1
  98. package/dist/engine/permission/approval.d.ts.map +1 -1
  99. package/dist/engine/permission/approval.js +29 -10
  100. package/dist/engine/permission/approval.js.map +1 -1
  101. package/dist/engine/permission/approval.test.js +57 -0
  102. package/dist/engine/permission/approval.test.js.map +1 -1
  103. package/dist/engine/permission/evaluator.d.ts +13 -0
  104. package/dist/engine/permission/evaluator.d.ts.map +1 -1
  105. package/dist/engine/permission/evaluator.js +121 -22
  106. package/dist/engine/permission/evaluator.js.map +1 -1
  107. package/dist/engine/permission/evaluator.test.js +188 -4
  108. package/dist/engine/permission/evaluator.test.js.map +1 -1
  109. package/dist/engine/permission/groups.d.ts.map +1 -1
  110. package/dist/engine/permission/groups.js +19 -1
  111. package/dist/engine/permission/groups.js.map +1 -1
  112. package/dist/engine/permission/integration.test.js +165 -4
  113. package/dist/engine/permission/integration.test.js.map +1 -1
  114. package/dist/engine/plan.integration.test.js +142 -33
  115. package/dist/engine/plan.integration.test.js.map +1 -1
  116. package/dist/engine/router/micro/tasks/classify-intent.d.ts.map +1 -1
  117. package/dist/engine/router/micro/tasks/classify-intent.js +24 -18
  118. package/dist/engine/router/micro/tasks/classify-intent.js.map +1 -1
  119. package/dist/engine/router/micro/tasks/classify-intent.test.js +4 -4
  120. package/dist/engine/router/micro/tasks/classify-intent.test.js.map +1 -1
  121. package/dist/engine/router/micro/tasks/enum-decision.d.ts.map +1 -1
  122. package/dist/engine/router/micro/tasks/enum-decision.js +14 -8
  123. package/dist/engine/router/micro/tasks/enum-decision.js.map +1 -1
  124. package/dist/engine/router/micro/tasks/enum-decision.test.js +2 -2
  125. package/dist/engine/router/micro/tasks/enum-decision.test.js.map +1 -1
  126. package/dist/engine/router/micro/tasks/small-talk.d.ts.map +1 -1
  127. package/dist/engine/router/micro/tasks/small-talk.js +20 -17
  128. package/dist/engine/router/micro/tasks/small-talk.js.map +1 -1
  129. package/dist/engine/router/micro/types.d.ts +2 -0
  130. package/dist/engine/router/micro/types.d.ts.map +1 -1
  131. package/dist/engine/router/provider-pool.d.ts +2 -2
  132. package/dist/engine/router/provider-pool.d.ts.map +1 -1
  133. package/dist/engine/router/provider-pool.js +5 -3
  134. package/dist/engine/router/provider-pool.js.map +1 -1
  135. package/dist/engine/router/quality-checker.d.ts.map +1 -1
  136. package/dist/engine/router/quality-checker.js +15 -14
  137. package/dist/engine/router/quality-checker.js.map +1 -1
  138. package/dist/engine/router/router.d.ts +2 -2
  139. package/dist/engine/router/router.d.ts.map +1 -1
  140. package/dist/engine/router/router.js +8 -5
  141. package/dist/engine/router/router.js.map +1 -1
  142. package/dist/engine/router/utils.d.ts +2 -2
  143. package/dist/engine/router/utils.d.ts.map +1 -1
  144. package/dist/engine/router/utils.js +2 -1
  145. package/dist/engine/router/utils.js.map +1 -1
  146. package/dist/engine/security/index.d.ts +6 -0
  147. package/dist/engine/security/index.d.ts.map +1 -1
  148. package/dist/engine/security/index.js +3 -0
  149. package/dist/engine/security/index.js.map +1 -1
  150. package/dist/engine/security/integration.test.js +11 -11
  151. package/dist/engine/security/integration.test.js.map +1 -1
  152. package/dist/engine/security/prompt-injection.d.ts +1 -1
  153. package/dist/engine/security/prompt-injection.d.ts.map +1 -1
  154. package/dist/engine/security/prompt-injection.js +2 -1
  155. package/dist/engine/security/prompt-injection.js.map +1 -1
  156. package/dist/engine/security/prompt-injection.test.js +1 -1
  157. package/dist/engine/security/prompt-injection.test.js.map +1 -1
  158. package/dist/engine/security/protected-paths-store.d.ts +56 -0
  159. package/dist/engine/security/protected-paths-store.d.ts.map +1 -0
  160. package/dist/engine/security/protected-paths-store.js +239 -0
  161. package/dist/engine/security/protected-paths-store.js.map +1 -0
  162. package/dist/engine/security/protected-paths.d.ts +54 -0
  163. package/dist/engine/security/protected-paths.d.ts.map +1 -0
  164. package/dist/engine/security/protected-paths.js +193 -0
  165. package/dist/engine/security/protected-paths.js.map +1 -0
  166. package/dist/engine/security/protected-paths.test.d.ts +2 -0
  167. package/dist/engine/security/protected-paths.test.d.ts.map +1 -0
  168. package/dist/engine/security/protected-paths.test.js +166 -0
  169. package/dist/engine/security/protected-paths.test.js.map +1 -0
  170. package/dist/engine/security/shell-guard.d.ts +117 -0
  171. package/dist/engine/security/shell-guard.d.ts.map +1 -0
  172. package/dist/engine/security/shell-guard.js +578 -0
  173. package/dist/engine/security/shell-guard.js.map +1 -0
  174. package/dist/engine/security/shell-guard.test.d.ts +2 -0
  175. package/dist/engine/security/shell-guard.test.d.ts.map +1 -0
  176. package/dist/engine/security/shell-guard.test.js +378 -0
  177. package/dist/engine/security/shell-guard.test.js.map +1 -0
  178. package/dist/engine/system-messages.d.ts +237 -0
  179. package/dist/engine/system-messages.d.ts.map +1 -0
  180. package/dist/engine/system-messages.js +276 -0
  181. package/dist/engine/system-messages.js.map +1 -0
  182. package/dist/engine/system-messages.test.d.ts +2 -0
  183. package/dist/engine/system-messages.test.d.ts.map +1 -0
  184. package/dist/engine/system-messages.test.js +81 -0
  185. package/dist/engine/system-messages.test.js.map +1 -0
  186. package/dist/engine/tools/abort.d.ts +21 -0
  187. package/dist/engine/tools/abort.d.ts.map +1 -0
  188. package/dist/engine/tools/abort.js +44 -0
  189. package/dist/engine/tools/abort.js.map +1 -0
  190. package/dist/engine/tools/classify-conversation.d.ts.map +1 -1
  191. package/dist/engine/tools/classify-conversation.js +7 -2
  192. package/dist/engine/tools/classify-conversation.js.map +1 -1
  193. package/dist/engine/tools/fs-read.d.ts.map +1 -1
  194. package/dist/engine/tools/fs-read.js +17 -6
  195. package/dist/engine/tools/fs-read.js.map +1 -1
  196. package/dist/engine/tools/fs-read.test.js +43 -0
  197. package/dist/engine/tools/fs-read.test.js.map +1 -1
  198. package/dist/engine/tools/fs-write.d.ts.map +1 -1
  199. package/dist/engine/tools/fs-write.js +47 -17
  200. package/dist/engine/tools/fs-write.js.map +1 -1
  201. package/dist/engine/tools/git.d.ts +2 -1
  202. package/dist/engine/tools/git.d.ts.map +1 -1
  203. package/dist/engine/tools/git.js +85 -17
  204. package/dist/engine/tools/git.js.map +1 -1
  205. package/dist/engine/tools/git.test.js +39 -0
  206. package/dist/engine/tools/git.test.js.map +1 -1
  207. package/dist/engine/tools/index.d.ts.map +1 -1
  208. package/dist/engine/tools/index.js +16 -2
  209. package/dist/engine/tools/index.js.map +1 -1
  210. package/dist/engine/tools/json-schema.js +38 -0
  211. package/dist/engine/tools/json-schema.js.map +1 -1
  212. package/dist/engine/tools/json-schema.test.d.ts +2 -0
  213. package/dist/engine/tools/json-schema.test.d.ts.map +1 -0
  214. package/dist/engine/tools/json-schema.test.js +40 -0
  215. package/dist/engine/tools/json-schema.test.js.map +1 -0
  216. package/dist/engine/tools/path-utils.d.ts.map +1 -1
  217. package/dist/engine/tools/path-utils.js +24 -0
  218. package/dist/engine/tools/path-utils.js.map +1 -1
  219. package/dist/engine/tools/path-utils.test.js +15 -0
  220. package/dist/engine/tools/path-utils.test.js.map +1 -1
  221. package/dist/engine/tools/plan.d.ts +11 -3
  222. package/dist/engine/tools/plan.d.ts.map +1 -1
  223. package/dist/engine/tools/plan.js +326 -95
  224. package/dist/engine/tools/plan.js.map +1 -1
  225. package/dist/engine/tools/plan.test.js +161 -47
  226. package/dist/engine/tools/plan.test.js.map +1 -1
  227. package/dist/engine/tools/project-context.d.ts.map +1 -1
  228. package/dist/engine/tools/project-context.js +54 -42
  229. package/dist/engine/tools/project-context.js.map +1 -1
  230. package/dist/engine/tools/project-context.test.js +37 -22
  231. package/dist/engine/tools/project-context.test.js.map +1 -1
  232. package/dist/engine/tools/project-manage.d.ts +24 -0
  233. package/dist/engine/tools/project-manage.d.ts.map +1 -0
  234. package/dist/engine/tools/project-manage.js +311 -0
  235. package/dist/engine/tools/project-manage.js.map +1 -0
  236. package/dist/engine/tools/project-manage.test.d.ts +2 -0
  237. package/dist/engine/tools/project-manage.test.d.ts.map +1 -0
  238. package/dist/engine/tools/project-manage.test.js +196 -0
  239. package/dist/engine/tools/project-manage.test.js.map +1 -0
  240. package/dist/engine/tools/read-reference.d.ts.map +1 -1
  241. package/dist/engine/tools/read-reference.js +10 -5
  242. package/dist/engine/tools/read-reference.js.map +1 -1
  243. package/dist/engine/tools/read-reference.test.js +5 -2
  244. package/dist/engine/tools/read-reference.test.js.map +1 -1
  245. package/dist/engine/tools/search.d.ts.map +1 -1
  246. package/dist/engine/tools/search.js +16 -6
  247. package/dist/engine/tools/search.js.map +1 -1
  248. package/dist/engine/tools/shell.d.ts.map +1 -1
  249. package/dist/engine/tools/shell.js +17 -4
  250. package/dist/engine/tools/shell.js.map +1 -1
  251. package/dist/engine/tools/shell.test.js +63 -1
  252. package/dist/engine/tools/shell.test.js.map +1 -1
  253. package/dist/engine/tools/task-resume.d.ts +93 -0
  254. package/dist/engine/tools/task-resume.d.ts.map +1 -0
  255. package/dist/engine/tools/task-resume.js +269 -0
  256. package/dist/engine/tools/task-resume.js.map +1 -0
  257. package/dist/engine/tools/task-resume.test.d.ts +2 -0
  258. package/dist/engine/tools/task-resume.test.d.ts.map +1 -0
  259. package/dist/engine/tools/task-resume.test.js +423 -0
  260. package/dist/engine/tools/task-resume.test.js.map +1 -0
  261. package/dist/engine/tools/task.d.ts +81 -2
  262. package/dist/engine/tools/task.d.ts.map +1 -1
  263. package/dist/engine/tools/task.js +898 -471
  264. package/dist/engine/tools/task.js.map +1 -1
  265. package/dist/engine/tools/task.test.js +371 -3
  266. package/dist/engine/tools/task.test.js.map +1 -1
  267. package/dist/engine/tools/todo.d.ts +27 -1
  268. package/dist/engine/tools/todo.d.ts.map +1 -1
  269. package/dist/engine/tools/todo.js +320 -14
  270. package/dist/engine/tools/todo.js.map +1 -1
  271. package/dist/engine/tools/todo.test.js +150 -48
  272. package/dist/engine/tools/todo.test.js.map +1 -1
  273. package/dist/engine/tools/web.d.ts.map +1 -1
  274. package/dist/engine/tools/web.js +65 -18
  275. package/dist/engine/tools/web.js.map +1 -1
  276. package/dist/engine/tools/web.test.js +94 -2
  277. package/dist/engine/tools/web.test.js.map +1 -1
  278. package/dist/events/bus.d.ts +7 -0
  279. package/dist/events/bus.d.ts.map +1 -1
  280. package/dist/events/bus.js +26 -3
  281. package/dist/events/bus.js.map +1 -1
  282. package/dist/events/bus.test.js +46 -0
  283. package/dist/events/bus.test.js.map +1 -1
  284. package/dist/index.d.ts +11 -3
  285. package/dist/index.d.ts.map +1 -1
  286. package/dist/index.js +7 -3
  287. package/dist/index.js.map +1 -1
  288. package/dist/logger.d.ts.map +1 -1
  289. package/dist/logger.js +0 -1
  290. package/dist/logger.js.map +1 -1
  291. package/dist/main.js +250 -10
  292. package/dist/main.js.map +1 -1
  293. package/dist/prompts/roles/ADMIN.en.md +12 -11
  294. package/dist/prompts/roles/ADMIN.ru.md +12 -11
  295. package/dist/prompts/roles/ANALYST.en.md +12 -11
  296. package/dist/prompts/roles/ANALYST.ru.md +12 -11
  297. package/dist/prompts/roles/ASSISTANT.en.md +12 -11
  298. package/dist/prompts/roles/ASSISTANT.ru.md +12 -11
  299. package/dist/prompts/roles/AUDITOR.en.md +12 -11
  300. package/dist/prompts/roles/AUDITOR.ru.md +12 -11
  301. package/dist/prompts/roles/DEVELOPER.en.md +12 -11
  302. package/dist/prompts/roles/DEVELOPER.ru.md +12 -11
  303. package/dist/prompts/roles/DEVOPS.en.md +12 -11
  304. package/dist/prompts/roles/DEVOPS.ru.md +12 -11
  305. package/dist/prompts/roles/PM.en.md +12 -11
  306. package/dist/prompts/roles/PM.ru.md +12 -11
  307. package/dist/prompts/roles/QA.en.md +12 -11
  308. package/dist/prompts/roles/QA.ru.md +12 -11
  309. package/dist/prompts/roles/TITLE.en.md +30 -0
  310. package/dist/prompts/roles/TITLE.ru.md +3 -11
  311. package/dist/prompts/security/ask-protected-path.en.md +1 -0
  312. package/dist/prompts/security/ask-protected-path.ru.md +1 -0
  313. package/dist/prompts/security/deny-command.en.md +1 -0
  314. package/dist/prompts/security/deny-command.ru.md +1 -0
  315. package/dist/prompts/security/deny-protected-dir.en.md +1 -0
  316. package/dist/prompts/security/deny-protected-dir.ru.md +1 -0
  317. package/dist/prompts/security/deny-protected-path.en.md +1 -0
  318. package/dist/prompts/security/deny-protected-path.ru.md +1 -0
  319. package/dist/prompts/subagents/explore.en.md +23 -0
  320. package/dist/prompts/subagents/general.en.md +19 -0
  321. package/dist/prompts/system/MODE_ACT.en.md +20 -0
  322. package/{prompts/modes/act.md → dist/prompts/system/MODE_ACT.ru.md} +2 -0
  323. package/dist/prompts/system/MODE_PLAN.en.md +22 -0
  324. package/dist/prompts/{modes/plan.md → system/MODE_PLAN.ru.md} +4 -3
  325. package/dist/prompts/system/MODE_YOLO.en.md +22 -0
  326. package/{prompts/modes/yolo.md → dist/prompts/system/MODE_YOLO.ru.md} +2 -0
  327. package/dist/prompts/system/PLAN_GUIDE.en.md +36 -0
  328. package/dist/prompts/system/PLAN_GUIDE.ru.md +33 -0
  329. package/dist/prompts/system/PLAN_MODE_AUTO.en.md +11 -0
  330. package/dist/prompts/system/PLAN_MODE_AUTO.ru.md +12 -0
  331. package/dist/prompts/system/PLAN_MODE_STRICT_APPROVED.en.md +8 -0
  332. package/dist/prompts/system/PLAN_MODE_STRICT_APPROVED.ru.md +8 -0
  333. package/dist/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.en.md +7 -0
  334. package/dist/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.ru.md +7 -0
  335. package/dist/providers/anthropic.d.ts.map +1 -1
  336. package/dist/providers/anthropic.js +28 -2
  337. package/dist/providers/anthropic.js.map +1 -1
  338. package/dist/providers/base.d.ts +20 -1
  339. package/dist/providers/base.d.ts.map +1 -1
  340. package/dist/providers/base.js +17 -0
  341. package/dist/providers/base.js.map +1 -1
  342. package/dist/providers/exceptions.d.ts.map +1 -1
  343. package/dist/providers/exceptions.js +3 -2
  344. package/dist/providers/exceptions.js.map +1 -1
  345. package/dist/providers/index.d.ts +1 -0
  346. package/dist/providers/index.d.ts.map +1 -1
  347. package/dist/providers/index.js +4 -0
  348. package/dist/providers/index.js.map +1 -1
  349. package/dist/providers/ollama.d.ts +23 -0
  350. package/dist/providers/ollama.d.ts.map +1 -1
  351. package/dist/providers/ollama.js +128 -12
  352. package/dist/providers/ollama.js.map +1 -1
  353. package/dist/providers/ollama.test.d.ts +2 -0
  354. package/dist/providers/ollama.test.d.ts.map +1 -0
  355. package/dist/providers/ollama.test.js +129 -0
  356. package/dist/providers/ollama.test.js.map +1 -0
  357. package/dist/providers/openai.d.ts.map +1 -1
  358. package/dist/providers/openai.js +82 -9
  359. package/dist/providers/openai.js.map +1 -1
  360. package/dist/providers/openai.test.d.ts +2 -0
  361. package/dist/providers/openai.test.d.ts.map +1 -0
  362. package/dist/providers/openai.test.js +84 -0
  363. package/dist/providers/openai.test.js.map +1 -0
  364. package/dist/providers/remote.d.ts +60 -0
  365. package/dist/providers/remote.d.ts.map +1 -0
  366. package/dist/providers/remote.js +394 -0
  367. package/dist/providers/remote.js.map +1 -0
  368. package/dist/providers/remote.test.d.ts +2 -0
  369. package/dist/providers/remote.test.d.ts.map +1 -0
  370. package/dist/providers/remote.test.js +258 -0
  371. package/dist/providers/remote.test.js.map +1 -0
  372. package/dist/providers/stream-error.test.d.ts +2 -0
  373. package/dist/providers/stream-error.test.d.ts.map +1 -0
  374. package/dist/providers/stream-error.test.js +63 -0
  375. package/dist/providers/stream-error.test.js.map +1 -0
  376. package/dist/providers/timeout.test.d.ts +2 -0
  377. package/dist/providers/timeout.test.d.ts.map +1 -0
  378. package/dist/providers/timeout.test.js +129 -0
  379. package/dist/providers/timeout.test.js.map +1 -0
  380. package/dist/queue/processor.d.ts +22 -0
  381. package/dist/queue/processor.d.ts.map +1 -1
  382. package/dist/queue/processor.js +150 -25
  383. package/dist/queue/processor.js.map +1 -1
  384. package/dist/queue/processor.test.d.ts +2 -0
  385. package/dist/queue/processor.test.d.ts.map +1 -0
  386. package/dist/queue/processor.test.js +211 -0
  387. package/dist/queue/processor.test.js.map +1 -0
  388. package/dist/remote/aggregate.d.ts +43 -0
  389. package/dist/remote/aggregate.d.ts.map +1 -0
  390. package/dist/remote/aggregate.js +84 -0
  391. package/dist/remote/aggregate.js.map +1 -0
  392. package/dist/remote/aggregate.test.d.ts +2 -0
  393. package/dist/remote/aggregate.test.d.ts.map +1 -0
  394. package/dist/remote/aggregate.test.js +120 -0
  395. package/dist/remote/aggregate.test.js.map +1 -0
  396. package/dist/remote/client.d.ts +142 -0
  397. package/dist/remote/client.d.ts.map +1 -0
  398. package/dist/remote/client.js +290 -0
  399. package/dist/remote/client.js.map +1 -0
  400. package/dist/remote/client.test.d.ts +2 -0
  401. package/dist/remote/client.test.d.ts.map +1 -0
  402. package/dist/remote/client.test.js +176 -0
  403. package/dist/remote/client.test.js.map +1 -0
  404. package/dist/remote/connection.d.ts +66 -0
  405. package/dist/remote/connection.d.ts.map +1 -0
  406. package/dist/remote/connection.js +298 -0
  407. package/dist/remote/connection.js.map +1 -0
  408. package/dist/remote/connection.test.d.ts +2 -0
  409. package/dist/remote/connection.test.d.ts.map +1 -0
  410. package/dist/remote/connection.test.js +323 -0
  411. package/dist/remote/connection.test.js.map +1 -0
  412. package/dist/remote/credentials.d.ts +13 -0
  413. package/dist/remote/credentials.d.ts.map +1 -0
  414. package/dist/remote/credentials.js +81 -0
  415. package/dist/remote/credentials.js.map +1 -0
  416. package/dist/remote/credentials.test.d.ts +2 -0
  417. package/dist/remote/credentials.test.d.ts.map +1 -0
  418. package/dist/remote/credentials.test.js +69 -0
  419. package/dist/remote/credentials.test.js.map +1 -0
  420. package/dist/remote/device-flow.d.ts +72 -0
  421. package/dist/remote/device-flow.d.ts.map +1 -0
  422. package/dist/remote/device-flow.js +229 -0
  423. package/dist/remote/device-flow.js.map +1 -0
  424. package/dist/remote/device-flow.test.d.ts +2 -0
  425. package/dist/remote/device-flow.test.d.ts.map +1 -0
  426. package/dist/remote/device-flow.test.js +103 -0
  427. package/dist/remote/device-flow.test.js.map +1 -0
  428. package/dist/remote/event-bridge.d.ts +46 -0
  429. package/dist/remote/event-bridge.d.ts.map +1 -0
  430. package/dist/remote/event-bridge.js +218 -0
  431. package/dist/remote/event-bridge.js.map +1 -0
  432. package/dist/remote/event-bridge.test.d.ts +2 -0
  433. package/dist/remote/event-bridge.test.d.ts.map +1 -0
  434. package/dist/remote/event-bridge.test.js +240 -0
  435. package/dist/remote/event-bridge.test.js.map +1 -0
  436. package/dist/remote/index.d.ts +19 -0
  437. package/dist/remote/index.d.ts.map +1 -0
  438. package/dist/remote/index.js +11 -0
  439. package/dist/remote/index.js.map +1 -0
  440. package/dist/remote/session.d.ts +72 -0
  441. package/dist/remote/session.d.ts.map +1 -0
  442. package/dist/remote/session.js +248 -0
  443. package/dist/remote/session.js.map +1 -0
  444. package/dist/remote/session.test.d.ts +2 -0
  445. package/dist/remote/session.test.d.ts.map +1 -0
  446. package/dist/remote/session.test.js +482 -0
  447. package/dist/remote/session.test.js.map +1 -0
  448. package/dist/remote/transfer.d.ts +75 -0
  449. package/dist/remote/transfer.d.ts.map +1 -0
  450. package/dist/remote/transfer.js +491 -0
  451. package/dist/remote/transfer.js.map +1 -0
  452. package/dist/remote/transfer.test.d.ts +2 -0
  453. package/dist/remote/transfer.test.d.ts.map +1 -0
  454. package/dist/remote/transfer.test.js +416 -0
  455. package/dist/remote/transfer.test.js.map +1 -0
  456. package/dist/remote/types.d.ts +28 -0
  457. package/dist/remote/types.d.ts.map +1 -0
  458. package/dist/remote/types.js +10 -0
  459. package/dist/remote/types.js.map +1 -0
  460. package/dist/server/app.d.ts +62 -1
  461. package/dist/server/app.d.ts.map +1 -1
  462. package/dist/server/app.js +393 -27
  463. package/dist/server/app.js.map +1 -1
  464. package/dist/server/app.proxy.test.d.ts +2 -0
  465. package/dist/server/app.proxy.test.d.ts.map +1 -0
  466. package/dist/server/app.proxy.test.js +193 -0
  467. package/dist/server/app.proxy.test.js.map +1 -0
  468. package/dist/server/app.remote.test.d.ts +2 -0
  469. package/dist/server/app.remote.test.d.ts.map +1 -0
  470. package/dist/server/app.remote.test.js +674 -0
  471. package/dist/server/app.remote.test.js.map +1 -0
  472. package/dist/server/chat.d.ts.map +1 -1
  473. package/dist/server/chat.js +18 -2
  474. package/dist/server/chat.js.map +1 -1
  475. package/dist/server/proxy.d.ts +14 -0
  476. package/dist/server/proxy.d.ts.map +1 -0
  477. package/dist/server/proxy.js +93 -0
  478. package/dist/server/proxy.js.map +1 -0
  479. package/dist/server/routes/agents.d.ts.map +1 -1
  480. package/dist/server/routes/agents.js +39 -23
  481. package/dist/server/routes/agents.js.map +1 -1
  482. package/dist/server/routes/auth.d.ts +26 -2
  483. package/dist/server/routes/auth.d.ts.map +1 -1
  484. package/dist/server/routes/auth.js +269 -36
  485. package/dist/server/routes/auth.js.map +1 -1
  486. package/dist/server/routes/auth.test.d.ts +2 -0
  487. package/dist/server/routes/auth.test.d.ts.map +1 -0
  488. package/dist/server/routes/auth.test.js +466 -0
  489. package/dist/server/routes/auth.test.js.map +1 -0
  490. package/dist/server/routes/fs.d.ts +2 -1
  491. package/dist/server/routes/fs.d.ts.map +1 -1
  492. package/dist/server/routes/fs.js +340 -7
  493. package/dist/server/routes/fs.js.map +1 -1
  494. package/dist/server/routes/hybrid.d.ts +32 -0
  495. package/dist/server/routes/hybrid.d.ts.map +1 -0
  496. package/dist/server/routes/hybrid.js +21 -0
  497. package/dist/server/routes/hybrid.js.map +1 -0
  498. package/dist/server/routes/hybrid.test.d.ts +2 -0
  499. package/dist/server/routes/hybrid.test.d.ts.map +1 -0
  500. package/dist/server/routes/hybrid.test.js +454 -0
  501. package/dist/server/routes/hybrid.test.js.map +1 -0
  502. package/dist/server/routes/messages.d.ts +2 -1
  503. package/dist/server/routes/messages.d.ts.map +1 -1
  504. package/dist/server/routes/messages.js +104 -1
  505. package/dist/server/routes/messages.js.map +1 -1
  506. package/dist/server/routes/models.cache.test.d.ts +2 -0
  507. package/dist/server/routes/models.cache.test.d.ts.map +1 -0
  508. package/dist/server/routes/models.cache.test.js +59 -0
  509. package/dist/server/routes/models.cache.test.js.map +1 -0
  510. package/dist/server/routes/models.d.ts +9 -1
  511. package/dist/server/routes/models.d.ts.map +1 -1
  512. package/dist/server/routes/models.js +38 -3
  513. package/dist/server/routes/models.js.map +1 -1
  514. package/dist/server/routes/models.remote.test.d.ts +2 -0
  515. package/dist/server/routes/models.remote.test.d.ts.map +1 -0
  516. package/dist/server/routes/models.remote.test.js +101 -0
  517. package/dist/server/routes/models.remote.test.js.map +1 -0
  518. package/dist/server/routes/project-transfer.d.ts +16 -0
  519. package/dist/server/routes/project-transfer.d.ts.map +1 -0
  520. package/dist/server/routes/project-transfer.js +141 -0
  521. package/dist/server/routes/project-transfer.js.map +1 -0
  522. package/dist/server/routes/project-transfer.test.d.ts +2 -0
  523. package/dist/server/routes/project-transfer.test.d.ts.map +1 -0
  524. package/dist/server/routes/project-transfer.test.js +199 -0
  525. package/dist/server/routes/project-transfer.test.js.map +1 -0
  526. package/dist/server/routes/projects.d.ts +2 -1
  527. package/dist/server/routes/projects.d.ts.map +1 -1
  528. package/dist/server/routes/projects.js +101 -5
  529. package/dist/server/routes/projects.js.map +1 -1
  530. package/dist/server/routes/providers.d.ts +1 -1
  531. package/dist/server/routes/providers.d.ts.map +1 -1
  532. package/dist/server/routes/providers.js +3 -1
  533. package/dist/server/routes/providers.js.map +1 -1
  534. package/dist/server/routes/providers.test.d.ts +2 -0
  535. package/dist/server/routes/providers.test.d.ts.map +1 -0
  536. package/dist/server/routes/providers.test.js +58 -0
  537. package/dist/server/routes/providers.test.js.map +1 -0
  538. package/dist/server/routes/queue.d.ts +2 -1
  539. package/dist/server/routes/queue.d.ts.map +1 -1
  540. package/dist/server/routes/queue.js +180 -18
  541. package/dist/server/routes/queue.js.map +1 -1
  542. package/dist/server/routes/sessions.d.ts +9 -1
  543. package/dist/server/routes/sessions.d.ts.map +1 -1
  544. package/dist/server/routes/sessions.js +269 -18
  545. package/dist/server/routes/sessions.js.map +1 -1
  546. package/dist/server/routes/sessions.test.js +102 -2
  547. package/dist/server/routes/sessions.test.js.map +1 -1
  548. package/dist/server/routes/settings.d.ts +6 -1
  549. package/dist/server/routes/settings.d.ts.map +1 -1
  550. package/dist/server/routes/settings.js +138 -0
  551. package/dist/server/routes/settings.js.map +1 -1
  552. package/dist/server/routes/settings.test.js +65 -1
  553. package/dist/server/routes/settings.test.js.map +1 -1
  554. package/dist/server/serialize.d.ts +11 -3
  555. package/dist/server/serialize.d.ts.map +1 -1
  556. package/dist/server/serialize.js +11 -3
  557. package/dist/server/serialize.js.map +1 -1
  558. package/dist/sessions/auto-title.d.ts +1 -1
  559. package/dist/sessions/auto-title.d.ts.map +1 -1
  560. package/dist/sessions/auto-title.js +24 -13
  561. package/dist/sessions/auto-title.js.map +1 -1
  562. package/dist/sessions/manager.d.ts +1 -2
  563. package/dist/sessions/manager.d.ts.map +1 -1
  564. package/dist/sessions/manager.js +11 -36
  565. package/dist/sessions/manager.js.map +1 -1
  566. package/dist/sessions/manager.test.js +2 -10
  567. package/dist/sessions/manager.test.js.map +1 -1
  568. package/dist/storage/file-store.d.ts.map +1 -1
  569. package/dist/storage/file-store.js +2 -6
  570. package/dist/storage/file-store.js.map +1 -1
  571. package/dist/storage/file-store.test.js +1 -6
  572. package/dist/storage/file-store.test.js.map +1 -1
  573. package/dist/storage/project-store.d.ts.map +1 -1
  574. package/dist/storage/project-store.js +12 -0
  575. package/dist/storage/project-store.js.map +1 -1
  576. package/dist/storage/runtime-settings.d.ts +25 -1
  577. package/dist/storage/runtime-settings.d.ts.map +1 -1
  578. package/dist/storage/runtime-settings.js +31 -0
  579. package/dist/storage/runtime-settings.js.map +1 -1
  580. package/package.json +10 -5
  581. package/prompts/roles/TITLE.en.md +30 -0
  582. package/prompts/security/ask-protected-path.en.md +1 -0
  583. package/prompts/security/ask-protected-path.ru.md +1 -0
  584. package/prompts/security/deny-command.en.md +1 -0
  585. package/prompts/security/deny-command.ru.md +1 -0
  586. package/prompts/security/deny-protected-dir.en.md +1 -0
  587. package/prompts/security/deny-protected-dir.ru.md +1 -0
  588. package/prompts/security/deny-protected-path.en.md +1 -0
  589. package/prompts/security/deny-protected-path.ru.md +1 -0
  590. package/prompts/subagents/explore.en.md +23 -0
  591. package/prompts/subagents/general.en.md +19 -0
  592. package/prompts/system/MODE_ACT.en.md +20 -0
  593. package/{dist/prompts/modes/act.md → prompts/system/MODE_ACT.ru.md} +2 -0
  594. package/prompts/system/MODE_PLAN.en.md +22 -0
  595. package/{dist/prompts/prompts/modes/plan.md → prompts/system/MODE_PLAN.ru.md} +4 -3
  596. package/prompts/system/MODE_YOLO.en.md +22 -0
  597. package/{dist/prompts/prompts/modes/yolo.md → prompts/system/MODE_YOLO.ru.md} +2 -0
  598. package/prompts/system/PLAN_GUIDE.en.md +36 -0
  599. package/prompts/system/PLAN_GUIDE.ru.md +33 -0
  600. package/prompts/system/PLAN_MODE_AUTO.en.md +11 -0
  601. package/prompts/system/PLAN_MODE_AUTO.ru.md +12 -0
  602. package/prompts/system/PLAN_MODE_STRICT_APPROVED.en.md +8 -0
  603. package/prompts/system/PLAN_MODE_STRICT_APPROVED.ru.md +8 -0
  604. package/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.en.md +7 -0
  605. package/prompts/system/PLAN_MODE_STRICT_NOT_APPROVED.ru.md +7 -0
  606. package/dist/dictionaries/dictionaries/coding.en.yaml +0 -20
  607. package/dist/dictionaries/dictionaries/coding.ru.yaml +0 -22
  608. package/dist/dictionaries/dictionaries/coding.tools.yaml +0 -12
  609. package/dist/dictionaries/dictionaries/enum.en.yaml +0 -54
  610. package/dist/dictionaries/dictionaries/enum.ru.yaml +0 -67
  611. package/dist/dictionaries/dictionaries/injection.en.yaml +0 -51
  612. package/dist/dictionaries/dictionaries/injection.ru.yaml +0 -51
  613. package/dist/dictionaries/dictionaries/intents.en.yaml +0 -68
  614. package/dist/dictionaries/dictionaries/intents.ru.yaml +0 -78
  615. package/dist/dictionaries/dictionaries/research.en.yaml +0 -17
  616. package/dist/dictionaries/dictionaries/research.ru.yaml +0 -17
  617. package/dist/dictionaries/dictionaries/small-talk.en.yaml +0 -67
  618. package/dist/dictionaries/dictionaries/small-talk.ru.yaml +0 -81
  619. package/dist/prompts/modes/yolo.md +0 -20
  620. package/dist/prompts/prompts/modes/act.md +0 -18
  621. package/dist/prompts/prompts/roles/ADMIN.en.md +0 -33
  622. package/dist/prompts/prompts/roles/ADMIN.ru.md +0 -33
  623. package/dist/prompts/prompts/roles/ANALYST.en.md +0 -33
  624. package/dist/prompts/prompts/roles/ANALYST.ru.md +0 -33
  625. package/dist/prompts/prompts/roles/ASSISTANT.en.md +0 -38
  626. package/dist/prompts/prompts/roles/ASSISTANT.ru.md +0 -38
  627. package/dist/prompts/prompts/roles/AUDITOR.en.md +0 -33
  628. package/dist/prompts/prompts/roles/AUDITOR.ru.md +0 -33
  629. package/dist/prompts/prompts/roles/DEVELOPER.en.md +0 -42
  630. package/dist/prompts/prompts/roles/DEVELOPER.ru.md +0 -42
  631. package/dist/prompts/prompts/roles/DEVOPS.en.md +0 -35
  632. package/dist/prompts/prompts/roles/DEVOPS.ru.md +0 -35
  633. package/dist/prompts/prompts/roles/PM.en.md +0 -33
  634. package/dist/prompts/prompts/roles/PM.ru.md +0 -33
  635. package/dist/prompts/prompts/roles/QA.en.md +0 -33
  636. package/dist/prompts/prompts/roles/QA.ru.md +0 -33
  637. package/dist/prompts/prompts/roles/TITLE.ru.md +0 -30
  638. package/dist/prompts/prompts/subagents/explore.ru.md +0 -23
  639. package/dist/prompts/prompts/subagents/general.ru.md +0 -19
  640. package/dist/prompts/prompts/system/COMPRESSED_DIALOG.en.md +0 -5
  641. package/dist/prompts/prompts/system/COMPRESSED_DIALOG.ru.md +0 -5
  642. package/dist/prompts/prompts/system/INTERVIEW.en.md +0 -18
  643. package/dist/prompts/prompts/system/INTERVIEW.ru.md +0 -18
  644. package/dist/prompts/prompts/system/PARTICIPANTS_NOTICE.en.md +0 -7
  645. package/dist/prompts/prompts/system/PARTICIPANTS_NOTICE.ru.md +0 -7
  646. package/dist/prompts/prompts/system/ROLES_DESCRIPTION.en.md +0 -16
  647. package/dist/prompts/prompts/system/ROLES_DESCRIPTION.ru.md +0 -16
  648. package/dist/prompts/prompts/system/ROUTING.en.md +0 -13
  649. package/dist/prompts/prompts/system/ROUTING.md +0 -6
  650. package/dist/prompts/prompts/system/ROUTING.ru.md +0 -13
  651. package/dist/prompts/prompts/system/RULES.en.md +0 -10
  652. package/dist/prompts/prompts/system/RULES.md +0 -10
  653. package/dist/prompts/prompts/system/RULES.ru.md +0 -10
  654. package/dist/prompts/prompts/system/STICKY_NOTES.en.md +0 -6
  655. package/dist/prompts/prompts/system/STICKY_NOTES.ru.md +0 -6
  656. package/dist/prompts/prompts/system/SUMMARIZER.en.md +0 -54
  657. package/dist/prompts/prompts/system/SUMMARIZER.ru.md +0 -54
  658. package/dist/prompts/prompts/system/USER_CONTEXT.en.md +0 -5
  659. package/dist/prompts/prompts/system/USER_CONTEXT.ru.md +0 -5
  660. package/dist/prompts/system/ROUTING.md +0 -6
  661. package/dist/prompts/system/RULES.md +0 -10
  662. package/dist/server/routes/i18n.d.ts +0 -3
  663. package/dist/server/routes/i18n.d.ts.map +0 -1
  664. package/dist/server/routes/i18n.js +0 -83
  665. package/dist/server/routes/i18n.js.map +0 -1
  666. package/prompts/modes/plan.md +0 -20
  667. package/prompts/system/ROUTING.md +0 -6
  668. package/prompts/system/RULES.md +0 -10
  669. /package/dist/prompts/{prompts/system → system}/GATEWAY.en.md +0 -0
  670. /package/dist/prompts/{prompts/system → system}/GATEWAY.ru.md +0 -0
@@ -13,10 +13,16 @@ export class OllamaProvider extends BaseProvider {
13
13
  temperature: this.temperature,
14
14
  stream: !!stream,
15
15
  };
16
+ if (this.reasoningLevel === 'low')
17
+ body.think = true;
18
+ else if (this.reasoningLevel === 'none')
19
+ body.think = false;
16
20
  if (systemPrompt)
17
21
  body.system = systemPrompt;
18
22
  if (tools?.length)
19
23
  body.tools = this._formatTools(tools);
24
+ if (this.numCtx && this.numCtx > 0)
25
+ body.options = { num_ctx: this.numCtx };
20
26
  const headers = { 'Content-Type': 'application/json' };
21
27
  debugCollector?.captureApiRequest(this.url, 'POST', headers, body);
22
28
  const controller = new AbortController();
@@ -50,10 +56,16 @@ export class OllamaProvider extends BaseProvider {
50
56
  temperature: this.temperature,
51
57
  stream: true,
52
58
  };
59
+ if (this.reasoningLevel === 'low')
60
+ body.think = true;
61
+ else if (this.reasoningLevel === 'none')
62
+ body.think = false;
53
63
  if (systemPrompt)
54
64
  body.system = systemPrompt;
55
65
  if (tools?.length)
56
66
  body.tools = this._formatTools(tools);
67
+ if (this.numCtx && this.numCtx > 0)
68
+ body.options = { num_ctx: this.numCtx };
57
69
  const headers = { 'Content-Type': 'application/json' };
58
70
  debugCollector?.captureApiRequest(this.url, 'POST', headers, body);
59
71
  let accumulatedReasoning = '';
@@ -62,13 +74,36 @@ export class OllamaProvider extends BaseProvider {
62
74
  const accumulatedToolCalls = [];
63
75
  const controller = new AbortController();
64
76
  const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
77
+ // Таймаут — только на ожидание первого чанка. Как только стрим пошёл,
78
+ // таймер снимается, дальше стрим длится сколько нужно.
79
+ let firstChunkReceived = false;
80
+ // Кнопка «Стоп»: отмена пользователя (cancellationToken.cancel) немедленно
81
+ // прерывает висящий fetch/reader.read() через AbortController — иначе
82
+ // reader.read() висит до таймаута 120с и отмена не работает.
83
+ if (cancellationToken) {
84
+ const originalCancel = cancellationToken.cancel.bind(cancellationToken);
85
+ cancellationToken.cancel = () => {
86
+ originalCancel();
87
+ controller.abort();
88
+ };
89
+ }
65
90
  try {
66
- const resp = await fetch(this.url, {
67
- method: 'POST',
68
- headers,
69
- body: JSON.stringify(body),
70
- signal: controller.signal,
71
- });
91
+ let resp;
92
+ try {
93
+ resp = await fetch(this.url, {
94
+ method: 'POST',
95
+ headers,
96
+ body: JSON.stringify(body),
97
+ signal: controller.signal,
98
+ });
99
+ }
100
+ catch (e) {
101
+ // Отмена пользователя — abort() из cancellationToken до/во время fetch:
102
+ // молча завершаем генератор, не превращая в stream.error.
103
+ if (cancellationToken?.cancelled)
104
+ return;
105
+ throw e;
106
+ }
72
107
  if (!resp.ok) {
73
108
  const errorText = await resp.text();
74
109
  this._handleErrors(resp.status, errorText);
@@ -100,6 +135,10 @@ export class OllamaProvider extends BaseProvider {
100
135
  debugCollector?.captureRawModelResponse(trimmed);
101
136
  const msg = chunkData.message;
102
137
  if (msg?.content && typeof msg.content === 'string') {
138
+ if (!firstChunkReceived) {
139
+ firstChunkReceived = true;
140
+ clearTimeout(timer);
141
+ }
103
142
  const hasReasoning = !!accumulatedReasoning;
104
143
  accumulatedContent += msg.content;
105
144
  yield {
@@ -113,18 +152,27 @@ export class OllamaProvider extends BaseProvider {
113
152
  accumulatedReasoning = '';
114
153
  }
115
154
  if (msg?.tool_calls) {
155
+ if (!firstChunkReceived) {
156
+ firstChunkReceived = true;
157
+ clearTimeout(timer);
158
+ }
116
159
  for (const tc of msg.tool_calls) {
117
160
  accumulatedToolCalls.push({
118
161
  id: tc.id,
119
162
  type: 'function',
120
163
  function: {
121
164
  name: tc.function?.name,
122
- arguments: tc.function?.arguments,
165
+ // Строку → объект: единообразие с _parseResponse.
166
+ arguments: this._normalizeToolArguments(tc.function?.arguments),
123
167
  },
124
168
  });
125
169
  }
126
170
  }
127
171
  if (msg?.thinking && typeof msg.thinking === 'string') {
172
+ if (!firstChunkReceived) {
173
+ firstChunkReceived = true;
174
+ clearTimeout(timer);
175
+ }
128
176
  accumulatedReasoning += msg.thinking;
129
177
  debugCollector?.captureReasoning(accumulatedReasoning);
130
178
  yield {
@@ -148,7 +196,14 @@ export class OllamaProvider extends BaseProvider {
148
196
  }
149
197
  }
150
198
  catch (e) {
151
- info('OLLAMA', `Стрим прерван: ${e}`);
199
+ // Ошибки чтения стрима (таймаут/обрыв сети/AbortError) пробрасываем
200
+ // наружу — иначе генератор «успешно» завершится с пустым ответом и
201
+ // оркестратор не узнает о сбое провайдера. При пользовательской
202
+ // отмене (cancellationToken) молча выходим.
203
+ if (!cancellationToken?.cancelled) {
204
+ info('OLLAMA', `Стрим прерван: ${e}`);
205
+ throw e;
206
+ }
152
207
  }
153
208
  finally {
154
209
  reader.releaseLock();
@@ -207,6 +262,15 @@ export class OllamaProvider extends BaseProvider {
207
262
  return data2.embedding ?? [];
208
263
  }
209
264
  async listModels() {
265
+ const models = await this.listModelsDetailed();
266
+ return models.map((m) => m.id);
267
+ }
268
+ /**
269
+ * Список моделей с контекстным окном из /api/tags.
270
+ * Ollama отдаёт context_length внутри details.context_length
271
+ * (а в некоторых версиях — в model_info.context_length).
272
+ */
273
+ async listModelsDetailed() {
210
274
  const baseUrl = this.url.replace('/api/chat', '').replace('/v1/chat/completions', '');
211
275
  const tagsUrl = `${baseUrl}/api/tags`;
212
276
  try {
@@ -216,7 +280,12 @@ export class OllamaProvider extends BaseProvider {
216
280
  clearTimeout(timer);
217
281
  if (resp.ok) {
218
282
  const data = await resp.json();
219
- return (data.models || []).map((m) => m.name).filter(Boolean);
283
+ return (data.models || [])
284
+ .map((m) => ({
285
+ id: m.name,
286
+ contextWindow: this._extractContextWindow(m),
287
+ }))
288
+ .filter((m) => m.id);
220
289
  }
221
290
  }
222
291
  catch {
@@ -224,6 +293,37 @@ export class OllamaProvider extends BaseProvider {
224
293
  }
225
294
  return [];
226
295
  }
296
+ /**
297
+ * Извлекает размер контекстного окна из записи /api/tags.
298
+ * Поле может лежать в details.context_length или model_info
299
+ * (context_length / ContextLength / llama.context_length) — берём
300
+ * первый числовой вариант. Если окно неизвестно — возвращаем undefined.
301
+ */
302
+ _extractContextWindow(model) {
303
+ const info = model.model_info ?? {};
304
+ const raw = model.details?.context_length
305
+ ?? info.context_length
306
+ ?? info.ContextLength
307
+ ?? info['llama.context_length'];
308
+ const num = typeof raw === 'number' ? raw : Number(raw);
309
+ return Number.isFinite(num) && num > 0 ? num : undefined;
310
+ }
311
+ /**
312
+ * Нормализует function.arguments в tool_calls: JSON-строка → объект.
313
+ * Сборка Ollama (0.32.x, llama-server c --spec-type draft-mtp) принимает
314
+ * только объект и падает с 400 «can't find closing '}'» на строке.
315
+ * Если парсинг не удался — оставляем строку как есть (не роняем запрос).
316
+ */
317
+ _normalizeToolArguments(args) {
318
+ if (typeof args !== 'string')
319
+ return args;
320
+ try {
321
+ return JSON.parse(args);
322
+ }
323
+ catch {
324
+ return args;
325
+ }
326
+ }
227
327
  _formatMessages(messages) {
228
328
  const formatted = [];
229
329
  for (const msg of messages) {
@@ -240,8 +340,22 @@ export class OllamaProvider extends BaseProvider {
240
340
  continue;
241
341
  }
242
342
  const entry = { role: msg.role, content: msg.content };
243
- if (msg.toolUse)
244
- entry.tool_calls = msg.toolUse;
343
+ if (msg.toolUse) {
344
+ // Старые сессии хранят arguments строкой — приводим к объекту
345
+ // перед отправкой, иначе Ollama вернёт 400.
346
+ entry.tool_calls = msg.toolUse.map((tc) => {
347
+ const fn = tc.function;
348
+ if (!fn || typeof fn.arguments === 'undefined')
349
+ return tc;
350
+ return {
351
+ ...tc,
352
+ function: {
353
+ ...fn,
354
+ arguments: this._normalizeToolArguments(fn.arguments),
355
+ },
356
+ };
357
+ });
358
+ }
245
359
  formatted.push(entry);
246
360
  }
247
361
  return formatted;
@@ -259,7 +373,9 @@ export class OllamaProvider extends BaseProvider {
259
373
  type: 'function',
260
374
  function: {
261
375
  name: tc.function?.name,
262
- arguments: tc.function?.arguments,
376
+ // Строку → объект, чтобы в сессию сохранялись объекты (единообразие)
377
+ // и повторная отправка не ломалась.
378
+ arguments: this._normalizeToolArguments(tc.function?.arguments),
263
379
  },
264
380
  }));
265
381
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ollama.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.test.d.ts","sourceRoot":"","sources":["../../src/providers/ollama.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { OllamaProvider } from './ollama.js';
3
+ const baseParams = {
4
+ url: 'http://omn.example.test/api/chat',
5
+ apiKey: 'key',
6
+ model: 'qwen3.8:27b',
7
+ timeout: 30,
8
+ };
9
+ function makeMessage(overrides = {}) {
10
+ return {
11
+ id: 'm1',
12
+ role: 'assistant',
13
+ content: '',
14
+ usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
15
+ disabled: false,
16
+ pinned: false,
17
+ branchId: 'b1',
18
+ ...overrides,
19
+ };
20
+ }
21
+ const STRING_ARGS = '{"category": "research"}';
22
+ describe('OllamaProvider — нормализация function.arguments', () => {
23
+ const provider = new OllamaProvider(baseParams);
24
+ function firstToolCall(formatted) {
25
+ const tc = formatted[0].tool_calls[0];
26
+ return tc;
27
+ }
28
+ it('_formatMessages: arguments-строка превращается в объект', () => {
29
+ const formatted = provider._formatMessages([
30
+ makeMessage({
31
+ toolUse: [
32
+ {
33
+ index: 0,
34
+ id: 'call_1',
35
+ type: 'function',
36
+ function: { name: 'classify_conversation', arguments: STRING_ARGS },
37
+ },
38
+ ],
39
+ }),
40
+ ]);
41
+ const tc = firstToolCall(formatted);
42
+ const fn = tc.function;
43
+ expect(fn.arguments).toEqual({ category: 'research' });
44
+ expect(fn.name).toBe('classify_conversation');
45
+ expect(tc.id).toBe('call_1');
46
+ expect(tc.index).toBe(0);
47
+ });
48
+ it('_formatMessages: уже объект не трогается', () => {
49
+ const argsObj = { query: 'тест' };
50
+ const formatted = provider._formatMessages([
51
+ makeMessage({
52
+ toolUse: [
53
+ {
54
+ id: 'call_2',
55
+ type: 'function',
56
+ function: { name: 'web_search', arguments: argsObj },
57
+ },
58
+ ],
59
+ }),
60
+ ]);
61
+ const fn = firstToolCall(formatted).function;
62
+ expect(fn.arguments).toBe(argsObj);
63
+ });
64
+ it('_formatMessages: невалидная JSON-строка остаётся строкой (не роняем запрос)', () => {
65
+ const bad = '{не json';
66
+ const formatted = provider._formatMessages([
67
+ makeMessage({
68
+ toolUse: [
69
+ {
70
+ id: 'call_3',
71
+ type: 'function',
72
+ function: { name: 'tool', arguments: bad },
73
+ },
74
+ ],
75
+ }),
76
+ ]);
77
+ const fn = firstToolCall(formatted).function;
78
+ expect(fn.arguments).toBe(bad);
79
+ });
80
+ it('_formatMessages: отсутствие arguments не ломает отправку', () => {
81
+ const formatted = provider._formatMessages([
82
+ makeMessage({
83
+ toolUse: [
84
+ { id: 'call_4', type: 'function', function: { name: 'noop' } },
85
+ ],
86
+ }),
87
+ ]);
88
+ const tc = firstToolCall(formatted);
89
+ expect(tc.function.name).toBe('noop');
90
+ expect(tc.function.arguments).toBeUndefined();
91
+ });
92
+ it('_parseResponse: arguments-строка из ответа превращается в объект', () => {
93
+ const resp = provider._parseResponse({
94
+ message: {
95
+ role: 'assistant',
96
+ content: '',
97
+ tool_calls: [
98
+ {
99
+ index: 0,
100
+ id: 'call_5',
101
+ type: 'function',
102
+ function: { name: 'classify_conversation', arguments: STRING_ARGS },
103
+ },
104
+ ],
105
+ },
106
+ });
107
+ const fn = resp.toolCalls[0].function;
108
+ expect(fn.arguments).toEqual({ category: 'research' });
109
+ });
110
+ it('_parseResponse: невалидная строка остаётся строкой (fallback)', () => {
111
+ const bad = 'не json';
112
+ const resp = provider._parseResponse({
113
+ message: {
114
+ role: 'assistant',
115
+ content: '',
116
+ tool_calls: [
117
+ {
118
+ id: 'call_6',
119
+ type: 'function',
120
+ function: { name: 'tool', arguments: bad },
121
+ },
122
+ ],
123
+ },
124
+ });
125
+ const fn = resp.toolCalls[0].function;
126
+ expect(fn.arguments).toBe(bad);
127
+ });
128
+ });
129
+ //# sourceMappingURL=ollama.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.test.js","sourceRoot":"","sources":["../../src/providers/ollama.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAElF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,eAAe,IAAI,MAAM;IAInB,IAAI,CACR,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACjC,MAAM,CAAC,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,WAAW,CAAC;IA4ChB,SAAS,CACd,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACjC,cAAc,CAAC,EAAE,cAAc,EAC/B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,cAAc,CAAC,QAAQ,CAAC;IAqKrB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBrC,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,aAAa;CAatB"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAElF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,qBAAa,cAAe,SAAQ,YAAY;IAC9C,eAAe,IAAI,MAAM;IAInB,IAAI,CACR,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACjC,MAAM,CAAC,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,WAAW,CAAC;IA8ChB,SAAS,CACd,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,CAAC,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACjC,cAAc,CAAC,EAAE,cAAc,EAC/B,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,cAAc,CAAC,QAAQ,CAAC;IAiNrB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBrC,OAAO,CAAC,eAAe;IAsDvB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,aAAa;CAatB"}
@@ -13,6 +13,8 @@ export class OpenAIProvider extends BaseProvider {
13
13
  messages: formattedMessages,
14
14
  temperature: this.temperature,
15
15
  };
16
+ if (this.reasoningLevel && this.reasoningLevel !== 'default')
17
+ body.reasoning_effort = this.reasoningLevel;
16
18
  if (this.topP !== undefined)
17
19
  body.top_p = this.topP;
18
20
  if (this.topK !== undefined)
@@ -21,6 +23,8 @@ export class OpenAIProvider extends BaseProvider {
21
23
  body.tools = tools;
22
24
  if (stream)
23
25
  body.stream = true;
26
+ if (this.maxTokens && this.maxTokens > 0)
27
+ body.max_tokens = this.maxTokens;
24
28
  const headers = this._getHeaders();
25
29
  debugCollector?.captureApiRequest(this.url, 'POST', headers, body);
26
30
  const controller = new AbortController();
@@ -55,12 +59,16 @@ export class OpenAIProvider extends BaseProvider {
55
59
  temperature: this.temperature,
56
60
  stream: true,
57
61
  };
62
+ if (this.reasoningLevel && this.reasoningLevel !== 'default')
63
+ body.reasoning_effort = this.reasoningLevel;
58
64
  if (this.topP !== undefined)
59
65
  body.top_p = this.topP;
60
66
  if (this.topK !== undefined)
61
67
  body.top_k = this.topK;
62
68
  if (tools?.length)
63
69
  body.tools = tools;
70
+ if (this.maxTokens && this.maxTokens > 0)
71
+ body.max_tokens = this.maxTokens;
64
72
  const headers = this._getHeaders();
65
73
  debugCollector?.captureApiRequest(this.url, 'POST', headers, body);
66
74
  let accumulatedContent = '';
@@ -69,13 +77,36 @@ export class OpenAIProvider extends BaseProvider {
69
77
  const accumulatedToolCalls = [];
70
78
  const controller = new AbortController();
71
79
  const timer = setTimeout(() => controller.abort(), this.timeout * 1000);
80
+ // Таймаут — только на ожидание первого чанка. Как только стрим пошёл,
81
+ // таймер снимается, дальше стрим длится сколько нужно.
82
+ let firstChunkReceived = false;
83
+ // Кнопка «Стоп»: отмена пользователя (cancellationToken.cancel) немедленно
84
+ // прерывает висящий fetch/reader.read() через AbortController — иначе
85
+ // reader.read() висит до таймаута 120с и отмена не работает.
86
+ if (cancellationToken) {
87
+ const originalCancel = cancellationToken.cancel.bind(cancellationToken);
88
+ cancellationToken.cancel = () => {
89
+ originalCancel();
90
+ controller.abort();
91
+ };
92
+ }
72
93
  try {
73
- const resp = await fetch(this.url, {
74
- method: 'POST',
75
- headers,
76
- body: JSON.stringify(body),
77
- signal: controller.signal,
78
- });
94
+ let resp;
95
+ try {
96
+ resp = await fetch(this.url, {
97
+ method: 'POST',
98
+ headers,
99
+ body: JSON.stringify(body),
100
+ signal: controller.signal,
101
+ });
102
+ }
103
+ catch (e) {
104
+ // Отмена пользователя — abort() из cancellationToken до/во время fetch:
105
+ // молча завершаем генератор, не превращая в stream.error.
106
+ if (cancellationToken?.cancelled)
107
+ return;
108
+ throw e;
109
+ }
79
110
  if (!resp.ok) {
80
111
  const errorText = await resp.text();
81
112
  this._handleErrors(resp.status, errorText);
@@ -114,6 +145,10 @@ export class OpenAIProvider extends BaseProvider {
114
145
  if (delta.reasoning_content && typeof delta.reasoning_content === 'string') {
115
146
  if (delta.reasoning_content === '.' || delta.reasoning_content === '.\n')
116
147
  continue;
148
+ if (!firstChunkReceived) {
149
+ firstChunkReceived = true;
150
+ clearTimeout(timer);
151
+ }
117
152
  accumulatedReasoning += delta.reasoning_content;
118
153
  yield {
119
154
  content: '',
@@ -123,6 +158,10 @@ export class OpenAIProvider extends BaseProvider {
123
158
  };
124
159
  }
125
160
  if (delta.content && typeof delta.content === 'string') {
161
+ if (!firstChunkReceived) {
162
+ firstChunkReceived = true;
163
+ clearTimeout(timer);
164
+ }
126
165
  accumulatedContent += delta.content;
127
166
  yield {
128
167
  content: delta.content,
@@ -133,6 +172,10 @@ export class OpenAIProvider extends BaseProvider {
133
172
  };
134
173
  }
135
174
  if (delta.tool_calls) {
175
+ if (!firstChunkReceived) {
176
+ firstChunkReceived = true;
177
+ clearTimeout(timer);
178
+ }
136
179
  for (const tc of delta.tool_calls) {
137
180
  const tcIndex = tc.index;
138
181
  const func = tc.function;
@@ -175,7 +218,14 @@ export class OpenAIProvider extends BaseProvider {
175
218
  }
176
219
  }
177
220
  catch (e) {
178
- info('OPENAI', `Стрим прерван: ${e}`);
221
+ // Ошибки чтения стрима (таймаут/обрыв сети/AbortError) пробрасываем
222
+ // наружу — иначе генератор «успешно» завершится с пустым ответом и
223
+ // оркестратор не узнает о сбое провайдера. При пользовательской
224
+ // отмене (cancellationToken) молча выходим.
225
+ if (!cancellationToken?.cancelled) {
226
+ info('OPENAI', `Стрим прерван: ${e}`);
227
+ throw e;
228
+ }
179
229
  }
180
230
  finally {
181
231
  reader.releaseLock();
@@ -239,10 +289,33 @@ export class OpenAIProvider extends BaseProvider {
239
289
  role: msg.role,
240
290
  content: msg.content,
241
291
  };
242
- if (msg.toolUse)
243
- entry.tool_calls = msg.toolUse;
292
+ if (msg.toolUse) {
293
+ // Нормализация function.arguments: объект → JSON-строка. OpenAI-совместимые
294
+ // API (DeepSeek через open-webui) требуют строку и возвращают 400
295
+ // «invalid type: map, expected a string» на объекте. Строку не трогаем,
296
+ // невалидное/undefined оставляем как есть — запрос не роняем.
297
+ entry.tool_calls = msg.toolUse.map((tc) => {
298
+ const fn = tc.function;
299
+ if (!fn || typeof fn.arguments !== 'object' || fn.arguments === null)
300
+ return tc;
301
+ try {
302
+ return {
303
+ ...tc,
304
+ function: { ...fn, arguments: JSON.stringify(fn.arguments) },
305
+ };
306
+ }
307
+ catch {
308
+ return tc;
309
+ }
310
+ });
311
+ }
244
312
  if (msg.toolCallId)
245
313
  entry.tool_call_id = msg.toolCallId;
314
+ // DeepSeek reasoning-модели требуют возврат reasoning_content в повторной
315
+ // истории (иначе 400 «The reasoning_content ... must be passed back»).
316
+ if (msg.role === 'assistant' && msg.reasoning) {
317
+ entry.reasoning_content = msg.reasoning;
318
+ }
246
319
  formatted.push(entry);
247
320
  }
248
321
  return formatted;