@besales/mcp 0.48.0 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/README.md +109 -164
  2. package/README.onprem.ru.md +35 -0
  3. package/bin/besales-mcp-http.js +9 -0
  4. package/bin/besales-onprem.mjs +19 -0
  5. package/dist/auth/connection-store.d.ts +3 -1
  6. package/dist/auth/connection-store.js +9 -3
  7. package/dist/auth/connection-store.js.map +1 -1
  8. package/dist/auth/oauth-client.d.ts +20 -27
  9. package/dist/auth/oauth-client.js +31 -23
  10. package/dist/auth/oauth-client.js.map +1 -1
  11. package/dist/auth/session-workspace.d.ts +1 -0
  12. package/dist/auth/session-workspace.js +10 -1
  13. package/dist/auth/session-workspace.js.map +1 -1
  14. package/dist/auth/token-storage.js +4 -1
  15. package/dist/auth/token-storage.js.map +1 -1
  16. package/dist/cli.d.ts +1 -0
  17. package/dist/cli.js +80 -19
  18. package/dist/cli.js.map +1 -1
  19. package/dist/constants/crm-catalog.d.ts +2 -0
  20. package/dist/constants/crm-catalog.js +3 -0
  21. package/dist/constants/crm-catalog.js.map +1 -0
  22. package/dist/http/api-client.d.ts +52 -7
  23. package/dist/http/api-client.js +131 -66
  24. package/dist/http/api-client.js.map +1 -1
  25. package/dist/http/feedback-document-error.d.ts +26 -0
  26. package/dist/http/feedback-document-error.js +22 -0
  27. package/dist/http/feedback-document-error.js.map +1 -0
  28. package/dist/http-server.d.ts +15 -0
  29. package/dist/http-server.js +378 -0
  30. package/dist/http-server.js.map +1 -0
  31. package/dist/instructions/server-instructions.d.ts +1 -1
  32. package/dist/instructions/server-instructions.js +6 -3
  33. package/dist/instructions/server-instructions.js.map +1 -1
  34. package/dist/network/constants.d.ts +25 -0
  35. package/dist/network/constants.js +26 -0
  36. package/dist/network/constants.js.map +1 -0
  37. package/dist/network/failed-verifications.d.ts +10 -0
  38. package/dist/network/failed-verifications.js +37 -0
  39. package/dist/network/failed-verifications.js.map +1 -0
  40. package/dist/network/http-test-fixture.d.ts +3 -0
  41. package/dist/network/http-test-fixture.js +86 -0
  42. package/dist/network/http-test-fixture.js.map +1 -0
  43. package/dist/network/known-keys.d.ts +10 -0
  44. package/dist/network/known-keys.js +38 -0
  45. package/dist/network/known-keys.js.map +1 -0
  46. package/dist/network/memory-credentials.d.ts +11 -0
  47. package/dist/network/memory-credentials.js +24 -0
  48. package/dist/network/memory-credentials.js.map +1 -0
  49. package/dist/network/rate-limit.d.ts +23 -0
  50. package/dist/network/rate-limit.js +62 -0
  51. package/dist/network/rate-limit.js.map +1 -0
  52. package/dist/network/rejected-keys.d.ts +9 -0
  53. package/dist/network/rejected-keys.js +39 -0
  54. package/dist/network/rejected-keys.js.map +1 -0
  55. package/dist/network/request-work.d.ts +8 -0
  56. package/dist/network/request-work.js +20 -0
  57. package/dist/network/request-work.js.map +1 -0
  58. package/dist/network/successful-keys.d.ts +17 -0
  59. package/dist/network/successful-keys.js +47 -0
  60. package/dist/network/successful-keys.js.map +1 -0
  61. package/dist/resources/concepts/external-execution.md +3 -1
  62. package/dist/resources/concepts/feedback-sheets.md +21 -12
  63. package/dist/resources/concepts/icp.md +8 -1
  64. package/dist/resources/concepts/sandbox.md +15 -6
  65. package/dist/resources/concepts/triggers.md +8 -0
  66. package/dist/resources/concepts/workbook-classification.md +104 -50
  67. package/dist/resources/docs/agent-behavior.md +51 -382
  68. package/dist/resources/docs/campaigns.md +9 -16
  69. package/dist/resources/docs/crm-integration.md +39 -523
  70. package/dist/resources/docs/files-and-uploads.md +23 -286
  71. package/dist/resources/docs/follow-up.md +47 -12
  72. package/dist/resources/docs/knowledge-base.md +52 -521
  73. package/dist/resources/docs/pipeline-builder.md +26 -216
  74. package/dist/resources/docs/pipeline-settings-deep.md +27 -220
  75. package/dist/resources/docs/platforms.md +106 -519
  76. package/dist/resources/docs/prompt-anatomy.md +39 -285
  77. package/dist/resources/docs/routing.md +8 -16
  78. package/dist/resources/docs/trigger-actions.md +40 -24
  79. package/dist/resources/docs/variables.md +8 -12
  80. package/dist/resources/operator-edit.contract.d.ts +7 -0
  81. package/dist/resources/operator-edit.contract.js +8 -0
  82. package/dist/resources/operator-edit.contract.js.map +1 -0
  83. package/dist/resources/registry.js +20 -4
  84. package/dist/resources/registry.js.map +1 -1
  85. package/dist/resources/workflows/audit-dialogues.md +23 -12
  86. package/dist/resources/workflows/compare-models.md +6 -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 +9902 -4734
  94. package/dist/schemas/voice-actions-api.contract.json +248 -0
  95. package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
  96. package/dist/shared/constants/broadcast-reason.constants.js +47 -0
  97. package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
  98. package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
  99. package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
  100. package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
  101. package/dist/shared/constants/followup-note.constants.d.ts +3 -0
  102. package/dist/shared/constants/followup-note.constants.js +4 -0
  103. package/dist/shared/constants/followup-note.constants.js.map +1 -0
  104. package/dist/shared/constants/followup-session.constants.d.ts +2 -0
  105. package/dist/shared/constants/followup-session.constants.js +3 -0
  106. package/dist/shared/constants/followup-session.constants.js.map +1 -0
  107. package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
  108. package/dist/shared/constants/funnel-analytics.constants.js +3 -0
  109. package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
  110. package/dist/shared/constants/message-filter.constants.d.ts +7 -0
  111. package/dist/shared/constants/message-filter.constants.js +8 -0
  112. package/dist/shared/constants/message-filter.constants.js.map +1 -0
  113. package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
  114. package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
  115. package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
  116. package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
  117. package/dist/tasks/task-state-store.js +5 -0
  118. package/dist/tasks/task-state-store.js.map +1 -1
  119. package/dist/tools/annotations.js +4 -3
  120. package/dist/tools/annotations.js.map +1 -1
  121. package/dist/tools/definitions/agent-design.d.ts +78 -21
  122. package/dist/tools/definitions/agent-design.js +246 -90
  123. package/dist/tools/definitions/agent-design.js.map +1 -1
  124. package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
  125. package/dist/tools/definitions/agent-model-notice.js +31 -0
  126. package/dist/tools/definitions/agent-model-notice.js.map +1 -0
  127. package/dist/tools/definitions/agent-models.d.ts +5 -0
  128. package/dist/tools/definitions/agent-models.js +26 -0
  129. package/dist/tools/definitions/agent-models.js.map +1 -0
  130. package/dist/tools/definitions/agent-settings.d.ts +85 -0
  131. package/dist/tools/definitions/agent-settings.js +187 -0
  132. package/dist/tools/definitions/agent-settings.js.map +1 -0
  133. package/dist/tools/definitions/ai-costs.d.ts +12 -0
  134. package/dist/tools/definitions/ai-costs.js +142 -0
  135. package/dist/tools/definitions/ai-costs.js.map +1 -0
  136. package/dist/tools/definitions/api-tool-request.d.ts +15 -0
  137. package/dist/tools/definitions/api-tool-request.js +2 -0
  138. package/dist/tools/definitions/api-tool-request.js.map +1 -0
  139. package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
  140. package/dist/tools/definitions/behavior-shipped-form.js +185 -0
  141. package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
  142. package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
  143. package/dist/tools/definitions/broadcast-alerts.js +72 -0
  144. package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
  145. package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
  146. package/dist/tools/definitions/broadcast-analytics.js +732 -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 +28 -41
  158. package/dist/tools/definitions/crm-platform.js +235 -368
  159. package/dist/tools/definitions/crm-platform.js.map +1 -1
  160. package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
  161. package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
  162. package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
  163. package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
  164. package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
  165. package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
  166. package/dist/tools/definitions/custom-reports.d.ts +12 -0
  167. package/dist/tools/definitions/custom-reports.js +68 -0
  168. package/dist/tools/definitions/custom-reports.js.map +1 -0
  169. package/dist/tools/definitions/datasource.d.ts +2 -1
  170. package/dist/tools/definitions/datasource.js +28 -13
  171. package/dist/tools/definitions/datasource.js.map +1 -1
  172. package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
  173. package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
  174. package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
  175. package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
  176. package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
  177. package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
  178. package/dist/tools/definitions/dialog-review.d.ts +49 -0
  179. package/dist/tools/definitions/dialog-review.js +383 -0
  180. package/dist/tools/definitions/dialog-review.js.map +1 -0
  181. package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
  182. package/dist/tools/definitions/dialogue-analysis.js +170 -0
  183. package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
  184. package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
  185. package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
  186. package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
  187. package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
  188. package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
  189. package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
  190. package/dist/tools/definitions/dialogue-export.d.ts +7 -1
  191. package/dist/tools/definitions/dialogue-export.js +89 -32
  192. package/dist/tools/definitions/dialogue-export.js.map +1 -1
  193. package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
  194. package/dist/tools/definitions/dialogue-followup-state.js +69 -0
  195. package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
  196. package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
  197. package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
  198. package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
  199. package/dist/tools/definitions/edit-version.d.ts +5 -0
  200. package/dist/tools/definitions/edit-version.js +20 -0
  201. package/dist/tools/definitions/edit-version.js.map +1 -0
  202. package/dist/tools/definitions/external-api-channels.js +17 -15
  203. package/dist/tools/definitions/external-api-channels.js.map +1 -1
  204. package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
  205. package/dist/tools/definitions/feedback-document-access.js +63 -0
  206. package/dist/tools/definitions/feedback-document-access.js.map +1 -0
  207. package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
  208. package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
  209. package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
  210. package/dist/tools/definitions/follow-up-config.d.ts +79 -0
  211. package/dist/tools/definitions/follow-up-config.js +258 -0
  212. package/dist/tools/definitions/follow-up-config.js.map +1 -0
  213. package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
  214. package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
  215. package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
  216. package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
  217. package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
  218. package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
  219. package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
  220. package/dist/tools/definitions/follow-up-setup.js +20 -87
  221. package/dist/tools/definitions/follow-up-setup.js.map +1 -1
  222. package/dist/tools/definitions/follow-up.d.ts +20 -122
  223. package/dist/tools/definitions/follow-up.js +200 -357
  224. package/dist/tools/definitions/follow-up.js.map +1 -1
  225. package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
  226. package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
  227. package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
  228. package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
  229. package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
  230. package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
  231. package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
  232. package/dist/tools/definitions/funnel-analytics.js +150 -0
  233. package/dist/tools/definitions/funnel-analytics.js.map +1 -0
  234. package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
  235. package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
  236. package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
  237. package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
  238. package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
  239. package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
  240. package/dist/tools/definitions/getcourse-cold-welcome.d.ts +14 -29
  241. package/dist/tools/definitions/getcourse-cold-welcome.js +180 -254
  242. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  243. package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
  244. package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
  245. package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
  246. package/dist/tools/definitions/help.js.map +1 -1
  247. package/dist/tools/definitions/icp-import-source.d.ts +75 -0
  248. package/dist/tools/definitions/icp-import-source.js +88 -0
  249. package/dist/tools/definitions/icp-import-source.js.map +1 -0
  250. package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
  251. package/dist/tools/definitions/inbound-analytics.js +55 -0
  252. package/dist/tools/definitions/inbound-analytics.js.map +1 -0
  253. package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
  254. package/dist/tools/definitions/instagram-comment.templates.js +34 -0
  255. package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
  256. package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
  257. package/dist/tools/definitions/instagram-settings-compat.js +7 -0
  258. package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
  259. package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
  260. package/dist/tools/definitions/knowledge-chunking.js +83 -0
  261. package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
  262. package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
  263. package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
  264. package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
  265. package/dist/tools/definitions/knowledge.d.ts +24 -14
  266. package/dist/tools/definitions/knowledge.js +342 -233
  267. package/dist/tools/definitions/knowledge.js.map +1 -1
  268. package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
  269. package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
  270. package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
  271. package/dist/tools/definitions/link-tracking.d.ts +8 -0
  272. package/dist/tools/definitions/link-tracking.js +141 -38
  273. package/dist/tools/definitions/link-tracking.js.map +1 -1
  274. package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
  275. package/dist/tools/definitions/mailing-variant-content.js +73 -0
  276. package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
  277. package/dist/tools/definitions/model-comparison.d.ts +1 -0
  278. package/dist/tools/definitions/model-comparison.js +4 -5
  279. package/dist/tools/definitions/model-comparison.js.map +1 -1
  280. package/dist/tools/definitions/money-currency.d.ts +5 -0
  281. package/dist/tools/definitions/money-currency.js +10 -0
  282. package/dist/tools/definitions/money-currency.js.map +1 -0
  283. package/dist/tools/definitions/operator-workflow.d.ts +5 -5
  284. package/dist/tools/definitions/operator-workflow.js +80 -27
  285. package/dist/tools/definitions/operator-workflow.js.map +1 -1
  286. package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
  287. package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
  288. package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
  289. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
  290. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
  291. package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
  292. package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
  293. package/dist/tools/definitions/platform-settings-limits.js +6 -0
  294. package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
  295. package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
  296. package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
  297. package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
  298. package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
  299. package/dist/tools/definitions/platform-settings-update.js +134 -0
  300. package/dist/tools/definitions/platform-settings-update.js.map +1 -0
  301. package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
  302. package/dist/tools/definitions/platform-setup-wave.js +1079 -0
  303. package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
  304. package/dist/tools/definitions/platform-setup.d.ts +686 -224
  305. package/dist/tools/definitions/platform-setup.js +313 -752
  306. package/dist/tools/definitions/platform-setup.js.map +1 -1
  307. package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
  308. package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
  309. package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
  310. package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
  311. package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
  312. package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
  313. package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
  314. package/dist/tools/definitions/prompt-batch-controls.js +40 -0
  315. package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
  316. package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
  317. package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
  318. package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
  319. package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
  320. package/dist/tools/definitions/prompt-text-projection.js +62 -0
  321. package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
  322. package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
  323. package/dist/tools/definitions/reviewer-paid.js +115 -0
  324. package/dist/tools/definitions/reviewer-paid.js.map +1 -0
  325. package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
  326. package/dist/tools/definitions/routing-condition-projection.js +97 -0
  327. package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
  328. package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
  329. package/dist/tools/definitions/schedule-selection-hints.js +42 -0
  330. package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
  331. package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
  332. package/dist/tools/definitions/scheduled-task-alias.js +207 -0
  333. package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
  334. package/dist/tools/definitions/session.js +3 -3
  335. package/dist/tools/definitions/session.js.map +1 -1
  336. package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
  337. package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
  338. package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
  339. package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
  340. package/dist/tools/definitions/shared-input.helpers.js +323 -0
  341. package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
  342. package/dist/tools/definitions/shared.d.ts +396 -307
  343. package/dist/tools/definitions/shared.js +430 -652
  344. package/dist/tools/definitions/shared.js.map +1 -1
  345. package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
  346. package/dist/tools/definitions/shipped-output-names.js +123 -0
  347. package/dist/tools/definitions/shipped-output-names.js.map +1 -0
  348. package/dist/tools/definitions/task-state.d.ts +5 -5
  349. package/dist/tools/definitions/task-state.js +2 -1
  350. package/dist/tools/definitions/task-state.js.map +1 -1
  351. package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
  352. package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
  353. package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
  354. package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
  355. package/dist/tools/definitions/telegram-pool-policy.js +56 -0
  356. package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
  357. package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
  358. package/dist/tools/definitions/touch-history-alias.js +99 -0
  359. package/dist/tools/definitions/touch-history-alias.js.map +1 -0
  360. package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
  361. package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
  362. package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
  363. package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
  364. package/dist/tools/definitions/trigger-argument.schema.js +23 -0
  365. package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
  366. package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
  367. package/dist/tools/definitions/trigger-claim-alias.js +90 -0
  368. package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
  369. package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
  370. package/dist/tools/definitions/trigger-echo-projection.js +41 -0
  371. package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
  372. package/dist/tools/definitions/trigger-upsert.tool.d.ts +29 -0
  373. package/dist/tools/definitions/trigger-upsert.tool.js +122 -0
  374. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
  375. package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
  376. package/dist/tools/definitions/v15-port-descriptions.js +30 -0
  377. package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
  378. package/dist/tools/definitions/variables.d.ts +44 -0
  379. package/dist/tools/definitions/variables.js +310 -0
  380. package/dist/tools/definitions/variables.js.map +1 -0
  381. package/dist/tools/definitions/voice-action-input.d.ts +9 -0
  382. package/dist/tools/definitions/voice-action-input.js +141 -0
  383. package/dist/tools/definitions/voice-action-input.js.map +1 -0
  384. package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
  385. package/dist/tools/definitions/widget-customization-compat.js +23 -0
  386. package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
  387. package/dist/tools/definitions.d.ts +1089 -636
  388. package/dist/tools/definitions.js +57 -27
  389. package/dist/tools/definitions.js.map +1 -1
  390. package/dist/tools/description-localization.js +3 -2
  391. package/dist/tools/description-localization.js.map +1 -1
  392. package/dist/tools/follow-up-request.d.ts +19 -0
  393. package/dist/tools/follow-up-request.js +81 -0
  394. package/dist/tools/follow-up-request.js.map +1 -0
  395. package/dist/tools/followup-revision.d.ts +4 -0
  396. package/dist/tools/followup-revision.js +29 -0
  397. package/dist/tools/followup-revision.js.map +1 -0
  398. package/dist/tools/incomplete-list.js +4 -0
  399. package/dist/tools/incomplete-list.js.map +1 -1
  400. package/dist/tools/inventory.js +47 -11
  401. package/dist/tools/inventory.js.map +1 -1
  402. package/dist/tools/operation-recovery.d.ts +4 -0
  403. package/dist/tools/operation-recovery.js +33 -0
  404. package/dist/tools/operation-recovery.js.map +1 -0
  405. package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
  406. package/dist/tools/registry-mapping-primary.cases.js +753 -0
  407. package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
  408. package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
  409. package/dist/tools/registry-mapping-secondary.cases.js +626 -0
  410. package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
  411. package/dist/tools/registry-mapping.cases.d.ts +8 -0
  412. package/dist/tools/registry-mapping.cases.js +13 -0
  413. package/dist/tools/registry-mapping.cases.js.map +1 -0
  414. package/dist/tools/registry-test-fixtures.d.ts +50 -0
  415. package/dist/tools/registry-test-fixtures.js +120 -0
  416. package/dist/tools/registry-test-fixtures.js.map +1 -0
  417. package/dist/tools/registry.d.ts +2 -0
  418. package/dist/tools/registry.js +82 -52
  419. package/dist/tools/registry.js.map +1 -1
  420. package/dist/tools/result.d.ts +1 -0
  421. package/dist/tools/result.js +90 -22
  422. package/dist/tools/result.js.map +1 -1
  423. package/dist/tools/toolsets.d.ts +16 -0
  424. package/dist/tools/toolsets.js +25 -1
  425. package/dist/tools/toolsets.js.map +1 -1
  426. package/dist/types/api-contract.gen.d.ts +105875 -22205
  427. package/dist/utils/credential-signatures.d.ts +3 -0
  428. package/dist/utils/credential-signatures.js +10 -0
  429. package/dist/utils/credential-signatures.js.map +1 -0
  430. package/dist/utils/data-source-column-name.d.ts +10 -0
  431. package/dist/utils/data-source-column-name.js +36 -0
  432. package/dist/utils/data-source-column-name.js.map +1 -0
  433. package/dist/utils/logger.d.ts +1 -0
  434. package/dist/utils/logger.js +32 -8
  435. package/dist/utils/logger.js.map +1 -1
  436. package/dist/utils/secret-read-boundary.d.ts +2 -0
  437. package/dist/utils/secret-read-boundary.js +88 -0
  438. package/dist/utils/secret-read-boundary.js.map +1 -0
  439. package/dist/utils/setup-secrets.d.ts +4 -0
  440. package/dist/utils/setup-secrets.js +40 -0
  441. package/dist/utils/setup-secrets.js.map +1 -0
  442. package/docs/agent-models.md +9 -0
  443. package/docs/agent-usage-guide.full.ru.md +1 -4
  444. package/docs/analytics-contract.md +67 -0
  445. package/docs/async-operation-lifecycle.md +10 -3
  446. package/docs/connect.ru.md +144 -4
  447. package/docs/contact-company-profile.md +17 -0
  448. package/docs/contact-recommendations.md +7 -0
  449. package/docs/crm-stage-pool.md +73 -0
  450. package/docs/customer-data.md +61 -0
  451. package/docs/edit-versions.md +36 -0
  452. package/docs/failure-semantics.md +17 -9
  453. package/docs/help-navigation.md +15 -42
  454. package/docs/host-compatibility-matrix.md +72 -93
  455. package/docs/host-setup.md +33 -35
  456. package/docs/invariants/public-api-and-contracts.md +16 -0
  457. package/docs/legacy-action-settings.md +21 -0
  458. package/docs/main-transfer-dependencies.md +38 -0
  459. package/docs/mcp2-parity.md +50 -0
  460. package/docs/modules/analytics.md +79 -0
  461. package/docs/modules/besales-mcp.md +137 -0
  462. package/docs/modules/dialog-review-report.md +38 -0
  463. package/docs/modules/dialogue-followup-adapters.md +39 -0
  464. package/docs/modules/message-reactions.md +17 -0
  465. package/docs/modules/network-mode.md +284 -0
  466. package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
  467. package/docs/pii-policy.md +21 -16
  468. package/docs/response-size-budget.md +197 -7
  469. package/docs/secret-read-boundary.md +102 -0
  470. package/docs/task-state.md +7 -2
  471. package/docs/telegram-pool-policy.md +19 -0
  472. package/docs/tool-effects.md +15 -9
  473. package/docs/tool-surface.md +205 -4
  474. package/docs/voice-actions-and-inbox.md +95 -0
  475. package/docs/wazzup-instagram-comments.md +26 -0
  476. package/package.json +17 -10
  477. package/scripts/api-source-loader.spec.mjs +40 -0
  478. package/scripts/audit-bridge-controls.mjs +129 -0
  479. package/scripts/audit-revert-mutants.mjs +107 -0
  480. package/scripts/bridge-api-input.spec.mjs +98 -0
  481. package/scripts/bridge-controls-mutants.mjs +130 -0
  482. package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
  483. package/scripts/brx4-ledger-payload.spec.mjs +127 -0
  484. package/scripts/build-onprem.mjs +108 -0
  485. package/scripts/connect-clients.sh +141 -0
  486. package/scripts/connect-scopes.mjs +166 -0
  487. package/scripts/connect-scopes.spec.mjs +83 -0
  488. package/scripts/emit-personal-link-carrier.mjs +31 -0
  489. package/scripts/emit-setup-init-schemas.mjs +24 -0
  490. package/scripts/emit-tool-routes.mjs +878 -0
  491. package/scripts/emit-tool-routes.spec.mjs +300 -0
  492. package/scripts/followup-registry.spec.mjs +107 -0
  493. package/scripts/generate-crm-rotation-contract.mjs +98 -0
  494. package/scripts/generate-followup-session-contract.mjs +16 -0
  495. package/scripts/icp-import-verification/mutate.cjs +70 -0
  496. package/scripts/import-secret-read-contract.mjs +53 -0
  497. package/scripts/install-claude-desktop.js +1 -1
  498. package/scripts/lag-decisions.mjs +37 -0
  499. package/scripts/lag-decisions.spec.mjs +87 -0
  500. package/scripts/lag-open-task-owners.mjs +46 -0
  501. package/scripts/lag-open-task-owners.spec.mjs +78 -0
  502. package/scripts/lag-payload.mjs +10 -0
  503. package/scripts/legacy-action-lag.spec.mjs +22 -0
  504. package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
  505. package/scripts/mcpcompat-handler.mjs +34 -0
  506. package/scripts/mcpcompat-loader.mjs +36 -0
  507. package/scripts/mcpcompat-typescript.mjs +3 -0
  508. package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
  509. package/scripts/prbr-round1-recheck.spec.mjs +605 -0
  510. package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
  511. package/scripts/publish-mcp-registry.mjs +98 -0
  512. package/scripts/publish-mcp-registry.spec.mjs +68 -0
  513. package/scripts/record-scheduled-task-call.mjs +26 -0
  514. package/scripts/refusal-probe.mjs +17 -0
  515. package/scripts/refusal-probe.spec.mjs +29 -0
  516. package/scripts/registry-diff.mjs +502 -0
  517. package/scripts/registry-diff.spec.mjs +787 -0
  518. package/scripts/request-query.mjs +43 -0
  519. package/scripts/request-query.spec.mjs +82 -0
  520. package/scripts/route-lag.mjs +23 -0
  521. package/scripts/route-lag.spec.mjs +30 -0
  522. package/scripts/sample-args.mjs +174 -0
  523. package/scripts/sample-args.spec.mjs +160 -0
  524. package/scripts/shipped-definitions.mjs +197 -0
  525. package/scripts/shipped-definitions.spec.mjs +57 -0
  526. package/scripts/shipped-inputs.spec.mjs +136 -0
  527. package/scripts/shipped-recordings.spec.mjs +19 -0
  528. package/scripts/shipped-ref.d.mts +5 -0
  529. package/scripts/shipped-ref.mjs +20 -0
  530. package/scripts/shipped-ref.spec.mjs +59 -0
  531. package/scripts/shipped-registry.mjs +107 -0
  532. package/scripts/shipped-sample-candidates.mjs +69 -0
  533. package/scripts/shipped-sample-candidates.spec.mjs +117 -0
  534. package/scripts/shipped-sample.mjs +868 -0
  535. package/scripts/shipped-sample.spec.mjs +451 -0
  536. package/scripts/sync-agent-model-schemas.mjs +72 -0
  537. package/scripts/sync-api-contracts.mjs +85 -0
  538. package/scripts/sync-api-contracts.spec.mjs +144 -0
  539. package/scripts/sync-contract-ledger-schemas.mjs +161 -0
  540. package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
  541. package/scripts/sync-prompt-draft-schema.mjs +92 -0
  542. package/scripts/sync-route-map.mjs +94 -0
  543. package/scripts/sync-schema-descriptions.mjs +25 -0
  544. package/scripts/sync-tool-inventory.mjs +27 -0
  545. package/scripts/sync-trigger-argument-schema.mjs +121 -0
  546. package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
  547. package/scripts/sync-voice-actions-contract.mjs +67 -0
  548. package/scripts/sync-voice-actions-tools.mjs +97 -0
  549. package/scripts/sync-wave-id-schemas.mjs +55 -0
  550. package/scripts/tool-input-schemas.mjs +46 -0
  551. package/scripts/tool-input-schemas.spec.mjs +50 -0
  552. package/scripts/verify-followup-adapters.mjs +235 -0
  553. package/scripts/verify-secret-read-import.mjs +84 -0
  554. package/scripts/verify-secret-read-mutants.mjs +143 -0
  555. package/dist/tools/definitions/analytics.d.ts +0 -40
  556. package/dist/tools/definitions/analytics.js +0 -233
  557. package/dist/tools/definitions/analytics.js.map +0 -1
  558. package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
  559. package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
  560. package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
  561. package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
  562. package/dist/tools/definitions/dialogue-audit.js +0 -292
  563. package/dist/tools/definitions/dialogue-audit.js.map +0 -1
  564. package/dist/tools/definitions/getcourse-wave.js +0 -519
  565. package/dist/tools/definitions/getcourse-wave.js.map +0 -1
  566. package/dist/tools/definitions/operational-overview.d.ts +0 -3
  567. package/dist/tools/definitions/operational-overview.js +0 -23
  568. package/dist/tools/definitions/operational-overview.js.map +0 -1
  569. package/dist/tools/definitions/scheduled-tasks.js +0 -173
  570. package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
  571. package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
  572. package/dist/tools/definitions/trigger-contact-claims.js +0 -60
  573. package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
  574. package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
  575. package/dist/tools/registry-mapping-cases-core.js +0 -963
  576. package/dist/tools/registry-mapping-cases-core.js.map +0 -1
  577. package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
  578. package/dist/tools/registry-mapping-cases-platform.js +0 -1052
  579. package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
  580. package/dist/tools/trigger-action-config.d.ts +0 -49
  581. package/dist/tools/trigger-action-config.js +0 -171
  582. package/dist/tools/trigger-action-config.js.map +0 -1
  583. package/docs/evals/model-behavior-scorecard.md +0 -80
  584. package/docs/operation-coverage.md +0 -114
  585. package/scripts/mock-credentials.js +0 -77
  586. package/scripts/model-eval-server.js +0 -213
  587. package/scripts/run-model-eval.js +0 -447
