@besales/mcp 0.48.0 → 1.0.0-beta.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 (604) hide show
  1. package/README.md +117 -163
  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 +54 -7
  23. package/dist/http/api-client.js +132 -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 +43 -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 +149 -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 -6
  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 +12389 -6657
  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 +81 -24
  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 -431
  147. package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
  148. package/dist/tools/definitions/broadcast-scheduler.d.ts +10 -13
  149. package/dist/tools/definitions/broadcast-scheduler.js +196 -154
  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 +29 -39
  158. package/dist/tools/definitions/crm-platform.js +249 -352
  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/dialogue-reprocess.d.ts +5 -0
  197. package/dist/tools/definitions/dialogue-reprocess.js +107 -0
  198. package/dist/tools/definitions/dialogue-reprocess.js.map +1 -0
  199. package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
  200. package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
  201. package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
  202. package/dist/tools/definitions/edit-version.d.ts +5 -0
  203. package/dist/tools/definitions/edit-version.js +20 -0
  204. package/dist/tools/definitions/edit-version.js.map +1 -0
  205. package/dist/tools/definitions/external-api-channels.js +17 -15
  206. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  207. package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
  208. package/dist/tools/definitions/feedback-document-access.js +63 -0
  209. package/dist/tools/definitions/feedback-document-access.js.map +1 -0
  210. package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
  211. package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
  212. package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
  213. package/dist/tools/definitions/follow-up-config.d.ts +79 -0
  214. package/dist/tools/definitions/follow-up-config.js +258 -0
  215. package/dist/tools/definitions/follow-up-config.js.map +1 -0
  216. package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
  217. package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
  218. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  219. package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
  220. package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
  221. package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
  222. package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
  223. package/dist/tools/definitions/follow-up-setup.js +20 -87
  224. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  225. package/dist/tools/definitions/follow-up.d.ts +20 -122
  226. package/dist/tools/definitions/follow-up.js +200 -357
  227. package/dist/tools/definitions/follow-up.js.map +1 -1
  228. package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
  229. package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
  230. package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
  231. package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
  232. package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
  233. package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
  234. package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
  235. package/dist/tools/definitions/funnel-analytics.js +150 -0
  236. package/dist/tools/definitions/funnel-analytics.js.map +1 -0
  237. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
  238. package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
  239. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  240. package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
  241. package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
  242. package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
  243. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +14 -29
  244. package/dist/tools/definitions/getcourse-cold-welcome.js +190 -253
  245. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  246. package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
  247. package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
  248. package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
  249. package/dist/tools/definitions/help.js.map +1 -1
  250. package/dist/tools/definitions/icp-import-source.d.ts +75 -0
  251. package/dist/tools/definitions/icp-import-source.js +88 -0
  252. package/dist/tools/definitions/icp-import-source.js.map +1 -0
  253. package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
  254. package/dist/tools/definitions/inbound-analytics.js +55 -0
  255. package/dist/tools/definitions/inbound-analytics.js.map +1 -0
  256. package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
  257. package/dist/tools/definitions/instagram-comment.templates.js +34 -0
  258. package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
  259. package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
  260. package/dist/tools/definitions/instagram-settings-compat.js +7 -0
  261. package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
  262. package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
  263. package/dist/tools/definitions/knowledge-chunking.js +83 -0
  264. package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
  265. package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
  266. package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
  267. package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
  268. package/dist/tools/definitions/knowledge.d.ts +24 -14
  269. package/dist/tools/definitions/knowledge.js +342 -233
  270. package/dist/tools/definitions/knowledge.js.map +1 -1
  271. package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
  272. package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
  273. package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
  274. package/dist/tools/definitions/link-tracking.d.ts +8 -0
  275. package/dist/tools/definitions/link-tracking.js +141 -38
  276. package/dist/tools/definitions/link-tracking.js.map +1 -1
  277. package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
  278. package/dist/tools/definitions/mailing-variant-content.js +73 -0
  279. package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
  280. package/dist/tools/definitions/model-comparison.d.ts +2 -1
  281. package/dist/tools/definitions/model-comparison.js +4 -5
  282. package/dist/tools/definitions/model-comparison.js.map +1 -1
  283. package/dist/tools/definitions/money-currency.d.ts +5 -0
  284. package/dist/tools/definitions/money-currency.js +10 -0
  285. package/dist/tools/definitions/money-currency.js.map +1 -0
  286. package/dist/tools/definitions/operator-workflow.d.ts +5 -5
  287. package/dist/tools/definitions/operator-workflow.js +80 -27
  288. package/dist/tools/definitions/operator-workflow.js.map +1 -1
  289. package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
  290. package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
  291. package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
  292. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
  293. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
  294. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
  295. package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
  296. package/dist/tools/definitions/platform-settings-limits.js +6 -0
  297. package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
  298. package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
  299. package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
  300. package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
  301. package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
  302. package/dist/tools/definitions/platform-settings-update.js +134 -0
  303. package/dist/tools/definitions/platform-settings-update.js.map +1 -0
  304. package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
  305. package/dist/tools/definitions/platform-setup-wave.js +1079 -0
  306. package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
  307. package/dist/tools/definitions/platform-setup.d.ts +697 -224
  308. package/dist/tools/definitions/platform-setup.js +313 -752
  309. package/dist/tools/definitions/platform-setup.js.map +1 -1
  310. package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
  311. package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
  312. package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
  313. package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
  314. package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
  315. package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
  316. package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
  317. package/dist/tools/definitions/prompt-batch-controls.js +40 -0
  318. package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
  319. package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
  320. package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
  321. package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
  322. package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
  323. package/dist/tools/definitions/prompt-text-projection.js +62 -0
  324. package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
  325. package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
  326. package/dist/tools/definitions/reviewer-paid.js +115 -0
  327. package/dist/tools/definitions/reviewer-paid.js.map +1 -0
  328. package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
  329. package/dist/tools/definitions/routing-condition-projection.js +97 -0
  330. package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
  331. package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
  332. package/dist/tools/definitions/schedule-selection-hints.js +42 -0
  333. package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
  334. package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
  335. package/dist/tools/definitions/scheduled-task-alias.js +207 -0
  336. package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
  337. package/dist/tools/definitions/session.js +3 -3
  338. package/dist/tools/definitions/session.js.map +1 -1
  339. package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
  340. package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
  341. package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
  342. package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
  343. package/dist/tools/definitions/shared-input.helpers.js +323 -0
  344. package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
  345. package/dist/tools/definitions/shared.d.ts +401 -307
  346. package/dist/tools/definitions/shared.js +430 -652
  347. package/dist/tools/definitions/shared.js.map +1 -1
  348. package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
  349. package/dist/tools/definitions/shipped-output-names.js +123 -0
  350. package/dist/tools/definitions/shipped-output-names.js.map +1 -0
  351. package/dist/tools/definitions/task-state.d.ts +4 -4
  352. package/dist/tools/definitions/task-state.js +2 -1
  353. package/dist/tools/definitions/task-state.js.map +1 -1
  354. package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
  355. package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
  356. package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
  357. package/dist/tools/definitions/telegram-personal-management.d.ts +34 -0
  358. package/dist/tools/definitions/telegram-personal-management.js +139 -0
  359. package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
  360. package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
  361. package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
  362. package/dist/tools/definitions/telegram-personal-restrictions.js.map +1 -0
  363. package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
  364. package/dist/tools/definitions/telegram-pool-policy.js +56 -0
  365. package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
  366. package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
  367. package/dist/tools/definitions/touch-history-alias.js +99 -0
  368. package/dist/tools/definitions/touch-history-alias.js.map +1 -0
  369. package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
  370. package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
  371. package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
  372. package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
  373. package/dist/tools/definitions/trigger-argument.schema.js +23 -0
  374. package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
  375. package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
  376. package/dist/tools/definitions/trigger-claim-alias.js +90 -0
  377. package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
  378. package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
  379. package/dist/tools/definitions/trigger-echo-projection.js +41 -0
  380. package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
  381. package/dist/tools/definitions/trigger-upsert.tool.d.ts +41 -0
  382. package/dist/tools/definitions/trigger-upsert.tool.js +159 -0
  383. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
  384. package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
  385. package/dist/tools/definitions/v15-port-descriptions.js +30 -0
  386. package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
  387. package/dist/tools/definitions/variables.d.ts +44 -0
  388. package/dist/tools/definitions/variables.js +310 -0
  389. package/dist/tools/definitions/variables.js.map +1 -0
  390. package/dist/tools/definitions/voice-action-input.d.ts +9 -0
  391. package/dist/tools/definitions/voice-action-input.js +141 -0
  392. package/dist/tools/definitions/voice-action-input.js.map +1 -0
  393. package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
  394. package/dist/tools/definitions/widget-customization-compat.js +23 -0
  395. package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
  396. package/dist/tools/definitions.d.ts +1134 -617
  397. package/dist/tools/definitions.js +63 -27
  398. package/dist/tools/definitions.js.map +1 -1
  399. package/dist/tools/description-localization.js +3 -2
  400. package/dist/tools/description-localization.js.map +1 -1
  401. package/dist/tools/follow-up-request.d.ts +19 -0
  402. package/dist/tools/follow-up-request.js +81 -0
  403. package/dist/tools/follow-up-request.js.map +1 -0
  404. package/dist/tools/followup-revision.d.ts +4 -0
  405. package/dist/tools/followup-revision.js +29 -0
  406. package/dist/tools/followup-revision.js.map +1 -0
  407. package/dist/tools/incomplete-list.js +4 -0
  408. package/dist/tools/incomplete-list.js.map +1 -1
  409. package/dist/tools/inventory.js +47 -11
  410. package/dist/tools/inventory.js.map +1 -1
  411. package/dist/tools/operation-recovery.d.ts +4 -0
  412. package/dist/tools/operation-recovery.js +33 -0
  413. package/dist/tools/operation-recovery.js.map +1 -0
  414. package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
  415. package/dist/tools/registry-mapping-primary.cases.js +765 -0
  416. package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
  417. package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
  418. package/dist/tools/registry-mapping-secondary.cases.js +626 -0
  419. package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
  420. package/dist/tools/registry-mapping.cases.d.ts +8 -0
  421. package/dist/tools/registry-mapping.cases.js +170 -0
  422. package/dist/tools/registry-mapping.cases.js.map +1 -0
  423. package/dist/tools/registry-test-fixtures.d.ts +50 -0
  424. package/dist/tools/registry-test-fixtures.js +120 -0
  425. package/dist/tools/registry-test-fixtures.js.map +1 -0
  426. package/dist/tools/registry.d.ts +2 -0
  427. package/dist/tools/registry.js +84 -52
  428. package/dist/tools/registry.js.map +1 -1
  429. package/dist/tools/result.d.ts +1 -0
  430. package/dist/tools/result.js +90 -22
  431. package/dist/tools/result.js.map +1 -1
  432. package/dist/tools/toolsets.d.ts +16 -0
  433. package/dist/tools/toolsets.js +25 -1
  434. package/dist/tools/toolsets.js.map +1 -1
  435. package/dist/types/api-contract.gen.d.ts +131892 -22453
  436. package/dist/utils/credential-signatures.d.ts +3 -0
  437. package/dist/utils/credential-signatures.js +10 -0
  438. package/dist/utils/credential-signatures.js.map +1 -0
  439. package/dist/utils/data-source-column-name.d.ts +10 -0
  440. package/dist/utils/data-source-column-name.js +36 -0
  441. package/dist/utils/data-source-column-name.js.map +1 -0
  442. package/dist/utils/logger.d.ts +1 -0
  443. package/dist/utils/logger.js +32 -8
  444. package/dist/utils/logger.js.map +1 -1
  445. package/dist/utils/secret-read-boundary.d.ts +2 -0
  446. package/dist/utils/secret-read-boundary.js +88 -0
  447. package/dist/utils/secret-read-boundary.js.map +1 -0
  448. package/dist/utils/setup-secrets.d.ts +4 -0
  449. package/dist/utils/setup-secrets.js +40 -0
  450. package/dist/utils/setup-secrets.js.map +1 -0
  451. package/docs/agent-models.md +9 -0
  452. package/docs/agent-usage-guide.full.ru.md +1 -4
  453. package/docs/analytics-contract.md +67 -0
  454. package/docs/async-operation-lifecycle.md +10 -3
  455. package/docs/connect.ru.md +144 -4
  456. package/docs/contact-company-profile.md +17 -0
  457. package/docs/contact-recommendations.md +7 -0
  458. package/docs/crm-stage-pool.md +73 -0
  459. package/docs/customer-data.md +61 -0
  460. package/docs/dialogue-reprocess.md +37 -0
  461. package/docs/edit-versions.md +36 -0
  462. package/docs/failure-semantics.md +17 -9
  463. package/docs/help-navigation.md +15 -42
  464. package/docs/host-compatibility-matrix.md +72 -93
  465. package/docs/host-setup.md +33 -35
  466. package/docs/invariants/public-api-and-contracts.md +16 -0
  467. package/docs/legacy-action-settings.md +21 -0
  468. package/docs/main-transfer-dependencies.md +38 -0
  469. package/docs/mcp2-parity.md +50 -0
  470. package/docs/modules/analytics.md +79 -0
  471. package/docs/modules/besales-mcp.md +144 -0
  472. package/docs/modules/dialog-review-report.md +38 -0
  473. package/docs/modules/dialogue-followup-adapters.md +39 -0
  474. package/docs/modules/message-reactions.md +17 -0
  475. package/docs/modules/network-mode.md +284 -0
  476. package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
  477. package/docs/pii-policy.md +21 -16
  478. package/docs/response-size-budget.md +197 -7
  479. package/docs/secret-read-boundary.md +102 -0
  480. package/docs/task-state.md +7 -2
  481. package/docs/telegram-personal-management.md +50 -0
  482. package/docs/telegram-personal-restrictions.md +87 -0
  483. package/docs/telegram-pool-policy.md +19 -0
  484. package/docs/tool-effects.md +15 -9
  485. package/docs/tool-surface.md +205 -4
  486. package/docs/voice-actions-and-inbox.md +95 -0
  487. package/docs/wazzup-instagram-comments.md +26 -0
  488. package/package.json +17 -10
  489. package/scripts/api-source-loader.spec.mjs +40 -0
  490. package/scripts/audit-bridge-controls.mjs +129 -0
  491. package/scripts/audit-revert-mutants.mjs +107 -0
  492. package/scripts/bridge-api-input.spec.mjs +98 -0
  493. package/scripts/bridge-controls-mutants.mjs +130 -0
  494. package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
  495. package/scripts/brx4-ledger-payload.spec.mjs +127 -0
  496. package/scripts/build-onprem.mjs +108 -0
  497. package/scripts/connect-clients.sh +141 -0
  498. package/scripts/connect-scopes.mjs +166 -0
  499. package/scripts/connect-scopes.spec.mjs +83 -0
  500. package/scripts/emit-personal-link-carrier.mjs +31 -0
  501. package/scripts/emit-setup-init-schemas.mjs +24 -0
  502. package/scripts/emit-tool-routes.mjs +878 -0
  503. package/scripts/emit-tool-routes.spec.mjs +300 -0
  504. package/scripts/followup-registry.spec.mjs +107 -0
  505. package/scripts/generate-crm-rotation-contract.mjs +98 -0
  506. package/scripts/generate-followup-session-contract.mjs +16 -0
  507. package/scripts/getcourse-text-source.spec.mjs +110 -0
  508. package/scripts/icp-import-verification/mutate.cjs +70 -0
  509. package/scripts/import-secret-read-contract.mjs +53 -0
  510. package/scripts/install-claude-desktop.js +1 -1
  511. package/scripts/lag-decisions.mjs +37 -0
  512. package/scripts/lag-decisions.spec.mjs +87 -0
  513. package/scripts/lag-open-task-owners.mjs +46 -0
  514. package/scripts/lag-open-task-owners.spec.mjs +78 -0
  515. package/scripts/lag-payload.mjs +10 -0
  516. package/scripts/legacy-action-lag.spec.mjs +22 -0
  517. package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
  518. package/scripts/mcpcompat-handler.mjs +34 -0
  519. package/scripts/mcpcompat-loader.mjs +36 -0
  520. package/scripts/mcpcompat-typescript.mjs +3 -0
  521. package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
  522. package/scripts/prbr-round1-recheck.spec.mjs +605 -0
  523. package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
  524. package/scripts/publish-mcp-registry.mjs +98 -0
  525. package/scripts/publish-mcp-registry.spec.mjs +68 -0
  526. package/scripts/record-scheduled-task-call.mjs +26 -0
  527. package/scripts/refusal-probe.mjs +17 -0
  528. package/scripts/refusal-probe.spec.mjs +29 -0
  529. package/scripts/registry-diff.mjs +502 -0
  530. package/scripts/registry-diff.spec.mjs +787 -0
  531. package/scripts/request-query.mjs +43 -0
  532. package/scripts/request-query.spec.mjs +82 -0
  533. package/scripts/route-lag.mjs +23 -0
  534. package/scripts/route-lag.spec.mjs +30 -0
  535. package/scripts/sample-args.mjs +174 -0
  536. package/scripts/sample-args.spec.mjs +160 -0
  537. package/scripts/shipped-definitions.mjs +197 -0
  538. package/scripts/shipped-definitions.spec.mjs +57 -0
  539. package/scripts/shipped-inputs.spec.mjs +136 -0
  540. package/scripts/shipped-recordings.spec.mjs +19 -0
  541. package/scripts/shipped-ref.d.mts +5 -0
  542. package/scripts/shipped-ref.mjs +20 -0
  543. package/scripts/shipped-ref.spec.mjs +59 -0
  544. package/scripts/shipped-registry.mjs +107 -0
  545. package/scripts/shipped-sample-candidates.mjs +69 -0
  546. package/scripts/shipped-sample-candidates.spec.mjs +117 -0
  547. package/scripts/shipped-sample.mjs +871 -0
  548. package/scripts/shipped-sample.spec.mjs +451 -0
  549. package/scripts/sync-agent-model-schemas.mjs +72 -0
  550. package/scripts/sync-api-contracts.mjs +85 -0
  551. package/scripts/sync-api-contracts.spec.mjs +144 -0
  552. package/scripts/sync-contract-ledger-schemas.mjs +161 -0
  553. package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
  554. package/scripts/sync-prompt-draft-schema.mjs +92 -0
  555. package/scripts/sync-route-map.mjs +94 -0
  556. package/scripts/sync-schema-descriptions.mjs +25 -0
  557. package/scripts/sync-tool-inventory.mjs +27 -0
  558. package/scripts/sync-trigger-argument-schema.mjs +97 -0
  559. package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
  560. package/scripts/sync-trigger-event-schema.mjs +20 -0
  561. package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
  562. package/scripts/sync-trigger-task-schema.mjs +45 -0
  563. package/scripts/sync-voice-actions-contract.mjs +67 -0
  564. package/scripts/sync-voice-actions-tools.mjs +97 -0
  565. package/scripts/sync-wave-id-schemas.mjs +55 -0
  566. package/scripts/telegram-personal-confirmation-mutants.mjs +74 -0
  567. package/scripts/tool-input-schemas.mjs +46 -0
  568. package/scripts/tool-input-schemas.spec.mjs +50 -0
  569. package/scripts/verify-followup-adapters.mjs +235 -0
  570. package/scripts/verify-secret-read-import.mjs +84 -0
  571. package/scripts/verify-secret-read-mutants.mjs +143 -0
  572. package/dist/tools/definitions/analytics.d.ts +0 -40
  573. package/dist/tools/definitions/analytics.js +0 -233
  574. package/dist/tools/definitions/analytics.js.map +0 -1
  575. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
  576. package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
  577. package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
  578. package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
  579. package/dist/tools/definitions/dialogue-audit.js +0 -292
  580. package/dist/tools/definitions/dialogue-audit.js.map +0 -1
  581. package/dist/tools/definitions/getcourse-wave.js +0 -519
  582. package/dist/tools/definitions/getcourse-wave.js.map +0 -1
  583. package/dist/tools/definitions/operational-overview.d.ts +0 -3
  584. package/dist/tools/definitions/operational-overview.js +0 -23
  585. package/dist/tools/definitions/operational-overview.js.map +0 -1
  586. package/dist/tools/definitions/scheduled-tasks.js +0 -173
  587. package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
  588. package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
  589. package/dist/tools/definitions/trigger-contact-claims.js +0 -60
  590. package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
  591. package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
  592. package/dist/tools/registry-mapping-cases-core.js +0 -963
  593. package/dist/tools/registry-mapping-cases-core.js.map +0 -1
  594. package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
  595. package/dist/tools/registry-mapping-cases-platform.js +0 -1052
  596. package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
  597. package/dist/tools/trigger-action-config.d.ts +0 -49
  598. package/dist/tools/trigger-action-config.js +0 -171
  599. package/dist/tools/trigger-action-config.js.map +0 -1
  600. package/docs/evals/model-behavior-scorecard.md +0 -80
  601. package/docs/operation-coverage.md +0 -114
  602. package/scripts/mock-credentials.js +0 -77
  603. package/scripts/model-eval-server.js +0 -213
  604. package/scripts/run-model-eval.js +0 -447
