@besales/mcp 0.47.1 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/README.md +109 -164
  2. package/README.onprem.ru.md +35 -0
  3. package/bin/besales-mcp-http.js +9 -0
  4. package/bin/besales-onprem.mjs +19 -0
  5. package/dist/auth/connection-store.d.ts +3 -1
  6. package/dist/auth/connection-store.js +9 -3
  7. package/dist/auth/connection-store.js.map +1 -1
  8. package/dist/auth/oauth-client.d.ts +20 -27
  9. package/dist/auth/oauth-client.js +31 -23
  10. package/dist/auth/oauth-client.js.map +1 -1
  11. package/dist/auth/session-workspace.d.ts +1 -0
  12. package/dist/auth/session-workspace.js +10 -1
  13. package/dist/auth/session-workspace.js.map +1 -1
  14. package/dist/auth/token-storage.js +4 -1
  15. package/dist/auth/token-storage.js.map +1 -1
  16. package/dist/cli.d.ts +1 -0
  17. package/dist/cli.js +80 -19
  18. package/dist/cli.js.map +1 -1
  19. package/dist/constants/crm-catalog.d.ts +2 -0
  20. package/dist/constants/crm-catalog.js +3 -0
  21. package/dist/constants/crm-catalog.js.map +1 -0
  22. package/dist/http/api-client.d.ts +52 -7
  23. package/dist/http/api-client.js +131 -66
  24. package/dist/http/api-client.js.map +1 -1
  25. package/dist/http/feedback-document-error.d.ts +26 -0
  26. package/dist/http/feedback-document-error.js +22 -0
  27. package/dist/http/feedback-document-error.js.map +1 -0
  28. package/dist/http-server.d.ts +15 -0
  29. package/dist/http-server.js +378 -0
  30. package/dist/http-server.js.map +1 -0
  31. package/dist/instructions/server-instructions.d.ts +1 -1
  32. package/dist/instructions/server-instructions.js +6 -3
  33. package/dist/instructions/server-instructions.js.map +1 -1
  34. package/dist/network/constants.d.ts +25 -0
  35. package/dist/network/constants.js +26 -0
  36. package/dist/network/constants.js.map +1 -0
  37. package/dist/network/failed-verifications.d.ts +10 -0
  38. package/dist/network/failed-verifications.js +37 -0
  39. package/dist/network/failed-verifications.js.map +1 -0
  40. package/dist/network/http-test-fixture.d.ts +3 -0
  41. package/dist/network/http-test-fixture.js +86 -0
  42. package/dist/network/http-test-fixture.js.map +1 -0
  43. package/dist/network/known-keys.d.ts +10 -0
  44. package/dist/network/known-keys.js +38 -0
  45. package/dist/network/known-keys.js.map +1 -0
  46. package/dist/network/memory-credentials.d.ts +11 -0
  47. package/dist/network/memory-credentials.js +24 -0
  48. package/dist/network/memory-credentials.js.map +1 -0
  49. package/dist/network/rate-limit.d.ts +23 -0
  50. package/dist/network/rate-limit.js +62 -0
  51. package/dist/network/rate-limit.js.map +1 -0
  52. package/dist/network/rejected-keys.d.ts +9 -0
  53. package/dist/network/rejected-keys.js +39 -0
  54. package/dist/network/rejected-keys.js.map +1 -0
  55. package/dist/network/request-work.d.ts +8 -0
  56. package/dist/network/request-work.js +20 -0
  57. package/dist/network/request-work.js.map +1 -0
  58. package/dist/network/successful-keys.d.ts +17 -0
  59. package/dist/network/successful-keys.js +47 -0
  60. package/dist/network/successful-keys.js.map +1 -0
  61. package/dist/resources/concepts/external-execution.md +3 -1
  62. package/dist/resources/concepts/feedback-sheets.md +21 -12
  63. package/dist/resources/concepts/icp.md +8 -1
  64. package/dist/resources/concepts/sandbox.md +15 -6
  65. package/dist/resources/concepts/triggers.md +8 -0
  66. package/dist/resources/concepts/workbook-classification.md +104 -50
  67. package/dist/resources/docs/agent-behavior.md +51 -382
  68. package/dist/resources/docs/campaigns.md +9 -16
  69. package/dist/resources/docs/crm-integration.md +39 -523
  70. package/dist/resources/docs/files-and-uploads.md +23 -286
  71. package/dist/resources/docs/follow-up.md +47 -12
  72. package/dist/resources/docs/knowledge-base.md +52 -521
  73. package/dist/resources/docs/pipeline-builder.md +26 -216
  74. package/dist/resources/docs/pipeline-settings-deep.md +27 -220
  75. package/dist/resources/docs/platforms.md +106 -519
  76. package/dist/resources/docs/prompt-anatomy.md +39 -285
  77. package/dist/resources/docs/routing.md +8 -16
  78. package/dist/resources/docs/trigger-actions.md +40 -24
  79. package/dist/resources/docs/variables.md +8 -12
  80. package/dist/resources/operator-edit.contract.d.ts +7 -0
  81. package/dist/resources/operator-edit.contract.js +8 -0
  82. package/dist/resources/operator-edit.contract.js.map +1 -0
  83. package/dist/resources/registry.js +20 -4
  84. package/dist/resources/registry.js.map +1 -1
  85. package/dist/resources/workflows/audit-dialogues.md +23 -12
  86. package/dist/resources/workflows/compare-models.md +6 -4
  87. package/dist/resources/workflows/connect-crm-from-scratch.md +15 -12
  88. package/dist/resources/workflows/connect-datasource-from-scratch.md +5 -4
  89. package/dist/resources/workflows/extract-from-document.md +8 -6
  90. package/dist/resources/workflows/operator-edit.md +15 -0
  91. package/dist/resources/workflows/platform-setup-from-scratch.md +59 -70
  92. package/dist/resources/workflows/production-readiness-check.md +25 -15
  93. package/dist/schemas/mcp-tools.json +12061 -6753
  94. package/dist/schemas/voice-actions-api.contract.json +248 -0
  95. package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
  96. package/dist/shared/constants/broadcast-reason.constants.js +47 -0
  97. package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
  98. package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
  99. package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
  100. package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
  101. package/dist/shared/constants/followup-note.constants.d.ts +3 -0
  102. package/dist/shared/constants/followup-note.constants.js +4 -0
  103. package/dist/shared/constants/followup-note.constants.js.map +1 -0
  104. package/dist/shared/constants/followup-session.constants.d.ts +2 -0
  105. package/dist/shared/constants/followup-session.constants.js +3 -0
  106. package/dist/shared/constants/followup-session.constants.js.map +1 -0
  107. package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
  108. package/dist/shared/constants/funnel-analytics.constants.js +3 -0
  109. package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
  110. package/dist/shared/constants/message-filter.constants.d.ts +7 -0
  111. package/dist/shared/constants/message-filter.constants.js +8 -0
  112. package/dist/shared/constants/message-filter.constants.js.map +1 -0
  113. package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
  114. package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
  115. package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
  116. package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
  117. package/dist/tasks/task-state-store.js +5 -0
  118. package/dist/tasks/task-state-store.js.map +1 -1
  119. package/dist/tools/annotations.js +4 -3
  120. package/dist/tools/annotations.js.map +1 -1
  121. package/dist/tools/definitions/agent-design.d.ts +78 -21
  122. package/dist/tools/definitions/agent-design.js +246 -90
  123. package/dist/tools/definitions/agent-design.js.map +1 -1
  124. package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
  125. package/dist/tools/definitions/agent-model-notice.js +31 -0
  126. package/dist/tools/definitions/agent-model-notice.js.map +1 -0
  127. package/dist/tools/definitions/agent-models.d.ts +5 -0
  128. package/dist/tools/definitions/agent-models.js +26 -0
  129. package/dist/tools/definitions/agent-models.js.map +1 -0
  130. package/dist/tools/definitions/agent-settings.d.ts +85 -0
  131. package/dist/tools/definitions/agent-settings.js +187 -0
  132. package/dist/tools/definitions/agent-settings.js.map +1 -0
  133. package/dist/tools/definitions/ai-costs.d.ts +12 -0
  134. package/dist/tools/definitions/ai-costs.js +142 -0
  135. package/dist/tools/definitions/ai-costs.js.map +1 -0
  136. package/dist/tools/definitions/api-tool-request.d.ts +15 -0
  137. package/dist/tools/definitions/api-tool-request.js +2 -0
  138. package/dist/tools/definitions/api-tool-request.js.map +1 -0
  139. package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
  140. package/dist/tools/definitions/behavior-shipped-form.js +185 -0
  141. package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
  142. package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
  143. package/dist/tools/definitions/broadcast-alerts.js +72 -0
  144. package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
  145. package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
  146. package/dist/tools/definitions/broadcast-analytics.js +732 -427
  147. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  148. package/dist/tools/definitions/broadcast-scheduler.d.ts +19 -13
  149. package/dist/tools/definitions/broadcast-scheduler.js +217 -128
  150. package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
  151. package/dist/tools/definitions/call-operator-task.schema.d.ts +11 -0
  152. package/dist/tools/definitions/call-operator-task.schema.js +30 -0
  153. package/dist/tools/definitions/call-operator-task.schema.js.map +1 -0
  154. package/dist/tools/definitions/contacts.d.ts +3 -0
  155. package/dist/tools/definitions/contacts.js +57 -31
  156. package/dist/tools/definitions/contacts.js.map +1 -1
  157. package/dist/tools/definitions/crm-platform.d.ts +28 -39
  158. package/dist/tools/definitions/crm-platform.js +235 -344
  159. package/dist/tools/definitions/crm-platform.js.map +1 -1
  160. package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
  161. package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
  162. package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
  163. package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
  164. package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
  165. package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
  166. package/dist/tools/definitions/custom-reports.d.ts +12 -0
  167. package/dist/tools/definitions/custom-reports.js +68 -0
  168. package/dist/tools/definitions/custom-reports.js.map +1 -0
  169. package/dist/tools/definitions/datasource.d.ts +2 -1
  170. package/dist/tools/definitions/datasource.js +28 -13
  171. package/dist/tools/definitions/datasource.js.map +1 -1
  172. package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
  173. package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
  174. package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
  175. package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
  176. package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
  177. package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
  178. package/dist/tools/definitions/dialog-review.d.ts +49 -0
  179. package/dist/tools/definitions/dialog-review.js +383 -0
  180. package/dist/tools/definitions/dialog-review.js.map +1 -0
  181. package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
  182. package/dist/tools/definitions/dialogue-analysis.js +170 -0
  183. package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
  184. package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
  185. package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
  186. package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
  187. package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
  188. package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
  189. package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
  190. package/dist/tools/definitions/dialogue-export.d.ts +7 -1
  191. package/dist/tools/definitions/dialogue-export.js +89 -32
  192. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  193. package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
  194. package/dist/tools/definitions/dialogue-followup-state.js +69 -0
  195. package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
  196. package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
  197. package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
  198. package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
  199. package/dist/tools/definitions/edit-version.d.ts +5 -0
  200. package/dist/tools/definitions/edit-version.js +20 -0
  201. package/dist/tools/definitions/edit-version.js.map +1 -0
  202. package/dist/tools/definitions/external-api-channels.js +17 -15
  203. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  204. package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
  205. package/dist/tools/definitions/feedback-document-access.js +63 -0
  206. package/dist/tools/definitions/feedback-document-access.js.map +1 -0
  207. package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
  208. package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
  209. package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
  210. package/dist/tools/definitions/follow-up-config.d.ts +79 -0
  211. package/dist/tools/definitions/follow-up-config.js +258 -0
  212. package/dist/tools/definitions/follow-up-config.js.map +1 -0
  213. package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
  214. package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
  215. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  216. package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
  217. package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
  218. package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
  219. package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
  220. package/dist/tools/definitions/follow-up-setup.js +20 -87
  221. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  222. package/dist/tools/definitions/follow-up.d.ts +20 -122
  223. package/dist/tools/definitions/follow-up.js +200 -354
  224. package/dist/tools/definitions/follow-up.js.map +1 -1
  225. package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
  226. package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
  227. package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
  228. package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
  229. package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
  230. package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
  231. package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
  232. package/dist/tools/definitions/funnel-analytics.js +150 -0
  233. package/dist/tools/definitions/funnel-analytics.js.map +1 -0
  234. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
  235. package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
  236. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  237. package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
  238. package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
  239. package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
  240. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +17 -29
  241. package/dist/tools/definitions/getcourse-cold-welcome.js +182 -242
  242. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  243. package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
  244. package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
  245. package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
  246. package/dist/tools/definitions/help.js.map +1 -1
  247. package/dist/tools/definitions/icp-import-source.d.ts +75 -0
  248. package/dist/tools/definitions/icp-import-source.js +88 -0
  249. package/dist/tools/definitions/icp-import-source.js.map +1 -0
  250. package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
  251. package/dist/tools/definitions/inbound-analytics.js +55 -0
  252. package/dist/tools/definitions/inbound-analytics.js.map +1 -0
  253. package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
  254. package/dist/tools/definitions/instagram-comment.templates.js +34 -0
  255. package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
  256. package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
  257. package/dist/tools/definitions/instagram-settings-compat.js +7 -0
  258. package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
  259. package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
  260. package/dist/tools/definitions/knowledge-chunking.js +83 -0
  261. package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
  262. package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
  263. package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
  264. package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
  265. package/dist/tools/definitions/knowledge.d.ts +24 -14
  266. package/dist/tools/definitions/knowledge.js +342 -233
  267. package/dist/tools/definitions/knowledge.js.map +1 -1
  268. package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
  269. package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
  270. package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
  271. package/dist/tools/definitions/link-tracking.d.ts +8 -0
  272. package/dist/tools/definitions/link-tracking.js +141 -38
  273. package/dist/tools/definitions/link-tracking.js.map +1 -1
  274. package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
  275. package/dist/tools/definitions/mailing-variant-content.js +73 -0
  276. package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
  277. package/dist/tools/definitions/model-comparison.d.ts +1 -0
  278. package/dist/tools/definitions/model-comparison.js +4 -5
  279. package/dist/tools/definitions/model-comparison.js.map +1 -1
  280. package/dist/tools/definitions/money-currency.d.ts +5 -0
  281. package/dist/tools/definitions/money-currency.js +10 -0
  282. package/dist/tools/definitions/money-currency.js.map +1 -0
  283. package/dist/tools/definitions/operator-workflow.d.ts +5 -5
  284. package/dist/tools/definitions/operator-workflow.js +80 -27
  285. package/dist/tools/definitions/operator-workflow.js.map +1 -1
  286. package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
  287. package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
  288. package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
  289. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
  290. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
  291. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
  292. package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
  293. package/dist/tools/definitions/platform-settings-limits.js +6 -0
  294. package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
  295. package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
  296. package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
  297. package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
  298. package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
  299. package/dist/tools/definitions/platform-settings-update.js +134 -0
  300. package/dist/tools/definitions/platform-settings-update.js.map +1 -0
  301. package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
  302. package/dist/tools/definitions/platform-setup-wave.js +1079 -0
  303. package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
  304. package/dist/tools/definitions/platform-setup.d.ts +701 -222
  305. package/dist/tools/definitions/platform-setup.js +313 -752
  306. package/dist/tools/definitions/platform-setup.js.map +1 -1
  307. package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
  308. package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
  309. package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
  310. package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
  311. package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
  312. package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
  313. package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
  314. package/dist/tools/definitions/prompt-batch-controls.js +40 -0
  315. package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
  316. package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
  317. package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
  318. package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
  319. package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
  320. package/dist/tools/definitions/prompt-text-projection.js +62 -0
  321. package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
  322. package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
  323. package/dist/tools/definitions/reviewer-paid.js +115 -0
  324. package/dist/tools/definitions/reviewer-paid.js.map +1 -0
  325. package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
  326. package/dist/tools/definitions/routing-condition-projection.js +97 -0
  327. package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
  328. package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
  329. package/dist/tools/definitions/schedule-selection-hints.js +42 -0
  330. package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
  331. package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
  332. package/dist/tools/definitions/scheduled-task-alias.js +207 -0
  333. package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
  334. package/dist/tools/definitions/session.js +3 -3
  335. package/dist/tools/definitions/session.js.map +1 -1
  336. package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
  337. package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
  338. package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
  339. package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
  340. package/dist/tools/definitions/shared-input.helpers.js +323 -0
  341. package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
  342. package/dist/tools/definitions/shared.d.ts +414 -284
  343. package/dist/tools/definitions/shared.js +436 -619
  344. package/dist/tools/definitions/shared.js.map +1 -1
  345. package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
  346. package/dist/tools/definitions/shipped-output-names.js +123 -0
  347. package/dist/tools/definitions/shipped-output-names.js.map +1 -0
  348. package/dist/tools/definitions/task-state.d.ts +5 -5
  349. package/dist/tools/definitions/task-state.js +2 -1
  350. package/dist/tools/definitions/task-state.js.map +1 -1
  351. package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
  352. package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
  353. package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
  354. package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
  355. package/dist/tools/definitions/telegram-pool-policy.js +56 -0
  356. package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
  357. package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
  358. package/dist/tools/definitions/touch-history-alias.js +99 -0
  359. package/dist/tools/definitions/touch-history-alias.js.map +1 -0
  360. package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
  361. package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
  362. package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
  363. package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
  364. package/dist/tools/definitions/trigger-argument.schema.js +23 -0
  365. package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
  366. package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
  367. package/dist/tools/definitions/trigger-claim-alias.js +90 -0
  368. package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
  369. package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
  370. package/dist/tools/definitions/trigger-echo-projection.js +41 -0
  371. package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
  372. package/dist/tools/definitions/trigger-upsert.tool.d.ts +29 -0
  373. package/dist/tools/definitions/trigger-upsert.tool.js +122 -0
  374. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
  375. package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
  376. package/dist/tools/definitions/v15-port-descriptions.js +30 -0
  377. package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
  378. package/dist/tools/definitions/variables.d.ts +44 -0
  379. package/dist/tools/definitions/variables.js +310 -0
  380. package/dist/tools/definitions/variables.js.map +1 -0
  381. package/dist/tools/definitions/voice-action-input.d.ts +9 -0
  382. package/dist/tools/definitions/voice-action-input.js +141 -0
  383. package/dist/tools/definitions/voice-action-input.js.map +1 -0
  384. package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
  385. package/dist/tools/definitions/widget-customization-compat.js +23 -0
  386. package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
  387. package/dist/tools/definitions.d.ts +1105 -621
  388. package/dist/tools/definitions.js +57 -27
  389. package/dist/tools/definitions.js.map +1 -1
  390. package/dist/tools/description-localization.js +3 -2
  391. package/dist/tools/description-localization.js.map +1 -1
  392. package/dist/tools/follow-up-request.d.ts +19 -0
  393. package/dist/tools/follow-up-request.js +81 -0
  394. package/dist/tools/follow-up-request.js.map +1 -0
  395. package/dist/tools/followup-revision.d.ts +4 -0
  396. package/dist/tools/followup-revision.js +29 -0
  397. package/dist/tools/followup-revision.js.map +1 -0
  398. package/dist/tools/incomplete-list.js +4 -0
  399. package/dist/tools/incomplete-list.js.map +1 -1
  400. package/dist/tools/inventory.js +47 -11
  401. package/dist/tools/inventory.js.map +1 -1
  402. package/dist/tools/operation-recovery.d.ts +4 -0
  403. package/dist/tools/operation-recovery.js +33 -0
  404. package/dist/tools/operation-recovery.js.map +1 -0
  405. package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
  406. package/dist/tools/registry-mapping-primary.cases.js +753 -0
  407. package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
  408. package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
  409. package/dist/tools/registry-mapping-secondary.cases.js +626 -0
  410. package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
  411. package/dist/tools/registry-mapping.cases.d.ts +8 -0
  412. package/dist/tools/registry-mapping.cases.js +13 -0
  413. package/dist/tools/registry-mapping.cases.js.map +1 -0
  414. package/dist/tools/registry-test-fixtures.d.ts +50 -0
  415. package/dist/tools/registry-test-fixtures.js +120 -0
  416. package/dist/tools/registry-test-fixtures.js.map +1 -0
  417. package/dist/tools/registry.d.ts +2 -0
  418. package/dist/tools/registry.js +82 -52
  419. package/dist/tools/registry.js.map +1 -1
  420. package/dist/tools/result.d.ts +1 -0
  421. package/dist/tools/result.js +90 -22
  422. package/dist/tools/result.js.map +1 -1
  423. package/dist/tools/toolsets.d.ts +16 -0
  424. package/dist/tools/toolsets.js +25 -1
  425. package/dist/tools/toolsets.js.map +1 -1
  426. package/dist/types/api-contract.gen.d.ts +105862 -22115
  427. package/dist/utils/credential-signatures.d.ts +3 -0
  428. package/dist/utils/credential-signatures.js +10 -0
  429. package/dist/utils/credential-signatures.js.map +1 -0
  430. package/dist/utils/data-source-column-name.d.ts +10 -0
  431. package/dist/utils/data-source-column-name.js +36 -0
  432. package/dist/utils/data-source-column-name.js.map +1 -0
  433. package/dist/utils/logger.d.ts +1 -0
  434. package/dist/utils/logger.js +32 -8
  435. package/dist/utils/logger.js.map +1 -1
  436. package/dist/utils/secret-read-boundary.d.ts +2 -0
  437. package/dist/utils/secret-read-boundary.js +88 -0
  438. package/dist/utils/secret-read-boundary.js.map +1 -0
  439. package/dist/utils/setup-secrets.d.ts +4 -0
  440. package/dist/utils/setup-secrets.js +40 -0
  441. package/dist/utils/setup-secrets.js.map +1 -0
  442. package/docs/agent-models.md +9 -0
  443. package/docs/agent-usage-guide.full.ru.md +1 -4
  444. package/docs/analytics-contract.md +67 -0
  445. package/docs/async-operation-lifecycle.md +10 -3
  446. package/docs/connect.ru.md +144 -4
  447. package/docs/contact-company-profile.md +17 -0
  448. package/docs/contact-recommendations.md +7 -0
  449. package/docs/crm-stage-pool.md +73 -0
  450. package/docs/customer-data.md +61 -0
  451. package/docs/edit-versions.md +36 -0
  452. package/docs/failure-semantics.md +17 -9
  453. package/docs/help-navigation.md +15 -42
  454. package/docs/host-compatibility-matrix.md +72 -93
  455. package/docs/host-setup.md +33 -35
  456. package/docs/invariants/public-api-and-contracts.md +16 -0
  457. package/docs/legacy-action-settings.md +21 -0
  458. package/docs/main-transfer-dependencies.md +38 -0
  459. package/docs/mcp2-parity.md +50 -0
  460. package/docs/modules/analytics.md +79 -0
  461. package/docs/modules/besales-mcp.md +137 -0
  462. package/docs/modules/dialog-review-report.md +38 -0
  463. package/docs/modules/dialogue-followup-adapters.md +39 -0
  464. package/docs/modules/message-reactions.md +17 -0
  465. package/docs/modules/network-mode.md +284 -0
  466. package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
  467. package/docs/pii-policy.md +21 -16
  468. package/docs/response-size-budget.md +197 -7
  469. package/docs/secret-read-boundary.md +102 -0
  470. package/docs/task-state.md +7 -2
  471. package/docs/telegram-pool-policy.md +19 -0
  472. package/docs/tool-effects.md +15 -9
  473. package/docs/tool-surface.md +205 -4
  474. package/docs/voice-actions-and-inbox.md +95 -0
  475. package/docs/wazzup-instagram-comments.md +26 -0
  476. package/package.json +17 -10
  477. package/scripts/api-source-loader.spec.mjs +40 -0
  478. package/scripts/audit-bridge-controls.mjs +129 -0
  479. package/scripts/audit-revert-mutants.mjs +107 -0
  480. package/scripts/bridge-api-input.spec.mjs +98 -0
  481. package/scripts/bridge-controls-mutants.mjs +130 -0
  482. package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
  483. package/scripts/brx4-ledger-payload.spec.mjs +127 -0
  484. package/scripts/build-onprem.mjs +108 -0
  485. package/scripts/connect-clients.sh +141 -0
  486. package/scripts/connect-scopes.mjs +166 -0
  487. package/scripts/connect-scopes.spec.mjs +83 -0
  488. package/scripts/emit-personal-link-carrier.mjs +31 -0
  489. package/scripts/emit-setup-init-schemas.mjs +24 -0
  490. package/scripts/emit-tool-routes.mjs +878 -0
  491. package/scripts/emit-tool-routes.spec.mjs +300 -0
  492. package/scripts/followup-registry.spec.mjs +107 -0
  493. package/scripts/generate-crm-rotation-contract.mjs +98 -0
  494. package/scripts/generate-followup-session-contract.mjs +16 -0
  495. package/scripts/icp-import-verification/mutate.cjs +70 -0
  496. package/scripts/import-secret-read-contract.mjs +53 -0
  497. package/scripts/install-claude-desktop.js +1 -1
  498. package/scripts/lag-decisions.mjs +37 -0
  499. package/scripts/lag-decisions.spec.mjs +87 -0
  500. package/scripts/lag-open-task-owners.mjs +46 -0
  501. package/scripts/lag-open-task-owners.spec.mjs +78 -0
  502. package/scripts/lag-payload.mjs +10 -0
  503. package/scripts/legacy-action-lag.spec.mjs +22 -0
  504. package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
  505. package/scripts/mcpcompat-handler.mjs +34 -0
  506. package/scripts/mcpcompat-loader.mjs +36 -0
  507. package/scripts/mcpcompat-typescript.mjs +3 -0
  508. package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
  509. package/scripts/prbr-round1-recheck.spec.mjs +605 -0
  510. package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
  511. package/scripts/publish-mcp-registry.mjs +98 -0
  512. package/scripts/publish-mcp-registry.spec.mjs +68 -0
  513. package/scripts/record-scheduled-task-call.mjs +26 -0
  514. package/scripts/refusal-probe.mjs +17 -0
  515. package/scripts/refusal-probe.spec.mjs +29 -0
  516. package/scripts/registry-diff.mjs +502 -0
  517. package/scripts/registry-diff.spec.mjs +787 -0
  518. package/scripts/request-query.mjs +43 -0
  519. package/scripts/request-query.spec.mjs +82 -0
  520. package/scripts/route-lag.mjs +23 -0
  521. package/scripts/route-lag.spec.mjs +30 -0
  522. package/scripts/sample-args.mjs +174 -0
  523. package/scripts/sample-args.spec.mjs +160 -0
  524. package/scripts/shipped-definitions.mjs +197 -0
  525. package/scripts/shipped-definitions.spec.mjs +57 -0
  526. package/scripts/shipped-inputs.spec.mjs +136 -0
  527. package/scripts/shipped-recordings.spec.mjs +19 -0
  528. package/scripts/shipped-ref.d.mts +5 -0
  529. package/scripts/shipped-ref.mjs +20 -0
  530. package/scripts/shipped-ref.spec.mjs +59 -0
  531. package/scripts/shipped-registry.mjs +107 -0
  532. package/scripts/shipped-sample-candidates.mjs +69 -0
  533. package/scripts/shipped-sample-candidates.spec.mjs +117 -0
  534. package/scripts/shipped-sample.mjs +868 -0
  535. package/scripts/shipped-sample.spec.mjs +451 -0
  536. package/scripts/sync-agent-model-schemas.mjs +72 -0
  537. package/scripts/sync-api-contracts.mjs +85 -0
  538. package/scripts/sync-api-contracts.spec.mjs +144 -0
  539. package/scripts/sync-contract-ledger-schemas.mjs +161 -0
  540. package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
  541. package/scripts/sync-prompt-draft-schema.mjs +92 -0
  542. package/scripts/sync-route-map.mjs +94 -0
  543. package/scripts/sync-schema-descriptions.mjs +25 -0
  544. package/scripts/sync-tool-inventory.mjs +27 -0
  545. package/scripts/sync-trigger-argument-schema.mjs +121 -0
  546. package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
  547. package/scripts/sync-voice-actions-contract.mjs +67 -0
  548. package/scripts/sync-voice-actions-tools.mjs +97 -0
  549. package/scripts/sync-wave-id-schemas.mjs +55 -0
  550. package/scripts/tool-input-schemas.mjs +46 -0
  551. package/scripts/tool-input-schemas.spec.mjs +50 -0
  552. package/scripts/verify-followup-adapters.mjs +235 -0
  553. package/scripts/verify-secret-read-import.mjs +84 -0
  554. package/scripts/verify-secret-read-mutants.mjs +143 -0
  555. package/dist/tools/definitions/analytics.d.ts +0 -40
  556. package/dist/tools/definitions/analytics.js +0 -233
  557. package/dist/tools/definitions/analytics.js.map +0 -1
  558. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
  559. package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
  560. package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
  561. package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
  562. package/dist/tools/definitions/dialogue-audit.js +0 -292
  563. package/dist/tools/definitions/dialogue-audit.js.map +0 -1
  564. package/dist/tools/definitions/getcourse-wave.js +0 -519
  565. package/dist/tools/definitions/getcourse-wave.js.map +0 -1
  566. package/dist/tools/definitions/operational-overview.d.ts +0 -3
  567. package/dist/tools/definitions/operational-overview.js +0 -23
  568. package/dist/tools/definitions/operational-overview.js.map +0 -1
  569. package/dist/tools/definitions/scheduled-tasks.js +0 -173
  570. package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
  571. package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
  572. package/dist/tools/definitions/trigger-contact-claims.js +0 -60
  573. package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
  574. package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
  575. package/dist/tools/registry-mapping-cases-core.js +0 -927
  576. package/dist/tools/registry-mapping-cases-core.js.map +0 -1
  577. package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
  578. package/dist/tools/registry-mapping-cases-platform.js +0 -1052
  579. package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
  580. package/dist/tools/trigger-action-config.d.ts +0 -49
  581. package/dist/tools/trigger-action-config.js +0 -171
  582. package/dist/tools/trigger-action-config.js.map +0 -1
  583. package/docs/evals/model-behavior-scorecard.md +0 -80
  584. package/docs/operation-coverage.md +0 -114
  585. package/scripts/mock-credentials.js +0 -77
  586. package/scripts/model-eval-server.js +0 -213
  587. package/scripts/run-model-eval.js +0 -447
