@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,37 @@
1
+ /** ACTIVE без причины и точной пары ID + ключ не разрешает расхождение отгруженного контракта. */
2
+ export function lagDecisionErrors(registry, decisionsText) {
3
+ const decisions = new Map();
4
+ const ids = new Set();
5
+ const errors = [];
6
+ for (const match of decisionsText.matchAll(/<!-- contract-ledger-decision (.+?) -->/gu)) {
7
+ const entry = JSON.parse(match[1]);
8
+ if (entry.status !== 'ACTIVE') continue;
9
+ if (
10
+ typeof entry.id !== 'string' ||
11
+ !/^\d+(?:\.\d+)+:[^\s;,]+$/u.test(entry.id) ||
12
+ typeof entry.key !== 'string' ||
13
+ typeof entry.reason !== 'string' ||
14
+ !entry.reason.replace(/decision:[^\s;,]+/gu, '').replace(/[;\s]/gu, '') ||
15
+ ids.has(entry.id) ||
16
+ decisions.has(entry.key)
17
+ ) {
18
+ errors.push(`решение ${entry.id}: нужны уникальные ID, ключ и непустая причина`);
19
+ continue;
20
+ }
21
+ ids.add(entry.id);
22
+ decisions.set(entry.key, entry);
23
+ }
24
+ for (const [section, rows] of Object.entries(registry)) {
25
+ if (rows === null || typeof rows !== 'object' || Array.isArray(rows)) continue;
26
+ for (const [key, row] of Object.entries(rows)) {
27
+ if (row?.owner !== 'DELIBERATE') continue;
28
+ const fullKey = `${section}:${key}`;
29
+ const entry = decisions.get(fullKey);
30
+ const reason = typeof row.reason === 'string' ? row.reason : '';
31
+ const refs = [...reason.matchAll(/decision:([^\s;,]+)/gu)].map((match) => match[1]);
32
+ if (entry === undefined || !refs.includes(entry.id))
33
+ errors.push(`${fullKey}: нет ACTIVE решения для точного ключа и ссылки`);
34
+ }
35
+ }
36
+ return errors.sort();
37
+ }
@@ -0,0 +1,87 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { createRequire } from 'node:module';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { lagDecisionErrors } from './lag-decisions.mjs';
6
+ import { lagMetadataErrors } from './registry-diff.mjs';
7
+
8
+ const root = fileURLToPath(new URL('../..', import.meta.url));
9
+ const text = readFileSync(`${root}/besales-api/docs/contract-ledger/cledg-decisions.md`, 'utf8');
10
+ const registry = JSON.parse(
11
+ readFileSync(new URL('../src/schemas/shipped-lag.json', import.meta.url), 'utf8'),
12
+ );
13
+ const entries = [...text.matchAll(/<!-- contract-ledger-decision (.+?) -->/gu)]
14
+ .map((match) => JSON.parse(match[1]))
15
+ .filter((entry) => entry.status === 'ACTIVE');
16
+ const restorations = [...text.matchAll(/<!-- contract-ledger-restoration (.+?) -->/gu)].map(
17
+ (match) => JSON.parse(match[1]),
18
+ );
19
+ const require = createRequire(import.meta.url);
20
+ const api = require(`${root}/besales-api/scripts/contract-ledger/lag-owners.js`);
21
+
22
+ describe('адресное решение обязательно у производителя и независимого API-потребителя', () => {
23
+ it('все 90 строк аудита и 26 прежних ссылок разобраны; каждая ACTIVE имеет точный ключ', () => {
24
+ expect(
25
+ [...entries, ...restorations]
26
+ .filter((entry) => entry.auditNumber)
27
+ .map((entry) => entry.auditNumber)
28
+ .sort((a, b) => a - b),
29
+ ).toEqual(Array.from({ length: 90 }, (_, index) => index + 1));
30
+ expect(
31
+ [...entries, ...restorations]
32
+ .filter((entry) => entry.referenceNumber)
33
+ .map((entry) => entry.referenceNumber)
34
+ .sort((a, b) => a - b),
35
+ ).toEqual(Array.from({ length: 26 }, (_, index) => index + 1));
36
+ expect(lagDecisionErrors(registry, text)).toEqual([]);
37
+ expect(lagMetadataErrors(registry)).toEqual([]);
38
+ const rows = api.collectRows(registry, 'bridge');
39
+ expect(api.ownershipErrors(rows, text, '', { requireOpenOwners: false })).toEqual([]);
40
+ for (const entry of entries) {
41
+ expect(rows.filter((row) => row.key === entry.key)).toHaveLength(1);
42
+ expect(entry.reason.trim()).not.toBe('');
43
+ for (const file of [...entry.code, ...entry.tests])
44
+ expect(readFileSync(`${root}/${file}`, 'utf8').length, file).toBeGreaterThan(0);
45
+ }
46
+ for (const entry of restorations) {
47
+ expect(
48
+ rows.filter((row) => row.key === entry.key),
49
+ entry.key,
50
+ ).toHaveLength(0);
51
+ for (const file of [...entry.code, ...entry.tests])
52
+ expect(readFileSync(`${root}/${file}`, 'utf8').length, file).toBeGreaterThan(0);
53
+ }
54
+ });
55
+
56
+ it.each(entries)('$id: удаление причины или ACTIVE не проходит ни один сторож', (entry) => {
57
+ for (const broken of [
58
+ { ...entry, reason: '' },
59
+ { ...entry, reason: 'decision:' + entry.id },
60
+ { ...entry, status: 'PROPOSED' },
61
+ { ...entry, key: entry.key + '-other' },
62
+ ]) {
63
+ const changed = text.replace(JSON.stringify(entry), JSON.stringify(broken));
64
+ expect(lagDecisionErrors(registry, changed), entry.id).not.toEqual([]);
65
+ expect(
66
+ api.ownershipErrors(api.collectRows(registry, 'bridge'), changed, '', {
67
+ requireOpenOwners: false,
68
+ }),
69
+ entry.id,
70
+ ).not.toEqual([]);
71
+ }
72
+ });
73
+
74
+ it.each(['contractLag', 'optionalInputExtensions', 'contractExtensions'])(
75
+ '%s: одна ссылка вместо причины недостаточна',
76
+ (section) => {
77
+ const row = {
78
+ owner: 'DELIBERATE',
79
+ severity: 'DELIBERATE',
80
+ reason: 'decision:6.19.51:empty',
81
+ };
82
+ expect(lagMetadataErrors({ [section]: { field: row } })).toEqual([`${section}:field`]);
83
+ expect(api.metadataErrors(section, row)).toContain('пустая причина');
84
+ expect(lagDecisionErrors({ [section]: { field: row } }, '')).not.toEqual([]);
85
+ },
86
+ );
87
+ });
@@ -0,0 +1,46 @@
1
+ import { readFileSync } from 'node:fs';
2
+
3
+ import { LAG_SECTIONS, lagMetadataErrors } from './registry-diff.mjs';
4
+ import { lagDecisionErrors } from './lag-decisions.mjs';
5
+
6
+ /** Планы — обязательные входы CI, а не снимок списка открытых задач в пакете. */
7
+ export function readLagPlans(env = process.env) {
8
+ const texts = ['BESALES_WORKING_PLAN', 'BESALES_CLOSED_PLAN'].map((name) => {
9
+ const path = env[name]?.trim();
10
+ if (!path) throw new Error(`${name}: укажите файл плана; открытость владельцев не проверена`);
11
+ return readFileSync(path, 'utf8');
12
+ });
13
+ const decisionsText = readFileSync(
14
+ env.BESALES_LAG_DECISIONS_FILE ??
15
+ new URL('../../besales-api/docs/contract-ledger/cledg-decisions.md', import.meta.url),
16
+ 'utf8',
17
+ );
18
+ return { workingText: texts[0], closedText: texts[1], decisionsText };
19
+ }
20
+
21
+ /** Только заголовок задачи: упоминания номера и старые списки владельцев не подходят. */
22
+ export function planTaskIds(text) {
23
+ const ids = new Set();
24
+ for (const match of text.matchAll(/^#### Task (\d+(?:\.\d+)+)(?=[: (])/gmu)) {
25
+ ids.add(match[1]);
26
+ }
27
+ if (ids.size === 0) throw new Error('План не содержит заголовков Task');
28
+ return ids;
29
+ }
30
+
31
+ /** Ни бюджета, ни исключений для старых строк: проверяются все разделы реестра. */
32
+ export function lagOpenTaskErrors(registry, { workingText, closedText, decisionsText = '' }) {
33
+ const working = planTaskIds(workingText);
34
+ const closed = planTaskIds(closedText);
35
+ const errors = [...lagMetadataErrors(registry), ...lagDecisionErrors(registry, decisionsText)];
36
+ for (const section of LAG_SECTIONS) {
37
+ for (const [key, row] of Object.entries(registry[section] ?? {})) {
38
+ if (row.owner === 'DELIBERATE') continue;
39
+ const id = typeof row.owner === 'string' ? row.owner.replace(/^TASK-/u, '') : '';
40
+ if (!working.has(id) || closed.has(id)) {
41
+ errors.push(`${section}:${key}: ${row.owner} — задача не открыта однозначно`);
42
+ }
43
+ }
44
+ }
45
+ return [...new Set(errors)].sort();
46
+ }
@@ -0,0 +1,78 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { describe, expect, it } from 'vitest';
3
+
4
+ import { LAG_SECTIONS } from './registry-diff.mjs';
5
+ import { lagOpenTaskErrors, planTaskIds, readLagPlans } from './lag-open-task-owners.mjs';
6
+
7
+ const plans = {
8
+ workingText: '#### Task 6.19.51: Открытая\nСсылка на Task 6.22.10\n',
9
+ closedText: '#### Task 6.22.10: Закрытая\n',
10
+ };
11
+ const row = {
12
+ owner: 'TASK-6.19.51',
13
+ reason: 'Отказ проверяет владелец; decision:6.19.51:test',
14
+ severity: 'LIVE_400',
15
+ };
16
+
17
+ describe('владелец — открытая задача рабочего плана или DELIBERATE', () => {
18
+ it.each(LAG_SECTIONS)('%s: нет исключений для раздела или прежней строки', (section) => {
19
+ expect(lagOpenTaskErrors({ [section]: { field: row } }, plans)).toEqual([]);
20
+ for (const owner of ['домен', 'TASK-6.999.1', 'TASK-6.22.10', 'TASK-6.19.51 (закрыта)']) {
21
+ expect(
22
+ lagOpenTaskErrors({ [section]: { field: { ...row, owner } } }, plans).join('\n'),
23
+ ).toContain(`${section}:field`);
24
+ }
25
+ expect(
26
+ lagOpenTaskErrors(
27
+ { [section]: { field: row } },
28
+ {
29
+ ...plans,
30
+ closedText: plans.closedText + '\n#### Task 6.19.51: тоже закрытая',
31
+ },
32
+ ),
33
+ ).toEqual([`${section}:field: TASK-6.19.51 — задача не открыта однозначно`]);
34
+ expect(
35
+ lagOpenTaskErrors(
36
+ {
37
+ [section]: {
38
+ field: {
39
+ ...row,
40
+ owner: 'DELIBERATE',
41
+ severity: 'DELIBERATE',
42
+ },
43
+ },
44
+ },
45
+ {
46
+ ...plans,
47
+ decisionsText:
48
+ 'Решение <!-- contract-ledger-decision ' +
49
+ JSON.stringify({
50
+ id: '6.19.51:test',
51
+ key: section + ':field',
52
+ status: 'ACTIVE',
53
+ reason: 'Защита данных',
54
+ }) +
55
+ ' -->',
56
+ },
57
+ ),
58
+ ).toEqual([]);
59
+ });
60
+
61
+ it('пустой и недоступный план не дают зелёный ответ', () => {
62
+ expect(() => readLagPlans({})).toThrow('BESALES_WORKING_PLAN');
63
+ expect(() => readLagPlans({ BESALES_WORKING_PLAN: '/nonexistent/br6191/plan' })).toThrow();
64
+ expect(() => readLagPlans({ BESALES_WORKING_PLAN: new URL(import.meta.url).pathname })).toThrow(
65
+ 'BESALES_CLOSED_PLAN',
66
+ );
67
+ expect(() => planTaskIds('Task 6.19.51 упомянута')).toThrow('не содержит');
68
+ expect([...planTaskIds(plans.workingText.repeat(2))]).toEqual(['6.19.51']);
69
+ });
70
+
71
+ // Мутант: вернуть проверку только формата TASK-N либо пропустить закрытый план.
72
+ it('каждая строка реального реестра принадлежит открытой задаче или DELIBERATE', () => {
73
+ const registry = JSON.parse(
74
+ readFileSync(new URL('../src/schemas/shipped-lag.json', import.meta.url), 'utf8'),
75
+ );
76
+ expect(lagOpenTaskErrors(registry, readLagPlans())).toEqual([]);
77
+ });
78
+ });
@@ -0,0 +1,10 @@
1
+ import { LAG_SECTIONS } from './registry-diff.mjs';
2
+
3
+ /** Missing tools and observed schema differences have their own emitted representation. */
4
+ export function remainingLagSections(registry) {
5
+ return Object.fromEntries(
6
+ LAG_SECTIONS.filter((section) => !['missingTools', 'contractLag'].includes(section)).map(
7
+ (section) => [section, registry[section] ?? {}],
8
+ ),
9
+ );
10
+ }
@@ -0,0 +1,22 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { describe, expect, it } from 'vitest';
3
+
4
+ const registry = JSON.parse(
5
+ readFileSync(new URL('../src/schemas/shipped-lag.json', import.meta.url), 'utf8'),
6
+ );
7
+
8
+ describe('отставание прежних конфигов действий', () => {
9
+ /** Мутация, которая красит: вернуть хотя бы одну строку отставания для уже поддержанного поля. */
10
+ it('остаётся только осознанный отказ от общей константы для пересказа', () => {
11
+ expect(Object.keys(registry.legacyActionLag)).toEqual([
12
+ 'besales_trigger_upsert::actions[].summarizeConfig.targetType#PLATFORM_CONSTANT',
13
+ ]);
14
+ expect(Object.values(registry.legacyActionLag)).toEqual([
15
+ {
16
+ owner: 'DELIBERATE',
17
+ severity: 'DELIBERATE',
18
+ reason: expect.stringContaining('пересказ человека'),
19
+ },
20
+ ]);
21
+ });
22
+ });
@@ -0,0 +1,99 @@
1
+ import { shippedRef } from './shipped-ref.mjs';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ import { describe, expect, it } from 'vitest';
6
+
7
+ import { loadShippedModule } from './shipped-definitions.mjs';
8
+
9
+ /**
10
+ * ⭐ Отказ сервера v2 на прежнее имя поля — глазами УСТАНОВЛЕННОГО у клиентов моста, а не ветки.
11
+ *
12
+ * После переключения домена прежняя установка моста зовёт сервер v2 и шлёт прежние имена (`platformId`). Сервер
13
+ * отвечает именованным отказом `LEGACY_FIELD_NAME`. Проверяется итоговый ответ, который прежний мост отдаёт модели:
14
+ * исполняется КОД отгруженной линии по общей настройке ссылки, извлечённый из git тем же загрузчиком, что и отгруженные
15
+ * определения. Прежний мост на отказ 400 добавляет своё «исправь причину и повтори вызов» — модель могла бы убрать
16
+ * необязательный фильтр канала и получить успешный НЕВЕРНЫЙ ответ. С полем `remediation` в корне тела он показывает
17
+ * действие сервера («перезапустите приложение, без поля не отправляйте»), а своё приглашение повторить не добавляет.
18
+ *
19
+ * Форму тела закрепляет сервер (`besales-api/src/shared/pipes/http-validation.pipe.spec.ts`); здесь — что эта форма
20
+ * значит для установленного клиента.
21
+ */
22
+
23
+ const packageRoot = fileURLToPath(new URL('..', import.meta.url));
24
+ const shippedCommit = execFileSync('git', ['-C', packageRoot, 'rev-parse', shippedRef()], {
25
+ encoding: 'utf8',
26
+ }).trim();
27
+
28
+ const REMEDIATION =
29
+ 'Если запрос отправил мост besales-mcp, он устарел. Попросите человека перезапустить приложение ' +
30
+ '(Claude Desktop, Claude Code или Codex). При запуске через npx без версии с npm 9.6.5 или новее ' +
31
+ 'мост может обновиться до latest; старый npm, закреплённая версия, локальный пакет или кэш могут ' +
32
+ 'помешать обновлению. Если ошибка сохранилась после перезапуска, обновите npm и настройте запуск ' +
33
+ 'актуального @besales/mcp@latest либо обновите локальный пакет; если это не помогло, обратитесь ' +
34
+ 'в поддержку. До обновления этот инструмент недоступен прежнему мосту. Другому клиенту нужно ' +
35
+ 'заменить имя поля на указанное. Не отправляйте запрос без этого поля: пропал бы фильтр, ' +
36
+ 'и ответ был бы неверным.';
37
+
38
+ /** Тело отказа в той форме, которую отдаёт сервер v2 (после общего фильтра — с correlationId). */
39
+ function legacyRefusal(overrides = {}) {
40
+ return {
41
+ statusCode: 400,
42
+ message: ['Поле platformId переименовано в channelId.'],
43
+ error: 'Bad Request',
44
+ code: 'LEGACY_FIELD_NAME',
45
+ field: 'platformId',
46
+ replacement: 'channelId',
47
+ remediation: REMEDIATION,
48
+ correlationId: 'corr-legacy-1',
49
+ ...overrides,
50
+ };
51
+ }
52
+
53
+ /** Итоговый ответ отгруженного моста на отказ сервера с этим телом. */
54
+ async function shippedToolResult(body) {
55
+ const { ApiClient } = await loadShippedModule(packageRoot, shippedCommit, 'src/http/api-client.ts');
56
+ const { mapToolError } = await loadShippedModule(packageRoot, shippedCommit, 'src/tools/result.ts');
57
+ const transport = {
58
+ async request() {
59
+ // Форма отказа axios: по ней отгруженный клиент отличает ответ сервера от обрыва связи.
60
+ throw {
61
+ isAxiosError: true,
62
+ message: 'Request failed with status code 400',
63
+ response: { status: 400, data: body, headers: {} },
64
+ };
65
+ },
66
+ };
67
+ const client = new ApiClient({ transport, apiBaseUrl: 'https://core.besales.ai/api/v2' });
68
+ let failure;
69
+ try {
70
+ await client.request('GET', '/workspaces/ws/broadcast-analytics?platformId=channel', 'mcp_key');
71
+ } catch (error) {
72
+ failure = error;
73
+ }
74
+ return mapToolError(failure, { sideEffect: 'none' });
75
+ }
76
+
77
+ describe('именованный отказ на прежнее имя поля — у установленного моста', () => {
78
+ it('модель видит действие сервера: перезапуск приложения и запрет повтора без поля', async () => {
79
+ const actual = await shippedToolResult(legacyRefusal());
80
+
81
+ expect(actual.isError).toBe(true);
82
+ expect(actual.structuredContent.error).toMatchObject({
83
+ code: 'LEGACY_FIELD_NAME',
84
+ status: 400,
85
+ continuation: REMEDIATION,
86
+ });
87
+ expect(actual.content[0].text).toContain('переименовано в channelId');
88
+ expect(actual.content[0].text).toContain('перезапустить приложение');
89
+ expect(JSON.stringify(actual)).not.toContain('повтори вызов');
90
+ });
91
+
92
+ it('без действия в теле прежний мост добавляет своё «повтори вызов» — поэтому поле обязательно', async () => {
93
+ const { remediation: _omitted, ...inputBody } = legacyRefusal();
94
+
95
+ const actual = await shippedToolResult(inputBody);
96
+
97
+ expect(actual.structuredContent.error.continuation).toBe('Исправь причину из сообщения и повтори вызов.');
98
+ });
99
+ });
@@ -0,0 +1,34 @@
1
+ // Исполняется только дочерним процессом HTTP-приёмки; не читает keychain оператора.
2
+ import { createTools } from '../src/tools/registry.ts';
3
+ import { ConnectionStore } from '../src/auth/connection-store.ts';
4
+ import { ApiClient } from '../src/http/api-client.ts';
5
+ process.on('message', async ({ id, baseUrl, workspaceId, key, name, args }) => {
6
+ try {
7
+ const values = new Map();
8
+ const store = new ConnectionStore({
9
+ async get(account) {
10
+ return values.get(account) ?? null;
11
+ },
12
+ async set(account, value) {
13
+ values.set(account, value);
14
+ },
15
+ async delete(account) {
16
+ values.delete(account);
17
+ },
18
+ async accounts() {
19
+ return [...values.keys()];
20
+ },
21
+ });
22
+ await store.addOrReplace(workspaceId, key);
23
+ const apiClient = new ApiClient({ apiBaseUrl: baseUrl, locale: 'ru' });
24
+ const tool = createTools({ store, apiClient, toolsets: null }).find(
25
+ (entry) => entry.name === name,
26
+ );
27
+ if (!tool) throw new Error(`Unknown tool: ${name}`);
28
+ const result = await tool.handler(args);
29
+ process.send?.({ id, result });
30
+ } catch (error) {
31
+ process.send?.({ id, error: String(error) });
32
+ }
33
+ });
34
+ process.on('disconnect', () => process.exit(0));
@@ -0,0 +1,36 @@
1
+ // Узкий загрузчик исходников моста для HTTP-приёмки соседнего API, без артефактов сборки.
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { fileURLToPath } from 'node:url';
4
+ import ts from 'typescript';
5
+ const source = new URL('../src/', import.meta.url).href;
6
+ export function resolve(specifier, context, nextResolve) {
7
+ // Приёмка задаёт ConnectionStore в памяти: native keychain оператора недоступен.
8
+ if (specifier === 'keytar') return { url: 'mcpcompat:keychain-disabled', shortCircuit: true };
9
+ if (context.parentURL?.startsWith(source) && specifier.endsWith('.js')) {
10
+ const target = new URL(specifier.slice(0, -3) + '.ts', context.parentURL);
11
+ if (target.href.startsWith(source) && existsSync(target))
12
+ return { url: target.href, shortCircuit: true };
13
+ }
14
+ return nextResolve(specifier, context);
15
+ }
16
+ export function load(url, context, nextLoad) {
17
+ if (url === 'mcpcompat:keychain-disabled')
18
+ return {
19
+ format: 'module',
20
+ shortCircuit: true,
21
+ source:
22
+ 'export default new Proxy({}, { get() { throw new Error("Keychain disabled in HTTP acceptance"); } });',
23
+ };
24
+ if (url.startsWith(source) && url.endsWith('.ts'))
25
+ return {
26
+ format: 'module',
27
+ shortCircuit: true,
28
+ source: ts.transpileModule(readFileSync(fileURLToPath(url), 'utf8'), {
29
+ compilerOptions: {
30
+ target: ts.ScriptTarget.ES2022,
31
+ module: ts.ModuleKind.ESNext,
32
+ },
33
+ }).outputText,
34
+ };
35
+ return nextLoad(url, context);
36
+ }
@@ -0,0 +1,3 @@
1
+ // Асинхронный ESM-загрузчик: совместим с CommonJS-зависимостями на серверном Node 22.
2
+ import { register } from 'node:module';
3
+ register('./mcpcompat-loader.mjs', import.meta.url);
@@ -0,0 +1,89 @@
1
+ import { shippedRef } from './shipped-ref.mjs';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { readFileSync } from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+
6
+ import { describe, expect, it } from 'vitest';
7
+
8
+ import { toolDefinitions } from '../src/tools/definitions.js';
9
+ import { diffRegistries } from './registry-diff.mjs';
10
+ import { sample } from './sample-args.mjs';
11
+ import { loadShippedDefinitions } from './shipped-definitions.mjs';
12
+ import { mergeShippedArgs } from './shipped-sample-candidates.mjs';
13
+ import {
14
+ buildShippedSample,
15
+ filterOf,
16
+ prepareKnownArgs,
17
+ routeShape,
18
+ schemaLagExplains,
19
+ schemaPathsOf,
20
+ } from './shipped-sample.mjs';
21
+
22
+ const packageRoot = fileURLToPath(new URL('..', import.meta.url));
23
+ const name = 'besales_platform_settings_update';
24
+
25
+ describe('настройки канала — настоящий образец отгруженного моста', () => {
26
+ it('полный образец не отбрасывает выключатель как отказавшее поле', async () => {
27
+ const commit = execFileSync('git', ['-C', packageRoot, 'rev-parse', shippedRef()], {
28
+ encoding: 'utf8',
29
+ }).trim();
30
+ const shippedRegistry = JSON.parse(
31
+ execFileSync('git', ['-C', packageRoot, 'show', `${commit}:src/schemas/mcp-tools.json`], {
32
+ encoding: 'utf8',
33
+ maxBuffer: 16 * 1024 * 1024,
34
+ }),
35
+ );
36
+ const localRegistry = JSON.parse(
37
+ readFileSync(new URL('../src/schemas/mcp-tools.json', import.meta.url), 'utf8'),
38
+ );
39
+ const lagRegistry = JSON.parse(
40
+ readFileSync(new URL('../src/schemas/shipped-lag.json', import.meta.url), 'utf8'),
41
+ );
42
+ const fixtures = JSON.parse(
43
+ readFileSync(new URL('../src/schemas/mcp-v2-route-map.json', import.meta.url), 'utf8'),
44
+ );
45
+ const fixture = fixtures.find((entry) => entry.tool === name && entry.variant === undefined);
46
+ const shippedDefinitions = await loadShippedDefinitions(packageRoot, commit);
47
+ const shipped = shippedDefinitions.toolDefinitions.find((entry) => entry.name === name);
48
+ const local = toolDefinitions.find((entry) => entry.name === name);
49
+ const shippedJson = shippedRegistry.tools.find((entry) => entry.name === name).inputSchema;
50
+ const localJson = localRegistry.tools.find((entry) => entry.name === name).inputSchema;
51
+ const shippedPaths = schemaPathsOf(shippedJson, name);
52
+ const localPaths = schemaPathsOf(localJson, name);
53
+ const known = prepareKnownArgs(fixture.canonicalArgs, shippedPaths);
54
+ const full = mergeShippedArgs(sample(shippedJson), known);
55
+ const workspace = '00000000-0000-4000-8000-0000000000ff';
56
+ const diff = diffRegistries(
57
+ shippedRegistry.tools,
58
+ localRegistry.tools,
59
+ lagRegistry.toolSuccessors,
60
+ );
61
+ const result = buildShippedSample({
62
+ full,
63
+ known,
64
+ acceptShipped: filterOf(shipped, workspace),
65
+ acceptV2: filterOf(local, workspace),
66
+ explains: (path, args) =>
67
+ schemaLagExplains(
68
+ path,
69
+ args,
70
+ diff.contractLag.filter((entry) => entry.tool === name),
71
+ localPaths,
72
+ ),
73
+ shippedConstraints: shippedPaths,
74
+ goodValues: () => [],
75
+ mainRouteShape: routeShape(local.createRequest(local.schema.parse(fixture.canonicalArgs))),
76
+ });
77
+ expect(result.request).toBeDefined();
78
+ expect(result.refused.map((entry) => entry.path)).not.toContain('access_control.is_active');
79
+ expect(result.omitted.map((entry) => entry.path)).not.toContain('access_control.is_active');
80
+ expect(result.request.body.generalSettings.isActive).toBe(
81
+ fixture.canonicalArgs.general_settings.is_active,
82
+ );
83
+ expect(
84
+ Object.keys(lagRegistry.contractLag).some((key) =>
85
+ key.startsWith(`${name}::access_control.is_active#refused::`),
86
+ ),
87
+ ).toBe(false);
88
+ });
89
+ });