@besales/mcp 0.48.0 → 1.0.0-beta.4
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 +117 -163
- 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 +54 -7
- package/dist/http/api-client.js +132 -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 +43 -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 +149 -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 -6
- 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 +12389 -6657
- 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 +81 -24
- 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 -431
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +10 -13
- package/dist/tools/definitions/broadcast-scheduler.js +196 -154
- 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 +29 -39
- package/dist/tools/definitions/crm-platform.js +249 -352
- 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/dialogue-reprocess.d.ts +5 -0
- package/dist/tools/definitions/dialogue-reprocess.js +107 -0
- package/dist/tools/definitions/dialogue-reprocess.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 -357
- 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 +14 -29
- package/dist/tools/definitions/getcourse-cold-welcome.js +190 -253
- 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 +2 -1
- 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 +697 -224
- 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 +401 -307
- package/dist/tools/definitions/shared.js +430 -652
- 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 +4 -4
- 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-personal-management.d.ts +34 -0
- package/dist/tools/definitions/telegram-personal-management.js +139 -0
- package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
- package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
- package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
- package/dist/tools/definitions/telegram-personal-restrictions.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 +41 -0
- package/dist/tools/definitions/trigger-upsert.tool.js +159 -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 +1134 -617
- package/dist/tools/definitions.js +63 -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 +765 -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 +170 -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 +84 -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 +131892 -22453
- 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/dialogue-reprocess.md +37 -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 +144 -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-personal-management.md +50 -0
- package/docs/telegram-personal-restrictions.md +87 -0
- 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/getcourse-text-source.spec.mjs +110 -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 +871 -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 +97 -0
- package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
- package/scripts/sync-trigger-event-schema.mjs +20 -0
- package/scripts/sync-trigger-repeat-mapping.mjs +12 -0
- package/scripts/sync-trigger-task-schema.mjs +45 -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/telegram-personal-confirmation-mutants.mjs +74 -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 -963
- 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,10 @@
|
|
|
1
|
+
/** Сигнатуры credential-signatures.util сервера; анализ пар name/value здесь не нужен.
|
|
2
|
+
* NFKC используется только для проверки: обычные настройки выдаются в исходном виде. */
|
|
3
|
+
export function hasCredentialSignature(value) {
|
|
4
|
+
const normalized = value.normalize("NFKC").replace(/\p{M}/gu, "");
|
|
5
|
+
return (/(?:^|[^A-Za-z0-9_])(?:(?:sk-|xai-|gsk_|ghp_|glpat-|xox[baprs]-)[A-Za-z0-9_-]{10,}|AKIA[A-Z0-9]{16}(?![A-Za-z0-9_-])|AIza[A-Za-z0-9_-]{30,})/u.test(normalized) ||
|
|
6
|
+
/(?:^|[^A-Za-z0-9_-])(?:\d{6,12}:[A-Za-z0-9_-]{30,50}(?![A-Za-z0-9_-])|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)/u.test(normalized) ||
|
|
7
|
+
/(?:^|[^A-Za-z0-9_-])bearer\s+[A-Za-z0-9._~+/-]+/iu.test(normalized) ||
|
|
8
|
+
/-----BEGIN (?:(?:RSA|EC|OPENSSH|ENCRYPTED) )?PRIVATE KEY-----/u.test(normalized));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=credential-signatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-signatures.js","sourceRoot":"","sources":["../../src/utils/credential-signatures.ts"],"names":[],"mappings":"AAAA;wFACwF;AACxF,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,CACL,8IAA8I,CAAC,IAAI,CACjJ,UAAU,CACX;QACD,2HAA2H,CAAC,IAAI,CAC9H,UAAU,CACX;QACD,mDAAmD,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,gEAAgE,CAAC,IAAI,CACnE,UAAU,CACX,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ColumnNameDecision = "INVALID" | "CREDENTIAL" | "SAFE";
|
|
2
|
+
/** Metadata names, not general OData identifiers. Derived from Ref_Key/Code and the
|
|
3
|
+
* full ONE_C_DEFAULT_CATALOG_ENRICHMENT: Russian letters, ASCII, separators;
|
|
4
|
+
* Catalog_ and _Key are the only mixed-script affixes in that dictionary.
|
|
5
|
+
* 512 is the existing ONE_C_IDENTIFIER_MAX_LENGTH. Never normalize before grammar.
|
|
6
|
+
* Keep the companion MCP copy and the shared decision vectors in sync. */
|
|
7
|
+
export declare function dataSourceColumnNameDecision(value: string): ColumnNameDecision;
|
|
8
|
+
/** Only a leaf at an actual schema position is a column name. Containers and
|
|
9
|
+
* extensions keep ordinary recursive credential checking at every depth. */
|
|
10
|
+
export declare function isDataSourceColumnNamePosition(path: readonly (string | number)[]): boolean;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { hasCredentialSignature } from "./credential-signatures.js";
|
|
2
|
+
/** Metadata names, not general OData identifiers. Derived from Ref_Key/Code and the
|
|
3
|
+
* full ONE_C_DEFAULT_CATALOG_ENRICHMENT: Russian letters, ASCII, separators;
|
|
4
|
+
* Catalog_ and _Key are the only mixed-script affixes in that dictionary.
|
|
5
|
+
* 512 is the existing ONE_C_IDENTIFIER_MAX_LENGTH. Never normalize before grammar.
|
|
6
|
+
* Keep the companion MCP copy and the shared decision vectors in sync. */
|
|
7
|
+
export function dataSourceColumnNameDecision(value) {
|
|
8
|
+
if (value.length === 0 ||
|
|
9
|
+
value.length > 512 ||
|
|
10
|
+
!/^[A-Za-z0-9_А-Яа-яЁё-]+(?:\.[A-Za-z0-9_А-Яа-яЁё-]+)*(?![\s\S])/u.test(value))
|
|
11
|
+
return "INVALID";
|
|
12
|
+
const stem = value.replace(/^Catalog_/u, "").replace(/_Key$/u, "");
|
|
13
|
+
if (/[A-Za-z]/u.test(stem) && /[А-Яа-яЁё]/u.test(stem))
|
|
14
|
+
return "INVALID";
|
|
15
|
+
return hasCredentialSignature(value) ? "CREDENTIAL" : "SAFE";
|
|
16
|
+
}
|
|
17
|
+
/** Only a leaf at an actual schema position is a column name. Containers and
|
|
18
|
+
* extensions keep ordinary recursive credential checking at every depth. */
|
|
19
|
+
export function isDataSourceColumnNamePosition(path) {
|
|
20
|
+
if (path[0] === "fieldMap")
|
|
21
|
+
return path.length === 2;
|
|
22
|
+
if (path[0] === "register")
|
|
23
|
+
return path.length === 2 && path[1] === "virtualTable";
|
|
24
|
+
if (path[0] !== "catalog_enrichment")
|
|
25
|
+
return false;
|
|
26
|
+
return ((path.length === 2 &&
|
|
27
|
+
["title_column", "parent_group_column"].includes(String(path[1]))) ||
|
|
28
|
+
(path.length === 3 &&
|
|
29
|
+
["title_fields", "content_fields"].includes(String(path[1])) &&
|
|
30
|
+
typeof path[2] === "number") ||
|
|
31
|
+
(path.length === 4 &&
|
|
32
|
+
path[1] === "lookups" &&
|
|
33
|
+
typeof path[2] === "number" &&
|
|
34
|
+
["field", "catalog", "column"].includes(String(path[3]))));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data-source-column-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source-column-name.js","sourceRoot":"","sources":["../../src/utils/data-source-column-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAIpE;;;;0EAI0E;AAC1E,MAAM,UAAU,4BAA4B,CAC1C,KAAa;IAEb,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,GAAG;QAClB,CAAC,iEAAiE,CAAC,IAAI,CACrE,KAAK,CACN;QAED,OAAO,SAAS,CAAC;IACnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACzE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,CAAC;AAED;4EAC4E;AAC5E,MAAM,UAAU,8BAA8B,CAC5C,IAAkC;IAElC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;QACxB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IACzD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,oBAAoB;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,CACL,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAChB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QAC9B,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAChB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YACrB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC3B,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;AACJ,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -9,5 +9,6 @@ export declare const REDACTION_PLACEHOLDER = "[Redacted]";
|
|
|
9
9
|
* (Массивы, вопреки ожиданию, покрывались и путями: индекс ведёт себя как обычный ключ.)
|
|
10
10
|
*/
|
|
11
11
|
export declare function scrubSecrets(value: unknown, depth?: number, seen?: WeakSet<object>): unknown;
|
|
12
|
+
export declare function createSafeLogger(destination?: pino.DestinationStream): pino.Logger;
|
|
12
13
|
export declare const logger: pino.Logger<never, boolean>;
|
|
13
14
|
export declare const REDACTED_LOG_FIELDS: readonly string[];
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import pino from 'pino';
|
|
2
|
+
import { maskSetupSecretsInText } from './setup-secrets.js';
|
|
2
3
|
const STDERR_FD = 2;
|
|
4
|
+
/** Маска ключей применяется только к журналу и не меняет проверку содержимого задач. */
|
|
5
|
+
function maskLogSecrets(text) {
|
|
6
|
+
return maskSetupSecretsInText(text).replace(/mcp_[A-Za-z0-9_-]+/gu, '[REDACTED]');
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* Имена полей, значения которых в лог не попадают никогда. Список ведётся ОТ ОБРАТНОГО:
|
|
5
10
|
* перечисляется то, что является секретом, а не то, что безопасно, — иначе новый носитель
|
|
@@ -40,6 +45,10 @@ const MAX_SCRUB_DEPTH = 12;
|
|
|
40
45
|
* (Массивы, вопреки ожиданию, покрывались и путями: индекс ведёт себя как обычный ключ.)
|
|
41
46
|
*/
|
|
42
47
|
export function scrubSecrets(value, depth = 0, seen = new WeakSet()) {
|
|
48
|
+
if (typeof value === 'string')
|
|
49
|
+
return maskLogSecrets(value);
|
|
50
|
+
if (typeof value === 'function')
|
|
51
|
+
return REDACTION_PLACEHOLDER;
|
|
43
52
|
if (typeof value !== 'object' || value === null) {
|
|
44
53
|
return value;
|
|
45
54
|
}
|
|
@@ -51,20 +60,35 @@ export function scrubSecrets(value, depth = 0, seen = new WeakSet()) {
|
|
|
51
60
|
return value.map((item) => scrubSecrets(item, depth + 1, seen));
|
|
52
61
|
}
|
|
53
62
|
const out = {};
|
|
63
|
+
if (value instanceof Error) {
|
|
64
|
+
out.type = maskLogSecrets(value.name);
|
|
65
|
+
out.message = maskLogSecrets(value.message);
|
|
66
|
+
out.stack = maskLogSecrets(value.stack ?? '');
|
|
67
|
+
}
|
|
54
68
|
for (const [key, nested] of Object.entries(value)) {
|
|
55
|
-
out[key] = SECRET_FIELDS.has(key)
|
|
69
|
+
out[maskLogSecrets(key)] = SECRET_FIELDS.has(key) || key.toLowerCase() === 'authorization'
|
|
56
70
|
? REDACTION_PLACEHOLDER
|
|
57
71
|
: scrubSecrets(nested, depth + 1, seen);
|
|
58
72
|
}
|
|
59
73
|
return out;
|
|
60
74
|
}
|
|
61
|
-
export
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
export function createSafeLogger(destination = pino.destination(STDERR_FD)) {
|
|
76
|
+
return pino({
|
|
77
|
+
level: process.env.LOG_LEVEL ?? (process.env.NODE_ENV === 'test' ? 'silent' : 'info'),
|
|
78
|
+
hooks: {
|
|
79
|
+
logMethod(args, method) {
|
|
80
|
+
method.apply(this, args.map((value) => scrubSecrets(value)));
|
|
81
|
+
},
|
|
66
82
|
},
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
formatters: {
|
|
84
|
+
bindings: (object) => scrubSecrets(object),
|
|
85
|
+
log(object) {
|
|
86
|
+
return scrubSecrets(object);
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
serializers: { msg: (value) => scrubSecrets(value) },
|
|
90
|
+
}, destination);
|
|
91
|
+
}
|
|
92
|
+
export const logger = createSafeLogger();
|
|
69
93
|
export const REDACTED_LOG_FIELDS = SECRET_FIELD_NAMES;
|
|
70
94
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { hasCredentialSignature } from "./credential-signatures.js";
|
|
2
|
+
import { dataSourceColumnNameDecision, isDataSourceColumnNamePosition, } from "./data-source-column-name.js";
|
|
3
|
+
/** Старые опубликованные ответы сохраняют обычные настройки; сырой шаг закрывается по форме. */
|
|
4
|
+
export function projectBridgeSecretRead(value) {
|
|
5
|
+
return projectRead(value, false, 0, { nodes: 0, ancestors: new WeakSet() });
|
|
6
|
+
}
|
|
7
|
+
const MAX_DEPTH = 64;
|
|
8
|
+
const MAX_NODES = 100000;
|
|
9
|
+
function projectRead(value, carrier, depth, budget, path = []) {
|
|
10
|
+
// Ошибка уходит в существующую безопасную квитанцию jsonToolResult, без повтора мутации.
|
|
11
|
+
if (depth > MAX_DEPTH || ++budget.nodes > MAX_NODES)
|
|
12
|
+
throw new Error("SECRET_READ_LIMIT");
|
|
13
|
+
if (typeof value === "string") {
|
|
14
|
+
if (isDataSourceColumnNamePosition(path) &&
|
|
15
|
+
!["***", "[REDACTED]", "[credential removed]"].includes(value) &&
|
|
16
|
+
dataSourceColumnNameDecision(value) !== "SAFE")
|
|
17
|
+
return "***";
|
|
18
|
+
// Проверяется каждый строковый лист, в том числе имена колонок в metadata.
|
|
19
|
+
if (hasCredentialSignature(value))
|
|
20
|
+
return "***";
|
|
21
|
+
return carrier
|
|
22
|
+
? value.replace(/([?&](?:token|api_key|secret|password)=)([^&#\s]+)/giu, (_whole, prefix, literal) => prefix + maskLiteral(literal))
|
|
23
|
+
: value;
|
|
24
|
+
}
|
|
25
|
+
if (value === null || typeof value !== "object")
|
|
26
|
+
return value;
|
|
27
|
+
if (budget.ancestors.has(value))
|
|
28
|
+
throw new Error("SECRET_READ_CYCLE");
|
|
29
|
+
budget.ancestors.add(value);
|
|
30
|
+
try {
|
|
31
|
+
if (Array.isArray(value))
|
|
32
|
+
return value.map((entry, index) => projectRead(entry, carrier, depth + 1, budget, [...path, index]));
|
|
33
|
+
if (value instanceof Date)
|
|
34
|
+
return value.toJSON();
|
|
35
|
+
const row = value;
|
|
36
|
+
const result = Object.create(null);
|
|
37
|
+
const step = typeof (row.step_type ?? row.stepType) === "string";
|
|
38
|
+
for (const [key, child] of Object.entries(row)) {
|
|
39
|
+
if (row.type === "SECRET" &&
|
|
40
|
+
[
|
|
41
|
+
"value",
|
|
42
|
+
"defaultValue",
|
|
43
|
+
"default_value",
|
|
44
|
+
"constant_value",
|
|
45
|
+
"constantValue",
|
|
46
|
+
"repeatConstantValue",
|
|
47
|
+
"repeat_constant_value",
|
|
48
|
+
].includes(key)) {
|
|
49
|
+
result[key] = child === null ? null : "***";
|
|
50
|
+
}
|
|
51
|
+
else if (step && key === "config" && row.configReadable === false) {
|
|
52
|
+
result.config = {};
|
|
53
|
+
result.configReadable = false;
|
|
54
|
+
}
|
|
55
|
+
else if (key === "before_blob" || key === "after_blob") {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
else if (/^(?:x)?(?:apikey|rawkey|accesstoken|refreshtoken|authtoken|clientsecret|webhooksecret|privatekey|token|secret|password|passwd|pwd|authorization|credentials|credentialsciphertext)$/iu.test(key.normalize("NFKC").replace(/[-_\s]/gu, ""))) {
|
|
59
|
+
result[key] =
|
|
60
|
+
child === null
|
|
61
|
+
? null
|
|
62
|
+
: typeof child === "string"
|
|
63
|
+
? maskLiteral(child)
|
|
64
|
+
: "***";
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result[key] = projectRead(child, key === "metadata" ||
|
|
68
|
+
key === "url_template" ||
|
|
69
|
+
(step && key === "config") ||
|
|
70
|
+
carrier, depth + 1, budget, key === "metadata" ? [] : [...path, key]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
budget.ancestors.delete(value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function maskLiteral(value) {
|
|
80
|
+
if (hasCredentialSignature(value))
|
|
81
|
+
return "***";
|
|
82
|
+
if (/^\s*(?:(?:Bearer|Basic|Token|Bot|Digest|ApiKey)\s+)?(?:\[REDACTED\]|\*\*\*)\s*$/iu.test(value))
|
|
83
|
+
return value;
|
|
84
|
+
return /^\s*(?:(?:Bearer|Basic|Token|Bot|Digest|ApiKey)\s+)?\{\{[^{}]+\}\}\s*$/iu.test(value)
|
|
85
|
+
? value
|
|
86
|
+
: "***";
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=secret-read-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-read-boundary.js","sourceRoot":"","sources":["../../src/utils/secret-read-boundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Только диагностическая проекция: URL настоящего сетевого запроса остаётся исходным. */
|
|
2
|
+
export declare function maskSetupSecretsInText(text: string): string;
|
|
3
|
+
/** Ref сохраняется для продолжения; адрес страницы в долговечное хранилище задач не записывается. */
|
|
4
|
+
export declare function containsSetupPageAddress(value: unknown): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Текстовые границы совпадают с серверной маской: хвост сообщения остаётся диагностикой. */
|
|
2
|
+
const CAPABILITY_PATH = /(\/(?:setup|[a-z0-9-]*setup-sessions|file-upload-sessions|credential-reveals)\/)[^/\s?#"'<>()\[\]{},;]+/giu;
|
|
3
|
+
const BITRIX_INSTALL_PATH = /(\/crm-connections\/[^/\s?#"'<>()\[\]{},;]+\/bitrix24\/install\/)[^/\s?#"'<>()\[\]{},;]+/giu;
|
|
4
|
+
const SECRET_QUERY_NAMES = new Set([
|
|
5
|
+
'setup_ref',
|
|
6
|
+
'setupref',
|
|
7
|
+
'code',
|
|
8
|
+
'state',
|
|
9
|
+
'ticket',
|
|
10
|
+
'token',
|
|
11
|
+
'access_token',
|
|
12
|
+
'accesstoken',
|
|
13
|
+
'secret',
|
|
14
|
+
'api_key',
|
|
15
|
+
'apikey',
|
|
16
|
+
]);
|
|
17
|
+
/** Только диагностическая проекция: URL настоящего сетевого запроса остаётся исходным. */
|
|
18
|
+
export function maskSetupSecretsInText(text) {
|
|
19
|
+
return text
|
|
20
|
+
.replace(CAPABILITY_PATH, (_match, prefix) => `${prefix}[REDACTED]`)
|
|
21
|
+
.replace(BITRIX_INSTALL_PATH, (_match, prefix) => `${prefix}[REDACTED]`)
|
|
22
|
+
.replace(/([?&])([^=&\s#]+)=([^&\s#"'<>)\]},;]*)/gu, (match, separator, name) => {
|
|
23
|
+
let decoded = name;
|
|
24
|
+
try {
|
|
25
|
+
decoded = decodeURIComponent(name);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
/* Битое имя не является известным именем секрета. */
|
|
29
|
+
}
|
|
30
|
+
return SECRET_QUERY_NAMES.has(decoded.toLowerCase())
|
|
31
|
+
? `${separator}${name}=[REDACTED]`
|
|
32
|
+
: match;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** Ref сохраняется для продолжения; адрес страницы в долговечное хранилище задач не записывается. */
|
|
36
|
+
export function containsSetupPageAddress(value) {
|
|
37
|
+
const serialized = JSON.stringify(value) ?? '';
|
|
38
|
+
return (/"(?:setup_page_url|setupPageUrl|upload_page_url|uploadPageUrl|auth_url|installation_url|revealUrl)"\s*:/u.test(serialized) || maskSetupSecretsInText(serialized) !== serialized);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=setup-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-secrets.js","sourceRoot":"","sources":["../../src/utils/setup-secrets.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,eAAe,GACnB,4GAA4G,CAAC;AAC/G,MAAM,mBAAmB,GACvB,6FAA6F,CAAC;AAChG,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,WAAW;IACX,UAAU;IACV,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,cAAc;IACd,aAAa;IACb,QAAQ;IACR,SAAS;IACT,QAAQ;CACT,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI;SACR,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SAC3E,OAAO,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,YAAY,CAAC;SAC/E,OAAO,CACN,0CAA0C,EAC1C,CAAC,KAAa,EAAE,SAAiB,EAAE,IAAY,EAAE,EAAE;QACjD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;QACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAClD,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,aAAa;YAClC,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC,CACF,CAAC;AACN,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/C,OAAO,CACL,0GAA0G,CAAC,IAAI,CAC7G,UAAU,CACX,IAAI,sBAAsB,CAAC,UAAU,CAAC,KAAK,UAAU,CACvD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Выбор модели агента
|
|
2
|
+
|
|
3
|
+
`besales_agent_models_list` читает GET /api/v2/workspaces/{workspaceId}/agent-models с правом read:agents. Рабочая область — текущая подключённая, либо явный workspace_id; agent_id необязателен и уточняет ориентир цены по инструкции и фактам. Инструмент ничего не пишет и не вызывает модель. Каталог сравнения моделей остаётся отдельным инструментом.
|
|
4
|
+
|
|
5
|
+
`besales_agent_update` сохраняет прежний вход и PATCH канальной проекции. Отсутствующий model не добавляется в тело запроса; прежний неизменённый неизвестный model допускается сервером. Новый выбор проверяет серверный каталог, алиасы приводит сервер. model=null на канальном входе не допускается. Новая обязательная версия клиента не нужна: последнее успешное сохранение побеждает.
|
|
6
|
+
|
|
7
|
+
get/list/update сохраняют технические runtimeConfig и effectiveModel целиком. При effectiveModel.substitutedFrom !== null добавляется безопасный modelNotice на языке BESALES_LOCALE (ru/en/es/id/uz; неизвестный язык — ru). Человек видит предложение выбрать другую модель; исходный ID не используется как подпись. Пустой или непрочитанный каталог не служит командой сбросить выбор.
|
|
8
|
+
|
|
9
|
+
Схемы каталога и подсказки выпускаются из исполняемых определений: yarn build → yarn schemas:sync:agent-models. Типы API: yarn types:gen:api после выпуска OpenAPI. Финальная карта маршрутов выпускается штатным scripts/emit-tool-routes.mjs после коммита моста владельцем интеграции.
|
|
@@ -95,9 +95,6 @@ Claude Code / Codex ← здесь живёт AI-агент: понимает
|
|
|
95
95
|
|
|
96
96
|
## 3. Подключение (Claude Code и Codex)
|
|
97
97
|
|
|
98
|
-
Отдельная пошаговая инструкция, включая закрепление сервера за компанией и обновление, —
|
|
99
|
-
[connect.ru.md](connect.ru.md).
|
|
100
|
-
|
|
101
98
|
> Делается **один раз**. Если не дружишь с терминалом — попроси технического коллегу:
|
|
102
99
|
> это пара команд, дальше нужен только чат.
|
|
103
100
|
|
|
@@ -334,7 +331,6 @@ npx -y @besales/mcp connect
|
|
|
334
331
|
| Каналы | подключить канал, настройки | `besales_platform_create_init` / `_oauth_init` / `_create_status`, `besales_platform_settings_update` |
|
|
335
332
|
| Боты и промпты | создать бота, сочинить/улучшить промпт, скелет диалога, приветствие | `besales_agent_*`, `besales_prompt_*`, `besales_dialog_script_*`, `besales_behavior_update` |
|
|
336
333
|
| Действия бота | что бот делает по условиям, несколько ботов + переключение | `besales_trigger_upsert` / `besales_trigger_delete`, `besales_routing_rule_upsert`, `besales_router_update` |
|
|
337
|
-
| Права одноразовых действий | разрешить триггеру «один раз на контакт» сработать снова | `besales_trigger_claim_list`, `besales_trigger_claim_reset` |
|
|
338
334
|
| База знаний | хранилища, документы, вопросы-ответы, таблицы, сайты | `besales_knowledge_*` |
|
|
339
335
|
| Клиент (портрет) | портрет клиента, импорт диалогов, учебные ситуации | `besales_icp_*`, `besales_test_scenario_generate_*` |
|
|
340
336
|
| CRM | подключить, активировать, воронки, поля, операторы | `besales_crm_*` |
|
|
@@ -343,6 +339,7 @@ npx -y @besales/mcp connect
|
|
|
343
339
|
| Сравнение моделей | «соревнование» моделей на твоём промпте | `besales_model_*` |
|
|
344
340
|
| Файлы/таблицы | загрузка файлов, чтение Excel/Sheets | `besales_file_*`, `besales_workbook_*` |
|
|
345
341
|
| Напоминания/фидбэк | догоны клиентам, замечания из Google-листа | `besales_followup_sequence_upsert`, `besales_feedback_sheet_*` |
|
|
342
|
+
| Отчёты | как сработали рассылки, на какой догон люди отвечают, переписки за период | `besales_broadcast_analytics_get`, `besales_followup_reactions`, `besales_followup_step_stats`, `besales_dialogues_query` |
|
|
346
343
|
| Откат/копирование | откатить правку, скопировать на другой канал | `besales_audit_revert`, `besales_platform_clone_*` |
|
|
347
344
|
|
|
348
345
|
---
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Контракт аналитики
|
|
2
|
+
|
|
3
|
+
Входящие — отдельный источник. В текущем API построены денежный отчёт `money` и темы `topics`;
|
|
4
|
+
серверные `summary`, `speed`, `cycle`, `quality` ещё не построены. Все шесть отгруженных значений и
|
|
5
|
+
отдельные адреса сохранены. Четыре строки `routeLag` в `shipped-lag.json` с классом `ROUTE_ABSENT`
|
|
6
|
+
проверяются против снимка API и выгружаются серверным сторожам. Исчезновение долга либо его
|
|
7
|
+
сохранение после появления маршрута краснит проверку. Описание инструмента сообщает эту
|
|
8
|
+
границу до вызова. Отказ маршрута не означает отсутствие данных.
|
|
9
|
+
|
|
10
|
+
В `besales_inbound_analytics_get` правило периода едино для всех шести значений `report`:
|
|
11
|
+
`summary`, `topics`, `speed`, `money`, `cycle`, `quality`. На входе инструмента `from` и `to`
|
|
12
|
+
принимаются как ISO-моменты с обязательным часовым поясом (`Z` или смещение), на входе сервера —
|
|
13
|
+
как календарные даты `YYYY-MM-DD`. Мост переводит каждый момент в дату суток `Europe/Moscow`;
|
|
14
|
+
зона машины и дата в исходном часовом поясе не определяют результат.
|
|
15
|
+
|
|
16
|
+
Сутки Москвы начинаются в `00:00+03:00`, то есть в `21:00Z` предыдущей даты UTC. Например,
|
|
17
|
+
`2026-10-27T21:00:00Z` превращается в `2026-10-28`. Граница `from` задаёт начало этих суток,
|
|
18
|
+
а `to` включает полученную календарную дату целиком: исключительная верхняя граница на
|
|
19
|
+
бэкенде — начало следующих суток МСК. Для `to`, приведённого к `2026-10-28`, это
|
|
20
|
+
`2026-10-29T00:00:00+03:00`, или `2026-10-28T21:00:00Z`.
|
|
21
|
+
|
|
22
|
+
Отгруженные `platform_id` и `channels` передаются серверу как `channelId` и `transports`;
|
|
23
|
+
названия транспортов переводятся в верхний регистр без изменения внешних аргументов.
|
|
24
|
+
|
|
25
|
+
Список воронки `drilldown` отдаёт имена, логины, телефоны и ссылки CRM, поэтому инструмент
|
|
26
|
+
помечен носителем персональных данных клиентов и требует `read:analytics` + `read:conversations`.
|
|
27
|
+
Агрегатные отчёты воронки требуют только `read:analytics`. Право `read:conversations` входит в
|
|
28
|
+
`mcp:*`; только `read:contacts` подключается отдельным согласием и не входит в `mcp:*`.
|
|
29
|
+
Пара `read:analytics` + `read:conversations` требуется и для строки регистраций
|
|
30
|
+
`registration_intake` в фасаде рассылок. У неё доступна ось периода регистрации; оси входа
|
|
31
|
+
в сегмент и когорты отвергаются. Сверка пространства и потребители здоровья не обещаются.
|
|
32
|
+
|
|
33
|
+
Путь до стадии принимает канал и целевой статус. Неприменимые поля периода, вида и менеджера
|
|
34
|
+
отвергаются с адресом поля; дополнительные координаты списка не теряются у других отчётов.
|
|
35
|
+
Список знает перечисление метрик и потолок страницы сервера. Для личного Telegram идентификатор
|
|
36
|
+
канала берётся из `besales_platform_context_get`; прежний идентификатор площадки даст 404.
|
|
37
|
+
|
|
38
|
+
Ошибки отправки используют людей выбранной когорты либо всех людей канала в режиме периода.
|
|
39
|
+
Доказанные события отказа у этих людей берутся за всё время, без окна события.
|
|
40
|
+
|
|
41
|
+
В аналитике рассылок агрегаты доступны с `read:analytics`. Персональные отчёты `recipients`
|
|
42
|
+
(включая `recipient_metric=notSent`), `deals`, `action_failures`, `indirect_payments`,
|
|
43
|
+
`recent_leads`, `payment_candidates` и `registration_intake` требуют также `read:conversations`.
|
|
44
|
+
Отдельный список `besales_broadcast_payment_candidates_list` и лента `besales_tracked_link_clicks`
|
|
45
|
+
требуют ту же пару. Для находок `besales_dialog_review_findings` и его отгруженного имени
|
|
46
|
+
`besales_dialogue_audit_findings` нужна пара `read:agents` + `read:conversations`: находка
|
|
47
|
+
содержит цитату реплики человека.
|
|
48
|
+
|
|
49
|
+
Каталог отслеживаемых ссылок меняется с `write:analytics-catalog`, которое входит в
|
|
50
|
+
`mcp:platform-setup`. В `target_url` можно использовать `{firstName}`, `{lastName}`, `{fullName}`,
|
|
51
|
+
`{email}`, `{phone}`, `{username}`, `{getcourseUserId}`, `{getcourseDealId}`, `{followUpStep}`.
|
|
52
|
+
Указывайте переменную только как целое значение query-параметра, например `?email={email}`
|
|
53
|
+
или `?email=%7Bemail%7D`. Подставленное значение URL-кодируется; отсутствующее или пустое
|
|
54
|
+
значение удаляет весь параметр. Номер дожима имеет форму `pN` только в `FOLLOWUP`; вне дожима
|
|
55
|
+
параметр удаляется. Имя, фамилия и почта берутся из карточки контакта, полное имя собирается
|
|
56
|
+
из доступных частей, телефон содержит только цифры, логин — из текущей идентичности,
|
|
57
|
+
номера GetCourse — из контекста школы отправки.
|
|
58
|
+
|
|
59
|
+
Переменные в хосте, пути, фрагменте, имени параметра или части его значения и новый чужой
|
|
60
|
+
рекламный макрос приводят к отказу 400. Старый чужой макрос сохраняется до реальной смены
|
|
61
|
+
адреса. Персональный шаблон требует HTTPS и `read:contacts` при создании или реальной смене
|
|
62
|
+
цели. Это право выдаётся мосту через отдельное согласие подключения и не входит в `mcp:*`.
|
|
63
|
+
Повтор прежней цели, переименование и восстановление ссылки не требуют этого дополнительного
|
|
64
|
+
права. Уже отправленные персональные коды сохраняют снимок прежней цели; новые выдачи и
|
|
65
|
+
анонимный `staticUrl` используют новую цель.
|
|
66
|
+
|
|
67
|
+
Источник звонков воронки: velocity отдаёт одинаковые `responseSpeed.callSourceState` и `callsSourceState`; managers — `callSourceState`. Три состояния: не настроен, исправен, отстал. Свежесть `callsPolledAt` — подтверждённая граница полного чтения; null не заменяется временем страницы. `callsFailingTargets` называет число нечитаемых сущностей; `callsStaleReasonText` даёт причину словами языка запроса. При отставании `callsIncluded` остаётся истинным: история звонков не удаляется. `CAPACITY` определяется возрастом старейшей непрочитанной горячей цели, независимо от снимка остатка; один ненулевой свежий хвост не тревога. Ограниченный бюджет подтверждается сценарием настоящего обхода. Первый круг после переноса — отставание до полного покрытия. Удалённые подключения не входят в живое состояние, хотя их история остаётся в цифрах.
|
|
@@ -21,6 +21,7 @@ read-only status-инструмент. Стартовый ответ не явл
|
|
|
21
21
|
| `besales_file_upload_request` | `besales_file_upload_status` | сессия сама истекает |
|
|
22
22
|
| `besales_platform_create_init`, `besales_platform_create_oauth_init` | `besales_platform_create_status` | сессия сама истекает |
|
|
23
23
|
| `besales_crm_create_init` | `besales_crm_create_status` | сессия сама истекает |
|
|
24
|
+
| `besales_crm_rotate_init` | `besales_crm_rotate_status` | сессия сама истекает: браузерная ссылка с ограниченным сроком |
|
|
24
25
|
| `besales_datasource_create_init` | `besales_datasource_create_status` | сессия сама истекает |
|
|
25
26
|
| `besales_model_comparison_run_start` | `besales_model_comparison_get` | нет: уже начатые LLM-вызовы оплачены |
|
|
26
27
|
| `besales_followup_funnel_test_start` | `besales_followup_funnel_test_status` | cancel |
|
|
@@ -29,18 +30,24 @@ read-only status-инструмент. Стартовый ответ не явл
|
|
|
29
30
|
| `besales_getcourse_contacts_import` | `besales_getcourse_contact_import_status` | нет: повтор обновляет те же карточки |
|
|
30
31
|
| `besales_getcourse_anchor_refresh_start` | `besales_getcourse_anchor_refresh_status` | нет: частично переписанные даты необратимы |
|
|
31
32
|
| `besales_dialogue_audit_run_start` | `besales_dialogue_audit_run_get` | cancel; остаток подхватит новый прогон |
|
|
33
|
+
| `besales_dialog_review_run_start` | `besales_dialog_review_launch_outcome` | cancel; находки разобранных отрезков остаются |
|
|
34
|
+
| `besales_improvement_aggregate_start` | `besales_improvement_aggregate_launch_outcome` | нет отдельной остановки |
|
|
32
35
|
|
|
33
36
|
Опрос делается с паузой, указанной инструментом, до terminal state. `PARTIAL` требует проверить
|
|
34
37
|
счётчики и ошибки. `STALLED` не равен безопасному отказу: сначала проверяется уже записанный
|
|
35
38
|
результат и аудит, затем принимается решение о повторе.
|
|
36
39
|
|
|
40
|
+
У платных запусков с ключом намерения (`besales_dialog_review_run_start`,
|
|
41
|
+
`besales_improvement_aggregate_start`) status читает исход по исходному ключу. Исход `UNKNOWN` не
|
|
42
|
+
разрешает новый платный запуск автоматически: сначала выясняется, был ли первый принят.
|
|
43
|
+
|
|
37
44
|
## Синхронные похожие имена
|
|
38
45
|
|
|
39
46
|
`besales_prompt_patch_start` синхронно создаёт draft; его дальнейший жизненный цикл —
|
|
40
47
|
`get/apply/commit/discard`. `besales_dialogue_audit_import` синхронно принимает находки и двигает
|
|
41
|
-
|
|
42
|
-
отдельный job-status не нужен.
|
|
48
|
+
отметку разобранных отрезков. Для них отдельный job-status не нужен.
|
|
43
49
|
|
|
44
50
|
Регрессионный тест `src/tools/async-lifecycle.spec.ts` перечисляет все инструменты с суффиксами
|
|
45
51
|
`start/init/import/execute/request/reindex/resume`. Новый похожий инструмент обязан быть добавлен
|
|
46
|
-
в канон либо явно классифицирован как синхронный.
|
|
52
|
+
в канон либо явно классифицирован как синхронный. Тест же сверяет эту таблицу с каноном: каждая
|
|
53
|
+
пара «start — status» из теста обязана быть названа здесь.
|