@@ -2,7 +2,7 @@
2
2
  // по фильтрам + транскрипт одного диалога. Scope read:conversations (входит в mcp:*).
3
3
  // MCP файлы НЕ пишет — данные возвращаются, вызывающий AI раскладывает по файлам.
4
4
  import { z } from 'zod';
5
- import { defineTool, uuidSchema, withInstructions } from './shared.js';
5
+ import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
6
6
  const workLogEventSchema = z.enum([
7
7
  'START',
8
8
  'IN_PROCESS',
@@ -15,6 +15,7 @@ const workLogEventSchema = z.enum([
15
15
  export const dialogueExportTools = [
16
16
  defineTool({
17
17
  name: 'besales_dialogues_query',
18
+ carriesCustomerData: true,
18
19
  sideEffect: 'none',
19
20
  closedWorld: true,
20
21
  requiredFields: [],
@@ -24,37 +25,84 @@ export const dialogueExportTools = [
24
25
  schema: z
25
26
  .object({
26
27
  workspace_id: uuidSchema.optional(),
27
- // Фильтр по каналам (ChatUser.platformId IN ...).
28
+ source: z.enum(['export', 'inbox']).optional(),
29
+ channel_id: uuidSchema.optional(),
30
+ contact_id: uuidSchema.optional(),
31
+ purchased: z.boolean().optional(),
32
+ has_payment: z.boolean().optional(),
33
+ with_totals: z.boolean().optional(),
34
+ // Фильтр по каналам диалога.
28
35
  platform_ids: z.array(uuidSchema).optional(),
29
- // Окно активности диалога (по сообщениям), ISO 8601.
36
+ // Окно, ISO 8601: по сообщениям, а при фильтре действия — по времени исполнения.
30
37
  date_from: z.string().datetime().optional(),
31
38
  date_to: z.string().datetime().optional(),
32
- // CRM лид-статусы (ChatUser.leadStatus).
39
+ // CRM-статусы контакта.
33
40
  lead_status: z.array(z.string().min(1)).optional(),
34
- // Причины деактивации бота (ChatUser.deactivateReason).
41
+ // Причины остановки автоматизации контакта.
35
42
  deactivate_reason: z.array(z.string().min(1)).optional(),
36
43
  // Фильтр по ПОСЛЕДНЕМУ событию platform_work_logs диалога.
37
44
  work_log_event: z.array(workLogEventSchema).optional(),
38
- // ActionType выполненного на сообщении действия. Backend валидирует enum.
45
+ // Типы ШАГОВ действия (GETCOURSE_CREATE_DEAL…). Неизвестный тип — 400 со списком.
39
46
  action_type: z.array(z.string().min(1)).optional(),
40
- // Успешность подходящего trigger-action.
47
+ // Успех шага указанного типа; без типа — успех исполнения целиком.
41
48
  action_success: z.boolean().optional(),
42
- // Режим того же выполнения триггера.
49
+ // Режим исполнения; test — 422: тестовые диалоги в выгрузку не входят.
43
50
  action_execution_mode: z.enum(['production', 'test']).optional(),
44
- // ChatUser.isBotActive.
51
+ // Активность AI для контакта.
45
52
  ai_enabled: z.boolean().optional(),
46
- // ChatUser.isFollowUpActive.
53
+ // Активность follow-up для контакта.
47
54
  followups_enabled: z.boolean().optional(),
48
55
  // true — только с сообщениями; false — только без.
49
56
  has_messages: z.boolean().optional(),
50
57
  limit: z.number().int().min(1).max(100).optional(),
51
58
  cursor: z.string().optional(),
52
59
  })
53
- .strict(),
60
+ .strict()
61
+ .superRefine((input, context) => {
62
+ const fields = input.source === 'inbox'
63
+ ? [
64
+ 'platform_ids',
65
+ 'date_from',
66
+ 'date_to',
67
+ 'lead_status',
68
+ 'deactivate_reason',
69
+ 'work_log_event',
70
+ 'action_type',
71
+ 'action_success',
72
+ 'action_execution_mode',
73
+ 'ai_enabled',
74
+ 'followups_enabled',
75
+ 'has_messages',
76
+ ]
77
+ : ['channel_id', 'contact_id', 'purchased', 'has_payment', 'with_totals'];
78
+ for (const field of fields)
79
+ if (input[field] !== undefined)
80
+ context.addIssue({
81
+ code: 'custom',
82
+ path: [field],
83
+ message: input.source === 'inbox'
84
+ ? 'Этот фильтр относится к выгрузке диалогов; для Входящих он недоступен.'
85
+ : 'Для фильтров Входящих выбери source=inbox.',
86
+ });
87
+ }),
54
88
  createRequest: (input) => {
89
+ if (input.source === 'inbox')
90
+ return {
91
+ method: 'POST',
92
+ path: `/workspaces/${input.workspace_id}/conversations/search`,
93
+ body: compactObject({
94
+ channelId: input.channel_id,
95
+ contactId: input.contact_id,
96
+ purchased: input.purchased,
97
+ hasPayment: input.has_payment,
98
+ withTotals: input.with_totals,
99
+ limit: input.limit,
100
+ cursor: input.cursor,
101
+ }),
102
+ };
55
103
  const params = new URLSearchParams();
56
104
  if (input.platform_ids?.length) {
57
- params.set('platformIds', input.platform_ids.join(','));
105
+ params.set('channelIds', input.platform_ids.join(','));
58
106
  }
59
107
  if (input.date_from) {
60
108
  params.set('dateFrom', input.date_from);
@@ -101,20 +149,29 @@ export const dialogueExportTools = [
101
149
  path: `/workspaces/${input.workspace_id}/dialogue-export${query ? `?${query}` : ''}`,
102
150
  };
103
151
  },
104
- enhanceResponse: (response) => withInstructions(response, [
105
- 'Манифест подходящих диалогов: { data: DialogueExportItem[], total, cursor }. total — «найдено N диалогов».',
106
- 'Пагинация: если cursor не null — повтори тот же вызов с этим cursor, пока не соберёшь все диалоги.',
107
- 'Для точного аудита новых заявок используй action_type=["GETCOURSE_CREATE_DEAL"], action_success=true и action_execution_mode="production".',
108
- 'GETCOURSE_SEND_PAYMENT_LINK анализируй отдельно: он может обновлять существующий заказ и сам по себе не доказывает создание новой заявки.',
109
- 'Тексты переписки здесь НЕ отдаются — по каждому conversationId вызывай besales_dialogue_transcript.',
110
- 'lastWaveSentAt / firstPaidAt / paidAmount — LIFETIME-маркеры контакта, а НЕ одна цепочка: это ПОСЛЕДНЯЯ волна, ПЕРВАЯ оплата и сумма всех прямых оплат. У контакта с несколькими волнами разность firstPaidAt − lastWaveSentAt может выйти отрицательной — вычитать их нельзя.',
111
- 'Для атрибуции оплаты к конкретной волне бери когортные цифры из besales_broadcast_analytics_get: там оплаты считаются переходами относительно даты волны.',
112
- 'firstPaidAt/paidAmount заполняются только для GetCourse и только при наличии scope read:analytics; null означает «неизвестно», а не «не платил». paidAmount — прямые оплаты по реестру, косвенные (подтверждённые оператором) в него не входят.',
113
- 'MCP файлы не пишет: сохрани результаты локально сам (по файлу на диалог).',
114
- ]),
152
+ enhanceResponse: (response, input) => input.source === 'inbox'
153
+ ? withInstructions(response, [
154
+ 'Входящие: purchased=true — успешный заказ агента ИЛИ текущая продажная стадия; false — нет обоих признаков. Это не оплата; has_payment — отдельный фильтр.',
155
+ 'hasPurchase в строке, отбор и итоги считает сервер до пагинации. С channel_id область ограничена каналом, без него — видимыми каналами человека. Не вычисляй покупку по hasPayment.',
156
+ 'Если cursor непустой, повтори source=inbox с теми же фильтрами и cursor. with_totals возвращает ограниченные итоги только первой страницы; capped=true означает 999+, а не точный итог.',
157
+ ])
158
+ : withInstructions(response, [
159
+ 'Манифест подходящих диалогов: { data: DialogueExportItem[], total, cursor }. total — число ДИАЛОГОВ, а не заявок: в одном диалоге их бывает несколько, считай заявки по транскрипту.',
160
+ 'Пагинация: если cursor не null — повтори тот же вызов с этим cursor, пока не соберёшь все диалоги.',
161
+ 'Для аудита новых заявок используй action_type=["GETCOURSE_CREATE_DEAL"] и action_execution_mode="production" БЕЗ action_success и считай исходы шагов по транскрипту: action_success=true отсекает провалы и неизвестные исходы, которым нужен REVIEW. Успешный шаг с reusedOpenInvoice=true использовал открытый счёт: нового заказа нет. Тип, успех и окно дат сходятся на ОДНОМ шаге одного исполнения, окно — по времени исполнения.',
162
+ 'action_success БЕЗ action_type — по исходу исполнения: true — действие ВЫПОЛНЕНО по-настоящему (outcome=DONE в транскрипте; действие, все МЕНЯЮЩИЕ шаги которого пропущены защитой, успехом не считается, хотя его status=SUCCEEDED), false — всё невыполненное: пропуск, сбой, незавершённое. С action_type пропуск шага не считается ни успехом, ни провалом.',
163
+ 'GETCOURSE_SEND_PAYMENT_LINK анализируй отдельно: он может обновлять существующий заказ и сам по себе не доказывает создание новой заявки.',
164
+ 'Тексты переписки здесь НЕ отдаются — по каждому conversationId вызывай besales_dialogue_transcript.',
165
+ 'lastWaveSentAt / firstPaidAt / paidAmount — LIFETIME-маркеры контакта, а НЕ одна цепочка: это ПОСЛЕДНЯЯ волна, ПЕРВАЯ оплата и сумма всех прямых оплат. У контакта с несколькими волнами разность firstPaidAt − lastWaveSentAt может выйти отрицательной — вычитать их нельзя.',
166
+ 'Метки lastWaveSentAt / firstPaidAt / paidAmount / lastWorkLogEvent считаются по ЧЕЛОВЕКУ через все его каналы: у человека с двумя диалогами обе строки несут одни и те же значения — не складывай их.',
167
+ 'Для атрибуции оплаты к конкретной волне бери когортные цифры из besales_broadcast_analytics_get: там оплаты считаются переходами относительно даты волны.',
168
+ 'firstPaidAt/paidAmount заполняются только для GetCourse и только при наличии scope read:analytics; null означает «неизвестно», а не «не платил». paidAmount — прямые оплаты по реестру, косвенные (подтверждённые оператором) в него не входят.',
169
+ 'MCP файлы не пишет: сохрани результаты локально сам (по файлу на диалог).',
170
+ ]),
115
171
  }),
116
172
  defineTool({
117
173
  name: 'besales_dialogue_transcript',
174
+ carriesCustomerData: true,
118
175
  sideEffect: 'none',
119
176
  closedWorld: true,
120
177
  requiredFields: ['conversation_id'],
@@ -130,7 +187,7 @@ export const dialogueExportTools = [
130
187
  schema: z
131
188
  .object({
132
189
  workspace_id: uuidSchema.optional(),
133
- // ID диалога = conversationId из манифеста (ChatUser.id).
190
+ // ID диалога = conversationId из манифеста.
134
191
  conversation_id: uuidSchema,
135
192
  limit: z.number().int().min(1).max(100).optional(),
136
193
  cursor: z.string().optional(),
@@ -151,15 +208,15 @@ export const dialogueExportTools = [
151
208
  };
152
209
  },
153
210
  enhanceResponse: (response) => withInstructions(response, [
154
- 'Транскрипт диалога: { conversationId, channelType, contactName, turns[], triggerExecutions[], transcriptMarkdown, cursor }.',
211
+ 'Транскрипт диалога: { conversationId, turns[], actionExecutions[], transcriptMarkdown, cursor }.',
155
212
  'Сохрани transcriptMarkdown в ОТДЕЛЬНЫЙ файл на диалог, напр. dialogs/<conversationId>.md.',
156
- 'Роли реплик: client (клиент) / agent. Автора исходящего бери из turn.authorType: AI_AGENT — ответ модели, AUTOMATION — наша рассылка/follow-up/приветствие, HUMAN_OPERATOR — живой человек.',
157
- 'НЕ считай исходящее операторским по isAi=false: у автоматики он тоже false. Вывод «продажу дожал человек» делай только по authorType=HUMAN_OPERATOR.',
158
- 'authorType=null — сообщение клиента ИЛИ строка старше 2026-07-20 без разметки; для таких автора считай неизвестным, а не оператором.',
159
- 'turn.sentAt у agent — фактическое время отправки ответа. У строк старше 2026-07-20 оно равно времени реплики клиента, поэтому интервал «наш ответ → ответ клиента» на старом периоде не вычисляется (получится ноль).',
160
- 'turn.delivered=false — реплика записана в историю, но клиенту НЕ отправлена (тихий режим, не влезший ответ). Такие реплики исключай из подсчёта касаний и интервалов: их sentAt — время строки, а не отправки.',
161
- 'turn.messageId связывает реплику с triggerExecutions.messageId. В actions есть type/success/time и только безопасный resultSummary; сырой result не отдаётся.',
162
- 'Если cursor не null — у диалога есть ещё сообщения: повтори с этим cursor. Первая страница содержит заголовок; последующие — только реплики: дописывай их в тот же файл.',
213
+ 'turn.role: client, agent, operator или automation; isAi=true только у agent.',
214
+ 'turn.delivered=false — исходящее не было доставлено, исключай его из подсчёта касаний.',
215
+ 'actionExecutions — исполнения действий ЭТОЙ страницы, каждое ровно на одной странице. У исполнения: actionName, status, startedAt, triggerMessageId (реплика человека, начавшая ход), responseMessageId (ответ того же прогона) и steps[] — stepType, status, outcomeUnknown, dealId, dealNumber.',
216
+ 'Новый заказ = шаг stepType=GETCOURSE_CREATE_DEAL со status=OK, reusedOpenInvoice=false, без outcomeUnknown и startedAt исполнения в периоде. reusedOpenInvoice=true означает успешное переиспользование открытого счёта, но нового заказа нет; status=SKIPPED — дубль, нового заказа тоже нет. Шаг с outcomeUnknown=true — исход неизвестен, пометь REVIEW. abandoned=true — неизвестен исход только незавершённого шага: OK-шаг с номером сделки в том же исполнении остаётся подтверждённым.',
217
+ 'У исполнения есть исход для человека: outcome (DONE — выполнено, SKIPPED — пропущено, FAILED — сбой, UNKNOWN — исход неизвестен), outcomeLabel, skipReasons (code + label), noEffect (выполнено без изменений), emptyInputs (поля, которые действие берёт из разговора и которые остались пустыми, — названиями для человека; только у DONE, outcomeLabel их уже называет), stepsDone/stepsTotal. status=SUCCEEDED у действия, все МЕНЯЮЩИЕ шаги которого пропущены защитой, — не «выполнено»: смотри outcome. Человеку показывай подписи (outcomeLabel, skipReasons[].label), а не коды.',
218
+ 'runId=null и пустые triggerMessageId/responseMessageId значат «прогон неизвестен» (ручной запуск, перенесённая строка, ход без ответа), а не «действий не было»: связь с репликами тогда определяй по времени — строка действия в transcriptMarkdown уже стоит между репликами по startedAt.',
219
+ 'Если cursor не null — у диалога есть ещё сообщения: повтори с этим cursor. Первая страница содержит заголовок; последующие — реплики и строки действий без заголовка: дописывай их в тот же файл.',
163
220
  ]),
164
221
  }),
165
222
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** API сам разрешает пару contact × channel и проверяет доступ к диалогу. */
2
+ export declare const dialogueFollowupStateTools: (import("./shared.js").ToolDefinition<{
3
+ conversation_id: string;
4
+ }> | import("./shared.js").ToolDefinition<{
5
+ conversation_id: string;
6
+ action: "MUTE_FOREVER" | "MUTE_TEMPORARY" | "ENABLE";
7
+ expected_version: string;
8
+ mute_expires_at?: string | undefined;
9
+ }>)[];
@@ -0,0 +1,69 @@
1
+ import { z } from 'zod';
2
+ import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
3
+ const resultPolicy = {
4
+ neverTruncate: true,
5
+ narrowingHint: 'Читай состояние одного диалога; последствия и ограничения нужны целиком.',
6
+ };
7
+ /** API сам разрешает пару contact × channel и проверяет доступ к диалогу. */
8
+ export const dialogueFollowupStateTools = [
9
+ defineTool({
10
+ name: 'besales_dialogue_followup_state_get',
11
+ sideEffect: 'none',
12
+ closedWorld: true,
13
+ requiredFields: ['conversation_id'],
14
+ resultPolicy,
15
+ schema: z.object({ conversation_id: uuidSchema }).strict(),
16
+ createRequest: (input) => ({
17
+ method: 'GET',
18
+ path: `/conversations/${input.conversation_id}/followup-state`,
19
+ }),
20
+ enhanceResponse: (response) => withInstructions(response, [
21
+ 'Покажи persisted, effective на measuredAt, editVersion, allowedActions, consequences и blockers из ответа сервера. Не выводи состояние дожимов из botState или наличия цепочки.',
22
+ 'NONE — ось включена, FOREVER — выключена, TEMPORARY — пауза до expiresAt. Включение не воскрешает отменённый run и не возвращает одноразовые права.',
23
+ 'Состояние относится к паре contact × channel. Оно не меняет ответы агента, назначение оператора, бан или очередь рассылки; уже доставленное не отзывается.',
24
+ 'externalConstraints=NOT_CHECKED и processPause=UNAVAILABLE не обещают отправку или сохранение шага. Сохраняй тексты последствий сервера на его языке.',
25
+ '403 — нет права чтения, 404 — диалог недоступен, 503 — состояние неизвестно: не подменяй отказ состоянием NONE.',
26
+ 'Для записи используй besales_dialogue_followup_state_update с editVersion из этого чтения в expected_version. Сначала покажи человеку последствия и ограничения выбранного действия; выполняй только его явное решение.',
27
+ ]),
28
+ }),
29
+ defineTool({
30
+ name: 'besales_dialogue_followup_state_update',
31
+ sideEffect: 'write',
32
+ closedWorld: true,
33
+ verifyWithToolName: 'besales_dialogue_followup_state_get',
34
+ requiredFields: ['conversation_id', 'action', 'expected_version'],
35
+ resultPolicy,
36
+ schema: z
37
+ .object({
38
+ conversation_id: uuidSchema,
39
+ action: z.enum(['ENABLE', 'MUTE_FOREVER', 'MUTE_TEMPORARY']),
40
+ expected_version: z.string().min(1).max(1024),
41
+ mute_expires_at: z.iso.datetime({ offset: true }).max(64).optional(),
42
+ })
43
+ .strict()
44
+ .superRefine((input, context) => {
45
+ if ((input.action === 'MUTE_TEMPORARY') !== (input.mute_expires_at !== undefined)) {
46
+ context.addIssue({
47
+ code: 'custom',
48
+ path: ['mute_expires_at'],
49
+ message: 'MUTE_TEMPORARY requires mute_expires_at; other actions forbid it',
50
+ });
51
+ }
52
+ }),
53
+ createRequest: (input) => ({
54
+ method: 'PATCH',
55
+ path: `/conversations/${input.conversation_id}/followup-state/bridge`,
56
+ body: compactObject({
57
+ action: input.action,
58
+ expectedVersion: input.expected_version,
59
+ muteExpiresAt: input.mute_expires_at,
60
+ }),
61
+ }),
62
+ enhanceResponse: (response) => withInstructions(response, [
63
+ 'Покажи outcome и state целиком: состояние, новую editVersion, последствия и ограничения. Сохраняй тексты сервера на его языке.',
64
+ '409/428: сохрани намерение человека, перечитай besales_dialogue_followup_state_get, покажи изменившиеся последствия. Повторяй запись только после нового явного решения человека с прочитанной версией; автоматически не повторяй.',
65
+ 'При неизвестном исходе сначала прочитай состояние. Включение не воскрешает отменённые касания; уже доставленное не отзывается.',
66
+ ]),
67
+ }),
68
+ ];
69
+ //# sourceMappingURL=dialogue-followup-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogue-followup-state.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-followup-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,YAAY,GAAG;IACnB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,0EAA0E;CACjF,CAAC;AAEX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,UAAU,CAAC;QACT,IAAI,EAAE,qCAAqC;QAC3C,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,CAAC,iBAAiB,CAAC;QACnC,YAAY;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1D,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB,KAAK,CAAC,eAAe,iBAAiB;SAC/D,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,iLAAiL;YACjL,qJAAqJ;YACrJ,4JAA4J;YAC5J,uJAAuJ;YACvJ,iHAAiH;YACjH,yNAAyN;SAC1N,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,wCAAwC;QAC9C,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,qCAAqC;QACzD,cAAc,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC;QACjE,YAAY;QACZ,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,eAAe,EAAE,UAAU;YAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAC5D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7C,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;SACrE,CAAC;aACD,MAAM,EAAE;aACR,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,EAAE,CAAC;gBAClF,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;oBACzB,OAAO,EAAE,kEAAkE;iBAC5E,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QACJ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,kBAAkB,KAAK,CAAC,eAAe,wBAAwB;YACrE,IAAI,EAAE,aAAa,CAAC;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,eAAe,EAAE,KAAK,CAAC,gBAAgB;gBACvC,aAAa,EAAE,KAAK,CAAC,eAAe;aACrC,CAAC;SACH,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,gIAAgI;YAChI,oOAAoO;YACpO,gIAAgI;SACjI,CAAC;KACL,CAAC;CACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface Case {
2
+ readonly name: string;
3
+ readonly variant?: string;
4
+ readonly input: Record<string, unknown>;
5
+ readonly method: 'PATCH' | 'POST' | 'PUT' | 'DELETE';
6
+ readonly path: string;
7
+ readonly body?: Record<string, unknown>;
8
+ readonly version: string;
9
+ readonly required: readonly string[];
10
+ }
11
+ export declare const versionTransportCases: readonly Case[];
12
+ export declare function assertVersionTransport(row: Case): Promise<void>;
13
+ export {};
@@ -0,0 +1,292 @@
1
+ import assert from 'node:assert/strict';
2
+ import { platformSetupTools } from './platform-setup.js';
3
+ import { crmPlatformTools } from './crm-platform.js';
4
+ import { variableTools } from './variables.js';
5
+ import { executeToolRequests } from '../follow-up-request.js';
6
+ import { ApiClient, ApiClientError } from '../../http/api-client.js';
7
+ import registry from '../../schemas/mcp-tools.json' with { type: 'json' };
8
+ const registered = registry;
9
+ const channel = '00000000-0000-4000-8000-000000000002';
10
+ const resource = '00000000-0000-4000-8000-000000000003';
11
+ const settingsVersion = '00000000-0000-4000-8000-000000000004';
12
+ const routing = `rs1.c.workspace.${resource}.${channel}.${resource}.7.1`;
13
+ export const versionTransportCases = [
14
+ {
15
+ name: 'besales_followup_step_message_set',
16
+ input: {
17
+ platform_id: channel,
18
+ sequence_id: resource,
19
+ step_index: 0,
20
+ content: 'new',
21
+ expected_content: '',
22
+ },
23
+ method: 'PATCH',
24
+ path: `/channels/${channel}/followup-sequences/${resource}/steps/0/message`,
25
+ body: { content: 'new', expectedContent: '' },
26
+ version: '7',
27
+ required: ['platform_id', 'sequence_id', 'step_index', 'content', 'expected_content'],
28
+ },
29
+ {
30
+ name: 'besales_router_update',
31
+ input: {
32
+ platform_id: channel,
33
+ additional_prompt: null,
34
+ skip_llm_routing: false,
35
+ explicit_confirmation: true,
36
+ confirmation_reason: 'approved',
37
+ },
38
+ method: 'PATCH',
39
+ path: `/channels/${channel}/router`,
40
+ body: {
41
+ additionalPrompt: null,
42
+ skipLlmRouting: false,
43
+ explicitConfirmation: true,
44
+ confirmationReason: 'approved',
45
+ },
46
+ version: routing,
47
+ required: ['platform_id'],
48
+ },
49
+ ...[false, true].map((update) => ({
50
+ name: 'besales_routing_rule_upsert',
51
+ variant: update ? 'update' : 'create',
52
+ input: {
53
+ platform_id: channel,
54
+ ...(update ? { routing_rule_id: resource } : {}),
55
+ routing_strategy: 'LEAD_STATUS',
56
+ custom_router_prompt: '',
57
+ is_enabled: false,
58
+ direct_agent_id: null,
59
+ },
60
+ method: update ? 'PATCH' : 'POST',
61
+ path: `/channels/${channel}/router/routing-rules`,
62
+ body: {
63
+ ...(update ? { routingRuleId: resource } : {}),
64
+ routingStrategy: 'LEAD_STATUS',
65
+ customRouterPrompt: '',
66
+ isEnabled: false,
67
+ directAgentId: null,
68
+ },
69
+ version: routing,
70
+ required: ['platform_id', 'routing_strategy', 'custom_router_prompt'],
71
+ })),
72
+ {
73
+ name: 'besales_behavior_update',
74
+ input: { platform_id: channel },
75
+ method: 'PATCH',
76
+ path: `/channels/${channel}/behavior`,
77
+ body: {},
78
+ version: routing,
79
+ required: ['platform_id'],
80
+ },
81
+ {
82
+ name: 'besales_pipeline_settings_update',
83
+ input: { platform_id: channel },
84
+ method: 'PATCH',
85
+ path: `/channels/${channel}/pipeline-settings`,
86
+ body: {},
87
+ version: routing,
88
+ required: ['platform_id'],
89
+ },
90
+ {
91
+ name: 'besales_platform_settings_update',
92
+ input: { platform_id: channel, general_settings: { is_ai_enabled: false } },
93
+ method: 'PATCH',
94
+ path: `/channels/${channel}/settings`,
95
+ body: { generalSettings: { isAiEnabled: false } },
96
+ version: routing,
97
+ required: ['platform_id'],
98
+ },
99
+ {
100
+ name: 'besales_platform_pipeline_link',
101
+ input: { platform_id: channel, pipeline_id: 1, pipeline_crm_id: resource, sort: 0 },
102
+ method: 'POST',
103
+ path: `/channels/${channel}/active-pipelines`,
104
+ body: { pipelineId: 1, pipelineCrmId: resource, sort: 0 },
105
+ version: routing,
106
+ required: ['platform_id', 'pipeline_id', 'pipeline_crm_id'],
107
+ },
108
+ {
109
+ name: 'besales_platform_pipeline_unlink',
110
+ input: { platform_id: channel, platform_pipeline_id: resource, explicit_confirmation: true },
111
+ method: 'DELETE',
112
+ path: `/channels/${channel}/active-pipelines/${resource}`,
113
+ body: { explicitConfirmation: true },
114
+ version: routing,
115
+ required: ['platform_id', 'platform_pipeline_id', 'explicit_confirmation'],
116
+ },
117
+ ...['CHANNEL', 'WORKSPACE'].flatMap((scope) => [
118
+ {
119
+ name: 'besales_variable_update',
120
+ variant: scope,
121
+ input: {
122
+ variable_id: resource,
123
+ scope,
124
+ ...(scope === 'CHANNEL'
125
+ ? { platform_id: channel, constant_value: null, repeat_constant_value: null }
126
+ : { value: null }),
127
+ },
128
+ method: 'PATCH',
129
+ path: `/variables/${resource}`,
130
+ body: { defaultValue: null, ...(scope === 'CHANNEL' ? { repeatConstantValue: null } : {}) },
131
+ version: resource,
132
+ required: ['variable_id', 'scope'],
133
+ },
134
+ {
135
+ name: 'besales_variable_delete',
136
+ variant: scope,
137
+ input: {
138
+ variable_id: resource,
139
+ scope,
140
+ ...(scope === 'CHANNEL' ? { platform_id: channel } : {}),
141
+ explicit_confirmation: true,
142
+ },
143
+ method: 'DELETE',
144
+ path: `/variables/${resource}?confirm=true`,
145
+ version: resource,
146
+ required: ['variable_id', 'scope', 'explicit_confirmation'],
147
+ },
148
+ ]),
149
+ {
150
+ name: 'besales_agent_update',
151
+ input: {
152
+ platform_id: channel,
153
+ agent_id: resource,
154
+ description: null,
155
+ use_global_history: false,
156
+ agent_variable_overrides: [],
157
+ agent_workspace_variable_overrides: [],
158
+ },
159
+ method: 'PATCH',
160
+ path: `/channels/${channel}/agents/${resource}`,
161
+ body: {
162
+ description: null,
163
+ useGlobalHistory: false,
164
+ agentVariableOverrides: [],
165
+ agentWorkspaceVariableOverrides: [],
166
+ },
167
+ version: settingsVersion,
168
+ required: ['platform_id', 'agent_id'],
169
+ },
170
+ {
171
+ name: 'besales_agent_facts_set',
172
+ input: { agent_id: resource, factual_context: 'F1' },
173
+ method: 'PUT',
174
+ path: `/agents/${resource}/facts`,
175
+ body: { factualContext: 'F1' },
176
+ version: resource,
177
+ required: ['agent_id', 'factual_context'],
178
+ },
179
+ ];
180
+ const definitions = [
181
+ ...platformSetupTools,
182
+ ...crmPlatformTools,
183
+ ...variableTools,
184
+ ];
185
+ export async function assertVersionTransport(row) {
186
+ const tool = definitions.find((tool) => tool.name === row.name);
187
+ assert.ok(tool, row.name);
188
+ const contract = registered.tools.find((tool) => tool.name === row.name);
189
+ assert.ok(contract, row.name);
190
+ assert.deepEqual(tool.requiredFields, row.required, 'required arguments unchanged');
191
+ assert.deepEqual([...contract.inputSchema.required].sort(), [...row.required].sort());
192
+ const legacy = tool.schema.safeParse(row.input);
193
+ assert.equal(legacy.success, true, 'legacy control parses');
194
+ const expected = {
195
+ method: row.method,
196
+ path: row.path,
197
+ ...(row.body === undefined ? {} : { body: row.body }),
198
+ };
199
+ assert.deepEqual(tool.createRequest(legacy.data), expected, 'legacy body, confirmation, null and false unchanged');
200
+ const input = { ...row.input, expected_version: row.version };
201
+ const parsed = tool.schema.safeParse(input);
202
+ assert.equal(parsed.success, true, 'original expected_version accepted');
203
+ const request = tool.createRequest(parsed.data);
204
+ assert.deepEqual(request, row.method === 'DELETE'
205
+ ? { ...expected, ifMatch: row.version }
206
+ : { ...expected, body: { ...row.body, expectedVersion: row.version } }, 'original token reaches the request');
207
+ for (const value of [null, 7, ''])
208
+ assert.equal(tool.schema.safeParse({ ...input, expected_version: value }).success, false);
209
+ if (row.version.length === resource.length)
210
+ assert.equal(tool.schema.safeParse({ ...input, expected_version: 'not-a-uuid' }).success, false);
211
+ if ([
212
+ 'besales_followup_step_message_set',
213
+ 'besales_behavior_update',
214
+ 'besales_pipeline_settings_update',
215
+ 'besales_platform_settings_update',
216
+ 'besales_platform_pipeline_link',
217
+ 'besales_platform_pipeline_unlink',
218
+ 'besales_variable_update',
219
+ 'besales_variable_delete',
220
+ ].includes(row.name))
221
+ assert.equal(tool.schema.safeParse({ ...input, surprise: true }).success, false, 'closed schema stays closed');
222
+ assert.ok('expected_version' in contract.inputSchema.properties, 'registered schema exposes expected_version');
223
+ assert.equal(contract.inputSchema.properties.expected_version.type, 'string');
224
+ assert.ok(!contract.inputSchema.required.includes('expected_version'), 'version stays optional');
225
+ assert.ok(contract.description.includes('без автоматического повтора'), 'description forbids automatic retry');
226
+ const response = JSON.stringify(tool.enhanceResponse?.({}, parsed.data));
227
+ assert.ok(response?.includes('409'), 'response describes conflicts');
228
+ assert.ok(response?.includes('явного решения человека'), 'human decision after conflict');
229
+ assert.ok(!response?.includes('повтори с его текущим текстом'), 'no stale edit replay instruction');
230
+ if (row.name === 'besales_followup_step_message_set')
231
+ assert.equal(tool.schema.safeParse({ ...input, expected_content: undefined }).success, false, 'text oracle still required');
232
+ if (row.method === 'DELETE')
233
+ assert.equal(tool.schema.safeParse({ ...input, explicit_confirmation: undefined }).success, false, 'destructive confirmation still required');
234
+ if (row.name === 'besales_agent_update') {
235
+ const both = tool.schema.safeParse({ ...input, expected_routing_version: routing });
236
+ assert.equal(both.success, true, 'separate Routing version accepted');
237
+ assert.deepEqual(tool.createRequest(both.data).body, {
238
+ ...row.body,
239
+ expectedVersion: settingsVersion,
240
+ expectedRoutingVersion: routing,
241
+ });
242
+ assert.equal(contract.inputSchema.properties.expected_routing_version?.type, 'string');
243
+ assert.ok(!contract.inputSchema.required.includes('expected_routing_version'));
244
+ assert.equal(tool.schema.safeParse({ ...input, expected_version: routing }).success, false, 'Routing is not a settings token');
245
+ for (const value of [null, 7, '']) {
246
+ assert.equal(tool.schema.safeParse({ ...input, expected_routing_version: value }).success, false);
247
+ }
248
+ }
249
+ const sent = [];
250
+ const client = new ApiClient({
251
+ apiBaseUrl: 'https://example.test/api/v2',
252
+ locale: 'ru',
253
+ transport: {
254
+ async request(wire) {
255
+ sent.push(wire);
256
+ return { status: 200, data: {} };
257
+ },
258
+ },
259
+ });
260
+ await executeToolRequests(client, 'fixture-key', request, undefined);
261
+ assert.equal(sent.length, 1, 'one write, no server-read token substitution');
262
+ assert.equal(sent[0].method, row.method);
263
+ assert.equal(new URL(sent[0].url).pathname + new URL(sent[0].url).search, '/api/v2' + row.path);
264
+ assert.deepEqual(sent[0].data, request.body);
265
+ assert.equal(sent[0].headers['If-Match'], row.method === 'DELETE' ? `"${row.version}"` : undefined, 'strong original header reaches HTTP');
266
+ assert.equal(sent[0].headers.Authorization, 'Bearer fixture-key');
267
+ assert.equal(sent[0].headers['Accept-Language'], 'ru');
268
+ assert.ok(sent[0].headers['Cache-Control'].includes('no-store'));
269
+ if (row.method === 'DELETE') {
270
+ await executeToolRequests(client, 'fixture-key', { ...request, idempotencyKey: resource }, undefined);
271
+ assert.equal(sent[1].headers['If-Match'], `"${row.version}"`);
272
+ assert.equal(sent[1].headers['Idempotency-Key'], resource, 'independent intent headers coexist');
273
+ }
274
+ sent.length = 0;
275
+ await executeToolRequests(client, 'fixture-key', tool.createRequest(legacy.data), undefined);
276
+ assert.equal(sent.length, 1);
277
+ assert.equal(sent[0].headers['If-Match'], undefined, 'legacy request has no version header');
278
+ let calls = 0;
279
+ const conflict = new ApiClientError('conflict', 409);
280
+ await assert.rejects(executeToolRequests({
281
+ async request() {
282
+ calls++;
283
+ throw conflict;
284
+ },
285
+ async post() {
286
+ calls++;
287
+ throw conflict;
288
+ },
289
+ }, 'fixture-key', request, undefined), (error) => error === conflict);
290
+ assert.equal(calls, 1, '409 is never retried or refreshed');
291
+ }
292
+ //# sourceMappingURL=edit-version-transport.test-fixtures.js.map