@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,159 @@
1
+ import { SILENCE_AXES_HINT } from './v15-port-descriptions.js';
2
+ import { legacyTriggerRepeatFields, legacyTriggerRepeatIssues, legacyTriggerRepeatValue } from './legacy-trigger-repeat.js';
3
+ import { z } from 'zod';
4
+ import { triggerActionArgumentSchema } from './trigger-argument.schema.js';
5
+ import { withProjectedTriggerEcho } from './trigger-echo-projection.js';
6
+ import { crmStagePoolMessage } from './crm-stage-pool.messages.js';
7
+ import { triggerSetupActionItemSchema } from './trigger-action-item.schema.js';
8
+ import { anyObjectSchema, compactObject, defineTool, platformSetupConfirmationSchema, setupConfirmation, triggerScopeSchema, uuidSchema, withInstructions, } from './shared.js';
9
+ /**
10
+ * Потолки названия и условия триггера зеркалят сервер: знак с эмодзи считается одной кодовой точкой.
11
+ */
12
+ const TRIGGER_NAME_MAX_CODE_POINTS = 100;
13
+ const TRIGGER_CONDITION_MAX_CODE_POINTS = 4000;
14
+ export const eventTriggerDescription = 'Для автоматического запуска по событию передай trigger вместо scope и строкового condition верхнего уровня. ' +
15
+ 'NEW_CONVERSATION — начало новой переписки; CONTACT_MESSAGE — сообщение клиента; ' +
16
+ 'OPERATOR_REPLY — ответ живого оператора; AGENT_REPLY — после ответа бота клиенту, пустой или молчаливый ход события не даёт. ' +
17
+ 'Шаги событийного триггера статичные: без arguments, {{args.*}} и полей «заполняет ИИ» — автозапуск не получает значений ИИ. ' +
18
+ 'Для шагов с оператором или отправкой требуется explicit_confirmation=true. ' +
19
+ 'Горизонт allow_repeat_in_conversation — ПЕРЕПИСКА. ' +
20
+ 'В trigger.condition можно использовать conversation.lastActionFailureCode, если сервер его знает.';
21
+ // Проверяем конверт группы; операторы, пути и вложенные правила разбирает ядро сервера.
22
+ const eventConditionSchema = z.strictObject({
23
+ schema_version: z.literal(1, { error: 'Версия trigger.condition.schema_version должна быть 1' }),
24
+ combinator: z.enum(['AND', 'OR'], { error: 'Укажи trigger.condition.combinator: AND или OR' }),
25
+ rules: z.array(z.object({}, { error: 'Правило или вложенная группа trigger.condition.rules должны быть объектом' }).passthrough(), {
26
+ error: 'trigger.condition.rules должен быть массивом объектов правил или вложенных групп',
27
+ }),
28
+ preset: z.string({ error: 'trigger.condition.preset должен быть строкой' }).optional(),
29
+ }, { error: 'trigger.condition должен быть группой условий: schema_version, combinator, rules и необязательный preset' });
30
+ const eventTriggerSchema = z.strictObject({
31
+ event: z.enum(['NEW_CONVERSATION', 'CONTACT_MESSAGE', 'OPERATOR_REPLY', 'AGENT_REPLY'], {
32
+ error: 'Укажи событие trigger.event: NEW_CONVERSATION, CONTACT_MESSAGE, OPERATOR_REPLY или AGENT_REPLY',
33
+ }),
34
+ condition: eventConditionSchema.optional(),
35
+ }, { error: 'trigger должен быть объектом только с event и необязательным condition' })
36
+ .describe(eventTriggerDescription);
37
+ function triggerTextSchema(maxCodePoints) {
38
+ return z
39
+ .string()
40
+ .trim()
41
+ .min(1)
42
+ .refine((value) => [...value].length <= maxCodePoints, {
43
+ message: `не длиннее ${maxCodePoints} знаков`,
44
+ });
45
+ }
46
+ export const triggerUpsertTool = defineTool({
47
+ name: 'besales_trigger_upsert',
48
+ sideEffect: 'write',
49
+ requiredFields: ['platform_id', 'agent_id'],
50
+ schema: z.object({
51
+ platform_id: uuidSchema,
52
+ agent_id: uuidSchema,
53
+ trigger_id: uuidSchema.optional(),
54
+ trigger: eventTriggerSchema.optional(),
55
+ // `.trim()` — как у сервера: строка из пробелов пустая, «Оплата » равна «Оплата». Потолок — в кодовых точках,
56
+ // как его считают сервер и `maxLength` схемы инструмента; `.max` zod считал бы кодовые единицы UTF-16.
57
+ name: triggerTextSchema(TRIGGER_NAME_MAX_CODE_POINTS).optional(),
58
+ condition: triggerTextSchema(TRIGGER_CONDITION_MAX_CODE_POINTS).optional(),
59
+ is_enabled: z.boolean().optional(),
60
+ priority: z.number().int().min(1).max(100).optional(),
61
+ stop_propagation: z.boolean().optional(),
62
+ instagram_comment_kind: z.literal('COMPLAINT').nullable().optional(),
63
+ /**
64
+ * Разрешить действию срабатывать в одной переписке повторно.
65
+ * Выключено (умолчание) — триггер отрабатывает в диалоге один раз; включи там, где
66
+ * повтор законен («пришли фото», «отправь прайс», «найди товар»).
67
+ * Защита от зацикливания внутри одного ответа модели этой настройкой НЕ управляется.
68
+ */
69
+ allow_repeat_in_conversation: z.boolean().optional(),
70
+ ...legacyTriggerRepeatFields,
71
+ arguments: z.array(triggerActionArgumentSchema).max(20).optional(),
72
+ scope: triggerScopeSchema,
73
+ metadata: anyObjectSchema.optional(),
74
+ actions: z.array(triggerSetupActionItemSchema).optional(),
75
+ replace_actions: z.boolean().optional(),
76
+ ...platformSetupConfirmationSchema,
77
+ }).superRefine(legacyTriggerRepeatIssues).superRefine((input, context) => {
78
+ if (input.trigger === undefined)
79
+ return;
80
+ for (const field of ['scope', 'condition']) {
81
+ if (input[field] !== undefined)
82
+ context.addIssue({
83
+ code: 'custom',
84
+ path: [field],
85
+ message: `Событийный trigger несовместим с ${field} верхнего уровня; условие события передай в trigger.condition`,
86
+ });
87
+ }
88
+ }),
89
+ createRequest: (input) => ({
90
+ method: input.trigger_id ? 'PATCH' : 'POST',
91
+ path: input.trigger_id
92
+ ? `/channels/${input.platform_id}/agents/${input.agent_id}/triggers/${input.trigger_id}`
93
+ : `/channels/${input.platform_id}/agents/${input.agent_id}/triggers`,
94
+ body: compactObject({
95
+ trigger: input.trigger,
96
+ name: input.name,
97
+ condition: input.condition,
98
+ isEnabled: input.is_enabled,
99
+ priority: input.priority,
100
+ stopPropagation: input.stop_propagation,
101
+ instagramCommentKind: input.instagram_comment_kind,
102
+ allowRepeatInConversation: legacyTriggerRepeatValue(input),
103
+ arguments: input.arguments,
104
+ scope: input.scope,
105
+ metadata: input.metadata,
106
+ actions: input.actions,
107
+ replaceActions: input.replace_actions,
108
+ ...setupConfirmation(input),
109
+ }),
110
+ }),
111
+ enhanceResponse: (response, input) => withInstructions(withProjectedTriggerEcho(response), [
112
+ ...(input.trigger === undefined ? [] : [eventTriggerDescription]),
113
+ 'В ответе вместо самих шагов и условий — их количество (actionsCount / activationsCount): ' +
114
+ 'эхо целиком повторяло отправленное и уносило контекст на каждой правке. ' +
115
+ 'Нужен текущий состав — besales_platform_context_get.',
116
+ 'replace_actions=true заменяет ВЕСЬ набор действий триггера (delete-and-recreate, как в UI) — ' +
117
+ 'сперва прочитай текущие действия (besales_platform_context_get) и передай ПОЛНЫЙ желаемый набор, ' +
118
+ 'а не дельту, иначе потеряешь не переданные действия.',
119
+ SILENCE_AXES_HINT,
120
+ 'Без replace_actions передача actions на существующем триггере отклоняется (защита от случайной потери).',
121
+ crmStagePoolMessage('hint'),
122
+ 'Аргументы объявляются в arguments; маркер в поддерживаемом поле шага — {{args.<ключ>}}. Ключ можно задать самому латиницей: аргумент и шаг сохраняются одним вызовом; иначе выведенный ключ вернётся в ответе. Отсутствие arguments сохраняет прежние, пустой массив снимает все аргументы, null недопустим.',
123
+ // Горизонт называется вслух и в подсказке, а не только в схеме: ассистент, читающий
124
+ // ТОЛЬКО ответ инструмента, схемы поля уже не видит — а перепутанный горизонт и стоил
125
+ // инциденту трёх заметок в CRM у одного лида.
126
+ ...(input.allow_repeated_calls !== undefined || input.run_once_per_contact !== undefined
127
+ ? ['Горизонт изменён: прежние флаги переведены в повтор в переписке; после её закрытия право возвращается.'] : []),
128
+ 'Горизонт allow_repeat_in_conversation — ПЕРЕПИСКА, а не контакт: при выключенной ' +
129
+ 'настройке действие срабатывает в диалоге один раз, но после авто-завершения диалога ' +
130
+ 'право возвращается и на новом обращении действие сработает снова. ' +
131
+ 'Повтор внутри одного ответа модели подавляется всегда и настройкой не управляется.',
132
+ // Правило API называется и здесь: иначе ассистент узнаёт о нём только по отказу 422.
133
+ 'Включённое действие, сохраняющее почту, названную клиентом (шаг SAVE_CONTACT_INFO с полем email ровно ' +
134
+ '{{slots.email}}), требует allow_repeat_in_conversation=true — иначе API отклонит запись: первая ' +
135
+ 'попытка заняла бы право до закрытия переписки, и исправленный после опечатки адрес сохранить было бы ' +
136
+ 'нельзя. В карточку ложится только адрес, который клиент сам написал в этой переписке.',
137
+ 'Действию, записывающему значение из переписки (поле CRM без шаблона — input_type ai_text или ' +
138
+ 'ai_dropdown; заметка с input_type=ai_text; переменная с value_source=MODEL; поле школы из ai_fields, ' +
139
+ 'у выбора — с вариантами options), повтор рекомендован: частичное извлечение занимает право, и ' +
140
+ 'названное клиентом позже без allow_repeat_in_conversation=true не запишется. Это не требование — ' +
141
+ 'API такое действие сохраняет и без повтора (если значений в разговоре нет вовсе, право не тратится); ' +
142
+ 'однократность уместна, когда её выбирает владелец. Значения аргументами не передаются — их достаёт ' +
143
+ 'из переписки отдельный ход извлечения.',
144
+ // Порядок денежных шагов — тоже правило записи API: без подсказки ассистент узнаёт о нём по отказу 422.
145
+ 'Денежные шаги GetCourse: GETCOURSE_CREATE_DEAL по предложению обязан стоять РАНЬШЕ первой ' +
146
+ 'GETCOURSE_SEND_PAYMENT_LINK в режиме OFFER с тем же offer_id — иначе API отклонит запись кодом 422 ' +
147
+ 'TRIGGER_GETCOURSE_PAYMENT_LINK_BEFORE_ORDER (field — адрес шага ссылки, offerId — предложение): ' +
148
+ 'ссылка, стоящая первой, создала бы свой платный заказ, а следом создание — второй. Переставь шаги, ' +
149
+ 'а не удаляй их. Установка навыка с таким шаблоном отклоняется тем же кодом.',
150
+ // Правило гейта продукта называется здесь, а не только отказом шага: иначе ассистент узнаёт о нём
151
+ // по первому невыставленному счёту живому клиенту.
152
+ 'Ссылка на оплату GetCourse (шаг GETCOURSE_SEND_PAYMENT_LINK) сверяет программу счёта с разговором: ' +
153
+ 'программу, названную в переписке ассистентом или клиентом, сервер сравнивает с продуктом школы и ' +
154
+ 'счёт не выставляет, если программа не названа, не совпала или сверить нечем. Действие со ссылкой ' +
155
+ 'вызывает модель: запуск по условию или сценарием всегда получает «сверить нечем».',
156
+ 'У шага создания заказа GetCourse настройка getcourseCreateDealConfig.reuse_open_invoice=true разрешает взять уже открытый платный счёт человека в той же школе, только если продукт счёта совпадает с одним из продуктов предложения шага. Это успешный шаг с reusedOpenInvoice=true, но нового заказа и новой денежной регистрации нет; Срок давности счёта: по умолчанию не старше 14 суток; open_invoice_age=ANY_AGE — без срока, WITHIN_MAX_AGE — 14 суток. Отсутствующий ключ получает 14 суток, в том числе у перенесённых шагов; ключ умолчания при сохранении удаляется. Количество открытых счетов считается в пределах выбранного срока. ru/en/es/id/uz используют подпись поля и двух вариантов на языке пользователя.',
157
+ ]),
158
+ });
159
+ //# sourceMappingURL=trigger-upsert.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-upsert.tool.js","sourceRoot":"","sources":["../../../src/tools/definitions/trigger-upsert.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const SCHEDULE_GUARD_HINT = "\u041F\u0440\u0435\u0434\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u0435\u043B\u044C \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043A\u0430\u043D\u0434\u0438\u0434\u0430\u0442\u043E\u0432 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043E \u043D\u0430\u0431\u043E\u0440\u0430 dailyCap; overCap \u0438\u043C \u043D\u0435 \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D. snapshot.guard_unchecked \u2014 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u043D\u043D\u044B\u0445 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u043D\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u044B\u043C\u0438 (count) \u0438 \u043F\u043E\u0447\u0435\u043C\u0443 (cause): \u0441\u0431\u043E\u0439 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430 \u0438\u043B\u0438 \u0438\u0441\u0447\u0435\u0440\u043F\u0430\u043D\u0438\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u0438. \u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u0438\u0442 \u0438\u0445 \u0441\u043D\u043E\u0432\u0430. \u0410\u0443\u0434\u0438\u0442 \u043E\u0442\u0431\u043E\u0440\u0430 \u0438\u0449\u0438 \u043F\u043E stage=SCHEDULE_SELECTION \u0438 scheduleRunId.";
2
+ export declare const SCHEDULE_BLOCKS_HINT = "\u041F\u0430\u043A\u0435\u0442 \u0440\u0430\u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043D\u0435 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D \u0447\u0438\u0441\u043B\u043E\u043C \u0431\u043B\u043E\u043A\u043E\u0432 \u00AB\u043F\u0440\u043E\u0434\u0443\u043A\u0442 \u00D7 \u0432\u043E\u0440\u043E\u043D\u043A\u0430\u00BB. \u0421\u043D\u044F\u0442\u0438\u0435 \u0411\u041B\u041E\u041A\u0410 \u043F\u043B\u0430\u043D\u043E\u043C \u0438\u0437-\u0437\u0430 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445: excludedBy.blockPlaceholdersUnresolved, \u0438\u0441\u0445\u043E\u0434 SKIPPED_UNRESOLVED_VARS \u0438 \u043F\u0430\u0443\u0437\u0430 6 \u0447\u0430\u0441\u043E\u0432 (\u043F\u0440\u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0435 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u043C\u0443 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0443 \u043F\u0430\u0443\u0437\u0430 \u0441\u0443\u0442\u043A\u0438); \u0438\u043C\u0435\u043D\u0430 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u2014 \u0432 \u043F\u0440\u0438\u0447\u0438\u043D\u0435 \u0441\u0442\u0440\u043E\u043A \u0436\u0443\u0440\u043D\u0430\u043B\u0430. \u041F\u043E\u0441\u043B\u0435 \u043F\u0430\u0443\u0437\u044B \u043B\u044E\u0434\u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442\u0441\u044F \u043A \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C\u0443 \u0437\u0430\u043F\u0443\u0441\u043A\u0443, \u043D\u043E \u0431\u0435\u0437 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0442\u0438\u0439 \u0430\u0433\u0435\u043D\u0442\u0430 \u0431\u043B\u043E\u043A \u0441\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u0441\u043D\u043E\u0432\u0430. \u041C\u0435\u0441\u0442\u0430 dailyCap \u0443\u0436\u0435 \u0437\u0430\u043D\u044F\u0442\u044B, \u0437\u0430\u043C\u0435\u043D\u044B \u0432 \u044D\u0442\u043E\u043C \u043F\u0440\u043E\u0433\u043E\u043D\u0435 \u043D\u0435 \u0434\u043E\u0431\u0438\u0440\u0430\u044E\u0442\u0441\u044F. droppedOverBlockLimit \u2014 \u0438\u0441\u0442\u043E\u0440\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043A.";
3
+ export declare const SCHEDULED_MODEL_HINT = "\u0417\u0430\u043F\u0438\u0441\u044C \u043C\u043E\u0434\u0435\u043B\u0438 \u0438 max_tokens \u0440\u0435\u0436\u0438\u043C\u043E\u0432 daily/hourly \u043F\u043E\u043A\u0430 \u0437\u0430\u043A\u0440\u044B\u0442\u0430 \u0444\u043B\u0430\u0433\u043E\u043C API SCHEDULED_TASK_MODEL_WRITES_ENABLED (\u043F\u043E\u044D\u0442\u0430\u043F\u043D\u044B\u0439 \u0432\u044B\u043A\u0430\u0442). \u041C\u043E\u0441\u0442 \u043E\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442 \u044D\u0442\u0438 \u043F\u043E\u043B\u044F \u0434\u043E HTTP \u0438 \u043E\u0442\u043A\u0440\u043E\u0435\u0442 \u0438\u0445 \u0432\u043C\u0435\u0441\u0442\u0435 \u0441 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C \u0444\u043B\u0430\u0433\u0430.";
4
+ export declare const ANALYSIS_WINDOW_HINT = "\u041D\u043E\u0432\u044B\u0439 \u0440\u0430\u0437\u0431\u043E\u0440 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438 \u0440\u0435\u043F\u043B\u0438\u043A\u0435 \u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u0432 \u043E\u043A\u043D\u0435. \u041E\u043A\u043D\u043E \u0438\u0437 \u043E\u0434\u043D\u0438\u0445 \u043E\u0442\u0432\u0435\u0442\u043E\u0432 \u0430\u0433\u0435\u043D\u0442\u0430 \u0438\u043B\u0438 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u0430 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u0442\u0441\u044F; \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u0430\u044F \u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u0443\u0436\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0451\u043D\u043D\u043E\u0439 \u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u0431\u0435\u0437 \u043D\u043E\u0432\u043E\u0433\u043E \u0432\u0445\u043E\u0434\u044F\u0449\u0435\u0433\u043E.";
5
+ export declare const SILENCE_AXES_HINT = "\u041F\u0440\u0438 replace_actions=true \u044F\u0432\u043D\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0439 \u043E\u0431\u0435 \u043E\u0441\u0438 SILENT_MODE: config.silence_bot \u0438 config.silence_followups. \u041F\u0440\u043E\u043F\u0443\u0449\u0435\u043D\u043D\u0430\u044F \u043E\u0441\u044C \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 true, \u0430 \u043D\u0435 \u043F\u0440\u0435\u0436\u043D\u0435\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435. \u0414\u043B\u044F \u0441\u0442\u0430\u0440\u043E\u0433\u043E \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0430 \u2014 silenceBot/silenceFollowUps.";
6
+ export declare const LINK_PAGINATION_HINT = "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u0441\u0442\u0440\u0430\u043D\u0438\u0447\u043D\u044B\u0439: items/total/limit/offset/hasMore. \u041F\u0440\u0438 hasMore=true \u0434\u043E\u0447\u0438\u0442\u044B\u0432\u0430\u0439 \u043A\u0430\u0442\u0430\u043B\u043E\u0433; \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u043D\u0435 \u0434\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043F\u0443\u0441\u0442\u043E\u0439 \u043A\u0430\u0442\u0430\u043B\u043E\u0433.";
7
+ export declare const POOL_OUTSIDE_HINT = "outsideSegmentsBy: paid \u2014 \u043A\u0443\u043F\u0438\u043B, application \u2014 \u0435\u0441\u0442\u044C \u0436\u0438\u0432\u0430\u044F \u0437\u0430\u044F\u0432\u043A\u0430, attendanceNoMinutes \u2014 \u0431\u044B\u043B \u043D\u0430 \u044D\u0444\u0438\u0440\u0435, \u043C\u0438\u043D\u0443\u0442 \u043D\u0435 \u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E, paidElsewhere \u2014 \u043F\u043E\u043A\u0443\u043F\u0430\u043B \u0432 \u0434\u0440\u0443\u0433\u043E\u0439 \u0432\u043E\u0440\u043E\u043D\u043A\u0435, seriesRunning \u2014 \u0441\u0435\u0440\u0438\u044F \u0435\u0449\u0451 \u0438\u0434\u0451\u0442, other \u2014 \u043F\u0440\u043E\u0447\u0435\u0435. \u041E\u0434\u043D\u0430 \u043F\u0440\u0438\u0447\u0438\u043D\u0430 \u043D\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E, \u0441\u0443\u043C\u043C\u0430 \u0440\u0430\u0432\u043D\u0430 outsideSegments. \u0421\u0442\u0430\u0440\u044B\u0435 \u0441\u043D\u0438\u043C\u043A\u0438 \u043C\u043E\u0433\u043B\u0438 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u044C paidElsewhere \u0438 seriesRunning \u043A other.";
8
+ export declare const v15DescriptionUpdates: Readonly<Record<string, {
9
+ replace?: readonly (readonly [string, string])[];
10
+ append: string;
11
+ }>>;
@@ -0,0 +1,30 @@
1
+ // Публикуемые уточнения v1.5 в словаре v2. Генератор дополняет описания,
2
+ // сохраняя исходные права доступа и остальные инструкции каталога.
3
+ import { SCHEDULE_EXCLUSION_HINT } from './schedule-selection-hints.js';
4
+ export const SCHEDULE_GUARD_HINT = 'Предохранитель проверяет кандидатов только до набора dailyCap; overCap им не проверен. snapshot.guard_unchecked — сколько отобранных осталось непроверенными (count) и почему (cause): сбой источника или исчерпание времени. Доставка проверит их снова. Аудит отбора ищи по stage=SCHEDULE_SELECTION и scheduleRunId.';
5
+ export const SCHEDULE_BLOCKS_HINT = 'Пакет расписания не ограничен числом блоков «продукт × воронка». Снятие БЛОКА планом из-за переменных: excludedBy.blockPlaceholdersUnresolved, исход SKIPPED_UNRESOLVED_VARS и пауза 6 часов (при отправке отдельному человеку пауза сутки); имена переменных — в причине строк журнала. После паузы люди возвращаются к следующему запуску, но без исправления переменных или перекрытий агента блок снимается снова. Места dailyCap уже заняты, замены в этом прогоне не добираются. droppedOverBlockLimit — исторический счётчик.';
6
+ export const SCHEDULED_MODEL_HINT = 'Запись модели и max_tokens режимов daily/hourly пока закрыта флагом API SCHEDULED_TASK_MODEL_WRITES_ENABLED (поэтапный выкат). Мост отвергает эти поля до HTTP и откроет их вместе с включением флага.';
7
+ export const ANALYSIS_WINDOW_HINT = 'Новый разбор выполняется только при реплике клиента в окне. Окно из одних ответов агента или оператора пропускается; повторная доставка уже сохранённой подсказки возможна без нового входящего.';
8
+ export const SILENCE_AXES_HINT = 'При replace_actions=true явно сохраняй обе оси SILENT_MODE: config.silence_bot и config.silence_followups. Пропущенная ось получает true, а не прежнее значение. Для старого конверта — silenceBot/silenceFollowUps.';
9
+ export const LINK_PAGINATION_HINT = 'Ответ постраничный: items/total/limit/offset/hasMore. При hasMore=true дочитывай каталог; пустая страница не доказывает пустой каталог.';
10
+ export const POOL_OUTSIDE_HINT = 'outsideSegmentsBy: paid — купил, application — есть живая заявка, attendanceNoMinutes — был на эфире, минут не записано, paidElsewhere — покупал в другой воронке, seriesRunning — серия ещё идёт, other — прочее. Одна причина на регистрацию, сумма равна outsideSegments. Старые снимки могли относить paidElsewhere и seriesRunning к other.';
11
+ export const v15DescriptionUpdates = {
12
+ besales_broadcast_schedule_runs: { append: [SCHEDULE_GUARD_HINT, SCHEDULE_BLOCKS_HINT, SCHEDULE_EXCLUSION_HINT].join(' ') },
13
+ besales_broadcast_schedule_preview: { append: SCHEDULE_EXCLUSION_HINT },
14
+ besales_broadcast_pool_today: { append: POOL_OUTSIDE_HINT },
15
+ besales_scheduled_task_update: {
16
+ replace: [['Поля model, max_tokens и сырой текст промпта в v2 не переносятся и отвергаются по имени.', 'daily/hourly.model и max_tokens отвергаются по имени до HTTP, пока запись закрыта флагом API SCHEDULED_TASK_MODEL_WRITES_ENABLED; мост откроет их вместе с флагом. Сырой текст промпта также отвергается.']],
17
+ append: SCHEDULED_MODEL_HINT + ' ' + ANALYSIS_WINDOW_HINT,
18
+ },
19
+ besales_dialogue_analysis_task_update: { append: SCHEDULED_MODEL_HINT + ' ' + ANALYSIS_WINDOW_HINT },
20
+ besales_tracked_link_list: {
21
+ replace: [
22
+ ['Каталог приходит ЦЕЛИКОМ: постраничности у него нет, и пустой ответ означает «ссылок нет», а не «страница кончилась».', ''],
23
+ ['Каталог приходит ЦЕЛИКОМ, постраничности у него нет.', ''],
24
+ ],
25
+ append: LINK_PAGINATION_HINT,
26
+ },
27
+ besales_trigger_upsert: { append: SILENCE_AXES_HINT },
28
+ besales_broadcast_analytics_get: { append: 'Список и сводка оплат поддерживают platform_id, funnel, остальные общие измерения и include_archived. Период оплат передаётся как periodMode: без mode/days всё время; mode=days без days — 30 дней. mode=range принимает открытый диапазон: только from, только to или обе границы; если заданы обе, to не раньше from. Параметры должны поддерживаться выбранным report; payment_candidates: page_size не больше 100. payment_view можно сочетать с payment_status/payment_eligibility: API отдаёт приоритет view.' },
29
+ };
30
+ //# sourceMappingURL=v15-port-descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v15-port-descriptions.js","sourceRoot":"","sources":["../../../src/tools/definitions/v15-port-descriptions.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,mEAAmE;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG,yTAAyT,CAAC;AAC7V,MAAM,CAAC,MAAM,oBAAoB,GAAG,sgBAAsgB,CAAC;AAC3iB,MAAM,CAAC,MAAM,oBAAoB,GAAG,wMAAwM,CAAC;AAC7O,MAAM,CAAC,MAAM,oBAAoB,GAAG,kMAAkM,CAAC;AACvO,MAAM,CAAC,MAAM,iBAAiB,GAAG,sNAAsN,CAAC;AACxP,MAAM,CAAC,MAAM,oBAAoB,GAAG,yIAAyI,CAAC;AAC9K,MAAM,CAAC,MAAM,iBAAiB,GAAG,kVAAkV,CAAC;AAEpX,MAAM,CAAC,MAAM,qBAAqB,GAAmG;IACnI,+BAA+B,EAAE,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;IAC3H,kCAAkC,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE;IACvE,4BAA4B,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE;IAC3D,6BAA6B,EAAE;QAC7B,OAAO,EAAE,CAAC,CAAC,0FAA0F,EAAE,2MAA2M,CAAC,CAAC;QACpT,MAAM,EAAE,oBAAoB,GAAG,GAAG,GAAG,oBAAoB;KAC1D;IACD,qCAAqC,EAAE,EAAE,MAAM,EAAE,oBAAoB,GAAG,GAAG,GAAG,oBAAoB,EAAE;IACpG,yBAAyB,EAAE;QACzB,OAAO,EAAE;YACP,CAAC,uHAAuH,EAAE,EAAE,CAAC;YAC7H,CAAC,sDAAsD,EAAE,EAAE,CAAC;SAC7D;QACD,MAAM,EAAE,oBAAoB;KAC7B;IACD,sBAAsB,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE;IACrD,+BAA+B,EAAE,EAAE,MAAM,EAAE,sfAAsf,EAAE;CACpiB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /** Отказ со ссылками нельзя обходить подтверждением или автоматическим повтором. */
2
+ export declare const VARIABLE_DELETE_CONFLICT_INSTRUCTIONS = "\u041F\u0440\u0438 409 \u0438\u0437-\u0437\u0430 \u0441\u0441\u044B\u043B\u043E\u043A \u0446\u0435\u043F\u043E\u0447\u0435\u043A \u0441 \u043D\u0435\u043F\u0443\u0441\u0442\u044B\u043C workflows \u043F\u043E\u043A\u0430\u0436\u0438 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0443 \u0438\u043C\u0435\u043D\u0430 \u0446\u0435\u043F\u043E\u0447\u0435\u043A \u0438 liveRuns \u043A\u0430\u0436\u0434\u043E\u0439 (\u0447\u0438\u0441\u043B\u043E \u0436\u0438\u0432\u044B\u0445 \u043F\u0440\u043E\u0433\u043E\u043D\u043E\u0432), \u0437\u0430\u0442\u0435\u043C \u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0441\u044C \u0438 \u043D\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435. \u042F\u0432\u043D\u043E\u0435 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u043D\u0435 \u043E\u0431\u0445\u043E\u0434\u0438\u0442 \u0441\u0441\u044B\u043B\u043A\u0438. \u0414\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0446\u0435\u043F\u043E\u0447\u043A\u0430 \u0441\u043E \u0441\u0441\u044B\u043B\u043A\u043E\u0439 \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430, \u0438 \u0436\u0438\u0432\u044B\u0445 \u043F\u0440\u043E\u0433\u043E\u043D\u043E\u0432 \u0441\u043E \u0441\u0441\u044B\u043B\u043A\u043E\u0439 \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C. \u0412\u043A\u043B\u044E\u0447\u0438 \u043F\u0440\u0438\u043F\u0430\u0440\u043A\u043E\u0432\u0430\u043D\u043D\u0443\u044E \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u0438 \u0434\u043E\u0436\u0434\u0438\u0441\u044C \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0433\u043E\u043D\u043E\u0432; \u0435\u0441\u043B\u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0432\u0435\u0440\u0441\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0443, \u0432\u044B\u043A\u043B\u044E\u0447\u0438 \u0446\u0435\u043F\u043E\u0447\u043A\u0443. \u041C\u043E\u0436\u043D\u043E \u0442\u0430\u043A\u0436\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u043B\u0438\u0431\u043E \u0443\u0431\u0440\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0438\u0437 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u043A\u043E\u043D\u0446\u0430 \u0436\u0438\u0432\u044B\u0445 \u043F\u0440\u043E\u0433\u043E\u043D\u043E\u0432 \u0441\u043E \u0441\u0441\u044B\u043B\u043A\u043E\u0439. \u041F\u043E\u0432\u0442\u043E\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u0438\u0445 \u0443\u0441\u043B\u043E\u0432\u0438\u0439.";
3
+ export declare const variableTools: (import("./shared.js").ToolDefinition<{
4
+ scope: "WORKSPACE" | "CHANNEL";
5
+ workspace_id?: string | undefined;
6
+ platform_id?: string | undefined;
7
+ filter?: "all" | "variables" | "constants" | undefined;
8
+ limit?: number | undefined;
9
+ cursor?: string | undefined;
10
+ }> | import("./shared.js").ToolDefinition<{
11
+ scope: "WORKSPACE" | "CHANNEL";
12
+ name: string;
13
+ type: "TEXT" | "BOOLEAN" | "NUMBER" | "FLOAT";
14
+ workspace_id?: string | undefined;
15
+ description?: string | undefined;
16
+ value?: string | undefined;
17
+ platform_id?: string | undefined;
18
+ is_constant?: boolean | undefined;
19
+ constant_value?: string | undefined;
20
+ repeat_constant_value?: string | undefined;
21
+ }> | import("./shared.js").ToolDefinition<{
22
+ variable_id: string;
23
+ scope: "WORKSPACE" | "CHANNEL";
24
+ workspace_id?: string | undefined;
25
+ platform_id?: string | undefined;
26
+ }> | import("./shared.js").ToolDefinition<{
27
+ variable_id: string;
28
+ scope: "WORKSPACE" | "CHANNEL";
29
+ expected_version?: string | undefined;
30
+ workspace_id?: string | undefined;
31
+ platform_id?: string | undefined;
32
+ description?: string | undefined;
33
+ type?: "TEXT" | "BOOLEAN" | "NUMBER" | "FLOAT" | undefined;
34
+ value?: string | null | undefined;
35
+ constant_value?: string | null | undefined;
36
+ repeat_constant_value?: string | null | undefined;
37
+ }> | import("./shared.js").ToolDefinition<{
38
+ variable_id: string;
39
+ scope: "WORKSPACE" | "CHANNEL";
40
+ explicit_confirmation: true;
41
+ expected_version?: string | undefined;
42
+ workspace_id?: string | undefined;
43
+ platform_id?: string | undefined;
44
+ }>)[];
@@ -0,0 +1,310 @@
1
+ import { withEditVersionInstructions, editVersionInstruction } from './edit-version.js';
2
+ import { z } from 'zod';
3
+ import { assertCompleteList } from '../incomplete-list.js';
4
+ import { VARIABLES_MAX_PAGE_SIZE, compactObject, defineTool, uuidSchema, withInstructions, } from './shared.js';
5
+ function mapVariableType(type) {
6
+ return type === 'TEXT' ? 'STRING' : type;
7
+ }
8
+ /** Отказ со ссылками нельзя обходить подтверждением или автоматическим повтором. */
9
+ export const VARIABLE_DELETE_CONFLICT_INSTRUCTIONS = 'При 409 из-за ссылок цепочек с непустым workflows покажи человеку имена цепочек и liveRuns каждой (число живых прогонов), затем остановись и не продолжай удаление. Явное подтверждение не обходит ссылки. Для удаления цепочка со ссылкой должна быть выключена, и живых прогонов со ссылкой не должно быть. Включи припаркованную цепочку и дождись завершения прогонов; если последняя версия сохраняет ссылку, выключи цепочку. Можно также удалить цепочку либо убрать ссылку из последней версии и дождаться конца живых прогонов со ссылкой. Повтори удаление только после выполнения этих условий.';
10
+ /** Подсказка про второе значение константы — одна для создания и правки. */
11
+ const REPEAT_CONSTANT_VALUE_INSTRUCTION = 'repeat_constant_value подставляется вместо constant_value человеку, которому мы уже писали, — только в холодных рассылках (например, {intro}: «это снова Светлана.» вместо полного представления). Только константы CHANNEL; фигурные скобки запрещены; пустая строка или null очищает — тогда повтору уходит constant_value.';
12
+ export const variableTools = [
13
+ // ============================================================
14
+ // v1.5 Increment 4a — Unified Variables API (5 tools, v2-shaped scope discriminator)
15
+ // ============================================================
16
+ // Backend wraps two v1 tables (WorkspaceVariable + CustomVariable) под единый MCP shape.
17
+ // При v2 cutover (spec 23) обе таблицы → один `variables` с тем же `scope` discriminator —
18
+ // MCP shape работает без изменений.
19
+ defineTool({
20
+ name: 'besales_variable_list',
21
+ sideEffect: 'none',
22
+ closedWorld: true,
23
+ requiredFields: ['scope'],
24
+ defaultWorkspaceId: true,
25
+ // По этому перечню строят условия правил. Отсутствующая в усечённом списке переменная
26
+ // неотличима от «значение не проставлено», и правило получается недостижимым.
27
+ resultPolicy: { neverTruncate: true },
28
+ schema: z
29
+ .object({
30
+ workspace_id: uuidSchema.optional(),
31
+ scope: z.enum(['WORKSPACE', 'CHANNEL']),
32
+ platform_id: uuidSchema.optional(),
33
+ filter: z.enum(['all', 'variables', 'constants']).optional(),
34
+ // ⚠️ Без дефолта. Сервер СВОЙ дефолт имеет (50), и до появления этих двух ручек
35
+ // перечень молча обрывался на пятидесятой строке, а способа дочитать не было вовсе.
36
+ limit: z.number().int().min(1).max(VARIABLES_MAX_PAGE_SIZE).optional(),
37
+ cursor: z.string().min(1).optional(),
38
+ })
39
+ .strict()
40
+ .superRefine((input, ctx) => {
41
+ if (input.scope === 'CHANNEL' && !input.platform_id) {
42
+ ctx.addIssue({
43
+ code: z.ZodIssueCode.custom,
44
+ message: 'platform_id is required when scope=CHANNEL',
45
+ path: ['platform_id'],
46
+ });
47
+ }
48
+ if (input.scope === 'WORKSPACE' && input.platform_id) {
49
+ ctx.addIssue({
50
+ code: z.ZodIssueCode.custom,
51
+ message: 'platform_id is forbidden when scope=WORKSPACE',
52
+ path: ['platform_id'],
53
+ });
54
+ }
55
+ }),
56
+ createRequest: (input) => {
57
+ const query = new URLSearchParams({ scope: input.scope });
58
+ if (input.platform_id)
59
+ query.set('scopeId', input.platform_id);
60
+ if (input.filter === 'constants')
61
+ query.set('isConstant', 'true');
62
+ if (input.filter === 'variables')
63
+ query.set('isConstant', 'false');
64
+ if (input.limit !== undefined)
65
+ query.set('limit', String(input.limit));
66
+ if (input.cursor)
67
+ query.set('cursor', input.cursor);
68
+ return {
69
+ method: 'GET',
70
+ path: `/workspaces/${input.workspace_id}/variables?${query.toString()}`,
71
+ };
72
+ },
73
+ enhanceResponse: (response, input) => withInstructions(assertCompleteList(response, {
74
+ // Страницу попросили явно — отказ неуместен: постраничный обход это и есть.
75
+ pageRequested: input.limit !== undefined || input.cursor !== undefined,
76
+ toolName: 'besales_variable_list',
77
+ howToPage: `Позовите снова с limit (до ${VARIABLES_MAX_PAGE_SIZE}) и продолжайте по nextCursor, пока он не станет пустым.`,
78
+ }), [
79
+ 'WORKSPACE scope возвращает переменные workspace, CHANNEL — переменные указанного канала.',
80
+ 'platform_id — legacy-имя аргумента для UUID канала; filter маппится в v2 isConstant.',
81
+ 'nextCursor в ответе означает, что показана НЕ вся выборка: дочитайте страницами.',
82
+ ]),
83
+ }),
84
+ defineTool({
85
+ name: 'besales_variable_create',
86
+ sideEffect: 'write',
87
+ closedWorld: true,
88
+ requiredFields: ['scope', 'name', 'type'],
89
+ defaultWorkspaceId: true,
90
+ schema: z
91
+ .object({
92
+ workspace_id: uuidSchema.optional(),
93
+ scope: z.enum(['WORKSPACE', 'CHANNEL']),
94
+ name: z.string().regex(/^[a-zA-Z_][a-zA-Z0-9_]*$/, {
95
+ message: 'name must be ASCII letters/digits/underscores; start with letter or _',
96
+ }),
97
+ description: z.string().optional(),
98
+ type: z.enum(['TEXT', 'NUMBER', 'FLOAT', 'BOOLEAN']),
99
+ // WORKSPACE-only
100
+ value: z.string().optional(),
101
+ // CHANNEL-only
102
+ platform_id: uuidSchema.optional(),
103
+ is_constant: z.boolean().optional(),
104
+ constant_value: z.string().optional(),
105
+ repeat_constant_value: z.string().optional(),
106
+ })
107
+ .strict()
108
+ .superRefine((input, ctx) => {
109
+ if (input.scope === 'WORKSPACE') {
110
+ if (input.platform_id) {
111
+ ctx.addIssue({
112
+ code: z.ZodIssueCode.custom,
113
+ message: 'platform_id is forbidden when scope=WORKSPACE',
114
+ path: ['platform_id'],
115
+ });
116
+ }
117
+ if (input.is_constant !== undefined ||
118
+ input.constant_value !== undefined ||
119
+ input.repeat_constant_value !== undefined) {
120
+ ctx.addIssue({
121
+ code: z.ZodIssueCode.custom,
122
+ message: 'is_constant, constant_value and repeat_constant_value are forbidden when scope=WORKSPACE',
123
+ path: ['is_constant'],
124
+ });
125
+ }
126
+ }
127
+ else {
128
+ // CHANNEL
129
+ if (!input.platform_id) {
130
+ ctx.addIssue({
131
+ code: z.ZodIssueCode.custom,
132
+ message: 'platform_id is required when scope=CHANNEL',
133
+ path: ['platform_id'],
134
+ });
135
+ }
136
+ if (input.value !== undefined) {
137
+ ctx.addIssue({
138
+ code: z.ZodIssueCode.custom,
139
+ message: 'value is forbidden when scope=CHANNEL — use constant_value if isConstant=true',
140
+ path: ['value'],
141
+ });
142
+ }
143
+ if (input.is_constant === true && !input.constant_value) {
144
+ ctx.addIssue({
145
+ code: z.ZodIssueCode.custom,
146
+ message: 'constant_value is required when scope=CHANNEL and is_constant=true',
147
+ path: ['constant_value'],
148
+ });
149
+ }
150
+ if (input.is_constant !== true && input.repeat_constant_value !== undefined) {
151
+ ctx.addIssue({
152
+ code: z.ZodIssueCode.custom,
153
+ message: 'repeat_constant_value is allowed only when scope=CHANNEL and is_constant=true',
154
+ path: ['repeat_constant_value'],
155
+ });
156
+ }
157
+ }
158
+ }),
159
+ createRequest: (input) => ({
160
+ method: 'POST',
161
+ path: `/workspaces/${input.workspace_id}/variables`,
162
+ body: compactObject({
163
+ scope: input.scope,
164
+ name: input.name,
165
+ description: input.description,
166
+ type: mapVariableType(input.type),
167
+ scopeId: input.platform_id,
168
+ isConstant: input.is_constant,
169
+ defaultValue: input.is_constant ? input.constant_value : input.value,
170
+ repeatConstantValue: input.repeat_constant_value,
171
+ }),
172
+ }),
173
+ enhanceResponse: (response) => withInstructions(response, [
174
+ 'name и scope/scopeId иммутабельны после создания.',
175
+ 'TEXT автоматически маппится в v2 STRING; значение хранится в defaultValue.',
176
+ REPEAT_CONSTANT_VALUE_INSTRUCTION,
177
+ ]),
178
+ }),
179
+ defineTool({
180
+ name: 'besales_variable_get',
181
+ sideEffect: 'none',
182
+ closedWorld: true,
183
+ requiredFields: ['variable_id', 'scope'],
184
+ defaultWorkspaceId: true,
185
+ schema: z
186
+ .object({
187
+ workspace_id: uuidSchema.optional(),
188
+ variable_id: uuidSchema,
189
+ scope: z.enum(['WORKSPACE', 'CHANNEL']),
190
+ platform_id: uuidSchema.optional(),
191
+ })
192
+ .strict()
193
+ .superRefine((input, ctx) => {
194
+ if (input.scope === 'CHANNEL' && !input.platform_id) {
195
+ ctx.addIssue({
196
+ code: z.ZodIssueCode.custom,
197
+ message: 'platform_id is required when scope=CHANNEL',
198
+ path: ['platform_id'],
199
+ });
200
+ }
201
+ }),
202
+ createRequest: (input) => ({
203
+ method: 'GET',
204
+ path: `/variables/${input.variable_id}`,
205
+ }),
206
+ }),
207
+ defineTool({
208
+ name: 'besales_variable_update',
209
+ sideEffect: 'write',
210
+ closedWorld: true,
211
+ requiredFields: ['variable_id', 'scope'],
212
+ defaultWorkspaceId: true,
213
+ schema: z
214
+ .object({
215
+ expected_version: uuidSchema.optional(),
216
+ workspace_id: uuidSchema.optional(),
217
+ variable_id: uuidSchema,
218
+ scope: z.enum(['WORKSPACE', 'CHANNEL']),
219
+ platform_id: uuidSchema.optional(),
220
+ description: z.string().optional(),
221
+ type: z.enum(['TEXT', 'NUMBER', 'FLOAT', 'BOOLEAN']).optional(),
222
+ // WORKSPACE-only (nullable для clear)
223
+ value: z.string().nullable().optional(),
224
+ // CHANNEL-only (nullable для clear)
225
+ constant_value: z.string().nullable().optional(),
226
+ repeat_constant_value: z.string().nullable().optional(),
227
+ })
228
+ .strict()
229
+ .superRefine((input, ctx) => {
230
+ if (input.scope === 'CHANNEL' && !input.platform_id) {
231
+ ctx.addIssue({
232
+ code: z.ZodIssueCode.custom,
233
+ message: 'platform_id is required when scope=CHANNEL',
234
+ path: ['platform_id'],
235
+ });
236
+ }
237
+ if (input.scope === 'WORKSPACE' && input.constant_value !== undefined) {
238
+ ctx.addIssue({
239
+ code: z.ZodIssueCode.custom,
240
+ message: 'constant_value is forbidden when scope=WORKSPACE',
241
+ path: ['constant_value'],
242
+ });
243
+ }
244
+ if (input.scope === 'WORKSPACE' && input.repeat_constant_value !== undefined) {
245
+ ctx.addIssue({
246
+ code: z.ZodIssueCode.custom,
247
+ message: 'repeat_constant_value is forbidden when scope=WORKSPACE',
248
+ path: ['repeat_constant_value'],
249
+ });
250
+ }
251
+ if (input.scope === 'CHANNEL' && input.value !== undefined) {
252
+ ctx.addIssue({
253
+ code: z.ZodIssueCode.custom,
254
+ message: 'value is forbidden when scope=CHANNEL',
255
+ path: ['value'],
256
+ });
257
+ }
258
+ }),
259
+ createRequest: (input) => ({
260
+ method: 'PATCH',
261
+ path: `/variables/${input.variable_id}`,
262
+ body: compactObject({
263
+ expectedVersion: input.expected_version,
264
+ description: input.description,
265
+ type: mapVariableType(input.type),
266
+ defaultValue: input.scope === 'CHANNEL' ? input.constant_value : input.value,
267
+ // null доезжает как есть: это «очистить» второе значение.
268
+ repeatConstantValue: input.repeat_constant_value,
269
+ }),
270
+ }),
271
+ enhanceResponse: (response) => withInstructions(response, [editVersionInstruction(), REPEAT_CONSTANT_VALUE_INSTRUCTION]),
272
+ }),
273
+ defineTool({
274
+ name: 'besales_variable_delete',
275
+ sideEffect: 'write',
276
+ closedWorld: true,
277
+ requiredFields: ['variable_id', 'scope', 'explicit_confirmation'],
278
+ defaultWorkspaceId: true,
279
+ schema: z
280
+ .object({
281
+ expected_version: uuidSchema.optional(),
282
+ workspace_id: uuidSchema.optional(),
283
+ variable_id: uuidSchema,
284
+ scope: z.enum(['WORKSPACE', 'CHANNEL']),
285
+ platform_id: uuidSchema.optional(),
286
+ explicit_confirmation: z.literal(true),
287
+ })
288
+ .strict()
289
+ .superRefine((input, ctx) => {
290
+ if (input.scope === 'CHANNEL' && !input.platform_id) {
291
+ ctx.addIssue({
292
+ code: z.ZodIssueCode.custom,
293
+ message: 'platform_id is required when scope=CHANNEL',
294
+ path: ['platform_id'],
295
+ });
296
+ }
297
+ }),
298
+ // ⛔ Подтверждение ДОХОДИТ ДО СЕРВЕРА. Раньше `explicit_confirmation` проверяла только схема
299
+ // инструмента и дальше выбрасывала: сервер удалял переменную без единого вопроса, а у него
300
+ // есть и другие вызыватели. Теперь гейт стоит на сервере, и без этого параметра удаление
301
+ // через мост отвечало бы отказом.
302
+ createRequest: (input) => ({
303
+ method: 'DELETE',
304
+ ...compactObject({ ifMatch: input.expected_version }),
305
+ path: `/variables/${input.variable_id}?confirm=true`,
306
+ }),
307
+ enhanceResponse: withEditVersionInstructions,
308
+ }),
309
+ ];
310
+ //# sourceMappingURL=variables.js.map