@@ -0,0 +1,79 @@
1
+ import { z } from "zod";
2
+ export declare const reactivationConfigSchema: z.ZodObject<{
3
+ enabled: z.ZodOptional<z.ZodBoolean>;
4
+ filterMode: z.ZodOptional<z.ZodEnum<{
5
+ status: "status";
6
+ variable: "variable";
7
+ eventType: "eventType";
8
+ }>>;
9
+ sequenceConditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
10
+ variable: z.ZodString;
11
+ op: z.ZodEnum<{
12
+ in: "in";
13
+ eq: "eq";
14
+ neq: "neq";
15
+ }>;
16
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
17
+ }, z.core.$loose>>>;
18
+ steps: z.ZodArray<z.ZodObject<{
19
+ stepType: z.ZodOptional<z.ZodEnum<{
20
+ message: "message";
21
+ webhook: "webhook";
22
+ }>>;
23
+ scheduleMode: z.ZodOptional<z.ZodEnum<{
24
+ offset: "offset";
25
+ clock: "clock";
26
+ }>>;
27
+ anchorMode: z.ZodOptional<z.ZodEnum<{
28
+ variable: "variable";
29
+ last_inbound: "last_inbound";
30
+ }>>;
31
+ anchorVariable: z.ZodOptional<z.ZodString>;
32
+ atTime: z.ZodOptional<z.ZodString>;
33
+ dayOffset: z.ZodOptional<z.ZodNumber>;
34
+ validityMinutes: z.ZodOptional<z.ZodNumber>;
35
+ slotGroup: z.ZodOptional<z.ZodString>;
36
+ conditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
37
+ variable: z.ZodString;
38
+ op: z.ZodEnum<{
39
+ in: "in";
40
+ eq: "eq";
41
+ neq: "neq";
42
+ }>;
43
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
44
+ }, z.core.$loose>>>;
45
+ skipIfContactRepliedSincePreviousSlot: z.ZodOptional<z.ZodBoolean>;
46
+ delayHours: z.ZodOptional<z.ZodNumber>;
47
+ delayMinutes: z.ZodOptional<z.ZodNumber>;
48
+ messageConfig: z.ZodOptional<z.ZodObject<{
49
+ type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
50
+ content: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ templateId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
52
+ templateValues: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
53
+ contentMode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
54
+ generationContext: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ fallbackContent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ attachments: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
57
+ buttons: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
58
+ crmNote: z.ZodOptional<z.ZodNullable<z.ZodString>>;
59
+ }, z.core.$loose>>;
60
+ }, z.core.$loose>>;
61
+ sessionTimeVariable: z.ZodOptional<z.ZodString>;
62
+ sessionDayOffsets: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
63
+ sessionDurationMinutes: z.ZodOptional<z.ZodNumber>;
64
+ contactVariablesOnSend: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
65
+ }, z.core.$loose>;
66
+ /**
67
+ * Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
68
+ *
69
+ * Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
70
+ * принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
71
+ * `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
72
+ *
73
+ * @param input - Разобранный ввод тула
74
+ * @param ctx - Контекст zod для добавления ошибок
75
+ */
76
+ export declare const refineFollowUpConfig: (input: {
77
+ type?: unknown;
78
+ config?: unknown;
79
+ }, ctx: z.RefinementCtx) => void;
@@ -0,0 +1,258 @@
1
+ import { z } from "zod";
2
+ import { MAX_CLOCK_DAY_OFFSET, MAX_SESSION_DURATION_MINUTES, } from "../../shared/constants/followup-session.constants.js";
3
+ import { FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS, FOLLOWUP_NOTE_MAX_VARIABLES, } from "../../shared/constants/followup-note.constants.js";
4
+ /**
5
+ * Схема конфига реактивационной цепочки.
6
+ *
7
+ * ⚠️ Ключи ВНУТРИ `config` — camelCase, в отличие от snake_case параметров тулов: `config`
8
+ * уходит в тело запроса БЕЗ преобразования, а рантайм читает `anchorMode`/`anchorVariable`/
9
+ * `slotGroup`. Назвать их в snake_case значило бы сохранить конфиг, который рантайм не
10
+ * прочитает: календарный шаг молча стал бы обычным offset-шагом.
11
+ *
12
+ * ⚠️ `.passthrough()` на каждом уровне обязателен по двум причинам: legacy-конфиги несут поля
13
+ * вне этой схемы (`finalAction`, `maxCycleCount`, `webhookConfig`, …), и сама схема исполняется
14
+ * на машине оператора — она обновляется независимо от бэкенда и не должна отвергать конфиг,
15
+ * который бэкенд принял бы.
16
+ */
17
+ const variableConditionSchema = z
18
+ .object({
19
+ variable: z.string().describe("Имя per-contact переменной"),
20
+ op: z.enum(["eq", "neq", "in"]),
21
+ value: z
22
+ .union([z.string(), z.array(z.string())])
23
+ .describe("Строка для eq/neq, непустой массив непустых строк для 'in'"),
24
+ })
25
+ .passthrough();
26
+ /**
27
+ * Сообщение шага. Поля перечислены поимённо не ради валидации, а ради ОБНАРУЖИМОСТИ: раньше
28
+ * здесь стоял безымянный объект, и «как задать в шаге WABA-шаблон вместо текста» неоткуда было
29
+ * узнать — форма не описана ни в схеме тула, ни в OpenAPI.
30
+ *
31
+ * `.passthrough()` обязателен: конфиги несут поля вне этого списка (wabaVariableMapping и др.),
32
+ * а схема живёт на машине оператора и обновляется независимо от бэкенда.
33
+ */
34
+ const followUpMessageConfigSchema = z
35
+ .object({
36
+ type: z
37
+ .string()
38
+ .nullish()
39
+ .describe("'text' — обычный текст в content; 'template' — ШАБЛОН WABA (Wazzup), тогда обязателен " +
40
+ "templateId; 'media' — вложения. Шаблон уходит и при ЗАКРЫТОМ 24-часовом окне " +
41
+ "переписки, обычный текст — нет (шаг молча ждёт реплики клиента)"),
42
+ content: z.string().nullish().describe("Текст для type=text"),
43
+ templateId: z
44
+ .string()
45
+ .nullish()
46
+ .describe("ID шаблона WABA. Берётся из besales_wazzup_templates_list — это id шаблона канала, " +
47
+ "а не его имя"),
48
+ templateValues: z
49
+ .array(z.unknown())
50
+ .nullish()
51
+ .describe("Значения подстановок шаблона по порядку ({{1}}, {{2}}, …). Поддерживают переменные " +
52
+ "контакта — они резолвятся перед отправкой"),
53
+ contentMode: z
54
+ .string()
55
+ .nullish()
56
+ .describe("'static' (по умолчанию) либо 'dynamic' — текст генерирует LLM"),
57
+ generationContext: z.string().nullish().describe('Инструкция LLM при contentMode=dynamic'),
58
+ fallbackContent: z.string().nullish().describe('Запасной текст, если генерация не удалась'),
59
+ attachments: z.array(z.unknown()).nullish().describe('Вложения: [{ storedFileId, caption? }]'),
60
+ buttons: z.array(z.unknown()).nullish(),
61
+ crmNote: z.string().nullish(),
62
+ })
63
+ .passthrough();
64
+ const reactivationStepSchema = z
65
+ .object({
66
+ stepType: z.enum(["message", "webhook"]).optional(),
67
+ scheduleMode: z
68
+ .enum(["offset", "clock"])
69
+ .optional()
70
+ .describe("'clock' — время суток + сдвиг дней вместо задержки от последней активности"),
71
+ anchorMode: z
72
+ .enum(["last_inbound", "variable"])
73
+ .optional()
74
+ .describe("'variable' — расписание считается от даты из переменной контакта (календарная цепочка)"),
75
+ anchorVariable: z
76
+ .string()
77
+ .optional()
78
+ .describe("Имя переменной с якорной датой. Обязательно при anchorMode=variable; переменная должна " +
79
+ "существовать у платформы и НЕ быть константой"),
80
+ atTime: z
81
+ .string()
82
+ .optional()
83
+ .describe('Время суток "HH:MM" для scheduleMode=clock'),
84
+ // ⚠️ Нижняя граница — зеркало бэкенда (`MIN_CLOCK_DAY_OFFSET = -7`): отрицательный сдвиг —
85
+ // касание ДО якоря («накануне эфира»). С `min(0)` MCP не мог пересохранить ни одну цепочку с
86
+ // такими шагами (21.09.2026: «Светлана» с шагами dayOffset -1 отвергалась целиком).
87
+ dayOffset: z
88
+ .number()
89
+ .int()
90
+ .min(-7)
91
+ .max(30)
92
+ .optional()
93
+ .describe("Сдвиг в днях от якоря для scheduleMode=clock; отрицательный — до якоря"),
94
+ validityMinutes: z
95
+ .number()
96
+ .int()
97
+ .min(1)
98
+ .optional()
99
+ .describe("Касание, опоздавшее дольше окна, пропускается; по умолчанию 45 минут"),
100
+ slotGroup: z
101
+ .string()
102
+ .optional()
103
+ .describe("Метка взаимоисключающих вариантов одного момента (first-match-wins). Варианты ОБЯЗАНЫ " +
104
+ "идти в steps подряд: разнесённые по цепочке перестают быть взаимоисключающими"),
105
+ conditions: z
106
+ .array(variableConditionSchema)
107
+ .max(3)
108
+ .optional()
109
+ .describe('Условия на переменные контакта; не прошли — шаг пропускается'),
110
+ skipIfContactRepliedSincePreviousSlot: z
111
+ .boolean()
112
+ .optional()
113
+ .describe('Не отправлять шаг, если клиент писал ПОСЛЕ предыдущего слота цепочки. Даёт правило «ответил — ближайшее касание пропускаем, через одно продолжаем»: ответ в 13:05 гасит касание в 16:00, а к 17:00 предыдущим слотом становится 16:00, ответ старше него — и цепочка идёт дальше. Прогресс при пропуске двигается, контакт не зависает. Только для календарного шага (scheduleMode=clock + anchorMode=variable): на остальных рантайм и так проверяет свежесть входящего, и флаг там отвергается.'),
114
+ delayHours: z.number().optional(),
115
+ delayMinutes: z.number().optional(),
116
+ messageConfig: followUpMessageConfigSchema.optional(),
117
+ })
118
+ .passthrough()
119
+ // ⚠️ Зеркалит правила бэкенда, чтобы промах ловился ЛОКАЛЬНО. Иначе вызов проходит нашу
120
+ // проверку, пользователь подтверждает запись, и только сервер отвечает 400 — самый дорогой
121
+ // момент, чтобы узнать про опечатку.
122
+ .superRefine((step, ctx) => {
123
+ const message = step.messageConfig;
124
+ const isDynamic = message?.contentMode === "dynamic";
125
+ const hasAttachments = !!message?.attachments?.length;
126
+ if (message?.type === "template" && !message.templateId) {
127
+ ctx.addIssue({
128
+ code: z.ZodIssueCode.custom,
129
+ path: ["messageConfig", "templateId"],
130
+ message: "Для type=template обязателен templateId (id шаблона из besales_wazzup_templates_list)",
131
+ });
132
+ }
133
+ if (message?.type === "text" &&
134
+ !message.content &&
135
+ !isDynamic &&
136
+ !hasAttachments) {
137
+ ctx.addIssue({
138
+ code: z.ZodIssueCode.custom,
139
+ path: ["messageConfig", "content"],
140
+ message: "Для type=text обязателен content — кроме шага из одних вложений и contentMode=dynamic",
141
+ });
142
+ }
143
+ });
144
+ export const reactivationConfigSchema = z
145
+ .object({
146
+ enabled: z.boolean().optional(),
147
+ filterMode: z
148
+ .enum(["status", "eventType", "variable"])
149
+ .optional()
150
+ .describe("БАЗОВЫЙ отбор контактов: по статусу CRM, по типу события платформы либо " +
151
+ "'variable' = базового фильтра нет (отбор только по sequenceConditions). Условия по " +
152
+ "переменным ОРТОГОНАЛЬНЫ этому выбору и добавляются к нему через И — чтобы ветвить " +
153
+ "цепочки по варианту рассылки, сохранив отбор по событию, бери 'eventType' и задай " +
154
+ "sequenceConditions, а НЕ 'variable'. Неизвестное значение НЕ включает ни один фильтр — " +
155
+ "цепочка уйдёт всем контактам канала, поэтому бэкенд отвергает такой конфиг"),
156
+ sequenceConditions: z
157
+ .array(variableConditionSchema)
158
+ .optional()
159
+ .describe("Условия принадлежности контакта цепочке, соединяются через И. Применяются при ЛЮБОМ " +
160
+ "filterMode (при 'variable' обязателен и непуст, иначе цепочка не выберет никого). " +
161
+ "Ветвление по измерениям рассылки GetCourse: WAVE_MAILING_VARIANT — UUID варианта из " +
162
+ "каталога воркспейса, а НЕ его имя («first-ver» будет отвергнут); WAVE_PRODUCT — код " +
163
+ "продукта строчными без пробелов («dbo»); WAVE_FUNNEL — КЛЮЧ воронки (f-код «f11», " +
164
+ "иначе вся строка строчными), а НЕ метка запуска («f11 — ВК NR ДБО» будет отвергнут); " +
165
+ "WAVE_SEGMENT — имя сегмента. Значения проставляет запуск рассылки, у контакта без " +
166
+ "рассылки их нет. " +
167
+ "ВАЖНО: отдельные цепочки НЕ взаимоисключающи — прогресс изолирован по sequenceId, " +
168
+ "поэтому безусловная «ловящая» цепочка рядом с eq A и eq B не подстрахует, а УДВОИТ " +
169
+ "отправку. Набор цепочек обязан быть строгим разбиением: eq A, eq B и fallback " +
170
+ "neq A AND neq B (у контакта без переменной eq/in → false, neq → true)"),
171
+ steps: z.array(reactivationStepSchema).min(1),
172
+ sessionTimeVariable: z
173
+ .string()
174
+ .min(1)
175
+ .optional()
176
+ .describe("Имя переменной контакта с часом эфира; константы и секреты сервер отвергает"),
177
+ sessionDayOffsets: z
178
+ .array(z.number().int().min(0).max(MAX_CLOCK_DAY_OFFSET))
179
+ .min(1)
180
+ .optional()
181
+ .describe("Дни серии от даты первого эфира; повтор дня отвергает сервер с адресом поля"),
182
+ sessionDurationMinutes: z
183
+ .number()
184
+ .int()
185
+ .positive()
186
+ .max(MAX_SESSION_DURATION_MINUTES)
187
+ .optional()
188
+ .describe("Длительность эфира в минутах, не больше суток; требует дни серии и переменную часа"),
189
+ contactVariablesOnSend: z
190
+ .record(z.string().min(1), z.string().min(1).max(500))
191
+ .refine((value) => Object.keys(value).length > 0 && Object.keys(value).length <= 10, {
192
+ message: "от 1 до 10 переменных",
193
+ })
194
+ .nullable()
195
+ .optional()
196
+ .describe('Переменные, которые цепочка ЗАПИСЫВАЕТ контакту, как только РЕАЛЬНО отправила ему шаг-сообщение: { intro: "это снова Светлана." }. Это «записка» для тех, кто будет писать человеку после цепочки. Рабочий пример — фраза знакомства: текст рассылки начинается с {intro}, у площадки рассылки объявлена КОНСТАНТА intro с обычной фразой («здравствуйте! Это Светлана, помощница…»), а цепочка персональной воронки пишет своим людям intro = «это снова Светлана…» — значение контакта в тексте рассылки побеждает умолчание, и человек после недели в воронке не получает знакомство заново. Настраивается НА ЦЕПОЧКУ, а не на шаг: шага, который доходит до всех, нет (лучший — 87 % людей), а запись на любом отправленном шаге покрывает 99 %. Пишется только после ПОДТВЕРЖДЁННОЙ отправки шага-сообщения (вебхук и неудавшаяся отправка не считаются); совпадающее значение повторно не пишется. Каждое имя обязано быть объявлено на площадке цепочки переменной КОНТАКТА (не константой) — иначе сохранение вернёт 400: при отправке опечатка была бы тихой. Не больше 10 переменных, значение — непустая строка до 500 символов (границы бэкенда MAX_CONTACT_VARIABLES_ON_SEND / MAX_CONTACT_VARIABLE_ON_SEND_VALUE_LENGTH).'),
197
+ })
198
+ .passthrough();
199
+ /**
200
+ * Применяет типизированную схему к `config` ТОЛЬКО для реактивационных цепочек.
201
+ *
202
+ * Через `z.union([reactivationConfigSchema, anyObjectSchema])` это делать нельзя: второй вариант
203
+ * принимает любой объект, поэтому union проходит всегда и ограничения (`steps.min(1)`,
204
+ * `filterMode` enum) не срабатывают ни разу — типизация выглядит рабочей, но её нет.
205
+ *
206
+ * @param input - Разобранный ввод тула
207
+ * @param ctx - Контекст zod для добавления ошибок
208
+ */
209
+ export const refineFollowUpConfig = (input, ctx) => {
210
+ if (input.config !== null &&
211
+ typeof input.config === "object" &&
212
+ !Array.isArray(input.config)) {
213
+ const note = input.config
214
+ .contactVariablesOnSend;
215
+ if (note !== undefined && note !== null) {
216
+ const parsedNote = z.record(z.string(), z.string()).safeParse(note);
217
+ if (!parsedNote.success)
218
+ ctx.addIssue({
219
+ code: 'custom',
220
+ path: ['config', 'contactVariablesOnSend'],
221
+ message: 'Нужен объект строковых значений либо null',
222
+ });
223
+ else {
224
+ const entries = Object.entries(parsedNote.data);
225
+ if (entries.length < 1 || entries.length > FOLLOWUP_NOTE_MAX_VARIABLES)
226
+ ctx.addIssue({
227
+ code: 'custom',
228
+ path: ['config', 'contactVariablesOnSend'],
229
+ message: `Нужны от 1 до ${FOLLOWUP_NOTE_MAX_VARIABLES} переменных`,
230
+ });
231
+ for (const [name, value] of entries)
232
+ if (name.trim().length === 0 ||
233
+ value.trim().length === 0 ||
234
+ value.length > FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS)
235
+ ctx.addIssue({
236
+ code: 'custom',
237
+ path: ['config', 'contactVariablesOnSend', name],
238
+ message: `Непустое значение не длиннее ${FOLLOWUP_NOTE_MAX_VALUE_CODE_UNITS} кодовых единиц`,
239
+ });
240
+ }
241
+ }
242
+ }
243
+ if (input.type !== "INACTIVE_USER_REACTIVATION") {
244
+ return;
245
+ }
246
+ const parsed = reactivationConfigSchema.safeParse(input.config);
247
+ if (parsed.success) {
248
+ return;
249
+ }
250
+ for (const issue of parsed.error.issues) {
251
+ ctx.addIssue({
252
+ code: z.ZodIssueCode.custom,
253
+ path: ["config", ...issue.path],
254
+ message: issue.message,
255
+ });
256
+ }
257
+ };
258
+ //# sourceMappingURL=follow-up-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-up-config.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-config.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Убирает транспортные детали замороженного DTO, оставляя оператору всё, что нужно проверить
3
- * перед необратимой отправкой: точный текст, канал, блокировки и причины пропуска.
2
+ * Компактный план: оставляет человеку всё, что нужно проверить перед необратимой отправкой, —
3
+ * точный текст, шаблон, причину, по которой пункт не уйдёт, побочки, которые тест НЕ сделает,
4
+ * исключённые цепочки и обрезку. Коды сервера заменены подписями: человеку код не показывается.
4
5
  */
