@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
@@ -1,5 +1,134 @@
1
1
  # Подключение Besales MCP к Claude Code и Codex
2
2
 
3
+ ## Онлайн-MCP: подключение коллег
4
+
5
+ Онлайн-MCP позволяет Claude Code и Codex CLI работать с твоей рабочей областью Besales:
6
+ смотреть данные и выполнять действия в пределах выданных прав. Клиенты обращаются к
7
+ `https://mcp.besales.ai/mcp`; держать локальный мост запущенным не нужно.
8
+
9
+ Нужны Node.js 20+ (`node -v`), Claude Code и/или Codex CLI и аккаунт Besales с доступом
10
+ к нужной рабочей области. Выполняй команды сам в своём терминале, не передавай ключ агенту
11
+ и не вставляй его в чат.
12
+
13
+ **Важно:** `beta` — тег предварительной версии. Для этих инструкций нужен именно
14
+ `@besales/mcp@beta`. Обычный `npx -y @besales/mcp` без тега по-прежнему устанавливает
15
+ прежнюю версию 0.48. Пакет этой ветки станет доступен через `beta` после публикации владельцем.
16
+
17
+ ### Шаг 1. Получи ключ своей рабочей области
18
+
19
+ ```bash
20
+ npx -y @besales/mcp@beta connect
21
+ npx -y @besales/mcp@beta connections
22
+ ```
23
+
24
+ Первая команда открывает браузер: войди в Besales, выбери область и подтверди права.
25
+ Ключ `mcp_…` сохранится в локальной связке ключей. Повтори `connect` один раз для каждой
26
+ нужной области; вторая команда покажет их имена и UUID. Ключ получается локальной командой
27
+ `connect` один раз, а дальше локальный мост для работы онлайн-клиентов не нужен.
28
+
29
+ ### Шаг 2. Настрой клиентов скриптом или вручную
30
+
31
+ В репозитории [be-sales/mcp](https://github.com/be-sales/mcp) скачай файл
32
+ `scripts/connect-clients.sh` из ветки с онлайн-MCP и запусти:
33
+
34
+ ```bash
35
+ bash scripts/connect-clients.sh
36
+ ```
37
+
38
+ Или получи скрипт из установленного пакета:
39
+
40
+ ```bash
41
+ npm install -g @besales/mcp@beta
42
+ bash "$(npm root -g)/@besales/mcp/scripts/connect-clients.sh"
43
+ ```
44
+
45
+ Скрипт читает только `connections --json`: это JSON-массив объектов
46
+ `{workspaceId, workspaceName, accountLabel, keyPrefix, active}` одной строкой, без полных ключей.
47
+ В обычном выводе управляющие символы имён и подписей заменяются пробелами; JSON сохраняет
48
+ имя целиком с экранированием. Имена передаются разборщику только через stdin, без исполнения.
49
+ Скрипт принимает UUID только по шаблону `^[0-9a-f-]{36}$` и создаёт запись
50
+ `besales-<слаг имени>` только из букв `a-z`, цифр и дефиса: для слага берутся первые
51
+ 200 символов очищенного имени, сам слаг ограничен 64 символами; пустой слаг заменяется
52
+ первыми 8 символами UUID. При совпадении имён добавляются первые четыре символа UUID,
53
+ при дальнейшей коллизии — полный UUID. Отсутствующий в PATH клиент
54
+ пропускается. Повторный запуск обновляет подключения. Для выбора отдельных областей передай
55
+ имена записей или префиксы UUID:
56
+
57
+ ```bash
58
+ bash scripts/connect-clients.sh besales-sales 1234abcd
59
+ ```
60
+
61
+ Ключи для Codex сохраняются в `~/.besales-secrets/mcp-remote-keys.env` (каталог 700, файл 600).
62
+ Скрипт напечатает строку `source` без ключей: добавь её в `~/.zshrc` или `~/.bashrc` и выполни
63
+ в текущем терминале. Запускай Codex из терминала, где загружены эти переменные.
64
+ При любом запуске сохраняются посторонние строки и переменные остальных областей:
65
+ заменяются или добавляются только `export BESALES_MCP_KEY_<ИМЯ>="…"` успешно подключённых
66
+ в этом запуске областей и отсутствующий заголовок. Повторный запуск не дублирует записи.
67
+ Запись атомарна: временный файл рядом с исходным и `mv`; ошибка клиента сохраняет прежний файл.
68
+
69
+ Адрес можно задать через `BESALES_MCP_URL`, команду получения ключей — через
70
+ `BESALES_MCP_BRIDGE` (по умолчанию `npx -y @besales/mcp@beta`). Для исходников:
71
+
72
+ ```bash
73
+ BESALES_MCP_BRIDGE='node /путь/к/mcp/bin/besales-mcp.js' bash scripts/connect-clients.sh
74
+ ```
75
+
76
+ Здесь команда моста — аргументы через пробелы; путь не должен содержать пробелов.
77
+
78
+ Вместо скрипта можно выполнить три команды вручную. Замени `UUID` идентификатором из
79
+ `connections`, а `besales-sales` — своим уникальным именем записи:
80
+
81
+ ```bash
82
+ claude mcp add --scope user --transport http besales-sales https://mcp.besales.ai/mcp --header "Authorization: Bearer $(npx -y @besales/mcp@beta key UUID)"
83
+ export BESALES_MCP_KEY_SALES="$(npx -y @besales/mcp@beta key UUID)"
84
+ codex mcp add besales-sales --url https://mcp.besales.ai/mcp --bearer-token-env-var BESALES_MCP_KEY_SALES
85
+ ```
86
+
87
+ Для ручной настройки Codex повторяй `export` в каждом новом терминале или добавь именно
88
+ команду с подстановкой `$(…)` в профиль оболочки. При нескольких областях нужны разные
89
+ имена записей, UUID и имена переменных. Для обновления уже существующей записи сначала
90
+ удали её: `claude mcp remove --scope user besales-sales` или `codex mcp remove besales-sales`,
91
+ затем повтори нужную команду добавления. Скрипт делает это сам.
92
+
93
+ Ключ лежит в настройках Claude Code открытым текстом. Codex хранит имя переменной,
94
+ а её значение скрипт записывает открытым текстом в закрытый файл. Не публикуй настройки
95
+ или файл ключей, ограничь доступ к своему компьютеру. Подстановка команды в терминале
96
+ не печатает ключ; отдельная команда `key [UUID]` выводит секрет, поэтому не запускай её
97
+ на общей демонстрации экрана.
98
+
99
+ Известное ограничение: Claude Code принимает заголовок только аргументом команды
100
+ `claude mcp add --header`, поэтому на время её выполнения (доли секунды) ключ виден в
101
+ списке процессов этого же компьютера. Запускай скрипт на личном компьютере, где нет
102
+ посторонних пользователей. У Codex такого нет: ему передаётся только имя переменной.
103
+
104
+ ### Шаг 3. Проверь подключение
105
+
106
+ ```bash
107
+ claude mcp list
108
+ codex mcp list
109
+ ```
110
+
111
+ Проверь установленный у тебя клиент, открой новую сессию агента и спроси:
112
+ «какая у меня рабочая область?». Ответ должен соответствовать выбранной области.
113
+
114
+ | Ответ службы | Что делать |
115
+ | --- | --- |
116
+ | 401 | Ключ просрочен (срок — 90 дней), отозван или потерял доступ. Снова выполни `npx -y @besales/mcp@beta connect`, затем скрипт; для Codex повтори `source`. |
117
+ | 502 | Ядро временно недоступно. Для известного ключа повторная проверка приостановлена до 5 секунд; соблюдай `Retry-After`. |
118
+ | 429 | Достигнут лимит. Подожди число секунд из `Retry-After` и повтори запрос. |
119
+ | 503 | Служба занята или обновляется. Повтори через несколько секунд. |
120
+
121
+ Чтобы отозвать доступ, открой список подключений в Besales и отзови нужное подключение.
122
+ Удаление записи только в Claude Code или Codex не отзывает сам ключ.
123
+ Общая проверка службы учитывает отзыв ключа после истечения кэша, даже если все
124
+ ожидавшие её клиенты отключились до ответа ядра.
125
+
126
+ ## Локальное подключение через stdio
127
+
128
+ Ниже — прежний способ: мост работает локально при каждом запуске клиента.
129
+ Для онлайн-службы используй три шага выше.
130
+
131
+
3
132
  Три шага: добавить сервер в программу → один раз войти через браузер → открыть новую сессию и
4
133
  проверить. Пароли и токены в чат не вводятся никогда — вход только через браузер.
5
134
 
@@ -85,14 +214,22 @@ Code или Codex.
85
214
  труднее найти нужный. Во вкладке Code десктоп-приложения Claude видны ещё и серверы, добавленные в
86
215
  Claude Desktop, — учитывай их тоже.
87
216
 
217
+ ## Другие команды
218
+
219
+ | Команда | Что делает |
220
+ |---|---|
221
+ | `npx -y @besales/mcp status` | показать выбранную компанию и все подключения |
222
+ | `npx -y @besales/mcp connections` | список подключённых компаний с их ID |
223
+ | `npx -y @besales/mcp disconnect <id>` | отключить одну компанию (`--all` — все) |
224
+
88
225
  ## Обновление
89
226
 
90
227
  1. Закрой и снова открой программу.
91
228
  2. Один раз для каждой компании: `npx -y @besales/mcp@latest connect`.
92
229
 
93
230
  Новые права помощнику выдаются только при подключении, поэтому шаг 2 обязателен, когда в версии
94
- появились новые возможности (с 0.47.0 — контакты и назначение операторов). `@latest` нужен потому,
95
- что npx хранит старую копию пакета в кэше. Уже работающие настройки от этого не сбрасываются.
231
+ появились новые возможности. `@latest` нужен потому, что npx хранит старую копию пакета в кэше.
232
+ Уже работающие настройки от этого не сбрасываются.
96
233
 
97
234
  ## Как проверить, что всё работает
98
235
 
@@ -100,7 +237,8 @@ Claude Desktop, — учитывай их тоже.
100
237
  В ответе должны быть:
101
238
 
102
239
  - названия компаний и какая выбрана сейчас;
103
- - в `effective_scopes` — `read:contacts` и `write:operators` (с версии 0.47.0).
240
+ - в `effective_scopes` — права, которые ты выдал при подключении. Если нужного права нет (например
241
+ `read:contacts` или `write:operators`), выполни `connect` ещё раз и дай его на странице согласия.
104
242
 
105
243
  ## Если что-то не так
106
244
 
@@ -110,7 +248,9 @@ Claude Desktop, — учитывай их тоже.
110
248
  | Просит ID рабочего пространства | Скажи «покажи мои рабочие пространства» и выбери по названию. Вводить ID не нужно. |
111
249
  | «Не хватает прав» (403) | `npx -y @besales/mcp@latest connect` и перезапуск программы. |
112
250
  | После обновления нет новых инструментов | npx взял старую копию: `npx -y @besales/mcp@latest connect`, затем перезапуск. |
113
- | Страница входа пишет, что `scope` не поддерживается | Пакет новее сервера Besales. Подожди обновления сервера или напиши в поддержку. |
251
+ | Страница входа пишет, что набор прав недопустим, и называет право | Пакет новее сервера Besales: он просит право, которого сервер ещё не знает. Подожди обновления сервера или напиши в поддержку. |
252
+ | `connect` пишет `WARNING: this key has FEWER permissions than the one it replaced` | Новый ключ получил меньше прав, чем прежний ключ в этой компании (`Lost:` — какие). Обнови пакет и подключись ещё раз: `npx -y @besales/mcp@latest connect`. |
253
+ | `connect` пишет `WARNING: some requested permissions were not granted` | Роль в этой компании не разрешает часть прав (`Not granted:` — какие). Попроси владельца компании или администратора расширить роль и подключись ещё раз. |
114
254
 
115
255
  ## Для разработчиков: запуск из исходников
116
256
 
@@ -0,0 +1,17 @@
1
+ # Компания и должность в карточке человека
2
+
3
+ Редактор компании принадлежит операторскому интерфейсу API. Он читает выбранный адрес человека
4
+ и сохраняет только изменённые поля с обязательной непрозрачной `profileVersion`.
5
+ Его GET/PATCH не вызываются инструментами моста и не добавляются в карту маршрутов MCP.
6
+
7
+ `besales_contact_get` по-прежнему читает `/contacts/{contact_id}`. Поиск и пакетное чтение
8
+ профилей сохраняют свой разрешённый состав ответа; они не получают права изменения.
9
+ Новый инструмент записи компании не вводится. Ключ `read:contacts` не открывает операторский
10
+ редактор, даже если вызывающий знает его адрес.
11
+
12
+ Контракт формы и сценарий восстановления после 409 описаны в API:
13
+ `docs/modules/contact-company-profile.md`. Базовый путь формы:
14
+ `/api/v2/workspaces/{workspaceId}/contacts/{contactId}/identities/{identityId}/company-profile`.
15
+ Нужны пользовательская сессия и текущие права `CONVERSATION_VIEW`/`CONVERSATION_REPLY`.
16
+
17
+ Регрессия границы: `src/tools/definitions/contacts.spec.ts`.
@@ -0,0 +1,7 @@
1
+ # Рекомендации между людьми
2
+
3
+ Рекомендации связывают выбранные адреса разных людей и не объединяют их карточки. Их редактор принадлежит пользовательскому API Besales. Ключи моста и публичного API не получают маршруты списка, поиска кандидатов, записи и удаления рекомендаций.
4
+
5
+ Состав `besales_contact_get`, `besales_contact_search` и `besales_contact_diagnostics_get` сохраняется. Нового инструмента записи или фиктивной записи в реестре маршрутов нет. Исходный `operatorContactLinks` не является частью контрактов этих инструментов; API удаляет этот служебный ключ из канальных данных, включая вложенные значения.
6
+
7
+ Переход к диалогу выполняет интерфейс по `target.conversationId`, полученному от отдельного API рекомендаций. Это существующий диалог именно `target.identityId` и `target.channelId`; при `null` интерфейс не выбирает случайный другой канал и не создаёт диалог запросом чтения.
@@ -0,0 +1,73 @@
1
+ # Ответственные при смене стадии amoCRM
2
+
3
+ Настройку передают существующие `besales_trigger_upsert` и
4
+ `besales_followup_sequence_upsert`. Новых инструментов и прав нет. Список относится к
5
+ подключению amoCRM целевой стадии; принадлежность каналу, пространству и подключению
6
+ проверяет API. Сотруднику не обязательно иметь рабочее место Besales.
7
+
8
+ Каноническое поле `assign_responsible_operator_ids` содержит уникальные UUID из каталога
9
+ `crm_operators.id`. Порядок значим: сервер выбирает сотрудника по номеру сделки. Прежнее
10
+ `assignResponsibleOperatorIds` содержит положительные безопасные целые номера пользователей
11
+ amoCRM; API разрешает их в том же подключении. Два формата одновременно запрещены.
12
+ Это настройка администратора, а не аргумент выбора сотрудника моделью во время исполнения.
13
+
14
+ Пример действия:
15
+
16
+ ```json
17
+ {
18
+ "stepType": "CRM_MOVE_STAGE",
19
+ "config": {
20
+ "schema_version": 1,
21
+ "step_type": "CRM_MOVE_STAGE",
22
+ "pipeline_external_id": "700",
23
+ "status_external_id": "701",
24
+ "assign_responsible_operator_ids": [
25
+ "10000000-0000-4000-8000-000000000031",
26
+ "10000000-0000-4000-8000-000000000017"
27
+ ]
28
+ }
29
+ }
30
+ ```
31
+
32
+ Пул действия — максимум 20 сотрудников. `config`, `crmConfig`, `crmMoveStage` и
33
+ `crmMoveStageConfig` несут одну настройку; одновременно несколько оболочек запрещены.
34
+ Прежняя `crmConfig.extra.assignResponsibleOperatorIds` разворачивается в
35
+ `crmConfig.assignResponsibleOperatorIds` до HTTP. Неизвестные поля `extra` и канонического
36
+ конфига стадии отвергаются; числа из строк не приводятся автоматически. Ошибочный список
37
+ не становится командой снятия.
38
+
39
+ У цепочки поле лежит прямо в `config`, без предела 20. Инструмент поддерживает
40
+ `trigger=USER_INACTIVITY` и `trigger=LOST_CLIENTS`; второй соответствует внутреннему виду
41
+ `CONTACT_INACTIVE`. Календарная форма молчания использует тот же список. Применение к
42
+ собственным переходам с прямым номером стадии определяет API. Пул цепочки не заменяет
43
+ пул вызываемого действия и не оживляет инертные поля источника.
44
+
45
+ При правке других полей цепочки **не передавай ключ пула**: HTTP-тело сохраняет отсутствие,
46
+ а API переносит прежний пул до перевода конфигурации. `[]` или `null` — явное снятие.
47
+ Для действия правка метаданных без `actions` сохраняет шаги. Полная замена `actions`
48
+ задаёт их заново: сначала прочитай контекст, затем передай желаемый набор вместе с пулом.
49
+ Мост не получает `stepId` или `keepSecretFields`; ссылки интерактивного редактора отвергаются.
50
+
51
+ Контекст канала, каталог действий и чтение цепочек сохраняют список без сортировки.
52
+ Для чтения исходной формы цепочки передай `sequence_id`.
53
+ Ответ `data` содержит `type`, `trigger`, `config` и `configUnavailableReason`; при
54
+ `config=null` требуется восстановление полной формы. Исполняемые `latestVersion.steps`
55
+ нельзя подставлять в `config`.
56
+ Копирование цепочки и отдельная правка текста выполняются существующими маршрутами API;
57
+ мост не переписывает их конфигурацию. Подсказки и отказы списка доступны на ru/en/es/id/uz,
58
+ язык задаётся `BESALES_LOCALE`; HTTP передаёт его через штатный `Accept-Language`.
59
+
60
+ Типы обновляются `yarn types:gen:api` из канона соседнего принятого API. Реестр пула
61
+ обновляется после `yarn build` командой `yarn schemas:sync:crm-stage-pool`.
62
+ Генератор сверяет UUID, уникальность и отсутствие общего цепочного предела с
63
+ `openapi-generated.yaml`; он сохраняет объявления других полей. Каталог контрактов можно
64
+ задать через `BESALES_API_CONTRACTS_DIR`.
65
+
66
+ Карту маршрутов выпускает `yarn publish:mcp-registry` из закоммиченного дерева.
67
+ Штатный отказ грязного дерева сохраняется: текущий рабочий код нельзя подписать старым
68
+ коммитом. Реестр `shipped-lag.json` этим изменением не очищается.
69
+
70
+ Проверки `crm-stage-pool.spec.ts` контролируют тела, чтение и отказы до HTTP;
71
+ `crm-stage-pool.http.spec.ts` проверяет сериализованное тело через настоящий локальный
72
+ HTTP-сервер и Axios. Серверные проверки принадлежности и сохранения идут по действующим
73
+ API-наборам. Эти проверки не подтверждают поведение живой CRM или допуск школы.
@@ -0,0 +1,61 @@
1
+ # Данные клиентов на пути моста
2
+
3
+ ## В чём проблема — и в чём её нет
4
+
5
+ **Это не про право доступа.** Тот, кто зовёт мост, — сотрудник воркспейса; те же переписки он
6
+ видит в интерфейсе продукта. Отбирать у него доступ не за чем.
7
+
8
+ **Это про периметр.** Ответ инструмента оседает в транскрипте стороннего приложения (Claude
9
+ Desktop, Cursor, другой хост) и в его телеметрии. Сроком хранения там владелец воркспейса не
10
+ управляет и согласия у своих клиентов на такую передачу не спрашивал. Раньше тем же путём
11
+ уходили партнёрские ключи — это уже исправлено; данные людей идут по нему до сих пор.
12
+
13
+ ## Носители — поимённо
14
+
15
+ Разобрано по тому, что маршруты реально отдают, а не по названиям инструментов.
16
+
17
+ План теста воронки тоже несёт данные конкретного человека. Его вызов сохраняет черновик
18
+ на сервере и удаляет прежний черновик автора для этого человека, хотя сообщений человеку не
19
+ отправляет. Поэтому у него одновременно есть пометка данных клиента и побочного эффекта.
20
+
21
+ | Инструмент | Что именно уходит |
22
+ |---|---|
23
+ | `besales_dialogue_transcript` | реплики переписки целиком — всё, что человек написал сам: в тексте бывают телефон, адрес, номер заказа |
24
+ | `besales_dialogues_query` | имя контакта и его идентификатор в канале (у части каналов это номер телефона), плюс суммы оплат |
25
+ | `besales_getcourse_wave_run_contacts` | перечень контактов волны — это и есть назначение инструмента |
26
+ | `besales_icp_sample_messages` | тексты реплик из отобранных диалогов |
27
+ | `besales_dialog_review_findings` | находки со свободным полем подробностей: цитата из переписки туда попасть **может**, гарантий обратного нет |
28
+ | `besales_dialogue_analysis_notes` | служебный разбор конкретной переписки: текст пересказывает сказанное клиентом и менеджером |
29
+ | `besales_broadcast_analytics_get` | отчёты получателей, сделок, отказов действий и отсеянных отдают имя человека и его идентификатор в кабинете школы. До возврата выбора отчёта фасад умел только сводку и носителем не был |
30
+ | `besales_broadcast_payment_candidates_list` | имя человека, его идентификатор в кабинете школы и ссылка на карточку — то же содержимое, что у фасада с отчётом оплат |
31
+ | `besales_tracked_link_clicks` | лента переходов: имя контакта, его идентификатор и идентификатор сообщения, в котором ссылка была выдана. Соседние инструменты каталога ссылок носителями НЕ являются — там только сводные числа |
32
+
33
+ Пометка живёт у определения (`carriesCustomerData`), а не списком имён в каждом новом месте:
34
+ будущая политика применится к одному объявленному множеству. Тест держит, что пометка и
35
+ предупреждение в описании описывают одно и то же множество — иначе помеченный без
36
+ предупреждения молча отдаёт данные, а предупреждённый без пометки выпадет из политики.
37
+
38
+ ## Что сделано сейчас
39
+
40
+ 1. **Перечень носителей объявлен** и закреплён тестом: новый носитель не появится незамеченным.
41
+ 2. **Описание каждого носителя предупреждает** прямым текстом, что ответ содержит персональные
42
+ данные и сохранится в транскрипте хоста. Модель читает описания и передаёт это человеку.
43
+ 3. **Проверено, что мост не пишет эти данные в собственный лог**: наружу идёт только метод,
44
+ путь и код ответа.
45
+
46
+ ## Что НЕ сделано и почему это решение владельца
47
+
48
+ Ограничить саму передачу можно тремя способами, и они несовместимы по цене:
49
+
50
+ - **Обезличивать на стороне сервера.** Защищает сильнее всех, но ломает работу: по
51
+ обезличенному перечню волны некому написать, а это назначение инструмента. Часть смысла
52
+ теряют и разборы диалогов.
53
+ - **Отдельная область доступа у ключа** (например `read:customer-data`). Передача становится
54
+ осознанным действием того, кто выпускает ключ, и видна в аудите. ⚠️ **Цена: в день включения
55
+ все существующие ключи теряют доступ к пяти инструментам**, пока область не выдадут заново.
56
+ - **Согласие владельца воркспейса, записанное один раз.** Ничего не ломает и ничего не
57
+ ограничивает: фиксирует, что передача согласована.
58
+
59
+ Выбор — не инженерный: он про обязательства перед клиентами школ и про то, чей это риск.
60
+ Поэтому политика не выбрана в коде, а вынесена владельцу; объявленная пометка делает любой из
61
+ трёх вариантов правкой в одном месте.
@@ -0,0 +1,36 @@
1
+ # Versions of settings forms
2
+
3
+ Keep the version returned with the original form until the person decides to save
4
+ that form. The tools below accept an optional `expected_version`. Omitting it
5
+ preserves the existing API behavior; passing it protects the original snapshot.
6
+
7
+ | Tool | Version sent to the API |
8
+ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
9
+ | `besales_followup_step_message_set` | Sequence revision in `expectedVersion`; `expected_content` remains required |
10
+ | `besales_router_update` | Routing token in `expectedVersion` |
11
+ | `besales_routing_rule_upsert` | Routing token in `expectedVersion`, for create and update |
12
+ | `besales_behavior_update` | Routing token in `expectedVersion` |
13
+ | `besales_pipeline_settings_update` | Routing token in `expectedVersion` |
14
+ | `besales_platform_settings_update` | Routing token in `expectedVersion` |
15
+ | `besales_platform_pipeline_link` | Routing token in `expectedVersion` |
16
+ | `besales_platform_pipeline_unlink` | Routing token in a strong `If-Match` header |
17
+ | `besales_variable_update` | Variable UUID in `expectedVersion`, for CHANNEL and WORKSPACE |
18
+ | `besales_variable_delete` | Variable UUID in a strong `If-Match` header, for CHANNEL and WORKSPACE |
19
+ | `besales_agent_update` | Settings UUID in `expectedVersion`; optional `expected_routing_version` is sent separately as `expectedRoutingVersion` |
20
+ | `besales_agent_facts_set` | Facts UUID in `expectedVersion`, independent of settings and Routing |
21
+
22
+ The original required arguments, deletion confirmations, null resets and false
23
+ values retain their meaning. `If-Match` and the idempotency key are independent;
24
+ the HTTP client quotes the original version without substituting a newly read
25
+ token. The bridge does not expose arbitrary HTTP headers to tool arguments.
26
+
27
+ After a 409, preserve the person's input, read the current state for comparison
28
+ and wait for an explicit human decision. Do not automatically repeat the old
29
+ change using a new version or new `expected_content`. Conflict instructions are
30
+ available in en, ru, es, id and uz.
31
+
32
+ `src/schemas/mcp-tools.json` is the input registry. The transport regression suite
33
+ executes the real Zod schemas, request builders, dispatcher and HTTP client with
34
+ only the network transport replaced. The API route snapshot must be republished
35
+ from the committed bridge with the project's `publish:mcp-registry` command;
36
+ its completeness baseline remains the shipped ref.
@@ -9,13 +9,13 @@
9
9
  в базу или постановки задачи в очередь. Для читающего вызова это не важно — повторить его
10
10
  ничего не стоит. Для меняющего важно всё:
11
11
 
12
- | Операция | Что делает повтор после неизвестного исхода |
13
- |---|---|
14
- | создание канала, агента, переменной | второй экземпляр, который никто не заказывал |
15
- | перевыпуск ключа партнёра | отзывает ключ, который партнёр только что получил |
16
- | импорт и запуск волны | отправляет сообщения людям второй раз |
17
- | раскатка правки промптов | применяет правки к уже пропатченному тексту |
18
- | всё, что тратит модель или квоту | платит второй раз |
12
+ | Операция | Что делает повтор после неизвестного исхода |
13
+ | ----------------------------------- | ------------------------------------------------- |
14
+ | создание канала, агента, переменной | второй экземпляр, который никто не заказывал |
15
+ | перевыпуск ключа партнёра | отзывает ключ, который партнёр только что получил |
16
+ | импорт и запуск волны | отправляет сообщения людям второй раз |
17
+ | раскатка правки промптов | применяет правки к уже пропатченному тексту |
18
+ | всё, что тратит модель или квоту | платит второй раз |
19
19
 
20
20
  ## Как это выражено
21
21
 
@@ -26,8 +26,16 @@
26
26
  ⚠️ **Идемпотентность объявляется явно, умолчание — худшее.** Правило «все `*_upsert`
27
27
  идемпотентны» неверно: без идентификатора они уходят в создание.
28
28
 
29
- Что НЕ считается неоднозначным: 4xx (сервер отверг запрос, не выполнив его), 429 (вызов
30
- отклонён лимитом), 401/403 (не пропущен вовсе). Там прежние тексты сохранены.
29
+ Для обычных 4xx сервер отверг текущий запрос. Но отказ приёма результата длинной операции не доказывает, что прежняя работа не оплачена. Мост сначала читает известную операцию промптового семейства через `/llm-operations/:operationId`. Только при COMPLETED с живым результатом он повторяет тот же submit: сервер сверяет тело и возвращает сохранённый успех без исполнения. Другое тело получает 409; незавершённая, скрытая, отредактированная строка или недоступное чтение не повторяют submit.
30
+
31
+ На 410 платного инструмента (`sideEffect=spend` или объявлен `restartToolName`) текст предупреждает о возможной оплате без сохранённого результата и отдельной цене нового запуска. Подсказка требует сообщить человеку и дождаться его решения; новое задание мост не создаёт. Семейства, которым промптовое чтение недоступно, получают это предупреждение без запроса чужого семейства.
32
+
33
+ На 410 бесплатного инструмента мост сохраняет причину из ответа API, например истечение срока черновика, и предлагает продолжить по указанию ответа. Если причины нет, даёт нейтральное сообщение о недоступной ссылке, токене или предварительном просмотре. Предупреждения об оплате в этой ветке нет.
34
+
35
+ 409 при сохранении настроек с исходной версией требует сохранить ввод и дождаться
36
+ явного решения человека после сравнения со свежим снимком. Мост не подменяет версию
37
+ и не повторяет прежнюю правку автоматически. Поля всех таких инструментов и
38
+ независимые версии настроек, фактов и Routing описаны в [протоколе версий](edit-versions.md).
31
39
 
32
40
  ## Чем свериться — выводится, а не перечисляется
33
41
 
@@ -1,48 +1,21 @@
1
1
  # Навигация по справке Besales MCP
2
2
 
3
- ## Зачем нужен tool-мост
3
+ Некоторые MCP-хосты показывают модели tools, но не передают resources. Поэтому справка доступна
4
+ двумя равноправными путями: по URI `besales://...` и через `besales_help_search` /
5
+ `besales_help_get`, которые читают те же файлы пакета.
4
6
 
5
- Некоторые MCP-хосты показывают модели tools, но не передают список resources или не предлагают
6
- прочитать resource автоматически. Поэтому справка доступна двумя равноправными путями:
7
+ `besales_help_search({query})` принимает обычную русскую или английскую формулировку. Синонимы
8
+ связывают «дожим» с follow-up, «волна» с broadcast, «бот молчит» с silence/handoff. Ответ отдельно
9
+ возвращает операции (`operations`) и документы (`results`); у операции есть `score` и `matchedBy`
10
+ для совпадения по имени или пользовательскому намерению.
7
11
 
8
- - MCP resource по URI `besales://...`;
9
- - `besales_help_search` и `besales_help_get`, которые читают те же файлы пакета.
12
+ Каждый активный инструмент получает короткую русскую формулировку намерения в описании из
13
+ `tools/list`. Английская часть сохраняется для совместимости и поиска. Поэтому создание агента,
14
+ изменение маршрутизации, запуск GetCourse-волны и финализация промпта находятся обычным русским
15
+ запросом без знания технического имени.
10
16
 
11
- В ответах tool-моста есть `version`, `source` и `complete`. Это позволяет отличить актуальную
12
- справку пакета от пересказа модели и понять, был ли получен весь документ или один раздел.
17
+ `besales_help_get({uri})` возвращает индекс. Параметр `section` отдаёт один раздел, `full=true` —
18
+ весь документ. Ответы содержат version/source/complete; неоднозначный раздел не выбирается молча.
13
19
 
14
- ## Поиск
15
-
16
- `besales_help_search({query})` принимает обычную русскую или английскую формулировку. Встроенные
17
- синонимы связывают лексику пользователя и продукта: «дожим» с follow-up, «волна» с broadcast,
18
- «бот молчит» с silence/handoff. Ответ разделяет найденные операции (`operations`) и документы
19
- (`results`). Для операции также возвращаются `score` и `matchedBy`: совпадение по имени или по
20
- пользовательскому намерению.
21
-
22
- Все активные инструменты получают короткую русскую формулировку намерения в описании, которое
23
- публикуется через `tools/list`. Английская часть сохраняется для существующих клиентов и поиска.
24
- Так модель может найти создание агента, изменение маршрутизации, запуск GetCourse-волны или
25
- финализацию промпта по обычному русскому запросу без знания технического имени инструмента.
26
-
27
- Поиск не вызывает API и не читает данные workspace. Если результатов нет, нужно уточнить объект
28
- или цель, а не угадывать имя инструмента.
29
-
30
- ## Точечное и полное чтение
31
-
32
- `besales_help_get({uri})` возвращает индекс заголовков. Затем можно запросить один раздел через
33
- `section` или весь документ через `full=true`. Неоднозначный фрагмент заголовка возвращает список
34
- кандидатов; отсутствующий раздел возвращает `found=false`.
35
-
36
- Полная версия остаётся доступной, но для небольшой операции лучше читать один релевантный раздел.
37
- Содержимое resource и tool-ответа берётся из одного файла, поэтому две копии документа не
38
- расходятся.
39
-
40
- ## Проверка
41
-
42
- - `src/tools/definitions/help.spec.ts` проверяет паритет русских и английских намерений, индекс,
43
- раздел и полное чтение.
44
- - `src/tools/description-localization.spec.ts` не допускает активный инструмент без русской
45
- формулировки в опубликованном описании.
46
- - `src/resources/registry.spec.ts` проверяет ссылки на реальные инструменты во всех resources и
47
- коротких server instructions.
48
- - `src/server.spec.ts` проверяет публикацию server instructions через MCP initialize.
20
+ Проверки: `src/tools/definitions/help.spec.ts`, `src/tools/description-localization.spec.ts`,
21
+ `src/resources/registry.spec.ts` и `src/server.spec.ts`.