@@ -0,0 +1,121 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import openapiTS from 'openapi-typescript';
5
+ import { z } from 'zod';
6
+ import { linkTrackingTools } from '../dist/tools/definitions/link-tracking.js';
7
+ import { triggerActionArgumentSchema } from '../dist/tools/definitions/trigger-argument.schema.js';
8
+ import { toolDefinitions } from '../dist/tools/definitions.js';
9
+ import { triggerActionItemSchema } from '../dist/tools/definitions/platform-setup.js';
10
+ import { canonicalCallOperatorTaskSchema } from '../dist/tools/definitions/call-operator-task.schema.js';
11
+
12
+ // Границы опубликованных полей — из контракта выбранного API checkout, не из ручного JSON.
13
+ const contractsDir = process.env.BESALES_API_CONTRACTS_DIR?.trim() || '../besales-api/contracts';
14
+ let callOperator;
15
+ await openapiTS(pathToFileURL(resolve(contractsDir, 'openapi-besales-api.yaml')), {
16
+ transform(schema) {
17
+ if (schema.properties?.step_type?.enum?.includes('CALL_OPERATOR') && schema.properties.task_text && schema.properties.task_due_hours) callOperator = schema;
18
+ },
19
+ });
20
+ if (!callOperator?.properties?.task_text || !callOperator.properties.task_due_hours) {
21
+ throw new Error('CALL_OPERATOR_TASK_CONTRACT_MISSING');
22
+ }
23
+ const action = z.toJSONSchema(triggerActionItemSchema, {
24
+ target: 'draft-7',
25
+ io: 'input',
26
+ });
27
+ delete action.$schema;
28
+ const canonical = z.toJSONSchema(canonicalCallOperatorTaskSchema, {
29
+ target: 'draft-7',
30
+ io: 'input',
31
+ });
32
+ for (const [name, alias] of [
33
+ ['task_text', 'taskText'],
34
+ ['task_due_hours', 'taskDueHours'],
35
+ ]) {
36
+ const property = callOperator.properties[name];
37
+ const nullable = property.anyOf?.some((branch) => branch.type === 'null');
38
+ const value = property.anyOf?.find((branch) => branch.type !== 'null');
39
+ const runtime = canonical.properties[name].anyOf.find((branch) => branch.type !== 'null');
40
+ // refine считает Unicode; JSON Schema maxLength считает те же кодовые точки.
41
+ if (
42
+ !nullable ||
43
+ (name === 'task_text'
44
+ ? value?.type !== 'string' || value.maxLength !== 500
45
+ : value?.type !== runtime.type ||
46
+ value.minimum !== runtime.minimum ||
47
+ value.maximum !== runtime.maximum)
48
+ ) {
49
+ throw new Error(`CALL_OPERATOR_TASK_CONTRACT_DRIFT:${name}`);
50
+ }
51
+ canonical.properties[name] = {
52
+ ...property,
53
+ description: canonical.properties[name].description,
54
+ };
55
+ action.properties.callOperatorConfig.properties[alias] = {
56
+ ...property,
57
+ description: action.properties.callOperatorConfig.properties[alias].description,
58
+ };
59
+ }
60
+ action.properties.config = {
61
+ ...action.properties.config,
62
+ properties: canonical.properties,
63
+ };
64
+
65
+ // Публикуемые объявления берутся из исполняемой схемы: refine не обещает maxLength в JSON Schema.
66
+ const target = new URL('../src/schemas/mcp-tools.json', import.meta.url);
67
+ const registry = JSON.parse(readFileSync(target, 'utf8'));
68
+ // Assigned Instagram branches follow their executable schemas, including omission/null.
69
+ for (const [name, field] of [
70
+ ['besales_platform_settings_update', 'instagram_comment_behavior'],
71
+ ['besales_trigger_upsert', 'instagram_comment_kind'],
72
+ ]) {
73
+ const definition = toolDefinitions.find((entry) => entry.name === name);
74
+ const schema = definition?.schema.shape?.[field];
75
+ const tool = registry.tools.find((entry) => entry.name === name);
76
+ if (!schema || !tool?.inputSchema?.properties) throw new Error(`INSTAGRAM_SCHEMA_MISSING:${name}`);
77
+ const published = z.toJSONSchema(schema, { target: 'draft-7', io: 'input' });
78
+ delete published.$schema;
79
+ tool.inputSchema.properties[field] = published;
80
+ }
81
+ const argument = z.toJSONSchema(triggerActionArgumentSchema, { target: 'draft-7', io: 'input' });
82
+ delete argument.$schema;
83
+ for (const name of ['besales_trigger_upsert']) {
84
+ const tool = registry.tools.find((entry) => entry.name === name);
85
+ if (!tool?.inputSchema?.properties?.arguments)
86
+ throw new Error(`TRIGGER_ARGUMENT_SCHEMA_MISSING:${name}`);
87
+ tool.inputSchema.properties.arguments.items = argument;
88
+ if (!tool.inputSchema.properties.actions)
89
+ throw new Error(`TRIGGER_ACTION_SCHEMA_MISSING:${name}`);
90
+ const publishedAction = tool.inputSchema.properties.actions.items;
91
+ publishedAction.properties.callOperatorConfig = action.properties.callOperatorConfig;
92
+ publishedAction.properties.config = action.properties.config;
93
+ }
94
+ // Поля каталога публикуются из исполняемой схемы: null очистки и refine входят в носитель.
95
+ for (const name of ['besales_tracked_link_create', 'besales_tracked_link_update']) {
96
+ const definition = linkTrackingTools.find((entry) => entry.name === name);
97
+ const tool = registry.tools.find((entry) => entry.name === name);
98
+ if (!definition || !tool) throw new Error(`LINK_CATALOG_SCHEMA_MISSING:${name}`);
99
+ const derived = z.toJSONSchema(definition.schema, { target: 'draft-7', io: 'input' });
100
+ delete derived.$schema;
101
+ if (!derived.properties?.personal_url_variable)
102
+ throw new Error(`PERSONAL_URL_SCHEMA_MISSING:${name}`);
103
+ if (!derived.properties.personal_url_variable.description)
104
+ throw new Error(`PERSONAL_URL_DESCRIPTION_MISSING:${name}`);
105
+ // Остальные поля сохраняют принятые описания lpv; добавляется только новый контракт.
106
+ let personalUrlVariable = derived.properties.personal_url_variable;
107
+ if (name === 'besales_tracked_link_update') {
108
+ const { anyOf, ...metadata } = personalUrlVariable;
109
+ if (anyOf?.length !== 2 || anyOf[0].type !== 'string' || anyOf[1].type !== 'null') {
110
+ throw new Error(`PERSONAL_URL_NULLABLE_SCHEMA_UNEXPECTED:${name}`);
111
+ }
112
+ // Отгруженная форма сохраняет ограничения строки и отдельное разрешение очистки через null.
113
+ personalUrlVariable = { ...anyOf[0], ...metadata, type: ['string', 'null'] };
114
+ }
115
+ tool.inputSchema.properties.personal_url_variable = personalUrlVariable;
116
+ }
117
+ const serialized = `${JSON.stringify(registry, null, 2)}\n`;
118
+ writeFileSync(target, serialized);
119
+ // Уже собранный пакет и публикуемый исходник обязаны рекламировать одинаковые ограничения.
120
+ mkdirSync(new URL('../dist/schemas/', import.meta.url), { recursive: true });
121
+ writeFileSync(new URL('../dist/schemas/mcp-tools.json', import.meta.url), serialized);
@@ -0,0 +1,12 @@
1
+ import { copyFileSync, readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+
4
+ // Межрепозиторный маппер переносится из явного канонического входа, без второй копии правила.
5
+ const source = process.env.BESALES_TRIGGER_REPEAT_MAPPING_SOURCE;
6
+ if (!source) throw new Error('BESALES_TRIGGER_REPEAT_MAPPING_SOURCE обязателен');
7
+ const destination = new URL('../src/shared/utils/trigger-repeat-mapping.ts', import.meta.url);
8
+ if (process.argv.includes('--check')) {
9
+ if (!readFileSync(resolve(source)).equals(readFileSync(destination))) {
10
+ throw new Error('Маппер повторов моста разошёлся с каноническим маппером переноса');
11
+ }
12
+ } else copyFileSync(resolve(source), destination);
@@ -0,0 +1,67 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { readFileSync, writeFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { load } from 'js-yaml';
5
+ import ts from 'typescript';
6
+
7
+ // Узкий срез принятого API: не обновляет соседние устаревшие контракты моста.
8
+ const apiFile = resolve(
9
+ process.env.BESALES_API_CONTRACTS_DIR || '../besales-api/contracts',
10
+ 'openapi-besales-api.yaml',
11
+ );
12
+ const schemas = load(readFileSync(apiFile, 'utf8')).components.schemas;
13
+ const voiceConfigs = Object.fromEntries(
14
+ schemas.AgentActionStepViewDto.properties.config.oneOf
15
+ .filter((schema) =>
16
+ ['VOICE_INITIATE_OUTBOUND_CALL', 'VOICE_TRANSFER_CALL'].includes(
17
+ schema.properties?.step_type?.enum?.[0],
18
+ ),
19
+ )
20
+ .map((schema) => [schema.properties.step_type.enum[0], schema]),
21
+ );
22
+ const purchased = schemas.ListConversationsQueryDto.properties.purchased;
23
+ const hasPurchase = schemas.ConversationListRowDto.properties.hasPurchase;
24
+ const mapperFile = resolve(apiFile, '../../src/control/agent-config/trigger-action.mapper.ts');
25
+ const mapperText = readFileSync(mapperFile, 'utf8');
26
+ const mapper = ts.createSourceFile(mapperFile, mapperText, ts.ScriptTarget.Latest, true);
27
+ const relationNames = [];
28
+ function visit(node) {
29
+ if (
30
+ ts.isVariableDeclaration(node) &&
31
+ node.name.getText(mapper) === 'LEGACY_STEP_MAPPINGS' &&
32
+ node.initializer &&
33
+ ts.isObjectLiteralExpression(node.initializer)
34
+ ) {
35
+ for (const property of node.initializer.properties) {
36
+ if (!ts.isPropertyAssignment(property)) throw new Error('VOICE_RELATION_MAPPING_UNREADABLE');
37
+ relationNames.push(property.name.getText(mapper).replace(/^['"]|['"]$/gu, ''));
38
+ }
39
+ }
40
+ ts.forEachChild(node, visit);
41
+ }
42
+ visit(mapper);
43
+ if (
44
+ Object.keys(voiceConfigs).length !== 2 ||
45
+ purchased?.type !== 'boolean' ||
46
+ hasPurchase?.type !== 'boolean' ||
47
+ relationNames.length < 30
48
+ )
49
+ throw new Error('VOICE_PURCHASE_API_CONTRACT_MISSING');
50
+ writeFileSync(
51
+ new URL('../src/schemas/voice-actions-api.contract.json', import.meta.url),
52
+ JSON.stringify(
53
+ {
54
+ source: {
55
+ file: 'besales-api/contracts/openapi-besales-api.yaml',
56
+ sha256: createHash('sha256').update(readFileSync(apiFile)).digest('hex'),
57
+ relationMapperSha256: createHash('sha256').update(mapperText).digest('hex'),
58
+ },
59
+ voiceConfigs,
60
+ purchased,
61
+ hasPurchase,
62
+ relationNames,
63
+ },
64
+ null,
65
+ 2,
66
+ ) + '\n',
67
+ );
@@ -0,0 +1,97 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ const registryFile = new URL('../src/schemas/mcp-tools.json', import.meta.url);
3
+ const registry = JSON.parse(readFileSync(registryFile, 'utf8'));
4
+ const contract = JSON.parse(
5
+ readFileSync(new URL('../src/schemas/voice-actions-api.contract.json', import.meta.url), 'utf8'),
6
+ );
7
+ const trigger = registry.tools.find((tool) => tool.name === 'besales_trigger_upsert');
8
+ const item = trigger.inputSchema.properties.actions.items;
9
+ delete item.required;
10
+ item.anyOf = ['actionType', 'stepType', 'type'].map((field) => ({ required: [field] }));
11
+ item.properties.stepType = {
12
+ type: 'string',
13
+ description:
14
+ 'Канонический тип шага v2; для звонков VOICE_INITIATE_OUTBOUND_CALL / VOICE_TRANSFER_CALL.',
15
+ };
16
+ item.properties.type = { type: 'string', description: 'Совместимое имя типа действия.' };
17
+ for (const [type, keys] of Object.entries({
18
+ VOICE_INITIATE_OUTBOUND_CALL: ['initiateOutboundCall', 'initiateOutboundCallConfig'],
19
+ VOICE_TRANSFER_CALL: ['transferCall', 'transferCallConfig'],
20
+ })) {
21
+ for (const key of keys) {
22
+ const schema = structuredClone(contract.voiceConfigs[type]);
23
+ delete schema.required;
24
+ schema.additionalProperties = true;
25
+ item.properties[key] = {
26
+ anyOf: [{}, schema],
27
+ description:
28
+ 'Совместимый ввод голосового конфига. Используй один config или одно прежнее имя; relation вместе с input, даже null, отклоняется до HTTP.',
29
+ };
30
+ }
31
+ }
32
+ const hint =
33
+ ' Голосовые шаги: канон stepType=VOICE_INITIATE_OUTBOUND_CALL / VOICE_TRANSFER_CALL и config. Старые initiateOutboundCall/initiateOutboundCallConfig и transferCall/transferCallConfig принимаются как ввод. Конфликты и непустой чужой конфиг отклоняются до HTTP; снимается только служебное эхо верхнего уровня, вложенные поля сохраняются. Редактирование не выполняет звонок или перевод.';
34
+ if (!trigger.description.includes('Голосовые шаги: канон')) trigger.description += hint;
35
+ const query = registry.tools.find((tool) => tool.name === 'besales_dialogues_query');
36
+ Object.assign(query.inputSchema.properties, {
37
+ source: {
38
+ type: 'string',
39
+ enum: ['export', 'inbox'],
40
+ description:
41
+ 'По умолчанию export — прежняя выгрузка. inbox — список Входящих с серверным признаком покупки, отдельный маршрут и набор фильтров.',
42
+ },
43
+ channel_id: {
44
+ type: 'string',
45
+ format: 'uuid',
46
+ description: 'Только source=inbox: ограничить область покупки каналом.',
47
+ },
48
+ contact_id: { type: 'string', format: 'uuid' },
49
+ purchased: contract.purchased,
50
+ has_payment: {
51
+ type: 'boolean',
52
+ description: 'Только source=inbox: оплата независимо от покупки.',
53
+ },
54
+ with_totals: {
55
+ type: 'boolean',
56
+ description: 'Только source=inbox: ограниченные итоги первой страницы.',
57
+ },
58
+ });
59
+ const queryHint =
60
+ ' source=inbox читает Входящие через POST /workspaces/:workspaceId/conversations/search (scope read:conversations): purchased=true — заказ агента ИЛИ продажная стадия, false — нет обоих признаков. Это не оплата; has_payment независим. channel_id ограничивает область каналом, без него — видимыми каналами человека. hasPurchase, отбор и итоги считает API до пагинации. Продолжай с source=inbox, теми же фильтрами и cursor; with_totals только на первой странице, capped=true означает 999+. Фильтры выгрузки (action_type, даты, platform_ids и прочие) с inbox не смешиваются: отказ до HTTP.';
61
+ if (!query.description.includes('source=inbox читает')) query.description += queryHint;
62
+ writeFileSync(registryFile, JSON.stringify(registry, null, 2) + '\n');
63
+ const mapFile = new URL('../src/schemas/mcp-v2-route-map.json', import.meta.url);
64
+ const rows = JSON.parse(readFileSync(mapFile, 'utf8')).filter(
65
+ (row) => row.tool !== 'besales_dialogues_query@inbox',
66
+ );
67
+ const id = '00000000-0000-4000-8000-000000000001';
68
+ rows.push({
69
+ tool: 'besales_dialogues_query@inbox',
70
+ backendTarget: 'besales-api',
71
+ canonicalArgs: {
72
+ source: 'inbox',
73
+ workspace_id: id,
74
+ channel_id: id,
75
+ contact_id: id,
76
+ purchased: false,
77
+ has_payment: false,
78
+ with_totals: true,
79
+ limit: 2,
80
+ cursor: 'next',
81
+ },
82
+ expected: {
83
+ method: 'POST',
84
+ pathTemplate: '/workspaces/:workspaceId/conversations/search',
85
+ path: `/workspaces/${id}/conversations/search`,
86
+ body: {
87
+ channelId: id,
88
+ contactId: id,
89
+ purchased: false,
90
+ hasPayment: false,
91
+ withTotals: true,
92
+ limit: 2,
93
+ cursor: 'next',
94
+ },
95
+ },
96
+ });
97
+ writeFileSync(mapFile, JSON.stringify(rows, null, 2) + '\n');
@@ -0,0 +1,55 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { z } from 'zod';
3
+
4
+ import { platformSetupWaveTools } from '../dist/tools/definitions/platform-setup-wave.js';
5
+
6
+ // Ограничения берутся из исполняемых схем; подписи объясняют номера без имён таблиц.
7
+ const numericPaths = {
8
+ besales_getcourse_wave_import: [
9
+ ['pipeline_id'],
10
+ ['status_id'],
11
+ ['group_id'],
12
+ ['preflight', 'offer_id'],
13
+ ],
14
+ besales_getcourse_wave_run_start: [['preflight', 'offer_id']],
15
+ besales_getcourse_wave_run_batch_start: [['segments', '[]', 'preflight', 'offer_id']],
16
+ };
17
+ const descriptions = {
18
+ pipeline_id: 'Номер воронки GetCourse: безопасное целое от нуля.',
19
+ status_id: 'Номер стадии GetCourse: безопасное целое от нуля.',
20
+ group_id: 'Номер группы GetCourse: безопасное целое от нуля.',
21
+ offer_id:
22
+ 'Номер предложения GetCourse: безопасное целое от нуля. Сам по себе не выбирает сделки для отправки.',
23
+ };
24
+
25
+ function atPath(schema, path) {
26
+ return path.reduce(
27
+ (node, field) => (field === '[]' ? node?.items : node?.properties?.[field]),
28
+ schema,
29
+ );
30
+ }
31
+
32
+ const target = new URL('../src/schemas/mcp-tools.json', import.meta.url);
33
+ const registry = JSON.parse(readFileSync(target, 'utf8'));
34
+ for (const [name, paths] of Object.entries(numericPaths)) {
35
+ const definition = platformSetupWaveTools.find((tool) => tool.name === name);
36
+ const contract = registry.tools.find((tool) => tool.name === name);
37
+ if (!definition || !contract) throw new Error(`WAVE_TOOL_MISSING:${name}`);
38
+ const generated = z.toJSONSchema(definition.schema, {
39
+ target: 'draft-7',
40
+ io: 'input',
41
+ });
42
+ for (const path of paths) {
43
+ const published = atPath(contract.inputSchema, path);
44
+ const executable = atPath(generated, path);
45
+ if (!published || executable?.type !== 'integer') {
46
+ throw new Error(`WAVE_ID_SCHEMA_MISSING:${name}:${path.join('.')}`);
47
+ }
48
+ for (const key of Object.keys(published)) delete published[key];
49
+ Object.assign(published, executable, { description: descriptions[path.at(-1)] });
50
+ }
51
+ }
52
+ const serialized = `${JSON.stringify(registry, null, 2)}\n`;
53
+ writeFileSync(target, serialized);
54
+ mkdirSync(new URL('../dist/schemas/', import.meta.url), { recursive: true });
55
+ writeFileSync(new URL('../dist/schemas/mcp-tools.json', import.meta.url), serialized);
@@ -0,0 +1,46 @@
1
+ // Схемы входа инструментов для выгрузки в besales-api: отгруженного реестра и ветки v2 — отдельными картами «имя →
2
+ // схема».
3
+ //
4
+ // ⭐ Зачем серверу схемы. Навигация рабочей области называет ассистенту следующий инструмент и аргументы к нему.
5
+ // Аргумент мимо схемы мост отвергнет или молча срежет, и шаг выполнится не тем, что обещано, — а сервер без схем
6
+ // этого не видит. Какие инструменты назовёт навигация, эмиттер знать не может (файлов API у него нет), поэтому
7
+ // выгружаются схемы ВСЕХ инструментов обоих реестров.
8
+ //
9
+ // ⛔ Схемы едут отдельными ключами верхнего уровня, а не полем записей `tools`: иначе меняются все записи и ломается
10
+ // обещание «записи побайтово прежние».
11
+
12
+ /**
13
+ * Карта «имя → схема входа», упорядоченная по имени: порядок реестра не должен шевелить выгрузку.
14
+ *
15
+ * @param {ReadonlyArray<{ name: string; inputSchema?: unknown }>} tools инструменты реестра
16
+ * @param {string} label название реестра для сообщения об отказе
17
+ * @returns {Record<string, unknown>}
18
+ */
19
+ export function collectInputSchemas(tools, label) {
20
+ const schemas = new Map();
21
+ for (const tool of tools) {
22
+ if (typeof tool.name !== 'string' || tool.name.length === 0) {
23
+ throw new Error(`${label}: инструмент без имени`);
24
+ }
25
+ if (schemas.has(tool.name)) {
26
+ throw new Error(`${label}: инструмент ${tool.name} объявлен дважды`);
27
+ }
28
+ if (tool.inputSchema === null || typeof tool.inputSchema !== 'object') {
29
+ throw new Error(`${label}: у инструмента ${tool.name} нет схемы входа`);
30
+ }
31
+ schemas.set(tool.name, tool.inputSchema);
32
+ }
33
+ return Object.fromEntries([...schemas].sort(([left], [right]) => left.localeCompare(right)));
34
+ }
35
+
36
+ /**
37
+ * Имена выгруженных инструментов без схемы ветки v2. Непустой список — отказ выгрузки сразу, для всех инструментов:
38
+ * сторож навигации на сервере покраснел бы позже и только на своём инструменте.
39
+ *
40
+ * @param {ReadonlyArray<string>} names имена записей `tools`
41
+ * @param {Record<string, unknown>} v2Schemas карта схем ветки v2
42
+ * @returns {string[]}
43
+ */
44
+ export function namesWithoutSchema(names, v2Schemas) {
45
+ return [...new Set(names)].filter((name) => !Object.hasOwn(v2Schemas, name)).sort();
46
+ }
@@ -0,0 +1,50 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { collectInputSchemas, namesWithoutSchema } from './tool-input-schemas.mjs';
4
+
5
+ describe('collectInputSchemas — карта «имя → схема входа» для выгрузки', () => {
6
+ it('отдаёт схему каждого инструмента по имени, упорядоченно по имени', () => {
7
+ const actual = collectInputSchemas(
8
+ [
9
+ { name: 'besales_b', inputSchema: { type: 'object', properties: { b: { type: 'string' } } } },
10
+ { name: 'besales_a', inputSchema: { type: 'object', properties: {} } },
11
+ ],
12
+ 'ветка v2',
13
+ );
14
+
15
+ expect(Object.keys(actual)).toEqual(['besales_a', 'besales_b']);
16
+ expect(actual.besales_b).toEqual({ type: 'object', properties: { b: { type: 'string' } } });
17
+ });
18
+
19
+ it('⛔ повтор имени — отказ, а не молча последняя схема', () => {
20
+ expect(() =>
21
+ collectInputSchemas(
22
+ [
23
+ { name: 'besales_a', inputSchema: { type: 'object' } },
24
+ { name: 'besales_a', inputSchema: { type: 'object', required: ['x'] } },
25
+ ],
26
+ 'ветка v2',
27
+ ),
28
+ ).toThrow('besales_a объявлен дважды');
29
+ });
30
+
31
+ it('⛔ инструмент без схемы входа — отказ с именем реестра', () => {
32
+ expect(() => collectInputSchemas([{ name: 'besales_a' }], 'отгруженный реестр')).toThrow(
33
+ 'отгруженный реестр: у инструмента besales_a нет схемы входа',
34
+ );
35
+ });
36
+ });
37
+
38
+ describe('namesWithoutSchema — выгруженные инструменты без схемы ветки v2', () => {
39
+ it('⛔ называет каждое имя без схемы один раз', () => {
40
+ expect(
41
+ namesWithoutSchema(['besales_a', 'besales_b', 'besales_b', 'besales_c'], {
42
+ besales_a: { type: 'object' },
43
+ }),
44
+ ).toEqual(['besales_b', 'besales_c']);
45
+ });
46
+
47
+ it('все имена со схемой — пусто', () => {
48
+ expect(namesWithoutSchema(['besales_a'], { besales_a: { type: 'object' } })).toEqual([]);
49
+ });
50
+ });