@besales/mcp 0.47.1 → 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.
- package/README.md +109 -164
- package/README.onprem.ru.md +35 -0
- package/bin/besales-mcp-http.js +9 -0
- package/bin/besales-onprem.mjs +19 -0
- package/dist/auth/connection-store.d.ts +3 -1
- package/dist/auth/connection-store.js +9 -3
- package/dist/auth/connection-store.js.map +1 -1
- package/dist/auth/oauth-client.d.ts +20 -27
- package/dist/auth/oauth-client.js +31 -23
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/auth/session-workspace.d.ts +1 -0
- package/dist/auth/session-workspace.js +10 -1
- package/dist/auth/session-workspace.js.map +1 -1
- package/dist/auth/token-storage.js +4 -1
- package/dist/auth/token-storage.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +80 -19
- package/dist/cli.js.map +1 -1
- package/dist/constants/crm-catalog.d.ts +2 -0
- package/dist/constants/crm-catalog.js +3 -0
- package/dist/constants/crm-catalog.js.map +1 -0
- package/dist/http/api-client.d.ts +52 -7
- package/dist/http/api-client.js +131 -66
- package/dist/http/api-client.js.map +1 -1
- package/dist/http/feedback-document-error.d.ts +26 -0
- package/dist/http/feedback-document-error.js +22 -0
- package/dist/http/feedback-document-error.js.map +1 -0
- package/dist/http-server.d.ts +15 -0
- package/dist/http-server.js +378 -0
- package/dist/http-server.js.map +1 -0
- package/dist/instructions/server-instructions.d.ts +1 -1
- package/dist/instructions/server-instructions.js +6 -3
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/network/constants.d.ts +25 -0
- package/dist/network/constants.js +26 -0
- package/dist/network/constants.js.map +1 -0
- package/dist/network/failed-verifications.d.ts +10 -0
- package/dist/network/failed-verifications.js +37 -0
- package/dist/network/failed-verifications.js.map +1 -0
- package/dist/network/http-test-fixture.d.ts +3 -0
- package/dist/network/http-test-fixture.js +86 -0
- package/dist/network/http-test-fixture.js.map +1 -0
- package/dist/network/known-keys.d.ts +10 -0
- package/dist/network/known-keys.js +38 -0
- package/dist/network/known-keys.js.map +1 -0
- package/dist/network/memory-credentials.d.ts +11 -0
- package/dist/network/memory-credentials.js +24 -0
- package/dist/network/memory-credentials.js.map +1 -0
- package/dist/network/rate-limit.d.ts +23 -0
- package/dist/network/rate-limit.js +62 -0
- package/dist/network/rate-limit.js.map +1 -0
- package/dist/network/rejected-keys.d.ts +9 -0
- package/dist/network/rejected-keys.js +39 -0
- package/dist/network/rejected-keys.js.map +1 -0
- package/dist/network/request-work.d.ts +8 -0
- package/dist/network/request-work.js +20 -0
- package/dist/network/request-work.js.map +1 -0
- package/dist/network/successful-keys.d.ts +17 -0
- package/dist/network/successful-keys.js +47 -0
- package/dist/network/successful-keys.js.map +1 -0
- package/dist/resources/concepts/external-execution.md +3 -1
- package/dist/resources/concepts/feedback-sheets.md +21 -12
- package/dist/resources/concepts/icp.md +8 -1
- package/dist/resources/concepts/sandbox.md +15 -6
- package/dist/resources/concepts/triggers.md +8 -0
- package/dist/resources/concepts/workbook-classification.md +104 -50
- package/dist/resources/docs/agent-behavior.md +51 -382
- package/dist/resources/docs/campaigns.md +9 -16
- package/dist/resources/docs/crm-integration.md +39 -523
- package/dist/resources/docs/files-and-uploads.md +23 -286
- package/dist/resources/docs/follow-up.md +47 -12
- package/dist/resources/docs/knowledge-base.md +52 -521
- package/dist/resources/docs/pipeline-builder.md +26 -216
- package/dist/resources/docs/pipeline-settings-deep.md +27 -220
- package/dist/resources/docs/platforms.md +106 -519
- package/dist/resources/docs/prompt-anatomy.md +39 -285
- package/dist/resources/docs/routing.md +8 -16
- package/dist/resources/docs/trigger-actions.md +40 -24
- package/dist/resources/docs/variables.md +8 -12
- package/dist/resources/operator-edit.contract.d.ts +7 -0
- package/dist/resources/operator-edit.contract.js +8 -0
- package/dist/resources/operator-edit.contract.js.map +1 -0
- package/dist/resources/registry.js +20 -4
- package/dist/resources/registry.js.map +1 -1
- package/dist/resources/workflows/audit-dialogues.md +23 -12
- package/dist/resources/workflows/compare-models.md +6 -4
- package/dist/resources/workflows/connect-crm-from-scratch.md +15 -12
- package/dist/resources/workflows/connect-datasource-from-scratch.md +5 -4
- package/dist/resources/workflows/extract-from-document.md +8 -6
- package/dist/resources/workflows/operator-edit.md +15 -0
- package/dist/resources/workflows/platform-setup-from-scratch.md +59 -70
- package/dist/resources/workflows/production-readiness-check.md +25 -15
- package/dist/schemas/mcp-tools.json +12061 -6753
- package/dist/schemas/voice-actions-api.contract.json +248 -0
- package/dist/shared/constants/broadcast-reason.constants.d.ts +2 -0
- package/dist/shared/constants/broadcast-reason.constants.js +47 -0
- package/dist/shared/constants/broadcast-reason.constants.js.map +1 -0
- package/dist/shared/constants/crm-stage-pool.constants.d.ts +2 -0
- package/dist/shared/constants/crm-stage-pool.constants.js +3 -0
- package/dist/shared/constants/crm-stage-pool.constants.js.map +1 -0
- package/dist/shared/constants/followup-note.constants.d.ts +3 -0
- package/dist/shared/constants/followup-note.constants.js +4 -0
- package/dist/shared/constants/followup-note.constants.js.map +1 -0
- package/dist/shared/constants/followup-session.constants.d.ts +2 -0
- package/dist/shared/constants/followup-session.constants.js +3 -0
- package/dist/shared/constants/followup-session.constants.js.map +1 -0
- package/dist/shared/constants/funnel-analytics.constants.d.ts +2 -0
- package/dist/shared/constants/funnel-analytics.constants.js +3 -0
- package/dist/shared/constants/funnel-analytics.constants.js.map +1 -0
- package/dist/shared/constants/message-filter.constants.d.ts +7 -0
- package/dist/shared/constants/message-filter.constants.js +8 -0
- package/dist/shared/constants/message-filter.constants.js.map +1 -0
- package/dist/shared/utils/trigger-repeat-mapping.d.ts +72 -0
- package/dist/shared/utils/trigger-repeat-mapping.js +53 -0
- package/dist/shared/utils/trigger-repeat-mapping.js.map +1 -0
- package/dist/skills/besales-dialogue-audit/SKILL.md +31 -20
- package/dist/tasks/task-state-store.js +5 -0
- package/dist/tasks/task-state-store.js.map +1 -1
- package/dist/tools/annotations.js +4 -3
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/definitions/agent-design.d.ts +78 -21
- package/dist/tools/definitions/agent-design.js +246 -90
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/agent-model-notice.d.ts +5 -0
- package/dist/tools/definitions/agent-model-notice.js +31 -0
- package/dist/tools/definitions/agent-model-notice.js.map +1 -0
- package/dist/tools/definitions/agent-models.d.ts +5 -0
- package/dist/tools/definitions/agent-models.js +26 -0
- package/dist/tools/definitions/agent-models.js.map +1 -0
- package/dist/tools/definitions/agent-settings.d.ts +85 -0
- package/dist/tools/definitions/agent-settings.js +187 -0
- package/dist/tools/definitions/agent-settings.js.map +1 -0
- package/dist/tools/definitions/ai-costs.d.ts +12 -0
- package/dist/tools/definitions/ai-costs.js +142 -0
- package/dist/tools/definitions/ai-costs.js.map +1 -0
- package/dist/tools/definitions/api-tool-request.d.ts +15 -0
- package/dist/tools/definitions/api-tool-request.js +2 -0
- package/dist/tools/definitions/api-tool-request.js.map +1 -0
- package/dist/tools/definitions/behavior-shipped-form.d.ts +182 -0
- package/dist/tools/definitions/behavior-shipped-form.js +185 -0
- package/dist/tools/definitions/behavior-shipped-form.js.map +1 -0
- package/dist/tools/definitions/broadcast-alerts.d.ts +6 -0
- package/dist/tools/definitions/broadcast-alerts.js +72 -0
- package/dist/tools/definitions/broadcast-alerts.js.map +1 -0
- package/dist/tools/definitions/broadcast-analytics.d.ts +102 -18
- package/dist/tools/definitions/broadcast-analytics.js +732 -427
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +19 -13
- package/dist/tools/definitions/broadcast-scheduler.js +217 -128
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
- package/dist/tools/definitions/call-operator-task.schema.d.ts +11 -0
- package/dist/tools/definitions/call-operator-task.schema.js +30 -0
- package/dist/tools/definitions/call-operator-task.schema.js.map +1 -0
- package/dist/tools/definitions/contacts.d.ts +3 -0
- package/dist/tools/definitions/contacts.js +57 -31
- package/dist/tools/definitions/contacts.js.map +1 -1
- package/dist/tools/definitions/crm-platform.d.ts +28 -39
- package/dist/tools/definitions/crm-platform.js +235 -344
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/crm-stage-pool.messages.d.ts +39 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js +43 -0
- package/dist/tools/definitions/crm-stage-pool.messages.js.map +1 -0
- package/dist/tools/definitions/crm-stage-pool.schema.d.ts +64 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js +109 -0
- package/dist/tools/definitions/crm-stage-pool.schema.js.map +1 -0
- package/dist/tools/definitions/custom-reports.d.ts +12 -0
- package/dist/tools/definitions/custom-reports.js +68 -0
- package/dist/tools/definitions/custom-reports.js.map +1 -0
- package/dist/tools/definitions/datasource.d.ts +2 -1
- package/dist/tools/definitions/datasource.js +28 -13
- package/dist/tools/definitions/datasource.js.map +1 -1
- package/dist/tools/definitions/dialog-review-findings-response.d.ts +14 -0
- package/dist/tools/definitions/dialog-review-findings-response.js +23 -0
- package/dist/tools/definitions/dialog-review-findings-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review-safe-response.d.ts +5 -0
- package/dist/tools/definitions/dialog-review-safe-response.js +152 -0
- package/dist/tools/definitions/dialog-review-safe-response.js.map +1 -0
- package/dist/tools/definitions/dialog-review.d.ts +49 -0
- package/dist/tools/definitions/dialog-review.js +383 -0
- package/dist/tools/definitions/dialog-review.js.map +1 -0
- package/dist/tools/definitions/dialogue-analysis.d.ts +46 -0
- package/dist/tools/definitions/dialogue-analysis.js +170 -0
- package/dist/tools/definitions/dialogue-analysis.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.d.ts +7 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js +41 -0
- package/dist/tools/definitions/dialogue-audit-agent-scope.js.map +1 -0
- package/dist/tools/definitions/dialogue-audit-alias.d.ts +67 -0
- package/dist/tools/definitions/dialogue-audit-alias.js +559 -0
- package/dist/tools/definitions/dialogue-audit-alias.js.map +1 -0
- package/dist/tools/definitions/dialogue-export.d.ts +7 -1
- package/dist/tools/definitions/dialogue-export.js +89 -32
- package/dist/tools/definitions/dialogue-export.js.map +1 -1
- package/dist/tools/definitions/dialogue-followup-state.d.ts +9 -0
- package/dist/tools/definitions/dialogue-followup-state.js +69 -0
- package/dist/tools/definitions/dialogue-followup-state.js.map +1 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.d.ts +13 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js +292 -0
- package/dist/tools/definitions/edit-version-transport.test-fixtures.js.map +1 -0
- package/dist/tools/definitions/edit-version.d.ts +5 -0
- package/dist/tools/definitions/edit-version.js +20 -0
- package/dist/tools/definitions/edit-version.js.map +1 -0
- package/dist/tools/definitions/external-api-channels.js +17 -15
- package/dist/tools/definitions/external-api-channels.js.map +1 -1
- package/dist/tools/definitions/feedback-document-access.d.ts +16 -0
- package/dist/tools/definitions/feedback-document-access.js +63 -0
- package/dist/tools/definitions/feedback-document-access.js.map +1 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.d.ts +3 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js +9 -0
- package/dist/tools/definitions/fixtures/shipped-setup-status.js.map +1 -0
- package/dist/tools/definitions/follow-up-config.d.ts +79 -0
- package/dist/tools/definitions/follow-up-config.js +258 -0
- package/dist/tools/definitions/follow-up-config.js.map +1 -0
- package/dist/tools/definitions/follow-up-funnel-test.d.ts +4 -3
- package/dist/tools/definitions/follow-up-funnel-test.js +65 -52
- package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -1
- package/dist/tools/definitions/follow-up-promotion-instructions.d.ts +2 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js +7 -0
- package/dist/tools/definitions/follow-up-promotion-instructions.js.map +1 -0
- package/dist/tools/definitions/follow-up-setup.d.ts +4 -28
- package/dist/tools/definitions/follow-up-setup.js +20 -87
- package/dist/tools/definitions/follow-up-setup.js.map +1 -1
- package/dist/tools/definitions/follow-up.d.ts +20 -122
- package/dist/tools/definitions/follow-up.js +200 -354
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/followup-getcourse-compat.d.ts +29 -0
- package/dist/tools/definitions/followup-getcourse-compat.js +62 -0
- package/dist/tools/definitions/followup-getcourse-compat.js.map +1 -0
- package/dist/tools/definitions/followup-sequence-config.schema.d.ts +10 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js +14 -0
- package/dist/tools/definitions/followup-sequence-config.schema.js.map +1 -0
- package/dist/tools/definitions/funnel-analytics.d.ts +18 -0
- package/dist/tools/definitions/funnel-analytics.js +150 -0
- package/dist/tools/definitions/funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/getcourse-anchor-refresh.d.ts +5 -9
- package/dist/tools/definitions/getcourse-anchor-refresh.js +26 -31
- package/dist/tools/definitions/getcourse-anchor-refresh.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-outbound-settings.d.ts +46 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js +37 -0
- package/dist/tools/definitions/getcourse-cold-outbound-settings.js.map +1 -0
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +17 -29
- package/dist/tools/definitions/getcourse-cold-welcome.js +182 -242
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/getcourse-wave-welcome.messages.d.ts +10 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js +17 -0
- package/dist/tools/definitions/getcourse-wave-welcome.messages.js.map +1 -0
- package/dist/tools/definitions/help.js.map +1 -1
- package/dist/tools/definitions/icp-import-source.d.ts +75 -0
- package/dist/tools/definitions/icp-import-source.js +88 -0
- package/dist/tools/definitions/icp-import-source.js.map +1 -0
- package/dist/tools/definitions/inbound-analytics.d.ts +13 -0
- package/dist/tools/definitions/inbound-analytics.js +55 -0
- package/dist/tools/definitions/inbound-analytics.js.map +1 -0
- package/dist/tools/definitions/instagram-comment.templates.d.ts +19 -0
- package/dist/tools/definitions/instagram-comment.templates.js +34 -0
- package/dist/tools/definitions/instagram-comment.templates.js.map +1 -0
- package/dist/tools/definitions/instagram-settings-compat.d.ts +33 -0
- package/dist/tools/definitions/instagram-settings-compat.js +7 -0
- package/dist/tools/definitions/instagram-settings-compat.js.map +1 -0
- package/dist/tools/definitions/knowledge-chunking.d.ts +42 -0
- package/dist/tools/definitions/knowledge-chunking.js +83 -0
- package/dist/tools/definitions/knowledge-chunking.js.map +1 -0
- package/dist/tools/definitions/knowledge-space-search-fields.d.ts +12 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js +30 -0
- package/dist/tools/definitions/knowledge-space-search-fields.js.map +1 -0
- package/dist/tools/definitions/knowledge.d.ts +24 -14
- package/dist/tools/definitions/knowledge.js +342 -233
- package/dist/tools/definitions/knowledge.js.map +1 -1
- package/dist/tools/definitions/legacy-trigger-repeat.d.ts +17 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js +53 -0
- package/dist/tools/definitions/legacy-trigger-repeat.js.map +1 -0
- package/dist/tools/definitions/link-tracking.d.ts +8 -0
- package/dist/tools/definitions/link-tracking.js +141 -38
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/mailing-variant-content.d.ts +75 -0
- package/dist/tools/definitions/mailing-variant-content.js +73 -0
- package/dist/tools/definitions/mailing-variant-content.js.map +1 -0
- package/dist/tools/definitions/model-comparison.d.ts +1 -0
- package/dist/tools/definitions/model-comparison.js +4 -5
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/money-currency.d.ts +5 -0
- package/dist/tools/definitions/money-currency.js +10 -0
- package/dist/tools/definitions/money-currency.js.map +1 -0
- package/dist/tools/definitions/operator-workflow.d.ts +5 -5
- package/dist/tools/definitions/operator-workflow.js +80 -27
- package/dist/tools/definitions/operator-workflow.js.map +1 -1
- package/dist/tools/definitions/platform-funnel-analytics.d.ts +42 -0
- package/dist/tools/definitions/platform-funnel-analytics.js +72 -0
- package/dist/tools/definitions/platform-funnel-analytics.js.map +1 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.d.ts +42 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js +51 -0
- package/dist/tools/definitions/platform-getcourse-wave-field-bindings.js.map +1 -0
- package/dist/tools/definitions/platform-settings-limits.d.ts +5 -0
- package/dist/tools/definitions/platform-settings-limits.js +6 -0
- package/dist/tools/definitions/platform-settings-limits.js.map +1 -0
- package/dist/tools/definitions/platform-settings-shipped-form.d.ts +37 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js +310 -0
- package/dist/tools/definitions/platform-settings-shipped-form.js.map +1 -0
- package/dist/tools/definitions/platform-settings-update.d.ts +300 -0
- package/dist/tools/definitions/platform-settings-update.js +134 -0
- package/dist/tools/definitions/platform-settings-update.js.map +1 -0
- package/dist/tools/definitions/{getcourse-wave.d.ts → platform-setup-wave.d.ts} +75 -6
- package/dist/tools/definitions/platform-setup-wave.js +1079 -0
- package/dist/tools/definitions/platform-setup-wave.js.map +1 -0
- package/dist/tools/definitions/platform-setup.d.ts +701 -222
- package/dist/tools/definitions/platform-setup.js +313 -752
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/platform-widget-page-rules.schema.d.ts +10 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js +7 -0
- package/dist/tools/definitions/platform-widget-page-rules.schema.js.map +1 -0
- package/dist/tools/definitions/prompt-authoring.constants.d.ts +2 -0
- package/dist/tools/definitions/prompt-authoring.constants.js +3 -0
- package/dist/tools/definitions/prompt-authoring.constants.js.map +1 -0
- package/dist/tools/definitions/prompt-batch-controls.d.ts +5 -0
- package/dist/tools/definitions/prompt-batch-controls.js +40 -0
- package/dist/tools/definitions/prompt-batch-controls.js.map +1 -0
- package/dist/tools/definitions/prompt-draft-authoring.d.ts +5 -0
- package/dist/tools/definitions/prompt-draft-authoring.js +24 -0
- package/dist/tools/definitions/prompt-draft-authoring.js.map +1 -0
- package/dist/tools/definitions/prompt-text-projection.d.ts +11 -0
- package/dist/tools/definitions/prompt-text-projection.js +62 -0
- package/dist/tools/definitions/prompt-text-projection.js.map +1 -0
- package/dist/tools/definitions/reviewer-paid.d.ts +19 -0
- package/dist/tools/definitions/reviewer-paid.js +115 -0
- package/dist/tools/definitions/reviewer-paid.js.map +1 -0
- package/dist/tools/definitions/routing-condition-projection.d.ts +31 -0
- package/dist/tools/definitions/routing-condition-projection.js +97 -0
- package/dist/tools/definitions/routing-condition-projection.js.map +1 -0
- package/dist/tools/definitions/schedule-selection-hints.d.ts +3 -0
- package/dist/tools/definitions/schedule-selection-hints.js +42 -0
- package/dist/tools/definitions/schedule-selection-hints.js.map +1 -0
- package/dist/tools/definitions/{scheduled-tasks.d.ts → scheduled-task-alias.d.ts} +12 -10
- package/dist/tools/definitions/scheduled-task-alias.js +207 -0
- package/dist/tools/definitions/scheduled-task-alias.js.map +1 -0
- package/dist/tools/definitions/session.js +3 -3
- package/dist/tools/definitions/session.js.map +1 -1
- package/dist/tools/definitions/setup-init-operation.schema.d.ts +2 -0
- package/dist/tools/definitions/setup-init-operation.schema.js +6 -0
- package/dist/tools/definitions/setup-init-operation.schema.js.map +1 -0
- package/dist/tools/definitions/shared-input.helpers.d.ts +51 -0
- package/dist/tools/definitions/shared-input.helpers.js +323 -0
- package/dist/tools/definitions/shared-input.helpers.js.map +1 -0
- package/dist/tools/definitions/shared.d.ts +414 -284
- package/dist/tools/definitions/shared.js +436 -619
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/shipped-output-names.d.ts +19 -0
- package/dist/tools/definitions/shipped-output-names.js +123 -0
- package/dist/tools/definitions/shipped-output-names.js.map +1 -0
- package/dist/tools/definitions/task-state.d.ts +5 -5
- package/dist/tools/definitions/task-state.js +2 -1
- package/dist/tools/definitions/task-state.js.map +1 -1
- package/dist/tools/definitions/telegram-personal-capacity.d.ts +4 -0
- package/dist/tools/definitions/telegram-personal-capacity.js +18 -0
- package/dist/tools/definitions/telegram-personal-capacity.js.map +1 -0
- package/dist/tools/definitions/telegram-pool-policy.d.ts +8 -0
- package/dist/tools/definitions/telegram-pool-policy.js +56 -0
- package/dist/tools/definitions/telegram-pool-policy.js.map +1 -0
- package/dist/tools/definitions/touch-history-alias.d.ts +4 -0
- package/dist/tools/definitions/touch-history-alias.js +99 -0
- package/dist/tools/definitions/touch-history-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-action-item.schema.d.ts +254 -0
- package/dist/tools/definitions/trigger-action-item.schema.js +121 -0
- package/dist/tools/definitions/trigger-action-item.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-argument.schema.d.ts +14 -0
- package/dist/tools/definitions/trigger-argument.schema.js +23 -0
- package/dist/tools/definitions/trigger-argument.schema.js.map +1 -0
- package/dist/tools/definitions/trigger-claim-alias.d.ts +10 -0
- package/dist/tools/definitions/trigger-claim-alias.js +90 -0
- package/dist/tools/definitions/trigger-claim-alias.js.map +1 -0
- package/dist/tools/definitions/trigger-echo-projection.d.ts +1 -0
- package/dist/tools/definitions/trigger-echo-projection.js +41 -0
- package/dist/tools/definitions/trigger-echo-projection.js.map +1 -0
- package/dist/tools/definitions/trigger-upsert.tool.d.ts +29 -0
- package/dist/tools/definitions/trigger-upsert.tool.js +122 -0
- package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -0
- package/dist/tools/definitions/v15-port-descriptions.d.ts +11 -0
- package/dist/tools/definitions/v15-port-descriptions.js +30 -0
- package/dist/tools/definitions/v15-port-descriptions.js.map +1 -0
- package/dist/tools/definitions/variables.d.ts +44 -0
- package/dist/tools/definitions/variables.js +310 -0
- package/dist/tools/definitions/variables.js.map +1 -0
- package/dist/tools/definitions/voice-action-input.d.ts +9 -0
- package/dist/tools/definitions/voice-action-input.js +141 -0
- package/dist/tools/definitions/voice-action-input.js.map +1 -0
- package/dist/tools/definitions/widget-customization-compat.d.ts +51 -0
- package/dist/tools/definitions/widget-customization-compat.js +23 -0
- package/dist/tools/definitions/widget-customization-compat.js.map +1 -0
- package/dist/tools/definitions.d.ts +1105 -621
- package/dist/tools/definitions.js +57 -27
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/description-localization.js +3 -2
- package/dist/tools/description-localization.js.map +1 -1
- package/dist/tools/follow-up-request.d.ts +19 -0
- package/dist/tools/follow-up-request.js +81 -0
- package/dist/tools/follow-up-request.js.map +1 -0
- package/dist/tools/followup-revision.d.ts +4 -0
- package/dist/tools/followup-revision.js +29 -0
- package/dist/tools/followup-revision.js.map +1 -0
- package/dist/tools/incomplete-list.js +4 -0
- package/dist/tools/incomplete-list.js.map +1 -1
- package/dist/tools/inventory.js +47 -11
- package/dist/tools/inventory.js.map +1 -1
- package/dist/tools/operation-recovery.d.ts +4 -0
- package/dist/tools/operation-recovery.js +33 -0
- package/dist/tools/operation-recovery.js.map +1 -0
- package/dist/tools/registry-mapping-primary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-primary.cases.js +753 -0
- package/dist/tools/registry-mapping-primary.cases.js.map +1 -0
- package/dist/tools/registry-mapping-secondary.cases.d.ts +2 -0
- package/dist/tools/registry-mapping-secondary.cases.js +626 -0
- package/dist/tools/registry-mapping-secondary.cases.js.map +1 -0
- package/dist/tools/registry-mapping.cases.d.ts +8 -0
- package/dist/tools/registry-mapping.cases.js +13 -0
- package/dist/tools/registry-mapping.cases.js.map +1 -0
- package/dist/tools/registry-test-fixtures.d.ts +50 -0
- package/dist/tools/registry-test-fixtures.js +120 -0
- package/dist/tools/registry-test-fixtures.js.map +1 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +82 -52
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/result.d.ts +1 -0
- package/dist/tools/result.js +90 -22
- package/dist/tools/result.js.map +1 -1
- package/dist/tools/toolsets.d.ts +16 -0
- package/dist/tools/toolsets.js +25 -1
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +105862 -22115
- package/dist/utils/credential-signatures.d.ts +3 -0
- package/dist/utils/credential-signatures.js +10 -0
- package/dist/utils/credential-signatures.js.map +1 -0
- package/dist/utils/data-source-column-name.d.ts +10 -0
- package/dist/utils/data-source-column-name.js +36 -0
- package/dist/utils/data-source-column-name.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.js +32 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/secret-read-boundary.d.ts +2 -0
- package/dist/utils/secret-read-boundary.js +88 -0
- package/dist/utils/secret-read-boundary.js.map +1 -0
- package/dist/utils/setup-secrets.d.ts +4 -0
- package/dist/utils/setup-secrets.js +40 -0
- package/dist/utils/setup-secrets.js.map +1 -0
- package/docs/agent-models.md +9 -0
- package/docs/agent-usage-guide.full.ru.md +1 -4
- package/docs/analytics-contract.md +67 -0
- package/docs/async-operation-lifecycle.md +10 -3
- package/docs/connect.ru.md +144 -4
- package/docs/contact-company-profile.md +17 -0
- package/docs/contact-recommendations.md +7 -0
- package/docs/crm-stage-pool.md +73 -0
- package/docs/customer-data.md +61 -0
- package/docs/edit-versions.md +36 -0
- package/docs/failure-semantics.md +17 -9
- package/docs/help-navigation.md +15 -42
- package/docs/host-compatibility-matrix.md +72 -93
- package/docs/host-setup.md +33 -35
- package/docs/invariants/public-api-and-contracts.md +16 -0
- package/docs/legacy-action-settings.md +21 -0
- package/docs/main-transfer-dependencies.md +38 -0
- package/docs/mcp2-parity.md +50 -0
- package/docs/modules/analytics.md +79 -0
- package/docs/modules/besales-mcp.md +137 -0
- package/docs/modules/dialog-review-report.md +38 -0
- package/docs/modules/dialogue-followup-adapters.md +39 -0
- package/docs/modules/message-reactions.md +17 -0
- package/docs/modules/network-mode.md +284 -0
- package/docs/modules/prompt-batch-and-dialogue-controls.md +69 -0
- package/docs/pii-policy.md +21 -16
- package/docs/response-size-budget.md +197 -7
- package/docs/secret-read-boundary.md +102 -0
- package/docs/task-state.md +7 -2
- package/docs/telegram-pool-policy.md +19 -0
- package/docs/tool-effects.md +15 -9
- package/docs/tool-surface.md +205 -4
- package/docs/voice-actions-and-inbox.md +95 -0
- package/docs/wazzup-instagram-comments.md +26 -0
- package/package.json +17 -10
- package/scripts/api-source-loader.spec.mjs +40 -0
- package/scripts/audit-bridge-controls.mjs +129 -0
- package/scripts/audit-revert-mutants.mjs +107 -0
- package/scripts/bridge-api-input.spec.mjs +98 -0
- package/scripts/bridge-controls-mutants.mjs +130 -0
- package/scripts/brx3-shipped-refusals.spec.mjs +149 -0
- package/scripts/brx4-ledger-payload.spec.mjs +127 -0
- package/scripts/build-onprem.mjs +108 -0
- package/scripts/connect-clients.sh +141 -0
- package/scripts/connect-scopes.mjs +166 -0
- package/scripts/connect-scopes.spec.mjs +83 -0
- package/scripts/emit-personal-link-carrier.mjs +31 -0
- package/scripts/emit-setup-init-schemas.mjs +24 -0
- package/scripts/emit-tool-routes.mjs +878 -0
- package/scripts/emit-tool-routes.spec.mjs +300 -0
- package/scripts/followup-registry.spec.mjs +107 -0
- package/scripts/generate-crm-rotation-contract.mjs +98 -0
- package/scripts/generate-followup-session-contract.mjs +16 -0
- package/scripts/icp-import-verification/mutate.cjs +70 -0
- package/scripts/import-secret-read-contract.mjs +53 -0
- package/scripts/install-claude-desktop.js +1 -1
- package/scripts/lag-decisions.mjs +37 -0
- package/scripts/lag-decisions.spec.mjs +87 -0
- package/scripts/lag-open-task-owners.mjs +46 -0
- package/scripts/lag-open-task-owners.spec.mjs +78 -0
- package/scripts/lag-payload.mjs +10 -0
- package/scripts/legacy-action-lag.spec.mjs +22 -0
- package/scripts/legacy-field-refusal.shipped.spec.mjs +99 -0
- package/scripts/mcpcompat-handler.mjs +34 -0
- package/scripts/mcpcompat-loader.mjs +36 -0
- package/scripts/mcpcompat-typescript.mjs +3 -0
- package/scripts/platform-settings-shipped-parity.spec.mjs +89 -0
- package/scripts/prbr-round1-recheck.spec.mjs +605 -0
- package/scripts/prbr-shipped-compatibility.spec.mjs +276 -0
- package/scripts/publish-mcp-registry.mjs +98 -0
- package/scripts/publish-mcp-registry.spec.mjs +68 -0
- package/scripts/record-scheduled-task-call.mjs +26 -0
- package/scripts/refusal-probe.mjs +17 -0
- package/scripts/refusal-probe.spec.mjs +29 -0
- package/scripts/registry-diff.mjs +502 -0
- package/scripts/registry-diff.spec.mjs +787 -0
- package/scripts/request-query.mjs +43 -0
- package/scripts/request-query.spec.mjs +82 -0
- package/scripts/route-lag.mjs +23 -0
- package/scripts/route-lag.spec.mjs +30 -0
- package/scripts/sample-args.mjs +174 -0
- package/scripts/sample-args.spec.mjs +160 -0
- package/scripts/shipped-definitions.mjs +197 -0
- package/scripts/shipped-definitions.spec.mjs +57 -0
- package/scripts/shipped-inputs.spec.mjs +136 -0
- package/scripts/shipped-recordings.spec.mjs +19 -0
- package/scripts/shipped-ref.d.mts +5 -0
- package/scripts/shipped-ref.mjs +20 -0
- package/scripts/shipped-ref.spec.mjs +59 -0
- package/scripts/shipped-registry.mjs +107 -0
- package/scripts/shipped-sample-candidates.mjs +69 -0
- package/scripts/shipped-sample-candidates.spec.mjs +117 -0
- package/scripts/shipped-sample.mjs +868 -0
- package/scripts/shipped-sample.spec.mjs +451 -0
- package/scripts/sync-agent-model-schemas.mjs +72 -0
- package/scripts/sync-api-contracts.mjs +85 -0
- package/scripts/sync-api-contracts.spec.mjs +144 -0
- package/scripts/sync-contract-ledger-schemas.mjs +161 -0
- package/scripts/sync-crm-stage-pool-schema.mjs +85 -0
- package/scripts/sync-prompt-draft-schema.mjs +92 -0
- package/scripts/sync-route-map.mjs +94 -0
- package/scripts/sync-schema-descriptions.mjs +25 -0
- package/scripts/sync-tool-inventory.mjs +27 -0
- package/scripts/sync-trigger-argument-schema.mjs +121 -0
- package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
- package/scripts/sync-voice-actions-contract.mjs +67 -0
- package/scripts/sync-voice-actions-tools.mjs +97 -0
- package/scripts/sync-wave-id-schemas.mjs +55 -0
- package/scripts/tool-input-schemas.mjs +46 -0
- package/scripts/tool-input-schemas.spec.mjs +50 -0
- package/scripts/verify-followup-adapters.mjs +235 -0
- package/scripts/verify-secret-read-import.mjs +84 -0
- package/scripts/verify-secret-read-mutants.mjs +143 -0
- package/dist/tools/definitions/analytics.d.ts +0 -40
- package/dist/tools/definitions/analytics.js +0 -233
- package/dist/tools/definitions/analytics.js.map +0 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +0 -41
- package/dist/tools/definitions/broadcast-mailing-variants.js +0 -194
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +0 -1
- package/dist/tools/definitions/dialogue-audit.d.ts +0 -38
- package/dist/tools/definitions/dialogue-audit.js +0 -292
- package/dist/tools/definitions/dialogue-audit.js.map +0 -1
- package/dist/tools/definitions/getcourse-wave.js +0 -519
- package/dist/tools/definitions/getcourse-wave.js.map +0 -1
- package/dist/tools/definitions/operational-overview.d.ts +0 -3
- package/dist/tools/definitions/operational-overview.js +0 -23
- package/dist/tools/definitions/operational-overview.js.map +0 -1
- package/dist/tools/definitions/scheduled-tasks.js +0 -173
- package/dist/tools/definitions/scheduled-tasks.js.map +0 -1
- package/dist/tools/definitions/trigger-contact-claims.d.ts +0 -7
- package/dist/tools/definitions/trigger-contact-claims.js +0 -60
- package/dist/tools/definitions/trigger-contact-claims.js.map +0 -1
- package/dist/tools/registry-mapping-cases-core.d.ts +0 -38
- package/dist/tools/registry-mapping-cases-core.js +0 -927
- package/dist/tools/registry-mapping-cases-core.js.map +0 -1
- package/dist/tools/registry-mapping-cases-platform.d.ts +0 -2
- package/dist/tools/registry-mapping-cases-platform.js +0 -1052
- package/dist/tools/registry-mapping-cases-platform.js.map +0 -1
- package/dist/tools/trigger-action-config.d.ts +0 -49
- package/dist/tools/trigger-action-config.js +0 -171
- package/dist/tools/trigger-action-config.js.map +0 -1
- package/docs/evals/model-behavior-scorecard.md +0 -80
- package/docs/operation-coverage.md +0 -114
- package/scripts/mock-credentials.js +0 -77
- package/scripts/model-eval-server.js +0 -213
- package/scripts/run-model-eval.js +0 -447
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Чтение аналитики
|
|
2
|
+
|
|
3
|
+
Инструмент воронки сохраняет отгруженные `meta`, `summary`, `cohorts` и добавляет
|
|
4
|
+
`velocity`, `activity`, `trigger-daily`, `drilldown`, `managers`, `stage-path`, `decision-gate`.
|
|
5
|
+
Путь до стадии требует `target_status_id`; список — `metric` и необязательные координаты
|
|
6
|
+
стадии/воронки и страницы. Остальные новые чтения требуют календарный период.
|
|
7
|
+
Имена полей и прежние значения не переименованы. У менеджеров сервер игнорирует режим и
|
|
8
|
+
менеджера: всегда когорта и все менеджеры.
|
|
9
|
+
|
|
10
|
+
«Сегодня» и «Зависшие» — снимок рабочих воронок; без настройки рабочих воронок фильтра нет.
|
|
11
|
+
Ошибки отправки — доказанные отказы за всё время. «Без сделки» — когорта дат без менеджера.
|
|
12
|
+
Журнал стадий хранится 25 месяцев: возраст старых стадий неизмерим.
|
|
13
|
+
|
|
14
|
+
Фасад аналитики рассылок добавляет `registration_intake`: один канал, ограниченный период,
|
|
15
|
+
ось периода и необязательный фильтр воронки. Ответ: состояние, всего/вошли/не вошли, группы,
|
|
16
|
+
люди с исходами приёма и приветствия, воронкой, моментом регистрации, заказами и живой ссылкой.
|
|
17
|
+
Внешний реестр может отставать на 10 минут — 3 часа, редко сутки. Недошедший заказ без решения
|
|
18
|
+
при двух каналах одной воронки виден обоим; итоги каналов не складываются.
|
|
19
|
+
|
|
20
|
+
Инструмент «Входящих» сохраняет все шесть отгруженных значений и поля входа. Все шесть маршрутов текущего API построены; каждый запрос сохраняет собственный отчёт. Момент границы денежного отчёта преобразуется
|
|
21
|
+
в календарный день Москвы. Список заявок — экранный, значения `leads` у инструмента нет.
|
|
22
|
+
Внешние `platform_id` и `channels` переводятся в серверные `channelId` и `transports`;
|
|
23
|
+
все десять отчётов воронки также передают канал как `channelId`.
|
|
24
|
+
|
|
25
|
+
Во «Входящих» заявка — органический заказ, созданный нашим агентом, либо оплаченный заказ
|
|
26
|
+
менеджера школы или самого человека с меткой продажи виджета (оплата по предложению).
|
|
27
|
+
Два заказа одного человека — две заявки. Заявка датируется созданием заказа; счёт заказа
|
|
28
|
+
с меткой продажи — оплатой. Оговорка: если дата создания заказа с меткой продажи виджета
|
|
29
|
+
неизвестна, сервер использует дату оплаты для датировки заявки. Заявка, счёт и оплата относятся
|
|
30
|
+
к своим событиям в календарных сутках Москвы. Определение «Заявок» в описании инструмента и
|
|
31
|
+
подсказке денежного ответа дословно совпадает с серверным:
|
|
32
|
+
`INBOUND_GETCOURSE_APPLICATION_DEFINITION` в
|
|
33
|
+
`besales-api/src/shared/constants/getcourse-application.constants.ts`, используемым описанием
|
|
34
|
+
денежного отчёта в `besales-api/src/control/inbound-analytics/inbound-analytics.controller.ts`.
|
|
35
|
+
Мост сохраняет серверные цифры без пересчёта.
|
|
36
|
+
|
|
37
|
+
Таблица страниц первого захода виджета доступна экрану через отдельный REST-маршрут, без
|
|
38
|
+
нового значения отчёта MCP. Она считает посетителей когорты первого захода: живое сообщение
|
|
39
|
+
и наличие заказа — признаки посетителя на момент снимка. Заявка — заказ, созданный агентом
|
|
40
|
+
в диалоге, или оплаченный заказ с меткой продажи виджета (оплата по предложению), даже без
|
|
41
|
+
заказа агента. Второй случай включает заказ менеджера или самого посетителя; живое сообщение
|
|
42
|
+
для заявки не требуется. Два заказа
|
|
43
|
+
одного посетителя дают один признак; последующие действия не ограничены концом периода
|
|
44
|
+
захода. Денежные отчёты сохраняют собственную единицу — заказы. Отсутствующее значение
|
|
45
|
+
неизвестно, нулём его подменять нельзя.
|
|
46
|
+
|
|
47
|
+
Полнота веток удерживается локальной картой и проверкой перечисления. Выгрузка маршрутов для
|
|
48
|
+
API выполняется после коммита моста: незакоммиченный исходник не является эталоном выгрузки.
|
|
49
|
+
|
|
50
|
+
Фасад рассылок сохраняет готовые `gcUserUrl` и `gcDealUrl` в списках `recipients` (кроме
|
|
51
|
+
поимённого отсева `notSent`), `deals` и `action_failures`. `null` означает отсутствие доказанного
|
|
52
|
+
домена школы или идентификатора; мост и ассистент адрес не придумывают. Школу заказа агента
|
|
53
|
+
определяет явное CRM-подключение заказа, даже если переписка шла в Telegram или ВКонтакте.
|
|
54
|
+
Типы ответов генерируются из OpenAPI целевого API командой `yarn types:gen:api`.
|
|
55
|
+
|
|
56
|
+
Для всех шести входящих отчётов генератор подбирает настоящий транспорт `Telegram`, который
|
|
57
|
+
передаётся серверу как `TELEGRAM`, сохраняя остальные фильтры. Свободная строка `channels`
|
|
58
|
+
в отгруженной схеме не меняется. Подтверждённое расширение перечисления отчётов проверяется
|
|
59
|
+
и после предела перебора: повтор допустим только при приёме обоими фильтрами и том же методе
|
|
60
|
+
и адресе. `stage-path` классифицируется как вариант только v2 по пути `report`;
|
|
61
|
+
неподтверждённый предел перебора сохраняет собственную диагностическую причину.
|
|
62
|
+
|
|
63
|
+
## Валюты и точность сумм
|
|
64
|
+
|
|
65
|
+
Фасад рассылок, список когорт, все шесть отчётов входящих, каталог ссылок и разбивка по источникам принимают `currency`: код из трёх заглавных букв ISO 4217 либо `UNKNOWN`. Поле передаётся одноимённым query-параметром. Пропуск сохраняет серверное поведение: скаляр в валюте школы с предположительными прежними суммами. `UNKNOWN` выбирает только неизвестную исходную валюту. Очереди кандидатов и справочники фасада этот фильтр отвергают по полю `currency`; охват ссылок и лента кликов его не принимают.
|
|
66
|
+
|
|
67
|
+
`moneyTotalsByCurrency` — раздельные итоги исходных валют; их нельзя складывать между валютами. `currency=null` означает неизвестную валюту; `displayCurrency` — подпись показа, `currencyAssumed=true` — предположение. Ни мост, ни ассистент не конвертируют деньги по курсу и не подставляют RUB в неизвестную валюту. `amountExact`, прочие поля `*Exact` и строковое `amount` валютных разрезов сохраняются как десятичные строки без Number/parseFloat/округления; они предпочтительнее числового приближения. Если точной строки нет в ответе API, мост её не выдумывает. Инструкции моста адресованы ассистенту на русском, как остальная поверхность; пересказ человеку — на его языке.
|
|
68
|
+
|
|
69
|
+
Готовые формулировки для пяти языков:
|
|
70
|
+
|
|
71
|
+
| Язык | Подпись и правило |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| ru | Валюта неизвестна. Предположительная валюта показа. Суммы разных валют не складываются; точные суммы сохраняются без округления. |
|
|
74
|
+
| en | Currency unknown. Assumed display currency. Amounts in different currencies are kept separate; exact amounts are preserved without rounding. |
|
|
75
|
+
| es | Moneda desconocida. Moneda de visualización supuesta. Los importes de distintas monedas se mantienen separados; los importes exactos se conservan sin redondear. |
|
|
76
|
+
| id | Mata uang tidak diketahui. Mata uang tampilan diasumsikan. Jumlah dalam mata uang berbeda dipisahkan; jumlah tepat dipertahankan tanpa pembulatan. |
|
|
77
|
+
| uz | Valyuta nomaʼlum. Koʻrsatish valyutasi taxmin qilingan. Turli valyutadagi summalar alohida saqlanadi; aniq summalar yaxlitlanmaydi. |
|
|
78
|
+
|
|
79
|
+
Опубликованная схема входа и локальная карта маршрутов обновляются вместе с кодом; карта содержит запросы с USD. Подписанная выгрузка API, OpenAPI и генерируемые из него типы перевыпускаются креслом после коммита, по правилам происхождения снимка.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Мост инструментов Besales
|
|
2
|
+
|
|
3
|
+
Agent create/update передают raw model серверу: exact aliases/поддержка проверяются API.
|
|
4
|
+
Собственного whitelist мост не имеет. Scheduled daily/hourly.model и max_tokens: отказ до HTTP, пока запись закрыта флагом API SCHEDULED_TASK_MODEL_WRITES_ENABLED (поэтапный выкат); мост откроет их вместе с флагом. Model inventory тест держит эти два договора; другая половина HTTP/БД —
|
|
5
|
+
в API на contracts/mcp-tool-routes.json. Comparison ceiling/subset согласуются с PS;
|
|
6
|
+
execution catalogue не расширяет comparison автоматически. API checker требует явный
|
|
7
|
+
MCP_DIR и сверяет schema export/предел/workflow.
|
|
8
|
+
|
|
9
|
+
Мост проверяет аргументы инструментов, переводит прежнюю форму полей в форму API и возвращает ответы сервера с короткими инструкциями для помощника. Секреты, одноразовые коды подключения и адреса служебных чатов не записываются инструментом настройки предупреждений.
|
|
10
|
+
|
|
11
|
+
Выключатель канала принимается под прежним разделом настроек доступа. Если выключатель передан также в общих настройках, значение общих настроек имеет приоритет, как в прежней системе. Явное выключение сохраняется. Номера воронки, стадии, группы и предложения GetCourse в волнах допускают ноль; отрицательные, дробные и небезопасные целые отвергаются до вызова сервера.
|
|
12
|
+
|
|
13
|
+
## Сверка отгруженного контракта
|
|
14
|
+
|
|
15
|
+
Шаблоны комментариев Instagram принимаются под прежними именами
|
|
16
|
+
`instagram_comment_templates`: `dm`, `dm_complaint`, `public_complaint`, каждый
|
|
17
|
+
с языками `ru`, `uz`, `uz_cyrl`. Мост переводит их в имена HTTP-документа API,
|
|
18
|
+
сохраняя все девять значений. Отсутствующее поле сохраняет настройку, `{}`
|
|
19
|
+
очищает документ, `null` передаёт отсутствие документа. `PUBLIC_AND_DM`
|
|
20
|
+
передаётся отдельным значением; метка жалобы `instagram_comment_kind=COMPLAINT`
|
|
21
|
+
передаётся настройкой триггера. Сервер допускает новые записи только на этапе
|
|
22
|
+
WRITER своей двухэтапной раскатки; отказ ворот не означает отсутствующий маршрут.
|
|
23
|
+
|
|
24
|
+
Каждая строка реестра отставания имеет задачу-владельца вида `TASK-<номер>`
|
|
25
|
+
либо пару `owner=DELIBERATE`, `severity=DELIBERATE` с причиной. Выгрузка
|
|
26
|
+
отказывает при нарушении этого правила в любом разделе реестра, без бюджета
|
|
27
|
+
на строки без владельца. Существование открытой задачи проверяется по рабочему
|
|
28
|
+
плану при разборе пачки; синтаксический сторож не доказывает её открытость.
|
|
29
|
+
|
|
30
|
+
Выгрузка маршрутов сначала проверяет вызов со всеми полями отгруженной схемы. У поимённо учтённых инструментов с взаимоисключающими полями она при отказе пробует минимальный набор обязательных полей вместе с проверенными аргументами маршрута. У каждой такой записи есть причина и владелец. Если полный набор начнёт собираться, выгрузка потребует удалить протухшую запись. Запасной образец проверяет рабочий вариант вызова; совместимость остальных сочетаний необязательных полей он не доказывает.
|
|
31
|
+
|
|
32
|
+
Образец строки запроса отгруженного клиента сохраняет его фактические метод и адрес. Если v2 добавила параметры к запросу, у которого раньше их не было, выгрузка сохраняет пустой объект `{}` и для DELETE, POST, PATCH и PUT. Параметры v2 в него не подставляются. Так удаление переменной с новым `confirm=true` не скрывает прежний вызов без query; отсутствие его старого маршрута требует отдельного объяснения в API.
|
|
33
|
+
|
|
34
|
+
## Настройки канала и предупреждений
|
|
35
|
+
|
|
36
|
+
`besales_broadcast_alert_settings_update` меняет только долю доказанных недоставок. Адрес служебного Telegram-чата привязывают и отключают командой внутри группы. Чтение настроек показывает существующую привязку и порог.
|
|
37
|
+
|
|
38
|
+
Для GetCourse `besales_platform_settings_update` принимает выключатель молчания бота при открытом платном счёте, ссылку на таблицу знаний рабочей области и имена колонок продукта и темы, а также имя переменной контакта с темой. Колонка продукта содержит номера продуктов GetCourse, на которые ссылаются предложения открытого счёта. Любая правка этих пяти полей требует явного подтверждения. При включении сервер требует все четыре опорных поля в сохранённом состоянии. Причины молчания сервер подписывает на языке канала; помощник показывает подпись, а не внутренний код.
|
|
39
|
+
|
|
40
|
+
Карта маршрутов проверяет обычные настройки канала и подтверждённую правку открытого счёта двумя отдельными образцами. Оба вызывают один маршрут, но у правки счёта есть собственная проверка подтверждения на стороне сервера.
|
|
41
|
+
|
|
42
|
+
## Действия и аудит заказов
|
|
43
|
+
|
|
44
|
+
У шага создания заказа GetCourse можно включить использование уже открытого платного счёта человека той же школы. Подходит только счёт, чей продукт входит в предложение шага; ограничения давности нет. Если сведения о продуктах счёта или предложения получить не удалось, сервер не считает счёт подходящим. Сервер возвращает `reusedOpenInvoice=true` у успешно использованного счёта. Это успешное выполнение шага, но нового заказа и новой денежной регистрации нет. Выгрузка переписки и сценарий аудита исключают такой шаг из числа новых заказов.
|
|
45
|
+
|
|
46
|
+
## Цепочки и волны
|
|
47
|
+
|
|
48
|
+
Записка цепочки задаётся как `config.contactVariablesOnSend`: от одного до десяти имён переменных контакта с непустым значением длиной до 500 кодовых единиц. Для полной правки цепочки прочитанную записку нужно передать обратно. Ответ записи может содержать `warnings[]` о неготовой CRM-стадии; предупреждение не отменяет успешную запись.
|
|
49
|
+
|
|
50
|
+
У одиночной волны GetCourse и долгого прогона строка получателя и новая строка сделки записываются за ведущим каналом человека, даже если список загрузили через соседний канал. Существующая строка сделки остаётся за каналом первой волны. Деньги и зачёт оплаты читают канал строки сделки. Предпросмотр и статус показывают `ledByOtherSchoolChannel.count` — число людей, чей живой адрес ведёт соседний канал.
|
|
51
|
+
|
|
52
|
+
## Аналитика и правила текста
|
|
53
|
+
|
|
54
|
+
В отчёте циклов сделки поле `cut` различает общий итог стадии и разрезы по продукту или сегменту. Пустой ключ разреза означает отсутствие продукта или сегмента, а не строку «Итого». Для итога берут `cut=overall`; медианы разрезов не складывают.
|
|
55
|
+
|
|
56
|
+
В правилах замены исходящего текста образец должен быть непустым после `trim()`, но его значимые краевые пробелы сохраняются. Образец и замена отвергают несимволы Unicode. Сервер раскрывает escape в замене за один проход и экранирует обратную черту при чтении; прочитанную замену можно отправить обратно без изменения смысла.
|
|
57
|
+
|
|
58
|
+
При правке только правил замены мост не добавляет `skip_task_creation_on_call_operator` в запрос: сохранённый выбор о создании задачи при вызове оператора должен остаться прежним. Явно переданное значение, включая `false`, мост переносит из прежней секции расписания в секцию фильтров. Для первой записи секции серверу требуется умолчание `false`; пока серверная схема требует поле без умолчания, такая частичная запись будет отклонена.
|
|
59
|
+
|
|
60
|
+
## Имена сервера и прежние имена
|
|
61
|
+
|
|
62
|
+
Сервер говорит только своими именами: канал подключения — `channelId`, карточка контакта — `contactId`, мессенджер (Telegram, WhatsApp…) — `transport`/`transports`, номер ученика GetCourse — `getcourseUserId`. Вход отгруженных инструментов остаётся прежним (`platform_id`, `channels`, `contact_id` у строк волн): мост переводит его в имена сервера в `createRequest`. Прежних имён в запросе к серверу нет — это держит сторож `legacy-api-names.spec.ts`: каждая запись карты маршрутов и синтаксическое дерево определений. Исключения поимённые: дописывание выдачи и два неиспользуемых помощника.
|
|
63
|
+
|
|
64
|
+
Выдача инструмента, отгруженного клиентам, не теряет ни одного поля из-за переименований на сервере: реестр `shipped-output-names.ts` дописывает прежнее имя рядом с новым в каждом объекте выдачи — то же значение, имя сервера остаётся на месте. Дописывание стоит в одном месте — в обработчике вызова, после ответа инструмента; инструкция ответа называет дописанные имена. Новые инструменты получают только новые имена. Состав реестра выведен из описания сервера (операция с переименованным полем ответа → запись карты → инструмент отгружен), независимый перечень ожидаемых пар держит `shipped-output-names.spec.ts`. Ранние дописывания истории касаний и охвата ссылки живут в своих инструментах.
|
|
65
|
+
|
|
66
|
+
У людей прогона волны `contactId` — карточка контакта, `getcourseUserId` — номер ученика; для повторной отправки в `contact_id` подставляется номер ученика. Инструкция инструмента говорит это прямо.
|
|
67
|
+
|
|
68
|
+
Прежняя установка моста после переключения сервера шлёт прежние имена и получает отказ `LEGACY_FIELD_NAME` с полями `field`, `replacement` и `remediation`. Прежний клиент показывает модели текст `remediation` («перезапустите приложение, без поля запрос не отправляйте») вместо своего «исправь причину и повтори вызов»; это проверяет `scripts/legacy-field-refusal.shipped.spec.mjs` на коде отгруженной линии.
|
|
69
|
+
|
|
70
|
+
## Сессии подключения
|
|
71
|
+
|
|
72
|
+
API возвращает `channel_id`, а `besales_platform_create_status` дописывает
|
|
73
|
+
`platform_id` для отгруженного клиента, в том числе null. Старый ответ с
|
|
74
|
+
`platform_id` поддерживается. Ссылка и ref трёх init передаются человеку без
|
|
75
|
+
логовой редакции успешного tool result; CRM содержит оба массива имён полей.
|
|
76
|
+
Путь debug-записи маскируется, четыре polling пути кодируют ref как один сегмент.
|
|
77
|
+
В долговечную задачу допускается ref, адрес страницы запрещён.
|
|
78
|
+
|
|
79
|
+
До переключения API выпуск v2 доступен только как `next`. `latest` меняется
|
|
80
|
+
в момент переключения с сообщением «перезапустите приложение». Старый
|
|
81
|
+
установленный handler на новом API не создаёт `platform_id`; это известное
|
|
82
|
+
окно перехода. Дописывание нового моста не обновляет уже запущенный процесс.
|
|
83
|
+
|
|
84
|
+
Читатель HTTP-метаданных вызывает `ApiClient.requestWithResponse<T>` и получает `{status, data, headers}`.
|
|
85
|
+
Axios-транспорт передаёт все заголовки ответа с именами в нижнем регистре, включая Cache-Control, Pragma,
|
|
86
|
+
Retry-After, Content-Type, Content-Disposition и корреляцию. Многозначные заголовки сохраняются массивами.
|
|
87
|
+
Обычные `request`/`post` возвращают тело; заголовки ошибок доступны в `ApiClientError.headers`.
|
|
88
|
+
Мост не сохраняет тела ответов в постоянном кэше и не добавляет HTTP-метаданные в текст инструмента.
|
|
89
|
+
Неожиданные строки, массивы и scalar ответы читателей прогонов проходят безопасную проекцию
|
|
90
|
+
до перевода отгруженных имён и превращаются в пустую оболочку.
|
|
91
|
+
|
|
92
|
+
## Перечни и подсказки рассылок
|
|
93
|
+
|
|
94
|
+
enumValuesByPath разворачивает refs и все ветки anyOf/oneOf/allOf любой глубины, собирает enum и const на каждом пути, включая элементы массива [] и отдельную скалярную ветку. null в перечне и ветви не считается значением. Битая ссылка вызывает отказ. Сторож сравнивает значения общих путей в JSON и фактическом zod-фильтре; односторонние пути учтены поимённо, отказы конвертера считаются по именам, число сравнений не опускается ниже замера. Замер 01.10.2026: 274 общих пути, 4 односторонних, 0 отказов. Два старых перечня импорта разбора диалогов сгенерированы из фильтра: 12 категорий и 4 уровня.
|
|
95
|
+
|
|
96
|
+
Граница обещания: совпадение перечней не доказывает полноту необязательных полей в обратную сторону (zod→JSON), сочетания полей и доступность живого API. Тот сверочный контур остаётся отдельным.
|
|
97
|
+
Пределы `minimum`/`maximum`/`maxItems` сверяются только там, где есть отдельный тест, например `model-comparison.spec.ts`.
|
|
98
|
+
|
|
99
|
+
Ответы предпросмотра, истории и пула объясняют все причины excludedBy; сохранение расписания направляет к besales_broadcast_schedule_preview без копии перечня причин. repeatNoCard означает отсутствие живой или восстановимой карточки на канале расписания. contactBlocked/blocked говорят о бане, отказах, действующем мьюте или слиянии: операторское удаление само по себе не держит отправку. По умолчанию пул выбирает старший по дате создания подходящий GetCourse-канал; web widget остаётся отдельной платформой.
|
|
100
|
+
|
|
101
|
+
### Совместимость настроек канала и доставки шага
|
|
102
|
+
|
|
103
|
+
`besales_followup_sequence_upsert` описывает `config.steps[].getcourse.delivery` в публичной
|
|
104
|
+
схеме и при проверке вызова. Режимы `contact`, `all`, `explicit` и написание транспортов школы
|
|
105
|
+
передаются серверу без переименования внутри `config`. `all` исключает SMS, явный список
|
|
106
|
+
непустой; SMS требует отдельного шага. Доставка у вебхука отвергается. Полная правка с
|
|
107
|
+
`delivery: null`, `contact` или без доставки снимает носитель набора; серверный флаг записи
|
|
108
|
+
остаётся в силе. Для защиты открытой формы передавай в PATCH её исходную `editRevision`
|
|
109
|
+
через `expected_version`. Без него нужны оба права `read:workflows` и `write:workflows`:
|
|
110
|
+
мост читает текущую ревизию по ID цепочки в канале, затем выполняет один PATCH.
|
|
111
|
+
Это защищает только окно между GET и PATCH: изменения после открытия формы и до GET
|
|
112
|
+
могут быть перезаписаны. Чтение текущей ревизии не заменяет исходную ревизию формы.
|
|
113
|
+
Если ревизия успела измениться, 409 возвращается вызывающему без автоматического повтора.
|
|
114
|
+
Ошибка чтения или некорректная ревизия останавливают запись.
|
|
115
|
+
Объекты `getcourse` и `getcourse.delivery` дополнительно принимают `null`: это расширение
|
|
116
|
+
прежнего ввода объявлено в реестре отдельно; долги отсутствовавших полей доставки сняты.
|
|
117
|
+
|
|
118
|
+
`instagram_comment_templates` принимает три группы (`dm`, `dm_complaint`, `public_complaint`)
|
|
119
|
+
и три языка (`ru`, `uz`, `uz_cyrl`). Мост переводит их в серверные имена, сохраняя все девять
|
|
120
|
+
значений. Объект полностью заменяет шаблоны, `{}` и `null` очищают, отсутствие сохраняет. Предел одного
|
|
121
|
+
текста — 500 кодовых единиц UTF-16. `PUBLIC_AND_DM` остаётся самостоятельным режимом.
|
|
122
|
+
|
|
123
|
+
В прежнем оформлении виджета переводятся также `popup.backgroundColor/textColor`,
|
|
124
|
+
`window.botMessageBackgroundColor` и `window.userMessageBorderColor`. Канонический раздел
|
|
125
|
+
`general_settings.customization.popup` тоже передаётся серверу. `null` у CRM-полей правила
|
|
126
|
+
`entry_url_variable_mapping.rules[]` удаляет соответствующие ключи; остальные поля и правила
|
|
127
|
+
сохраняются. Три отказа на сброс оформления и карт целиком остаются адресными. Прежние пустые
|
|
128
|
+
списки сайтов означают `['*']`, канонический пустой список означает отсутствие доступа.
|
|
129
|
+
|
|
130
|
+
Настройки канала, поведения и холодных отправок GetCourse идут **одним PATCH** в
|
|
131
|
+
`/channels/:id/settings` и сохраняются в одной транзакции: ошибка любой секции отменяет
|
|
132
|
+
всю запись. Ответ сохраняет `getcourseOutboundSettings` с хранимыми и действующими
|
|
133
|
+
значениями для переданных полей предохранителя и тихого периода.
|
|
134
|
+
|
|
135
|
+
Адрес отказавшего поля API сохраняется в `error.details.path`, например `isEnabled` или
|
|
136
|
+
`config.steps[0].getcourse.delivery`. Диагностика допускает только ограниченный адрес поля;
|
|
137
|
+
URL, файловые пути и произвольное содержимое вместо адреса не передаются.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Отчёт ревизора диалогов
|
|
2
|
+
|
|
3
|
+
Оба инструмента чтения находок запрашивают `format=page`. Сервер сначала получает поддержку
|
|
4
|
+
этого параметра, сохраняя массив по умолчанию, затем выпускается мост. Новый мост нельзя
|
|
5
|
+
направлять на сервер, который ещё отвергает параметр; откат сервера требует отката моста.
|
|
6
|
+
Наличие пакета в npm не определяет наличие локальных установок из исходников.
|
|
7
|
+
|
|
8
|
+
Новая форма — `{ items, truncated }`. Первыми идут самые тяжёлые находки; отбор выполняется
|
|
9
|
+
перед ограничением числа строк. `truncated=true` означает, что находок больше, чем показано.
|
|
10
|
+
При лимите меньше 100 его можно увеличить; на потолке нужно сузить отбор.
|
|
11
|
+
|
|
12
|
+
Переводчик прежних имён читает как массив, так и новую страницу. Для массива признак
|
|
13
|
+
вычисляется пробой на одну лишнюю строку; при лимите 100 полный массив остаётся осторожно
|
|
14
|
+
усечённым. Для новой страницы используется признак сервера вместе с размером ответа.
|
|
15
|
+
Нативный инструмент обозначает неизвестную полноту массива как `truncated=null`.
|
|
16
|
+
Неизвестная форма ответа приводит к явной ошибке.
|
|
17
|
+
|
|
18
|
+
`chunkCount` в переводе отчёта — число начатых попыток разбора (`segmentAttemptCount`).
|
|
19
|
+
Одна попытка может включать несколько обращений к провайдеру либо ни одного. `null` означает
|
|
20
|
+
«не измерено», а 0 — измеренный ноль. Внешний импорт не вызывает модель. Прогон принадлежит
|
|
21
|
+
одному агенту, поэтому `agentCount=1`; `rejectedFindingCount` сохраняет число находок,
|
|
22
|
+
которые сервер не записал. Сводка моделью здесь не строится.
|
|
23
|
+
|
|
24
|
+
`rejectedFindings` ответа внешнего импорта учитывает находки принятых отрезков с чужим
|
|
25
|
+
якорем и находки по стёртому контакту. Ненулевое значение само по себе не доказывает ошибку
|
|
26
|
+
якоря. Карточка использует человеческое имя агента из `report.agentName`.
|
|
27
|
+
|
|
28
|
+
Карточка прогона возвращает допущенную сервером справку summary и состояние summaryState.
|
|
29
|
+
Справка собирается только из подтверждённых фрагментов, а не из свободного ответа модели;
|
|
30
|
+
оба инструмента карточки помечены как носители персональных данных клиентов воркспейса.
|
|
31
|
+
Отсутствие справки именовано, например нечитаемая политика канала, отказ бюджета или
|
|
32
|
+
стирание источника. Список прогонов summary не содержит. Область маршрута — read:agents
|
|
33
|
+
(для ключа MCP — composite mcp:*); автономного чтения источников мост не делает.
|
|
34
|
+
|
|
35
|
+
Оба инструмента карточки фильтруют ответ по явному списку публичных полей. Служебные токен
|
|
36
|
+
владельца, heartbeatAt, отпечатки правил и инструкции, а также неизвестные новые поля
|
|
37
|
+
не проходят в ответ моста. Публичные счётчики, справка и report сохраняются; псевдоним
|
|
38
|
+
добавляет прежние имена только после фильтрации.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# План воронки и независимая пауза дожимов
|
|
2
|
+
|
|
3
|
+
`besales_followup_funnel_test_plan` принимает необязательный `funnel_id` и передаёт его как
|
|
4
|
+
`funnelId` в тело плана по адресу человека. Без поля тело запроса отсутствует, как прежде.
|
|
5
|
+
API проверяет пространство, канал и архивность выбранной воронки. Закрытый расширенный режим
|
|
6
|
+
возвращает отказ; мост не переключает его. План сохраняет черновик и ничего не отправляет.
|
|
7
|
+
Запуск остаётся отдельным инструментом с явным подтверждением и причиной после показа плана.
|
|
8
|
+
|
|
9
|
+
`besales_dialogue_followup_state_get` читает один диалог. API определяет пару «контакт × канал»
|
|
10
|
+
и возвращает сохранённое и действующее состояние, время измерения, `editVersion`, доступные
|
|
11
|
+
действия, последствия и ограничения. Мост сохраняет ответ целиком и не переводит тексты API.
|
|
12
|
+
|
|
13
|
+
`besales_dialogue_followup_state_update` вызывает `PATCH /conversations/:id/followup-state/bridge`:
|
|
14
|
+
|
|
15
|
+
| Аргумент | Тело API | Правило |
|
|
16
|
+
| ------------------ | -------------------- | ------------------------------------------------------------------ |
|
|
17
|
+
| `conversation_id` | идентификатор в пути | Обязателен |
|
|
18
|
+
| `action` | `action` | `ENABLE`, `MUTE_FOREVER`, `MUTE_TEMPORARY` |
|
|
19
|
+
| `expected_version` | `expectedVersion` | Обязательная версия из чтения этого диалога |
|
|
20
|
+
| `mute_expires_at` | `muteExpiresAt` | Только для `MUTE_TEMPORARY`, обязательный момент со смещением зоны |
|
|
21
|
+
|
|
22
|
+
Временные границы проверяет API. Перед записью ассистент показывает последствия и ограничения
|
|
23
|
+
и получает явное решение человека. Ключу нужны права чтения диалогов и расширение настройки
|
|
24
|
+
платформы `mcp:platform-setup` для записи (`write:followup-state`); API проверяет текущие права
|
|
25
|
+
создателя ключа и доступ к диалогу. Писатель не меняет права и не использует экранный маршрут.
|
|
26
|
+
|
|
27
|
+
Ответ записи сохраняется целиком, включая `outcome` и `state`. На 409/428 запрос автоматически
|
|
28
|
+
не повторяется: ассистент сохраняет намерение, перечитывает состояние, показывает актуальные
|
|
29
|
+
последствия и ждёт нового решения человека. Сетевой сбой означает неизвестный исход, для
|
|
30
|
+
проверки используется чтение. Ошибка чтения не означает включённые дожимы.
|
|
31
|
+
|
|
32
|
+
Выключение может отменить текущие касания; включение их не воскрешает. Пауза не отзывает уже
|
|
33
|
+
доставленное и не обещает остановить все сообщения. Ответы API на ru/en/es/id/uz сохраняются
|
|
34
|
+
без подмены локализованных причин или матрицы последствий.
|
|
35
|
+
|
|
36
|
+
Проверки адаптеров: `node scripts/verify-followup-adapters.mjs`. Скрипт создаёт временную копию
|
|
37
|
+
моста, добавляет только нужные записи каталога для проверки будущей сборки и выполняет адресные
|
|
38
|
+
наборы и мутации в этой копии. Исходный сгенерированный каталог выпускает интегратор после
|
|
39
|
+
сведения с читающим инструментом; до этого выпуска дерево не является готовым пакетом MCP.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Реакции сотрудника на сообщения
|
|
2
|
+
|
|
3
|
+
Emoji на конкретном сообщении — операторский HTTP API besales-api. Мост не получает нового инструмента и не подменяет эту операцию инструментом `besales_followup_reactions`: тот читает аналитику откликов на дожимы через GET.
|
|
4
|
+
|
|
5
|
+
Операторские маршруты под `/api/v2/workspaces/{workspaceId}/messages`:
|
|
6
|
+
|
|
7
|
+
- `POST /reactions/query`, тело `{messageIds: UUID[]}` длиной 1–100, чтение диалогов.
|
|
8
|
+
- `PUT /{messageId}/reaction`, тело `{emoji}`, обязательный `Idempotency-Key: UUID`, право ответа. `null` снимает реакцию.
|
|
9
|
+
- `GET /{messageId}/reaction/operations/{operationKey}`, где ключ — исходный `Idempotency-Key`, чтение исхода той же команды.
|
|
10
|
+
|
|
11
|
+
Операции доступны вошедшему сотруднику. Ключ MCP не становится оператором. Сервер сам определяет Telegram-адрес, физический номер, канал и автора.
|
|
12
|
+
|
|
13
|
+
Подтверждённое состояние общее для сотрудников области. Это последняя принятая команда BeSales, не live-счётчик Telegram. 204 означает подтверждение провайдера и долговечную запись. Ошибки 409/503 сохраняют прежний emoji; неизвестную команду нельзя автоматически повторять новым ключом. После replay старого подтверждённого ключа следует перечитать batch — replay не откатывает более новую команду.
|
|
14
|
+
|
|
15
|
+
Контрактные DTO и Swagger-декораторы принадлежат besales-api. Выпуск канонического OpenAPI и синхронизация `src/types/api-contract.gen.ts` выполняются вместе с итоговым API ref. В карту MCP-маршрутов операторская запись не добавляется.
|
|
16
|
+
|
|
17
|
+
Проверки границы: `src/tools/definitions/message-reaction-boundary.spec.ts` и существующий `follow-up.spec.ts`.
|