@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// по фильтрам + транскрипт одного диалога. Scope read:conversations (входит в mcp:*).
|
|
3
3
|
// MCP файлы НЕ пишет — данные возвращаются, вызывающий AI раскладывает по файлам.
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
5
|
+
import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
6
6
|
const workLogEventSchema = z.enum([
|
|
7
7
|
'START',
|
|
8
8
|
'IN_PROCESS',
|
|
@@ -15,6 +15,7 @@ const workLogEventSchema = z.enum([
|
|
|
15
15
|
export const dialogueExportTools = [
|
|
16
16
|
defineTool({
|
|
17
17
|
name: 'besales_dialogues_query',
|
|
18
|
+
carriesCustomerData: true,
|
|
18
19
|
sideEffect: 'none',
|
|
19
20
|
closedWorld: true,
|
|
20
21
|
requiredFields: [],
|
|
@@ -24,37 +25,84 @@ export const dialogueExportTools = [
|
|
|
24
25
|
schema: z
|
|
25
26
|
.object({
|
|
26
27
|
workspace_id: uuidSchema.optional(),
|
|
27
|
-
|
|
28
|
+
source: z.enum(['export', 'inbox']).optional(),
|
|
29
|
+
channel_id: uuidSchema.optional(),
|
|
30
|
+
contact_id: uuidSchema.optional(),
|
|
31
|
+
purchased: z.boolean().optional(),
|
|
32
|
+
has_payment: z.boolean().optional(),
|
|
33
|
+
with_totals: z.boolean().optional(),
|
|
34
|
+
// Фильтр по каналам диалога.
|
|
28
35
|
platform_ids: z.array(uuidSchema).optional(),
|
|
29
|
-
//
|
|
36
|
+
// Окно, ISO 8601: по сообщениям, а при фильтре действия — по времени исполнения.
|
|
30
37
|
date_from: z.string().datetime().optional(),
|
|
31
38
|
date_to: z.string().datetime().optional(),
|
|
32
|
-
// CRM
|
|
39
|
+
// CRM-статусы контакта.
|
|
33
40
|
lead_status: z.array(z.string().min(1)).optional(),
|
|
34
|
-
// Причины
|
|
41
|
+
// Причины остановки автоматизации контакта.
|
|
35
42
|
deactivate_reason: z.array(z.string().min(1)).optional(),
|
|
36
43
|
// Фильтр по ПОСЛЕДНЕМУ событию platform_work_logs диалога.
|
|
37
44
|
work_log_event: z.array(workLogEventSchema).optional(),
|
|
38
|
-
//
|
|
45
|
+
// Типы ШАГОВ действия (GETCOURSE_CREATE_DEAL…). Неизвестный тип — 400 со списком.
|
|
39
46
|
action_type: z.array(z.string().min(1)).optional(),
|
|
40
|
-
//
|
|
47
|
+
// Успех шага указанного типа; без типа — успех исполнения целиком.
|
|
41
48
|
action_success: z.boolean().optional(),
|
|
42
|
-
// Режим
|
|
49
|
+
// Режим исполнения; test — 422: тестовые диалоги в выгрузку не входят.
|
|
43
50
|
action_execution_mode: z.enum(['production', 'test']).optional(),
|
|
44
|
-
//
|
|
51
|
+
// Активность AI для контакта.
|
|
45
52
|
ai_enabled: z.boolean().optional(),
|
|
46
|
-
//
|
|
53
|
+
// Активность follow-up для контакта.
|
|
47
54
|
followups_enabled: z.boolean().optional(),
|
|
48
55
|
// true — только с сообщениями; false — только без.
|
|
49
56
|
has_messages: z.boolean().optional(),
|
|
50
57
|
limit: z.number().int().min(1).max(100).optional(),
|
|
51
58
|
cursor: z.string().optional(),
|
|
52
59
|
})
|
|
53
|
-
.strict()
|
|
60
|
+
.strict()
|
|
61
|
+
.superRefine((input, context) => {
|
|
62
|
+
const fields = input.source === 'inbox'
|
|
63
|
+
? [
|
|
64
|
+
'platform_ids',
|
|
65
|
+
'date_from',
|
|
66
|
+
'date_to',
|
|
67
|
+
'lead_status',
|
|
68
|
+
'deactivate_reason',
|
|
69
|
+
'work_log_event',
|
|
70
|
+
'action_type',
|
|
71
|
+
'action_success',
|
|
72
|
+
'action_execution_mode',
|
|
73
|
+
'ai_enabled',
|
|
74
|
+
'followups_enabled',
|
|
75
|
+
'has_messages',
|
|
76
|
+
]
|
|
77
|
+
: ['channel_id', 'contact_id', 'purchased', 'has_payment', 'with_totals'];
|
|
78
|
+
for (const field of fields)
|
|
79
|
+
if (input[field] !== undefined)
|
|
80
|
+
context.addIssue({
|
|
81
|
+
code: 'custom',
|
|
82
|
+
path: [field],
|
|
83
|
+
message: input.source === 'inbox'
|
|
84
|
+
? 'Этот фильтр относится к выгрузке диалогов; для Входящих он недоступен.'
|
|
85
|
+
: 'Для фильтров Входящих выбери source=inbox.',
|
|
86
|
+
});
|
|
87
|
+
}),
|
|
54
88
|
createRequest: (input) => {
|
|
89
|
+
if (input.source === 'inbox')
|
|
90
|
+
return {
|
|
91
|
+
method: 'POST',
|
|
92
|
+
path: `/workspaces/${input.workspace_id}/conversations/search`,
|
|
93
|
+
body: compactObject({
|
|
94
|
+
channelId: input.channel_id,
|
|
95
|
+
contactId: input.contact_id,
|
|
96
|
+
purchased: input.purchased,
|
|
97
|
+
hasPayment: input.has_payment,
|
|
98
|
+
withTotals: input.with_totals,
|
|
99
|
+
limit: input.limit,
|
|
100
|
+
cursor: input.cursor,
|
|
101
|
+
}),
|
|
102
|
+
};
|
|
55
103
|
const params = new URLSearchParams();
|
|
56
104
|
if (input.platform_ids?.length) {
|
|
57
|
-
params.set('
|
|
105
|
+
params.set('channelIds', input.platform_ids.join(','));
|
|
58
106
|
}
|
|
59
107
|
if (input.date_from) {
|
|
60
108
|
params.set('dateFrom', input.date_from);
|
|
@@ -101,20 +149,29 @@ export const dialogueExportTools = [
|
|
|
101
149
|
path: `/workspaces/${input.workspace_id}/dialogue-export${query ? `?${query}` : ''}`,
|
|
102
150
|
};
|
|
103
151
|
},
|
|
104
|
-
enhanceResponse: (response) =>
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
152
|
+
enhanceResponse: (response, input) => input.source === 'inbox'
|
|
153
|
+
? withInstructions(response, [
|
|
154
|
+
'Входящие: purchased=true — успешный заказ агента ИЛИ текущая продажная стадия; false — нет обоих признаков. Это не оплата; has_payment — отдельный фильтр.',
|
|
155
|
+
'hasPurchase в строке, отбор и итоги считает сервер до пагинации. С channel_id область ограничена каналом, без него — видимыми каналами человека. Не вычисляй покупку по hasPayment.',
|
|
156
|
+
'Если cursor непустой, повтори source=inbox с теми же фильтрами и cursor. with_totals возвращает ограниченные итоги только первой страницы; capped=true означает 999+, а не точный итог.',
|
|
157
|
+
])
|
|
158
|
+
: withInstructions(response, [
|
|
159
|
+
'Манифест подходящих диалогов: { data: DialogueExportItem[], total, cursor }. total — число ДИАЛОГОВ, а не заявок: в одном диалоге их бывает несколько, считай заявки по транскрипту.',
|
|
160
|
+
'Пагинация: если cursor не null — повтори тот же вызов с этим cursor, пока не соберёшь все диалоги.',
|
|
161
|
+
'Для аудита новых заявок используй action_type=["GETCOURSE_CREATE_DEAL"] и action_execution_mode="production" БЕЗ action_success и считай исходы шагов по транскрипту: action_success=true отсекает провалы и неизвестные исходы, которым нужен REVIEW. Успешный шаг с reusedOpenInvoice=true использовал открытый счёт: нового заказа нет. Тип, успех и окно дат сходятся на ОДНОМ шаге одного исполнения, окно — по времени исполнения.',
|
|
162
|
+
'action_success БЕЗ action_type — по исходу исполнения: true — действие ВЫПОЛНЕНО по-настоящему (outcome=DONE в транскрипте; действие, все МЕНЯЮЩИЕ шаги которого пропущены защитой, успехом не считается, хотя его status=SUCCEEDED), false — всё невыполненное: пропуск, сбой, незавершённое. С action_type пропуск шага не считается ни успехом, ни провалом.',
|
|
163
|
+
'GETCOURSE_SEND_PAYMENT_LINK анализируй отдельно: он может обновлять существующий заказ и сам по себе не доказывает создание новой заявки.',
|
|
164
|
+
'Тексты переписки здесь НЕ отдаются — по каждому conversationId вызывай besales_dialogue_transcript.',
|
|
165
|
+
'lastWaveSentAt / firstPaidAt / paidAmount — LIFETIME-маркеры контакта, а НЕ одна цепочка: это ПОСЛЕДНЯЯ волна, ПЕРВАЯ оплата и сумма всех прямых оплат. У контакта с несколькими волнами разность firstPaidAt − lastWaveSentAt может выйти отрицательной — вычитать их нельзя.',
|
|
166
|
+
'Метки lastWaveSentAt / firstPaidAt / paidAmount / lastWorkLogEvent считаются по ЧЕЛОВЕКУ через все его каналы: у человека с двумя диалогами обе строки несут одни и те же значения — не складывай их.',
|
|
167
|
+
'Для атрибуции оплаты к конкретной волне бери когортные цифры из besales_broadcast_analytics_get: там оплаты считаются переходами относительно даты волны.',
|
|
168
|
+
'firstPaidAt/paidAmount заполняются только для GetCourse и только при наличии scope read:analytics; null означает «неизвестно», а не «не платил». paidAmount — прямые оплаты по реестру, косвенные (подтверждённые оператором) в него не входят.',
|
|
169
|
+
'MCP файлы не пишет: сохрани результаты локально сам (по файлу на диалог).',
|
|
170
|
+
]),
|
|
115
171
|
}),
|
|
116
172
|
defineTool({
|
|
117
173
|
name: 'besales_dialogue_transcript',
|
|
174
|
+
carriesCustomerData: true,
|
|
118
175
|
sideEffect: 'none',
|
|
119
176
|
closedWorld: true,
|
|
120
177
|
requiredFields: ['conversation_id'],
|
|
@@ -130,7 +187,7 @@ export const dialogueExportTools = [
|
|
|
130
187
|
schema: z
|
|
131
188
|
.object({
|
|
132
189
|
workspace_id: uuidSchema.optional(),
|
|
133
|
-
// ID диалога = conversationId из
|
|
190
|
+
// ID диалога = conversationId из манифеста.
|
|
134
191
|
conversation_id: uuidSchema,
|
|
135
192
|
limit: z.number().int().min(1).max(100).optional(),
|
|
136
193
|
cursor: z.string().optional(),
|
|
@@ -151,15 +208,15 @@ export const dialogueExportTools = [
|
|
|
151
208
|
};
|
|
152
209
|
},
|
|
153
210
|
enhanceResponse: (response) => withInstructions(response, [
|
|
154
|
-
'Транскрипт диалога: { conversationId,
|
|
211
|
+
'Транскрипт диалога: { conversationId, turns[], actionExecutions[], transcriptMarkdown, cursor }.',
|
|
155
212
|
'Сохрани transcriptMarkdown в ОТДЕЛЬНЫЙ файл на диалог, напр. dialogs/<conversationId>.md.',
|
|
156
|
-
'
|
|
157
|
-
'
|
|
158
|
-
'
|
|
159
|
-
'
|
|
160
|
-
'
|
|
161
|
-
'
|
|
162
|
-
'Если cursor не null — у диалога есть ещё сообщения: повтори с этим cursor. Первая страница содержит заголовок; последующие —
|
|
213
|
+
'turn.role: client, agent, operator или automation; isAi=true только у agent.',
|
|
214
|
+
'turn.delivered=false — исходящее не было доставлено, исключай его из подсчёта касаний.',
|
|
215
|
+
'actionExecutions — исполнения действий ЭТОЙ страницы, каждое ровно на одной странице. У исполнения: actionName, status, startedAt, triggerMessageId (реплика человека, начавшая ход), responseMessageId (ответ того же прогона) и steps[] — stepType, status, outcomeUnknown, dealId, dealNumber.',
|
|
216
|
+
'Новый заказ = шаг stepType=GETCOURSE_CREATE_DEAL со status=OK, reusedOpenInvoice=false, без outcomeUnknown и startedAt исполнения в периоде. reusedOpenInvoice=true означает успешное переиспользование открытого счёта, но нового заказа нет; status=SKIPPED — дубль, нового заказа тоже нет. Шаг с outcomeUnknown=true — исход неизвестен, пометь REVIEW. abandoned=true — неизвестен исход только незавершённого шага: OK-шаг с номером сделки в том же исполнении остаётся подтверждённым.',
|
|
217
|
+
'У исполнения есть исход для человека: outcome (DONE — выполнено, SKIPPED — пропущено, FAILED — сбой, UNKNOWN — исход неизвестен), outcomeLabel, skipReasons (code + label), noEffect (выполнено без изменений), emptyInputs (поля, которые действие берёт из разговора и которые остались пустыми, — названиями для человека; только у DONE, outcomeLabel их уже называет), stepsDone/stepsTotal. status=SUCCEEDED у действия, все МЕНЯЮЩИЕ шаги которого пропущены защитой, — не «выполнено»: смотри outcome. Человеку показывай подписи (outcomeLabel, skipReasons[].label), а не коды.',
|
|
218
|
+
'runId=null и пустые triggerMessageId/responseMessageId значат «прогон неизвестен» (ручной запуск, перенесённая строка, ход без ответа), а не «действий не было»: связь с репликами тогда определяй по времени — строка действия в transcriptMarkdown уже стоит между репликами по startedAt.',
|
|
219
|
+
'Если cursor не null — у диалога есть ещё сообщения: повтори с этим cursor. Первая страница содержит заголовок; последующие — реплики и строки действий без заголовка: дописывай их в тот же файл.',
|
|
163
220
|
]),
|
|
164
221
|
}),
|
|
165
222
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,sFAAsF;AACtF,kFAAkF;AAClF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dialogue-export.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** API сам разрешает пару contact × channel и проверяет доступ к диалогу. */
|
|
2
|
+
export declare const dialogueFollowupStateTools: (import("./shared.js").ToolDefinition<{
|
|
3
|
+
conversation_id: string;
|
|
4
|
+
}> | import("./shared.js").ToolDefinition<{
|
|
5
|
+
conversation_id: string;
|
|
6
|
+
action: "MUTE_FOREVER" | "MUTE_TEMPORARY" | "ENABLE";
|
|
7
|
+
expected_version: string;
|
|
8
|
+
mute_expires_at?: string | undefined;
|
|
9
|
+
}>)[];
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { compactObject, defineTool, uuidSchema, withInstructions } from './shared.js';
|
|
3
|
+
const resultPolicy = {
|
|
4
|
+
neverTruncate: true,
|
|
5
|
+
narrowingHint: 'Читай состояние одного диалога; последствия и ограничения нужны целиком.',
|
|
6
|
+
};
|
|
7
|
+
/** API сам разрешает пару contact × channel и проверяет доступ к диалогу. */
|
|
8
|
+
export const dialogueFollowupStateTools = [
|
|
9
|
+
defineTool({
|
|
10
|
+
name: 'besales_dialogue_followup_state_get',
|
|
11
|
+
sideEffect: 'none',
|
|
12
|
+
closedWorld: true,
|
|
13
|
+
requiredFields: ['conversation_id'],
|
|
14
|
+
resultPolicy,
|
|
15
|
+
schema: z.object({ conversation_id: uuidSchema }).strict(),
|
|
16
|
+
createRequest: (input) => ({
|
|
17
|
+
method: 'GET',
|
|
18
|
+
path: `/conversations/${input.conversation_id}/followup-state`,
|
|
19
|
+
}),
|
|
20
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
21
|
+
'Покажи persisted, effective на measuredAt, editVersion, allowedActions, consequences и blockers из ответа сервера. Не выводи состояние дожимов из botState или наличия цепочки.',
|
|
22
|
+
'NONE — ось включена, FOREVER — выключена, TEMPORARY — пауза до expiresAt. Включение не воскрешает отменённый run и не возвращает одноразовые права.',
|
|
23
|
+
'Состояние относится к паре contact × channel. Оно не меняет ответы агента, назначение оператора, бан или очередь рассылки; уже доставленное не отзывается.',
|
|
24
|
+
'externalConstraints=NOT_CHECKED и processPause=UNAVAILABLE не обещают отправку или сохранение шага. Сохраняй тексты последствий сервера на его языке.',
|
|
25
|
+
'403 — нет права чтения, 404 — диалог недоступен, 503 — состояние неизвестно: не подменяй отказ состоянием NONE.',
|
|
26
|
+
'Для записи используй besales_dialogue_followup_state_update с editVersion из этого чтения в expected_version. Сначала покажи человеку последствия и ограничения выбранного действия; выполняй только его явное решение.',
|
|
27
|
+
]),
|
|
28
|
+
}),
|
|
29
|
+
defineTool({
|
|
30
|
+
name: 'besales_dialogue_followup_state_update',
|
|
31
|
+
sideEffect: 'write',
|
|
32
|
+
closedWorld: true,
|
|
33
|
+
verifyWithToolName: 'besales_dialogue_followup_state_get',
|
|
34
|
+
requiredFields: ['conversation_id', 'action', 'expected_version'],
|
|
35
|
+
resultPolicy,
|
|
36
|
+
schema: z
|
|
37
|
+
.object({
|
|
38
|
+
conversation_id: uuidSchema,
|
|
39
|
+
action: z.enum(['ENABLE', 'MUTE_FOREVER', 'MUTE_TEMPORARY']),
|
|
40
|
+
expected_version: z.string().min(1).max(1024),
|
|
41
|
+
mute_expires_at: z.iso.datetime({ offset: true }).max(64).optional(),
|
|
42
|
+
})
|
|
43
|
+
.strict()
|
|
44
|
+
.superRefine((input, context) => {
|
|
45
|
+
if ((input.action === 'MUTE_TEMPORARY') !== (input.mute_expires_at !== undefined)) {
|
|
46
|
+
context.addIssue({
|
|
47
|
+
code: 'custom',
|
|
48
|
+
path: ['mute_expires_at'],
|
|
49
|
+
message: 'MUTE_TEMPORARY requires mute_expires_at; other actions forbid it',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}),
|
|
53
|
+
createRequest: (input) => ({
|
|
54
|
+
method: 'PATCH',
|
|
55
|
+
path: `/conversations/${input.conversation_id}/followup-state/bridge`,
|
|
56
|
+
body: compactObject({
|
|
57
|
+
action: input.action,
|
|
58
|
+
expectedVersion: input.expected_version,
|
|
59
|
+
muteExpiresAt: input.mute_expires_at,
|
|
60
|
+
}),
|
|
61
|
+
}),
|
|
62
|
+
enhanceResponse: (response) => withInstructions(response, [
|
|
63
|
+
'Покажи outcome и state целиком: состояние, новую editVersion, последствия и ограничения. Сохраняй тексты сервера на его языке.',
|
|
64
|
+
'409/428: сохрани намерение человека, перечитай besales_dialogue_followup_state_get, покажи изменившиеся последствия. Повторяй запись только после нового явного решения человека с прочитанной версией; автоматически не повторяй.',
|
|
65
|
+
'При неизвестном исходе сначала прочитай состояние. Включение не воскрешает отменённые касания; уже доставленное не отзывается.',
|
|
66
|
+
]),
|
|
67
|
+
}),
|
|
68
|
+
];
|
|
69
|
+
//# sourceMappingURL=dialogue-followup-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialogue-followup-state.js","sourceRoot":"","sources":["../../../src/tools/definitions/dialogue-followup-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,YAAY,GAAG;IACnB,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,0EAA0E;CACjF,CAAC;AAEX,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,UAAU,CAAC;QACT,IAAI,EAAE,qCAAqC;QAC3C,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,CAAC,iBAAiB,CAAC;QACnC,YAAY;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1D,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,kBAAkB,KAAK,CAAC,eAAe,iBAAiB;SAC/D,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,iLAAiL;YACjL,qJAAqJ;YACrJ,4JAA4J;YAC5J,uJAAuJ;YACvJ,iHAAiH;YACjH,yNAAyN;SAC1N,CAAC;KACL,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,wCAAwC;QAC9C,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,qCAAqC;QACzD,cAAc,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,CAAC;QACjE,YAAY;QACZ,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,eAAe,EAAE,UAAU;YAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;YAC5D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7C,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;SACrE,CAAC;aACD,MAAM,EAAE;aACR,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,EAAE,CAAC;gBAClF,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,iBAAiB,CAAC;oBACzB,OAAO,EAAE,kEAAkE;iBAC5E,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QACJ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,kBAAkB,KAAK,CAAC,eAAe,wBAAwB;YACrE,IAAI,EAAE,aAAa,CAAC;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,eAAe,EAAE,KAAK,CAAC,gBAAgB;gBACvC,aAAa,EAAE,KAAK,CAAC,eAAe;aACrC,CAAC;SACH,CAAC;QACF,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC5B,gBAAgB,CAAC,QAAQ,EAAE;YACzB,gIAAgI;YAChI,oOAAoO;YACpO,gIAAgI;SACjI,CAAC;KACL,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface Case {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly variant?: string;
|
|
4
|
+
readonly input: Record<string, unknown>;
|
|
5
|
+
readonly method: 'PATCH' | 'POST' | 'PUT' | 'DELETE';
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly body?: Record<string, unknown>;
|
|
8
|
+
readonly version: string;
|
|
9
|
+
readonly required: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export declare const versionTransportCases: readonly Case[];
|
|
12
|
+
export declare function assertVersionTransport(row: Case): Promise<void>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { platformSetupTools } from './platform-setup.js';
|
|
3
|
+
import { crmPlatformTools } from './crm-platform.js';
|
|
4
|
+
import { variableTools } from './variables.js';
|
|
5
|
+
import { executeToolRequests } from '../follow-up-request.js';
|
|
6
|
+
import { ApiClient, ApiClientError } from '../../http/api-client.js';
|
|
7
|
+
import registry from '../../schemas/mcp-tools.json' with { type: 'json' };
|
|
8
|
+
const registered = registry;
|
|
9
|
+
const channel = '00000000-0000-4000-8000-000000000002';
|
|
10
|
+
const resource = '00000000-0000-4000-8000-000000000003';
|
|
11
|
+
const settingsVersion = '00000000-0000-4000-8000-000000000004';
|
|
12
|
+
const routing = `rs1.c.workspace.${resource}.${channel}.${resource}.7.1`;
|
|
13
|
+
export const versionTransportCases = [
|
|
14
|
+
{
|
|
15
|
+
name: 'besales_followup_step_message_set',
|
|
16
|
+
input: {
|
|
17
|
+
platform_id: channel,
|
|
18
|
+
sequence_id: resource,
|
|
19
|
+
step_index: 0,
|
|
20
|
+
content: 'new',
|
|
21
|
+
expected_content: '',
|
|
22
|
+
},
|
|
23
|
+
method: 'PATCH',
|
|
24
|
+
path: `/channels/${channel}/followup-sequences/${resource}/steps/0/message`,
|
|
25
|
+
body: { content: 'new', expectedContent: '' },
|
|
26
|
+
version: '7',
|
|
27
|
+
required: ['platform_id', 'sequence_id', 'step_index', 'content', 'expected_content'],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'besales_router_update',
|
|
31
|
+
input: {
|
|
32
|
+
platform_id: channel,
|
|
33
|
+
additional_prompt: null,
|
|
34
|
+
skip_llm_routing: false,
|
|
35
|
+
explicit_confirmation: true,
|
|
36
|
+
confirmation_reason: 'approved',
|
|
37
|
+
},
|
|
38
|
+
method: 'PATCH',
|
|
39
|
+
path: `/channels/${channel}/router`,
|
|
40
|
+
body: {
|
|
41
|
+
additionalPrompt: null,
|
|
42
|
+
skipLlmRouting: false,
|
|
43
|
+
explicitConfirmation: true,
|
|
44
|
+
confirmationReason: 'approved',
|
|
45
|
+
},
|
|
46
|
+
version: routing,
|
|
47
|
+
required: ['platform_id'],
|
|
48
|
+
},
|
|
49
|
+
...[false, true].map((update) => ({
|
|
50
|
+
name: 'besales_routing_rule_upsert',
|
|
51
|
+
variant: update ? 'update' : 'create',
|
|
52
|
+
input: {
|
|
53
|
+
platform_id: channel,
|
|
54
|
+
...(update ? { routing_rule_id: resource } : {}),
|
|
55
|
+
routing_strategy: 'LEAD_STATUS',
|
|
56
|
+
custom_router_prompt: '',
|
|
57
|
+
is_enabled: false,
|
|
58
|
+
direct_agent_id: null,
|
|
59
|
+
},
|
|
60
|
+
method: update ? 'PATCH' : 'POST',
|
|
61
|
+
path: `/channels/${channel}/router/routing-rules`,
|
|
62
|
+
body: {
|
|
63
|
+
...(update ? { routingRuleId: resource } : {}),
|
|
64
|
+
routingStrategy: 'LEAD_STATUS',
|
|
65
|
+
customRouterPrompt: '',
|
|
66
|
+
isEnabled: false,
|
|
67
|
+
directAgentId: null,
|
|
68
|
+
},
|
|
69
|
+
version: routing,
|
|
70
|
+
required: ['platform_id', 'routing_strategy', 'custom_router_prompt'],
|
|
71
|
+
})),
|
|
72
|
+
{
|
|
73
|
+
name: 'besales_behavior_update',
|
|
74
|
+
input: { platform_id: channel },
|
|
75
|
+
method: 'PATCH',
|
|
76
|
+
path: `/channels/${channel}/behavior`,
|
|
77
|
+
body: {},
|
|
78
|
+
version: routing,
|
|
79
|
+
required: ['platform_id'],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'besales_pipeline_settings_update',
|
|
83
|
+
input: { platform_id: channel },
|
|
84
|
+
method: 'PATCH',
|
|
85
|
+
path: `/channels/${channel}/pipeline-settings`,
|
|
86
|
+
body: {},
|
|
87
|
+
version: routing,
|
|
88
|
+
required: ['platform_id'],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'besales_platform_settings_update',
|
|
92
|
+
input: { platform_id: channel, general_settings: { is_ai_enabled: false } },
|
|
93
|
+
method: 'PATCH',
|
|
94
|
+
path: `/channels/${channel}/settings`,
|
|
95
|
+
body: { generalSettings: { isAiEnabled: false } },
|
|
96
|
+
version: routing,
|
|
97
|
+
required: ['platform_id'],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: 'besales_platform_pipeline_link',
|
|
101
|
+
input: { platform_id: channel, pipeline_id: 1, pipeline_crm_id: resource, sort: 0 },
|
|
102
|
+
method: 'POST',
|
|
103
|
+
path: `/channels/${channel}/active-pipelines`,
|
|
104
|
+
body: { pipelineId: 1, pipelineCrmId: resource, sort: 0 },
|
|
105
|
+
version: routing,
|
|
106
|
+
required: ['platform_id', 'pipeline_id', 'pipeline_crm_id'],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'besales_platform_pipeline_unlink',
|
|
110
|
+
input: { platform_id: channel, platform_pipeline_id: resource, explicit_confirmation: true },
|
|
111
|
+
method: 'DELETE',
|
|
112
|
+
path: `/channels/${channel}/active-pipelines/${resource}`,
|
|
113
|
+
body: { explicitConfirmation: true },
|
|
114
|
+
version: routing,
|
|
115
|
+
required: ['platform_id', 'platform_pipeline_id', 'explicit_confirmation'],
|
|
116
|
+
},
|
|
117
|
+
...['CHANNEL', 'WORKSPACE'].flatMap((scope) => [
|
|
118
|
+
{
|
|
119
|
+
name: 'besales_variable_update',
|
|
120
|
+
variant: scope,
|
|
121
|
+
input: {
|
|
122
|
+
variable_id: resource,
|
|
123
|
+
scope,
|
|
124
|
+
...(scope === 'CHANNEL'
|
|
125
|
+
? { platform_id: channel, constant_value: null, repeat_constant_value: null }
|
|
126
|
+
: { value: null }),
|
|
127
|
+
},
|
|
128
|
+
method: 'PATCH',
|
|
129
|
+
path: `/variables/${resource}`,
|
|
130
|
+
body: { defaultValue: null, ...(scope === 'CHANNEL' ? { repeatConstantValue: null } : {}) },
|
|
131
|
+
version: resource,
|
|
132
|
+
required: ['variable_id', 'scope'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'besales_variable_delete',
|
|
136
|
+
variant: scope,
|
|
137
|
+
input: {
|
|
138
|
+
variable_id: resource,
|
|
139
|
+
scope,
|
|
140
|
+
...(scope === 'CHANNEL' ? { platform_id: channel } : {}),
|
|
141
|
+
explicit_confirmation: true,
|
|
142
|
+
},
|
|
143
|
+
method: 'DELETE',
|
|
144
|
+
path: `/variables/${resource}?confirm=true`,
|
|
145
|
+
version: resource,
|
|
146
|
+
required: ['variable_id', 'scope', 'explicit_confirmation'],
|
|
147
|
+
},
|
|
148
|
+
]),
|
|
149
|
+
{
|
|
150
|
+
name: 'besales_agent_update',
|
|
151
|
+
input: {
|
|
152
|
+
platform_id: channel,
|
|
153
|
+
agent_id: resource,
|
|
154
|
+
description: null,
|
|
155
|
+
use_global_history: false,
|
|
156
|
+
agent_variable_overrides: [],
|
|
157
|
+
agent_workspace_variable_overrides: [],
|
|
158
|
+
},
|
|
159
|
+
method: 'PATCH',
|
|
160
|
+
path: `/channels/${channel}/agents/${resource}`,
|
|
161
|
+
body: {
|
|
162
|
+
description: null,
|
|
163
|
+
useGlobalHistory: false,
|
|
164
|
+
agentVariableOverrides: [],
|
|
165
|
+
agentWorkspaceVariableOverrides: [],
|
|
166
|
+
},
|
|
167
|
+
version: settingsVersion,
|
|
168
|
+
required: ['platform_id', 'agent_id'],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'besales_agent_facts_set',
|
|
172
|
+
input: { agent_id: resource, factual_context: 'F1' },
|
|
173
|
+
method: 'PUT',
|
|
174
|
+
path: `/agents/${resource}/facts`,
|
|
175
|
+
body: { factualContext: 'F1' },
|
|
176
|
+
version: resource,
|
|
177
|
+
required: ['agent_id', 'factual_context'],
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
const definitions = [
|
|
181
|
+
...platformSetupTools,
|
|
182
|
+
...crmPlatformTools,
|
|
183
|
+
...variableTools,
|
|
184
|
+
];
|
|
185
|
+
export async function assertVersionTransport(row) {
|
|
186
|
+
const tool = definitions.find((tool) => tool.name === row.name);
|
|
187
|
+
assert.ok(tool, row.name);
|
|
188
|
+
const contract = registered.tools.find((tool) => tool.name === row.name);
|
|
189
|
+
assert.ok(contract, row.name);
|
|
190
|
+
assert.deepEqual(tool.requiredFields, row.required, 'required arguments unchanged');
|
|
191
|
+
assert.deepEqual([...contract.inputSchema.required].sort(), [...row.required].sort());
|
|
192
|
+
const legacy = tool.schema.safeParse(row.input);
|
|
193
|
+
assert.equal(legacy.success, true, 'legacy control parses');
|
|
194
|
+
const expected = {
|
|
195
|
+
method: row.method,
|
|
196
|
+
path: row.path,
|
|
197
|
+
...(row.body === undefined ? {} : { body: row.body }),
|
|
198
|
+
};
|
|
199
|
+
assert.deepEqual(tool.createRequest(legacy.data), expected, 'legacy body, confirmation, null and false unchanged');
|
|
200
|
+
const input = { ...row.input, expected_version: row.version };
|
|
201
|
+
const parsed = tool.schema.safeParse(input);
|
|
202
|
+
assert.equal(parsed.success, true, 'original expected_version accepted');
|
|
203
|
+
const request = tool.createRequest(parsed.data);
|
|
204
|
+
assert.deepEqual(request, row.method === 'DELETE'
|
|
205
|
+
? { ...expected, ifMatch: row.version }
|
|
206
|
+
: { ...expected, body: { ...row.body, expectedVersion: row.version } }, 'original token reaches the request');
|
|
207
|
+
for (const value of [null, 7, ''])
|
|
208
|
+
assert.equal(tool.schema.safeParse({ ...input, expected_version: value }).success, false);
|
|
209
|
+
if (row.version.length === resource.length)
|
|
210
|
+
assert.equal(tool.schema.safeParse({ ...input, expected_version: 'not-a-uuid' }).success, false);
|
|
211
|
+
if ([
|
|
212
|
+
'besales_followup_step_message_set',
|
|
213
|
+
'besales_behavior_update',
|
|
214
|
+
'besales_pipeline_settings_update',
|
|
215
|
+
'besales_platform_settings_update',
|
|
216
|
+
'besales_platform_pipeline_link',
|
|
217
|
+
'besales_platform_pipeline_unlink',
|
|
218
|
+
'besales_variable_update',
|
|
219
|
+
'besales_variable_delete',
|
|
220
|
+
].includes(row.name))
|
|
221
|
+
assert.equal(tool.schema.safeParse({ ...input, surprise: true }).success, false, 'closed schema stays closed');
|
|
222
|
+
assert.ok('expected_version' in contract.inputSchema.properties, 'registered schema exposes expected_version');
|
|
223
|
+
assert.equal(contract.inputSchema.properties.expected_version.type, 'string');
|
|
224
|
+
assert.ok(!contract.inputSchema.required.includes('expected_version'), 'version stays optional');
|
|
225
|
+
assert.ok(contract.description.includes('без автоматического повтора'), 'description forbids automatic retry');
|
|
226
|
+
const response = JSON.stringify(tool.enhanceResponse?.({}, parsed.data));
|
|
227
|
+
assert.ok(response?.includes('409'), 'response describes conflicts');
|
|
228
|
+
assert.ok(response?.includes('явного решения человека'), 'human decision after conflict');
|
|
229
|
+
assert.ok(!response?.includes('повтори с его текущим текстом'), 'no stale edit replay instruction');
|
|
230
|
+
if (row.name === 'besales_followup_step_message_set')
|
|
231
|
+
assert.equal(tool.schema.safeParse({ ...input, expected_content: undefined }).success, false, 'text oracle still required');
|
|
232
|
+
if (row.method === 'DELETE')
|
|
233
|
+
assert.equal(tool.schema.safeParse({ ...input, explicit_confirmation: undefined }).success, false, 'destructive confirmation still required');
|
|
234
|
+
if (row.name === 'besales_agent_update') {
|
|
235
|
+
const both = tool.schema.safeParse({ ...input, expected_routing_version: routing });
|
|
236
|
+
assert.equal(both.success, true, 'separate Routing version accepted');
|
|
237
|
+
assert.deepEqual(tool.createRequest(both.data).body, {
|
|
238
|
+
...row.body,
|
|
239
|
+
expectedVersion: settingsVersion,
|
|
240
|
+
expectedRoutingVersion: routing,
|
|
241
|
+
});
|
|
242
|
+
assert.equal(contract.inputSchema.properties.expected_routing_version?.type, 'string');
|
|
243
|
+
assert.ok(!contract.inputSchema.required.includes('expected_routing_version'));
|
|
244
|
+
assert.equal(tool.schema.safeParse({ ...input, expected_version: routing }).success, false, 'Routing is not a settings token');
|
|
245
|
+
for (const value of [null, 7, '']) {
|
|
246
|
+
assert.equal(tool.schema.safeParse({ ...input, expected_routing_version: value }).success, false);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const sent = [];
|
|
250
|
+
const client = new ApiClient({
|
|
251
|
+
apiBaseUrl: 'https://example.test/api/v2',
|
|
252
|
+
locale: 'ru',
|
|
253
|
+
transport: {
|
|
254
|
+
async request(wire) {
|
|
255
|
+
sent.push(wire);
|
|
256
|
+
return { status: 200, data: {} };
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
await executeToolRequests(client, 'fixture-key', request, undefined);
|
|
261
|
+
assert.equal(sent.length, 1, 'one write, no server-read token substitution');
|
|
262
|
+
assert.equal(sent[0].method, row.method);
|
|
263
|
+
assert.equal(new URL(sent[0].url).pathname + new URL(sent[0].url).search, '/api/v2' + row.path);
|
|
264
|
+
assert.deepEqual(sent[0].data, request.body);
|
|
265
|
+
assert.equal(sent[0].headers['If-Match'], row.method === 'DELETE' ? `"${row.version}"` : undefined, 'strong original header reaches HTTP');
|
|
266
|
+
assert.equal(sent[0].headers.Authorization, 'Bearer fixture-key');
|
|
267
|
+
assert.equal(sent[0].headers['Accept-Language'], 'ru');
|
|
268
|
+
assert.ok(sent[0].headers['Cache-Control'].includes('no-store'));
|
|
269
|
+
if (row.method === 'DELETE') {
|
|
270
|
+
await executeToolRequests(client, 'fixture-key', { ...request, idempotencyKey: resource }, undefined);
|
|
271
|
+
assert.equal(sent[1].headers['If-Match'], `"${row.version}"`);
|
|
272
|
+
assert.equal(sent[1].headers['Idempotency-Key'], resource, 'independent intent headers coexist');
|
|
273
|
+
}
|
|
274
|
+
sent.length = 0;
|
|
275
|
+
await executeToolRequests(client, 'fixture-key', tool.createRequest(legacy.data), undefined);
|
|
276
|
+
assert.equal(sent.length, 1);
|
|
277
|
+
assert.equal(sent[0].headers['If-Match'], undefined, 'legacy request has no version header');
|
|
278
|
+
let calls = 0;
|
|
279
|
+
const conflict = new ApiClientError('conflict', 409);
|
|
280
|
+
await assert.rejects(executeToolRequests({
|
|
281
|
+
async request() {
|
|
282
|
+
calls++;
|
|
283
|
+
throw conflict;
|
|
284
|
+
},
|
|
285
|
+
async post() {
|
|
286
|
+
calls++;
|
|
287
|
+
throw conflict;
|
|
288
|
+
},
|
|
289
|
+
}, 'fixture-key', request, undefined), (error) => error === conflict);
|
|
290
|
+
assert.equal(calls, 1, '409 is never retried or refreshed');
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=edit-version-transport.test-fixtures.js.map
|