5
6
  export declare function compactFunnelTestPlan(response: unknown): unknown;
6
- /** MCP-контур существующего durable «Теста воронки». */
7
+ /** Тест воронки дожимов: план по адресу человека в канале, запуск, состояние, остановка. */
7
8
  export declare const followUpFunnelTestTools: (import("./shared.js").ToolDefinition<{
8
9
  chat_user_id: string;
9
10
  workspace_id?: string | undefined;
@@ -1,78 +1,86 @@
1
1
  import { z } from 'zod';
2
2
  import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
3
+ /** Потолок причины подтверждения — как у отгруженного инструмента. */
3
4
  const CONFIRMATION_REASON_MAX_LENGTH = 500;
4
- /** Только plain JSON-object; ответы API остаются untrusted boundary. */
5
+ /** Только обычный объект JSON: ответ сервера — недоверенная граница. */
5
6
  function isRecord(value) {
6
7
  return typeof value === 'object' && value !== null && !Array.isArray(value);
7
8
  }
8
9
  function recordsOf(value) {
9
10
  return Array.isArray(value) ? value.filter(isRecord) : [];
10
11
  }
12
+ /** Подпись причины из ответа сервера: `{ code, label }` → подпись; пусто — `null`. */
13
+ function labelOf(value) {
14
+ return isRecord(value) ? value.label : null;
15
+ }
11
16
  /**
12
- * Убирает транспортные детали замороженного DTO, оставляя оператору всё, что нужно проверить
13
- * перед необратимой отправкой: точный текст, канал, блокировки и причины пропуска.
17
+ * Компактный план: оставляет человеку всё, что нужно проверить перед необратимой отправкой, —
18
+ * точный текст, шаблон, причину, по которой пункт не уйдёт, побочки, которые тест НЕ сделает,
19
+ * исключённые цепочки и обрезку. Коды сервера заменены подписями: человеку код не показывается.
14
20
  */
15
21
  export function compactFunnelTestPlan(response) {
16
22
  if (!isRecord(response)) {
17
23
  return response;
18
24
  }
19
- const sequences = recordsOf(response.sequences);
20
- const compactPlan = {
25
+ const plan = isRecord(response.plan) ? response.plan : {};
26
+ const compact = {
21
27
  runId: response.runId,
22
- chatUserId: response.chatUserId,
23
- platformId: response.platformId,
24
- contactBlockReason: response.contactBlockReason,
25
- steps: recordsOf(response.steps).map((step) => compactObject({
26
- order: step.order,
27
- sequenceName: step.sequenceName,
28
- text: step.text,
29
- transports: step.getcourseTransports,
30
- skipReason: step.blockedReason,
31
- skippedEffects: step.skippedEffects,
32
- })),
33
- excludedChains: sequences
34
- .filter((sequence) => sequence.included !== true)
35
- .map((sequence) => compactObject({
36
- sequenceName: sequence.sequenceName,
37
- reason: sequence.reason,
38
- outcome: sequence.outcome,
39
- totalSteps: sequence.totalSteps,
28
+ status: response.statusLabel,
29
+ contactId: response.contactId,
30
+ channelId: response.channelId,
31
+ expiresAt: response.expiresAt,
32
+ contactBlockReason: labelOf(plan.contactBlockReason),
33
+ items: recordsOf(plan.items).map((item) => compactObject({
34
+ order: item.order,
35
+ chain: item.workflowName,
36
+ text: item.displayText,
37
+ template: item.template ?? undefined,
38
+ skipReason: labelOf(item.blockedReason),
39
+ hasPersonalLink: item.hasPersonalLink === true ? true : undefined,
40
+ testWillNotDo: recordsOf(item.skippedEffects).map((effect) => labelOf(effect.effect)),
40
41
  })),
41
- conditionSkips: sequences
42
- .filter((sequence) => Array.isArray(sequence.skippedByCondition) && sequence.skippedByCondition.length > 0)
43
- .map((sequence) => ({
44
- sequenceName: sequence.sequenceName,
45
- skippedByCondition: sequence.skippedByCondition,
42
+ excludedChains: recordsOf(plan.chains)
43
+ .filter((chain) => chain.included !== true)
44
+ .map((chain) => compactObject({
45
+ chain: chain.workflowName,
46
+ reason: labelOf(chain.exclusionReason),
47
+ totalSteps: chain.totalSteps,
46
48
  })),
47
- truncated: response.truncated,
48
- generationLimitReached: response.generationLimitReached,
49
- unchecked: response.unchecked,
50
- notCovered: response.notCovered,
49
+ stoppedChains: recordsOf(plan.chains)
50
+ .filter((chain) => chain.included === true && isRecord(chain.stopReason))
51
+ .map((chain) => ({ chain: chain.workflowName, reason: labelOf(chain.stopReason) })),
52
+ truncated: plan.truncated,
53
+ unchecked: recordsOf(plan.unchecked).map(labelOf),
54
+ notCovered: recordsOf(plan.notCovered).map(labelOf),
51
55
  };
52
- return withInstructions(compactPlan, [
53
- 'Plan tool НИЧЕГО не отправил, но динамические шаги уже потратили LLM-токены.',
54
- 'Перед start покажи оператору каждый expanded text, transports, skipReason, excludedChains, conditionSkips и truncated.',
55
- 'Запускай только этот runId: backend возьмёт замороженный снимок и не сгенерирует другой текст.',
56
+ return withInstructions(compact, [
57
+ 'Инструмент плана НИЧЕГО не отправил и модель не вызывал: план собран из текстов цепочек.',
58
+ 'Перед start покажи человеку каждый текст, шаблон, skipReason, excludedChains, stoppedChains и truncated.',
59
+ 'Запускай только этот runId: сервер возьмёт замороженный план и тексты не пересоберёт. Черновик живёт сутки — позже план строится заново.',
56
60
  ]);
57
61
  }
58
- /** MCP-контур существующего durable «Теста воронки». */
62
+ /** Тест воронки дожимов: план по адресу человека в канале, запуск, состояние, остановка. */
59
63
  export const followUpFunnelTestTools = [
60
64
  defineTool({
61
65
  name: 'besales_followup_funnel_test_plan',
62
- sideEffect: 'none',
66
+ // План сохраняет черновик на сервере и удаляет прежние черновики того же автора.
67
+ sideEffect: 'write',
68
+ carriesCustomerData: true,
63
69
  requiredFields: ['chat_user_id'],
64
70
  defaultWorkspaceId: true,
65
71
  schema: z
66
72
  .object({
67
73
  workspace_id: uuidSchema.optional(),
74
+ // Единица прежней версии — карточка человека в канале — у v2 и есть АДРЕС человека в канале:
75
+ // имя поля отгруженного инструмента сохранено, значение — идентификатор адреса.
68
76
  chat_user_id: uuidSchema,
69
77
  funnel_id: uuidSchema.optional(),
70
78
  })
71
79
  .strict(),
72
80
  createRequest: (input) => ({
73
81
  method: 'POST',
74
- path: `/follow-up/funnel-test/${input.chat_user_id}/plan` +
75
- (input.funnel_id ? `?funnelId=${encodeURIComponent(input.funnel_id)}` : ''),
82
+ path: `/contact-identities/${input.chat_user_id}/funnel-test/plan`,
83
+ ...(input.funnel_id === undefined ? {} : { body: { funnelId: input.funnel_id } }),
76
84
  }),
77
85
  enhanceResponse: compactFunnelTestPlan,
78
86
  }),
@@ -81,6 +89,7 @@ export const followUpFunnelTestTools = [
81
89
  sideEffect: 'spend',
82
90
  requiredFields: ['run_id', 'explicit_confirmation', 'confirmation_reason'],
83
91
  defaultWorkspaceId: true,
92
+ verifyWithToolName: 'besales_followup_funnel_test_status',
84
93
  schema: z
85
94
  .object({
86
95
  workspace_id: uuidSchema.optional(),
@@ -91,19 +100,20 @@ export const followUpFunnelTestTools = [
91
100
  .strict(),
92
101
  createRequest: (input) => ({
93
102
  method: 'POST',
94
- path: `/follow-up/funnel-test/runs/${input.run_id}/start`,
95
- // confirmation_reason — MCP safety gate. Backend получает только свой канонический DTO.
96
- body: { acknowledge: true },
103
+ path: `/funnel-test-runs/${input.run_id}/start`,
104
+ // Причина подтверждения уходит в журнал аудита запуска.
105
+ body: { acknowledge: true, confirmationReason: input.confirmation_reason },
97
106
  }),
98
107
  enhanceResponse: (response) => withInstructions(response, [
99
- 'Реальная отправка запущена по замороженному plan snapshot.',
100
- 'Опрашивай besales_followup_funnel_test_status до terminal status.',
101
- 'Если человек ответит во время прогона, backend остановит оставшиеся касания.',
108
+ 'Настоящая отправка запущена по замороженному плану, пункты уходят по одному с паузой 15 секунд.',
109
+ 'Опрашивай besales_followup_funnel_test_status до завершения.',
110
+ 'Если человек ответит во время прогона, сервер остановит оставшиеся касания.',
102
111
  ]),
103
112
  }),
104
113
  defineTool({
105
114
  name: 'besales_followup_funnel_test_status',
106
115
  sideEffect: 'none',
116
+ carriesCustomerData: true,
107
117
  requiredFields: ['run_id'],
108
118
  defaultWorkspaceId: true,
109
119
  schema: z
@@ -114,11 +124,12 @@ export const followUpFunnelTestTools = [
114
124
  .strict(),
115
125
  createRequest: (input) => ({
116
126
  method: 'GET',
117
- path: `/follow-up/funnel-test/runs/${input.run_id}`,
127
+ path: `/funnel-test-runs/${input.run_id}`,
118
128
  }),
119
129
  enhanceResponse: (response) => withInstructions(response, [
120
- 'dispatchedCount означает «заклеймлено до транспорта», а доказанный исход смотри в results[].',
121
- 'stalled=true лечится cancel, а не повторным start того же runId.',
130
+ 'dispatchedCount — «занято до отправки», а не «доставлено»: доказанный исход каждого пункта — в results[].',
131
+ 'Показывай человеку подписи (statusLabel, outcomeLabel, label причин), а не коды.',
132
+ 'stalled=true лечится остановкой (cancel), а не повторным запуском того же runId.',
122
133
  ]),
123
134
  }),
124
135
  defineTool({
@@ -126,6 +137,7 @@ export const followUpFunnelTestTools = [
126
137
  sideEffect: 'write',
127
138
  requiredFields: ['run_id'],
128
139
  defaultWorkspaceId: true,
140
+ verifyWithToolName: 'besales_followup_funnel_test_status',
129
141
  schema: z
130
142
  .object({
131
143
  workspace_id: uuidSchema.optional(),
@@ -134,11 +146,12 @@ export const followUpFunnelTestTools = [
134
146
  .strict(),
135
147
  createRequest: (input) => ({
136
148
  method: 'POST',
137
- path: `/follow-up/funnel-test/runs/${input.run_id}/cancel`,
149
+ path: `/funnel-test-runs/${input.run_id}/cancel`,
150
+ body: {},
138
151
  }),
139
152
  enhanceResponse: (response) => withInstructions(response, [
140
- 'Отмена действует со следующего касания: уже заклеймленный пункт мог дойти до транспорта.',
141
- 'Проверь results[] в ответе или повторным status-вызовом.',
153
+ 'Остановка действует со следующего касания: пункт, уже переданный на отправку, мог дойти до человека.',
154
+ 'Проверь results[] в ответе или повторным вызовом status.',
142
155
  ]),
143
156
  }),
144
157
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"follow-up-funnel-test.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-funnel-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow-up-funnel-test.js","sourceRoot":"","sources":["../../../src/tools/definitions/follow-up-funnel-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Одинаковое правило публикации полной формы и одной фразы. */
2
+ export declare const followUpPromotionInstructions: readonly ["Если изменились только тексты сообщений, уже идущие люди получат новый текст со следующего сообщения. Сообщение, отправлявшееся в момент сохранения, придёт прежним; повторной отправки нет.", "Если изменено что-то ещё в шагах (расписание, условия, порядок, заметка в CRM), идущие остаются на своей версии. Если вместе с текстом изменены настройки цепочки (остановка при оплате, запись в карточку после отправки, предел кругов, продолжение после ответа, порог молчания, дата календаря), новые настройки действуют для всех сразу, а текст идущим не меняется до повторного сохранения без изменений.", "runs называет людей, получающих новый текст, уже отправлявших старый и оставшихся на своей версии с причиной. Перескажи числа и summary человеку; технический адрес firstDifference переведи в понятное описание. warnings относится только к оставленным людям."];
@@ -0,0 +1,7 @@
1
+ /** Одинаковое правило публикации полной формы и одной фразы. */
2
+ export const followUpPromotionInstructions = [
3
+ 'Если изменились только тексты сообщений, уже идущие люди получат новый текст со следующего сообщения. Сообщение, отправлявшееся в момент сохранения, придёт прежним; повторной отправки нет.',
4
+ 'Если изменено что-то ещё в шагах (расписание, условия, порядок, заметка в CRM), идущие остаются на своей версии. Если вместе с текстом изменены настройки цепочки (остановка при оплате, запись в карточку после отправки, предел кругов, продолжение после ответа, порог молчания, дата календаря), новые настройки действуют для всех сразу, а текст идущим не меняется до повторного сохранения без изменений.',
5
+ 'runs называет людей, получающих новый текст, уже отправлявших старый и оставшихся на своей версии с причиной. Перескажи числа и summary человеку; технический адрес firstDifference переведи в понятное описание. warnings относится только к оставленным людям.',
6
+ ];
7
+ //# sourceMappingURL=follow-up-promotion-instructions.js.map